Merge branch 'dev'
authorkhizmax <libcds.dev@gmail.com>
Mon, 30 May 2016 20:53:16 +0000 (23:53 +0300)
committerkhizmax <libcds.dev@gmail.com>
Mon, 30 May 2016 20:53:16 +0000 (23:53 +0300)
Migrated tests to gtest framework

1567 files changed:
.gitignore
CMakeLists.txt
build/Makefile [deleted file]
build/build.sh [deleted file]
build/cmake/readme.md
build/sample/build-freebsd-amd64.sh [deleted file]
build/sample/build-hpux1123.sh [deleted file]
build/sample/build-hpux1131.sh [deleted file]
build/sample/build-linux-amd64.sh [deleted file]
build/sample/build-linux-ia64.sh [deleted file]
build/sample/build-linux-ppc64.sh [deleted file]
build/sample/build-linux-sparc.sh [deleted file]
build/sample/build-linux-x86.sh [deleted file]
build/sample/build-mingw-amd64.bat [deleted file]
build/sample/build-osx-clang-libc++.sh [deleted file]
build/sample/build-osx-gcc.sh [deleted file]
build/sample/build-sun-sparc.sh [deleted file]
cds/algo/atomic.h
cds/algo/flat_combining.h
cds/algo/int_algo.h
cds/container/basket_queue.h
cds/container/bronson_avltree_map_rcu.h
cds/container/cuckoo_map.h
cds/container/cuckoo_set.h
cds/container/details/bronson_avltree_base.h
cds/container/details/ellen_bintree_base.h
cds/container/details/feldman_hashmap_base.h
cds/container/details/lazy_list_base.h
cds/container/details/make_lazy_kvlist.h
cds/container/details/make_lazy_list.h
cds/container/details/make_michael_kvlist.h
cds/container/details/make_skip_list_map.h
cds/container/ellen_bintree_map_rcu.h
cds/container/ellen_bintree_set_rcu.h
cds/container/fcdeque.h
cds/container/fcpriority_queue.h
cds/container/fcqueue.h
cds/container/fcstack.h
cds/container/feldman_hashmap_rcu.h
cds/container/feldman_hashset_rcu.h
cds/container/impl/bronson_avltree_map_rcu.h
cds/container/impl/ellen_bintree_map.h
cds/container/impl/ellen_bintree_set.h
cds/container/impl/feldman_hashmap.h
cds/container/impl/feldman_hashset.h
cds/container/impl/lazy_kvlist.h
cds/container/impl/lazy_list.h
cds/container/impl/michael_kvlist.h
cds/container/impl/michael_list.h
cds/container/impl/skip_list_map.h
cds/container/impl/skip_list_set.h
cds/container/lazy_kvlist_nogc.h
cds/container/lazy_kvlist_rcu.h
cds/container/lazy_list_nogc.h
cds/container/lazy_list_rcu.h
cds/container/michael_kvlist_nogc.h
cds/container/michael_kvlist_rcu.h
cds/container/michael_list_nogc.h
cds/container/michael_list_rcu.h
cds/container/michael_map.h
cds/container/michael_map_nogc.h
cds/container/michael_map_rcu.h
cds/container/michael_set.h
cds/container/michael_set_nogc.h
cds/container/michael_set_rcu.h
cds/container/moir_queue.h
cds/container/mspriority_queue.h
cds/container/msqueue.h
cds/container/optimistic_queue.h
cds/container/rwqueue.h
cds/container/segmented_queue.h
cds/container/skip_list_map_nogc.h
cds/container/skip_list_map_rcu.h
cds/container/skip_list_set_nogc.h
cds/container/skip_list_set_rcu.h
cds/container/split_list_map.h
cds/container/split_list_map_nogc.h
cds/container/split_list_map_rcu.h
cds/container/split_list_set.h
cds/container/split_list_set_nogc.h
cds/container/split_list_set_rcu.h
cds/container/striped_map.h
cds/container/striped_map/boost_flat_map.h
cds/container/striped_map/boost_list.h
cds/container/striped_map/boost_slist.h
cds/container/striped_map/std_hash_map.h
cds/container/striped_map/std_list.h
cds/container/striped_map/std_map.h
cds/container/striped_set.h
cds/container/striped_set/adapter.h
cds/container/treiber_stack.h
cds/container/tsigas_cycle_queue.h
cds/container/vyukov_mpmc_cycle_queue.h
cds/details/defs.h
cds/intrusive/basket_queue.h
cds/intrusive/cuckoo_set.h
cds/intrusive/details/ellen_bintree_base.h
cds/intrusive/details/lazy_list_base.h
cds/intrusive/details/michael_set_base.h
cds/intrusive/details/raw_ptr_disposer.h
cds/intrusive/details/single_link_struct.h
cds/intrusive/details/skip_list_base.h
cds/intrusive/details/split_list_base.h
cds/intrusive/ellen_bintree_rcu.h
cds/intrusive/fcqueue.h
cds/intrusive/feldman_hashset_rcu.h
cds/intrusive/free_list.h [new file with mode: 0644]
cds/intrusive/free_list_tagged.h [new file with mode: 0644]
cds/intrusive/impl/ellen_bintree.h
cds/intrusive/impl/feldman_hashset.h
cds/intrusive/impl/lazy_list.h
cds/intrusive/impl/michael_list.h
cds/intrusive/impl/skip_list.h
cds/intrusive/lazy_list_nogc.h
cds/intrusive/lazy_list_rcu.h
cds/intrusive/michael_list_hp.h
cds/intrusive/michael_list_nogc.h
cds/intrusive/michael_list_rcu.h
cds/intrusive/michael_set.h
cds/intrusive/michael_set_nogc.h
cds/intrusive/michael_set_rcu.h
cds/intrusive/moir_queue.h
cds/intrusive/mspriority_queue.h
cds/intrusive/optimistic_queue.h
cds/intrusive/options.h
cds/intrusive/segmented_queue.h
cds/intrusive/skip_list_nogc.h
cds/intrusive/skip_list_rcu.h
cds/intrusive/split_list.h
cds/intrusive/split_list_nogc.h
cds/intrusive/split_list_rcu.h
cds/intrusive/striped_set/adapter.h
cds/intrusive/treiber_stack.h
cds/intrusive/tsigas_cycle_queue.h
cds/intrusive/vyukov_mpmc_cycle_queue.h
cds/memory/vyukov_queue_pool.h
cds/opt/buffer.h
cds/opt/options.h
cds/sync/monitor.h
cds/urcu/raw_ptr.h
cds/version.h
change.log
doxygen/cds.doxy
doxygen/footer.html
projects/Win/vc12/cds.sln [deleted file]
projects/Win/vc12/cds.vcxproj [deleted file]
projects/Win/vc12/cds.vcxproj.filters [deleted file]
projects/Win/vc12/hdr-test-deque.vcxproj [deleted file]
projects/Win/vc12/hdr-test-list.vcxproj [deleted file]
projects/Win/vc12/hdr-test-list.vcxproj.filters [deleted file]
projects/Win/vc12/hdr-test-map.vcxproj [deleted file]
projects/Win/vc12/hdr-test-map.vcxproj.filters [deleted file]
projects/Win/vc12/hdr-test-misc.vcxproj [deleted file]
projects/Win/vc12/hdr-test-priority_queue.vcxproj [deleted file]
projects/Win/vc12/hdr-test-priority_queue.vcxproj.filters [deleted file]
projects/Win/vc12/hdr-test-queue.vcxproj [deleted file]
projects/Win/vc12/hdr-test-queue.vcxproj.filters [deleted file]
projects/Win/vc12/hdr-test-set.vcxproj [deleted file]
projects/Win/vc12/hdr-test-set.vcxproj.filters [deleted file]
projects/Win/vc12/hdr-test-stack.vcxproj [deleted file]
projects/Win/vc12/hdr-test-striped-set.vcxproj [deleted file]
projects/Win/vc12/hdr-test-striped-set.vcxproj.filters [deleted file]
projects/Win/vc12/hdr-test-tree.vcxproj [deleted file]
projects/Win/vc12/hdr-test-tree.vcxproj.filters [deleted file]
projects/Win/vc12/unit-map-delodd.vcxproj [deleted file]
projects/Win/vc12/unit-map-find.vcxproj [deleted file]
projects/Win/vc12/unit-map-find.vcxproj.filters [deleted file]
projects/Win/vc12/unit-map-insdel-item.vcxproj [deleted file]
projects/Win/vc12/unit-map-insdel-item.vcxproj.filters [deleted file]
projects/Win/vc12/unit-map-insdel.vcxproj [deleted file]
projects/Win/vc12/unit-map-insdel.vcxproj.filters [deleted file]
projects/Win/vc12/unit-map-insdelfind.vcxproj [deleted file]
projects/Win/vc12/unit-misc.vcxproj [deleted file]
projects/Win/vc12/unit-misc.vcxproj.filters [deleted file]
projects/Win/vc12/unit-pqueue.vcxproj [deleted file]
projects/Win/vc12/unit-prerequisites.vcxproj [deleted file]
projects/Win/vc12/unit-queue.vcxproj [deleted file]
projects/Win/vc12/unit-set-delodd.vcxproj [deleted file]
projects/Win/vc12/unit-set-insdel.vcxproj [deleted file]
projects/Win/vc12/unit-set-insdel.vcxproj.filters [deleted file]
projects/Win/vc12/unit-set-insdelfind.vcxproj [deleted file]
projects/Win/vc12/unit-stack.vcxproj [deleted file]
projects/Win/vc14/cds.sln
projects/Win/vc14/cds.vcxproj
projects/Win/vc14/cds.vcxproj.filters
projects/Win/vc14/gtest-deque.vcxproj [new file with mode: 0644]
projects/Win/vc14/gtest-deque.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/gtest-intrusive-set.vcxproj [new file with mode: 0644]
projects/Win/vc14/gtest-intrusive-set.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/gtest-list.vcxproj [new file with mode: 0644]
projects/Win/vc14/gtest-list.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/gtest-map.vcxproj [new file with mode: 0644]
projects/Win/vc14/gtest-map.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/gtest-misc.vcxproj [new file with mode: 0644]
projects/Win/vc14/gtest-misc.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/gtest-pqueue.vcxproj [new file with mode: 0644]
projects/Win/vc14/gtest-pqueue.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/gtest-queue.vcxproj [new file with mode: 0644]
projects/Win/vc14/gtest-queue.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/gtest-set.vcxproj [new file with mode: 0644]
projects/Win/vc14/gtest-set.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/gtest-stack.vcxproj [new file with mode: 0644]
projects/Win/vc14/gtest-stack.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/gtest-striped-map.vcxproj [new file with mode: 0644]
projects/Win/vc14/gtest-striped-map.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/gtest-striped-set.vcxproj [new file with mode: 0644]
projects/Win/vc14/gtest-striped-set.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/gtest-tree.vcxproj [new file with mode: 0644]
projects/Win/vc14/gtest-tree.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/hdr-test-deque.vcxproj [deleted file]
projects/Win/vc14/hdr-test-list.vcxproj [deleted file]
projects/Win/vc14/hdr-test-list.vcxproj.filters [deleted file]
projects/Win/vc14/hdr-test-map.vcxproj [deleted file]
projects/Win/vc14/hdr-test-map.vcxproj.filters [deleted file]
projects/Win/vc14/hdr-test-misc.vcxproj [deleted file]
projects/Win/vc14/hdr-test-priority_queue.vcxproj [deleted file]
projects/Win/vc14/hdr-test-priority_queue.vcxproj.filters [deleted file]
projects/Win/vc14/hdr-test-queue.vcxproj [deleted file]
projects/Win/vc14/hdr-test-queue.vcxproj.filters [deleted file]
projects/Win/vc14/hdr-test-set.vcxproj [deleted file]
projects/Win/vc14/hdr-test-set.vcxproj.filters [deleted file]
projects/Win/vc14/hdr-test-stack.vcxproj [deleted file]
projects/Win/vc14/hdr-test-striped-set.vcxproj [deleted file]
projects/Win/vc14/hdr-test-striped-set.vcxproj.filters [deleted file]
projects/Win/vc14/hdr-test-tree.vcxproj [deleted file]
projects/Win/vc14/hdr-test-tree.vcxproj.filters [deleted file]
projects/Win/vc14/stress-framework.vcxproj [new file with mode: 0644]
projects/Win/vc14/stress-framework.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/stress-map-delodd.vcxproj [new file with mode: 0644]
projects/Win/vc14/stress-map-delodd.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/stress-map-find_int.vcxproj [new file with mode: 0644]
projects/Win/vc14/stress-map-find_int.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/stress-map-find_string.vcxproj [new file with mode: 0644]
projects/Win/vc14/stress-map-find_string.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/stress-map-insdel-func.vcxproj [new file with mode: 0644]
projects/Win/vc14/stress-map-insdel-func.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/stress-map-insdel-int.vcxproj [new file with mode: 0644]
projects/Win/vc14/stress-map-insdel-int.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/stress-map-insdel-item-int.vcxproj [new file with mode: 0644]
projects/Win/vc14/stress-map-insdel-item-int.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/stress-map-insdel-string.vcxproj [new file with mode: 0644]
projects/Win/vc14/stress-map-insdel-string.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/stress-map-insdelfind.vcxproj [new file with mode: 0644]
projects/Win/vc14/stress-map-insdelfind.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/stress-map-insfind-int.vcxproj [new file with mode: 0644]
projects/Win/vc14/stress-map-insfind-int.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/stress-pqueue.vcxproj [new file with mode: 0644]
projects/Win/vc14/stress-pqueue.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/stress-queue.vcxproj [new file with mode: 0644]
projects/Win/vc14/stress-queue.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/stress-set-delodd.vcxproj [new file with mode: 0644]
projects/Win/vc14/stress-set-delodd.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/stress-set-insdel_func.vcxproj [new file with mode: 0644]
projects/Win/vc14/stress-set-insdel_func.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/stress-set-insdel_string.vcxproj [new file with mode: 0644]
projects/Win/vc14/stress-set-insdel_string.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/stress-set-insdelfind.vcxproj [new file with mode: 0644]
projects/Win/vc14/stress-set-insdelfind.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/stress-stack.vcxproj [new file with mode: 0644]
projects/Win/vc14/stress-stack.vcxproj.filters [new file with mode: 0644]
projects/Win/vc14/unit-map-delodd.vcxproj [deleted file]
projects/Win/vc14/unit-map-find.vcxproj [deleted file]
projects/Win/vc14/unit-map-find.vcxproj.filters [deleted file]
projects/Win/vc14/unit-map-insdel-item.vcxproj [deleted file]
projects/Win/vc14/unit-map-insdel-item.vcxproj.filters [deleted file]
projects/Win/vc14/unit-map-insdel.vcxproj [deleted file]
projects/Win/vc14/unit-map-insdel.vcxproj.filters [deleted file]
projects/Win/vc14/unit-map-insdelfind.vcxproj [deleted file]
projects/Win/vc14/unit-misc.vcxproj [deleted file]
projects/Win/vc14/unit-misc.vcxproj.filters [deleted file]
projects/Win/vc14/unit-pqueue.vcxproj [deleted file]
projects/Win/vc14/unit-prerequisites.vcxproj [deleted file]
projects/Win/vc14/unit-queue.vcxproj [deleted file]
projects/Win/vc14/unit-set-delodd.vcxproj [deleted file]
projects/Win/vc14/unit-set-insdel.vcxproj [deleted file]
projects/Win/vc14/unit-set-insdel.vcxproj.filters [deleted file]
projects/Win/vc14/unit-set-insdelfind.vcxproj [deleted file]
projects/Win/vc14/unit-stack.vcxproj [deleted file]
projects/android/jni/Android.mk [deleted file]
projects/android/jni/Application.mk [deleted file]
projects/android/jni/build.sh [deleted file]
projects/source.libcds.mk [deleted file]
projects/source.test-common.mk [deleted file]
projects/source.test-hdr.mk [deleted file]
projects/source.test-hdr.offsetof.mk [deleted file]
projects/source.unit.map.mk [deleted file]
projects/source.unit.misc.mk [deleted file]
projects/source.unit.pqueue.mk [deleted file]
projects/source.unit.queue.mk [deleted file]
projects/source.unit.set.mk [deleted file]
projects/source.unit.stack.mk [deleted file]
readme.md
test/CMakeLists.txt [new file with mode: 0644]
test/include/cds_test/check_size.h [new file with mode: 0644]
test/include/cds_test/city.h [new file with mode: 0644]
test/include/cds_test/citycrc.h [new file with mode: 0644]
test/include/cds_test/fixture.h [new file with mode: 0644]
test/include/cds_test/hash_func.h [new file with mode: 0644]
test/include/cds_test/stat_bronson_avltree_out.h [new file with mode: 0644]
test/include/cds_test/stat_cuckoo_out.h [new file with mode: 0644]
test/include/cds_test/stat_ellenbintree_out.h [new file with mode: 0644]
test/include/cds_test/stat_feldman_hashset_out.h [new file with mode: 0644]
test/include/cds_test/stat_skiplist_out.h [new file with mode: 0644]
test/include/cds_test/stat_splitlist_out.h [new file with mode: 0644]
test/include/cds_test/stat_sync_monitor_out.h [new file with mode: 0644]
test/include/cds_test/stress_test.h [new file with mode: 0644]
test/include/cds_test/thread.h [new file with mode: 0644]
test/stress/CMakeLists.txt [new file with mode: 0644]
test/stress/data/split.pl [new file with mode: 0644]
test/stress/data/test-debug.conf [new file with mode: 0644]
test/stress/data/test-express.conf [new file with mode: 0644]
test/stress/data/test.conf [new file with mode: 0644]
test/stress/data/text.txt [new file with mode: 0644]
test/stress/framework/city.cpp [new file with mode: 0644]
test/stress/framework/city.h [new file with mode: 0644]
test/stress/framework/config.cpp [new file with mode: 0644]
test/stress/framework/ellen_bintree_update_desc_pool.cpp [new file with mode: 0644]
test/stress/framework/ellen_bintree_update_desc_pool.h [new file with mode: 0644]
test/stress/framework/michael_alloc.cpp [new file with mode: 0644]
test/stress/framework/michael_alloc.h [new file with mode: 0644]
test/stress/framework/stress_test.cpp [new file with mode: 0644]
test/stress/lock/win32_lock.h [new file with mode: 0644]
test/stress/main.cpp [new file with mode: 0644]
test/stress/map/CMakeLists.txt [new file with mode: 0644]
test/stress/map/delodd/CMakeLists.txt [new file with mode: 0644]
test/stress/map/delodd/map_delodd.cpp [new file with mode: 0644]
test/stress/map/delodd/map_delodd.h [new file with mode: 0644]
test/stress/map/delodd/map_delodd_bronsonavltree.cpp [new file with mode: 0644]
test/stress/map/delodd/map_delodd_cuckoo.cpp [new file with mode: 0644]
test/stress/map/delodd/map_delodd_ellentree.cpp [new file with mode: 0644]
test/stress/map/delodd/map_delodd_feldman_hashset.cpp [new file with mode: 0644]
test/stress/map/delodd/map_delodd_michael.cpp [new file with mode: 0644]
test/stress/map/delodd/map_delodd_skip.cpp [new file with mode: 0644]
test/stress/map/delodd/map_delodd_split.cpp [new file with mode: 0644]
test/stress/map/find_int/CMakeLists.txt [new file with mode: 0644]
test/stress/map/find_int/map_find_int.cpp [new file with mode: 0644]
test/stress/map/find_int/map_find_int.h [new file with mode: 0644]
test/stress/map/find_int/map_find_int_bronsonavltree.cpp [new file with mode: 0644]
test/stress/map/find_int/map_find_int_cuckoo.cpp [new file with mode: 0644]
test/stress/map/find_int/map_find_int_ellentree.cpp [new file with mode: 0644]
test/stress/map/find_int/map_find_int_feldman_hashset.cpp [new file with mode: 0644]
test/stress/map/find_int/map_find_int_michael.cpp [new file with mode: 0644]
test/stress/map/find_int/map_find_int_skip.cpp [new file with mode: 0644]
test/stress/map/find_int/map_find_int_split.cpp [new file with mode: 0644]
test/stress/map/find_int/map_find_int_std.cpp [new file with mode: 0644]
test/stress/map/find_int/map_find_int_striped.cpp [new file with mode: 0644]
test/stress/map/find_string/CMakeLists.txt [new file with mode: 0644]
test/stress/map/find_string/map_find_string.cpp [new file with mode: 0644]
test/stress/map/find_string/map_find_string.h [new file with mode: 0644]
test/stress/map/find_string/map_find_string_bronsonavltree.cpp [new file with mode: 0644]
test/stress/map/find_string/map_find_string_cuckoo.cpp [new file with mode: 0644]
test/stress/map/find_string/map_find_string_ellentree.cpp [new file with mode: 0644]
test/stress/map/find_string/map_find_string_feldman_hashset.cpp [new file with mode: 0644]
test/stress/map/find_string/map_find_string_michael.cpp [new file with mode: 0644]
test/stress/map/find_string/map_find_string_skip.cpp [new file with mode: 0644]
test/stress/map/find_string/map_find_string_split.cpp [new file with mode: 0644]
test/stress/map/find_string/map_find_string_std.cpp [new file with mode: 0644]
test/stress/map/find_string/map_find_string_striped.cpp [new file with mode: 0644]
test/stress/map/insdel_func/CMakeLists.txt [new file with mode: 0644]
test/stress/map/insdel_func/map_insdel_func.cpp [new file with mode: 0644]
test/stress/map/insdel_func/map_insdel_func.h [new file with mode: 0644]
test/stress/map/insdel_func/map_insdel_func_bronsonavltree.cpp [new file with mode: 0644]
test/stress/map/insdel_func/map_insdel_func_cuckoo.cpp [new file with mode: 0644]
test/stress/map/insdel_func/map_insdel_func_ellentree.cpp [new file with mode: 0644]
test/stress/map/insdel_func/map_insdel_func_feldman_hashset.cpp [new file with mode: 0644]
test/stress/map/insdel_func/map_insdel_func_michael.cpp [new file with mode: 0644]
test/stress/map/insdel_func/map_insdel_func_skip.cpp [new file with mode: 0644]
test/stress/map/insdel_func/map_insdel_func_split.cpp [new file with mode: 0644]
test/stress/map/insdel_func/map_insdel_func_striped.cpp [new file with mode: 0644]
test/stress/map/insdel_int/CMakeLists.txt [new file with mode: 0644]
test/stress/map/insdel_int/map_insdel_int.cpp [new file with mode: 0644]
test/stress/map/insdel_int/map_insdel_int.h [new file with mode: 0644]
test/stress/map/insdel_int/map_insdel_int_bronsonavltree.cpp [new file with mode: 0644]
test/stress/map/insdel_int/map_insdel_int_cuckoo.cpp [new file with mode: 0644]
test/stress/map/insdel_int/map_insdel_int_ellentree.cpp [new file with mode: 0644]
test/stress/map/insdel_int/map_insdel_int_feldman_hashset.cpp [new file with mode: 0644]
test/stress/map/insdel_int/map_insdel_int_michael.cpp [new file with mode: 0644]
test/stress/map/insdel_int/map_insdel_int_skip.cpp [new file with mode: 0644]
test/stress/map/insdel_int/map_insdel_int_split.cpp [new file with mode: 0644]
test/stress/map/insdel_int/map_insdel_int_std.cpp [new file with mode: 0644]
test/stress/map/insdel_int/map_insdel_int_striped.cpp [new file with mode: 0644]
test/stress/map/insdel_item_int/CMakeLists.txt [new file with mode: 0644]
test/stress/map/insdel_item_int/map_insdel_item_int.cpp [new file with mode: 0644]
test/stress/map/insdel_item_int/map_insdel_item_int.h [new file with mode: 0644]
test/stress/map/insdel_item_int/map_insdel_item_int_bronsonavltree.cpp [new file with mode: 0644]
test/stress/map/insdel_item_int/map_insdel_item_int_cuckoo.cpp [new file with mode: 0644]
test/stress/map/insdel_item_int/map_insdel_item_int_ellentree.cpp [new file with mode: 0644]
test/stress/map/insdel_item_int/map_insdel_item_int_feldman_hashset.cpp [new file with mode: 0644]
test/stress/map/insdel_item_int/map_insdel_item_int_michael.cpp [new file with mode: 0644]
test/stress/map/insdel_item_int/map_insdel_item_int_skip.cpp [new file with mode: 0644]
test/stress/map/insdel_item_int/map_insdel_item_int_split.cpp [new file with mode: 0644]
test/stress/map/insdel_item_int/map_insdel_item_int_striped.cpp [new file with mode: 0644]
test/stress/map/insdel_string/CMakeLists.txt [new file with mode: 0644]
test/stress/map/insdel_string/map_insdel_string.cpp [new file with mode: 0644]
test/stress/map/insdel_string/map_insdel_string.h [new file with mode: 0644]
test/stress/map/insdel_string/map_insdel_string_bronsonavltree.cpp [new file with mode: 0644]
test/stress/map/insdel_string/map_insdel_string_cuckoo.cpp [new file with mode: 0644]
test/stress/map/insdel_string/map_insdel_string_ellentree.cpp [new file with mode: 0644]
test/stress/map/insdel_string/map_insdel_string_feldman_hashset.cpp [new file with mode: 0644]
test/stress/map/insdel_string/map_insdel_string_michael.cpp [new file with mode: 0644]
test/stress/map/insdel_string/map_insdel_string_skip.cpp [new file with mode: 0644]
test/stress/map/insdel_string/map_insdel_string_split.cpp [new file with mode: 0644]
test/stress/map/insdel_string/map_insdel_string_std.cpp [new file with mode: 0644]
test/stress/map/insdel_string/map_insdel_string_striped.cpp [new file with mode: 0644]
test/stress/map/insdelfind/CMakeLists.txt [new file with mode: 0644]
test/stress/map/insdelfind/map_insdelfind.cpp [new file with mode: 0644]
test/stress/map/insdelfind/map_insdelfind.h [new file with mode: 0644]
test/stress/map/insdelfind/map_insdelfind_bronsonavltree.cpp [new file with mode: 0644]
test/stress/map/insdelfind/map_insdelfind_cuckoo.cpp [new file with mode: 0644]
test/stress/map/insdelfind/map_insdelfind_ellentree.cpp [new file with mode: 0644]
test/stress/map/insdelfind/map_insdelfind_feldman_hashset.cpp [new file with mode: 0644]
test/stress/map/insdelfind/map_insdelfind_michael.cpp [new file with mode: 0644]
test/stress/map/insdelfind/map_insdelfind_skip.cpp [new file with mode: 0644]
test/stress/map/insdelfind/map_insdelfind_split.cpp [new file with mode: 0644]
test/stress/map/insdelfind/map_insdelfind_std.cpp [new file with mode: 0644]
test/stress/map/insdelfind/map_insdelfind_striped.cpp [new file with mode: 0644]
test/stress/map/insfind_int/CMakeLists.txt [new file with mode: 0644]
test/stress/map/insfind_int/map_insfind.cpp [new file with mode: 0644]
test/stress/map/insfind_int/map_insfind_bronsonavltree.cpp [new file with mode: 0644]
test/stress/map/insfind_int/map_insfind_cuckoo.cpp [new file with mode: 0644]
test/stress/map/insfind_int/map_insfind_ellentree.cpp [new file with mode: 0644]
test/stress/map/insfind_int/map_insfind_feldman_hashset.cpp [new file with mode: 0644]
test/stress/map/insfind_int/map_insfind_int.h [new file with mode: 0644]
test/stress/map/insfind_int/map_insfind_michael.cpp [new file with mode: 0644]
test/stress/map/insfind_int/map_insfind_skip.cpp [new file with mode: 0644]
test/stress/map/insfind_int/map_insfind_split.cpp [new file with mode: 0644]
test/stress/map/insfind_int/map_insfind_std.cpp [new file with mode: 0644]
test/stress/map/insfind_int/map_insfind_striped.cpp [new file with mode: 0644]
test/stress/map/map_type.h [new file with mode: 0644]
test/stress/map/map_type_bronson_avltree.h [new file with mode: 0644]
test/stress/map/map_type_cuckoo.h [new file with mode: 0644]
test/stress/map/map_type_ellen_bintree.h [new file with mode: 0644]
test/stress/map/map_type_feldman_hashmap.h [new file with mode: 0644]
test/stress/map/map_type_lazy_list.h [new file with mode: 0644]
test/stress/map/map_type_michael.h [new file with mode: 0644]
test/stress/map/map_type_michael_list.h [new file with mode: 0644]
test/stress/map/map_type_skip_list.h [new file with mode: 0644]
test/stress/map/map_type_split_list.h [new file with mode: 0644]
test/stress/map/map_type_std.h [new file with mode: 0644]
test/stress/map/map_type_striped.h [new file with mode: 0644]
test/stress/pqueue/CMakeLists.txt [new file with mode: 0644]
test/stress/pqueue/item.h [new file with mode: 0644]
test/stress/pqueue/pop.cpp [new file with mode: 0644]
test/stress/pqueue/pqueue_type.h [new file with mode: 0644]
test/stress/pqueue/push.cpp [new file with mode: 0644]
test/stress/pqueue/push_pop.cpp [new file with mode: 0644]
test/stress/queue/CMakeLists.txt [new file with mode: 0644]
test/stress/queue/bounded_queue_fulness.cpp [new file with mode: 0644]
test/stress/queue/intrusive_push_pop.cpp [new file with mode: 0644]
test/stress/queue/intrusive_queue_type.h [new file with mode: 0644]
test/stress/queue/pop.cpp [new file with mode: 0644]
test/stress/queue/print_stat.h [new file with mode: 0644]
test/stress/queue/push.cpp [new file with mode: 0644]
test/stress/queue/push_pop.cpp [new file with mode: 0644]
test/stress/queue/queue_type.h [new file with mode: 0644]
test/stress/queue/random.cpp [new file with mode: 0644]
test/stress/queue/std_queue.h [new file with mode: 0644]
test/stress/set/CMakeLists.txt [new file with mode: 0644]
test/stress/set/delodd/CMakeLists.txt [new file with mode: 0644]
test/stress/set/delodd/set_delodd.cpp [new file with mode: 0644]
test/stress/set/delodd/set_delodd.h [new file with mode: 0644]
test/stress/set/delodd/set_delodd_cuckoo.cpp [new file with mode: 0644]
test/stress/set/delodd/set_delodd_ellentree.cpp [new file with mode: 0644]
test/stress/set/delodd/set_delodd_feldman_hashset.cpp [new file with mode: 0644]
test/stress/set/delodd/set_delodd_michael.cpp [new file with mode: 0644]
test/stress/set/delodd/set_delodd_skip.cpp [new file with mode: 0644]
test/stress/set/delodd/set_delodd_split.cpp [new file with mode: 0644]
test/stress/set/insdel_find/CMakeLists.txt [new file with mode: 0644]
test/stress/set/insdel_find/set_insdelfind.cpp [new file with mode: 0644]
test/stress/set/insdel_find/set_insdelfind.h [new file with mode: 0644]
test/stress/set/insdel_find/set_insdelfind_cuckoo.cpp [new file with mode: 0644]
test/stress/set/insdel_find/set_insdelfind_ellentree.cpp [new file with mode: 0644]
test/stress/set/insdel_find/set_insdelfind_feldman_hashset.cpp [new file with mode: 0644]
test/stress/set/insdel_find/set_insdelfind_michael.cpp [new file with mode: 0644]
test/stress/set/insdel_find/set_insdelfind_skip.cpp [new file with mode: 0644]
test/stress/set/insdel_find/set_insdelfind_split.cpp [new file with mode: 0644]
test/stress/set/insdel_find/set_insdelfind_std.cpp [new file with mode: 0644]
test/stress/set/insdel_find/set_insdelfind_striped.cpp [new file with mode: 0644]
test/stress/set/insdel_func/CMakeLists.txt [new file with mode: 0644]
test/stress/set/insdel_func/set_insdel_func.cpp [new file with mode: 0644]
test/stress/set/insdel_func/set_insdel_func.h [new file with mode: 0644]
test/stress/set/insdel_func/set_insdel_func_cuckoo.cpp [new file with mode: 0644]
test/stress/set/insdel_func/set_insdel_func_ellentree.cpp [new file with mode: 0644]
test/stress/set/insdel_func/set_insdel_func_feldman_hashset.cpp [new file with mode: 0644]
test/stress/set/insdel_func/set_insdel_func_michael.cpp [new file with mode: 0644]
test/stress/set/insdel_func/set_insdel_func_skip.cpp [new file with mode: 0644]
test/stress/set/insdel_func/set_insdel_func_split.cpp [new file with mode: 0644]
test/stress/set/insdel_func/set_insdel_func_striped.cpp [new file with mode: 0644]
test/stress/set/insdel_string/CMakeLists.txt [new file with mode: 0644]
test/stress/set/insdel_string/set_insdel_string.cpp [new file with mode: 0644]
test/stress/set/insdel_string/set_insdel_string.h [new file with mode: 0644]
test/stress/set/insdel_string/set_insdel_string_cuckoo.cpp [new file with mode: 0644]
test/stress/set/insdel_string/set_insdel_string_ellentree.cpp [new file with mode: 0644]
test/stress/set/insdel_string/set_insdel_string_feldman_hashset.cpp [new file with mode: 0644]
test/stress/set/insdel_string/set_insdel_string_michael.cpp [new file with mode: 0644]
test/stress/set/insdel_string/set_insdel_string_skip.cpp [new file with mode: 0644]
test/stress/set/insdel_string/set_insdel_string_split.cpp [new file with mode: 0644]
test/stress/set/insdel_string/set_insdel_string_std.cpp [new file with mode: 0644]
test/stress/set/insdel_string/set_insdel_string_striped.cpp [new file with mode: 0644]
test/stress/set/set_type.h [new file with mode: 0644]
test/stress/set/set_type_cuckoo.h [new file with mode: 0644]
test/stress/set/set_type_ellen_bintree.h [new file with mode: 0644]
test/stress/set/set_type_feldman_hashset.h [new file with mode: 0644]
test/stress/set/set_type_lazy_list.h [new file with mode: 0644]
test/stress/set/set_type_michael.h [new file with mode: 0644]
test/stress/set/set_type_michael_list.h [new file with mode: 0644]
test/stress/set/set_type_skip_list.h [new file with mode: 0644]
test/stress/set/set_type_split_list.h [new file with mode: 0644]
test/stress/set/set_type_std.h [new file with mode: 0644]
test/stress/set/set_type_striped.h [new file with mode: 0644]
test/stress/stack/CMakeLists.txt [new file with mode: 0644]
test/stress/stack/intrusive_push_pop.cpp [new file with mode: 0644]
test/stress/stack/intrusive_push_pop_fcstack.cpp [new file with mode: 0644]
test/stress/stack/intrusive_stack_push_pop.h [new file with mode: 0644]
test/stress/stack/intrusive_stack_type.h [new file with mode: 0644]
test/stress/stack/push.cpp [new file with mode: 0644]
test/stress/stack/push_pop.cpp [new file with mode: 0644]
test/stress/stack/stack_type.h [new file with mode: 0644]
test/unit/CMakeLists.txt [new file with mode: 0644]
test/unit/deque/CMakeLists.txt [new file with mode: 0644]
test/unit/deque/fcdeque.cpp [new file with mode: 0644]
test/unit/intrusive-set/CMakeLists.txt [new file with mode: 0644]
test/unit/intrusive-set/intrusive_feldman_hashset_dhp.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_feldman_hashset_hp.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_feldman_hashset_rcu_gpb.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_feldman_hashset_rcu_gpi.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_feldman_hashset_rcu_gpt.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_feldman_hashset_rcu_shb.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_feldman_hashset_rcu_sht.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_michael_lazy_dhp.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_michael_lazy_hp.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_michael_lazy_nogc.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_michael_lazy_rcu_gpb.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_michael_lazy_rcu_gpi.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_michael_lazy_rcu_gpt.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_michael_lazy_rcu_shb.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_michael_lazy_rcu_sht.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_michael_michael_dhp.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_michael_michael_hp.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_michael_michael_nogc.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_michael_michael_rcu_gpb.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_michael_michael_rcu_gpi.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_michael_michael_rcu_gpt.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_michael_michael_rcu_shb.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_michael_michael_rcu_sht.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_skiplist_dhp.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_skiplist_hp.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_skiplist_nogc.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_skiplist_rcu_gpb.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_skiplist_rcu_gpi.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_skiplist_rcu_gpt.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_skiplist_rcu_shb.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_skiplist_rcu_sht.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_split_lazy_dhp.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_split_lazy_hp.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_split_lazy_nogc.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_split_lazy_rcu_gpb.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_split_lazy_rcu_gpi.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_split_lazy_rcu_gpt.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_split_lazy_rcu_shb.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_split_lazy_rcu_sht.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_split_michael_dhp.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_split_michael_hp.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_split_michael_nogc.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_split_michael_rcu_gpb.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_split_michael_rcu_gpi.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_split_michael_rcu_gpt.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_split_michael_rcu_shb.cpp [new file with mode: 0644]
test/unit/intrusive-set/intrusive_split_michael_rcu_sht.cpp [new file with mode: 0644]
test/unit/intrusive-set/test_intrusive_feldman_hashset.h [new file with mode: 0644]
test/unit/intrusive-set/test_intrusive_feldman_hashset_hp.h [new file with mode: 0644]
test/unit/intrusive-set/test_intrusive_feldman_hashset_rcu.h [new file with mode: 0644]
test/unit/intrusive-set/test_intrusive_michael_lazy_rcu.h [new file with mode: 0644]
test/unit/intrusive-set/test_intrusive_michael_michael_rcu.h [new file with mode: 0644]
test/unit/intrusive-set/test_intrusive_set.h [new file with mode: 0644]
test/unit/intrusive-set/test_intrusive_set_hp.h [new file with mode: 0644]
test/unit/intrusive-set/test_intrusive_set_nogc.h [new file with mode: 0644]
test/unit/intrusive-set/test_intrusive_set_rcu.h [new file with mode: 0644]
test/unit/intrusive-set/test_intrusive_skiplist_rcu.h [new file with mode: 0644]
test/unit/intrusive-set/test_intrusive_split_lazy_rcu.h [new file with mode: 0644]
test/unit/intrusive-set/test_intrusive_split_michael_rcu.h [new file with mode: 0644]
test/unit/list/CMakeLists.txt [new file with mode: 0644]
test/unit/list/intrusive_lazy_dhp.cpp [new file with mode: 0644]
test/unit/list/intrusive_lazy_hp.cpp [new file with mode: 0644]
test/unit/list/intrusive_lazy_nogc.cpp [new file with mode: 0644]
test/unit/list/intrusive_lazy_rcu_gpb.cpp [new file with mode: 0644]
test/unit/list/intrusive_lazy_rcu_gpi.cpp [new file with mode: 0644]
test/unit/list/intrusive_lazy_rcu_gpt.cpp [new file with mode: 0644]
test/unit/list/intrusive_lazy_rcu_shb.cpp [new file with mode: 0644]
test/unit/list/intrusive_lazy_rcu_sht.cpp [new file with mode: 0644]
test/unit/list/intrusive_michael_dhp.cpp [new file with mode: 0644]
test/unit/list/intrusive_michael_hp.cpp [new file with mode: 0644]
test/unit/list/intrusive_michael_nogc.cpp [new file with mode: 0644]
test/unit/list/intrusive_michael_rcu_gpb.cpp [new file with mode: 0644]
test/unit/list/intrusive_michael_rcu_gpi.cpp [new file with mode: 0644]
test/unit/list/intrusive_michael_rcu_gpt.cpp [new file with mode: 0644]
test/unit/list/intrusive_michael_rcu_shb.cpp [new file with mode: 0644]
test/unit/list/intrusive_michael_rcu_sht.cpp [new file with mode: 0644]
test/unit/list/kv_lazy_dhp.cpp [new file with mode: 0644]
test/unit/list/kv_lazy_hp.cpp [new file with mode: 0644]
test/unit/list/kv_lazy_nogc.cpp [new file with mode: 0644]
test/unit/list/kv_lazy_rcu_gpb.cpp [new file with mode: 0644]
test/unit/list/kv_lazy_rcu_gpi.cpp [new file with mode: 0644]
test/unit/list/kv_lazy_rcu_gpt.cpp [new file with mode: 0644]
test/unit/list/kv_lazy_rcu_shb.cpp [new file with mode: 0644]
test/unit/list/kv_lazy_rcu_sht.cpp [new file with mode: 0644]
test/unit/list/kv_michael_dhp.cpp [new file with mode: 0644]
test/unit/list/kv_michael_hp.cpp [new file with mode: 0644]
test/unit/list/kv_michael_nogc.cpp [new file with mode: 0644]
test/unit/list/kv_michael_rcu_gpb.cpp [new file with mode: 0644]
test/unit/list/kv_michael_rcu_gpi.cpp [new file with mode: 0644]
test/unit/list/kv_michael_rcu_gpt.cpp [new file with mode: 0644]
test/unit/list/kv_michael_rcu_shb.cpp [new file with mode: 0644]
test/unit/list/kv_michael_rcu_sht.cpp [new file with mode: 0644]
test/unit/list/lazy_dhp.cpp [new file with mode: 0644]
test/unit/list/lazy_hp.cpp [new file with mode: 0644]
test/unit/list/lazy_nogc.cpp [new file with mode: 0644]
test/unit/list/lazy_rcu_gpb.cpp [new file with mode: 0644]
test/unit/list/lazy_rcu_gpi.cpp [new file with mode: 0644]
test/unit/list/lazy_rcu_gpt.cpp [new file with mode: 0644]
test/unit/list/lazy_rcu_shb.cpp [new file with mode: 0644]
test/unit/list/lazy_rcu_sht.cpp [new file with mode: 0644]
test/unit/list/michael_dhp.cpp [new file with mode: 0644]
test/unit/list/michael_hp.cpp [new file with mode: 0644]
test/unit/list/michael_nogc.cpp [new file with mode: 0644]
test/unit/list/michael_rcu_gpb.cpp [new file with mode: 0644]
test/unit/list/michael_rcu_gpi.cpp [new file with mode: 0644]
test/unit/list/michael_rcu_gpt.cpp [new file with mode: 0644]
test/unit/list/michael_rcu_shb.cpp [new file with mode: 0644]
test/unit/list/michael_rcu_sht.cpp [new file with mode: 0644]
test/unit/list/test_intrusive_lazy_rcu.h [new file with mode: 0644]
test/unit/list/test_intrusive_list.h [new file with mode: 0644]
test/unit/list/test_intrusive_list_hp.h [new file with mode: 0644]
test/unit/list/test_intrusive_list_nogc.h [new file with mode: 0644]
test/unit/list/test_intrusive_list_rcu.h [new file with mode: 0644]
test/unit/list/test_intrusive_michael_rcu.h [new file with mode: 0644]
test/unit/list/test_kv_lazy_rcu.h [new file with mode: 0644]
test/unit/list/test_kv_list.h [new file with mode: 0644]
test/unit/list/test_kv_list_hp.h [new file with mode: 0644]
test/unit/list/test_kv_list_nogc.h [new file with mode: 0644]
test/unit/list/test_kv_list_rcu.h [new file with mode: 0644]
test/unit/list/test_kv_michael_rcu.h [new file with mode: 0644]
test/unit/list/test_lazy_rcu.h [new file with mode: 0644]
test/unit/list/test_list.h [new file with mode: 0644]
test/unit/list/test_list_hp.h [new file with mode: 0644]
test/unit/list/test_list_nogc.h [new file with mode: 0644]
test/unit/list/test_list_rcu.h [new file with mode: 0644]
test/unit/list/test_michael_rcu.h [new file with mode: 0644]
test/unit/main.cpp [new file with mode: 0644]
test/unit/map/CMakeLists.txt [new file with mode: 0644]
test/unit/map/feldman_hashmap_dhp.cpp [new file with mode: 0644]
test/unit/map/feldman_hashmap_hp.cpp [new file with mode: 0644]
test/unit/map/feldman_hashset_rcu_gpb.cpp [new file with mode: 0644]
test/unit/map/feldman_hashset_rcu_gpi.cpp [new file with mode: 0644]
test/unit/map/feldman_hashset_rcu_gpt.cpp [new file with mode: 0644]
test/unit/map/feldman_hashset_rcu_shb.cpp [new file with mode: 0644]
test/unit/map/feldman_hashset_rcu_sht.cpp [new file with mode: 0644]
test/unit/map/michael_lazy_dhp.cpp [new file with mode: 0644]
test/unit/map/michael_lazy_hp.cpp [new file with mode: 0644]
test/unit/map/michael_lazy_nogc.cpp [new file with mode: 0644]
test/unit/map/michael_lazy_rcu_gpb.cpp [new file with mode: 0644]
test/unit/map/michael_lazy_rcu_gpi.cpp [new file with mode: 0644]
test/unit/map/michael_lazy_rcu_gpt.cpp [new file with mode: 0644]
test/unit/map/michael_lazy_rcu_shb.cpp [new file with mode: 0644]
test/unit/map/michael_lazy_rcu_sht.cpp [new file with mode: 0644]
test/unit/map/michael_michael_dhp.cpp [new file with mode: 0644]
test/unit/map/michael_michael_hp.cpp [new file with mode: 0644]
test/unit/map/michael_michael_nogc.cpp [new file with mode: 0644]
test/unit/map/michael_michael_rcu_gpb.cpp [new file with mode: 0644]
test/unit/map/michael_michael_rcu_gpi.cpp [new file with mode: 0644]
test/unit/map/michael_michael_rcu_gpt.cpp [new file with mode: 0644]
test/unit/map/michael_michael_rcu_shb.cpp [new file with mode: 0644]
test/unit/map/michael_michael_rcu_sht.cpp [new file with mode: 0644]
test/unit/map/skiplist_dhp.cpp [new file with mode: 0644]
test/unit/map/skiplist_hp.cpp [new file with mode: 0644]
test/unit/map/skiplist_nogc.cpp [new file with mode: 0644]
test/unit/map/skiplist_rcu_gpb.cpp [new file with mode: 0644]
test/unit/map/skiplist_rcu_gpi.cpp [new file with mode: 0644]
test/unit/map/skiplist_rcu_gpt.cpp [new file with mode: 0644]
test/unit/map/skiplist_rcu_shb.cpp [new file with mode: 0644]
test/unit/map/skiplist_rcu_sht.cpp [new file with mode: 0644]
test/unit/map/split_lazy_dhp.cpp [new file with mode: 0644]
test/unit/map/split_lazy_hp.cpp [new file with mode: 0644]
test/unit/map/split_lazy_nogc.cpp [new file with mode: 0644]
test/unit/map/split_lazy_rcu_gpb.cpp [new file with mode: 0644]
test/unit/map/split_lazy_rcu_gpi.cpp [new file with mode: 0644]
test/unit/map/split_lazy_rcu_gpt.cpp [new file with mode: 0644]
test/unit/map/split_lazy_rcu_shb.cpp [new file with mode: 0644]
test/unit/map/split_lazy_rcu_sht.cpp [new file with mode: 0644]
test/unit/map/split_michael_dhp.cpp [new file with mode: 0644]
test/unit/map/split_michael_hp.cpp [new file with mode: 0644]
test/unit/map/split_michael_nogc.cpp [new file with mode: 0644]
test/unit/map/split_michael_rcu_gpb.cpp [new file with mode: 0644]
test/unit/map/split_michael_rcu_gpi.cpp [new file with mode: 0644]
test/unit/map/split_michael_rcu_gpt.cpp [new file with mode: 0644]
test/unit/map/split_michael_rcu_shb.cpp [new file with mode: 0644]
test/unit/map/split_michael_rcu_sht.cpp [new file with mode: 0644]
test/unit/map/test_feldman_hashmap.h [new file with mode: 0644]
test/unit/map/test_feldman_hashmap_hp.h [new file with mode: 0644]
test/unit/map/test_feldman_hashmap_rcu.h [new file with mode: 0644]
test/unit/map/test_map.h [new file with mode: 0644]
test/unit/map/test_map_data.h [new file with mode: 0644]
test/unit/map/test_map_hp.h [new file with mode: 0644]
test/unit/map/test_map_nogc.h [new file with mode: 0644]
test/unit/map/test_map_rcu.h [new file with mode: 0644]
test/unit/map/test_michael_lazy_rcu.h [new file with mode: 0644]
test/unit/map/test_michael_michael_rcu.h [new file with mode: 0644]
test/unit/map/test_skiplist_hp.h [new file with mode: 0644]
test/unit/map/test_skiplist_rcu.h [new file with mode: 0644]
test/unit/map/test_split_lazy_rcu.h [new file with mode: 0644]
test/unit/map/test_split_michael_rcu.h [new file with mode: 0644]
test/unit/misc/CMakeLists.txt [new file with mode: 0644]
test/unit/misc/bitop.cpp [new file with mode: 0644]
test/unit/misc/cxx11_atomic_class.cpp [new file with mode: 0644]
test/unit/misc/cxx11_atomic_func.cpp [new file with mode: 0644]
test/unit/misc/cxx11_convert_memory_order.h [new file with mode: 0644]
test/unit/misc/find_option.cpp [new file with mode: 0644]
test/unit/misc/hash_tuple.cpp [new file with mode: 0644]
test/unit/misc/permutation_generator.cpp [new file with mode: 0644]
test/unit/misc/split_bitstring.cpp [new file with mode: 0644]
test/unit/pqueue/CMakeLists.txt [new file with mode: 0644]
test/unit/pqueue/fcpqueue_boost_stable_vector.cpp [new file with mode: 0644]
test/unit/pqueue/fcpqueue_deque.cpp [new file with mode: 0644]
test/unit/pqueue/fcpqueue_vector.cpp [new file with mode: 0644]
test/unit/pqueue/intrusive_mspqueue.cpp [new file with mode: 0644]
test/unit/pqueue/mspqueue.cpp [new file with mode: 0644]
test/unit/pqueue/test_data.h [new file with mode: 0644]
test/unit/pqueue/test_fcpqueue.h [new file with mode: 0644]
test/unit/queue/CMakeLists.txt [new file with mode: 0644]
test/unit/queue/basket_queue_dhp.cpp [new file with mode: 0644]
test/unit/queue/basket_queue_hp.cpp [new file with mode: 0644]
test/unit/queue/fcqueue.cpp [new file with mode: 0644]
test/unit/queue/intrusive_basket_queue_dhp.cpp [new file with mode: 0644]
test/unit/queue/intrusive_basket_queue_hp.cpp [new file with mode: 0644]
test/unit/queue/intrusive_fcqueue.cpp [new file with mode: 0644]
test/unit/queue/intrusive_moirqueue_dhp.cpp [new file with mode: 0644]
test/unit/queue/intrusive_moirqueue_hp.cpp [new file with mode: 0644]
test/unit/queue/intrusive_msqueue_dhp.cpp [new file with mode: 0644]
test/unit/queue/intrusive_msqueue_hp.cpp [new file with mode: 0644]
test/unit/queue/intrusive_optqueue_dhp.cpp [new file with mode: 0644]
test/unit/queue/intrusive_optqueue_hp.cpp [new file with mode: 0644]
test/unit/queue/intrusive_segmented_queue_dhp.cpp [new file with mode: 0644]
test/unit/queue/intrusive_segmented_queue_hp.cpp [new file with mode: 0644]
test/unit/queue/intrusive_tsigas_queue.cpp [new file with mode: 0644]
test/unit/queue/intrusive_vyukov_queue.cpp [new file with mode: 0644]
test/unit/queue/moirqueue_dhp.cpp [new file with mode: 0644]
test/unit/queue/moirqueue_hp.cpp [new file with mode: 0644]
test/unit/queue/msqueue_dhp.cpp [new file with mode: 0644]
test/unit/queue/msqueue_hp.cpp [new file with mode: 0644]
test/unit/queue/optimistic_queue_dhp.cpp [new file with mode: 0644]
test/unit/queue/optimistic_queue_hp.cpp [new file with mode: 0644]
test/unit/queue/rwqueue.cpp [new file with mode: 0644]
test/unit/queue/segmented_queue_dhp.cpp [new file with mode: 0644]
test/unit/queue/segmented_queue_hp.cpp [new file with mode: 0644]
test/unit/queue/test_bounded_queue.h [new file with mode: 0644]
test/unit/queue/test_generic_queue.h [new file with mode: 0644]
test/unit/queue/test_intrusive_bounded_queue.h [new file with mode: 0644]
test/unit/queue/test_intrusive_msqueue.h [new file with mode: 0644]
test/unit/queue/test_intrusive_segmented_queue.h [new file with mode: 0644]
test/unit/queue/test_segmented_queue.h [new file with mode: 0644]
test/unit/queue/tsigas_queue.cpp [new file with mode: 0644]
test/unit/queue/vyukov_mpmc_queue.cpp [new file with mode: 0644]
test/unit/set/CMakeLists.txt [new file with mode: 0644]
test/unit/set/feldman_hashset_dhp.cpp [new file with mode: 0644]
test/unit/set/feldman_hashset_hp.cpp [new file with mode: 0644]
test/unit/set/feldman_hashset_rcu_gpb.cpp [new file with mode: 0644]
test/unit/set/feldman_hashset_rcu_gpi.cpp [new file with mode: 0644]
test/unit/set/feldman_hashset_rcu_gpt.cpp [new file with mode: 0644]
test/unit/set/feldman_hashset_rcu_shb.cpp [new file with mode: 0644]
test/unit/set/feldman_hashset_rcu_sht.cpp [new file with mode: 0644]
test/unit/set/michael_lazy_dhp.cpp [new file with mode: 0644]
test/unit/set/michael_lazy_hp.cpp [new file with mode: 0644]
test/unit/set/michael_lazy_nogc.cpp [new file with mode: 0644]
test/unit/set/michael_lazy_rcu_gpb.cpp [new file with mode: 0644]
test/unit/set/michael_lazy_rcu_gpi.cpp [new file with mode: 0644]
test/unit/set/michael_lazy_rcu_gpt.cpp [new file with mode: 0644]
test/unit/set/michael_lazy_rcu_shb.cpp [new file with mode: 0644]
test/unit/set/michael_lazy_rcu_sht.cpp [new file with mode: 0644]
test/unit/set/michael_michael_dhp.cpp [new file with mode: 0644]
test/unit/set/michael_michael_hp.cpp [new file with mode: 0644]
test/unit/set/michael_michael_nogc.cpp [new file with mode: 0644]
test/unit/set/michael_michael_rcu_gpb.cpp [new file with mode: 0644]
test/unit/set/michael_michael_rcu_gpi.cpp [new file with mode: 0644]
test/unit/set/michael_michael_rcu_gpt.cpp [new file with mode: 0644]
test/unit/set/michael_michael_rcu_shb.cpp [new file with mode: 0644]
test/unit/set/michael_michael_rcu_sht.cpp [new file with mode: 0644]
test/unit/set/skiplist_dhp.cpp [new file with mode: 0644]
test/unit/set/skiplist_hp.cpp [new file with mode: 0644]
test/unit/set/skiplist_nogc.cpp [new file with mode: 0644]
test/unit/set/skiplist_rcu_gpb.cpp [new file with mode: 0644]
test/unit/set/skiplist_rcu_gpi.cpp [new file with mode: 0644]
test/unit/set/skiplist_rcu_gpt.cpp [new file with mode: 0644]
test/unit/set/skiplist_rcu_shb.cpp [new file with mode: 0644]
test/unit/set/skiplist_rcu_sht.cpp [new file with mode: 0644]
test/unit/set/split_lazy_dhp.cpp [new file with mode: 0644]
test/unit/set/split_lazy_hp.cpp [new file with mode: 0644]
test/unit/set/split_lazy_nogc.cpp [new file with mode: 0644]
test/unit/set/split_lazy_rcu_gpb.cpp [new file with mode: 0644]
test/unit/set/split_lazy_rcu_gpi.cpp [new file with mode: 0644]
test/unit/set/split_lazy_rcu_gpt.cpp [new file with mode: 0644]
test/unit/set/split_lazy_rcu_shb.cpp [new file with mode: 0644]
test/unit/set/split_lazy_rcu_sht.cpp [new file with mode: 0644]
test/unit/set/split_michael_dhp.cpp [new file with mode: 0644]
test/unit/set/split_michael_hp.cpp [new file with mode: 0644]
test/unit/set/split_michael_nogc.cpp [new file with mode: 0644]
test/unit/set/split_michael_rcu_gpb.cpp [new file with mode: 0644]
test/unit/set/split_michael_rcu_gpi.cpp [new file with mode: 0644]
test/unit/set/split_michael_rcu_gpt.cpp [new file with mode: 0644]
test/unit/set/split_michael_rcu_shb.cpp [new file with mode: 0644]
test/unit/set/split_michael_rcu_sht.cpp [new file with mode: 0644]
test/unit/set/test_feldman_hashset.h [new file with mode: 0644]
test/unit/set/test_feldman_hashset_hp.h [new file with mode: 0644]
test/unit/set/test_feldman_hashset_rcu.h [new file with mode: 0644]
test/unit/set/test_michael_lazy_rcu.h [new file with mode: 0644]
test/unit/set/test_michael_michael_rcu.h [new file with mode: 0644]
test/unit/set/test_ordered_set_hp.h [new file with mode: 0644]
test/unit/set/test_set.h [new file with mode: 0644]
test/unit/set/test_set_hp.h [new file with mode: 0644]
test/unit/set/test_set_nogc.h [new file with mode: 0644]
test/unit/set/test_set_rcu.h [new file with mode: 0644]
test/unit/set/test_skiplist_rcu.h [new file with mode: 0644]
test/unit/set/test_split_lazy_rcu.h [new file with mode: 0644]
test/unit/set/test_split_michael_rcu.h [new file with mode: 0644]
test/unit/stack/CMakeLists.txt [new file with mode: 0644]
test/unit/stack/fcstack.cpp [new file with mode: 0644]
test/unit/stack/intrusive_fcstack.cpp [new file with mode: 0644]
test/unit/stack/intrusive_treiber_stack_dhp.cpp [new file with mode: 0644]
test/unit/stack/intrusive_treiber_stack_hp.cpp [new file with mode: 0644]
test/unit/stack/test_intrusive_treiber_stack.h [new file with mode: 0644]
test/unit/stack/test_treiber_stack.h [new file with mode: 0644]
test/unit/stack/treiber_stack_dhp.cpp [new file with mode: 0644]
test/unit/stack/treiber_stack_hp.cpp [new file with mode: 0644]
test/unit/striped-map/CMakeLists.txt [new file with mode: 0644]
test/unit/striped-map/cuckoo_map.cpp [new file with mode: 0644]
test/unit/striped-map/map_boost_flat_map.cpp [new file with mode: 0644]
test/unit/striped-map/map_boost_list.cpp [new file with mode: 0644]
test/unit/striped-map/map_boost_map.cpp [new file with mode: 0644]
test/unit/striped-map/map_boost_slist.cpp [new file with mode: 0644]
test/unit/striped-map/map_boost_unordered_map.cpp [new file with mode: 0644]
test/unit/striped-map/map_std_list.cpp [new file with mode: 0644]
test/unit/striped-map/map_std_map.cpp [new file with mode: 0644]
test/unit/striped-map/map_std_unordered_map.cpp [new file with mode: 0644]
test/unit/striped-map/test_map.h [new file with mode: 0644]
test/unit/striped-map/test_map_data.h [new file with mode: 0644]
test/unit/striped-map/test_striped_map.h [new file with mode: 0644]
test/unit/striped-set/CMakeLists.txt [new file with mode: 0644]
test/unit/striped-set/cuckoo_set.cpp [new file with mode: 0644]
test/unit/striped-set/intrusive_boost_avl_set.cpp [new file with mode: 0644]
test/unit/striped-set/intrusive_boost_list.cpp [new file with mode: 0644]
test/unit/striped-set/intrusive_boost_set.cpp [new file with mode: 0644]
test/unit/striped-set/intrusive_boost_sg_set.cpp [new file with mode: 0644]
test/unit/striped-set/intrusive_boost_slist.cpp [new file with mode: 0644]
test/unit/striped-set/intrusive_boost_splay_set.cpp [new file with mode: 0644]
test/unit/striped-set/intrusive_boost_treap_set.cpp [new file with mode: 0644]
test/unit/striped-set/intrusive_boost_unordered_set.cpp [new file with mode: 0644]
test/unit/striped-set/intrusive_cuckoo_set.cpp [new file with mode: 0644]
test/unit/striped-set/set_boost_flatset.cpp [new file with mode: 0644]
test/unit/striped-set/set_boost_list.cpp [new file with mode: 0644]
test/unit/striped-set/set_boost_set.cpp [new file with mode: 0644]
test/unit/striped-set/set_boost_slist.cpp [new file with mode: 0644]
test/unit/striped-set/set_boost_stable_vector.cpp [new file with mode: 0644]
test/unit/striped-set/set_boost_unordered_set.cpp [new file with mode: 0644]
test/unit/striped-set/set_boost_vector.cpp [new file with mode: 0644]
test/unit/striped-set/set_std_list.cpp [new file with mode: 0644]
test/unit/striped-set/set_std_set.cpp [new file with mode: 0644]
test/unit/striped-set/set_std_unordered_set.cpp [new file with mode: 0644]
test/unit/striped-set/set_std_vector.cpp [new file with mode: 0644]
test/unit/striped-set/test_intrusive_set.h [new file with mode: 0644]
test/unit/striped-set/test_intrusive_striped_set.h [new file with mode: 0644]
test/unit/striped-set/test_set.h [new file with mode: 0644]
test/unit/striped-set/test_striped_set.h [new file with mode: 0644]
test/unit/tree/CMakeLists.txt [new file with mode: 0644]
test/unit/tree/bronson_avltree_map_ptr_rcu_gpb.cpp [new file with mode: 0644]
test/unit/tree/bronson_avltree_map_ptr_rcu_gpi.cpp [new file with mode: 0644]
test/unit/tree/bronson_avltree_map_ptr_rcu_gpt.cpp [new file with mode: 0644]
test/unit/tree/bronson_avltree_map_ptr_rcu_shb.cpp [new file with mode: 0644]
test/unit/tree/bronson_avltree_map_ptr_rcu_sht.cpp [new file with mode: 0644]
test/unit/tree/bronson_avltree_map_rcu_gpb.cpp [new file with mode: 0644]
test/unit/tree/bronson_avltree_map_rcu_gpi.cpp [new file with mode: 0644]
test/unit/tree/bronson_avltree_map_rcu_gpt.cpp [new file with mode: 0644]
test/unit/tree/bronson_avltree_map_rcu_shb.cpp [new file with mode: 0644]
test/unit/tree/bronson_avltree_map_rcu_sht.cpp [new file with mode: 0644]
test/unit/tree/ellen_bintree_map_dhp.cpp [new file with mode: 0644]
test/unit/tree/ellen_bintree_map_hp.cpp [new file with mode: 0644]
test/unit/tree/ellen_bintree_map_rcu_gpb.cpp [new file with mode: 0644]
test/unit/tree/ellen_bintree_map_rcu_gpi.cpp [new file with mode: 0644]
test/unit/tree/ellen_bintree_map_rcu_gpt.cpp [new file with mode: 0644]
test/unit/tree/ellen_bintree_map_rcu_shb.cpp [new file with mode: 0644]
test/unit/tree/ellen_bintree_map_rcu_sht.cpp [new file with mode: 0644]
test/unit/tree/ellen_bintree_set_dhp.cpp [new file with mode: 0644]
test/unit/tree/ellen_bintree_set_hp.cpp [new file with mode: 0644]
test/unit/tree/ellen_bintree_set_rcu_gpb.cpp [new file with mode: 0644]
test/unit/tree/ellen_bintree_set_rcu_gpi.cpp [new file with mode: 0644]
test/unit/tree/ellen_bintree_set_rcu_gpt.cpp [new file with mode: 0644]
test/unit/tree/ellen_bintree_set_rcu_shb.cpp [new file with mode: 0644]
test/unit/tree/ellen_bintree_set_rcu_sht.cpp [new file with mode: 0644]
test/unit/tree/ellen_bintree_update_desc_pool.cpp [new file with mode: 0644]
test/unit/tree/intrusive_ellenbintree_dhp.cpp [new file with mode: 0644]
test/unit/tree/intrusive_ellenbintree_hp.cpp [new file with mode: 0644]
test/unit/tree/intrusive_ellenbintree_rcu_gpb.cpp [new file with mode: 0644]
test/unit/tree/intrusive_ellenbintree_rcu_gpi.cpp [new file with mode: 0644]
test/unit/tree/intrusive_ellenbintree_rcu_gpt.cpp [new file with mode: 0644]
test/unit/tree/intrusive_ellenbintree_rcu_shb.cpp [new file with mode: 0644]
test/unit/tree/intrusive_ellenbintree_rcu_sht.cpp [new file with mode: 0644]
test/unit/tree/test_bronson_avltree_map.h [new file with mode: 0644]
test/unit/tree/test_bronson_avltree_map_ptr.h [new file with mode: 0644]
test/unit/tree/test_ellen_bintree_map_rcu.h [new file with mode: 0644]
test/unit/tree/test_ellen_bintree_set_rcu.h [new file with mode: 0644]
test/unit/tree/test_ellen_bintree_update_desc_pool.h [new file with mode: 0644]
test/unit/tree/test_intrusive_ellen_bintree_rcu.h [new file with mode: 0644]
test/unit/tree/test_intrusive_tree.h [new file with mode: 0644]
test/unit/tree/test_intrusive_tree_hp.h [new file with mode: 0644]
test/unit/tree/test_intrusive_tree_rcu.h [new file with mode: 0644]
test/unit/tree/test_tree_map.h [new file with mode: 0644]
test/unit/tree/test_tree_map_data.h [new file with mode: 0644]
test/unit/tree/test_tree_map_hp.h [new file with mode: 0644]
test/unit/tree/test_tree_map_rcu.h [new file with mode: 0644]
test/unit/tree/test_tree_set.h [new file with mode: 0644]
test/unit/tree/test_tree_set_hp.h [new file with mode: 0644]
test/unit/tree/test_tree_set_rcu.h [new file with mode: 0644]
tests/CMakeLists.txt [deleted file]
tests/cppunit/cppunit_mini.h [deleted file]
tests/cppunit/cppunit_proxy.h [deleted file]
tests/cppunit/file_reporter.h [deleted file]
tests/cppunit/test_beans.h [deleted file]
tests/cppunit/test_main.cpp [deleted file]
tests/cppunit/thread.cpp [deleted file]
tests/cppunit/thread.h [deleted file]
tests/data/split.pl [deleted file]
tests/data/test-debug.conf [deleted file]
tests/data/test-express.conf [deleted file]
tests/data/test.conf [deleted file]
tests/data/text.txt [deleted file]
tests/hashing/city.cpp [deleted file]
tests/hashing/city.h [deleted file]
tests/hashing/citycrc.h [deleted file]
tests/hashing/hash_func.h [deleted file]
tests/test-hdr/CMakeLists.txt [deleted file]
tests/test-hdr/deque/hdr_fcdeque.cpp [deleted file]
tests/test-hdr/list/hdr_intrusive_lazy.h [deleted file]
tests/test-hdr/list/hdr_intrusive_lazy_dhp.cpp [deleted file]
tests/test-hdr/list/hdr_intrusive_lazy_hp.cpp [deleted file]
tests/test-hdr/list/hdr_intrusive_lazy_nogc.cpp [deleted file]
tests/test-hdr/list/hdr_intrusive_lazy_nogc_unord.cpp [deleted file]
tests/test-hdr/list/hdr_intrusive_lazy_rcu_gpb.cpp [deleted file]
tests/test-hdr/list/hdr_intrusive_lazy_rcu_gpi.cpp [deleted file]
tests/test-hdr/list/hdr_intrusive_lazy_rcu_gpt.cpp [deleted file]
tests/test-hdr/list/hdr_intrusive_lazy_rcu_shb.cpp [deleted file]
tests/test-hdr/list/hdr_intrusive_lazy_rcu_sht.cpp [deleted file]
tests/test-hdr/list/hdr_intrusive_michael.h [deleted file]
tests/test-hdr/list/hdr_intrusive_michael_dhp.cpp [deleted file]
tests/test-hdr/list/hdr_intrusive_michael_hp.cpp [deleted file]
tests/test-hdr/list/hdr_intrusive_michael_list_rcu_gpb.cpp [deleted file]
tests/test-hdr/list/hdr_intrusive_michael_list_rcu_gpi.cpp [deleted file]
tests/test-hdr/list/hdr_intrusive_michael_list_rcu_gpt.cpp [deleted file]
tests/test-hdr/list/hdr_intrusive_michael_list_rcu_shb.cpp [deleted file]
tests/test-hdr/list/hdr_intrusive_michael_list_rcu_sht.cpp [deleted file]
tests/test-hdr/list/hdr_intrusive_michael_nogc.cpp [deleted file]
tests/test-hdr/list/hdr_lazy.h [deleted file]
tests/test-hdr/list/hdr_lazy_dhp.cpp [deleted file]
tests/test-hdr/list/hdr_lazy_hp.cpp [deleted file]
tests/test-hdr/list/hdr_lazy_kv.h [deleted file]
tests/test-hdr/list/hdr_lazy_kv_dhp.cpp [deleted file]
tests/test-hdr/list/hdr_lazy_kv_hp.cpp [deleted file]
tests/test-hdr/list/hdr_lazy_kv_nogc.cpp [deleted file]
tests/test-hdr/list/hdr_lazy_kv_nogc_unord.cpp [deleted file]
tests/test-hdr/list/hdr_lazy_kv_rcu_gpb.cpp [deleted file]
tests/test-hdr/list/hdr_lazy_kv_rcu_gpi.cpp [deleted file]
tests/test-hdr/list/hdr_lazy_kv_rcu_gpt.cpp [deleted file]
tests/test-hdr/list/hdr_lazy_kv_rcu_shb.cpp [deleted file]
tests/test-hdr/list/hdr_lazy_kv_rcu_sht.cpp [deleted file]
tests/test-hdr/list/hdr_lazy_nogc.cpp [deleted file]
tests/test-hdr/list/hdr_lazy_nogc_unord.cpp [deleted file]
tests/test-hdr/list/hdr_lazy_rcu_gpb.cpp [deleted file]
tests/test-hdr/list/hdr_lazy_rcu_gpi.cpp [deleted file]
tests/test-hdr/list/hdr_lazy_rcu_gpt.cpp [deleted file]
tests/test-hdr/list/hdr_lazy_rcu_shb.cpp [deleted file]
tests/test-hdr/list/hdr_lazy_rcu_sht.cpp [deleted file]
tests/test-hdr/list/hdr_michael.h [deleted file]
tests/test-hdr/list/hdr_michael_dhp.cpp [deleted file]
tests/test-hdr/list/hdr_michael_hp.cpp [deleted file]
tests/test-hdr/list/hdr_michael_kv.h [deleted file]
tests/test-hdr/list/hdr_michael_kv_dhp.cpp [deleted file]
tests/test-hdr/list/hdr_michael_kv_hp.cpp [deleted file]
tests/test-hdr/list/hdr_michael_kv_nogc.cpp [deleted file]
tests/test-hdr/list/hdr_michael_kv_rcu_gpb.cpp [deleted file]
tests/test-hdr/list/hdr_michael_kv_rcu_gpi.cpp [deleted file]
tests/test-hdr/list/hdr_michael_kv_rcu_gpt.cpp [deleted file]
tests/test-hdr/list/hdr_michael_kv_rcu_shb.cpp [deleted file]
tests/test-hdr/list/hdr_michael_kv_rcu_sht.cpp [deleted file]
tests/test-hdr/list/hdr_michael_nogc.cpp [deleted file]
tests/test-hdr/list/hdr_michael_rcu_gpb.cpp [deleted file]
tests/test-hdr/list/hdr_michael_rcu_gpi.cpp [deleted file]
tests/test-hdr/list/hdr_michael_rcu_gpt.cpp [deleted file]
tests/test-hdr/list/hdr_michael_rcu_shb.cpp [deleted file]
tests/test-hdr/list/hdr_michael_rcu_sht.cpp [deleted file]
tests/test-hdr/map/hdr_cuckoo_map.cpp [deleted file]
tests/test-hdr/map/hdr_cuckoo_map.h [deleted file]
tests/test-hdr/map/hdr_feldman_hashmap.h [deleted file]
tests/test-hdr/map/hdr_feldman_hashmap_dhp.cpp [deleted file]
tests/test-hdr/map/hdr_feldman_hashmap_hp.cpp [deleted file]
tests/test-hdr/map/hdr_feldman_hashmap_rcu_gpb.cpp [deleted file]
tests/test-hdr/map/hdr_feldman_hashmap_rcu_gpi.cpp [deleted file]
tests/test-hdr/map/hdr_feldman_hashmap_rcu_gpt.cpp [deleted file]
tests/test-hdr/map/hdr_feldman_hashmap_rcu_shb.cpp [deleted file]
tests/test-hdr/map/hdr_feldman_hashmap_rcu_sht.cpp [deleted file]
tests/test-hdr/map/hdr_map.h [deleted file]
tests/test-hdr/map/hdr_michael_map_dhp.cpp [deleted file]
tests/test-hdr/map/hdr_michael_map_hp.cpp [deleted file]
tests/test-hdr/map/hdr_michael_map_lazy_dhp.cpp [deleted file]
tests/test-hdr/map/hdr_michael_map_lazy_hp.cpp [deleted file]
tests/test-hdr/map/hdr_michael_map_lazy_nogc.cpp [deleted file]
tests/test-hdr/map/hdr_michael_map_lazy_rcu_gpb.cpp [deleted file]
tests/test-hdr/map/hdr_michael_map_lazy_rcu_gpi.cpp [deleted file]
tests/test-hdr/map/hdr_michael_map_lazy_rcu_gpt.cpp [deleted file]
tests/test-hdr/map/hdr_michael_map_lazy_rcu_shb.cpp [deleted file]
tests/test-hdr/map/hdr_michael_map_lazy_rcu_sht.cpp [deleted file]
tests/test-hdr/map/hdr_michael_map_nogc.cpp [deleted file]
tests/test-hdr/map/hdr_michael_map_rcu_gpb.cpp [deleted file]
tests/test-hdr/map/hdr_michael_map_rcu_gpi.cpp [deleted file]
tests/test-hdr/map/hdr_michael_map_rcu_gpt.cpp [deleted file]
tests/test-hdr/map/hdr_michael_map_rcu_shb.cpp [deleted file]
tests/test-hdr/map/hdr_michael_map_rcu_sht.cpp [deleted file]
tests/test-hdr/map/hdr_refinable_hashmap_boost_flat_map.cpp [deleted file]
tests/test-hdr/map/hdr_refinable_hashmap_boost_list.cpp [deleted file]
tests/test-hdr/map/hdr_refinable_hashmap_boost_map.cpp [deleted file]
tests/test-hdr/map/hdr_refinable_hashmap_boost_unordered_map.cpp [deleted file]
tests/test-hdr/map/hdr_refinable_hashmap_hashmap_std.cpp [deleted file]
tests/test-hdr/map/hdr_refinable_hashmap_list.cpp [deleted file]
tests/test-hdr/map/hdr_refinable_hashmap_map.cpp [deleted file]
tests/test-hdr/map/hdr_refinable_hashmap_slist.cpp [deleted file]
tests/test-hdr/map/hdr_skiplist_map.h [deleted file]
tests/test-hdr/map/hdr_skiplist_map_dhp.cpp [deleted file]
tests/test-hdr/map/hdr_skiplist_map_hp.cpp [deleted file]
tests/test-hdr/map/hdr_skiplist_map_nogc.cpp [deleted file]
tests/test-hdr/map/hdr_skiplist_map_rcu.h [deleted file]
tests/test-hdr/map/hdr_skiplist_map_rcu_gpb.cpp [deleted file]
tests/test-hdr/map/hdr_skiplist_map_rcu_gpi.cpp [deleted file]
tests/test-hdr/map/hdr_skiplist_map_rcu_gpt.cpp [deleted file]
tests/test-hdr/map/hdr_skiplist_map_rcu_shb.cpp [deleted file]
tests/test-hdr/map/hdr_skiplist_map_rcu_sht.cpp [deleted file]
tests/test-hdr/map/hdr_splitlist_map_dhp.cpp [deleted file]
tests/test-hdr/map/hdr_splitlist_map_hp.cpp [deleted file]
tests/test-hdr/map/hdr_splitlist_map_lazy_dhp.cpp [deleted file]
tests/test-hdr/map/hdr_splitlist_map_lazy_hp.cpp [deleted file]
tests/test-hdr/map/hdr_splitlist_map_lazy_nogc.cpp [deleted file]
tests/test-hdr/map/hdr_splitlist_map_lazy_rcu_gpb.cpp [deleted file]
tests/test-hdr/map/hdr_splitlist_map_lazy_rcu_gpi.cpp [deleted file]
tests/test-hdr/map/hdr_splitlist_map_lazy_rcu_gpt.cpp [deleted file]
tests/test-hdr/map/hdr_splitlist_map_lazy_rcu_shb.cpp [deleted file]
tests/test-hdr/map/hdr_splitlist_map_lazy_rcu_sht.cpp [deleted file]
tests/test-hdr/map/hdr_splitlist_map_nogc.cpp [deleted file]
tests/test-hdr/map/hdr_splitlist_map_rcu_gpb.cpp [deleted file]
tests/test-hdr/map/hdr_splitlist_map_rcu_gpi.cpp [deleted file]
tests/test-hdr/map/hdr_splitlist_map_rcu_gpt.cpp [deleted file]
tests/test-hdr/map/hdr_splitlist_map_rcu_shb.cpp [deleted file]
tests/test-hdr/map/hdr_splitlist_map_rcu_sht.cpp [deleted file]
tests/test-hdr/map/hdr_striped_hashmap_boost_flat_map.cpp [deleted file]
tests/test-hdr/map/hdr_striped_hashmap_boost_list.cpp [deleted file]
tests/test-hdr/map/hdr_striped_hashmap_boost_map.cpp [deleted file]
tests/test-hdr/map/hdr_striped_hashmap_boost_unordered_map.cpp [deleted file]
tests/test-hdr/map/hdr_striped_hashmap_hashmap_std.cpp [deleted file]
tests/test-hdr/map/hdr_striped_hashmap_list.cpp [deleted file]
tests/test-hdr/map/hdr_striped_hashmap_map.cpp [deleted file]
tests/test-hdr/map/hdr_striped_hashmap_slist.cpp [deleted file]
tests/test-hdr/map/hdr_striped_map.h [deleted file]
tests/test-hdr/map/hdr_striped_map_reg.cpp [deleted file]
tests/test-hdr/map/print_skiplist_stat.h [deleted file]
tests/test-hdr/misc/allocator_test.cpp [deleted file]
tests/test-hdr/misc/bitop_st.cpp [deleted file]
tests/test-hdr/misc/cxx11_atomic_class.cpp [deleted file]
tests/test-hdr/misc/cxx11_atomic_func.cpp [deleted file]
tests/test-hdr/misc/cxx11_convert_memory_order.h [deleted file]
tests/test-hdr/misc/find_option.cpp [deleted file]
tests/test-hdr/misc/hash_tuple.cpp [deleted file]
tests/test-hdr/misc/michael_allocator.cpp [deleted file]
tests/test-hdr/misc/michael_allocator.h [deleted file]
tests/test-hdr/misc/permutation_generator.cpp [deleted file]
tests/test-hdr/misc/split_bitstring.cpp [deleted file]
tests/test-hdr/misc/thread_init_fini.cpp [deleted file]
tests/test-hdr/priority_queue/hdr_fcpqueue_boost_stable_vector.cpp [deleted file]
tests/test-hdr/priority_queue/hdr_fcpqueue_deque.cpp [deleted file]
tests/test-hdr/priority_queue/hdr_fcpqueue_vector.cpp [deleted file]
tests/test-hdr/priority_queue/hdr_intrusive_mspqueue_dyn.cpp [deleted file]
tests/test-hdr/priority_queue/hdr_intrusive_mspqueue_static.cpp [deleted file]
tests/test-hdr/priority_queue/hdr_intrusive_pqueue.h [deleted file]
tests/test-hdr/priority_queue/hdr_mspqueue_dyn.cpp [deleted file]
tests/test-hdr/priority_queue/hdr_mspqueue_static.cpp [deleted file]
tests/test-hdr/priority_queue/hdr_pqueue.h [deleted file]
tests/test-hdr/priority_queue/hdr_priority_queue_reg.cpp [deleted file]
tests/test-hdr/queue/hdr_basketqueue_dhp.cpp [deleted file]
tests/test-hdr/queue/hdr_basketqueue_hp.cpp [deleted file]
tests/test-hdr/queue/hdr_fcqueue.cpp [deleted file]
tests/test-hdr/queue/hdr_fcqueue.h [deleted file]
tests/test-hdr/queue/hdr_intrusive_basketqueue_dhp.cpp [deleted file]
tests/test-hdr/queue/hdr_intrusive_basketqueue_hp.cpp [deleted file]
tests/test-hdr/queue/hdr_intrusive_fcqueue.cpp [deleted file]
tests/test-hdr/queue/hdr_intrusive_moirqueue_dhp.cpp [deleted file]
tests/test-hdr/queue/hdr_intrusive_moirqueue_hp.cpp [deleted file]
tests/test-hdr/queue/hdr_intrusive_msqueue.h [deleted file]
tests/test-hdr/queue/hdr_intrusive_msqueue_dhp.cpp [deleted file]
tests/test-hdr/queue/hdr_intrusive_msqueue_hp.cpp [deleted file]
tests/test-hdr/queue/hdr_intrusive_optimisticqueue_dhp.cpp [deleted file]
tests/test-hdr/queue/hdr_intrusive_optimisticqueue_hp.cpp [deleted file]
tests/test-hdr/queue/hdr_intrusive_segmented_queue.h [deleted file]
tests/test-hdr/queue/hdr_intrusive_segmented_queue_dhp.cpp [deleted file]
tests/test-hdr/queue/hdr_intrusive_segmented_queue_hp.cpp [deleted file]
tests/test-hdr/queue/hdr_intrusive_tsigas_cycle_queue.cpp [deleted file]
tests/test-hdr/queue/hdr_intrusive_vyukovmpmc_cycle_queue.cpp [deleted file]
tests/test-hdr/queue/hdr_moirqueue_dhp.cpp [deleted file]
tests/test-hdr/queue/hdr_moirqueue_hp.cpp [deleted file]
tests/test-hdr/queue/hdr_msqueue_dhp.cpp [deleted file]
tests/test-hdr/queue/hdr_msqueue_hp.cpp [deleted file]
tests/test-hdr/queue/hdr_optimistic_dhp.cpp [deleted file]
tests/test-hdr/queue/hdr_optimistic_hp.cpp [deleted file]
tests/test-hdr/queue/hdr_queue.h [deleted file]
tests/test-hdr/queue/hdr_queue_register.cpp [deleted file]
tests/test-hdr/queue/hdr_rwqueue.cpp [deleted file]
tests/test-hdr/queue/hdr_segmented_queue.h [deleted file]
tests/test-hdr/queue/hdr_segmented_queue_dhp.cpp [deleted file]
tests/test-hdr/queue/hdr_segmented_queue_hp.cpp [deleted file]
tests/test-hdr/queue/hdr_tsigas_cycle_queue.cpp [deleted file]
tests/test-hdr/queue/hdr_vyukov_mpmc_cyclic.cpp [deleted file]
tests/test-hdr/set/hdr_cuckoo_set.cpp [deleted file]
tests/test-hdr/set/hdr_cuckoo_set.h [deleted file]
tests/test-hdr/set/hdr_feldman_hashset.h [deleted file]
tests/test-hdr/set/hdr_feldman_hashset_dhp.cpp [deleted file]
tests/test-hdr/set/hdr_feldman_hashset_hp.cpp [deleted file]
tests/test-hdr/set/hdr_feldman_hashset_rcu_gpb.cpp [deleted file]
tests/test-hdr/set/hdr_feldman_hashset_rcu_gpi.cpp [deleted file]
tests/test-hdr/set/hdr_feldman_hashset_rcu_gpt.cpp [deleted file]
tests/test-hdr/set/hdr_feldman_hashset_rcu_shb.cpp [deleted file]
tests/test-hdr/set/hdr_feldman_hashset_rcu_sht.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_cuckoo_refinable_set.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_cuckoo_set.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_cuckoo_set.h [deleted file]
tests/test-hdr/set/hdr_intrusive_feldman_hashset.h [deleted file]
tests/test-hdr/set/hdr_intrusive_feldman_hashset_dhp.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_feldman_hashset_hp.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_feldman_hashset_rcu_gpb.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_feldman_hashset_rcu_gpi.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_feldman_hashset_rcu_gpt.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_feldman_hashset_rcu_shb.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_feldman_hashset_rcu_sht.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_michael_set_dhp.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_michael_set_dhp_lazy.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_michael_set_hp.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_michael_set_hp_lazy.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_michael_set_nogc.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_michael_set_nogc_lazy.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpb.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpb_lazy.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpi.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpi_lazy.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpt.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpt_lazy.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_michael_set_rcu_shb.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_michael_set_rcu_shb_lazy.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_michael_set_rcu_sht.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_michael_set_rcu_sht_lazy.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_refinable_hashset_avlset.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_refinable_hashset_list.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_refinable_hashset_set.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_refinable_hashset_sgset.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_refinable_hashset_slist.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_refinable_hashset_splayset.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_refinable_hashset_treapset.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_refinable_hashset_uset.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_set.h [deleted file]
tests/test-hdr/set/hdr_intrusive_skiplist_dhp.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_skiplist_dhp_member.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_skiplist_hp.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_skiplist_hp_member.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_skiplist_nogc.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_skiplist_nogc_member.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpb.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpb_member.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpi.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpi_member.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpt.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpt_member.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_skiplist_rcu_shb.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_skiplist_rcu_shb_member.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_skiplist_rcu_sht.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_skiplist_rcu_sht_member.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_skiplist_set.h [deleted file]
tests/test-hdr/set/hdr_intrusive_skiplist_set_rcu.h [deleted file]
tests/test-hdr/set/hdr_intrusive_splitlist_set_dhp.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_splitlist_set_dhp_lazy.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_splitlist_set_hp.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_splitlist_set_hp_lazy.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_splitlist_set_nogc.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_splitlist_set_nogc_lazy.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpb.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpb_lazy.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpi.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpi_lazy.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpt.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpt_lazy.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_shb.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_shb_lazy.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_sht.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_sht_lazy.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_striped_hashset_avlset.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_striped_hashset_list.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_striped_hashset_set.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_striped_hashset_sgset.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_striped_hashset_slist.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_striped_hashset_splayset.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_striped_hashset_treapset.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_striped_hashset_uset.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_striped_set.cpp [deleted file]
tests/test-hdr/set/hdr_intrusive_striped_set.h [deleted file]
tests/test-hdr/set/hdr_michael_set_dhp.cpp [deleted file]
tests/test-hdr/set/hdr_michael_set_hp.cpp [deleted file]
tests/test-hdr/set/hdr_michael_set_lazy_dhp.cpp [deleted file]
tests/test-hdr/set/hdr_michael_set_lazy_hp.cpp [deleted file]
tests/test-hdr/set/hdr_michael_set_lazy_nogc.cpp [deleted file]
tests/test-hdr/set/hdr_michael_set_lazy_rcu_gpb.cpp [deleted file]
tests/test-hdr/set/hdr_michael_set_lazy_rcu_gpi.cpp [deleted file]
tests/test-hdr/set/hdr_michael_set_lazy_rcu_gpt.cpp [deleted file]
tests/test-hdr/set/hdr_michael_set_lazy_rcu_shb.cpp [deleted file]
tests/test-hdr/set/hdr_michael_set_lazy_rcu_sht.cpp [deleted file]
tests/test-hdr/set/hdr_michael_set_nogc.cpp [deleted file]
tests/test-hdr/set/hdr_michael_set_rcu_gpb.cpp [deleted file]
tests/test-hdr/set/hdr_michael_set_rcu_gpi.cpp [deleted file]
tests/test-hdr/set/hdr_michael_set_rcu_gpt.cpp [deleted file]
tests/test-hdr/set/hdr_michael_set_rcu_shb.cpp [deleted file]
tests/test-hdr/set/hdr_michael_set_rcu_sht.cpp [deleted file]
tests/test-hdr/set/hdr_refinable_hashset_boost_flat_set.cpp [deleted file]
tests/test-hdr/set/hdr_refinable_hashset_boost_list.cpp [deleted file]
tests/test-hdr/set/hdr_refinable_hashset_boost_set.cpp [deleted file]
tests/test-hdr/set/hdr_refinable_hashset_boost_stable_vector.cpp [deleted file]
tests/test-hdr/set/hdr_refinable_hashset_boost_unordered_set.cpp [deleted file]
tests/test-hdr/set/hdr_refinable_hashset_boost_vector.cpp [deleted file]
tests/test-hdr/set/hdr_refinable_hashset_hashset_std.cpp [deleted file]
tests/test-hdr/set/hdr_refinable_hashset_list.cpp [deleted file]
tests/test-hdr/set/hdr_refinable_hashset_set.cpp [deleted file]
tests/test-hdr/set/hdr_refinable_hashset_slist.cpp [deleted file]
tests/test-hdr/set/hdr_refinable_hashset_vector.cpp [deleted file]
tests/test-hdr/set/hdr_set.h [deleted file]
tests/test-hdr/set/hdr_skiplist_set.h [deleted file]
tests/test-hdr/set/hdr_skiplist_set_dhp.cpp [deleted file]
tests/test-hdr/set/hdr_skiplist_set_hp.cpp [deleted file]
tests/test-hdr/set/hdr_skiplist_set_nogc.cpp [deleted file]
tests/test-hdr/set/hdr_skiplist_set_rcu.h [deleted file]
tests/test-hdr/set/hdr_skiplist_set_rcu_gpb.cpp [deleted file]
tests/test-hdr/set/hdr_skiplist_set_rcu_gpi.cpp [deleted file]
tests/test-hdr/set/hdr_skiplist_set_rcu_gpt.cpp [deleted file]
tests/test-hdr/set/hdr_skiplist_set_rcu_shb.cpp [deleted file]
tests/test-hdr/set/hdr_skiplist_set_rcu_sht.cpp [deleted file]
tests/test-hdr/set/hdr_splitlist_set_dhp.cpp [deleted file]
tests/test-hdr/set/hdr_splitlist_set_hp.cpp [deleted file]
tests/test-hdr/set/hdr_splitlist_set_lazy_dhp.cpp [deleted file]
tests/test-hdr/set/hdr_splitlist_set_lazy_hp.cpp [deleted file]
tests/test-hdr/set/hdr_splitlist_set_lazy_nogc.cpp [deleted file]
tests/test-hdr/set/hdr_splitlist_set_lazy_rcu_gpb.cpp [deleted file]
tests/test-hdr/set/hdr_splitlist_set_lazy_rcu_gpi.cpp [deleted file]
tests/test-hdr/set/hdr_splitlist_set_lazy_rcu_gpt.cpp [deleted file]
tests/test-hdr/set/hdr_splitlist_set_lazy_rcu_shb.cpp [deleted file]
tests/test-hdr/set/hdr_splitlist_set_lazy_rcu_sht.cpp [deleted file]
tests/test-hdr/set/hdr_splitlist_set_nogc.cpp [deleted file]
tests/test-hdr/set/hdr_splitlist_set_rcu_gpb.cpp [deleted file]
tests/test-hdr/set/hdr_splitlist_set_rcu_gpi.cpp [deleted file]
tests/test-hdr/set/hdr_splitlist_set_rcu_gpt.cpp [deleted file]
tests/test-hdr/set/hdr_splitlist_set_rcu_shb.cpp [deleted file]
tests/test-hdr/set/hdr_splitlist_set_rcu_sht.cpp [deleted file]
tests/test-hdr/set/hdr_striped_hashset_boost_flat_set.cpp [deleted file]
tests/test-hdr/set/hdr_striped_hashset_boost_list.cpp [deleted file]
tests/test-hdr/set/hdr_striped_hashset_boost_set.cpp [deleted file]
tests/test-hdr/set/hdr_striped_hashset_boost_stable_vector.cpp [deleted file]
tests/test-hdr/set/hdr_striped_hashset_boost_unordered_set.cpp [deleted file]
tests/test-hdr/set/hdr_striped_hashset_boost_vector.cpp [deleted file]
tests/test-hdr/set/hdr_striped_hashset_hashset_std.cpp [deleted file]
tests/test-hdr/set/hdr_striped_hashset_list.cpp [deleted file]
tests/test-hdr/set/hdr_striped_hashset_set.cpp [deleted file]
tests/test-hdr/set/hdr_striped_hashset_slist.cpp [deleted file]
tests/test-hdr/set/hdr_striped_hashset_vector.cpp [deleted file]
tests/test-hdr/set/hdr_striped_set.h [deleted file]
tests/test-hdr/set/intrusive_cuckoo_set_common.h [deleted file]
tests/test-hdr/size_check.h [deleted file]
tests/test-hdr/stack/hdr_elimination_stack_dhp.cpp [deleted file]
tests/test-hdr/stack/hdr_elimination_stack_hp.cpp [deleted file]
tests/test-hdr/stack/hdr_fcstack.cpp [deleted file]
tests/test-hdr/stack/hdr_intrusive_elimination_stack_dhp.cpp [deleted file]
tests/test-hdr/stack/hdr_intrusive_elimination_stack_hp.cpp [deleted file]
tests/test-hdr/stack/hdr_intrusive_fcstack.cpp [deleted file]
tests/test-hdr/stack/hdr_intrusive_treiber_stack.h [deleted file]
tests/test-hdr/stack/hdr_intrusive_treiber_stack_dhp.cpp [deleted file]
tests/test-hdr/stack/hdr_intrusive_treiber_stack_hp.cpp [deleted file]
tests/test-hdr/stack/hdr_treiber_stack.h [deleted file]
tests/test-hdr/stack/hdr_treiber_stack_dhp.cpp [deleted file]
tests/test-hdr/stack/hdr_treiber_stack_hp.cpp [deleted file]
tests/test-hdr/tree/hdr_bronson_avltree_map.h [deleted file]
tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpb.cpp [deleted file]
tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpb_pool_monitor.cpp [deleted file]
tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpi.cpp [deleted file]
tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpi_pool_monitor.cpp [deleted file]
tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpt.cpp [deleted file]
tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpt_pool_monitor.cpp [deleted file]
tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_shb.cpp [deleted file]
tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_shb_pool_monitor.cpp [deleted file]
tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_sht.cpp [deleted file]
tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_sht_pool_monitor.cpp [deleted file]
tests/test-hdr/tree/hdr_ellenbintree_map.h [deleted file]
tests/test-hdr/tree/hdr_ellenbintree_map_dhp.cpp [deleted file]
tests/test-hdr/tree/hdr_ellenbintree_map_hp.cpp [deleted file]
tests/test-hdr/tree/hdr_ellenbintree_map_rcu_gpb.cpp [deleted file]
tests/test-hdr/tree/hdr_ellenbintree_map_rcu_gpi.cpp [deleted file]
tests/test-hdr/tree/hdr_ellenbintree_map_rcu_gpt.cpp [deleted file]
tests/test-hdr/tree/hdr_ellenbintree_map_rcu_shb.cpp [deleted file]
tests/test-hdr/tree/hdr_ellenbintree_map_rcu_sht.cpp [deleted file]
tests/test-hdr/tree/hdr_ellenbintree_set.h [deleted file]
tests/test-hdr/tree/hdr_ellenbintree_set_dhp.cpp [deleted file]
tests/test-hdr/tree/hdr_ellenbintree_set_hp.cpp [deleted file]
tests/test-hdr/tree/hdr_ellenbintree_set_rcu_gpb.cpp [deleted file]
tests/test-hdr/tree/hdr_ellenbintree_set_rcu_gpi.cpp [deleted file]
tests/test-hdr/tree/hdr_ellenbintree_set_rcu_gpt.cpp [deleted file]
tests/test-hdr/tree/hdr_ellenbintree_set_rcu_shb.cpp [deleted file]
tests/test-hdr/tree/hdr_ellenbintree_set_rcu_sht.cpp [deleted file]
tests/test-hdr/tree/hdr_intrusive_bintree.h [deleted file]
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_dhp.cpp [deleted file]
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_dhp_member.cpp [deleted file]
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_hp.cpp [deleted file]
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_hp_member.cpp [deleted file]
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_pool_dhp.h [deleted file]
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_pool_hp.h [deleted file]
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_pool_rcu.h [deleted file]
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpb.cpp [deleted file]
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpb_member.cpp [deleted file]
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpi.cpp [deleted file]
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpi_member.cpp [deleted file]
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpt.cpp [deleted file]
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpt_member.cpp [deleted file]
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_shb.cpp [deleted file]
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_shb_member.cpp [deleted file]
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_sht.cpp [deleted file]
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_sht_member.cpp [deleted file]
tests/test-hdr/tree/hdr_tree_reg.cpp [deleted file]
tests/unit/CMakeLists.txt [deleted file]
tests/unit/_template.cpp [deleted file]
tests/unit/alloc/hoard_threadtest.cpp [deleted file]
tests/unit/alloc/larson.cpp [deleted file]
tests/unit/alloc/linux_scale.cpp [deleted file]
tests/unit/alloc/michael_allocator.cpp [deleted file]
tests/unit/alloc/michael_allocator.h [deleted file]
tests/unit/alloc/random.cpp [deleted file]
tests/unit/alloc/random_gen.h [deleted file]
tests/unit/ellen_bintree_update_desc_pool.cpp [deleted file]
tests/unit/ellen_bintree_update_desc_pool.h [deleted file]
tests/unit/lock/nolock.h [deleted file]
tests/unit/lock/spinlock.cpp [deleted file]
tests/unit/lock/win32_lock.h [deleted file]
tests/unit/map2/CMakeLists.txt [deleted file]
tests/unit/map2/map_defs.h [deleted file]
tests/unit/map2/map_delodd.cpp [deleted file]
tests/unit/map2/map_delodd.h [deleted file]
tests/unit/map2/map_delodd_bronsonavltree.cpp [deleted file]
tests/unit/map2/map_delodd_cuckoo.cpp [deleted file]
tests/unit/map2/map_delodd_ellentree.cpp [deleted file]
tests/unit/map2/map_delodd_feldmanhashmap.cpp [deleted file]
tests/unit/map2/map_delodd_michael.cpp [deleted file]
tests/unit/map2/map_delodd_skip.cpp [deleted file]
tests/unit/map2/map_delodd_split.cpp [deleted file]
tests/unit/map2/map_find_int.cpp [deleted file]
tests/unit/map2/map_find_int.h [deleted file]
tests/unit/map2/map_find_int_bronsonavltree.cpp [deleted file]
tests/unit/map2/map_find_int_cuckoo.cpp [deleted file]
tests/unit/map2/map_find_int_ellentree.cpp [deleted file]
tests/unit/map2/map_find_int_feldmanhashmap.cpp [deleted file]
tests/unit/map2/map_find_int_michael.cpp [deleted file]
tests/unit/map2/map_find_int_skip.cpp [deleted file]
tests/unit/map2/map_find_int_split.cpp [deleted file]
tests/unit/map2/map_find_int_std.cpp [deleted file]
tests/unit/map2/map_find_int_striped.cpp [deleted file]
tests/unit/map2/map_find_string.cpp [deleted file]
tests/unit/map2/map_find_string.h [deleted file]
tests/unit/map2/map_find_string_bronsonavltree.cpp [deleted file]
tests/unit/map2/map_find_string_cuckoo.cpp [deleted file]
tests/unit/map2/map_find_string_ellentree.cpp [deleted file]
tests/unit/map2/map_find_string_feldmanhashmap.cpp [deleted file]
tests/unit/map2/map_find_string_michael.cpp [deleted file]
tests/unit/map2/map_find_string_skip.cpp [deleted file]
tests/unit/map2/map_find_string_split.cpp [deleted file]
tests/unit/map2/map_find_string_std.cpp [deleted file]
tests/unit/map2/map_find_string_striped.cpp [deleted file]
tests/unit/map2/map_insdel_func.cpp [deleted file]
tests/unit/map2/map_insdel_func.h [deleted file]
tests/unit/map2/map_insdel_func_bronsonavltree.cpp [deleted file]
tests/unit/map2/map_insdel_func_cuckoo.cpp [deleted file]
tests/unit/map2/map_insdel_func_ellentree.cpp [deleted file]
tests/unit/map2/map_insdel_func_feldmanhashmap.cpp [deleted file]
tests/unit/map2/map_insdel_func_michael.cpp [deleted file]
tests/unit/map2/map_insdel_func_skip.cpp [deleted file]
tests/unit/map2/map_insdel_func_split.cpp [deleted file]
tests/unit/map2/map_insdel_func_striped.cpp [deleted file]
tests/unit/map2/map_insdel_int.cpp [deleted file]
tests/unit/map2/map_insdel_int.h [deleted file]
tests/unit/map2/map_insdel_int_bronsonavltree.cpp [deleted file]
tests/unit/map2/map_insdel_int_cuckoo.cpp [deleted file]
tests/unit/map2/map_insdel_int_ellentree.cpp [deleted file]
tests/unit/map2/map_insdel_int_feldmanhashmap.cpp [deleted file]
tests/unit/map2/map_insdel_int_michael.cpp [deleted file]
tests/unit/map2/map_insdel_int_skip.cpp [deleted file]
tests/unit/map2/map_insdel_int_split.cpp [deleted file]
tests/unit/map2/map_insdel_int_std.cpp [deleted file]
tests/unit/map2/map_insdel_int_striped.cpp [deleted file]
tests/unit/map2/map_insdel_item_int.cpp [deleted file]
tests/unit/map2/map_insdel_item_int.h [deleted file]
tests/unit/map2/map_insdel_item_int_bronsonavltree.cpp [deleted file]
tests/unit/map2/map_insdel_item_int_cuckoo.cpp [deleted file]
tests/unit/map2/map_insdel_item_int_ellentree.cpp [deleted file]
tests/unit/map2/map_insdel_item_int_feldmanhashmap.cpp [deleted file]
tests/unit/map2/map_insdel_item_int_michael.cpp [deleted file]
tests/unit/map2/map_insdel_item_int_skip.cpp [deleted file]
tests/unit/map2/map_insdel_item_int_split.cpp [deleted file]
tests/unit/map2/map_insdel_item_int_striped.cpp [deleted file]
tests/unit/map2/map_insdel_item_string.cpp [deleted file]
tests/unit/map2/map_insdel_item_string.h [deleted file]
tests/unit/map2/map_insdel_item_string_bronsonavltree.cpp [deleted file]
tests/unit/map2/map_insdel_item_string_cuckoo.cpp [deleted file]
tests/unit/map2/map_insdel_item_string_ellentree.cpp [deleted file]
tests/unit/map2/map_insdel_item_string_feldmanhashmap.cpp [deleted file]
tests/unit/map2/map_insdel_item_string_michael.cpp [deleted file]
tests/unit/map2/map_insdel_item_string_skip.cpp [deleted file]
tests/unit/map2/map_insdel_item_string_split.cpp [deleted file]
tests/unit/map2/map_insdel_item_string_striped.cpp [deleted file]
tests/unit/map2/map_insdel_string.cpp [deleted file]
tests/unit/map2/map_insdel_string.h [deleted file]
tests/unit/map2/map_insdel_string_bronsonavltree.cpp [deleted file]
tests/unit/map2/map_insdel_string_cuckoo.cpp [deleted file]
tests/unit/map2/map_insdel_string_ellentree.cpp [deleted file]
tests/unit/map2/map_insdel_string_feldmanhashmap.cpp [deleted file]
tests/unit/map2/map_insdel_string_michael.cpp [deleted file]
tests/unit/map2/map_insdel_string_skip.cpp [deleted file]
tests/unit/map2/map_insdel_string_split.cpp [deleted file]
tests/unit/map2/map_insdel_string_std.cpp [deleted file]
tests/unit/map2/map_insdel_string_striped.cpp [deleted file]
tests/unit/map2/map_insdelfind.cpp [deleted file]
tests/unit/map2/map_insdelfind.h [deleted file]
tests/unit/map2/map_insdelfind_bronsonavltree.cpp [deleted file]
tests/unit/map2/map_insdelfind_cuckoo.cpp [deleted file]
tests/unit/map2/map_insdelfind_ellentree.cpp [deleted file]
tests/unit/map2/map_insdelfind_feldmanhashmap.cpp [deleted file]
tests/unit/map2/map_insdelfind_michael.cpp [deleted file]
tests/unit/map2/map_insdelfind_skip.cpp [deleted file]
tests/unit/map2/map_insdelfind_split.cpp [deleted file]
tests/unit/map2/map_insdelfind_std.cpp [deleted file]
tests/unit/map2/map_insdelfind_striped.cpp [deleted file]
tests/unit/map2/map_insfind_int.cpp [deleted file]
tests/unit/map2/map_insfind_int.h [deleted file]
tests/unit/map2/map_insfind_int_bronsonavltree.cpp [deleted file]
tests/unit/map2/map_insfind_int_cuckoo.cpp [deleted file]
tests/unit/map2/map_insfind_int_ellentree.cpp [deleted file]
tests/unit/map2/map_insfind_int_feldmanhashmap.cpp [deleted file]
tests/unit/map2/map_insfind_int_michael.cpp [deleted file]
tests/unit/map2/map_insfind_int_skip.cpp [deleted file]
tests/unit/map2/map_insfind_int_split.cpp [deleted file]
tests/unit/map2/map_insfind_int_std.cpp [deleted file]
tests/unit/map2/map_insfind_int_striped.cpp [deleted file]
tests/unit/map2/map_type.h [deleted file]
tests/unit/map2/map_type_bronson_avltree.h [deleted file]
tests/unit/map2/map_type_cuckoo.h [deleted file]
tests/unit/map2/map_type_ellen_bintree.h [deleted file]
tests/unit/map2/map_type_feldman_hashmap.h [deleted file]
tests/unit/map2/map_type_lazy_list.h [deleted file]
tests/unit/map2/map_type_michael.h [deleted file]
tests/unit/map2/map_type_michael_list.h [deleted file]
tests/unit/map2/map_type_skip_list.h [deleted file]
tests/unit/map2/map_type_split_list.h [deleted file]
tests/unit/map2/map_type_std.h [deleted file]
tests/unit/map2/map_type_striped.h [deleted file]
tests/unit/map2/std_hash_map.h [deleted file]
tests/unit/map2/std_map.h [deleted file]
tests/unit/michael_alloc.cpp [deleted file]
tests/unit/michael_alloc.h [deleted file]
tests/unit/nonconcurrent_iterator_sequence.h [deleted file]
tests/unit/pqueue/CMakeLists.txt [deleted file]
tests/unit/pqueue/ellen_bintree_pqueue.h [deleted file]
tests/unit/pqueue/pop.cpp [deleted file]
tests/unit/pqueue/pqueue_defs.h [deleted file]
tests/unit/pqueue/pqueue_item.h [deleted file]
tests/unit/pqueue/pqueue_type.h [deleted file]
tests/unit/pqueue/push.cpp [deleted file]
tests/unit/pqueue/push_pop.cpp [deleted file]
tests/unit/pqueue/skiplist_pqueue.h [deleted file]
tests/unit/pqueue/std_pqueue.h [deleted file]
tests/unit/print_bronsonavltree_stat.h [deleted file]
tests/unit/print_cuckoo_stat.h [deleted file]
tests/unit/print_ellenbintree_stat.h [deleted file]
tests/unit/print_feldman_hashset_stat.h [deleted file]
tests/unit/print_mspriorityqueue_stat.h [deleted file]
tests/unit/print_segmentedqueue_stat.h [deleted file]
tests/unit/print_skip_list_stat.h [deleted file]
tests/unit/print_split_list_stat.h [deleted file]
tests/unit/print_sync_monitor_stat.h [deleted file]
tests/unit/queue/CMakeLists.txt [deleted file]
tests/unit/queue/bounded_queue_fulness.cpp [deleted file]
tests/unit/queue/intrusive_queue_defs.h [deleted file]
tests/unit/queue/intrusive_queue_reader_writer.cpp [deleted file]
tests/unit/queue/intrusive_queue_type.h [deleted file]
tests/unit/queue/queue_defs.h [deleted file]
tests/unit/queue/queue_pop.cpp [deleted file]
tests/unit/queue/queue_push.cpp [deleted file]
tests/unit/queue/queue_random.cpp [deleted file]
tests/unit/queue/queue_reader_writer.cpp [deleted file]
tests/unit/queue/queue_type.h [deleted file]
tests/unit/queue/std_queue.h [deleted file]
tests/unit/set2/CMakeLists.txt [deleted file]
tests/unit/set2/set_defs.h [deleted file]
tests/unit/set2/set_delodd.cpp [deleted file]
tests/unit/set2/set_delodd.h [deleted file]
tests/unit/set2/set_delodd_cuckoo.cpp [deleted file]
tests/unit/set2/set_delodd_ellentree.cpp [deleted file]
tests/unit/set2/set_delodd_feldmanhashset.cpp [deleted file]
tests/unit/set2/set_delodd_michael.cpp [deleted file]
tests/unit/set2/set_delodd_skip.cpp [deleted file]
tests/unit/set2/set_delodd_split.cpp [deleted file]
tests/unit/set2/set_insdel_func.cpp [deleted file]
tests/unit/set2/set_insdel_func.h [deleted file]
tests/unit/set2/set_insdel_func_cuckoo.cpp [deleted file]
tests/unit/set2/set_insdel_func_ellentree.cpp [deleted file]
tests/unit/set2/set_insdel_func_feldmanhashset.cpp [deleted file]
tests/unit/set2/set_insdel_func_michael.cpp [deleted file]
tests/unit/set2/set_insdel_func_skip.cpp [deleted file]
tests/unit/set2/set_insdel_func_split.cpp [deleted file]
tests/unit/set2/set_insdel_func_striped.cpp [deleted file]
tests/unit/set2/set_insdel_string.cpp [deleted file]
tests/unit/set2/set_insdel_string.h [deleted file]
tests/unit/set2/set_insdel_string_cuckoo.cpp [deleted file]
tests/unit/set2/set_insdel_string_ellentree.cpp [deleted file]
tests/unit/set2/set_insdel_string_feldmanhashset.cpp [deleted file]
tests/unit/set2/set_insdel_string_michael.cpp [deleted file]
tests/unit/set2/set_insdel_string_skip.cpp [deleted file]
tests/unit/set2/set_insdel_string_split.cpp [deleted file]
tests/unit/set2/set_insdel_string_std.cpp [deleted file]
tests/unit/set2/set_insdel_string_striped.cpp [deleted file]
tests/unit/set2/set_insdelfind.cpp [deleted file]
tests/unit/set2/set_insdelfind.h [deleted file]
tests/unit/set2/set_insdelfind_cuckoo.cpp [deleted file]
tests/unit/set2/set_insdelfind_ellentree.cpp [deleted file]
tests/unit/set2/set_insdelfind_feldmanhashset.cpp [deleted file]
tests/unit/set2/set_insdelfind_michael.cpp [deleted file]
tests/unit/set2/set_insdelfind_skip.cpp [deleted file]
tests/unit/set2/set_insdelfind_split.cpp [deleted file]
tests/unit/set2/set_insdelfind_std.cpp [deleted file]
tests/unit/set2/set_insdelfind_striped.cpp [deleted file]
tests/unit/set2/set_type.h [deleted file]
tests/unit/set2/set_type_cuckoo.h [deleted file]
tests/unit/set2/set_type_ellen_bintree.h [deleted file]
tests/unit/set2/set_type_feldman_hashset.h [deleted file]
tests/unit/set2/set_type_lazy_list.h [deleted file]
tests/unit/set2/set_type_michael.h [deleted file]
tests/unit/set2/set_type_michael_list.h [deleted file]
tests/unit/set2/set_type_skip_list.h [deleted file]
tests/unit/set2/set_type_split_list.h [deleted file]
tests/unit/set2/set_type_std.h [deleted file]
tests/unit/set2/set_type_striped.h [deleted file]
tests/unit/stack/CMakeLists.txt [deleted file]
tests/unit/stack/intrusive_stack_defs.h [deleted file]
tests/unit/stack/intrusive_stack_type.h [deleted file]
tests/unit/stack/stack_defs.h [deleted file]
tests/unit/stack/stack_intrusive_pushpop.cpp [deleted file]
tests/unit/stack/stack_push.cpp [deleted file]
tests/unit/stack/stack_pushpop.cpp [deleted file]
tests/unit/stack/stack_type.h [deleted file]
thanks

index 6107723e45a0be82f47bee20911974dd240b2efd..93cba7860eb30e684bc00d1b16c93a2fd837d755 100644 (file)
@@ -19,3 +19,9 @@
 *.log
 /.project
 /projects/Win/vc14/*.opendb
+/test/stress/data/dictionary.txt
+/projects/Win/vc14/cds.VC.db
+/todo-2.2.txt
+/build/Makefile
+/build/build.sh
+/build/sample
index a49c64357a8726f55204170e843fc6d02a372866..bcb8143993d183134a0586854f76aeca14cd6c85 100644 (file)
@@ -3,7 +3,7 @@ cmake_policy(SET CMP0016 NEW)
 
 project(cds)
 
-set(PROJECT_VERSION 2.1.0)
+set(PROJECT_VERSION 2.2.0)
 
 # Options
 option(WITH_TESTS "Build unit tests" OFF)
@@ -39,8 +39,14 @@ set(CDS_STATIC_LIBRARY ${PROJECT_NAME}-s)
 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
 set(CMAKE_INCLUDE_CURRENT_DIR ON)
 
-set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
-set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
+if(CDS_BIN_DIR)
+    set(EXECUTABLE_OUTPUT_PATH ${CDS_BIN_DIR})
+    set(LIBRARY_OUTPUT_PATH ${CDS_BIN_DIR})
+else()
+    set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
+    set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
+endif()
+message(STATUS "Binary output path: ${EXECUTABLE_OUTPUT_PATH}")
 
 if(NOT CMAKE_BUILD_TYPE)
   set(CMAKE_BUILD_TYPE Debug CACHE STRING "Default build type to Debug" FORCE)
@@ -75,9 +81,10 @@ set(SOURCES src/hp_gc.cpp
             src/dllmain.cpp)
 
 add_library(${CDS_SHARED_LIBRARY} SHARED ${SOURCES})
+set_target_properties( ${CDS_SHARED_LIBRARY} PROPERTIES VERSION ${PROJECT_VERSION})
 add_library(${CDS_STATIC_LIBRARY} STATIC ${SOURCES})
-target_link_libraries(${CDS_SHARED_LIBRARY} PRIVATE ${Boost_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
-target_link_libraries(${CDS_STATIC_LIBRARY} PRIVATE ${Boost_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
+target_link_libraries(${CDS_SHARED_LIBRARY} PRIVATE ${CMAKE_THREAD_LIBS_INIT})
+target_link_libraries(${CDS_STATIC_LIBRARY} PRIVATE ${CMAKE_THREAD_LIBS_INIT})
 
 install(TARGETS ${CDS_SHARED_LIBRARY} DESTINATION lib COMPONENT ${LIBRARIES_COMPONENT})
 install(TARGETS ${CDS_STATIC_LIBRARY} DESTINATION lib COMPONENT ${LIBRARIES_COMPONENT})
@@ -85,7 +92,7 @@ install(DIRECTORY ${PROJECT_SOURCE_DIR}/cds DESTINATION include COMPONENT ${HEAD
 
 if(WITH_TESTS)
   enable_testing()
-  add_subdirectory(${PROJECT_SOURCE_DIR}/tests)
+  add_subdirectory(${PROJECT_SOURCE_DIR}/test)
   message(STATUS "Build tests: activated")
 endif(WITH_TESTS)
 
diff --git a/build/Makefile b/build/Makefile
deleted file mode 100644 (file)
index bb54ad5..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-# Makefile 
-# 
-
-.PHONY: all
-.SUFFIXES:.cpp .c .ro
-
-# make_distrib.pl substitutes the correct version
-VERSION=2.1.0
-
-# boost_thread lib used by test application. 
-# You may change the library name
-LD_BOOST_THREAD_LIB=-lboost_thread -lboost_system 
-
-ifeq ($(platform),mingw)
-    LD_TEST_COMMON_LIBS=-lcds -lrtm
-    LD_TEST_COMMON_DEBUG_LIBS=-lcds-debug -lrtm
-    BASE_OPT = -D_REENTRANT -D_FILE_OFFSET_BITS=64 -I..
-    # -Wa,--hash-size=2048
-    CPP_BUILD_CDS_OPT=-DCDS_BUILD_LIB
-else
-ifeq ($(platform),darwin)
-    LD_TEST_COMMON_LIBS=-lcds
-    LD_TEST_COMMON_DEBUG_LIBS=-lcds-debug
-else
-    LD_TEST_COMMON_LIBS=-lcds -lpthread -lrt
-    LD_TEST_COMMON_DEBUG_LIBS=-lcds-debug -lpthread -lrt
-endif
-    BASE_OPT = -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -D_FILE_OFFSET_BITS=64 -I..
-    CPP_BUILD_CDS_OPT=
-endif
-
-COMP_OPT = -c $(CFLAGS) $(BASE_OPT)
-CPP_COMP_OPT = -MMD -std=c++11 -c $(CXXFLAGS) $(BASE_OPT)
-
-COMPILER_ROOT = $(shell dirname `dirname \`which       $(CXX)\``)
-
-LD_OPTS = $(LDFLAGS)
-
-
-
-####################################
-# cds library
-
-include ../projects/source.libcds.mk
-CDS_OBJS := $(addprefix $(OBJ_PATH)/,$(notdir $(CDS_SOURCES)))
-CDS_OBJS := $(CDS_OBJS:%.cpp=%.o)
-CDS_OBJS_DEPS := $(CDS_OBJS:%.o=%.d)
-CDS_SOURCES := $(CDS_SOURCES:%.cpp=../%.cpp)
-
-ifeq ($(platform),mingw)
-    CDS_DEBUG_LIB=libcds-debug.dll
-    CDS_RELEASE_LIB=libcds.dll
-else
-ifeq ($(platform),darwin)
-    CDS_DEBUG_LIB=libcds-debug.dylib
-    CDS_RELEASE_LIB=libcds.dylib
-else
-    CDS_DEBUG_LIB=libcds-debug.so
-    CDS_RELEASE_LIB=libcds.so
-endif
-endif
-
--include $(CDS_OBJS_DEPS)
-$(CDS_OBJS): $(OBJ_PATH)/%.o: ../src/%.cpp
-       $(CXX) $(CPP_COMP_OPT) $(CPP_BUILD_CDS_OPT) -o $@ $<
-
-ifeq ($(platform),mingw)
-$(CDS_DEBUG_LIB): $(BIN_PATH)/$(CDS_DEBUG_LIB)
-
-$(BIN_PATH)/$(CDS_DEBUG_LIB) : $(CDS_OBJS)
-       $(CXX) $(LD_OPTS) -Wl,--out-implib,$(BIN_PATH)/$(CDS_DEBUG_LIB).a $(CDS_OBJS) -o $@ $(LDLIBS)
-
-$(CDS_RELEASE_LIB) : $(BIN_PATH)/$(CDS_RELEASE_LIB)
-
-$(BIN_PATH)/$(CDS_RELEASE_LIB) : $(CDS_OBJS)
-       $(CXX) $(LD_OPTS) $(CDS_OBJS) -Wl,--out-implib,$(BIN_PATH)/$(CDS_RELEASE_LIB).a -o $@ $(LDLIBS)
-    
-debug : $(CDS_DEBUG_LIB)
-release : $(CDS_RELEASE_LIB)
-else
-$(CDS_DEBUG_LIB).$(VERSION) : $(CDS_OBJS)
-       $(CXX) $(LD_OPTS) $(CDS_PLATFORM_DEBUG_LDFLAGS) $(CDS_OBJS) -o $@ $(LDLIBS)
-       mv ./$(CDS_DEBUG_LIB).$(VERSION) $(BIN_PATH)/$(CDS_DEBUG_LIB).$(VERSION)
-       ln -sf $(CDS_DEBUG_LIB).$(VERSION) $(BIN_PATH)/$(CDS_DEBUG_LIB)
-
-$(CDS_RELEASE_LIB).$(VERSION) : $(CDS_OBJS)
-       $(CXX) $(LD_OPTS) $(CDS_OBJS) $(CDS_PLATFORM_RELEASE_LDFLAGS) -o $@ $(LDLIBS)
-       mv ./$(CDS_RELEASE_LIB).$(VERSION) $(BIN_PATH)/$(CDS_RELEASE_LIB).$(VERSION)
-       ln -sf $(CDS_RELEASE_LIB).$(VERSION) $(BIN_PATH)/$(CDS_RELEASE_LIB)
-    
-debug : $(CDS_DEBUG_LIB).$(VERSION)
-release : $(CDS_RELEASE_LIB).$(VERSION)
-    
-endif
-    
-all: debug release
-
-##########################################
-# Make tests
-
-OBJ_TEST_PATH=$(OBJ_PATH)
-
-include ../projects/source.test-common.mk
-CDS_TESTCOMMON_SOURCES := $(CDS_TESTCOMMON_SOURCES:%.cpp=../%.cpp)
-TEST_COMMON_OBJS := $(CDS_TESTCOMMON_SOURCES:%.cpp=%.o)
-TEST_COMMON_OBJS_DEPS := $(TEST_COMMON_OBJS:%.o=%.d)
-
-TEST_COMMONHDR_SRC_DIR=../tests
--include $(TEST_COMMON_OBJS_DEPS)
-$(TEST_COMMON_OBJS) : %.o : %.cpp
-       $(CXX) $(CPP_COMP_OPT) -I$(TEST_COMMONHDR_SRC_DIR) $< -o $@
-
-
-include ../projects/source.test-hdr.mk
-CDS_TESTHDR_SOURCES := $(CDS_TESTHDR_SOURCES:%.cpp=../%.cpp)
-TESTHDR_OBJS := $(CDS_TESTHDR_SOURCES:%.cpp=%.o)
-TESTHDR_OBJS_DEPS := $(TESTHDR_OBJS:%.o=%.d)
-
-TESTHDR_SRC_DIR=../tests/test-hdr
--include $(TESTHDR_OBJS_DEPS)
-$(TESTHDR_OBJS): %.o: %.cpp
-       $(CXX) $(CPP_COMP_OPT) -I$(TESTHDR_SRC_DIR) -I$(TEST_COMMONHDR_SRC_DIR) $< -o $@
-
-include ../projects/source.test-hdr.offsetof.mk
-CDS_TESTHDR_OFFSETOF_SOURCES := $(CDS_TESTHDR_OFFSETOF_SOURCES:%.cpp=../%.cpp)
-TESTHDR_OBJS_NO_OFFSETOF_WARN := $(CDS_TESTHDR_OFFSETOF_SOURCES:%.cpp=%.o)
-TESTHDR_OBJS_NO_OFFSETOF_WARN_DEPS := $(TESTHDR_OBJS_NO_OFFSETOF_WARN:%.o=%.d)
-
--include $(TESTHDR_OBJS_NO_OFFSETOF_WARN_DEPS)
-$(TESTHDR_OBJS_NO_OFFSETOF_WARN): %.o: %.cpp
-       $(CXX) $(CPP_COMP_OPT) -I$(TESTHDR_SRC_DIR) -I$(TEST_COMMONHDR_SRC_DIR) -Wno-invalid-offsetof $< -o $@
-
-
-TEST_SRC_DIR=../tests/unit
-TEST_DATA_DIR=`pwd`/../tests/data
-
-CDSUNIT_COMMON_FILE=
-
-include ../projects/source.unit.map.mk
-CDSUNIT_MAP_SOURCES := $(CDSUNIT_MAP_SOURCES:%.cpp=../%.cpp)
-CDSUNIT_MAP_OBJS := $(CDSUNIT_MAP_SOURCES:%.cpp=%.o)
-
-include ../projects/source.unit.set.mk
-CDSUNIT_SET_SOURCES := $(CDSUNIT_SET_SOURCES:%.cpp=../%.cpp)
-CDSUNIT_SET_OBJS := $(CDSUNIT_SET_SOURCES:%.cpp=%.o)
-
-include ../projects/source.unit.queue.mk
-CDSUNIT_QUEUE_SOURCES := $(CDSUNIT_QUEUE_SOURCES:%.cpp=../%.cpp)
-CDSUNIT_QUEUE_OBJS := $(CDSUNIT_QUEUE_SOURCES:%.cpp=%.o)
-
-include ../projects/source.unit.pqueue.mk
-CDSUNIT_PQUEUE_SOURCES := $(CDSUNIT_PQUEUE_SOURCES:%.cpp=../%.cpp)
-CDSUNIT_PQUEUE_OBJS := $(CDSUNIT_PQUEUE_SOURCES:%.cpp=%.o)
-
-include ../projects/source.unit.stack.mk
-CDSUNIT_STACK_SOURCES := $(CDSUNIT_STACK_SOURCES:%.cpp=../%.cpp)
-CDSUNIT_STACK_OBJS := $(CDSUNIT_STACK_SOURCES:%.cpp=%.o)
-
-include ../projects/source.unit.misc.mk
-CDSUNIT_MISC_SOURCES := $(CDSUNIT_MISC_SOURCES:%.cpp=../%.cpp)
-CDSUNIT_MISC_OBJS := $(CDSUNIT_MISC_SOURCES:%.cpp=%.o)
-
-TEST_OBJ_FILE := $(CDSUNIT_COMMON_FILE) $(CDSUNIT_MAP_OBJS) $(CDSUNIT_SET_OBJS) $(CDSUNIT_QUEUE_OBJS) $(CDSUNIT_PQUEUE_OBJS) \
-       $(CDSUNIT_STACK_OBJS) $(CDSUNIT_MISC_OBJS)
-TEST_OBJ_FILE_DEPS := $(TEST_OBJ_FILE:%.o=%.d)
-
--include $(TEST_OBJ_FILE_DEPS)
-$(TEST_OBJ_FILE): %.o: %.cpp
-       $(CXX) $(CPP_COMP_OPT) -I$(TEST_SRC_DIR) -I$(TEST_COMMONHDR_SRC_DIR) $< -o $@
-
-CDSUNIT_MAP_EXE=$(BIN_PATH)/cdsu-map
-CDSUNIT_SET_EXE=$(BIN_PATH)/cdsu-set
-CDSUNIT_QUEUE_EXE=$(BIN_PATH)/cdsu-queue
-CDSUNIT_PQUEUE_EXE=$(BIN_PATH)/cdsu-pqueue
-CDSUNIT_STACK_EXE=$(BIN_PATH)/cdsu-stack
-CDSUNIT_MISC_EXE=$(BIN_PATH)/cdsu-misc
-CDSUNIT_EXE_FILES= $(CDSUNIT_MAP_EXE) $(CDSUNIT_SET_EXE) $(CDSUNIT_QUEUE_EXE) $(CDSUNIT_PQUEUE_EXE) $(CDSUNIT_STACK_EXE) $(CDSUNIT_MISC_EXE)
-
-unit-map: $(CDSUNIT_MAP_EXE)
-unit-set: $(CDSUNIT_SET_EXE)
-unit-queue: $(CDSUNIT_QUEUE_EXE)
-unit-pqueue: $(CDSUNIT_PQUEUE_EXE)
-unit-stack: $(CDSUNIT_STACK_EXE)
-
-ifeq ($(platform),mingw)
-make_test : $(BIN_PATH)/test-hdr $(CDSUNIT_EXE_FILES)
-       cd $(TEST_DATA_DIR); perl -X split.pl
-       cp -f $(TEST_DATA_DIR)/test.conf $(TEST_DATA_DIR)/test-debug.conf $(TEST_DATA_DIR)/dictionary.txt $(BIN_PATH)
-else
-make_test : $(BIN_PATH)/test-hdr $(CDSUNIT_EXE_FILES)
-       cd $(TEST_DATA_DIR); perl -X split.pl
-       ln -sf $(TEST_DATA_DIR)/test.conf $(TEST_DATA_DIR)/test-debug.conf $(TEST_DATA_DIR)/dictionary.txt $(BIN_PATH)
-endif
-
-$(BIN_PATH)/test-hdr : $(TEST_COMMON_OBJS) $(TESTHDR_OBJS) $(TESTHDR_OBJS_NO_OFFSETOF_WARN)
-       $(CXX) $(LD_OPTS) -L$(BIN_PATH) \
-       $(TESTHDR_OBJS) $(TESTHDR_OBJS_NO_OFFSETOF_WARN) $(TEST_COMMON_OBJS) \
-       -o $@ $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_LIBS) $(LDLIBS)
-
-$(CDSUNIT_MAP_EXE) : $(CDSUNIT_MAP_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
-       $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_MAP_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) -o $@ $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_LIBS) $(LDLIBS)
-
-$(CDSUNIT_SET_EXE) : $(CDSUNIT_SET_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
-       $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_SET_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) -o $@ $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_LIBS) $(LDLIBS)
-
-$(CDSUNIT_QUEUE_EXE) : $(CDSUNIT_QUEUE_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
-       $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_QUEUE_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) -o $@ $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_LIBS) $(LDLIBS)
-
-$(CDSUNIT_PQUEUE_EXE) : $(CDSUNIT_PQUEUE_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
-       $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_PQUEUE_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) -o $@ $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_LIBS) $(LDLIBS)
-
-$(CDSUNIT_STACK_EXE) : $(CDSUNIT_STACK_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
-       $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_STACK_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) -o $@ $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_LIBS) $(LDLIBS)
-
-$(CDSUNIT_MISC_EXE) : $(CDSUNIT_MISC_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
-       $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_MISC_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) -o $@ $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_LIBS) $(LDLIBS)
-
-
-CDSUNIT_MAP_EXE_DBG=$(CDSUNIT_MAP_EXE)-d
-CDSUNIT_SET_EXE_DBG=$(CDSUNIT_SET_EXE)-d
-CDSUNIT_QUEUE_EXE_DBG=$(CDSUNIT_QUEUE_EXE)-d
-CDSUNIT_PQUEUE_EXE_DBG=$(CDSUNIT_PQUEUE_EXE)-d
-CDSUNIT_STACK_EXE_DBG=$(CDSUNIT_STACK_EXE)-d
-CDSUNIT_MISC_EXE_DBG=$(CDSUNIT_MISC_EXE)-d
-CDSUNIT_EXE_DBG_FILES= $(CDSUNIT_MAP_EXE_DBG) $(CDSUNIT_SET_EXE_DBG) $(CDSUNIT_QUEUE_EXE_DBG) $(CDSUNIT_PQUEUE_EXE_DBG) \
-       $(CDSUNIT_STACK_EXE_DBG) $(CDSUNIT_MISC_EXE_DBG)
-
-unit-map-dbg: $(CDSUNIT_MAP_EXE_DBG)
-unit-set-dbg: $(CDSUNIT_SET_EXE_DBG)
-unit-queue-dbg: $(CDSUNIT_QUEUE_EXE_DBG)
-unit-pqueue-dbg: $(CDSUNIT_PQUEUE_EXE_DBG)
-unit-stack-dbg: $(CDSUNIT_STACK_EXE_DBG)
-
-ifeq ($(platform),mingw)
-make_debug_test : $(BIN_PATH)/test-hdr-debug $(CDSUNIT_EXE_DBG_FILES)
-       cd $(TEST_DATA_DIR); perl -X split.pl
-       cp -f $(TEST_DATA_DIR)/test.conf $(TEST_DATA_DIR)/test-debug.conf $(TEST_DATA_DIR)/dictionary.txt $(BIN_PATH)
-else
-make_debug_test : $(BIN_PATH)/test-hdr-debug $(CDSUNIT_EXE_DBG_FILES)
-       cd $(TEST_DATA_DIR); perl -X split.pl
-       ln -sf $(TEST_DATA_DIR)/test.conf $(TEST_DATA_DIR)/test-debug.conf $(TEST_DATA_DIR)/dictionary.txt $(BIN_PATH)
-endif
-
-$(BIN_PATH)/test-hdr-debug : $(TESTHDR_OBJS) $(TESTHDR_OBJS_NO_OFFSETOF_WARN) $(TEST_COMMON_OBJS)
-       $(CXX) $(LD_OPTS) -L$(BIN_PATH) \
-       $(TESTHDR_OBJS) $(TESTHDR_OBJS_NO_OFFSETOF_WARN) $(TEST_COMMON_OBJS) \
-       -o $@ $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_DEBUG_LIBS) $(LDLIBS)
-
-$(CDSUNIT_MAP_EXE_DBG) : $(CDSUNIT_MAP_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
-       $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_MAP_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) -o $@ $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_DEBUG_LIBS) $(LDLIBS)
-
-$(CDSUNIT_SET_EXE_DBG) : $(CDSUNIT_SET_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
-       $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_SET_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) -o $@ $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_DEBUG_LIBS) $(LDLIBS)
-
-$(CDSUNIT_QUEUE_EXE_DBG) : $(CDSUNIT_QUEUE_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
-       $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_QUEUE_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) -o $@ $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_DEBUG_LIBS) $(LDLIBS)
-
-$(CDSUNIT_PQUEUE_EXE_DBG) : $(CDSUNIT_PQUEUE_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
-       $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_PQUEUE_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) -o $@ $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_DEBUG_LIBS) $(LDLIBS)
-
-$(CDSUNIT_STACK_EXE_DBG) : $(CDSUNIT_STACK_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
-       $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_STACK_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) -o $@ $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_DEBUG_LIBS) $(LDLIBS)
-
-$(CDSUNIT_MISC_EXE_DBG) : $(CDSUNIT_MISC_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
-       $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_MISC_OBJS) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) -o $@ $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_DEBUG_LIBS) $(LDLIBS)
-
-test: make_test 
-test_debug: make_debug_test
-
-test_hdr: $(BIN_PATH)/test-hdr
-test_hdr_debug: $(BIN_PATH)/test-hdr-debug
-
-##########################################
-#
-clean: 
-       rm -f $(OBJ_PATH)/debug/*
-       rm -f $(OBJ_PATH)/release/*
-       rm -f $(TEST_COMMON_OBJS) $(TESTHDR_OBJS) $(TESTHDR_OBJS_NO_OFFSETOF_WARN) $(TEST_OBJ_FILE)
-       rm -f $(TEST_COMMON_OBJS_DEPS) $(TESTHDR_OBJS_DEPS) $(TESTHDR_OBJS_NO_OFFSETOF_WARN_DEPS) $(TEST_OBJ_FILE_DEPS)
-       rm -f $(BIN_PATH)/libcds*
-       rm -f $(BIN_PATH)/cdsu-*
-       rm -f $(BIN_PATH)/test-hdr
-
diff --git a/build/build.sh b/build/build.sh
deleted file mode 100644 (file)
index c7e253f..0000000
+++ /dev/null
@@ -1,599 +0,0 @@
-#!/bin/sh
-
-# cds library build script
-# Maxim Khiszinsky 04.01.2009
-
-# The following variables are defined and exported at the end of this script.
-#
-# LDFLAGS
-# CFLAGS
-# CXXFLAGS
-# CXX
-# CC
-# BITSTOBUILD
-
-usage()
-{
-    echo "Build helper script for one of the supported platforms"
-    echo "Usage: build.sh \"options\""
-    echo "       where options may be any of the following:"
-    echo "       -t <target> make target"
-    echo "       -c <C compiler name> Possible values are: gcc,clang,icc"
-    echo "       -x <C++ compiler name> (e.g. g++, CC)"
-    echo "       -p <Processor architecture> Possible values are:"
-    echo "             x86, amd64 (x86_64), sparc, ia64"
-    echo "       -o <OS family> Possible values are:"
-    echo "             linux, sunos (solaris), hpux, darwin"
-    echo "       -D <define> define"
-    echo "       -b <bitsToBuild> (accepts '64', '32')"
-    echo "       -l <extra linker options>"
-    echo "       -z <extra compiler options>"
-    echo "       -j <number of make jobs. default 2>"
-    echo "       -h (to get help on the above commands)"
-    echo "       --with-boost <path to boost include>"
-    echo "       --debug-cxx-options <extra compiler options for debug target>"
-    echo "       --debug-ld-options <extra linker options for debug target>"
-    echo "       --release-cxx-options <extra compiler options for release target>"
-    echo "       --release-ld-options <extra linker options for release target>"
-    echo "       --clean clean all before building"
-    echo "       --debug-test make unit test in debug mode"
-    echo "       --amd64-use-128bit use 128bit (16byte) CAS on amd64"
-    echo "       --arch-tune march flag (only for x86/amd64), default = native"
-    echo "       --nodefaultlibs - no default libs (pthread, stdc++)"
-    echo "       --optimize-flags - optimization level flags for release target, default -O3"
-}
-
-ERROR_EXIT_CODE=1
-
-MAKE=make
-
-# Set up the default values for each parameter
-debug=off                # by default debug is off
-bitsToBuild=0            # unknown
-makejobs=2
-cppcompiler=g++
-ccompiler=gcc
-processor_arch=unknown
-OS_FAMILY=unknown
-ArchFlag=native
-ld_nodefaultlibs=off
-
-BOOST_INCLUDE_PATH=
-makeclean=off
-
-MAKE_DEBUG_TEST=0
-ld_libs="-lpthread -ldl -lstdc++"
-
-cxx_debug_options=
-ld_debug_options=
-
-cxx_release_options=
-ld_release_options=
-
-cxx_test_release_options=
-ls_test_release_options=
-
-cxx_release_optimization="-fno-strict-aliasing"
-cxx_release_optimization_level="-O3"
-
-amd64_cxx_options=
-
-OS_VERSION=
-TOOLSET_SUFFIX=
-
-target=test
-
-while [ $# -gt 0 ]
-   do
-   case $1 in
-   -t)
-               target=$2
-               shift 2
-               ;;
-   -c)
-        ccompiler=$2
-               shift 2
-               ;;
-   -x)
-        cppcompiler=$2
-               shift 2
-               ;;
-   -o)
-               OS_FAMILY=$2
-               shift 2
-               ;;
-   -p)
-        processor_arch=$2; shift 2
-               ;;
-   -b)
-        bitsToBuild=$2
-               shift 2
-               ;;
-   -l)
-        linkeroptions="$linkeroptions $2"
-               shift 2
-               ;;
-   -z)
-        compileroptions="$compileroptions $2"
-               shift 2
-               ;;
-   -j)
-        makejobs=$2
-               shift 2
-               ;;
-   -D)
-       EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS -D$2"
-               shift 2
-               ;;
-   -h)
-        usage
-        exit $ERROR_EXIT_CODE;; 
-       
-    --clean)
-       makeclean=on
-       shift
-       ;;              
-    --with-boost)
-       BOOST_INCLUDE_PATH=$2
-       shift 2
-       ;;      
-    --debug-cxx-options)
-       cxx_debug_options=$2
-       shift 2
-       ;;
-    --debug-ld-options)
-       ld_debug_options=$2
-       shift 2
-       ;;
-    --release-cxx-options)
-       cxx_release_options=$2
-       shift 2
-       ;;
-    --optimize-flags)
-       cxx_release_optimization_level=$2
-       shift 2
-       ;;
-    --release-ld-options)
-       ld_release_options=$2
-       shift 2
-       ;;
-    --nodefaultlibs)
-       ld_libs=" "
-       shift
-       ;;
-    --with-make)
-        MAKE=$2
-       shift 2
-       ;;
-    --platform-suffix)
-        OS_VERSION=$2
-       shift 2
-       ;;
-    --toolset-suffix)
-       TOOLSET_SUFFIX=$2
-       shift 2
-       ;;
-    --debug-test)
-       MAKE_DEBUG_TEST=1
-       if test $target = 'test'; then
-               target=test_debug
-       fi
-       shift 1
-       ;;
-   --amd64-use-128bit)
-       amd64_cxx_options='-mcx16'
-       shift 1
-       ;;
-   --arch-tune)
-       ArchFlag=$2
-       shift 2
-       ;;
-   --)
-       shift; break;; 
-
-   *)
-       echo "unknown option $1"
-       usage
-       exit $ERROR_EXIT_CODE;;
-   esac
-done
-
-cxx_release_optimization="$cxx_release_optimization_level $cxx_release_optimization"
-
-# Determine compiler
-case $ccompiler in
-       gcc)
-               if test $cppcompiler = ''; then
-                       cppcompiler=g++
-               fi
-               ;;
-       clang)
-               if test $cppcompiler = ''; then
-                       cppcompiler=clang++
-               fi
-               ;;
-       icc)
-               if test $cppcompiler = ''; then
-                       cppcompiler=icc
-               fi
-               ;;
-       *)
-               echo "ERROR: Unknown compiler: $ccompiler"
-               exit $ERROR_EXIT_CODE
-               ;;
-esac
-
-# Determine OS family
-if test $OS_FAMILY = 'unknown'; then
-       OS_FAMILY=`uname |tr [A-Z] [a-z]|sed "s/-//"`
-fi
-case $OS_FAMILY in
-    hp-ux)
-       OS_FAMILY=hpux
-       ;;
-    solaris)
-       OS_FAMILY=sunos
-       ;;
-    mingw*)
-       OS_FAMILY=mingw
-       ;;
-    linux|sunos|hpux|aix|freebsd|mingw|darwin)
-       ;;
-    *)
-       echo "Warning: Unknown operation system: $OS_FAMILY"
-       #exit $ERROR_EXIT_CODE
-       ;;
-esac
-
-
-# Determine processor architecture
-if test $processor_arch = 'unknown'; then
-       processor_arch=`uname -m|tr [A-Z] [a-z]`
-fi
-case $processor_arch in
-       x86_64)
-           if test $bitsToBuild = 64; then
-               processor_arch='amd64'
-           else
-               processor_arch='x86'
-           fi;
-           ;;
-       x86|i686)
-               if test $bitsToBuild = 64; then
-                       processor_arch='amd64'
-               else
-                       processor_arch='x86'
-               fi
-               ;;
-       sparc64)
-               processor_arch='sparc'
-               ;;
-       amd64|x86|ia64|sparc)
-               ;;
-       *)
-               processor_arch=`uname -p|tr [A-Z] [a-z]`
-               case $processor_arch in
-                   sparc|powerpc)
-                       ;;
-                   *)
-                       echo "Warning: Unknown processor architecture: $processor_arch"
-                       #exit ${ERROR_EXIT_CODE}
-                       ;;
-               esac                    
-               1;;
-esac   
-
-# Determine compiler flags
-case $ccompiler in
-    gcc|clang)
-       case $processor_arch in
-       amd64)
-           case $OS_FAMILY in
-           linux|freebsd|darwin)
-               buildCXXflags="-m64 -fPIC -march=$ArchFlag $amd64_cxx_options"
-               buildCflags="-m64 -fPIC -march=$ArchFlag $amd64_cxx_options"
-               buildLDflags="-m64 -fPIC"
-               buildTestLDflags="-m64 -fPIC"
-               ;;
-           mingw)
-               buildCXXflags="-m64 -march=$ArchFlag $amd64_cxx_options"
-               buildCflags="-m64 -march=$ArchFlag $amd64_cxx_options"
-               buildLDflags="-m64"
-               buildTestLDflags="-m64"
-                ld_libs=""
-               ;;
-           *)
-               echo "Warning: cannot determine compiler flags for processor $processor_arch, OS $OS_FAMILY, and compiler $ccompiler"
-               #exit ${ERROR_EXIT_CODE}
-               ;;
-           esac
-           ;;
-       x86)
-           case $OS_FAMILY in
-               linux|freebsd|darwin)
-                   buildCXXflags="-m32 -fPIC -march=$ArchFlag"
-                   buildCflags="-m32 -fPIC -march=$ArchFlag"
-                   buildLDflags="-m32 -fPIC"
-                   buildTestLDflags="-m32 -fPIC"
-                   ;;
-               mingw)
-                   buildCXXflags="-m32 -march=$ArchFlag"
-                   buildCflags="-m32 -march=$ArchFlag"
-                   buildLDflags="-m32"
-                   buildTestLDflags="-m32"
-                   ld_libs=""
-                   ;;
-               *)
-                   echo "Warning: cannot determine compiler flags for processor $processor_arch, OS $OS_FAMILY, and compiler $ccompiler"
-                   #exit ${ERROR_EXIT_CODE}
-                   ;;
-           esac
-           ;;
-       ia64)
-           bitsToBuild=64
-           case $OS_FAMILY in
-               linux|freebsd)
-                   buildCXXflags="-mtune=itanium2 -fPIC"
-                   buildCflags="-mtune=itanium2 -fPIC"
-                   buildLDflags="-mtune=itanium2 -fPIC"
-                   buildTestLDflags="-mtune=itanium2 -fPIC"
-                   ;;
-               hpux)
-                   buildCXXflags="-mlp64 -mtune=itanium2 -fPIC"
-                   buildCflags="-mlp64 -mtune=itanium2 -fPIC"
-                   buildLDflags="-mlp64 -mtune=itanium2 -fPIC"
-                   buildTestLDflags="-mlp64 -mtune=itanium2 -fPIC"
-                   ;;
-               *)
-                   echo "Warning: cannot determine compiler flags for processor $processor_arch, OS $OS_FAMILY, and compiler $ccompiler"
-                   #exit ${ERROR_EXIT_CODE}
-                   ;;
-           esac
-           ;;
-       sparc)
-           bitsToBuild=64
-           case $OS_FAMILY in
-               sunos)
-                   buildCXXflags="-mcpu=v9 -mtune=ultrasparc3 -m64 -fPIC -pthreads"
-                   buildCflags="-mcpu=v9 -mtune=ultrasparc3 -m64 -fPIC -pthreads"
-                   buildLDflags="-mcpu=v9 -mtune=ultrasparc3 -m64 -fPIC -pthreads"
-                   buildTestLDflags="-mcpu=v9 -mtune=ultrasparc3 -m64 -fPIC -pthreads"
-                   cxx_test_release_options="-fPIC"
-                   ld_test_release_options="-fPIC"
-                   ;;
-               linux)
-                   buildCXXflags="-mcpu=v9 -mtune=ultrasparc3 -m64 -fPIC"
-                   buildCflags="-mcpu=v9 -mtune=ultrasparc3 -m64 -fPIC"
-                   buildLDflags="-mcpu=v9 -mtune=ultrasparc3 -m64 -fPIC"
-                   buildTestLDflags="-mcpu=v9 -mtune=ultrasparc3 -m64 -fPIC"
-                   cxx_test_release_options="-fPIC"
-                   ld_test_release_options="-fPIC"
-                   ;;
-               *)
-                   echo "Warning: cannot determine compiler flags for processor $processor_arch, OS $OS_FAMILY, and compiler $ccompiler"
-                   #exit ${ERROR_EXIT_CODE}
-                   ;;
-           esac
-           ;;
-       powerpc)
-           bitsToBuild=64
-           case $OS_FAMILY in
-               aix)
-                   buildCXXflags="-maix64 -pthread -fPIC"
-                   buildCflags="-maix64 -pthread -fPIC"
-                   buildLDflags="-maix64 -pthread -fPIC"
-                   buildTestLDflags="-maix64 -pthread -fPIC"
-                   cxx_test_release_options="-fPIC"
-                   ld_test_release_options="-fPIC"
-                   ;;
-               *)
-                   echo "Warning: cannot determine compiler flags for processor $processor_arch, OS $OS_FAMILY, and compiler $ccompiler"
-                   #exit ${ERROR_EXIT_CODE}
-                   ;;
-           esac
-           ;;
-       *)
-           echo "Warning: cannot determine compiler flags for processor $processor_arch and compiler $ccompiler"
-           #exit ${ERROR_EXIT_CODE}
-           ;;
-       esac
-
-       #cppcompiler_version=`$cppcompiler -dumpversion`
-       #echo compiler version=$cppcompiler $cppcompiler_version
-
-       # Setup target options
-       # buildCXXflags="-std=gnu++0x $buildCXXflags"
-       #cxx_debug_options="-D_DEBUG -O0 -g $cxx_debug_options"
-       #cxx_release_options="-DNDEBUG $cxx_release_optimization $cxx_release_options"
-       ;;
-    icc)
-       case $processor_arch in
-       amd64)
-           case $OS_FAMILY in
-           linux)
-               buildCXXflags="-fPIC -march=$ArchFlag $amd64_cxx_options"
-               buildCflags="-fPIC -march=$ArchFlag $amd64_cxx_options"
-               buildLDflags="-fPIC"
-               buildTestLDflags="-fPIC"
-               ;;
-           *)
-               echo "Warning: cannot determine compiler flags for processor $processor_arch, OS $OS_FAMILY, and compiler $ccompiler"
-               #exit ${ERROR_EXIT_CODE}
-               ;;
-           esac
-           ;;
-       x86)
-           case $OS_FAMILY in
-               linux)
-                   buildCXXflags="-fPIC -march=$ArchFlag"
-                   buildCflags="-fPIC -march=$ArchFlag"
-                   buildLDflags="-fPIC"
-                   buildTestLDflags="-fPIC"
-                   ;;
-               *)
-                   echo "Warning: cannot determine compiler flags for processor $processor_arch, OS $OS_FAMILY, and compiler $ccompiler"
-                   #exit ${ERROR_EXIT_CODE}
-                   ;;
-           esac
-           ;;
-       *)
-           echo "Warning: cannot determine compiler flags for processor $processor_arch and compiler $ccompiler"
-           #exit ${ERROR_EXIT_CODE}
-           ;;
-       esac
-       ;;
-    *)
-       echo "ERROR: Unknown compiler: $ccompiler"
-       exit ${ERROR_EXIT_CODE}
-       ;;
-esac
-
-cppcompiler_version=`$cppcompiler -dumpversion`
-echo compiler version=$cppcompiler $cppcompiler_version
-
-# Setup target options
-# buildCXXflags="-std=gnu++0x $buildCXXflags"
-cxx_debug_options="-D_DEBUG -O0 -g $cxx_debug_options"
-cxx_release_options="-DNDEBUG $cxx_release_optimization $cxx_release_options"
-
-
-if test "x$BOOST_INCLUDE_PATH" != "x"; then
-       buildCXXflags="$buildCXXflags -I$BOOST_INCLUDE_PATH"
-fi
-
-if test "x$buildTestLDflags" = "x"; then
-       buildTestLDflags=$buildLDflags
-fi
-
-
-EXTRA_CXXFLAGS="$buildCXXflags $EXTRA_CXXFLAGS"
-EXTRA_CFLAGS="$buildCflags $EXTRA_CFLAGS"
-EXTRA_LDFLAGS="$buildLDflags $EXTRA_LDFLAGS"
-
-EXTRA_TEST_LDFLAGS="$buildTestLDflags $EXTRA_TEST_LDFLAGS"
-
-
-echo "Building with the following options ..."
-echo "Processor: $processor_arch"
-echo "Platform: $OS_FAMILY"
-echo "C Compiler: $ccompiler"
-echo "C++ Compiler: $cppcompiler"
-echo "C++ Compiler version: $cppcompiler_version"
-echo "Bits to build: $bitsToBuild"
-echo "Compile options: $compileroptions $EXTRA_CXXFLAGS"
-echo "Link options: $linkeroptions $EXTRA_LDFLAGS"
-echo "Link options (for test cds-unit app): $linkeroptions $EXTRA_TEST_LDFLAGS"
-
-BITSTOBUILD=$bitsToBuild
-export BITSTOBUILD
-
-#
-# Set the C compiler and C++ compiler environment variables
-#
-
-CC="$ccompiler"
-export CC
-
-CXX="$cppcompiler"
-export CXX
-
-ROOT_DIR=..
-
-GOAL_DIR=$ccompiler$TOOLSET_SUFFIX-$processor_arch-$OS_FAMILY$OS_VERSION-$bitsToBuild
-BIN_PATH=$ROOT_DIR/bin/$GOAL_DIR
-mkdir -p $BIN_PATH
-
-OBJ_PATH=$ROOT_DIR/obj/$GOAL_DIR
-mkdir -p $OBJ_PATH
-
-echo PATH=$PATH
-echo LD_LIBRARY_PATH=$LD_LIBRARY_PATH
-echo BIN_PATH=$BIN_PATH
-echo OBJ_PATH=$OBJ_PATH
-echo `${CXX} --version | head -1`
-echo Build started
-
-makegoals=
-if test $makeclean = 'on'; then
-   echo Clean all
-   $MAKE -f Makefile clean platform=$OS_FAMILY BIN_PATH=$BIN_PATH OBJ_PATH=$OBJ_PATH
-fi
-
-echo ---------------------------------
-echo Make debug library
-#CXXFLAGS="$compileroptions $cxx_debug_options $EXTRA_CXXFLAGS"
-#export CXXFLAGS
-#CFLAGS="$compileroptions $cxx_debug_options $EXTRA_CFLAGS $debugflag "
-#export CFLAGS
-#LDFLAGS="$linkeroptions -shared $ld_debug_options $EXTRA_LDFLAGS "
-#export LDFLAGS
-
-mkdir -p $OBJ_PATH/debug
-
-CXXFLAGS="$compileroptions $cxx_debug_options $EXTRA_CXXFLAGS" \
-CFLAGS="$compileroptions $cxx_debug_options $EXTRA_CFLAGS $debugflag " \
-LDLIBS="$LDLIBS $ld_libs" \
-LDFLAGS="$linkeroptions -shared $ld_debug_options $EXTRA_LDFLAGS " \
-$MAKE -f Makefile \
-     platform=$OS_FAMILY \
-     BIN_PATH=$BIN_PATH \
-     OBJ_PATH=$OBJ_PATH/debug \
-     debug \
-  || exit $?
-
-echo ---------------------------------
-echo Make release library
-
-#CXXFLAGS="$compileroptions $cxx_release_options $EXTRA_CXXFLAGS "
-#export CXXFLAGS
-#CFLAGS="$compileroptions $cxx_release_options $EXTRA_CFLAGS "
-#export CFLAGS
-#LDFLAGS="$linkeroptions -shared $ld_resease_options $ld_libs $EXTRA_LDFLAGS "
-#export LDFLAGS
-
-mkdir -p $OBJ_PATH/release
-
-CXXFLAGS="$compileroptions $cxx_release_options $EXTRA_CXXFLAGS " \
-CFLAGS="$compileroptions $cxx_release_options $EXTRA_CFLAGS " \
-LDFLAGS="$linkeroptions -shared $ld_resease_options $EXTRA_LDFLAGS " \
-LDLIBS="$LDLIBS $ld_libs" \
-$MAKE -f Makefile \
-     platform=$OS_FAMILY \
-     BIN_PATH=$BIN_PATH \
-     OBJ_PATH=$OBJ_PATH/release \
-     release \
-  || exit $?
-
-
-echo ---------------------------------
-echo Make tests
-
-if test $MAKE_DEBUG_TEST = '0'; then
-    CXXFLAGS="$compileroptions $cxx_release_options $cxx_test_release_options $EXTRA_CXXFLAGS " \
-    CFLAGS="$compileroptions $cxx_release_options $EXTRA_CFLAGS " \
-    LDFLAGS="$linkeroptions $ld_release_options $ld_test_release_options $EXTRA_TEST_LDFLAGS " \
-    LDLIBS="$LDLIBS $ld_libs" \
-    $MAKE -f Makefile -j $makejobs \
-        platform=$OS_FAMILY \
-        BIN_PATH=$BIN_PATH \
-        OBJ_PATH=$OBJ_PATH/test \
-        $target \
-     || exit $?
-fi    
-
-echo ---------------------------------
-echo Make tests debug
-
-if test $MAKE_DEBUG_TEST = '1'; then
-    CXXFLAGS="$compileroptions $cxx_debug_options $cxx_test_release_options $EXTRA_CXXFLAGS " \
-    CFLAGS="$compileroptions $cxx_debug_options $EXTRA_CFLAGS " \
-    LDFLAGS="$linkeroptions $ld_debug_options $ld_test_release_options $EXTRA_TEST_LDFLAGS " \
-    LDLIBS="$LDLIBS $ld_libs" \
-    $MAKE -f Makefile -j $makejobs \
-        platform=$OS_FAMILY \
-        BIN_PATH=$BIN_PATH \
-        OBJ_PATH=$OBJ_PATH/test-debug \
-        $target \
-     || exit $?
-fi   
index 65f13d767b0acc6b7a613146ba06155f39d2d254..5d769e4d65428f3cec8dbb765014d25cc3d97e89 100644 (file)
@@ -39,7 +39,7 @@ In order to package library *CPack* is used, command *cpack -G <Generator>* shou
 - mkdir libcds-release
 - cd libcds-release
 - cmake -DWITH\_TESTS=ON -DCMAKE\_BUILD_TYPE=RELEASE ../libcds
-
+```
     -- The C compiler identification is GNU 4.8.3
     -- The CXX compiler identification is GNU 4.8.3
     ...
@@ -52,9 +52,9 @@ In order to package library *CPack* is used, command *cpack -G <Generator>* shou
     -- Configuring done
     -- Generating done
     -- Build files have been written to: <...>/libcds-release
-    
+``` 
 - make -j4
-  
+```
     Scanning dependencies of target cds
     Scanning dependencies of target test-common
     Scanning dependencies of target cds-s
@@ -63,9 +63,10 @@ In order to package library *CPack* is used, command *cpack -G <Generator>* shou
     ...
     [100%] Built target test-hdr
     gmake: Ð²Ñ‹Ñ…од Ð¸Ð· ÐºÐ°Ñ‚алога Â«/home/kel/projects_cds/libcds-debug»
-        
-- ctest
+```
 
+- ctest
+```
     Test project /home/kel/projects_cds/libcds-debug
         Start 1: test-hdr
     1/7 Test #1: test-hdr .........................   Passed  1352.24 sec
@@ -73,9 +74,10 @@ In order to package library *CPack* is used, command *cpack -G <Generator>* shou
     2/7 Test #2: cdsu-misc ........................   Passed    0.00 sec
         Start 3: cdsu-map
     ...
-    
-- cpack -G RPM
+```
 
+- cpack -G RPM
+```
     CPack: Create package using RPM
     CPack: Install projects
     CPack: - Run preinstall target for: cds
@@ -88,7 +90,8 @@ In order to package library *CPack* is used, command *cpack -G <Generator>* shou
     CPackRPM: Will use GENERATED spec file: /home/kel/projects_cds/libcds-debug/_CPack_Packages/Linux/RPM/SPECS/cds-lib.spec
     CPack: - package: /home/kel/projects_cds/libcds-debug/cds-2.1.0-1-devel.rpm generated.
     CPack: - package: /home/kel/projects_cds/libcds-debug/cds-2.1.0-1-lib.rpm generated.
-  
+```
+
 Future development
 ----------
 - CDash: use CI system
\ No newline at end of file
diff --git a/build/sample/build-freebsd-amd64.sh b/build/sample/build-freebsd-amd64.sh
deleted file mode 100755 (executable)
index 4fd2c7e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-
-PATH=/usr/local/bin:$PATH
-export PATH
-
-./build.sh \
---clean \
---with-make gmake \
---with-boost /usr/local/include \
--x g++43 \
--z '-std=c++0x -Wall -pedantic' \
--l "-L/usr/local/lib" \
-2>&1 | tee build-freebsd-amd64.log
diff --git a/build/sample/build-hpux1123.sh b/build/sample/build-hpux1123.sh
deleted file mode 100755 (executable)
index dde0165..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/sh
-clear
-
-export BOOST_ROOT=~/boost
-
-GCC_ROOT=/usr/local/gcc-433
-export PATH=${GCC_ROOT}/bin:${PATH}
-export LD_LIBRARY_PATH=${GCC_ROOT}/lib:${LD_LIBRARY_PATH}
-
-./build.sh -b 64 \
---clean \
--x 'g++' \
--z '-std=c++0x -Wall -pedantic' \
--l '-L${BOOST_ROOT}/bin/hpux1123-ia64' \
---with-boost ${BOOST_ROOT} \
---with-make gmake \
---platform-suffix 11.23 \
-2>&1 | tee build-hpux11.23-ia64.log
-
diff --git a/build/sample/build-hpux1131.sh b/build/sample/build-hpux1131.sh
deleted file mode 100755 (executable)
index 386387a..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/sh
-clear
-
-export BOOST_ROOT=~/boost
-
-GCC_ROOT=/usr/local/gcc-433
-export PATH=${GCC_ROOT}/bin:${PATH}
-export LD_LIBRARY_PATH=${GCC_ROOT}/lib:${LD_LIBRARY_PATH}
-
-./build.sh -b 64 \
---clean \
--x 'g++' \
--z '-std=c++0x -Wall -pedantic' \
--l '-L${BOOST_ROOT}/bin/hpux1131-ia64' \
---with-boost ${BOOST_ROOT} \
---with-make gmake \
---platform-suffix 11.31 \
-2>&1 | tee build-hpux11.31-ia64.log
-
diff --git a/build/sample/build-linux-amd64.sh b/build/sample/build-linux-amd64.sh
deleted file mode 100755 (executable)
index 3d83246..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/sh
-clear
-
-export BOOST_ROOT=~/boost
-
-GCC_ROOT=/usr/local/gcc-4.3.3
-export PATH=${GCC_ROOT}/bin:${PATH}
-export LD_LIBRARY_PATH=${GCC_ROOT}/lib:${LD_LIBRARY_PATH}
-
-./build.sh -b 64 \
---clean \
--x 'g++' \
--z '-std=c++0x -Wall -pedantic' \
--l '-L${BOOST_ROOT}/bin/linux-amd64' \
---with-boost ${BOOST_ROOT} \
---amd64-use-128bit \
-2>&1 | tee build-linux-amd64.log
-
diff --git a/build/sample/build-linux-ia64.sh b/build/sample/build-linux-ia64.sh
deleted file mode 100755 (executable)
index 7ca441e..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/sh
-clear
-
-export BOOST_ROOT=~/boost
-
-GCC_ROOT=/usr/local/gcc-4.3.3
-export PATH=${GCC_ROOT}/bin:${PATH}
-export LD_LIBRARY_PATH=${GCC_ROOT}/lib:${LD_LIBRARY_PATH}
-
-./build.sh -b 64 \
---clean \
--x 'g++' \
--z '-std=c++0x -Wall -pedantic' \
--l '-L${BOOST_ROOT}/bin/linux-ia64' \
---with-boost ${BOOST_ROOT} \
-2>&1 | tee build-linux-ia64.log
-
diff --git a/build/sample/build-linux-ppc64.sh b/build/sample/build-linux-ppc64.sh
deleted file mode 100755 (executable)
index 8e55073..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/sh
-clear
-
-export BOOST_ROOT=~/boost/boost_1_57_0
-
-GCC_ROOT=/opt/cfarm/release/4.9.2
-export PATH=${GCC_ROOT}/bin:${PATH}
-export LD_LIBRARY_PATH=${GCC_ROOT}/lib:${LD_LIBRARY_PATH}
-
-./build.sh -b 64 -j 8 \
---clean \
--x 'g++' \
--z '-std=c++0x -Wall -Wextra -pedantic -m64' \
--l '-L${BOOST_ROOT}/stage64/lib' \
---with-boost ${BOOST_ROOT} \
-2>&1 | tee build-linux-ppc64.log
-
diff --git a/build/sample/build-linux-sparc.sh b/build/sample/build-linux-sparc.sh
deleted file mode 100755 (executable)
index 084b675..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-clear
-
-BOOST_ROOT=~/boost/boost_1_49_0
-export BOOST_ROOT
-
-./build.sh -b 64 -j 2 \
--x 'g++' \
--z '-std=c++0x -Wall -pedantic' \
--l '-L/opt/cfarm/release/4.4.1-64/lib64 -L${BOOST_ROOT}/stage64/lib' \
---with-boost ${BOOST_ROOT} \
-2>&1 | tee build-linux-sparc.log
-
-
diff --git a/build/sample/build-linux-x86.sh b/build/sample/build-linux-x86.sh
deleted file mode 100755 (executable)
index a2e638e..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/sh
-clear
-
-export BOOST_ROOT=~/boost
-
-GCC_ROOT=/usr/local/gcc-4.3.3
-export PATH=${GCC_ROOT}/bin:${PATH}
-export LD_LIBRARY_PATH=${GCC_ROOT}/lib:${LD_LIBRARY_PATH}
-
-./build.sh -b 32 \
---clean \
--x 'g++' \
--z '-std=c++0x -Wall -pedantic' \
--l '-L${BOOST_ROOT}/bin/linux-x86' \
---with-boost ${BOOST_ROOT} \
-2>&1 | tee build-linux-x86.log
-
diff --git a/build/sample/build-mingw-amd64.bat b/build/sample/build-mingw-amd64.bat
deleted file mode 100644 (file)
index 8b11b20..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-
-:: This sample demonstrates how to build libcds in MinGW (http://tdm-gcc.tdragon.net/).
-:: Run TDM-GCC console, change dir to libcds build directory and run this batch file
-::
-:: BOOST_PATH - environment variable that contains full path to boost root directory
-::              for example: set BOOST_PATH=d:\libs\boost_1_56_0
-::
-
-set BOOST_PATH=c:/works/libs/boost/boost_1_56_0
-
-:: We use -DBOOST_THREAD_USE_LIB flag since static libboost_thread is used
-
-build.sh -b 64 -x 'g++' -z '-std=c++0x -Wall -Wextra -pedantic -Wno-unused-local-typedefs -DBOOST_THREAD_USE_LIB -D_WIN32_WINNT=0x0500' -l "-L%BOOST_PATH%/stage-mingw64/lib" --with-boost "%BOOST_PATH%" --with-make mingw32-make 2>&1 | tee build-mingw-amd64.log
-
diff --git a/build/sample/build-osx-clang-libc++.sh b/build/sample/build-osx-clang-libc++.sh
deleted file mode 100755 (executable)
index 8c2aad2..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-#! /bin/sh
-
-BOOST_ROOT=~/works/libs/boost_1_55_0
-./build.sh \
-    --clean \
-    -c clang \
-    -x clang \
-    -b 64 \
-    -z "--std=c++11 -DCDS_USE_LIBCDS_ATOMIC -I/usr/lib/c++/v1 -I$BOOST_ROOT" \
-    -l "-L$BOOST_ROOT/stage64-clang/lib -lc++ -lc++abi -lpthread -ldl" \
-    --nodefaultlibs \
-    --with-boost $BOOST_ROOT \
-    --arch-tune core2 \
-    2>&1 |tee build.log
-    
-#     -z "--std=c++11 -DCDS_USE_LIBCDS_ATOMIC -I/usr/lib/c++/v1 -I/usr/include -I$BOOST_ROOT"
diff --git a/build/sample/build-osx-gcc.sh b/build/sample/build-osx-gcc.sh
deleted file mode 100755 (executable)
index ee0d73d..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-#! /bin/sh
-
-BOOST_ROOT=~/works/libs/boost_1_55_0
-MACOS_SDK_INCLUDE=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include
-
-./build.sh \
-    --clean \
-    -c gcc \
-    -x gcc-4.8 \
-    -b 64 \
-    -z "--std=c++11 -I$BOOST_ROOT -I$MACOS_SDK_INCLUDE" \
-    -l "-L$BOOST_ROOT/stage64/lib" \
-    --with-boost $BOOST_ROOT \
-    --arch-tune core2 \
-    2>&1 |tee build.log
-    
diff --git a/build/sample/build-sun-sparc.sh b/build/sample/build-sun-sparc.sh
deleted file mode 100755 (executable)
index 7fa3f45..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-clear
-
-BOOST_ROOT=~/boost
-export BOOST_ROOT
-
-GCC_ROOT=/usr/local/gcc433
-PATH=${GCC_ROOT}/bin:${PATH}
-export PATH
-LD_LIBRARY_PATH=${GCC_ROOT}/lib:/usr/local/lib/mpfr-2.4.1/lib:/usr/local/lib/gmp-4.2.4/lib:${LD_LIBRARY_PATH}
-export LD_LIBRARY_PATH
-
-./build.sh -b 64 \
---clean \
--x 'g++' \
--z '-std=c++0x -Wall -pedantic' \
--l '-L${BOOST_ROOT}/bin/sun-sparc64' \
---with-boost ${BOOST_ROOT} \
-2>&1 | tee build-sun-sparc.log
-
-
index c2306e860d3d6fbbfcc6bf73ebaa990274d1b4b4..a30737aa1a3758fddc5b944ae78d9d638d36fd66 100644 (file)
@@ -189,12 +189,11 @@ namespace cds {
             {
                 m_counter.store( 0, atomics::memory_order_release );
             }
-
         };
 
         /// Atomic item counter
         /**
-            This class is simplified interface around <tt>std::atomic_size_t</tt>.
+            This class is simplified interface around \p std::atomic_size_t.
             The class supports getting of current value of the counter and increment/decrement its value.
         */
         class item_counter
index d5324c8cbac072560611c3a848c46016f1fe6e38..c033d6c02e2bcf607b347149cab2e59f4dedc44d 100644 (file)
@@ -180,7 +180,7 @@ namespace cds { namespace algo {
             void    onCombining()               { ++m_nCombiningCount; }
             void    onCompactPublicationList()  { ++m_nCompactPublicationList; }
             void    onDeactivatePubRecord()     { ++m_nDeactivatePubRecord; }
-            void    onActivatPubRecord()        { ++m_nActivatePubRecord; }
+            void    onActivatePubRecord()       { ++m_nActivatePubRecord; }
             void    onCreatePubRecord()         { ++m_nPubRecordCreated; }
             void    onDeletePubRecord()         { ++m_nPubRecordDeteted; }
             void    onAcquirePubRecord()        { ++m_nAcquirePubRecCount; }
@@ -196,7 +196,7 @@ namespace cds { namespace algo {
             void    onCombining()               {}
             void    onCompactPublicationList()  {}
             void    onDeactivatePubRecord()     {}
-            void    onActivatPubRecord()        {}
+            void    onActivatePubRecord()       {}
             void    onCreatePubRecord()         {}
             void    onDeletePubRecord()         {}
             void    onAcquirePubRecord()        {}
@@ -338,7 +338,7 @@ namespace cds { namespace algo {
 
                     publication_record * pRec = p;
                     p = p->pNext.load( memory_model::memory_order_relaxed );
-                    if ( pRec->nState.load( memory_model::memory_order_relaxed ) == removed )
+                    if ( pRec->nState.load( memory_model::memory_order_acquire ) == removed )
                         free_publication_record( static_cast<publication_record_type *>( pRec ));
                 }
             }
@@ -573,13 +573,12 @@ namespace cds { namespace algo {
                 // Thread done
                 // pRec that is TLS data should be excluded from publication list
                 if ( pRec ) {
-                    if ( pRec->pOwner && pRec->nState.load(memory_model::memory_order_relaxed) == active ) {
-                        // record is active and kernel is alive
-                        unsigned int nState = active;
-                        pRec->nState.compare_exchange_strong( nState, removed, memory_model::memory_order_release, atomics::memory_order_relaxed );
+                    if ( pRec->pOwner ) {
+                        // kernel is alive
+                        pRec->nState.store( removed, memory_model::memory_order_release );
                     }
                     else {
-                        // record is not in publication list or kernel already deleted
+                        // kernel already deleted
                         free_publication_record( pRec );
                     }
                 }
@@ -616,7 +615,7 @@ namespace cds { namespace algo {
                             // Failed CAS changes p
                         } while ( !m_pHead->pNext.compare_exchange_weak( p, static_cast<publication_record *>(pRec),
                             memory_model::memory_order_release, atomics::memory_order_relaxed ));
-                        m_Stat.onActivatPubRecord();
+                        m_Stat.onActivatePubRecord();
                     }
                 }
             }
index a070ad330b57f6343a093de9bf04f7f817377704..b350936950aa964338fb41743af987e34bf29c2e 100644 (file)
@@ -45,7 +45,7 @@ namespace cds { namespace beans {
     static inline size_t log2ceil( size_t n )
     {
         size_t i = log2floor( n );
-        return size_t( 1 << i ) < n ? i + 1 : i;
+        return ( size_t( 1 ) << i ) < n ? i + 1 : i;
     }
 
     /// Returns largest previous power of 2 for \p n
index 53ef4bcff594a339be8bc877c953a71afae0a04a..574b6e16db04ee9f48b42215e4ecee180cb77565 100644 (file)
@@ -260,6 +260,8 @@ namespace cds { namespace container {
         typedef typename base_class::stat           stat;           ///< Internal statistics policy used
         typedef typename base_class::memory_model   memory_model;   ///< Memory ordering. See cds::opt::memory_model option
 
+        static CDS_CONSTEXPR const size_t c_nHazardPtrCount = base_class::c_nHazardPtrCount; ///< Count of hazard pointer required for the algorithm
+
     protected:
         typedef typename maker::node_type node_type; ///< queue node type (derived from intrusive::basket_queue::node)
 
@@ -323,6 +325,17 @@ namespace cds { namespace container {
             return false;
         }
 
+        /// Enqueues \p val value into the queue, move semantics
+        bool enqueue( value_type&& val )
+        {
+            scoped_node_ptr p( alloc_node_move( std::move( val )));
+            if ( base_class::enqueue( *p ) ) {
+                p.release();
+                return true;
+            }
+            return false;
+        }
+
         /// Enqueues \p data to queue using a functor
         /**
             \p Func is a functor called to create node.
@@ -346,11 +359,17 @@ namespace cds { namespace container {
         }
 
         /// Synonym for \p enqueue() function
-        bool push( const value_type& val )
+        bool push( value_type const& val )
         {
             return enqueue( val );
         }
 
+        /// Synonym for \p enqueue() function, move semantics
+        bool push( value_type&& val )
+        {
+            return enqueue( std::move( val ));
+        }
+
         /// Synonym for \p enqueue_with() function
         template <typename Func>
         bool push_with( Func f )
@@ -373,12 +392,12 @@ namespace cds { namespace container {
         /// Dequeues a value from the queue
         /**
             If queue is not empty, the function returns \p true, \p dest contains copy of
-            dequeued value. The assignment operator for type \ref value_type is invoked.
+            dequeued value. The assignment operator for \p value_type is invoked.
             If queue is empty, the function returns \p false, \p dest is unchanged.
         */
         bool dequeue( value_type& dest )
         {
-            return dequeue_with( [&dest]( value_type& src ) { dest = src;  } );
+            return dequeue_with( [&dest]( value_type& src ) { dest = std::move( src );});
         }
 
         /// Dequeues a value using a functor
index 24a6d73e959ec43ad00f09f30bf3237c6385c4af..2d24efa1818e6c7ffa2c8133b80207a8b08168d4 100644 (file)
@@ -263,7 +263,7 @@ namespace cds { namespace container {
             ) == update_flags::result_inserted;
         }
 
-        /// For key \p key inserts data of type \p mapped_type created in-place from \p args
+        /// For \p key inserts data of type \p mapped_type created in-place from \p args
         /**
             Returns \p true if inserting successful, \p false otherwise.
 
@@ -272,36 +272,20 @@ namespace cds { namespace container {
         template <typename K, typename... Args>
         bool emplace( K&& key, Args&&... args )
         {
-#       if !( CDS_COMPILER == CDS_COMPILER_GCC && CDS_COMPILER_VERSION >= 40800 && CDS_COMPILER_VERSION < 40900 )
-            // Probably, the following code is not so efficient, since we pass lvalues instead rvalues to lambda
-            //TODO: study how to pass a parameter pack to a lambda efficiently using perfect forwarding
-            // see http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#904 - this is what we need
-            return base_class::do_update( key, key_comparator(),
-                [&args...]( node_type * pNode ) -> mapped_type *
-                {
-                    assert( pNode->m_pValue.load( memory_model::memory_order_relaxed ) == nullptr );
-                    CDS_UNUSED( pNode );
-                    return cxx_allocator().New( std::forward<Args>(args)...);
-                },
-                update_flags::allow_insert
-            ) == update_flags::result_inserted;
-#       else
-            // gcc 4.8 error: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47226
-            // workaround (from http://stackoverflow.com/questions/14191989/how-do-i-use-variadic-perfect-forwarding-into-a-lambda)
-            auto f = std::bind<mapped_type *>(
-                        []( Args... args) -> mapped_type* { return cxx_allocator().New( std::move(args)...); },
-                        std::forward<Args>(args)...
-                        );
-            return base_class::do_update( key, key_comparator(),
-                [&f]( node_type * pNode ) -> mapped_type *
-                {
-                    assert( pNode->m_pValue.load( memory_model::memory_order_relaxed ) == nullptr );
-                    CDS_UNUSED( pNode );
-                    return f();
-                },
-                update_flags::allow_insert
-            ) == update_flags::result_inserted;
-#       endif
+            struct scoped_ptr
+            {
+                mapped_type * pVal;
+                scoped_ptr( mapped_type * p ): pVal( p ) {}
+                ~scoped_ptr() { if ( pVal ) cxx_allocator().Delete( pVal ); }
+                void release() { pVal = nullptr; }
+            };
+
+            scoped_ptr p( cxx_allocator().MoveNew( std::forward<Args>( args )... ));
+            if ( base_class::insert( std::forward<K>( key ), p.pVal )) {
+                p.release();
+                return true;
+            }
+            return false;
         }
 
         /// Updates the value for \p key
@@ -437,7 +421,7 @@ namespace cds { namespace container {
             return base_class::extract_min();
         }
 
-        /// Extracts minimal key key and corresponding value
+        /// Extracts minimal key and corresponding value
         /**
             Returns \p exempt_ptr to the leftmost item.
             If the tree is empty, returns empty \p exempt_ptr.
@@ -469,7 +453,7 @@ namespace cds { namespace container {
             return base_class::extract_min( f );
         }
 
-        /// Extracts minimal key key and corresponding value
+        /// Extracts minimal key and corresponding value
         /**
             This function is a shortcut for the following call:
             \code
index 6423e16140a05f1b83923eb4623c2c73d77cfcbc..fd7df5dca1ae8a68fb6b6c7eca979949072e193b 100644 (file)
@@ -122,7 +122,7 @@ namespace cds { namespace container {
         <b>About Cuckoo hashing</b>
 
             [From "The Art of Multiprocessor Programming"]
-            Cuckoo hashing is a hashing algorithm in which a newly added item displaces any earlier item
+            <a href="https://en.wikipedia.org/wiki/Cuckoo_hashing">Cuckoo hashing</a> is a hashing algorithm in which a newly added item displaces any earlier item
             occupying the same slot. For brevity, a table is a k-entry array of items. For a hash set f size
             N = 2k we use a two-entry array of tables, and two independent hash functions,
             <tt> h0, h1: KeyRange -> 0,...,k-1</tt>
@@ -160,14 +160,14 @@ namespace cds { namespace container {
             the average search complexity is <tt>O(PROBE_SET/2)</tt>.
             However, the overhead of sorting can eliminate a gain of ordered search.
 
-            The probe set is ordered if opt::compare or opt::less is specified in \p %CuckooSet
-            declaration. Otherwise, the probe set is unordered and \p %CuckooSet must contain
-            opt::equal_to option.
+            The probe set is ordered if \p compare or \p less is specified in \p Traits
+            template parameter. Otherwise, the probe set is unordered and \p Traits must contain
+            \p equal_to predicate.
 
         Template arguments:
         - \p Key - key type
         - \p T - the type stored in the map.
-        - \p Traits - map traits., default is \p cuckoo::traits.
+        - \p Traits - map traits, default is \p cuckoo::traits.
             It is possible to declare option-based set with \p cuckoo::make_traits metafunction
             result as \p Traits template argument.
 
index fdea67817f4ec5a3b5e601dd990165a87564a37c..49a131b3d82bdc09e4f00a83e753c7fa25ea40b3 100644 (file)
@@ -117,7 +117,7 @@ namespace cds { namespace container {
         <b>About Cuckoo hashing</b>
 
             [From "The Art of Multiprocessor Programming"]
-            Cuckoo hashing is a hashing algorithm in which a newly added item displaces any earlier item
+            <a href="https://en.wikipedia.org/wiki/Cuckoo_hashing">Cuckoo hashing</a> is a hashing algorithm in which a newly added item displaces any earlier item
             occupying the same slot. For brevity, a table is a k-entry array of items. For a hash set f size
             N = 2k we use a two-entry array of tables, and two independent hash functions,
             <tt> h0, h1: KeyRange -> 0,...,k-1</tt>
@@ -155,9 +155,9 @@ namespace cds { namespace container {
             the average search complexity is <tt>O(PROBE_SET/2)</tt>.
             However, the overhead of sorting can eliminate a gain of ordered search.
 
-            The probe set is ordered if opt::compare or opt::less is specified in \p %CuckooSet
-            declaration. Otherwise, the probe set is unordered and \p %CuckooSet must contain
-            opt::equal_to option.
+            The probe set is ordered if \p compare or \p less is specified in \p Traits
+            template parameter. Otherwise, the probe set is unordered and \p Traits must contain
+            \p equal_to predicate.
 
         Template arguments:
         - \p T - the type stored in the set.
index 2f671648df1cc5aa95876d35bd96287318f3a937..bb709fc45505b6199a4b6dafc881e5e55ee26e18 100644 (file)
@@ -480,11 +480,11 @@ namespace cds { namespace container {
             - \p opt::node_allocator - the allocator for internal nodes. Default is \ref CDS_DEFAULT_ALLOCATOR.
             - \p opt::allocator - the allocator for node's value. Default is \ref CDS_DEFAULT_ALLOCATOR.
                 This option is not used in \p BronsonAVLTreeMap<RCU, Key, T*, Traits> specialisation
-            - \ref cds::intrusive::opt::disposer "container::opt::disposer" - the functor used for dispose removed values.
+            - \p cds::intrusive::opt::disposer - the functor used for dispose removed values.
                 The user-provided disposer is used only for pointer-oriented tree specialization
                 like \p BronsonAVLTreeMap<GC, Key, T*, Traits>. When the node becomes the rounting node without value,
                 the disposer will be called to signal that the memory for the value can be safely freed.
-                Default is \ref cds::intrusive::opt::delete_disposer "cds::container::opt::v::delete_disposer<>" which calls \p delete operator.
+                Default is \p cds::intrusive::opt::delete_disposer which calls \p delete operator.
                 Due the nature of GC schema the disposer may be called asynchronously.
             - \p opt::sync_monitor -  @ref cds_sync_monitor "synchronization monitor" type for node-level locking,
                 default is \p cds::sync::injecting_monitor<cds::sync::spin>
index 9805c177e666992f2d0028475c18b29c77aa5ba8..073a87a2f90968e94cb708bcaa21cc0adb3eb125 100644 (file)
@@ -88,14 +88,14 @@ namespace cds { namespace container {
 
             /// Copy constructor
             template <typename... Args>
-            node( Args const&... args)
+            node( Args const&... args )
                 : m_Value( args... )
             {}
 
             /// Move constructor
             template <typename... Args>
-            node( Args&&... args)
-                : m_Value( std::forward<Args>(args)... )
+            node( Args&&... args )
+                : m_Value( std::forward<Args>( args )... )
             {}
         };
 
@@ -127,15 +127,15 @@ namespace cds { namespace container {
         {
             /// Key extracting functor (only for \p EllenBinTreeSet)
             /**
-                You should explicit define a valid functor.
-                The functor has the following prototype:
+                This is mandatory functor for \p %EllenBinTreeSet.
+                It has the following prototype:
                 \code
                 struct key_extractor {
                     void operator ()( Key& dest, T const& src );
                 };
                 \endcode
                 It should initialize \p dest key from \p src data.
-                The functor is used to initialize internal nodes of \p EllenBinTreeSet
+                The functor is used to initialize internal nodes of \p %EllenBinTreeSet
             */
             typedef opt::none           key_extractor;
 
@@ -359,7 +359,7 @@ namespace cds { namespace container {
 
                 typedef typename cds::opt::details::make_comparator< value_type, original_traits, false >::type key_comparator;
 
-                typedef cds::details::Allocator< leaf_node, typename original_traits::allocator>  cxx_leaf_node_allocator;
+                typedef cds::details::Allocator< leaf_node, typename original_traits::allocator> cxx_leaf_node_allocator;
                 struct leaf_deallocator
                 {
                     void operator()( leaf_node * p ) const
@@ -370,14 +370,14 @@ namespace cds { namespace container {
 
                 struct intrusive_traits: public original_traits
                 {
-                    typedef cds::intrusive::ellen_bintree::base_hook< cds::opt::gc< gc > >  hook;
+                    typedef cds::intrusive::ellen_bintree::base_hook< cds::opt::gc< gc >> hook;
                     typedef intrusive_key_extractor key_extractor;
                     typedef leaf_deallocator        disposer;
                     typedef cds::details::compare_wrapper< leaf_node, key_comparator, value_accessor > compare;
                 };
 
                 // Metafunction result
-                typedef cds::intrusive::EllenBinTree< gc, key_type, leaf_node, intrusive_traits >    type;
+                typedef cds::intrusive::EllenBinTree< gc, key_type, leaf_node, intrusive_traits > type;
             };
 
             template < class GC, typename Key, typename T, class Traits>
index d1963f327a1e9b96136ef649c43c9853754f10e1..d72bd284fe5c26baed758e8fb4997bfd6e5f8029 100644 (file)
@@ -290,19 +290,9 @@ namespace cds { namespace container {
                 node_type() = delete;
                 node_type(node_type const&) = delete;
 
-                template <typename Q>
-                node_type(hasher /*h*/, Q const& key)
-                    : m_Value(std::move(std::make_pair(key, mapped_type())))
-                {}
-
-                template <typename Q, typename U >
-                node_type(hasher /*h*/, Q const& key, U const& val)
-                    : m_Value(std::move(std::make_pair(key, mapped_type(val))))
-                {}
-
                 template <typename Q, typename... Args>
-                node_type(hasher /*h*/, Q&& key, Args&&... args)
-                    : m_Value(std::move(std::make_pair(std::forward<Q>(key), std::move(mapped_type(std::forward<Args>(args)...)))))
+                node_type( hasher /*h*/, Q&& key, Args&&... args )
+                    : m_Value( std::make_pair( key_type( std::forward<Q>( key )), mapped_type( std::forward<Args>(args)...) ))
                 {}
             };
 
index c79dcfb2b0925474704d24a2a5a2e99d0fa8076a..5c1521ae18507f2a1d83eefd84ac8138dd87be17 100644 (file)
@@ -118,9 +118,10 @@ namespace cds { namespace container {
             - \p opt::compare - key compare functor. No default functor is provided.
                 If the option is not specified, the \p opt::less is used.
             - \p opt::less - specifies binary predicate used for key compare. Default is \p std::less<T>.
-            - \p opt::equal_to - specifies binary functor for comparing keys for equality. No default is provided. If \p equal_to is
-                not specified, \p compare is used, if \p compare is not specified, \p less is used.
-            - \p opt::sort - specifies ordering policy. Default value is \p true.
+            - \p opt::equal_to - specifies binary functor for comparing keys for equality. This option is applicable only for unordered list.
+                No default is provided. If \p equal_to is not specified, \p compare is used, if \p compare is not specified, \p less is used.
+            - \p opt::sort - specifies ordering policy. Default value is \p true, i.e. the list is ordered.
+                Note: unordering feature is not fully supported yet.
             - \p opt::back_off - back-off strategy used. If the option is not specified, \p cds::backoff::Default is used.
             - \p opt::item_counter - the type of item counting feature. Default is disabled (\p atomicity::empty_item_counter).
                 To enable item counting use \p atomicity::item_counter.
index ae5d0c9209354ea36c43664bc5bbcbd234483446..45d75fef22f852672e8c157eaf8ce2373f8cadf2 100644 (file)
@@ -52,9 +52,13 @@ namespace cds { namespace container {
             {
                 value_type   m_Data;
 
+                node_type( key_type const& key )
+                    : m_Data( key, mapped_type() )
+                {}
+
                 template <typename Q>
                 node_type( Q const& key )
-                    : m_Data( key, mapped_type() )
+                    : m_Data( key_type( key ), mapped_type() )
                 {}
 
                 template <typename Q, typename R>
@@ -62,14 +66,28 @@ namespace cds { namespace container {
                     : m_Data( pair )
                 {}
 
+                node_type( key_type const& key, mapped_type const& value )
+                    : m_Data( key, value )
+                {}
+
+                template <typename R>
+                node_type( key_type const& key, R const& value )
+                    : m_Data( key, mapped_type( value ) )
+                {}
+
+                template <typename Q>
+                node_type( Q const& key, mapped_type const& value )
+                    : m_Data( key_type( key ), value )
+                {}
+
                 template <typename Q, typename R>
                 node_type( Q const& key, R const& value )
-                    : m_Data( key, value )
+                    : m_Data( key_type( key ), mapped_type( value ))
                 {}
 
                 template <typename Ky, typename... Args>
                 node_type( Ky&& key, Args&&... args )
-                    : m_Data( std::forward<Ky>( key ), std::move( mapped_type( std::forward<Args>( args )... ) ) )
+                    : m_Data( key_type( std::forward<Ky>( key )), std::move( mapped_type( std::forward<Args>( args )... ) ) )
                 {}
             };
 
@@ -109,7 +127,7 @@ namespace cds { namespace container {
 
             struct intrusive_traits: public original_type_traits
             {
-                typedef intrusive::lazy_list::base_hook< opt::gc<gc> >  hook;
+                typedef intrusive::lazy_list::base_hook< opt::gc<gc>, opt::lock_type< typename original_type_traits::lock_type >> hook;
                 typedef node_deallocator disposer;
 
                 typedef typename std::conditional< std::is_same< typename original_type_traits::equal_to, cds::opt::none >::value,
index 41be82c242decd698fa471b48e250976713174a7..e57eeff24cf2502c729c1c09ad6db6dfdae159dd 100644 (file)
@@ -97,8 +97,8 @@ namespace cds { namespace container {
 
             struct intrusive_traits: public original_type_traits
             {
-                typedef intrusive::lazy_list::base_hook< opt::gc<gc> >  hook;
-                typedef node_deallocator               disposer;
+                typedef intrusive::lazy_list::base_hook< opt::gc<gc>, cds::opt::lock_type< typename original_type_traits::lock_type >>  hook;
+                typedef node_deallocator disposer;
                 static CDS_CONSTEXPR const opt::link_check_type link_checker = cds::intrusive::lazy_list::traits::link_checker;
 
                 typedef typename std::conditional< std::is_same< typename original_type_traits::equal_to, cds::opt::none >::value,
index 9419068c4ea045c4c616d6efd800f71c002cf992..b1513061c6a682c3adc8d98c631c41947baec59e 100644 (file)
@@ -52,9 +52,13 @@ namespace cds { namespace container {
             {
                 pair_type               m_Data;
 
+                node_type( key_type const& key )
+                    : m_Data( key, value_type() )
+                {}
+
                 template <typename Q>
                 node_type( Q const& key )
-                    : m_Data( key, value_type() )
+                    : m_Data( key_type(key), value_type() )
                 {}
 
                 template <typename Q, typename R>
@@ -62,14 +66,28 @@ namespace cds { namespace container {
                     : m_Data( pair )
                 {}
 
+                node_type( key_type const& key, value_type const& value )
+                    : m_Data( key, value )
+                {}
+
+                template <typename R>
+                node_type( key_type const& key, R const& value )
+                    : m_Data( key, value_type( value ))
+                {}
+
+                template <typename Q>
+                node_type( Q const& key, value_type const& value )
+                    : m_Data( key_type( key ), value )
+                {}
+
                 template <typename Q, typename R>
                 node_type( Q const& key, R const& value )
-                    : m_Data( key, value )
+                    : m_Data( key_type( key ), value_type( value ))
                 {}
 
                 template< typename Ky, typename... Args>
                 node_type( Ky&& key, Args&&... args )
-                    : m_Data( std::forward<Ky>(key), std::move( value_type( std::forward<Args>(args)...)))
+                    : m_Data( key_type( std::forward<Ky>(key)), std::move( value_type( std::forward<Args>(args)...)))
                 {}
             };
 
index e6377e7a8d53f71088d4dedd3ce0d094ad375b84..a55de3b96afc07106e66cbb68f6d12d14b454814 100644 (file)
@@ -96,7 +96,7 @@ namespace cds { namespace container { namespace details {
             template <typename Q>
             node_type * New( unsigned int nHeight, Q const& key )
             {
-                return base_class::New( nHeight, key );
+                return base_class::New( nHeight, key_type( key ));
             }
             template <typename Q, typename U>
             node_type * New( unsigned int nHeight, Q const& key, U const& val )
@@ -105,7 +105,7 @@ namespace cds { namespace container { namespace details {
                 return new( pMem )
                     node_type( nHeight,
                         nHeight > 1 ? reinterpret_cast<typename base_class::node_tower_item *>( pMem + base_class::c_nNodeSize ) : nullptr,
-                        key, val
+                        key_type( key ), mapped_type( val )
                     );
             }
             template <typename... Args>
index 9363f6af9fade4be056a7f5553101573caa155a8..b38ca200799218afa88ef400a4ec9c8e2bbcfe8c 100644 (file)
@@ -58,7 +58,7 @@ namespace cds { namespace container {
         the priority value plus some uniformly distributed random value.
 
         @warning Recall the tree is <b>unbalanced</b>. The complexity of operations is <tt>O(log N)</tt>
-        for uniformly distributed random keys, but in worst case the complexity is <tt>O(N)</tt>.
+        for uniformly distributed random keys, but in the worst case the complexity is <tt>O(N)</tt>.
 
         @note In the current implementation we do not use helping technique described in original paper.
         So, the current implementation is near to fine-grained lock-based tree.
@@ -103,6 +103,8 @@ namespace cds { namespace container {
         typedef std::pair< key_type const, mapped_type >    value_type;   ///< Key-value pair stored in leaf node of the mp
         typedef Traits  traits;      ///< Traits template parameter
 
+        static_assert( std::is_default_constructible<key_type>::value, "Key should be default constructible type" );
+
 #   ifdef CDS_DOXYGEN_INVOKED
         typedef implementation_defined key_comparator  ;    ///< key compare functor based on \p Traits::compare and \p Traits::less
 #   else
@@ -241,7 +243,7 @@ namespace cds { namespace container {
         template <typename K, typename... Args>
         bool emplace( K&& key, Args&&... args )
         {
-            scoped_node_ptr pNode( cxx_leaf_node_allocator().New( std::forward<K>(key), std::forward<Args>(args)... ));
+            scoped_node_ptr pNode( cxx_leaf_node_allocator().MoveNew( key_type( std::forward<K>(key)), mapped_type( std::forward<Args>(args)... )));
             if ( base_class::insert( *pNode )) {
                 pNode.release();
                 return true;
index cc74ee23f26748e3ad9a58c99bd0f6249c036b42..2acbe887bd38786d527b22fc1208834439ddd2cb 100644 (file)
@@ -58,7 +58,7 @@ namespace cds { namespace container {
         the priority value plus some uniformly distributed random value.
 
         @warning Recall the tree is <b>unbalanced</b>. The complexity of operations is <tt>O(log N)</tt>
-        for uniformly distributed random keys, but in worst case the complexity is <tt>O(N)</tt>.
+        for uniformly distributed random keys, but in the worst case the complexity is <tt>O(N)</tt>.
 
         @note In the current implementation we do not use helping technique described in original paper.
         So, the current implementation is near to fine-grained lock-based tree.
@@ -296,7 +296,7 @@ namespace cds { namespace container {
         template <typename... Args>
         bool emplace( Args&&... args )
         {
-            scoped_node_ptr sp( cxx_leaf_node_allocator().New( std::forward<Args>(args)... ));
+            scoped_node_ptr sp( cxx_leaf_node_allocator().MoveNew( std::forward<Args>(args)... ));
             if ( base_class::insert( *sp.get() )) {
                 sp.release();
                 return true;
index d14328b60381e31864ef0aedc0dac21058bf26ce..7dccc157cdedf821e3aa36bfb77e26bc17f9b586 100644 (file)
@@ -417,7 +417,7 @@ namespace cds { namespace container {
                 assert( pRec->pValPop );
                 pRec->bEmpty = m_Deque.empty();
                 if ( !pRec->bEmpty ) {
-                    *(pRec->pValPop) = m_Deque.front();
+                    *(pRec->pValPop) = std::move( m_Deque.front());
                     m_Deque.pop_front();
                 }
                 break;
@@ -425,7 +425,7 @@ namespace cds { namespace container {
                 assert( pRec->pValPop );
                 pRec->bEmpty = m_Deque.empty();
                 if ( !pRec->bEmpty ) {
-                    *(pRec->pValPop) = m_Deque.back();
+                    *(pRec->pValPop) = std::move( m_Deque.back());
                     m_Deque.pop_back();
                 }
                 break;
@@ -454,20 +454,28 @@ namespace cds { namespace container {
             for ( fc_iterator it = itBegin, itPrev = itEnd; it != itEnd; ++it ) {
                 switch ( it->op() ) {
                 case op_push_front:
+                    if ( itPrev != itEnd
+                        && (itPrev->op() == op_pop_front || (m_Deque.empty() && itPrev->op() == op_pop_back)) )
+                    {
+                        collide( *it, *itPrev );
+                        itPrev = itEnd;
+                    }
+                    else
+                        itPrev = it;
+                    break;
                 case op_push_front_move:
                     if ( itPrev != itEnd
                       && (itPrev->op() == op_pop_front || ( m_Deque.empty() && itPrev->op() == op_pop_back )))
                     {
-                        collide( *it, *itPrev );
+                        collide_move( *it, *itPrev );
                         itPrev = itEnd;
                     }
                     else
                         itPrev = it;
                     break;
                 case op_push_back:
-                case op_push_back_move:
                     if ( itPrev != itEnd
-                        && (itPrev->op() == op_pop_back || ( m_Deque.empty() && itPrev->op() == op_pop_front )))
+                        && (itPrev->op() == op_pop_back || (m_Deque.empty() && itPrev->op() == op_pop_front)) )
                     {
                         collide( *it, *itPrev );
                         itPrev = itEnd;
@@ -475,24 +483,84 @@ namespace cds { namespace container {
                     else
                         itPrev = it;
                     break;
-                case op_pop_front:
+                case op_push_back_move:
                     if ( itPrev != itEnd
-                        && ( itPrev->op() == op_push_front || itPrev->op() == op_push_front_move
-                          || ( m_Deque.empty() && ( itPrev->op() == op_push_back || itPrev->op() == op_push_back_move ))))
+                        && (itPrev->op() == op_pop_back || ( m_Deque.empty() && itPrev->op() == op_pop_front )))
                     {
-                        collide( *itPrev, *it );
+                        collide_move( *it, *itPrev );
                         itPrev = itEnd;
                     }
                     else
                         itPrev = it;
                     break;
+                case op_pop_front:
+                    if ( itPrev != itEnd ) {
+                        if ( m_Deque.empty() ) {
+                            switch ( itPrev->op() ) {
+                            case op_push_back:
+                                collide( *itPrev, *it );
+                                itPrev = itEnd;
+                                break;
+                            case op_push_back_move:
+                                collide_move( *itPrev, *it );
+                                itPrev = itEnd;
+                                break;
+                            default:
+                                itPrev = it;
+                                break;
+                            }
+                        }
+                        else {
+                            switch ( itPrev->op() ) {
+                            case op_push_front:
+                                collide( *itPrev, *it );
+                                itPrev = itEnd;
+                                break;
+                            case op_push_front_move:
+                                collide_move( *itPrev, *it );
+                                itPrev = itEnd;
+                                break;
+                            default:
+                                itPrev = it;
+                                break;
+                            }
+                        }
+                    }
+                    else
+                        itPrev = it;
+                    break;
                 case op_pop_back:
-                    if ( itPrev != itEnd
-                        && ( itPrev->op() == op_push_back || itPrev->op() == op_push_back_move
-                        || ( m_Deque.empty() && ( itPrev->op() == op_push_front || itPrev->op() == op_push_front_move ))))
-                    {
-                        collide( *itPrev, *it );
-                        itPrev = itEnd;
+                    if ( itPrev != itEnd ) {
+                        if ( m_Deque.empty() ) {
+                            switch ( itPrev->op() ) {
+                            case op_push_front:
+                                collide( *itPrev, *it );
+                                itPrev = itEnd;
+                                break;
+                            case op_push_front_move:
+                                collide_move( *itPrev, *it );
+                                itPrev = itEnd;
+                                break;
+                            default:
+                                itPrev = it;
+                                break;
+                            }
+                        }
+                        else {
+                            switch ( itPrev->op() ) {
+                            case op_push_back:
+                                collide( *itPrev, *it );
+                                itPrev = itEnd;
+                                break;
+                            case op_push_back_move:
+                                collide_move( *itPrev, *it );
+                                itPrev = itEnd;
+                                break;
+                            default:
+                                itPrev = it;
+                                break;
+                            }
+                        }
                     }
                     else
                         itPrev = it;
@@ -513,6 +581,15 @@ namespace cds { namespace container {
             m_FlatCombining.operation_done( recPop );
             m_FlatCombining.internal_statistics().onCollide();
         }
+
+        void collide_move( fc_record& recPush, fc_record& recPop )
+        {
+            *(recPop.pValPop) = std::move( *(recPush.pValPush));
+            recPop.bEmpty = false;
+            m_FlatCombining.operation_done( recPush );
+            m_FlatCombining.operation_done( recPop );
+            m_FlatCombining.internal_statistics().onCollide();
+        }
         //@endcond
     };
 
index b8c38cdab0b96da8d286454a9869c010a624f12e..779849b5fd73c438af7c0d7a084304707f36ed3a 100644 (file)
@@ -303,7 +303,7 @@ namespace cds { namespace container {
                 assert( pRec->pValPop );
                 pRec->bEmpty = m_PQueue.empty();
                 if ( !pRec->bEmpty ) {
-                    *(pRec->pValPop) = m_PQueue.top();
+                    *(pRec->pValPop) = std::move( m_PQueue.top());
                     m_PQueue.pop();
                 }
                 break;
index 8c58a45d18755646c0bf0a94bdbe04fc76c5e9d9..dff95edea937173e8b044efd083dffcfdbf567ad 100644 (file)
@@ -343,7 +343,7 @@ namespace cds { namespace container {
                 assert( pRec->pValDeq );
                 pRec->bEmpty = m_Queue.empty();
                 if ( !pRec->bEmpty ) {
-                    *(pRec->pValDeq) = m_Queue.front();
+                    *(pRec->pValDeq) = std::move( m_Queue.front());
                     m_Queue.pop();
                 }
                 break;
index 5fb2428100a9f4e8dced2bbea2ff42512662af1f..eb7c8de513e99abe743e272f2142065c0d3b7a6b 100644 (file)
@@ -321,7 +321,7 @@ namespace cds { namespace container {
                 assert( pRec->pValPop );
                 pRec->bEmpty = m_Stack.empty();
                 if ( !pRec->bEmpty ) {
-                    *(pRec->pValPop) = m_Stack.top();
+                    *(pRec->pValPop) = std::move( m_Stack.top());
                     m_Stack.pop();
                 }
                 break;
index 190b09749894bb5a75fb363e04963ca4bc8817a9..bff5113b76d6ab51d0c4aff059a8a94f72b28fb3 100644 (file)
@@ -109,12 +109,15 @@ namespace cds { namespace container {
         typedef typename traits::allocator      allocator;      ///< Element allocator
         typedef typename traits::node_allocator node_allocator; ///< Array node allocator
         typedef typename traits::memory_model   memory_model;   ///< Memory model
-        typedef typename traits::back_off       back_off;       ///< Backoff strategy
+        typedef typename traits::back_off       back_off;       ///< Back-off strategy
         typedef typename traits::stat           stat;           ///< Internal statistics type
         typedef typename traits::rcu_check_deadlock rcu_check_deadlock; ///< Deadlock checking policy
         typedef typename gc::scoped_lock       rcu_lock;        ///< RCU scoped lock
         static CDS_CONSTEXPR const bool c_bExtractLockExternal = false; ///< Group of \p extract_xxx functions does not require external locking
 
+        /// Level statistics
+        typedef feldman_hashmap::level_statistics level_statistics;
+
     protected:
         //@cond
         typedef typename maker::node_type node_type;
@@ -668,7 +671,13 @@ namespace cds { namespace container {
         }
 
         /// Collects tree level statistics into \p stat
-        /** @copydetails cds::intrusive::FeldmanHashSet::get_level_statistics
+        /**
+            The function traverses the set and collects statistics for each level of the tree
+            into \p feldman_hashset::level_statistics struct. The element of \p stat[i]
+            represents statistics for level \p i, level 0 is head array.
+            The function is thread-safe and may be called in multi-threaded environment.
+
+            Result can be useful for estimating efficiency of hash functor you use.
         */
         void get_level_statistics(std::vector< feldman_hashmap::level_statistics>& stat) const
         {
index 99f8f2ea0c8fd2a853353f7bef6ef7d3a7a0f025..4a707580fbc01726e5c4228344d58b1ce067b88d 100644 (file)
@@ -112,10 +112,8 @@ namespace cds { namespace container {
         static CDS_CONSTEXPR const bool c_bExtractLockExternal = false; ///< Group of \p extract_xxx functions does not require external locking
         typedef typename base_class::exempt_ptr exempt_ptr; ///< pointer to extracted node
 
-        typedef typename base_class::iterator               iterator;       ///< @ref cds_container_FeldmanHashSet_rcu_iterators "bidirectional iterator" type
-        typedef typename base_class::const_iterator         const_iterator; ///< @ref cds_container_FeldmanHashSet_rcu_iterators "bidirectional const iterator" type
-        typedef typename base_class::reverse_iterator       reverse_iterator;       ///< @ref cds_container_FeldmanHashSet_rcu_iterators "bidirectional reverse iterator" type
-        typedef typename base_class::const_reverse_iterator const_reverse_iterator; ///< @ref cds_container_FeldmanHashSet_rcu_iterators "bidirectional reverse const iterator" type
+        /// Level statistics
+        typedef feldman_hashset::level_statistics level_statistics;
 
     protected:
         //@cond
@@ -240,7 +238,7 @@ namespace cds { namespace container {
         template <typename... Args>
         bool emplace( Args&&... args )
         {
-            scoped_node_ptr sp( cxx_node_allocator().New( std::forward<Args>(args)... ));
+            scoped_node_ptr sp( cxx_node_allocator().MoveNew( std::forward<Args>(args)... ));
             if ( base_class::insert( *sp )) {
                 sp.release();
                 return true;
@@ -364,7 +362,7 @@ namespace cds { namespace container {
             // ...
             {
                 // lock RCU
-                my_set::rcu_lock;
+                my_set::rcu_lock lock;
 
                 foo * p = theSet.get( 5 );
                 if ( p ) {
@@ -425,7 +423,13 @@ namespace cds { namespace container {
         }
 
         /// Collects tree level statistics into \p stat
-        /** @copydetails cds::intrusive::FeldmanHashSet::get_level_statistics
+        /**
+            The function traverses the set and collects statistics for each level of the tree
+            into \p feldman_hashset::level_statistics struct. The element of \p stat[i]
+            represents statistics for level \p i, level 0 is head array.
+            The function is thread-safe and may be called in multi-threaded environment.
+
+            Result can be useful for estimating efficiency of hash functor you use.
         */
         void get_level_statistics(std::vector< feldman_hashset::level_statistics>& stat) const
         {
@@ -434,6 +438,8 @@ namespace cds { namespace container {
 
     public:
         ///@name Thread-safe iterators
+        ///@{
+        /// Bidirectional iterator
         /** @anchor cds_container_FeldmanHashSet_rcu_iterators
             The set supports thread-safe iterators: you may iterate over the set in multi-threaded environment
             under explicit RCU lock.
@@ -493,7 +499,10 @@ namespace cds { namespace container {
             @note It is possible the item can be iterated more that once, for example, if an iterator points to the item
             in an array node that is being splitted.
         */
-    ///@{
+        typedef typename base_class::iterator               iterator;
+        typedef typename base_class::const_iterator         const_iterator; ///< @ref cds_container_FeldmanHashSet_rcu_iterators "bidirectional const iterator" type
+        typedef typename base_class::reverse_iterator       reverse_iterator;       ///< @ref cds_container_FeldmanHashSet_rcu_iterators "bidirectional reverse iterator" type
+        typedef typename base_class::const_reverse_iterator const_reverse_iterator; ///< @ref cds_container_FeldmanHashSet_rcu_iterators "bidirectional reverse const iterator" type
 
         /// Returns an iterator to the beginning of the set
         iterator begin()
index 1755dcdcbb0a09dfd0c25f8d734eee79364dbfec..094a69c2fc4659547c90fa606a5bbe8c478054f1 100644 (file)
@@ -38,7 +38,7 @@
 
 namespace cds { namespace container {
 
-    /// Bronson et al AVL-tree (RCU specialization for storing pointer to values)
+    /// Bronson et al AVL-tree (RCU specialization for pointers)
     /** @ingroup cds_nonintrusive_map
         @ingroup cds_nonintrusive_tree
         @headerfile cds/container/bronson_avltree_map_rcu.h
@@ -366,7 +366,7 @@ namespace cds { namespace container {
 
             The functor \p Func interface:
             \code
-            struct extractor {
+            struct functor {
                 void operator()( key_type const& key, std::remove_pointer<mapped_type>::type& val) { ... }
             };
             \endcode
@@ -436,7 +436,7 @@ namespace cds { namespace container {
             return exempt_ptr(do_extract_min( []( key_type const& ) {}));
         }
 
-        /// Extracts minimal key key and corresponding value
+        /// Extracts minimal key and corresponding value
         /**
             Returns \p exempt_ptr to the leftmost item.
             If the tree is empty, returns empty \p exempt_ptr.
@@ -449,7 +449,7 @@ namespace cds { namespace container {
             };
             \endcode
             If the tree is empty, \p f is not called.
-            Otherwise, is it called with minimal key, the pointer to corresponding value is returned
+            Otherwise, it is called with minimal key, the pointer to corresponding value is returned
             as \p exempt_ptr.
 
             @note Due the concurrent nature of the map, the function extracts <i>nearly</i> minimum key.
@@ -468,13 +468,13 @@ namespace cds { namespace container {
             return exempt_ptr(do_extract_min( [&f]( key_type const& key ) { f(key); }));
         }
 
-        /// Extracts minimal key key and corresponding value
+        /// Extracts minimal key and corresponding value
         /**
             This function is a shortcut for the following call:
             \code
             key_type key;
             exempt_ptr xp = theTree.extract_min( [&key]( key_type const& k ) { key = k; } );
-            \endode
+            \endcode
             \p key_type should be copy-assignable. The copy of minimal key
             is returned in \p min_key argument.
         */
@@ -520,7 +520,7 @@ namespace cds { namespace container {
                 };
             \endcode
             If the tree is empty, \p f is not called.
-            Otherwise, is it called with maximal key, the pointer to corresponding value is returned
+            Otherwise, it is called with maximal key, the pointer to corresponding value is returned
             as \p exempt_ptr.
 
             @note Due the concurrent nature of the map, the function extracts <i>nearly</i> maximal key.
@@ -545,7 +545,7 @@ namespace cds { namespace container {
             \code
                 key_type key;
                 exempt_ptr xp = theTree.extract_max( [&key]( key_type const& k ) { key = k; } );
-            \endode
+            \endcode
             \p key_type should be copy-assignable. The copy of maximal key
             is returned in \p max_key argument.
         */
@@ -592,7 +592,7 @@ namespace cds { namespace container {
             The interface of \p Func functor is:
             \code
             struct functor {
-                void operator()( key_type const& key, mapped_type& item );
+                void operator()( key_type const& key, std::remove_pointer< mapped_type )::type& item );
             };
             \endcode
             where \p item is the item found.
index a8afa81cd7aa0a80feea31d7b7e1559c9096f2fc..1abde90205085a628245ee1d3c2e62d3fd4a9a3c 100644 (file)
@@ -60,7 +60,7 @@ namespace cds { namespace container {
         the priority value plus some uniformly distributed random value.
 
         @warning Recall the tree is <b>unbalanced</b>. The complexity of operations is <tt>O(log N)</tt>
-        for uniformly distributed random keys, but in worst case the complexity is <tt>O(N)</tt>.
+        for uniformly distributed random keys, but in the worst case the complexity is <tt>O(N)</tt>.
 
         @note In the current implementation we do not use helping technique described in the original paper.
         In Hazard Pointer schema helping is too complicated and does not give any observable benefits.
@@ -69,7 +69,7 @@ namespace cds { namespace container {
 
         <b>Template arguments</b> :
         - \p GC - safe memory reclamation (i.e. light-weight garbage collector) type, like \p cds::gc::HP, \p cds::gc::DHP
-        - \p Key - key type
+        - \p Key - key type. Should be default-constructible
         - \p T - value type to be stored in tree's leaf nodes.
         - \p Traits - map traits, default is \p ellen_bintree::traits
             It is possible to declare option-based tree with \p ellen_bintree::make_map_traits metafunction
@@ -110,6 +110,8 @@ namespace cds { namespace container {
         typedef std::pair< key_type const, mapped_type >    value_type  ;   ///< Key-value pair stored in leaf node of the mp
         typedef Traits  traits;      ///< Map traits
 
+        static_assert( std::is_default_constructible<key_type>::value, "Key should be default constructible type");
+
 #   ifdef CDS_DOXYGEN_INVOKED
         typedef implementation_defined key_comparator; ///< key compare functor based on \p Traits::compare and \p Traits::less
 #   else
@@ -234,7 +236,7 @@ namespace cds { namespace container {
         template <typename K, typename... Args>
         bool emplace( K&& key, Args&&... args )
         {
-            scoped_node_ptr pNode( cxx_leaf_node_allocator().New( std::forward<K>(key), std::forward<Args>(args)... ));
+            scoped_node_ptr pNode( cxx_leaf_node_allocator().MoveNew( key_type( std::forward<K>(key)), mapped_type( std::forward<Args>(args)... )));
             if ( base_class::insert( *pNode )) {
                 pNode.release();
                 return true;
index 9884e33a5220ec841db56570b8fe162918e952cb..94a29a5dadf6a1d7e0f41832a3c83578a8b374f4 100644 (file)
@@ -60,7 +60,7 @@ namespace cds { namespace container {
         the priority value plus some uniformly distributed random value.
 
         @warning Recall the tree is <b>unbalanced</b>. The complexity of operations is <tt>O(log N)</tt>
-        for uniformly distributed random keys, but in worst case the complexity is <tt>O(N)</tt>.
+        for uniformly distributed random keys, but in the worst case the complexity is <tt>O(N)</tt>.
 
         @note In the current implementation we do not use helping technique described in the original paper.
         In Hazard Pointer schema helping is too complicated and does not give any observable benefits.
@@ -290,7 +290,7 @@ namespace cds { namespace container {
         template <typename... Args>
         bool emplace( Args&&... args )
         {
-            scoped_node_ptr sp( cxx_leaf_node_allocator().New( std::forward<Args>(args)... ));
+            scoped_node_ptr sp( cxx_leaf_node_allocator().MoveNew( std::forward<Args>(args)... ));
             if ( base_class::insert( *sp.get() )) {
                 sp.release();
                 return true;
index 9901161e0ca4f7d8cfa956cdb79d23be2984f832..2e28e3e248949eb8214dc2a3ab9b345406b4347e 100644 (file)
@@ -155,6 +155,9 @@ namespace cds { namespace container {
         /// Count of hazard pointers required
         static CDS_CONSTEXPR size_t const c_nHazardPtrCount = base_class::c_nHazardPtrCount;
 
+        /// Level statistics
+        typedef feldman_hashmap::level_statistics level_statistics;
+
     protected:
         //@cond
         typedef typename maker::node_type node_type;
@@ -182,7 +185,7 @@ namespace cds { namespace container {
                 : iterator_base( rhs )
             {}
 
-            bidirectional_iterator& operator=(bidirectional_iterator const& rhs) CDS_NOEXCEPT
+            bidirectional_iterator& operator=( bidirectional_iterator const& rhs ) CDS_NOEXCEPT
             {
                 iterator_base::operator=( rhs );
                 return *this;
@@ -219,13 +222,13 @@ namespace cds { namespace container {
             }
 
             template <bool IsConst2>
-            bool operator ==(bidirectional_iterator<IsConst2> const& rhs) const CDS_NOEXCEPT
+            bool operator ==( bidirectional_iterator<IsConst2> const& rhs ) const CDS_NOEXCEPT
             {
                 return iterator_base::operator==( rhs );
             }
 
             template <bool IsConst2>
-            bool operator !=(bidirectional_iterator<IsConst2> const& rhs) const CDS_NOEXCEPT
+            bool operator !=( bidirectional_iterator<IsConst2> const& rhs ) const CDS_NOEXCEPT
             {
                 return !( *this == rhs );
             }
@@ -297,13 +300,13 @@ namespace cds { namespace container {
             }
 
             template <bool IsConst2>
-            bool operator ==(reverse_bidirectional_iterator<IsConst2> const& rhs) const
+            bool operator ==( reverse_bidirectional_iterator<IsConst2> const& rhs ) const
             {
                 return iterator_base::operator==( rhs );
             }
 
             template <bool IsConst2>
-            bool operator !=(reverse_bidirectional_iterator<IsConst2> const& rhs)
+            bool operator !=( reverse_bidirectional_iterator<IsConst2> const& rhs )
             {
                 return !( *this == rhs );
             }
@@ -355,7 +358,7 @@ namespace cds { namespace container {
 
             Equation for \p head_bits and \p array_bits:
             \code
-            sizeof(hash_type) * 8 == head_bits + N * array_bits
+            sizeof( hash_type ) * 8 == head_bits + N * array_bits
             \endcode
             where \p N is multi-level array depth.
         */
@@ -381,7 +384,7 @@ namespace cds { namespace container {
         template <typename K>
         bool insert( K&& key )
         {
-            scoped_node_ptr sp( cxx_node_allocator().MoveNew( m_Hasher, std::forward<K>(key) ));
+            scoped_node_ptr sp( cxx_node_allocator().MoveNew( m_Hasher, std::forward<K>( key ) ));
             if ( base_class::insert( *sp )) {
                 sp.release();
                 return true;
@@ -403,7 +406,7 @@ namespace cds { namespace container {
         template <typename K, typename V>
         bool insert( K&& key, V&& val )
         {
-            scoped_node_ptr sp( cxx_node_allocator().MoveNew( m_Hasher, std::forward<K>(key), std::forward<V>(val)));
+            scoped_node_ptr sp( cxx_node_allocator().MoveNew( m_Hasher, std::forward<K>( key ), std::forward<V>( val )));
             if ( base_class::insert( *sp )) {
                 sp.release();
                 return true;
@@ -439,7 +442,7 @@ namespace cds { namespace container {
         template <typename K, typename Func>
         bool insert_with( K&& key, Func func )
         {
-            scoped_node_ptr sp( cxx_node_allocator().MoveNew( m_Hasher, std::forward<K>(key)));
+            scoped_node_ptr sp( cxx_node_allocator().MoveNew( m_Hasher, std::forward<K>( key )));
             if ( base_class::insert( *sp, [&func]( node_type& item ) { func( item.m_Value ); } )) {
                 sp.release();
                 return true;
@@ -454,7 +457,7 @@ namespace cds { namespace container {
         template <typename K, typename... Args>
         bool emplace( K&& key, Args&&... args )
         {
-            scoped_node_ptr sp( cxx_node_allocator().MoveNew( m_Hasher, std::forward<K>(key), std::forward<Args>(args)... ));
+            scoped_node_ptr sp( cxx_node_allocator().MoveNew( m_Hasher, std::forward<K>( key ), std::forward<Args>( args )... ));
             if ( base_class::insert( *sp )) {
                 sp.release();
                 return true;
@@ -491,7 +494,7 @@ namespace cds { namespace container {
         template <typename K, typename Func>
         std::pair<bool, bool> update( K&& key, Func func, bool bInsert = true )
         {
-            scoped_node_ptr sp( cxx_node_allocator().MoveNew( m_Hasher, std::forward<K>(key)));
+            scoped_node_ptr sp( cxx_node_allocator().MoveNew( m_Hasher, std::forward<K>( key )));
             std::pair<bool, bool> result = base_class::do_update( *sp,
                 [&func]( node_type& node, node_type * old ) { func( node.m_Value, old ? &old->m_Value : nullptr );},
                 bInsert );
@@ -521,7 +524,7 @@ namespace cds { namespace container {
             The functor \p Func interface:
             \code
             struct extractor {
-                void operator()(value_type& item) { ... }
+                void operator()( value_type& item ) { ... }
             };
             \endcode
             where \p item is the element found.
@@ -533,7 +536,7 @@ namespace cds { namespace container {
         template <typename K, typename Func>
         bool erase( K const& key, Func f )
         {
-            return base_class::erase( m_Hasher(key_type(key)), [&f]( node_type& node) { f( node.m_Value ); } );
+            return base_class::erase( m_Hasher( key_type( key )), [&f]( node_type& node) { f( node.m_Value ); } );
         }
 
         /// Deletes the element pointed by iterator \p iter
@@ -551,6 +554,14 @@ namespace cds { namespace container {
         {
             return base_class::do_erase_at( iter );
         }
+        bool erase_at( const_iterator const& iter )
+        {
+            return base_class::do_erase_at( iter );
+        }
+        bool erase_at( const_reverse_iterator const& iter )
+        {
+            return base_class::do_erase_at( iter );
+        }
         //@endcond
 
         /// Extracts the item from the map with specified \p key
@@ -622,7 +633,7 @@ namespace cds { namespace container {
         template <typename K, typename Func>
         bool find( K const& key, Func f )
         {
-            return base_class::find( m_Hasher( key_type( key )), [&f](node_type& node) { f( node.m_Value );});
+            return base_class::find( m_Hasher( key_type( key )), [&f]( node_type& node ) { f( node.m_Value );});
         }
 
         /// Finds the key \p key and return the item found
@@ -708,9 +719,15 @@ namespace cds { namespace container {
         }
 
         /// Collects tree level statistics into \p stat
-        /** @copydetails cds::intrusive::FeldmanHashSet::get_level_statistics
+        /**
+            The function traverses the set and collects statistics for each level of the tree
+            into \p feldman_hashset::level_statistics struct. The element of \p stat[i]
+            represents statistics for level \p i, level 0 is head array.
+            The function is thread-safe and may be called in multi-threaded environment.
+
+            Result can be useful for estimating efficiency of hash functor you use.
         */
-        void get_level_statistics(std::vector< feldman_hashmap::level_statistics>& stat) const
+        void get_level_statistics( std::vector< feldman_hashmap::level_statistics>& stat) const
         {
             base_class::get_level_statistics( stat );
         }
index f995bde8e3fe6b6510a716a195919377201cdaea..da3abde926ff6c3895504a84d8b3a1eeca1d299e 100644 (file)
@@ -148,10 +148,8 @@ namespace cds { namespace container {
         /// Count of hazard pointers required
         static CDS_CONSTEXPR size_t const c_nHazardPtrCount = base_class::c_nHazardPtrCount;
 
-        typedef typename base_class::iterator               iterator;       ///< @ref cds_container_FeldmanHashSet_iterators "bidirectional iterator" type
-        typedef typename base_class::const_iterator         const_iterator; ///< @ref cds_container_FeldmanHashSet_iterators "bidirectional const iterator" type
-        typedef typename base_class::reverse_iterator       reverse_iterator;       ///< @ref cds_container_FeldmanHashSet_iterators "bidirectional reverse iterator" type
-        typedef typename base_class::const_reverse_iterator const_reverse_iterator; ///< @ref cds_container_FeldmanHashSet_iterators "bidirectional reverse const iterator" type
+        /// Level statistics
+        typedef feldman_hashset::level_statistics level_statistics;
 
     protected:
         //@cond
@@ -159,6 +157,130 @@ namespace cds { namespace container {
         typedef std::unique_ptr< value_type, typename maker::node_disposer > scoped_node_ptr;
         //@endcond
 
+    public:
+    ///@name Thread-safe iterators
+    ///@{
+        /// Bidirectional iterator
+        /** @anchor cds_container_FeldmanHashSet_iterators
+            The set supports thread-safe iterators: you may iterate over the set in multi-threaded environment.
+            It is guaranteed that the iterators will remain valid even if another thread deletes the node the iterator points to:
+            Hazard Pointer embedded into the iterator object protects the node from physical reclamation.
+
+            @note Since the iterator object contains hazard pointer that is a thread-local resource,
+            the iterator should not be passed to another thread.
+
+            Each iterator object supports the following interface:
+            - dereference operators:
+                @code
+                value_type [const] * operator ->() noexcept
+                value_type [const] & operator *() noexcept
+                @endcode
+            - pre-increment and pre-decrement. Post-operators is not supported
+            - equality operators <tt>==</tt> and <tt>!=</tt>.
+                Iterators are equal iff they point to the same cell of the same array node.
+                Note that for two iterators \p it1 and \p it2, the conditon <tt> it1 == it2 </tt>
+                does not entail <tt> &(*it1) == &(*it2) </tt>
+            - helper member function \p release() that clears internal hazard pointer.
+                After \p release() the iterator points to \p nullptr but it still remain valid: further iterating is possible.
+
+            During iteration you may safely erase any item from the set;
+            @ref erase_at() function call doesn't invalidate any iterator.
+            If some iterator points to the item to be erased, that item is not deleted immediately
+            but only after that iterator will be advanced forward or backward.
+
+            @note It is possible the item can be iterated more that once, for example, if an iterator points to the item
+            in array node that is being splitted.
+        */
+        typedef typename base_class::iterator               iterator;
+        typedef typename base_class::const_iterator         const_iterator; ///< @ref cds_container_FeldmanHashSet_iterators "bidirectional const iterator" type
+        typedef typename base_class::reverse_iterator       reverse_iterator;       ///< @ref cds_container_FeldmanHashSet_iterators "bidirectional reverse iterator" type
+        typedef typename base_class::const_reverse_iterator const_reverse_iterator; ///< @ref cds_container_FeldmanHashSet_iterators "bidirectional reverse const iterator" type
+
+        /// Returns an iterator to the beginning of the set
+        iterator begin()
+        {
+            return base_class::begin();
+        }
+
+        /// Returns an const iterator to the beginning of the set
+        const_iterator begin() const
+        {
+            return base_class::begin();
+        }
+
+        /// Returns an const iterator to the beginning of the set
+        const_iterator cbegin()
+        {
+            return base_class::cbegin();
+        }
+
+        /// Returns an iterator to the element following the last element of the set. This element acts as a placeholder; attempting to access it results in undefined behavior.
+        iterator end()
+        {
+            return base_class::end();
+        }
+
+        /// Returns a const iterator to the element following the last element of the set. This element acts as a placeholder; attempting to access it results in undefined behavior.
+        const_iterator end() const
+        {
+            return base_class::end();
+        }
+
+        /// Returns a const iterator to the element following the last element of the set. This element acts as a placeholder; attempting to access it results in undefined behavior.
+        const_iterator cend()
+        {
+            return base_class::cend();
+        }
+
+        /// Returns a reverse iterator to the first element of the reversed set
+        reverse_iterator rbegin()
+        {
+            return base_class::rbegin();
+        }
+
+        /// Returns a const reverse iterator to the first element of the reversed set
+        const_reverse_iterator rbegin() const
+        {
+            return base_class::rbegin();
+        }
+
+        /// Returns a const reverse iterator to the first element of the reversed set
+        const_reverse_iterator crbegin()
+        {
+            return base_class::crbegin();
+        }
+
+        /// Returns a reverse iterator to the element following the last element of the reversed set
+        /**
+            It corresponds to the element preceding the first element of the non-reversed container.
+            This element acts as a placeholder, attempting to access it results in undefined behavior.
+        */
+        reverse_iterator rend()
+        {
+            return base_class::rend();
+        }
+
+        /// Returns a const reverse iterator to the element following the last element of the reversed set
+        /**
+            It corresponds to the element preceding the first element of the non-reversed container.
+            This element acts as a placeholder, attempting to access it results in undefined behavior.
+        */
+        const_reverse_iterator rend() const
+        {
+            return base_class::rend();
+        }
+
+        /// Returns a const reverse iterator to the element following the last element of the reversed set
+        /**
+            It corresponds to the element preceding the first element of the non-reversed container.
+            This element acts as a placeholder, attempting to access it results in undefined behavior.
+        */
+        const_reverse_iterator crend()
+        {
+            return base_class::crend();
+        }
+    ///@}
+
     public:
         /// Creates empty set
         /**
@@ -272,7 +394,7 @@ namespace cds { namespace container {
         template <typename... Args>
         bool emplace( Args&&... args )
         {
-            scoped_node_ptr sp( cxx_node_allocator().New( std::forward<Args>(args)... ));
+            scoped_node_ptr sp( cxx_node_allocator().MoveNew( std::forward<Args>(args)... ));
             if ( base_class::insert( *sp )) {
                 sp.release();
                 return true;
@@ -466,131 +588,18 @@ namespace cds { namespace container {
         }
 
         /// Collects tree level statistics into \p stat
-        /** @copydetails cds::intrusive::FeldmanHashSet::get_level_statistics
-        */
-        void get_level_statistics(std::vector< feldman_hashset::level_statistics>& stat) const
-        {
-            base_class::get_level_statistics(stat);
-        }
-
-    public:
-    ///@name Thread-safe iterators
-        /** @anchor cds_container_FeldmanHashSet_iterators
-            The set supports thread-safe iterators: you may iterate over the set in multi-threaded environment.
-            It is guaranteed that the iterators will remain valid even if another thread deletes the node the iterator points to:
-            Hazard Pointer embedded into the iterator object protects the node from physical reclamation.
-
-            @note Since the iterator object contains hazard pointer that is a thread-local resource,
-            the iterator should not be passed to another thread.
-
-            Each iterator object supports the common interface:
-            - dereference operators:
-                @code
-                value_type [const] * operator ->() noexcept
-                value_type [const] & operator *() noexcept
-                @endcode
-            - pre-increment and pre-decrement. Post-operators is not supported
-            - equality operators <tt>==</tt> and <tt>!=</tt>.
-                Iterators are equal iff they point to the same cell of the same array node.
-                Note that for two iterators \p it1 and \p it2, the conditon <tt> it1 == it2 </tt>
-                does not entail <tt> &(*it1) == &(*it2) </tt>
-            - helper member function \p release() that clears internal hazard pointer.
-                After \p release() the iterator points to \p nullptr but it still remain valid: further iterating is possible.
-
-            During iteration you may safely erase any item from the set;
-            @ref erase_at() function call doesn't invalidate any iterator.
-            If some iterator points to the item to be erased, that item is not deleted immediately
-            but only after that iterator will be advanced forward or backward.
-
-            @note It is possible the item can be iterated more that once, for example, if an iterator points to the item
-            in array node that is being splitted.
-        */
-    ///@{
-
-        /// Returns an iterator to the beginning of the set
-        iterator begin()
-        {
-            return base_class::begin();
-        }
-
-        /// Returns an const iterator to the beginning of the set
-        const_iterator begin() const
-        {
-            return base_class::begin();
-        }
-
-        /// Returns an const iterator to the beginning of the set
-        const_iterator cbegin()
-        {
-            return base_class::cbegin();
-        }
-
-        /// Returns an iterator to the element following the last element of the set. This element acts as a placeholder; attempting to access it results in undefined behavior.
-        iterator end()
-        {
-            return base_class::end();
-        }
-
-        /// Returns a const iterator to the element following the last element of the set. This element acts as a placeholder; attempting to access it results in undefined behavior.
-        const_iterator end() const
-        {
-            return base_class::end();
-        }
-
-        /// Returns a const iterator to the element following the last element of the set. This element acts as a placeholder; attempting to access it results in undefined behavior.
-        const_iterator cend()
-        {
-            return base_class::cend();
-        }
-
-        /// Returns a reverse iterator to the first element of the reversed set
-        reverse_iterator rbegin()
-        {
-            return base_class::rbegin();
-        }
-
-        /// Returns a const reverse iterator to the first element of the reversed set
-        const_reverse_iterator rbegin() const
-        {
-            return base_class::rbegin();
-        }
-
-        /// Returns a const reverse iterator to the first element of the reversed set
-        const_reverse_iterator crbegin()
-        {
-            return base_class::crbegin();
-        }
-
-        /// Returns a reverse iterator to the element following the last element of the reversed set
         /**
-            It corresponds to the element preceding the first element of the non-reversed container.
-            This element acts as a placeholder, attempting to access it results in undefined behavior.
-        */
-        reverse_iterator rend()
-        {
-            return base_class::rend();
-        }
-
-        /// Returns a const reverse iterator to the element following the last element of the reversed set
-        /**
-            It corresponds to the element preceding the first element of the non-reversed container.
-            This element acts as a placeholder, attempting to access it results in undefined behavior.
-        */
-        const_reverse_iterator rend() const
-        {
-            return base_class::rend();
-        }
+            The function traverses the set and collects statistics for each level of the tree
+            into \p feldman_hashset::level_statistics struct. The element of \p stat[i]
+            represents statistics for level \p i, level 0 is head array.
+            The function is thread-safe and may be called in multi-threaded environment.
 
-        /// Returns a const reverse iterator to the element following the last element of the reversed set
-        /**
-            It corresponds to the element preceding the first element of the non-reversed container.
-            This element acts as a placeholder, attempting to access it results in undefined behavior.
+            Result can be useful for estimating efficiency of hash functor you use.
         */
-        const_reverse_iterator crend()
+        void get_level_statistics(std::vector< feldman_hashset::level_statistics>& stat) const
         {
-            return base_class::crend();
+            base_class::get_level_statistics(stat);
         }
-    ///@}
     };
 
 }} // namespace cds::container
index 71401a2c4d01d4fb7221ac430aac0eb28f42e339..5db39fc912feea0b8c326f3052e88e2918752f98 100644 (file)
@@ -134,6 +134,8 @@ namespace cds { namespace container {
         typedef typename maker::key_comparator    key_comparator; ///< key comparing functor
         typedef typename base_class::memory_model memory_model;   ///< Memory ordering. See \p cds::opt::memory_model
 
+        static CDS_CONSTEXPR const size_t c_nHazardPtrCount = base_class::c_nHazardPtrCount; ///< Count of hazard pointer required for the algorithm
+
     protected:
         //@cond
         typedef typename base_class::value_type   node_type;
@@ -291,8 +293,7 @@ namespace cds { namespace container {
             - Iterator ensures thread-safety even if you delete the item that iterator points to. However, in case of concurrent
               deleting operations it is no guarantee that you iterate all item in the list.
 
-            Therefore, the use of iterators in concurrent environment is not good idea. Use the iterator on the concurrent container
-            for debug purpose only.
+            @warning Use this iterator on the concurrent container for debugging purpose only.
 
             The iterator interface to access item data:
             - <tt> operator -> </tt> - returns a pointer to \ref value_type for iterator
@@ -310,6 +311,8 @@ namespace cds { namespace container {
         */
         typedef iterator_type<true>     const_iterator;
 
+    ///@name Forward iterators (only for debugging purpose)
+    //@{
         /// Returns a forward iterator addressing the first element in a list
         /**
             For empty list \code begin() == end() \endcode
@@ -335,32 +338,33 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator addressing the first element in a list
-        //@{
         const_iterator begin() const
         {
             const_iterator it( head() );
             ++it;   // skip dummy head
             return it;
         }
+
+        /// Returns a forward const iterator addressing the first element in a list
         const_iterator cbegin() const
         {
             const_iterator it( head() );
             ++it;   // skip dummy head
             return it;
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a list
-        //@{
         const_iterator end() const
         {
             return const_iterator( tail());
         }
+
+        /// Returns an const iterator that addresses the location succeeding the last element in a list
         const_iterator cend() const
         {
             return const_iterator( tail());
         }
-        //@}
+    //@}
 
     public:
         /// Default constructor
index 589b2f8516eb03ea150551a6fd56a23490c62c00..541f2453fd06abe3a9330812305bc9b305d11dd3 100644 (file)
@@ -141,6 +141,8 @@ namespace cds { namespace container {
         typedef typename maker::key_comparator    key_comparator; ///< key comparison functor
         typedef typename base_class::memory_model memory_model;   ///< Memory ordering. See cds::opt::memory_model option
 
+        static CDS_CONSTEXPR const size_t c_nHazardPtrCount = base_class::c_nHazardPtrCount; ///< Count of hazard pointer required for the algorithm
+
     protected:
         //@cond
         typedef typename base_class::value_type   node_type;
@@ -155,20 +157,18 @@ namespace cds { namespace container {
         /// Guarded pointer
         typedef typename gc::template guarded_ptr< node_type, value_type, details::guarded_ptr_cast_set<node_type, value_type> > guarded_ptr;
 
-    private:
+    protected:
         //@cond
         static value_type& node_to_value( node_type& n )
         {
             return n.m_Value;
         }
+
         static value_type const& node_to_value( node_type const& n )
         {
             return n.m_Value;
         }
-        //@endcond
 
-    protected:
-        //@cond
         template <typename Q>
         static node_type * alloc_node( Q const& v )
         {
@@ -275,6 +275,8 @@ namespace cds { namespace container {
         //@endcond
 
     public:
+    ///@name Forward iterators (only for debugging purpose)
+    //@{
         /// Forward iterator
         /**
             The forward iterator for lazy list has some features:
@@ -285,9 +287,9 @@ namespace cds { namespace container {
             - The iterator cannot be moved across thread boundary since it contains GC's guard that is thread-private GC data.
             - Iterator ensures thread-safety even if you delete the item that iterator points to. However, in case of concurrent
               deleting operations it is no guarantee that you iterate all item in the list.
+              Moreover, a crash is possible when you try to iterate the next element that has been deleted by concurrent thread.
 
-            Therefore, the use of iterators in concurrent environment is not good idea. Use the iterator on the concurrent container
-            for debug purpose only.
+            @warning Use this iterator on the concurrent container for debugging purpose only.
         */
         typedef iterator_type<false>    iterator;
 
@@ -321,32 +323,33 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator addressing the first element in a list
-        //@{
         const_iterator begin() const
         {
             const_iterator it( head() );
             ++it        ;   // skip dummy head node
             return it;
         }
+
+        /// Returns a forward const iterator addressing the first element in a list
         const_iterator cbegin() const
         {
             const_iterator it( head() );
             ++it        ;   // skip dummy head node
             return it;
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a list
-        //@{
         const_iterator end() const
         {
             return const_iterator( tail() );
         }
+
+        /// Returns an const iterator that addresses the location succeeding the last element in a list
         const_iterator cend() const
         {
             return const_iterator( tail() );
         }
-        //@}
+    //@}
 
     public:
         /// Default constructor
@@ -751,6 +754,11 @@ namespace cds { namespace container {
 
     protected:
         //@cond
+        bool insert_node( node_type * pNode )
+        {
+            return insert_node_at( head(), pNode );
+        }
+
         bool insert_node_at( head_type& refHead, node_type * pNode )
         {
             assert( pNode != nullptr );
index dc512278584a1b064adec611a0bb04569a30ec89..805b9c15c68a612848229e6a0496f8efbf7586a6 100644 (file)
@@ -36,7 +36,7 @@
 
 namespace cds { namespace container {
 
-    /// Michael's ordered list fo key-value pair
+    /// Michael's ordered list for key-value pair
     /** @ingroup cds_nonintrusive_list
         \anchor cds_nonintrusive_MichaelKVList_gc
 
@@ -137,6 +137,8 @@ namespace cds { namespace container {
         typedef typename maker::key_comparator    key_comparator; ///< key comparison functor
         typedef typename base_class::memory_model memory_model;   ///< Memory ordering. See cds::opt::memory_model option
 
+        static CDS_CONSTEXPR const size_t c_nHazardPtrCount = base_class::c_nHazardPtrCount; ///< Count of hazard pointer required for the algorithm
+
     protected:
         //@cond
         typedef typename base_class::value_type   node_type;
@@ -280,8 +282,7 @@ namespace cds { namespace container {
             - Iterator ensures thread-safety even if you delete the item that iterator points to. However, in case of concurrent
               deleting operations it is no guarantee that you iterate all item in the list.
 
-            Therefore, the use of iterators in concurrent environment is not good idea. Use the iterator on the concurrent container
-            for debug purpose only.
+            @warning Use this iterator on the concurrent container for debugging purpose only.
 
             The iterator interface to access item data:
             - <tt> operator -> </tt> - returns a pointer to \ref value_type for iterator
@@ -299,6 +300,8 @@ namespace cds { namespace container {
         */
         typedef iterator_type<true>     const_iterator;
 
+    ///@name Forward iterators (only for debugging purpose)
+    //@{
         /// Returns a forward iterator addressing the first element in a list
         /**
             For empty list \code begin() == end() \endcode
@@ -322,28 +325,29 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator addressing the first element in a list
-        //@{
         const_iterator begin() const
         {
             return const_iterator( head() );
         }
+
+        /// Returns a forward const iterator addressing the first element in a list
         const_iterator cbegin() const
         {
             return const_iterator( head() );
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a list
-        //@{
         const_iterator end() const
         {
             return const_iterator();
         }
+
+        /// Returns an const iterator that addresses the location succeeding the last element in a list
         const_iterator cend() const
         {
             return const_iterator();
         }
-        //@}
+    //@}
 
     public:
         /// Default constructor
index 15af01622ff7dbf6d6dcdc48b53e6ee27361ab1c..0a8818e7e9d0d13995fe925cced19b3bc45cb179 100644 (file)
@@ -137,6 +137,8 @@ namespace cds { namespace container {
         typedef typename maker::key_comparator      key_comparator; ///< key comparison functor
         typedef typename base_class::memory_model   memory_model;   ///< Memory ordering. See \p cds::opt::memory_model option
 
+        static CDS_CONSTEXPR const size_t c_nHazardPtrCount = base_class::c_nHazardPtrCount; ///< Count of hazard pointer required for the algorithm
+
     protected:
         //@cond
         typedef typename base_class::value_type      node_type;
@@ -151,7 +153,7 @@ namespace cds { namespace container {
         /// Guarded pointer
         typedef typename gc::template guarded_ptr< node_type, value_type, details::guarded_ptr_cast_set<node_type, value_type> > guarded_ptr;
 
-    private:
+    protected:
         //@cond
         static value_type& node_to_value( node_type& n )
         {
@@ -161,10 +163,7 @@ namespace cds { namespace container {
         {
             return n.m_Value;
         }
-        //@endcond
 
-    protected:
-        //@cond
         template <typename Q>
         static node_type * alloc_node( Q const& v )
         {
@@ -257,6 +256,8 @@ namespace cds { namespace container {
         //@endcond
 
     public:
+    ///@name Forward iterators (only for debugging purpose)
+    //@{
         /// Forward iterator
         /**
             The forward iterator for Michael's list has some features:
@@ -267,9 +268,9 @@ namespace cds { namespace container {
             - The iterator cannot be moved across thread boundary since it contains GC's guard that is thread-private GC data.
             - Iterator ensures thread-safety even if you delete the item that iterator points to. However, in case of concurrent
               deleting operations it is no guarantee that you iterate all item in the list.
+              Moreover, a crash is possible when you try to iterate the next element that has been deleted by concurrent thread.
 
-            Therefore, the use of iterators in concurrent environment is not good idea. Use the iterator on the concurrent container
-            for debug purpose only.
+            @warning Use this iterator on the concurrent container for debugging purpose only.
         */
         typedef iterator_type<false>    iterator;
 
@@ -302,28 +303,29 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator addressing the first element in a list
-        //@{
         const_iterator begin() const
         {
             return const_iterator( head() );
         }
+
+        /// Returns a forward const iterator addressing the first element in a list
         const_iterator cbegin() const
         {
             return const_iterator( head() );
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a list
-        //@{
         const_iterator end() const
         {
             return const_iterator();
         }
+
+        /// Returns an const iterator that addresses the location succeeding the last element in a list
         const_iterator cend() const
         {
             return const_iterator();
         }
-        //@}
+    //@}
 
     public:
         /// Default constructor
@@ -733,6 +735,11 @@ namespace cds { namespace container {
 
     protected:
         //@cond
+        bool insert_node( node_type * pNode )
+        {
+            return insert_node_at( head(), pNode );
+        }
+
         bool insert_node_at( head_type& refHead, node_type * pNode )
         {
             assert( pNode );
index 5e8653d505756f90531dce221df496b4987575a3..b0fa85779e7b51d15cf49b551a0992449f56035e 100644 (file)
@@ -79,48 +79,6 @@ namespace cds { namespace container {
         - <tt><cds/container/skip_list_map_dhp.h></tt> for \p gc::DHP garbage collector
         - <tt><cds/container/skip_list_map_rcu.h></tt> for \ref cds_nonintrusive_SkipListMap_rcu "RCU type"
         - <tt><cds/container/skip_list_map_nogc.h></tt> for \ref cds_nonintrusive_SkipListMap_nogc "non-deletable SkipListMap"
-
-        <b>Iterators</b>
-
-        The class supports a forward iterator (\ref iterator and \ref const_iterator).
-        The iteration is ordered.
-        The iterator object is thread-safe: the element pointed by the iterator object is guarded,
-        so, the element cannot be reclaimed while the iterator object is alive.
-        However, passing an iterator object between threads is dangerous.
-
-        \warning Due to concurrent nature of skip-list map it is not guarantee that you can iterate
-        all elements in the map: any concurrent deletion can exclude the element
-        pointed by the iterator from the map, and your iteration can be terminated
-        before end of the map. Therefore, such iteration is more suitable for debugging purpose only
-
-        Remember, each iterator object requires 2 additional hazard pointers, that may be
-        a limited resource for \p GC like \p gc::HP (for gc::DHP the count of
-        guards is unlimited).
-
-        The iterator class supports the following minimalistic interface:
-        \code
-        struct iterator {
-            // Default ctor
-            iterator();
-
-            // Copy ctor
-            iterator( iterator const& s);
-
-            value_type * operator ->() const;
-            value_type& operator *() const;
-
-            // Pre-increment
-            iterator& operator ++();
-
-            // Copy assignment
-            iterator& operator = (const iterator& src);
-
-            bool operator ==(iterator const& i ) const;
-            bool operator !=(iterator const& i ) const;
-        };
-        \endcode
-        Note, the iterator object returned by \ref end, \ cend member functions points to \p nullptr and should not be dereferenced.
-
     */
     template <
         typename GC,
@@ -162,6 +120,8 @@ namespace cds { namespace container {
         typedef typename traits::random_level_generator random_level_generator ; ///< random level generator
         typedef typename traits::stat              stat;           ///< internal statistics type
 
+        static size_t const c_nHazardPtrCount = base_class::c_nHazardPtrCount; ///< Count of hazard pointer required for the skip-list
+
     protected:
         //@cond
         typedef typename maker::node_type           node_type;
@@ -193,11 +153,57 @@ namespace cds { namespace container {
         {}
 
     public:
+    ///@name Forward iterators (only for debugging purpose)
+    //@{
         /// Iterator type
+        /**
+            The forward iterator has some features:
+            - it is ordered
+            - it has no post-increment operator
+            - to protect the value, the iterator contains a GC-specific guard + another guard is required locally for increment operator.
+              For some GC (like as \p gc::HP), a guard is a limited resource per thread, so an exception (or assertion) "no free guard"
+              may be thrown if the limit of guard count per thread is exceeded.
+            - The iterator cannot be moved across thread boundary because it contains thread-private GC's guard.
+            - Iterator ensures thread-safety even if you delete the item the iterator points to. However, in case of concurrent
+              deleting operations there is no guarantee that you iterate all item in the list. 
+              Moreover, a crash is possible when you try to iterate the next element that has been deleted by concurrent thread.
+
+            @warning Use this iterator on the concurrent container for debugging purpose only.
+
+            @note \p end() and \p cend() are not dereferenceable.
+
+            The iterator interface:
+            \code
+            class iterator {
+            public:
+                // Default constructor
+                iterator();
+
+                // Copy construtor
+                iterator( iterator const& src );
+
+                // Dereference operator
+                value_type * operator ->() const;
+
+                // Dereference operator
+                value_type& operator *() const;
+
+                // Preincrement operator
+                iterator& operator ++();
+
+                // Assignment operator
+                iterator& operator = (iterator const& src);
+
+                // Equality operators
+                bool operator ==(iterator const& i ) const;
+                bool operator !=(iterator const& i ) const;
+            };
+            \endcode
+        */
         typedef skip_list::details::iterator< typename base_class::iterator >  iterator;
 
-        /// Const iterator type
-        typedef skip_list::details::iterator< typename base_class::const_iterator >   const_iterator;
+        /// Const forward iterator type
+        typedef skip_list::details::iterator< typename base_class::const_iterator > const_iterator;
 
         /// Returns a forward iterator addressing the first element in a map
         iterator begin()
@@ -210,6 +216,7 @@ namespace cds { namespace container {
         {
             return cbegin();
         }
+
         /// Returns a forward const iterator addressing the first element in a map
         const_iterator cbegin() const
         {
@@ -227,11 +234,13 @@ namespace cds { namespace container {
         {
             return cend();
         }
+
         /// Returns a forward const iterator that addresses the location succeeding the last element in a map.
         const_iterator cend() const
         {
             return const_iterator( base_class::cend() );
         }
+    //@}
 
     public:
         /// Inserts new node with key and default value
@@ -265,7 +274,7 @@ namespace cds { namespace container {
         template <typename K, typename V>
         bool insert( K const& key, V const& val )
         {
-            return insert_with( key, [&val](value_type& item) { item.second = val ; } );
+            return insert_with( key, [&val]( value_type& item ) { item.second = val; } );
         }
 
         /// Inserts new node and initialize it by a functor
index 4b76d9cfdada35cb5b2c5ad46e2f70f6400062c7..5534c7c593b581d882c05b1ea473bbf892f6032f 100644 (file)
@@ -152,6 +152,8 @@ namespace cds { namespace container {
         typedef typename traits::random_level_generator random_level_generator; ///< random level generator
         typedef typename traits::stat             stat;           ///< internal statistics type
 
+        static size_t const c_nHazardPtrCount = base_class::c_nHazardPtrCount; ///< Count of hazard pointer required for the skip-list
+
     protected:
         //@cond
         typedef typename maker::node_type           node_type;
@@ -183,7 +185,50 @@ namespace cds { namespace container {
         {}
 
     public:
+    ///@name Forward iterators (only for debugging purpose)
+    //@{
         /// Iterator type
+        /**
+            The forward iterator has some features:
+            - it has no post-increment operator
+            - to protect the value, the iterator contains a GC-specific guard + another guard is required locally for increment operator.
+              For some GC (like as \p gc::HP), a guard is a limited resource per thread, so an exception (or assertion) "no free guard"
+              may be thrown if the limit of guard count per thread is exceeded.
+            - The iterator cannot be moved across thread boundary because it contains thread-private GC's guard.
+            - Iterator ensures thread-safety even if you delete the item the iterator points to. However, in case of concurrent
+              deleting operations there is no guarantee that you iterate all item in the list. 
+              Moreover, a crash is possible when you try to iterate the next element that has been deleted by concurrent thread.
+
+            @warning Use this iterator on the concurrent container for debugging purpose only.
+
+            The iterator interface:
+            \code
+            class iterator {
+            public:
+                // Default constructor
+                iterator();
+
+                // Copy construtor
+                iterator( iterator const& src );
+
+                // Dereference operator
+                value_type * operator ->() const;
+
+                // Dereference operator
+                value_type& operator *() const;
+
+                // Preincrement operator
+                iterator& operator ++();
+
+                // Assignment operator
+                iterator& operator = (iterator const& src);
+
+                // Equality operators
+                bool operator ==(iterator const& i ) const;
+                bool operator !=(iterator const& i ) const;
+            };
+            \endcode
+        */
         typedef skip_list::details::iterator< typename base_class::iterator >  iterator;
 
         /// Const iterator type
@@ -224,6 +269,7 @@ namespace cds { namespace container {
         {
             return const_iterator( base_class::cend() );
         }
+    //@}
 
     public:
         /// Inserts new node
@@ -578,7 +624,7 @@ namespace cds { namespace container {
         {
             CDS_UNUSED( pred );
             return base_class::find_with( key, cds::details::predicate_wrapper< node_type, Less, typename maker::value_accessor >(),
-                                          [&f]( node_type& node, Q& v ) { f( node.m_Value, v ); } );
+                                          [&f]( node_type& node, Q const& v ) { f( node.m_Value, v ); } );
         }
         //@endcond
 
index 104b64003a18cfccf0edb4e5a1203829cd8de13f..3f0e93198ef10adeb41991a631238c631b94757c 100644 (file)
@@ -240,17 +240,21 @@ namespace cds { namespace container {
         //@endcond
 
     public:
+    ///@name Forward iterators
+    //@{
         /// Forward iterator
         /**
-            The forward iterator for lazy list based on gc::nogc has pre- and post-increment operators.
+        The forward iterator is safe: you may use it in multi-threaded enviromnent without any synchronization.
+
+        The forward iterator for lazy list based on \p gc::nogc has pre- and post-increment operators.
 
             The iterator interface to access item data:
-            - <tt> operator -> </tt> - returns a pointer to \ref value_type for iterator
-            - <tt> operator *</tt> - returns a reference (a const reference for \p const_iterator) to \ref value_type for iterator
+            - <tt> operator -> </tt> - returns a pointer to \p value_type
+            - <tt> operator *</tt> - returns a reference (a const reference for \p const_iterator) to \p value_type
             - <tt> const key_type& key() </tt> - returns a key reference for iterator
             - <tt> mapped_type& val() </tt> - retuns a value reference for iterator (const reference for \p const_iterator)
 
-            For both functions the iterator should not be equal to <tt> end() </tt>
+            For both functions the iterator should not be equal to \p end()
         */
         typedef iterator_type<false>    iterator;
 
@@ -285,32 +289,31 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator addressing the first element in a list
-        //@{
         const_iterator begin() const
         {
             const_iterator it( head() );
             ++it ;  // skip dummy head
             return it;
         }
+        /// Returns a forward const iterator addressing the first element in a list
         const_iterator cbegin() const
         {
             const_iterator it( head() );
             ++it ;  // skip dummy head
             return it;
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a list
-        //@{
         const_iterator end() const
         {
             return const_iterator( tail());
         }
+        /// Returns an const iterator that addresses the location succeeding the last element in a list
         const_iterator cend() const
         {
             return const_iterator( tail());
         }
-        //@}
+    //@}
 
     protected:
         //@cond
index 828772b2680a5e598cdb6c733b3cb0b1301c24a2..8fd92684fb7b03baa63373ee0bcc991f96fa4758 100644 (file)
@@ -287,7 +287,13 @@ namespace cds { namespace container {
         //@endcond
 
     public:
+    ///@name Forward iterators
+    //@{
         /// Forward iterator
+        /**
+            You may safely use iterators in multi-threaded environment only under external RCU lock.
+            Otherwise, a program crash is possible if another thread deletes the item the iterator points to.
+        */
         typedef iterator_type<false>    iterator;
 
         /// Const forward iterator
@@ -318,32 +324,33 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator addressing the first element in a list
-        //@{
         const_iterator begin() const
         {
             const_iterator it( head() );
             ++it;   // skip dummy head
             return it;
         }
+
+        /// Returns a forward const iterator addressing the first element in a list
         const_iterator cbegin() const
         {
             const_iterator it( head() );
             ++it;   // skip dummy head
             return it;
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a list
-        //@{
         const_iterator end() const
         {
             return const_iterator( tail());
         }
+
+        /// Returns an const iterator that addresses the location succeeding the last element in a list
         const_iterator cend() const
         {
             return const_iterator( tail());
         }
-        //@}
+    //@}
 
     public:
         /// Default constructor
index a2644245a814926f511946dd0d8fbe8b02444353..469159d62bc529f4391bf0a8e952f3dca43a2469 100644 (file)
@@ -96,6 +96,11 @@ namespace cds { namespace container {
 
     protected:
         //@cond
+        static value_type& node_to_value( node_type& n )
+        {
+            return n.m_Value;
+        }
+
         static node_type * alloc_node()
         {
             return cxx_allocator().New();
@@ -217,6 +222,8 @@ namespace cds { namespace container {
         //@endcond
 
     public:
+    ///@name Forward iterators
+    //@{
         /// Returns a forward iterator addressing the first element in a list
         /**
             For empty list \code begin() == end() \endcode
@@ -253,32 +260,33 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator addressing the first element in a list
-        //@{
         const_iterator begin() const
         {
             const_iterator it( head() );
             ++it    ;   // skip dummy head node
             return it;
         }
+
+        /// Returns a forward const iterator addressing the first element in a list
         const_iterator cbegin() const
         {
             const_iterator it( head() );
             ++it    ;   // skip dummy head node
             return it;
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a list
-        //@{
         const_iterator end() const
         {
             return const_iterator( tail());
         }
+
+        /// Returns an const iterator that addresses the location succeeding the last element in a list
         const_iterator cend() const
         {
             return const_iterator( tail());
         }
-        //@}
+    //@}
 
     protected:
         //@cond
@@ -438,6 +446,11 @@ namespace cds { namespace container {
 
     protected:
         //@cond
+        iterator insert_node( node_type * pNode )
+        {
+            return node_to_iterator( insert_node_at( head(), pNode ));
+        }
+
         node_type * insert_node_at( head_type& refHead, node_type * pNode )
         {
             assert( pNode != nullptr );
index 2bad4f5eed7192d365af8e0205f13bacfcb082c4..b900a7a2ba951cfb2dbc5f6075d9fa3ae61fb5d9 100644 (file)
@@ -161,20 +161,18 @@ namespace cds { namespace container {
         /// Type of \p get() member function return value
         typedef value_type * raw_ptr;
 
-    private:
+    protected:
         //@cond
         static value_type& node_to_value( node_type& n )
         {
             return n.m_Value;
         }
+
         static value_type const& node_to_value( node_type const& n )
         {
             return n.m_Value;
         }
-        //@endcond
 
-    protected:
-        //@cond
         template <typename Q>
         static node_type * alloc_node( Q const& v )
         {
@@ -281,7 +279,13 @@ namespace cds { namespace container {
         //@endcond
 
     public:
+    ///@name Forward iterators (only for debugging purpose)
+    //@{
         /// Forward iterator
+        /**
+            You may safely use iterators in multi-threaded environment only under RCU lock.
+            Otherwise, a crash is possible if another thread deletes the item the iterator points to.
+        */
         typedef iterator_type<false>    iterator;
 
         /// Const forward iterator
@@ -314,32 +318,33 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator addressing the first element in a list
-        //@{
         const_iterator begin() const
         {
             const_iterator it( head() );
             ++it        ;   // skip dummy head node
             return it;
         }
+
+        /// Returns a forward const iterator addressing the first element in a list
         const_iterator cbegin() const
         {
             const_iterator it( head() );
             ++it        ;   // skip dummy head node
             return it;
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a list
-        //@{
         const_iterator end() const
         {
             return const_iterator( tail() );
         }
+
+        /// Returns an const iterator that addresses the location succeeding the last element in a list
         const_iterator cend() const
         {
             return const_iterator( tail() );
         }
-        //@}
+    //@}
 
     public:
         /// Default constructor
@@ -765,6 +770,11 @@ namespace cds { namespace container {
 
     protected:
         //@cond
+        bool insert_node( node_type * pNode )
+        {
+            return insert_node_at( head(), pNode );
+        }
+
         bool insert_node_at( head_type& refHead, node_type * pNode )
         {
             assert( pNode != nullptr );
index 7729fed22d71058a7dea0ff164ebb3ce084751c0..53f71b0ba0d65d39a622318be35bc58fad7fd801 100644 (file)
@@ -257,17 +257,23 @@ namespace cds { namespace container {
         //@endcond
 
     public:
+    ///@name Forward iterators
+    //@{
         /// Forward iterator
         /**
-            The forward iterator for Michael's list based on gc::nogc has pre- and post-increment operators.
+            The forward iterator is safe: you may use it in multi-threaded enviromnent without any synchronization.
+
+            The forward iterator for Michael's list based on \p gc::nogc has pre- and post-increment operators.
 
             The iterator interface to access item data:
-            - <tt> operator -> </tt> - returns a pointer to \ref value_type for iterator
-            - <tt> operator *</tt> - returns a reference (a const reference for \p const_iterator) to \ref value_type for iterator
+            - <tt> operator -> </tt> - returns a pointer to \p value_type
+            - <tt> operator *</tt> - returns a reference (a const reference for \p const_iterator) to \p value_type
             - <tt> const key_type& key() </tt> - returns a key reference for iterator
             - <tt> mapped_type& val() </tt> - retuns a value reference for iterator (const reference for \p const_iterator)
 
-            For both functions the iterator should not be equal to <tt> end() </tt>
+            For both functions the iterator should not be equal to \p end().
+
+            @note \p end() iterator is not dereferenceable
         */
         typedef iterator_type<false>    iterator;
 
@@ -300,28 +306,27 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator addressing the first element in a list
-        //@{
         const_iterator begin() const
         {
             return const_iterator( head() );
         }
+        /// Returns a forward const iterator addressing the first element in a list
         const_iterator cbegin() const
         {
             return const_iterator( head() );
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a list
-        //@{
         const_iterator end() const
         {
             return const_iterator();
         }
+        /// Returns an const iterator that addresses the location succeeding the last element in a list
         const_iterator cend() const
         {
             return const_iterator();
         }
-        //@}
+    //@}
 
     protected:
         //@cond
index c4b48ba9fa9e45e0b0447714cbe426c055badee8..f90b696dac69bfc665f83ce701e592d7dc081784 100644 (file)
@@ -302,7 +302,13 @@ namespace cds { namespace container {
         //@endcond
 
     public:
+    ///@name Forward iterators
+    //@{
         /// Forward iterator
+        /**
+            You may safely use iterators in multi-threaded environment only under external RCU lock.
+            Otherwise, a program crash is possible if another thread deletes the item the iterator points to.
+        */
         typedef iterator_type<false>    iterator;
 
         /// Const forward iterator
@@ -331,28 +337,27 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator addressing the first element in a list
-        //@{
         const_iterator begin() const
         {
             return const_iterator( head() );
         }
+        /// Returns a forward const iterator addressing the first element in a list
         const_iterator cbegin() const
         {
             return const_iterator( head() );
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a list
-        //@{
         const_iterator end() const
         {
             return const_iterator();
         }
+        /// Returns an const iterator that addresses the location succeeding the last element in a list
         const_iterator cend() const
         {
             return const_iterator();
         }
-        //@}
+    //@}
 
     public:
         /// Default constructor
@@ -443,7 +448,7 @@ namespace cds { namespace container {
             return insert_with_at( head(), key, func );
         }
 
-        /// Ensures that the \p key exists in the list
+        /// Updates an element with given \p key
         /**
             The operation performs inserting or changing data with lock-free manner.
 
index 12badc98964f41a41f6f16bab82db089998d2573..b7fbbf6e6e980c2627d5a7d381a20025099b5a34 100644 (file)
@@ -222,6 +222,8 @@ namespace cds { namespace container {
         //@endcond
 
     public:
+   ///@name Forward iterators
+   //@{
         /// Returns a forward iterator addressing the first element in a list
         /**
             For empty list \code begin() == end() \endcode
@@ -257,28 +259,29 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator addressing the first element in a list
-        //@{
         const_iterator begin() const
         {
             return const_iterator( head() );
         }
+
+        /// Returns a forward const iterator addressing the first element in a list
         const_iterator cbegin() const
         {
             return const_iterator( head() );
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a list
-        //@{
         const_iterator end() const
         {
             return const_iterator();
         }
+
+        /// Returns an const iterator that addresses the location succeeding the last element in a list
         const_iterator cend() const
         {
             return const_iterator();
         }
-        //@}
+    //@}
 
     protected:
         //@cond
@@ -323,7 +326,6 @@ namespace cds { namespace container {
         /// Updates the item
         /**
             If \p key is not in the list and \p bAllowInsert is \p true,
-
             the function inserts a new item.
             Otherwise, the function returns an iterator pointing to the item found.
 
@@ -424,6 +426,16 @@ namespace cds { namespace container {
 
     protected:
         //@cond
+        static value_type& node_to_value( node_type& n )
+        {
+            return n.m_Value;
+        }
+
+        iterator insert_node( node_type * pNode )
+        {
+            return node_to_iterator( insert_node_at( head(), pNode ));
+        }
+
         node_type * insert_node_at( head_type& refHead, node_type * pNode )
         {
             assert( pNode != nullptr );
index cfece032357391ee5d3ed5ba2ed88e035ead094a..3a9ba738e1cfd567c52f6958ab22065af832fbc3 100644 (file)
@@ -191,7 +191,7 @@ namespace cds { namespace container {
         /// Result of \p get(), \p get_with() functions - pointer to the node found
         typedef cds::urcu::raw_ptr_adaptor< value_type, typename base_class::raw_ptr, raw_ptr_converter > raw_ptr;
 
-    private:
+    protected:
         //@cond
         static value_type& node_to_value( node_type& n )
         {
@@ -201,10 +201,7 @@ namespace cds { namespace container {
         {
             return n.m_Value;
         }
-        //@endcond
 
-    protected:
-        //@cond
         template <typename Q>
         static node_type * alloc_node( Q const& v )
         {
@@ -297,7 +294,13 @@ namespace cds { namespace container {
         //@endcond
 
     public:
+    ///@name Forward iterators (only for debugging purpose)
+    //@{
         /// Forward iterator
+        /**
+            You may safely use iterators in multi-threaded environment only under RCU lock.
+            Otherwise, a crash is possible if another thread deletes the item the iterator points to.
+        */
         typedef iterator_type<false>    iterator;
 
         /// Const forward iterator
@@ -326,28 +329,29 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator addressing the first element in a list
-        //@{
         const_iterator begin() const
         {
             return const_iterator( head() );
         }
+
+        /// Returns a forward const iterator addressing the first element in a list
         const_iterator cbegin() const
         {
             return const_iterator( head() );
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a list
-        //@{
         const_iterator end() const
         {
             return const_iterator();
         }
+
+        /// Returns an const iterator that addresses the location succeeding the last element in a list
         const_iterator cend() const
         {
             return const_iterator();
         }
-        //@}
+    //@}
 
     public:
         /// Default constructor
@@ -781,6 +785,11 @@ namespace cds { namespace container {
 
     protected:
         //@cond
+        bool insert_node( node_type * pNode )
+        {
+            return insert_node_at( head(), pNode );
+        }
+
         bool insert_node_at( head_type& refHead, node_type * pNode )
         {
             assert( pNode );
index 38df3b84516fd1d50bad9513b03d66f1d59bc50d..1adc0be8f3dfc5f67166ae2e3925aae3abc6e93b 100644 (file)
@@ -72,47 +72,6 @@ namespace cds { namespace container {
         - for \p cds::gc::nogc declared in <tt>cds/container/michael_map_nogc.h</tt>,
             see \ref cds_nonintrusive_MichaelHashMap_nogc "MichaelHashMap<gc::nogc>".
 
-        <b>Iterators</b>
-
-        The class supports a forward iterator (\ref iterator and \ref const_iterator).
-        The iteration is unordered.
-        The iterator object is thread-safe: the element pointed by the iterator object is guarded,
-        so, the element cannot be reclaimed while the iterator object is alive.
-        However, passing an iterator object between threads is dangerous.
-
-        @warning Due to concurrent nature of Michael's set it is not guarantee that you can iterate
-        all elements in the set: any concurrent deletion can exclude the element
-        pointed by the iterator from the set, and your iteration can be terminated
-        before end of the set. Therefore, such iteration is more suitable for debugging purpose only
-
-        Remember, each iterator object requires an additional hazard pointer, that may be
-        a limited resource for \p GC like \p gc::HP (for \p gc::DHP the count of
-        guards is unlimited).
-
-        The iterator class supports the following minimalistic interface:
-        \code
-        struct iterator {
-        // Default ctor
-        iterator();
-
-        // Copy ctor
-        iterator( iterator const& s);
-
-        value_type * operator ->() const;
-        value_type& operator *() const;
-
-        // Pre-increment
-        iterator& operator ++();
-
-        // Copy assignment
-        iterator& operator = (const iterator& src);
-
-        bool operator ==(iterator const& i ) const;
-        bool operator !=(iterator const& i ) const;
-        };
-        \endcode
-        Note, the iterator object returned by \ref end, \p cend member functions points to \p nullptr and should not be dereferenced.
-
         \anchor cds_nonintrusive_MichaelHashMap_how_touse
         <b>How to use</b>
 
@@ -206,6 +165,8 @@ namespace cds { namespace container {
         typedef cds::details::Allocator< bucket_type, typename traits::allocator >  bucket_table_allocator;
         typedef typename bucket_type::guarded_ptr  guarded_ptr; ///< Guarded pointer
 
+        static CDS_CONSTEXPR const size_t c_nHazardPtrCount = bucket_type::c_nHazardPtrCount; ///< Count of hazard pointer required
+
     protected:
         item_counter    m_ItemCounter; ///< Item counter
         hash            m_HashFunctor; ///< Hash functor
@@ -323,7 +284,49 @@ namespace cds { namespace container {
         //@endcond
 
     public:
+    ///@name Forward iterators (only for debugging purpose)
+    //@{
         /// Forward iterator
+        /**
+            The iteration is unordered.
+            The iterator object is thread-safe: the element pointed by the iterator object is guarded,
+            so, the element cannot be reclaimed while the iterator object is alive.
+            However, passing an iterator object between threads is dangerous.
+
+            @warning Due to concurrent nature of Michael's map it is not guarantee that you can iterate
+            all elements in the map: any concurrent deletion can exclude the element
+            pointed by the iterator from the map, and your iteration can be terminated
+            before end of the map. Therefore, such iteration is more suitable for debugging purpose only.
+
+            Remember, each iterator object requires an additional hazard pointer, that may be
+            a limited resource for \p GC like \p gc::HP (for \p gc::DHP the count of
+            guards is unlimited).
+
+            The iterator class supports the following minimalistic interface:
+            \code
+            struct iterator {
+                // Default ctor
+                iterator();
+
+                // Copy ctor
+                iterator( iterator const& s);
+
+                value_type * operator ->() const;
+                value_type& operator *() const;
+
+                // Pre-increment
+                iterator& operator ++();
+
+                // Copy assignment
+                iterator& operator = (iterator const& src);
+
+                bool operator ==(iterator const& i ) const;
+                bool operator !=(iterator const& i ) const;
+            };
+            \endcode
+
+            Note, the iterator object returned by \p end(), \p cend() member functions points to \p nullptr and should not be dereferenced.
+        */
         typedef iterator_type< false >    iterator;
 
         /// Const forward iterator
@@ -350,28 +353,27 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator addressing the first element in a map
-        //@{
         const_iterator begin() const
         {
             return get_const_begin();
         }
+        /// Returns a forward const iterator addressing the first element in a map
         const_iterator cbegin() const
         {
             return get_const_begin();
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a map
-        //@{
         const_iterator end() const
         {
             return get_const_end();
         }
+        /// Returns an const iterator that addresses the location succeeding the last element in a map
         const_iterator cend() const
         {
             return get_const_end();
         }
-        //@}
+    //@}
 
     private:
         //@cond
@@ -635,7 +637,7 @@ namespace cds { namespace container {
         /// Extracts the item with specified \p key
         /** \anchor cds_nonintrusive_MichaelHashMap_hp_extract
             The function searches an item with key equal to \p key,
-            unlinks it from the set, and returns it as \p guarded_ptr.
+            unlinks it from the map, and returns it as \p guarded_ptr.
             If \p key is not found the function returns an empty guarded pointer.
 
             Note the compare functor should accept a parameter of type \p K that may be not the same as \p key_type.
index 6fd18f76e00864990983d8acc63719f849ecb1ed..61ec5dc98b1891706b7d30a928f0de4d24ca799b 100644 (file)
@@ -93,44 +93,32 @@ namespace cds { namespace container {
     protected:
         //@cond
         /// Calculates hash value of \p key
-        size_t hash_value( key_type const & key ) const
+        template <typename K>
+        size_t hash_value( K const & key ) const
         {
             return m_HashFunctor( key ) & m_nHashBitmask;
         }
 
         /// Returns the bucket (ordered list) for \p key
-        bucket_type&    bucket( key_type const& key )
+        template <typename K>
+        bucket_type&    bucket( K const& key )
         {
             return m_Buckets[ hash_value( key ) ];
         }
         //@endcond
 
     protected:
-        /// Forward iterator
-        /**
-            \p IsConst - constness boolean flag
-
-            The forward iterator for Michael's map is based on \p OrderedList forward iterator and has some features:
-            - it has no post-increment operator, only pre-increment
-            - it iterates items in unordered fashion
-        */
+        //@cond
         template <bool IsConst>
         class iterator_type: private cds::intrusive::michael_set::details::iterator< bucket_type, IsConst >
         {
-            //@cond
             typedef cds::intrusive::michael_set::details::iterator< bucket_type, IsConst >  base_class;
             friend class MichaelHashMap;
-            //@endcond
 
         protected:
-            //@cond
-            //typedef typename base_class::bucket_type    bucket_type;
             typedef typename base_class::bucket_ptr     bucket_ptr;
             typedef typename base_class::list_iterator  list_iterator;
 
-            //typedef typename bucket_type::key_type      key_type;
-            //@endcond
-
         public:
             /// Value pointer type (const for const_iterator)
             typedef typename cds::details::make_const_type<typename MichaelHashMap::mapped_type, IsConst>::pointer   value_ptr;
@@ -143,11 +131,9 @@ namespace cds { namespace container {
             typedef typename cds::details::make_const_type<typename MichaelHashMap::value_type, IsConst>::reference pair_ref;
 
         protected:
-            //@cond
             iterator_type( list_iterator const& it, bucket_ptr pFirst, bucket_ptr pLast )
                 : base_class( it, pFirst, pLast )
             {}
-            //@endcond
 
         public:
             /// Default ctor
@@ -207,10 +193,45 @@ namespace cds { namespace container {
                 return !( *this == i );
             }
         };
-
+        //@endcond
 
     public:
+    ///@name Forward iterators
+    //@{
         /// Forward iterator
+        /**
+            The forward iterator for Michael's map is based on \p OrderedList forward iterator and has some features:
+            - it has no post-increment operator
+            - it iterates items in unordered fashion
+
+            The iterator interface:
+            \code
+            class iterator {
+            public:
+                // Default constructor
+                iterator();
+
+                // Copy construtor
+                iterator( iterator const& src );
+
+                // Dereference operator
+                value_type * operator ->() const;
+
+                // Dereference operator
+                value_type& operator *() const;
+
+                // Preincrement operator
+                iterator& operator ++();
+
+                // Assignment operator
+                iterator& operator = (iterator const& src);
+
+                // Equality operators
+                bool operator ==(iterator const& i ) const;
+                bool operator !=(iterator const& i ) const;
+            };
+            \endcode
+        */
         typedef iterator_type< false >    iterator;
 
         /// Const forward iterator
@@ -237,28 +258,29 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator addressing the first element in a set
-        //@{
         const_iterator begin() const
         {
             return get_const_begin();
         }
+
+        /// Returns a forward const iterator addressing the first element in a set
         const_iterator cbegin() const
         {
             return get_const_begin();
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a set
-        //@{
         const_iterator end() const
         {
             return get_const_end();
         }
+
+        /// Returns an const iterator that addresses the location succeeding the last element in a set
         const_iterator cend() const
         {
             return get_const_end();
         }
-        //@}
+    //@}
 
     private:
         //@cond
@@ -485,6 +507,7 @@ namespace cds { namespace container {
             The function is an analog of <tt>contains( key )</tt> but \p pred is used for key comparing.
             \p Less functor has the interface like \p std::less.
             \p pred must imply the same element order as the comparator used for building the map.
+            Hash functor specified in \p Traits should accept parameters of type \p K.
         */
         template <typename K, typename Less>
         iterator contains( K const& key, Less pred )
index 7e6c5304a327484f5a9f65e7043ed248052fd850..3dd45ad3ba5cdeb6075ea7405e943d2c22e0deea 100644 (file)
@@ -136,38 +136,19 @@ namespace cds { namespace container {
             return m_Buckets[ hash_value( key ) ];
         }
         //@endcond
-    protected:
-        /// Forward iterator
-        /**
-            \p IsConst - constness boolean flag
-
-            The forward iterator for Michael's map is based on \p OrderedList forward iterator and has the following features:
-            - it has no post-increment operator, only pre-increment
-            - it iterates items in unordered fashion
-            - The iterator cannot be moved across thread boundary since it may contain GC's guard that is thread-private GC data.
-            - Iterator ensures thread-safety even if you delete the item that iterator points to. However, in case of concurrent
-              deleting operations it is no guarantee that you iterate all item in the map.
 
-            Therefore, the use of iterators in concurrent environment is not good idea. Use the iterator for the concurrent container
-            for debug purpose only.
-        */
+    protected:
+        //@cond
         template <bool IsConst>
         class iterator_type: private cds::intrusive::michael_set::details::iterator< bucket_type, IsConst >
         {
-            //@cond
             typedef cds::intrusive::michael_set::details::iterator< bucket_type, IsConst >  base_class;
             friend class MichaelHashMap;
-            //@endcond
 
         protected:
-            //@cond
-            //typedef typename base_class::bucket_type    bucket_type;
             typedef typename base_class::bucket_ptr     bucket_ptr;
             typedef typename base_class::list_iterator  list_iterator;
 
-            //typedef typename bucket_type::key_type      key_type;
-            //@endcond
-
         public:
             /// Value pointer type (const for const_iterator)
             typedef typename cds::details::make_const_type<typename MichaelHashMap::mapped_type, IsConst>::pointer   value_ptr;
@@ -180,11 +161,9 @@ namespace cds { namespace container {
             typedef typename cds::details::make_const_type<typename MichaelHashMap::value_type, IsConst>::reference pair_ref;
 
         protected:
-            //@cond
             iterator_type( list_iterator const& it, bucket_ptr pFirst, bucket_ptr pLast )
                 : base_class( it, pFirst, pLast )
             {}
-            //@endcond
 
         public:
             /// Default ctor
@@ -244,9 +223,49 @@ namespace cds { namespace container {
                 return !( *this == i );
             }
         };
+        //@endcond
 
     public:
+    ///@name Forward iterators (thread-safe under RCU lock)
+    //@{
+
         /// Forward iterator
+        /**
+            The forward iterator for Michael's map is based on \p OrderedList forward iterator and has some features:
+            - it has no post-increment operator
+            - it iterates items in unordered fashion
+
+            You may safely use iterators in multi-threaded environment only under RCU lock.
+            Otherwise, a crash is possible if another thread deletes the element the iterator points to.
+
+            The iterator interface:
+            \code
+            class iterator {
+            public:
+                // Default constructor
+                iterator();
+
+                // Copy construtor
+                iterator( iterator const& src );
+
+                // Dereference operator
+                value_type * operator ->() const;
+
+                // Dereference operator
+                value_type& operator *() const;
+
+                // Preincrement operator
+                iterator& operator ++();
+
+                // Assignment operator
+                iterator& operator = (iterator const& src);
+
+                // Equality operators
+                bool operator ==(iterator const& i ) const;
+                bool operator !=(iterator const& i ) const;
+            };
+            \endcode
+        */
         typedef iterator_type< false >    iterator;
 
         /// Const forward iterator
@@ -273,28 +292,29 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator addressing the first element in a map
-        //@{
         const_iterator begin() const
         {
             return get_const_begin();
         }
+
+        /// Returns a forward const iterator addressing the first element in a map
         const_iterator cbegin() const
         {
             return get_const_begin();
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a map
-        //@{
         const_iterator end() const
         {
             return get_const_end();
         }
+
+        /// Returns an const iterator that addresses the location succeeding the last element in a map
         const_iterator cend() const
         {
             return get_const_end();
         }
-        //@}
+    //@}
 
     private:
         //@cond
index 2ecdcf6a696930a70a14a0012b20989e0d464ceb..9493f4bcf7ef17e094cfab3fab30d7a3642f1e92 100644 (file)
@@ -93,47 +93,6 @@ namespace cds { namespace container {
         };
         \endcode
 
-        <b>Iterators</b>
-
-        The class supports a forward iterator (\ref iterator and \ref const_iterator).
-        The iteration is unordered.
-        The iterator object is thread-safe: the element pointed by the iterator object is guarded,
-        so, the element cannot be reclaimed while the iterator object is alive.
-        However, passing an iterator object between threads is dangerous.
-
-        @warning Due to concurrent nature of Michael's set it is not guarantee that you can iterate
-        all elements in the set: any concurrent deletion can exclude the element
-        pointed by the iterator from the set, and your iteration can be terminated
-        before end of the set. Therefore, such iteration is more suitable for debugging purpose only
-
-        Remember, each iterator object requires an additional hazard pointer, that may be
-        a limited resource for \p GC like \p gc::HP (for \p gc::DHP the total count of
-        guards is unlimited).
-
-        The iterator class supports the following minimalistic interface:
-        \code
-        struct iterator {
-        // Default ctor
-        iterator();
-
-        // Copy ctor
-        iterator( iterator const& s);
-
-        value_type * operator ->() const;
-        value_type& operator *() const;
-
-        // Pre-increment
-        iterator& operator ++();
-
-        // Copy assignment
-        iterator& operator = (const iterator& src);
-
-        bool operator ==(iterator const& i ) const;
-        bool operator !=(iterator const& i ) const;
-        };
-        \endcode
-        Note, the iterator object returned by \ref end, \p cend member functions points to \p nullptr and should not be dereferenced.
-
         <b>How to use</b>
 
         Suppose, we have the following type \p Foo that we want to store in our \p %MichaelHashSet:
@@ -218,15 +177,31 @@ namespace cds { namespace container {
         typedef typename cds::opt::v::hash_selector< typename traits::hash >::type hash;
         typedef typename traits::item_counter item_counter; ///< Item counter type
 
-        /// Bucket table allocator
-        typedef cds::details::Allocator< bucket_type, typename traits::allocator >  bucket_table_allocator;
-
         typedef typename bucket_type::guarded_ptr  guarded_ptr; ///< Guarded pointer
+        static CDS_CONSTEXPR const size_t c_nHazardPtrCount = bucket_type::c_nHazardPtrCount; ///< Count of hazard pointer required
 
     protected:
+        //@cond
+        class internal_bucket_type: public bucket_type
+        {
+            typedef bucket_type base_class;
+        public:
+            using base_class::node_type;
+            using base_class::alloc_node;
+            using base_class::insert_node;
+            using base_class::node_to_value;
+        };
+
+        /// Bucket table allocator
+        typedef cds::details::Allocator< internal_bucket_type, typename traits::allocator >  bucket_table_allocator;
+        //@endcond
+
+    protected:
+        //@cond
         item_counter    m_ItemCounter; ///< Item counter
         hash            m_HashFunctor; ///< Hash functor
-        bucket_type *   m_Buckets;     ///< bucket table
+        internal_bucket_type *  m_Buckets;     ///< bucket table
+        //@endcond
 
     private:
         //@cond
@@ -244,13 +219,58 @@ namespace cds { namespace container {
 
         /// Returns the bucket (ordered list) for \p key
         template <typename Q>
-        bucket_type&    bucket( Q const& key )
+        internal_bucket_type&    bucket( Q const& key )
         {
             return m_Buckets[ hash_value( key ) ];
         }
         //@endcond
 
     public:
+    ///@name Forward iterators (only for debugging purpose)
+    //@{
+        /// Forward iterator
+        /**
+            The forward iterator for Michael's set has some features:
+            - it has no post-increment operator
+            - to protect the value, the iterator contains a GC-specific guard + another guard is required locally for increment operator.
+              For some GC (like as \p gc::HP), a guard is a limited resource per thread, so an exception (or assertion) "no free guard"
+              may be thrown if the limit of guard count per thread is exceeded.
+            - The iterator cannot be moved across thread boundary because it contains thread-private GC's guard.
+            - Iterator ensures thread-safety even if you delete the item the iterator points to. However, in case of concurrent
+              deleting operations there is no guarantee that you iterate all item in the set. 
+              Moreover, a crash is possible when you try to iterate the next element that has been deleted by concurrent thread.
+
+            @warning Use this iterator on the concurrent container for debugging purpose only.
+
+            The iterator interface:
+            \code
+            class iterator {
+            public:
+                // Default constructor
+                iterator();
+
+                // Copy construtor
+                iterator( iterator const& src );
+
+                // Dereference operator
+                value_type * operator ->() const;
+
+                // Dereference operator
+                value_type& operator *() const;
+
+                // Preincrement operator
+                iterator& operator ++();
+
+                // Assignment operator
+                iterator& operator = (iterator const& src);
+
+                // Equality operators
+                bool operator ==(iterator const& i ) const;
+                bool operator !=(iterator const& i ) const;
+            };
+            \endcode
+        */
+
         /// Forward iterator
         typedef michael_set::details::iterator< bucket_type, false >    iterator;
 
@@ -278,38 +298,39 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator addressing the first element in a set
-        //@{
         const_iterator begin() const
         {
             return get_const_begin();
         }
+
+        /// Returns a forward const iterator addressing the first element in a set
         const_iterator cbegin() const
         {
             return get_const_begin();
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a set
-        //@{
         const_iterator end() const
         {
             return get_const_end();
         }
+
+        /// Returns an const iterator that addresses the location succeeding the last element in a set
         const_iterator cend() const
         {
             return get_const_end();
         }
-        //@}
+    //@}
 
     private:
         //@cond
         const_iterator get_const_begin() const
         {
-            return const_iterator( const_cast<bucket_type const&>(m_Buckets[0]).begin(), m_Buckets, m_Buckets + bucket_count() );
+            return const_iterator( const_cast<internal_bucket_type const&>(m_Buckets[0]).begin(), m_Buckets, m_Buckets + bucket_count() );
         }
         const_iterator get_const_end() const
         {
-            return const_iterator( const_cast<bucket_type const&>(m_Buckets[bucket_count() - 1]).end(), m_Buckets + bucket_count() - 1, m_Buckets + bucket_count() );
+            return const_iterator( const_cast<internal_bucket_type const&>(m_Buckets[bucket_count() - 1]).end(), m_Buckets + bucket_count() - 1, m_Buckets + bucket_count() );
         }
         //@endcond
 
@@ -443,7 +464,8 @@ namespace cds { namespace container {
         template <typename... Args>
         bool emplace( Args&&... args )
         {
-            bool bRet = bucket( value_type(std::forward<Args>(args)...) ).emplace( std::forward<Args>(args)... );
+            typename internal_bucket_type::node_type * pNode = internal_bucket_type::alloc_node( std::forward<Args>( args )... );
+            bool bRet = bucket( internal_bucket_type::node_to_value( *pNode )).insert_node( pNode );
             if ( bRet )
                 ++m_ItemCounter;
             return bRet;
index 1dd1c10377893060c115a126c7b61c0785dd4988..b3e7db4be2203531c6ce1da68e597f187ec5f5ca 100644 (file)
@@ -70,19 +70,31 @@ namespace cds { namespace container {
         typedef typename cds::opt::v::hash_selector< typename traits::hash >::type hash;
         typedef typename traits::item_counter  item_counter; ///< Item counter type
 
-        /// Bucket table allocator
-        typedef cds::details::Allocator< bucket_type, typename traits::allocator >  bucket_table_allocator;
-
     protected:
         //@cond
+        class internal_bucket_type: public bucket_type
+        {
+            typedef bucket_type base_class;
+        public:
+            using base_class::node_type;
+            using base_class::alloc_node;
+            using base_class::insert_node;
+            using base_class::node_to_value;
+        };
+
+        /// Bucket table allocator
+        typedef cds::details::Allocator< internal_bucket_type, typename traits::allocator >  bucket_table_allocator;
+
         typedef typename bucket_type::iterator        bucket_iterator;
         typedef typename bucket_type::const_iterator  bucket_const_iterator;
         //@endcond
 
     protected:
+        //@cond
         item_counter    m_ItemCounter;   ///< Item counter
         hash            m_HashFunctor;   ///< Hash functor
-        bucket_type *   m_Buckets;       ///< bucket table
+        internal_bucket_type *   m_Buckets;       ///< bucket table
+        //@endcond
 
     private:
         //@cond
@@ -100,18 +112,48 @@ namespace cds { namespace container {
 
         /// Returns the bucket (ordered list) for \p key
         template <typename Q>
-        bucket_type&    bucket( const Q& key )
+        internal_bucket_type& bucket( const Q& key )
         {
             return m_Buckets[ hash_value( key ) ];
         }
         //@endcond
 
     public:
+    ///@name Forward iterators
+    //@{
         /// Forward iterator
         /**
             The forward iterator for Michael's set is based on \p OrderedList forward iterator and has some features:
             - it has no post-increment operator
             - it iterates items in unordered fashion
+
+            The iterator interface:
+            \code
+            class iterator {
+            public:
+                // Default constructor
+                iterator();
+
+                // Copy construtor
+                iterator( iterator const& src );
+
+                // Dereference operator
+                value_type * operator ->() const;
+
+                // Dereference operator
+                value_type& operator *() const;
+
+                // Preincrement operator
+                iterator& operator ++();
+
+                // Assignment operator
+                iterator& operator = (iterator const& src);
+
+                // Equality operators
+                bool operator ==(iterator const& i ) const;
+                bool operator !=(iterator const& i ) const;
+            };
+            \endcode
         */
         typedef michael_set::details::iterator< bucket_type, false >    iterator;
 
@@ -142,38 +184,39 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator addressing the first element in a set
-        //@{
         const_iterator begin() const
         {
             return get_const_begin();
         }
+
+        /// Returns a forward const iterator addressing the first element in a set
         const_iterator cbegin() const
         {
             return get_const_begin();
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a set
-        //@{
         const_iterator end() const
         {
             return get_const_end();
         }
+
+        /// Returns an const iterator that addresses the location succeeding the last element in a set
         const_iterator cend() const
         {
             return get_const_end();
         }
-        //@}
+    //@}
 
     private:
         //@cond
         const_iterator get_const_begin() const
         {
-            return const_iterator( const_cast<bucket_type const&>(m_Buckets[0]).begin(), m_Buckets, m_Buckets + bucket_count() );
+            return const_iterator( const_cast<internal_bucket_type const&>(m_Buckets[0]).begin(), m_Buckets, m_Buckets + bucket_count() );
         }
         const_iterator get_const_end() const
         {
-            return const_iterator( const_cast<bucket_type const&>(m_Buckets[bucket_count() - 1]).end(), m_Buckets + bucket_count() - 1, m_Buckets + bucket_count() );
+            return const_iterator( const_cast<internal_bucket_type const&>(m_Buckets[bucket_count() - 1]).end(), m_Buckets + bucket_count() - 1, m_Buckets + bucket_count() );
         }
         //@endcond
 
@@ -219,7 +262,7 @@ namespace cds { namespace container {
         template <typename Q>
         iterator insert( const Q& val )
         {
-            bucket_type& refBucket = bucket( val );
+            internal_bucket_type& refBucket = bucket( val );
             bucket_iterator it = refBucket.insert( val );
 
             if ( it != refBucket.end() ) {
@@ -237,9 +280,9 @@ namespace cds { namespace container {
         template <typename... Args>
         iterator emplace( Args&&... args )
         {
-            bucket_type& refBucket = bucket( value_type(std::forward<Args>(args)...));
-            bucket_iterator it = refBucket.emplace( std::forward<Args>(args)... );
-
+            typename internal_bucket_type::node_type * pNode = internal_bucket_type::alloc_node( std::forward<Args>( args )... );
+            internal_bucket_type& refBucket = bucket( internal_bucket_type::node_to_value( *pNode ));
+            bucket_iterator it = refBucket.insert_node( pNode );
             if ( it != refBucket.end() ) {
                 ++m_ItemCounter;
                 return iterator( it, &refBucket, m_Buckets + bucket_count() );
@@ -266,7 +309,7 @@ namespace cds { namespace container {
         template <typename Q>
         std::pair<iterator, bool> update( Q const& val, bool bAllowInsert = true )
         {
-            bucket_type& refBucket = bucket( val );
+            internal_bucket_type& refBucket = bucket( val );
             std::pair<bucket_iterator, bool> ret = refBucket.update( val, bAllowInsert );
 
             if ( ret.first != refBucket.end() ) {
@@ -297,7 +340,7 @@ namespace cds { namespace container {
         template <typename Q>
         iterator contains( Q const& key )
         {
-            bucket_type& refBucket = bucket( key );
+            internal_bucket_type& refBucket = bucket( key );
             bucket_iterator it = refBucket.contains( key );
             if ( it != refBucket.end() )
                 return iterator( it, &refBucket, m_Buckets + bucket_count() );
@@ -322,7 +365,7 @@ namespace cds { namespace container {
         template <typename Q, typename Less>
         iterator contains( Q const& key, Less pred )
         {
-            bucket_type& refBucket = bucket( key );
+            internal_bucket_type& refBucket = bucket( key );
             bucket_iterator it = refBucket.contains( key, pred );
             if ( it != refBucket.end() )
                 return iterator( it, &refBucket, m_Buckets + bucket_count() );
index 687c79a3ba75626668ba7620728ce34885a595e2..53e43fd8afc198d118aff42f636e1bae9272b24e 100644 (file)
@@ -146,9 +146,6 @@ namespace cds { namespace container {
         typedef typename cds::opt::v::hash_selector< typename traits::hash >::type hash;
         typedef typename traits::item_counter item_counter;   ///< Item counter type
 
-        /// Bucket table allocator
-        typedef cds::details::Allocator< bucket_type, typename traits::allocator >  bucket_table_allocator;
-
         typedef typename bucket_type::rcu_lock   rcu_lock;   ///< RCU scoped lock
         typedef typename bucket_type::exempt_ptr exempt_ptr; ///< pointer to extracted node
         typedef typename bucket_type::raw_ptr    raw_ptr;    ///< Return type of \p get() member function and its derivatives
@@ -156,9 +153,26 @@ namespace cds { namespace container {
         static CDS_CONSTEXPR const bool c_bExtractLockExternal = bucket_type::c_bExtractLockExternal;
 
     protected:
-        item_counter    m_ItemCounter; ///< Item counter
-        hash            m_HashFunctor; ///< Hash functor
-        bucket_type *   m_Buckets;     ///< bucket table
+        //@cond
+        class internal_bucket_type: public bucket_type
+        {
+            typedef bucket_type base_class;
+        public:
+            using base_class::node_type;
+            using base_class::alloc_node;
+            using base_class::insert_node;
+            using base_class::node_to_value;
+        };
+
+        /// Bucket table allocator
+        typedef cds::details::Allocator< internal_bucket_type, typename traits::allocator >  bucket_table_allocator;
+
+        //@endcond
+
+    protected:
+        item_counter             m_ItemCounter; ///< Item counter
+        hash                     m_HashFunctor; ///< Hash functor
+        internal_bucket_type *   m_Buckets;     ///< bucket table
 
     private:
         //@cond
@@ -176,28 +190,55 @@ namespace cds { namespace container {
 
         /// Returns the bucket (ordered list) for \p key
         template <typename Q>
-        bucket_type&    bucket( Q const& key )
+        internal_bucket_type& bucket( Q const& key )
         {
             return m_Buckets[ hash_value( key ) ];
         }
         template <typename Q>
-        bucket_type const&    bucket( Q const& key ) const
+        internal_bucket_type const& bucket( Q const& key ) const
         {
             return m_Buckets[ hash_value( key ) ];
         }
         //@endcond
     public:
+    ///@name Forward iterators (thread-safe under RCU lock)
+    //@{
         /// Forward iterator
         /**
             The forward iterator for Michael's set is based on \p OrderedList forward iterator and has some features:
             - it has no post-increment operator
             - it iterates items in unordered fashion
-            - The iterator cannot be moved across thread boundary since it may contain GC's guard that is thread-private GC data.
-            - Iterator ensures thread-safety even if you delete the item that iterator points to. However, in case of concurrent
-              deleting operations it is no guarantee that you iterate all item in the set.
 
-            Therefore, the use of iterators in concurrent environment is not good idea. Use the iterator for the concurrent container
-            for debug purpose only.
+            You may safely use iterators in multi-threaded environment only under RCU lock.
+            Otherwise, a crash is possible if another thread deletes the element the iterator points to.
+
+            The iterator interface:
+            \code
+            class iterator {
+            public:
+                // Default constructor
+                iterator();
+
+                // Copy construtor
+                iterator( iterator const& src );
+
+                // Dereference operator
+                value_type * operator ->() const;
+
+                // Dereference operator
+                value_type& operator *() const;
+
+                // Preincrement operator
+                iterator& operator ++();
+
+                // Assignment operator
+                iterator& operator = (iterator const& src);
+
+                // Equality operators
+                bool operator ==(iterator const& i ) const;
+                bool operator !=(iterator const& i ) const;
+            };
+            \endcode
         */
         typedef michael_set::details::iterator< bucket_type, false >    iterator;
 
@@ -225,38 +266,39 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator addressing the first element in a set
-        //@{
         const_iterator begin() const
         {
             return get_const_begin();
         }
+
+        /// Returns a forward const iterator addressing the first element in a set
         const_iterator cbegin() const
         {
             return get_const_begin();
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a set
-        //@{
         const_iterator end() const
         {
             return get_const_end();
         }
+
+        /// Returns an const iterator that addresses the location succeeding the last element in a set
         const_iterator cend() const
         {
             return get_const_end();
         }
-        //@}
+    //@}
 
     private:
         //@cond
         const_iterator get_const_begin() const
         {
-            return const_iterator( const_cast<bucket_type const&>(m_Buckets[0]).begin(), m_Buckets, m_Buckets + bucket_count() );
+            return const_iterator( const_cast<internal_bucket_type const&>(m_Buckets[0]).begin(), m_Buckets, m_Buckets + bucket_count() );
         }
         const_iterator get_const_end() const
         {
-            return const_iterator( const_cast<bucket_type const&>(m_Buckets[bucket_count() - 1]).end(), m_Buckets + bucket_count() - 1, m_Buckets + bucket_count() );
+            return const_iterator( const_cast<internal_bucket_type const&>(m_Buckets[bucket_count() - 1]).end(), m_Buckets + bucket_count() - 1, m_Buckets + bucket_count() );
         }
         //@endcond
 
@@ -278,7 +320,6 @@ namespace cds { namespace container {
             // GC and OrderedList::gc must be the same
             static_assert( std::is_same<gc, typename bucket_type::gc>::value, "GC and OrderedList::gc must be the same");
 
-            // atomicity::empty_item_counter is not allowed as a item counter
             static_assert( !std::is_same<item_counter, atomicity::empty_item_counter>::value,
                            "atomicity::empty_item_counter is not allowed as a item counter");
 
@@ -343,36 +384,7 @@ namespace cds { namespace container {
             return bRet;
         }
 
-        /// Ensures that the item exists in the set
-        /**
-            The operation performs inserting or changing data with lock-free manner.
-
-            If the \p val key not found in the set, then the new item created from \p val
-            is inserted into the set. Otherwise, the functor \p func is called with the item found.
-            The functor \p Func signature is:
-            \code
-                struct my_functor {
-                    void operator()( bool bNew, value_type& item, const Q& val );
-                };
-            \endcode
-
-            with arguments:
-            - \p bNew - \p true if the item has been inserted, \p false otherwise
-            - \p item - item of the set
-            - \p val - argument \p key passed into the \p ensure function
-
-            The functor may change non-key fields of the \p item.
-
-            The function applies RCU lock internally.
 
-            Returns <tt> std::pair<bool, bool> </tt> where \p first is true if operation is successfull,
-            \p second is true if new item has been added or \p false if the item with \p key
-            already is in the set.
-
-            @warning For \ref cds_nonintrusive_MichaelList_rcu "MichaelList" as the bucket see \ref cds_intrusive_item_creating "insert item troubleshooting".
-            \ref cds_nonintrusive_LazyList_rcu "LazyList" provides exclusive access to inserted item and does not require any node-level
-            synchronization.
-        */
         /// Updates the element
         /**
             The operation performs inserting or changing data with lock-free manner.
@@ -427,7 +439,8 @@ namespace cds { namespace container {
         template <typename... Args>
         bool emplace( Args&&... args )
         {
-            bool bRet = bucket( value_type(std::forward<Args>(args)...) ).emplace( std::forward<Args>(args)... );
+            typename internal_bucket_type::node_type * pNode = internal_bucket_type::alloc_node( std::forward<Args>( args )... );
+            bool bRet = bucket( internal_bucket_type::node_to_value( *pNode ) ).insert_node( pNode );
             if ( bRet )
                 ++m_ItemCounter;
             return bRet;
index 7e9037277e04a43e6a718161593d016318e8aaf4..42e86df91db479fc5d9e66ffc1b4959415a91347 100644 (file)
@@ -93,6 +93,8 @@ namespace cds { namespace container {
             typedef MoirQueue< GC2, T2, Traits2 > other   ;   ///< Rebinding result
         };
 
+        static CDS_CONSTEXPR const size_t c_nHazardPtrCount = base_class::c_nHazardPtrCount; ///< Count of hazard pointer required for the algorithm
+
     public:
         typedef T value_type ; ///< Value type stored in the queue
         typedef typename base_class::gc                 gc;             ///< Garbage collector
@@ -152,7 +154,7 @@ namespace cds { namespace container {
         /// Enqueues \p val value into the queue.
         /**
             The function makes queue node in dynamic memory calling copy constructor for \p val
-            and then it calls intrusive::MoirQueue::enqueue.
+            and then it calls \p intrusive::MoirQueue::enqueue.
             Returns \p true if success, \p false otherwise.
         */
         bool enqueue( value_type const& val )
@@ -165,6 +167,17 @@ namespace cds { namespace container {
             return false;
         }
 
+        /// Enqueues \p val value into the queue, move semantics
+        bool enqueue( value_type&& val )
+        {
+            scoped_node_ptr p( alloc_node_move( std::move( val )));
+            if ( base_class::enqueue( *p ) ) {
+                p.release();
+                return true;
+            }
+            return false;
+        }
+
         /// Enqueues \p data to queue using a functor
         /**
             \p Func is a functor calling to create a new node.
@@ -206,6 +219,12 @@ namespace cds { namespace container {
             return enqueue( val );
         }
 
+        /// Synonym for \p enqueue() function, move semantics
+        bool push( value_type&& val )
+        {
+            return enqueue( std::move( val ));
+        }
+
         /// Synonym for \p enqueue_with() function
         template <typename Func>
         bool push_with( Func f )
@@ -221,7 +240,7 @@ namespace cds { namespace container {
         */
         bool dequeue( value_type& dest )
         {
-            return dequeue_with( [&dest]( value_type& src ) { dest = src;  } );
+            return dequeue_with( [&dest]( value_type& src ) { dest = std::move( src ); });
         }
 
         /// Dequeues a value using a functor
index b1321b5f7d48772ff71ea8fd627bb270ff62b9de..23b2324b4c7f7b5594bdc26f4584ebde442eddb9 100644 (file)
@@ -164,7 +164,7 @@ namespace cds { namespace container {
     public:
         /// Constructs empty priority queue
         /**
-            For cds::opt::v::static_buffer the \p nCapacity parameter is ignored.
+            For \p cds::opt::v::static_buffer the \p nCapacity parameter is ignored.
         */
         MSPriorityQueue( size_t nCapacity )
             : base_class( nCapacity )
@@ -251,7 +251,7 @@ namespace cds { namespace container {
         */
         bool pop( value_type& dest )
         {
-            return pop_with( [&dest]( value_type& src ) { move_policy()(dest, src); } );
+            return pop_with( [&dest]( value_type& src ) { move_policy()(dest, std::move(src)); });
         }
 
         /// Extracts an item with high priority
index f3d558f198aeb7e41da94c0909804b0e8d4ef3fe..db42d3d46325e5864339b63498b7e839757508b8 100644 (file)
@@ -218,6 +218,8 @@ namespace cds { namespace container {
         typedef typename base_class::stat           stat;           ///< Internal statistics policy used
         typedef typename base_class::memory_model   memory_model;   ///< Memory ordering. See cds::opt::memory_model option
 
+        static CDS_CONSTEXPR const size_t c_nHazardPtrCount = base_class::c_nHazardPtrCount; ///< Count of hazard pointer required for the algorithm
+
     protected:
         //@cond
         typedef typename maker::node_type  node_type;   ///< queue node type (derived from \p intrusive::msqueue::node)
@@ -268,7 +270,7 @@ namespace cds { namespace container {
         /// Enqueues \p val value into the queue.
         /**
             The function makes queue node in dynamic memory calling copy constructor for \p val
-            and then it calls intrusive::MSQueue::enqueue.
+            and then it calls \p intrusive::MSQueue::enqueue.
             Returns \p true if success, \p false otherwise.
         */
         bool enqueue( value_type const& val )
@@ -281,6 +283,17 @@ namespace cds { namespace container {
             return false;
         }
 
+        /// Enqueues \p val in the queue, move semantics
+        bool enqueue( value_type&& val )
+        {
+            scoped_node_ptr p( alloc_node_move( std::move( val )));
+            if ( base_class::enqueue( *p ) ) {
+                p.release();
+                return true;
+            }
+            return false;
+        }
+
         /// Enqueues data to the queue using a functor
         /**
             \p Func is a functor called to create node.
@@ -321,6 +334,12 @@ namespace cds { namespace container {
             return enqueue( val );
         }
 
+        /// Synonym for \p enqueue() function
+        bool push( value_type&& val )
+        {
+            return enqueue( std::move( val ));
+        }
+
         /// Synonym for \p enqueue_with() function
         template <typename Func>
         bool push_with( Func f )
@@ -336,7 +355,7 @@ namespace cds { namespace container {
         */
         bool dequeue( value_type& dest )
         {
-            return dequeue_with( [&dest]( value_type& src ) { dest = src;  } );
+            return dequeue_with( [&dest]( value_type& src ) { dest = std::move( src );});
         }
 
         /// Dequeues a value using a functor
index b118dce2aa3b167eebc39f1b99b1e22db5ffd2f0..d567dfcf0504d1f60433809e755ff1be841c41de 100644 (file)
@@ -283,6 +283,17 @@ namespace cds { namespace container {
             return false;
         }
 
+        /// Enqueues \p val value into the queue, move semntics
+        bool enqueue( value_type&& val )
+        {
+            scoped_node_ptr p( alloc_node_move( std::move( val )));
+            if ( base_class::enqueue( *p ) ) {
+                p.release();
+                return true;
+            }
+            return false;
+        }
+
         /// Enqueues \p data to queue using a functor
         /**
             \p Func is a functor called to create node.
@@ -317,12 +328,18 @@ namespace cds { namespace container {
             return false;
         }
 
-        /// Synonym for \p enqueue() function
+        /// Synonym for \p enqueue( const value_type& ) function
         bool push( const value_type& val )
         {
             return enqueue( val );
         }
 
+        /// Synonym for \p enqueue( value_type&& ) function
+        bool push( value_type&& val )
+        {
+            return enqueue( std::move( val ));
+        }
+
         /// Synonym for \p enqueue_with() function
         template <typename Func>
         bool push_with( Func f )
@@ -339,7 +356,7 @@ namespace cds { namespace container {
         */
         bool dequeue( value_type& dest )
         {
-            return dequeue_with( [&dest]( value_type& src ) { dest = src; } );
+            return dequeue_with( [&dest]( value_type& src ) { dest = std::move( src ); });
         }
 
         /// Dequeues a value using a functor
index ae52b9f0927debfb7e379acf3d36ba7248a9e7aa..85206857ea0349216dfcb8ffa404d7b2a878e7c2 100644 (file)
@@ -132,7 +132,7 @@ namespace cds { namespace container {
         typedef T       value_type; ///< Type of value to be stored in the queue
         typedef Traits  traits;     ///< Queue traits
 
-        typedef typename traits::lock_type  lock_type;      ///< Locking primitive
+        typedef typename traits::lock_type    lock_type;    ///< Locking primitive
         typedef typename traits::item_counter item_counter; ///< Item counting policy used
 
     protected:
@@ -252,6 +252,17 @@ namespace cds { namespace container {
             return false;
         }
 
+        /// Enqueues \p data, move semantics
+        bool enqueue( value_type&& data )
+        {
+            scoped_node_ptr p( alloc_node_move( std::move( data )));
+            if ( enqueue_node( p.get() ) ) {
+                p.release();
+                return true;
+            }
+            return false;
+        }
+
         /// Enqueues \p data to the queue using a functor
         /**
             \p Func is a functor called to create node.
@@ -286,12 +297,18 @@ namespace cds { namespace container {
             return false;
         }
 
-        /// Synonym for \p enqueue() function
+        /// Synonym for \p enqueue( value_type const& ) function
         bool push( value_type const& val )
         {
             return enqueue( val );
         }
 
+        /// Synonym for \p enqueue( value_type&& ) function
+        bool push( value_type&& val )
+        {
+            return enqueue( std::move( val ));
+        }
+
         /// Synonym for \p enqueue_with() function
         template <typename Func>
         bool push_with( Func f )
@@ -306,7 +323,7 @@ namespace cds { namespace container {
         */
         bool dequeue( value_type& dest )
         {
-            return dequeue_with( [&dest]( value_type& src ) { dest = src; } );
+            return dequeue_with( [&dest]( value_type& src ) { dest = std::move( src ); });
         }
 
         /// Dequeues a value using a functor
@@ -368,6 +385,7 @@ namespace cds { namespace container {
                 m_Head.ptr = m_Head.ptr->m_pNext.load( atomics::memory_order_relaxed );
                 free_node( pHead );
             }
+            m_ItemCounter.reset();
         }
 
         /// Returns queue's item count
index d29d567a1360fb605df8ef4a52bd07c92fd15d4f..886a9de62e031a7e20b1adb62f688150b7ddf26b 100644 (file)
@@ -281,6 +281,17 @@ namespace cds { namespace container {
             return false;
         }
 
+        /// Inserts a new element at last segment of the queue, move semantics
+        bool enqueue( value_type&& val )
+        {
+            scoped_node_ptr p( alloc_node_move( std::move( val )));
+            if ( base_class::enqueue( *p ) ) {
+                p.release();
+                return true;
+            }
+            return false;
+        }
+
         /// Enqueues data to the queue using a functor
         /**
             \p Func is a functor called to create node.
@@ -304,12 +315,18 @@ namespace cds { namespace container {
         }
 
 
-        /// Synonym for \p enqueue() member function
+        /// Synonym for \p enqueue( value_type const& ) member function
         bool push( value_type const& val )
         {
             return enqueue( val );
         }
 
+        /// Synonym for \p enqueue( value_type&& ) member function
+        bool push( value_type&& val )
+        {
+            return enqueue( std::move( val ));
+        }
+
         /// Synonym for \p enqueue_with() member function
         template <typename Func>
         bool push_with( Func f )
@@ -337,7 +354,7 @@ namespace cds { namespace container {
         */
         bool dequeue( value_type& dest )
         {
-            return dequeue_with( [&dest]( value_type& src ) { dest = src; });
+            return dequeue_with( [&dest]( value_type& src ) { dest = std::move( src );});
         }
 
         /// Dequeues a value using a functor
@@ -390,7 +407,7 @@ namespace cds { namespace container {
 
         /// Clear the queue
         /**
-            The function repeatedly calls \ref dequeue until it returns \p nullptr.
+            The function repeatedly calls \p dequeue() until it returns \p nullptr.
             The disposer specified in \p Traits template argument is called for each removed item.
         */
         void clear()
index df625a176e5bb41351a5c4568c30ed765e3e7e02..2171c65053555fc760121747a439303939cdc9ee 100644 (file)
@@ -122,10 +122,13 @@ namespace cds { namespace container {
         {}
 
     public:
+    ///@name Forward ordered iterators
+    //@{
         /// Forward iterator
         /**
-            Remember, the iterator <tt>operator -> </tt> and <tt>operator *</tt> returns \ref value_type pointer and reference.
-            To access item key and value use <tt>it->first</tt> and <tt>it->second</tt> respectively.
+            The forward iterator for a split-list has some features:
+            - it has no post-increment operator
+            - it depends on iterator of underlying \p OrderedList
         */
         typedef typename base_class::iterator iterator;
 
@@ -157,6 +160,7 @@ namespace cds { namespace container {
         {
             return base_class::begin();
         }
+
         /// Returns a forward const iterator addressing the first element in a map
         const_iterator cbegin() const
         {
@@ -168,11 +172,13 @@ namespace cds { namespace container {
         {
             return base_class::end();
         }
+
         /// Returns an const iterator that addresses the location succeeding the last element in a map
         const_iterator cend() const
         {
             return base_class::cend();
         }
+    //@}
 
     public:
         /// Inserts new node with key and default value
@@ -190,7 +196,7 @@ namespace cds { namespace container {
         iterator insert( K const& key )
         {
             //TODO: pass arguments by reference (make_pair makes copy)
-            return base_class::insert( std::make_pair( key, mapped_type() ) );
+            return base_class::insert( std::make_pair( key_type( key ), mapped_type() ) );
         }
 
         /// Inserts new node
@@ -208,7 +214,7 @@ namespace cds { namespace container {
         iterator insert( K const& key, V const& val )
         {
             //TODO: pass arguments by reference (make_pair makes copy)
-            return base_class::insert( std::make_pair( key, val ) );
+            return base_class::insert( std::make_pair( key_type( key ), mapped_type( val )));
         }
 
         /// Inserts new node and initialize it by a functor
@@ -256,7 +262,7 @@ namespace cds { namespace container {
         template <typename K, typename... Args>
         iterator emplace( K&& key, Args&&... args )
         {
-            return base_class::emplace( std::forward<K>(key), std::move(mapped_type(std::forward<Args>(args)...)));
+            return base_class::emplace( key_type( std::forward<K>( key )), mapped_type( std::forward<Args>(args)... ));
         }
 
         /// UPdates data by \p key
@@ -272,7 +278,7 @@ namespace cds { namespace container {
         std::pair<iterator, bool> update( K const& key, bool bInsert = true )
         {
             //TODO: pass arguments by reference (make_pair makes copy)
-            return base_class::update( std::make_pair( key, mapped_type() ), bInsert );
+            return base_class::update( std::make_pair( key_type( key ), mapped_type() ), bInsert );
         }
         //@cond
         template <typename K>
index 5bd9a8a01a30bc0cb92d2e15a17e617c0e166a10..64217a906a42ab80c04daf0344e25d5853db0883 100644 (file)
@@ -212,7 +212,17 @@ namespace cds { namespace container {
         {}
 
     public:
-        /// Iterator type
+    ///@name Forward ordered iterators (thread-safe under RCU lock)
+    //@{
+        /// Forward iterator
+        /**
+            The forward iterator has some features:
+            - it has no post-increment operator
+            - it depends on iterator of underlying \p OrderedList
+
+            You may safely use iterators in multi-threaded environment only under RCU lock.
+            Otherwise, a crash is possible if another thread deletes the element the iterator points to.
+        */
         typedef skip_list::details::iterator< typename base_class::iterator >  iterator;
 
         /// Const iterator type
@@ -251,6 +261,7 @@ namespace cds { namespace container {
         {
             return const_iterator( base_class::cend() );
         }
+    //@}
 
     public:
         /// Inserts new node with key and default value
index ca866b41362e04cf709d1fe374b079ae0351d22e..4f89d653fde618f5acee78f18698db320a6cb918 100644 (file)
@@ -199,7 +199,14 @@ namespace cds { namespace container {
         //@endcond
 
     public:
-        /// Iterator type
+    ///@name Forward iterators
+    //@{
+        /// Forward ordered iterator
+        /**
+            The forward iterator for a split-list has some features:
+            - it has no post-increment operator
+            - it depends on iterator of underlying \p OrderedList
+        */
         typedef skip_list::details::iterator< typename base_class::iterator >  iterator;
 
         /// Const iterator type
@@ -212,16 +219,16 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator addressing the first element in a set
-        //@{
         const_iterator begin() const
         {
             return const_iterator( base_class::begin() );
         }
+
+        /// Returns a forward const iterator addressing the first element in a set
         const_iterator cbegin() const
         {
             return const_iterator( base_class::cbegin() );
         }
-        //@}
 
         /// Returns a forward iterator that addresses the location succeeding the last element in a set.
         iterator end()
@@ -230,16 +237,16 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator that addresses the location succeeding the last element in a set.
-        //@{
         const_iterator end() const
         {
             return const_iterator( base_class::end() );
         }
+        /// Returns a forward const iterator that addresses the location succeeding the last element in a set.
         const_iterator cend() const
         {
             return const_iterator( base_class::cend() );
         }
-        //@}
+    //@}
 
     protected:
         //@cond
index 29fbb5eef16d0723bc0da4b40d9977d61dadcd7c..7d3f45eec868b0524870b7547f69d08b470642b5 100644 (file)
@@ -259,7 +259,17 @@ namespace cds { namespace container {
         {}
 
     public:
-        /// Iterator type
+    ///@name Forward ordered iterators (thread-safe under RCU lock)
+    //@{
+        /// Forward iterator
+        /**
+            The forward iterator has some features:
+            - it has no post-increment operator
+            - it depends on iterator of underlying \p OrderedList
+
+            You may safely use iterators in multi-threaded environment only under RCU lock.
+            Otherwise, a crash is possible if another thread deletes the element the iterator points to.
+        */
         typedef skip_list::details::iterator< typename base_class::iterator >  iterator;
 
         /// Const iterator type
@@ -272,16 +282,16 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator addressing the first element in a set
-        //@{
         const_iterator begin() const
         {
             return const_iterator( base_class::begin() );
         }
+
+        /// Returns a forward const iterator addressing the first element in a set
         const_iterator cbegin() const
         {
             return const_iterator( base_class::cbegin() );
         }
-        //@}
 
         /// Returns a forward iterator that addresses the location succeeding the last element in a set.
         iterator end()
@@ -290,16 +300,17 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator that addresses the location succeeding the last element in a set.
-        //@{
         const_iterator end() const
         {
             return const_iterator( base_class::end() );
         }
+
+        /// Returns a forward const iterator that addresses the location succeeding the last element in a set.
         const_iterator cend() const
         {
             return const_iterator( base_class::cend() );
         }
-        //@}
+    //@}
 
     public:
         /// Inserts new node
@@ -621,7 +632,7 @@ namespace cds { namespace container {
         {
             CDS_UNUSED( pred );
             return base_class::find_with( val, cds::details::predicate_wrapper< node_type, Less, typename maker::value_accessor >(),
-                                          [&f]( node_type& node, Q& v ) { f( node.m_Value, v ); } );
+                                          [&f]( node_type& node, Q const& v ) { f( node.m_Value, v ); } );
         }
         //@endcond
 
index b323be270546c85719922cb793727ed450be9616..56753b9ad53f61632d1ee102c981302f7c927997 100644 (file)
@@ -155,7 +155,7 @@ namespace cds { namespace container {
         typedef GC     gc;          ///< Garbage collector
         typedef Key    key_type;    ///< key type
         typedef Value  mapped_type; ///< type of value to be stored in the map
-        typedef Traits options;     ///< Map traits
+        typedef Traits traits;      ///< Map traits
 
         typedef std::pair<key_type const, mapped_type>  value_type  ;   ///< key-value pair type
         typedef typename base_class::ordered_list       ordered_list;   ///< Underlying ordered list class
@@ -165,6 +165,9 @@ namespace cds { namespace container {
         typedef typename base_class::item_counter   item_counter; ///< Item counter type
         typedef typename base_class::stat           stat;         ///< Internal statistics
 
+        /// Count of hazard pointer required
+        static CDS_CONSTEXPR const size_t c_nHazardPtrCount = base_class::c_nHazardPtrCount;
+
     protected:
         //@cond
         typedef typename base_class::maker::traits::key_accessor key_accessor;
@@ -176,14 +179,51 @@ namespace cds { namespace container {
         typedef typename gc::template guarded_ptr< node_type, value_type, details::guarded_ptr_cast_set<node_type, value_type> > guarded_ptr;
 
     public:
-        /// Forward iterator (see \p SplitListSet::iterator)
+    ///@name Forward iterators (only for debugging purpose)
+    //@{
+        /// Forward iterator
         /**
-            Remember, the iterator <tt>operator -> </tt> and <tt>operator *</tt> returns \ref value_type pointer and reference.
-            To access item key and value use <tt>it->first</tt> and <tt>it->second</tt> respectively.
+            The forward iterator for a split-list has the following features:
+            - it has no post-increment operator
+            - it depends on underlying ordered list iterator
+            - The iterator object cannot be moved across thread boundary because it contains GC's guard that is thread-private GC data.
+            - Iterator ensures thread-safety even if you delete the item that iterator points to. However, in case of concurrent
+              deleting operations it is no guarantee that you iterate all item in the split-list.
+              Moreover, a crash is possible when you try to iterate the next element that has been deleted by concurrent thread.
+
+              @warning Use this iterator on the concurrent container for debugging purpose only.
+
+              The iterator interface:
+              \code
+              class iterator {
+              public:
+                  // Default constructor
+                  iterator();
+
+                  // Copy construtor
+                  iterator( iterator const& src );
+
+                  // Dereference operator
+                  value_type * operator ->() const;
+
+                  // Dereference operator
+                  value_type& operator *() const;
+
+                  // Preincrement operator
+                  iterator& operator ++();
+
+                  // Assignment operator
+                  iterator& operator = (iterator const& src);
+
+                  // Equality operators
+                  bool operator ==(iterator const& i ) const;
+                  bool operator !=(iterator const& i ) const;
+              };
+              \endcode
         */
         typedef typename base_class::iterator iterator;
 
-        /// Const forward iterator (see SplitListSet::const_iterator)
+        /// Const forward iterator
         typedef typename base_class::const_iterator const_iterator;
 
         /// Returns a forward iterator addressing the first element in a map
@@ -207,28 +247,29 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator addressing the first element in a map
-        //@{
         const_iterator begin() const
         {
             return base_class::begin();
         }
+
+        /// Returns a forward const iterator addressing the first element in a map
         const_iterator cbegin() const
         {
             return base_class::cbegin();
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a map
-        //@{
         const_iterator end() const
         {
             return base_class::end();
         }
+
+        /// Returns an const iterator that addresses the location succeeding the last element in a map
         const_iterator cend() const
         {
             return base_class::cend();
         }
-        //@}
+    //@}
 
     public:
         /// Initializes split-ordered map of default capacity
@@ -264,8 +305,7 @@ namespace cds { namespace container {
         template <typename K>
         bool insert( K const& key )
         {
-            //TODO: pass arguments by reference (make_pair makes copy)
-            return base_class::insert( std::make_pair( key, mapped_type()));
+            return base_class::emplace( key_type( key ), mapped_type() );
         }
 
         /// Inserts new node
@@ -282,8 +322,7 @@ namespace cds { namespace container {
         template <typename K, typename V>
         bool insert( K const& key, V const& val )
         {
-            //TODO: pass arguments by reference (make_pair makes copy)
-            return base_class::insert( std::make_pair(key, val));
+            return base_class::emplace( key_type( key ), mapped_type( val ));
         }
 
         /// Inserts new node and initialize it by a functor
@@ -321,7 +360,7 @@ namespace cds { namespace container {
         bool insert_with( K const& key, Func func )
         {
             //TODO: pass arguments by reference (make_pair makes copy)
-            return base_class::insert( std::make_pair( key, mapped_type()), func );
+            return base_class::insert( std::make_pair( key_type( key ), mapped_type()), func );
         }
 
         /// For key \p key inserts data of type \p mapped_type created from \p args
@@ -333,7 +372,7 @@ namespace cds { namespace container {
         template <typename K, typename... Args>
         bool emplace( K&& key, Args&&... args )
         {
-            return base_class::emplace( std::forward<K>(key), std::move(mapped_type(std::forward<Args>(args)...)));
+            return base_class::emplace( key_type( std::forward<K>(key)), mapped_type( std::forward<Args>(args)...));
         }
 
         /// Updates the node
@@ -366,8 +405,10 @@ namespace cds { namespace container {
         std::pair<bool, bool> update( K const& key, Func func, bool bAllowInsert = true )
         {
             //TODO: pass arguments by reference (make_pair makes copy)
-            return base_class::update( std::make_pair( key, mapped_type()),
-                [&func](bool bNew, value_type& item, value_type const& /*val*/) {
+            typedef decltype( std::make_pair( key_type( key ), mapped_type() )) arg_pair_type;
+
+            return base_class::update( std::make_pair( key_type( key ), mapped_type()),
+                [&func]( bool bNew, value_type& item, arg_pair_type const& /*val*/ ) {
                     func( bNew, item );
                 },
                 bAllowInsert );
index 8ed0780ceb1a42e1fa435b4785bb2c19bff0c790..e7c871830a4b4ee67a7727915d4c00c527891939 100644 (file)
@@ -92,14 +92,45 @@ namespace cds { namespace container {
         //@endcond
 
     public:
-        /// Forward iterator (see \p SplitListSet::iterator)
+    ///@name Forward iterators
+    //@{
+        /// Forward iterator
         /**
-            Remember, the iterator <tt>operator -> </tt> and <tt>operator *</tt> returns \ref value_type pointer and reference.
-            To access item key and value use <tt>it->first</tt> and <tt>it->second</tt> respectively.
+            The forward iterator for split-list is based on \p OrderedList forward iterator and has some features:
+            - it has no post-increment operator
+            - it iterates items in unordered fashion
+
+            The iterator interface:
+            \code
+            class iterator {
+            public:
+                // Default constructor
+                iterator();
+
+                // Copy construtor
+                iterator( iterator const& src );
+
+                // Dereference operator
+                value_type * operator ->() const;
+
+                // Dereference operator
+                value_type& operator *() const;
+
+                // Preincrement operator
+                iterator& operator ++();
+
+                // Assignment operator
+                iterator& operator = (iterator const& src);
+
+                // Equality operators
+                bool operator ==(iterator const& i ) const;
+                bool operator !=(iterator const& i ) const;
+            };
+            \endcode
         */
         typedef typename base_class::iterator iterator;
 
-        /// Const forward iterator (see SplitListSet::const_iterator)
+        /// Const forward iterator
         typedef typename base_class::const_iterator const_iterator;
 
         /// Returns a forward iterator addressing the first element in a map
@@ -123,28 +154,29 @@ namespace cds { namespace container {
         }
 
         /// Returns a forward const iterator addressing the first element in a map
-        //@{
         const_iterator begin() const
         {
             return base_class::begin();
         }
+
+        /// Returns a forward const iterator addressing the first element in a map
         const_iterator cbegin() const
         {
             return base_class::cbegin();
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a map
-        //@{
         const_iterator end() const
         {
             return base_class::end();
         }
+
+        /// Returns an const iterator that addresses the location succeeding the last element in a map
         const_iterator cend() const
         {
             return base_class::cend();
         }
-        //@}
+    //@}
 
     public:
         /// Initialize split-ordered map of default capacity
@@ -181,7 +213,7 @@ namespace cds { namespace container {
         iterator insert( K const& key )
         {
             //TODO: pass arguments by reference (make_pair makes copy)
-            return base_class::insert( std::make_pair( key, mapped_type() ) );
+            return base_class::emplace( key_type( key ), mapped_type() );
         }
 
         /// Inserts new node
@@ -198,8 +230,7 @@ namespace cds { namespace container {
         template <typename K, typename V>
         iterator insert( K const& key, V const& val )
         {
-            //TODO: pass arguments by reference (make_pair makes copy)
-            return base_class::insert( std::make_pair( key, val ) );
+            return base_class::emplace( key_type( key ), mapped_type( val ));
         }
 
         /// Inserts new node and initialize it by a functor
@@ -248,7 +279,7 @@ namespace cds { namespace container {
         template <typename K, typename... Args>
         iterator emplace( K&& key, Args&&... args )
         {
-            return base_class::emplace( std::forward<K>(key), std::move(mapped_type(std::forward<Args>(args)...)));
+            return base_class::emplace( key_type( std::forward<K>( key )), mapped_type( std::forward<Args>( args )...));
         }
 
         /// Updates the item
@@ -266,7 +297,7 @@ namespace cds { namespace container {
         std::pair<iterator, bool> update( K const& key, bool bAllowInsert = true )
         {
             //TODO: pass arguments by reference (make_pair makes copy)
-            return base_class::update( std::make_pair( key, mapped_type() ), bAllowInsert );
+            return base_class::update( std::make_pair( key_type( key ), mapped_type() ), bAllowInsert );
         }
         //@cond
         template <typename K>
@@ -317,6 +348,13 @@ namespace cds { namespace container {
         }
         //@endcond
 
+
+        /// Clears the set (not atomic, for debugging purposes only)
+        void clear()
+        {
+            base_class::clear();
+        }
+
         /// Checks if the map is empty
         /**
             Emptiness is checked by item counting: if item count is zero then the map is empty.
index 66ee073dd2bf5df355029c2f2c5881b9777070fc..2e5f92280e9b5095a986dc2309ff4477361f1f9f 100644 (file)
@@ -299,8 +299,7 @@ namespace cds { namespace container {
         template <typename K>
         bool insert( K const& key )
         {
-            //TODO: pass arguments by reference (make_pair makes copy)
-            return base_class::insert( std::make_pair( key, mapped_type() ) );
+            return base_class::emplace( key_type( key ), mapped_type() );
         }
 
         /// Inserts new node
@@ -320,7 +319,7 @@ namespace cds { namespace container {
         bool insert( K const& key, V const& val )
         {
             //TODO: pass arguments by reference (make_pair makes copy)
-            return base_class::insert( std::make_pair(key, val) );
+            return base_class::emplace( key_type( key ), mapped_type( val ));
         }
 
         /// Inserts new node and initialize it by a functor
@@ -358,7 +357,7 @@ namespace cds { namespace container {
         bool insert_with( K const& key, Func func )
         {
             //TODO: pass arguments by reference (make_pair makes copy)
-            return base_class::insert( std::make_pair( key, mapped_type() ), func );
+            return base_class::insert( std::make_pair( key_type( key ), mapped_type() ), func );
         }
 
         /// For key \p key inserts data of type \p mapped_type created in-place from \p args
@@ -372,7 +371,7 @@ namespace cds { namespace container {
         template <typename K, typename... Args>
         bool emplace( K&& key, Args&&... args )
         {
-            return base_class::emplace( std::forward<K>(key), std::move(mapped_type(std::forward<Args>(args)...)));
+            return base_class::emplace( key_type( std::forward<K>( key )), mapped_type( std::forward<Args>(args)... ));
         }
 
         /// Updates data by \p key
@@ -410,8 +409,10 @@ namespace cds { namespace container {
         std::pair<bool, bool> update( K const& key, Func func, bool bAllowInsert = true )
         {
             //TODO: pass arguments by reference (make_pair makes copy)
-            return base_class::update( std::make_pair( key, mapped_type() ),
-                [&func](bool bNew, value_type& item, value_type const& /*val*/) {
+            typedef decltype( std::make_pair( key_type( key ), mapped_type() )) arg_pair_type;
+
+            return base_class::update( std::make_pair( key_type( key ), mapped_type() ),
+                [&func]( bool bNew, value_type& item, arg_pair_type const& /*val*/ ) {
                     func( bNew, item );
                 },
                 bAllowInsert );
index 5ef7d955cc03df0f4d37590cbdbdc7ce507e3e48..ee62dbda46d60157c2806eb48801778d3fc08733 100644 (file)
@@ -180,6 +180,9 @@ namespace cds { namespace container {
         typedef typename base_class::item_counter item_counter; ///< Item counter type
         typedef typename base_class::stat         stat; ///< Internal statistics
 
+        /// Count of hazard pointer required
+        static CDS_CONSTEXPR const size_t c_nHazardPtrCount = base_class::c_nHazardPtrCount;
+
     protected:
         //@cond
         typedef typename maker::cxx_node_allocator    cxx_node_allocator;
@@ -246,26 +249,13 @@ namespace cds { namespace container {
         //@endcond
 
     protected:
-        /// Forward iterator
-        /**
-            \p IsConst - constness boolean flag
-
-            The forward iterator for a split-list has the following features:
-            - it has no post-increment operator
-            - it depends on underlying ordered list iterator
-            - The iterator object cannot be moved across thread boundary since it contains GC's guard that is thread-private GC data.
-            - Iterator ensures thread-safety even if you delete the item that iterator points to. However, in case of concurrent
-              deleting operations it is no guarantee that you iterate all item in the split-list.
-
-            Therefore, the use of iterators in concurrent environment is not good idea. Use it for debug purpose only.
-        */
+        //@cond
         template <bool IsConst>
         class iterator_type: protected base_class::template iterator_type<IsConst>
         {
-            //@cond
             typedef typename base_class::template iterator_type<IsConst> iterator_base_class;
             friend class SplitListSet;
-            //@endcond
+
         public:
             /// Value pointer type (const for const iterator)
             typedef typename cds::details::make_const_type<value_type, IsConst>::pointer   value_ptr;
@@ -283,11 +273,9 @@ namespace cds { namespace container {
             {}
 
         protected:
-            //@cond
             explicit iterator_type( iterator_base_class const& src )
                 : iterator_base_class( src )
             {}
-            //@endcond
 
         public:
             /// Dereference operator
@@ -330,6 +318,7 @@ namespace cds { namespace container {
                 return iterator_base_class::operator!=(i);
             }
         };
+        //@endcond
 
     public:
         /// Initializes split-ordered list of default capacity
@@ -351,7 +340,48 @@ namespace cds { namespace container {
         {}
 
     public:
+    ///@name Forward iterators (only for debugging purpose)
+    //@{
         /// Forward iterator
+        /**
+            The forward iterator for a split-list has the following features:
+            - it has no post-increment operator
+            - it depends on underlying ordered list iterator
+            - The iterator object cannot be moved across thread boundary because it contains GC's guard that is thread-private GC data.
+            - Iterator ensures thread-safety even if you delete the item that iterator points to. However, in case of concurrent
+              deleting operations it is no guarantee that you iterate all item in the split-list.
+              Moreover, a crash is possible when you try to iterate the next element that has been deleted by concurrent thread.
+
+              @warning Use this iterator on the concurrent container for debugging purpose only.
+
+              The iterator interface:
+              \code
+              class iterator {
+              public:
+                  // Default constructor
+                  iterator();
+
+                  // Copy construtor
+                  iterator( iterator const& src );
+
+                  // Dereference operator
+                  value_type * operator ->() const;
+
+                  // Dereference operator
+                  value_type& operator *() const;
+
+                  // Preincrement operator
+                  iterator& operator ++();
+
+                  // Assignment operator
+                  iterator& operator = (iterator const& src);
+
+                  // Equality operators
+                  bool operator ==(iterator const& i ) const;
+                  bool operator !=(iterator const& i ) const;
+              };
+              \endcode
+        */
         typedef iterator_type<false>  iterator;
 
         /// Const forward iterator
@@ -398,6 +428,7 @@ namespace cds { namespace container {
         {
             return const_iterator( base_class::cend());
         }
+    //@}
 
     public:
         /// Inserts new node
index 6a7f7749af2b473815939ae2e87475399fa73911..5dc0b9d9e0a208e6e3f96394c2082f4c42152405 100644 (file)
@@ -137,21 +137,13 @@ namespace cds { namespace container {
         {}
 
     protected:
-        /// Forward iterator
-        /**
-            \p IsConst - constness boolean flag
-
-            The forward iterator has the following features:
-            - it has no post-increment operator
-            - it depends on underlying ordered list iterator
-        */
+        //@cond
         template <bool IsConst>
         class iterator_type: protected base_class::template iterator_type<IsConst>
         {
-            //@cond
             typedef typename base_class::template iterator_type<IsConst> iterator_base_class;
             friend class SplitListSet;
-            //@endcond
+
         public:
             /// Value pointer type (const for const iterator)
             typedef typename cds::details::make_const_type<value_type, IsConst>::pointer   value_ptr;
@@ -169,11 +161,9 @@ namespace cds { namespace container {
             {}
 
         protected:
-            //@cond
             explicit iterator_type( iterator_base_class const& src )
                 : iterator_base_class( src )
             {}
-            //@endcond
 
         public:
             /// Dereference operator
@@ -216,9 +206,45 @@ namespace cds { namespace container {
                 return iterator_base_class::operator!=(i);
             }
         };
+        //@endcond
 
     public:
+    ///@name Forward iterators
+    //@{
         /// Forward iterator
+        /**
+            The forward iterator for split-list is based on \p OrderedList forward iterator and has some features:
+            - it has no post-increment operator
+            - it iterates items in unordered fashion
+
+            The iterator interface:
+            \code
+            class iterator {
+            public:
+                // Default constructor
+                iterator();
+
+                // Copy construtor
+                iterator( iterator const& src );
+
+                // Dereference operator
+                value_type * operator ->() const;
+
+                // Dereference operator
+                value_type& operator *() const;
+
+                // Preincrement operator
+                iterator& operator ++();
+
+                // Assignment operator
+                iterator& operator = (iterator const& src);
+
+                // Equality operators
+                bool operator ==(iterator const& i ) const;
+                bool operator !=(iterator const& i ) const;
+            };
+            \endcode
+        */
         typedef iterator_type<false>  iterator;
 
         /// Const forward iterator
@@ -265,6 +291,7 @@ namespace cds { namespace container {
         {
             return const_iterator( base_class::cend() );
         }
+    //@}
 
     protected:
         //@cond
@@ -391,6 +418,12 @@ namespace cds { namespace container {
         }
         //@endcond
 
+        /// Clears the set (not atomic, for debugging purposes only)
+        void clear()
+        {
+            base_class::clear();
+        }
+
         /// Checks if the set is empty
         /**
             Emptiness is checked by item counting: if item count is zero then the set is empty.
index cec9f0b23893604096bf346ec485e046441b463a..819c4e5bc09b16c4efc95349cf5af272aae0aac7 100644 (file)
@@ -366,26 +366,13 @@ namespace cds { namespace container {
         //@endcond
 
     protected:
-        /// Forward iterator
-        /**
-            \p IsConst - constness boolean flag
-
-            The forward iterator for a split-list has the following features:
-            - it has no post-increment operator
-            - it depends on underlying ordered list iterator
-            - it is safe to iterate only inside RCU critical section
-            - deleting an item pointed by the iterator can cause to deadlock
-
-            Therefore, the use of iterators in concurrent environment is not good idea.
-            Use it for debug purpose only.
-        */
+        //@cond
         template <bool IsConst>
         class iterator_type: protected base_class::template iterator_type<IsConst>
         {
-            //@cond
             typedef typename base_class::template iterator_type<IsConst> iterator_base_class;
             friend class SplitListSet;
-            //@endcond
+
         public:
             /// Value pointer type (const for const iterator)
             typedef typename cds::details::make_const_type<value_type, IsConst>::pointer   value_ptr;
@@ -403,11 +390,9 @@ namespace cds { namespace container {
             {}
 
         protected:
-            //@cond
             explicit iterator_type( iterator_base_class const& src )
                 : iterator_base_class( src )
             {}
-            //@endcond
 
         public:
             /// Dereference operator
@@ -450,6 +435,7 @@ namespace cds { namespace container {
                 return iterator_base_class::operator!=(i);
             }
         };
+        //@endcond
 
     public:
         /// Initializes split-ordered list of default capacity
@@ -471,8 +457,49 @@ namespace cds { namespace container {
         {}
 
     public:
-        typedef iterator_type<false>  iterator        ; ///< Forward iterator
-        typedef iterator_type<true>   const_iterator  ; ///< Forward const iterator
+    ///@name Forward iterators (thread-safe under RCU lock)
+    //@{
+        /// Forward iterator
+        /**
+            The forward iterator for Michael's set is based on \p OrderedList forward iterator and has some features:
+            - it has no post-increment operator
+            - it iterates items in unordered fashion
+
+            You may safely use iterators in multi-threaded environment only under RCU lock.
+            Otherwise, a crash is possible if another thread deletes the element the iterator points to.
+
+            The iterator interface:
+            \code
+            class iterator {
+            public:
+                // Default constructor
+                iterator();
+
+                // Copy construtor
+                iterator( iterator const& src );
+
+                // Dereference operator
+                value_type * operator ->() const;
+
+                // Dereference operator
+                value_type& operator *() const;
+
+                // Preincrement operator
+                iterator& operator ++();
+
+                // Assignment operator
+                iterator& operator = (iterator const& src);
+
+                // Equality operators
+                bool operator ==(iterator const& i ) const;
+                bool operator !=(iterator const& i ) const;
+            };
+            \endcode
+        */
+        typedef iterator_type<false>  iterator;
+
+        /// Forward const iterator
+        typedef iterator_type<true>   const_iterator;
 
         /// Returns a forward iterator addressing the first element in a set
         /**
@@ -515,6 +542,7 @@ namespace cds { namespace container {
         {
             return const_iterator( base_class::cend() );
         }
+    //@}
 
     public:
         /// Inserts new node
@@ -577,7 +605,7 @@ namespace cds { namespace container {
             return insert_node( alloc_node( std::forward<Args>(args)...));
         }
 
-        /// Ensures that the \p val exists in the set
+        /// Updates an element with given \p val
         /**
             The operation performs inserting or changing data with lock-free manner.
 
index 22c4808eaecca6b7a409324bcad3a41f7828bb50..40b32ae34d9edbd5bfdb6b57fa6fbc146c2afa42 100644 (file)
@@ -241,7 +241,7 @@ namespace cds { namespace container {
                         #include <cds/container/striped_map/boost_map.h>
                         #include <cds/container/striped_hash_map.h>
                         typedef cds::container::StripedMap<
-                            boost::container::map< Key, T, std::pair< const Key, T> >
+                            boost::container::map< Key, T, std::less<Key> >
                         > striped_map;
                     \endcode
                     </td>
@@ -256,7 +256,7 @@ namespace cds { namespace container {
                         #include <cds/container/striped_hash_map.h>
                         typedef cds::container::StripedMap<
                             boost::container::flat_map< Key, T,
-                                std::less< std::pair< const Key, T> >
+                                std::less< std::less<Key> >
                             >
                         > striped_map;
                     \endcode
@@ -286,7 +286,7 @@ namespace cds { namespace container {
             There are two possibility:
             - either your \p MyBestContainer class has native support of bucket's interface;
                 in this case, you can use default <tt>striped_set::adapt</tt> metafunction;
-            - or your \p MyBestContainer class does not support bucket's interface, which means, that you should develop a specialization
+            - or your \p MyBestContainer class does not support bucket's interface; it means you should develop a specialization
                 <tt>cds::container::striped_set::adapt<MyBestContainer> </tt> metafunction providing necessary interface.
 
             The <tt>striped_set::adapt< Container, Options... ></tt> metafunction has two template argument:
@@ -295,7 +295,7 @@ namespace cds { namespace container {
                 any option from \p Options for its internal use. For example, a \p compare option can be passed to \p adapt
                 metafunction via \p Options argument of \p %StripedMap declaration.
 
-            See striped_set::adapt metafunction for the description of interface that the bucket container must provide
+            See \p striped_set::adapt metafunction for the description of interface that the bucket container must provide
             to be \p %StripedMap compatible.
 
         <b>Copy policy</b>
@@ -711,6 +711,7 @@ template <class Container, typename... Options>
         {
             return update( key, func, true );
         }
+        //@endcond
 
         /// Delete \p key from the map
         /** \anchor cds_nonintrusive_StripedMap_erase
index 6921db987a8324ab5e33c9cf17f6cd9d416d73bd..72bf0641b92cf89fb3cdeae38c2ba8c8e559cecc 100644 (file)
 #include <cds/container/striped_set/adapter.h>
 #include <boost/container/flat_map.hpp>
 
-//#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION >= 1700
-//#   error "boost::container::flat_map is not compatible with MS VC++ 11"
-//#endif
-
 
 //@cond
 namespace cds { namespace container {
index 94125ed73d7030f03003d978f8ab0504e5f18e2a..f39e4a88ed0c709b75aa61acf398fcf5b43cffae 100644 (file)
@@ -167,7 +167,7 @@ namespace cds { namespace intrusive { namespace striped_set {
                 iterator it = std::lower_bound( m_List.begin(), m_List.end(), key, find_predicate() );
                 if ( it == m_List.end() || key_comparator()( key, it->first ) != 0 ) {
                     //value_type newItem( key );
-                    it = m_List.insert( it, value_type( key, mapped_type()) );
+                    it = m_List.insert( it, value_type( key_type( key ), mapped_type()) );
                     f( *it );
 
                     return true;
@@ -180,9 +180,10 @@ namespace cds { namespace intrusive { namespace striped_set {
             template <typename K, typename... Args>
             bool emplace( K&& key, Args&&... args )
             {
-                iterator it = std::lower_bound( m_List.begin(), m_List.end(), key, find_predicate() );
-                if ( it == m_List.end() || key_comparator()( key, it->first ) != 0 ) {
-                    m_List.emplace( it, std::forward<K>(key), std::move( mapped_type( std::forward<Args>(args)... )) );
+                value_type val( key_type( std::forward<K>( key )), mapped_type( std::forward<Args>( args )... ));
+                iterator it = std::lower_bound( m_List.begin(), m_List.end(), val.first, find_predicate() );
+                if ( it == m_List.end() || key_comparator()( val.first, it->first ) != 0 ) {
+                    m_List.emplace( it, std::move( val ));
                     return true;
                 }
                 return false;
@@ -197,8 +198,7 @@ namespace cds { namespace intrusive { namespace striped_set {
                     if ( !bAllowInsert )
                         return std::make_pair( false, false );
 
-                    value_type newItem( key, mapped_type() );
-                    it = m_List.insert( it, newItem );
+                    it = m_List.insert( it, value_type( key_type( key ), mapped_type() ));
                     func( true, *it );
 
                     return std::make_pair( true, true );
index c154b951bdaee966932b1e7a27fd413ac8b71204..a5e7b00da6a3b48279312018a271bf76f236bcfe 100644 (file)
@@ -178,8 +178,7 @@ namespace cds { namespace intrusive { namespace striped_set {
             {
                 std::pair< iterator, bool > pos = find_prev_item( key );
                 if ( !pos.second ) {
-                    value_type newItem( key, mapped_type() );
-                    pos.first = m_List.insert_after( pos.first, newItem );
+                    pos.first = m_List.insert_after( pos.first, value_type( key_type( key ), mapped_type() ));
                     f( *pos.first );
                     return true;
                 }
@@ -193,7 +192,7 @@ namespace cds { namespace intrusive { namespace striped_set {
             {
                 std::pair< iterator, bool > pos = find_prev_item( key );
                 if ( !pos.second ) {
-                    m_List.emplace_after( pos.first, std::forward<K>(key), std::move( mapped_type( std::forward<Args>(args)... )));
+                    m_List.emplace_after( pos.first, key_type( std::forward<K>( key )), mapped_type( std::forward<Args>( args )... ));
                     return true;
                 }
                 return false;
@@ -208,8 +207,7 @@ namespace cds { namespace intrusive { namespace striped_set {
                     if ( !bAllowInsert )
                         return std::make_pair( false, false );
 
-                    value_type newItem( key, mapped_type() );
-                    pos.first = m_List.insert_after( pos.first, newItem );
+                    pos.first = m_List.insert_after( pos.first, value_type( key_type( key ), mapped_type() ));
                     func( true, *pos.first );
                     return std::make_pair( true, true );
                 }
index da58820400767ad4522142e478e96ec2b5f6e419..4cfe659a51a36e182b9c3a45e8cf0c20e0d05006 100644 (file)
@@ -132,7 +132,7 @@ namespace cds { namespace intrusive { namespace striped_set {
             template <typename Q, typename Func>
             bool insert( const Q& key, Func f )
             {
-                std::pair<iterator, bool> res = m_Map.insert( value_type( key, mapped_type() ));
+                std::pair<iterator, bool> res = m_Map.insert( value_type( key_type( key ), mapped_type() ));
                 if ( res.second )
                     f( const_cast<value_type&>(*res.first) );
                 return res.second;
@@ -141,7 +141,7 @@ namespace cds { namespace intrusive { namespace striped_set {
             template <typename Q, typename... Args>
             bool emplace( Q&& key, Args&&... args )
             {
-                std::pair<iterator, bool> res = m_Map.emplace( std::forward<Q>(key), std::move( mapped_type(std::forward<Args>(args)...)) );
+                std::pair<iterator, bool> res = m_Map.emplace( key_type( std::forward<Q>( key )), mapped_type( std::forward<Args>( args )...));
                 return res.second;
             }
 
@@ -149,12 +149,12 @@ namespace cds { namespace intrusive { namespace striped_set {
             std::pair<bool, bool> update( const Q& key, Func func, bool bAllowInsert )
             {
                 if ( bAllowInsert ) {
-                    std::pair<iterator, bool> res = m_Map.insert( value_type( key, mapped_type() ) );
+                    std::pair<iterator, bool> res = m_Map.insert( value_type( key_type( key ), mapped_type() ) );
                     func( res.second, const_cast<value_type&>(*res.first));
                     return std::make_pair( true, res.second );
                 }
                 else {
-                    auto it = m_Map.find(key_type( key ));
+                    auto it = m_Map.find( key_type( key ));
                     if ( it == end() )
                         return std::make_pair( false, false );
                     func( false, *it );
@@ -165,7 +165,7 @@ namespace cds { namespace intrusive { namespace striped_set {
             template <typename Q, typename Func>
             bool erase( const Q& key, Func f )
             {
-                iterator it = m_Map.find( key_type(key) );
+                iterator it = m_Map.find( key_type( key ));
                 if ( it == m_Map.end() )
                     return false;
                 f( const_cast<value_type&>(*it) );
@@ -174,12 +174,12 @@ namespace cds { namespace intrusive { namespace striped_set {
             }
 
             template <typename Q, typename Func>
-            bool find( Q& val, Func f )
+            bool find( Q& key, Func f )
             {
-                iterator it = m_Map.find( key_type(val) );
+                iterator it = m_Map.find( key_type( key ));
                 if ( it == m_Map.end() )
                     return false;
-                f( const_cast<value_type&>(*it), val );
+                f( const_cast<value_type&>(*it), key );
                 return true;
             }
 
index b4368383d6d3a71b88fafcbb29516d98da707f5e..cc19f06d0d8ef0402e8be4ff33499935bddef39f 100644 (file)
@@ -177,8 +177,7 @@ namespace cds { namespace intrusive { namespace striped_set {
             {
                 iterator it = std::lower_bound( m_List.begin(), m_List.end(), key, find_predicate() );
                 if ( it == m_List.end() || key_comparator()( key, it->first ) != 0 ) {
-                    //value_type newItem( key );
-                    it = m_List.insert( it, value_type( key, mapped_type()) );
+                    it = m_List.insert( it, value_type( key_type( key ), mapped_type()) );
                     f( *it );
 
 #           if !defined(CDS_STD_LIST_SIZE_CXX11_CONFORM)
@@ -194,10 +193,10 @@ namespace cds { namespace intrusive { namespace striped_set {
             template <typename K, typename... Args>
             bool emplace( K&& key, Args&&... args )
             {
-                iterator it = std::lower_bound( m_List.begin(), m_List.end(), key, find_predicate() );
-                if ( it == m_List.end() || key_comparator()( key, it->first ) != 0 ) {
-                    //value_type newItem( key );
-                    it = m_List.emplace( it, value_type( std::forward<K>(key), std::move( mapped_type( std::forward<Args>(args)...) )) );
+                value_type val( key_type( std::forward<K>( key )), mapped_type( std::forward<Args>( args )... ));
+                iterator it = std::lower_bound( m_List.begin(), m_List.end(), val.first, find_predicate() );
+                if ( it == m_List.end() || key_comparator()( val.first, it->first ) != 0 ) {
+                    it = m_List.emplace( it, std::move( val ));
 
 #           if !defined(CDS_STD_LIST_SIZE_CXX11_CONFORM)
                     ++m_nSize;
@@ -216,8 +215,7 @@ namespace cds { namespace intrusive { namespace striped_set {
                     if ( !bAllowInsert )
                         return std::make_pair( false, false );
 
-                    value_type newItem( key, mapped_type() );
-                    it = m_List.insert( it, newItem );
+                    it = m_List.insert( it, value_type( key_type( key ), mapped_type() ));
                     func( true, *it );
 #           if !defined(CDS_STD_LIST_SIZE_CXX11_CONFORM)
                     ++m_nSize;
index 3c0b37d9321ff8d774581028b9bc086e0d853829..76da98bb7a619fed93123465ed058ee328c09f0e 100644 (file)
@@ -132,7 +132,7 @@ namespace cds { namespace intrusive { namespace striped_set {
             template <typename Q, typename Func>
             bool insert( const Q& key, Func f )
             {
-                std::pair<iterator, bool> res = m_Map.insert( value_type( key, mapped_type() ) );
+                std::pair<iterator, bool> res = m_Map.insert( value_type( key_type( key ), mapped_type() ) );
                 if ( res.second )
                     f( *res.first );
                 return res.second;
@@ -141,7 +141,7 @@ namespace cds { namespace intrusive { namespace striped_set {
             template <typename Q, typename... Args>
             bool emplace( Q&& key, Args&&... args )
             {
-                std::pair<iterator, bool> res = m_Map.emplace( std::forward<Q>(key), std::move(mapped_type( std::forward<Args>(args)...)));
+                std::pair<iterator, bool> res = m_Map.emplace( key_type( std::forward<Q>( key )), mapped_type( std::forward<Args>( args )...));
                 return res.second;
             }
 
@@ -149,12 +149,12 @@ namespace cds { namespace intrusive { namespace striped_set {
             std::pair<bool, bool> update( const Q& key, Func func, bool bAllowInsert )
             {
                 if ( bAllowInsert ) {
-                    std::pair<iterator, bool> res = m_Map.insert( value_type( key, mapped_type() ));
+                    std::pair<iterator, bool> res = m_Map.insert( value_type( key_type( key ), mapped_type() ));
                     func( res.second, *res.first );
                     return std::make_pair( true, res.second );
                 }
                 else {
-                    auto it = m_Map.find(key_type( key ));
+                    auto it = m_Map.find( key_type( key ));
                     if ( it == end() )
                         return std::make_pair( false, false );
                     func( false, *it );
@@ -165,7 +165,7 @@ namespace cds { namespace intrusive { namespace striped_set {
             template <typename Q, typename Func>
             bool erase( const Q& key, Func f )
             {
-                iterator it = m_Map.find( key_type(key) );
+                iterator it = m_Map.find( key_type( key ));
                 if ( it == m_Map.end() )
                     return false;
                 f( *it );
@@ -174,12 +174,12 @@ namespace cds { namespace intrusive { namespace striped_set {
             }
 
             template <typename Q, typename Func>
-            bool find( Q& val, Func f )
+            bool find( Q& key, Func f )
             {
-                iterator it = m_Map.find( key_type(val) );
+                iterator it = m_Map.find( key_type( key ));
                 if ( it == m_Map.end() )
                     return false;
-                f( *it, val );
+                f( *it, key );
                 return true;
             }
 
index c859da6d8be46d615578997b39fd2c995e12bfd8..e4f4ec78e938fa95d7860df1b58f4d7c6dbc6f65 100644 (file)
@@ -624,13 +624,14 @@ namespace cds { namespace container {
         {
             bool bOk;
             bool bResize;
-            size_t nHash = base_class::hashing( value_type( std::forward<Args>(args)...));
+            value_type val( std::forward<Args>( args )... );
+            size_t nHash = base_class::hashing( val );
             bucket_type * pBucket;
             {
                 scoped_cell_lock sl( base_class::m_MutexPolicy, nHash );
                 pBucket = base_class::bucket( nHash );
 
-                bOk = pBucket->emplace( std::forward<Args>(args)...);
+                bOk = pBucket->emplace( std::move( val ));
                 bResize = bOk && base_class::m_ResizingPolicy( ++base_class::m_ItemCounter, *this, *pBucket );
             }
 
@@ -667,7 +668,7 @@ namespace cds { namespace container {
         std::pair<bool, bool> update( Q const& val, Func func, bool bAllowInsert = true )
         {
             std::pair<bool, bool> result;
-            bool bResize;
+            bool bResize = false;
             size_t nHash = base_class::hashing( val );
             bucket_type * pBucket;
             {
@@ -675,7 +676,8 @@ namespace cds { namespace container {
                 pBucket = base_class::bucket( nHash );
 
                 result = pBucket->update( val, func, bAllowInsert );
-                bResize = result.first && result.second && base_class::m_ResizingPolicy( ++base_class::m_ItemCounter, *this, *pBucket );
+                if ( result.first && result.second )
+                    bResize = base_class::m_ResizingPolicy( ++base_class::m_ItemCounter, *this, *pBucket );
             }
 
             if ( bResize )
index f6738022cfe0eaf151ecfdc57963a53679988a4a..3f0df6428069bb7f251eb6b67225992fa1cdecd1 100644 (file)
@@ -328,7 +328,7 @@ namespace cds { namespace container {
                         return std::make_pair( true, res.second );
                     }
                     else {
-                        auto it = m_Set.find( val );
+                        auto it = m_Set.find( value_type( val ));
                         if ( it == m_Set.end() )
                             return std::make_pair( false, false );
                         func( false, const_cast<value_type&>(*it), val );
@@ -452,7 +452,7 @@ namespace cds { namespace container {
                 template <typename Q, typename Func>
                 bool insert( const Q& key, Func f )
                 {
-                    std::pair<iterator, bool> res = m_Map.insert( value_type( key, mapped_type() ) );
+                    std::pair<iterator, bool> res = m_Map.insert( value_type( key_type( key ), mapped_type() ) );
                     if ( res.second )
                         f( *res.first );
                     return res.second;
@@ -461,7 +461,7 @@ namespace cds { namespace container {
                 template <typename Q, typename... Args>
                 bool emplace( Q&& key, Args&&... args )
                 {
-                    std::pair<iterator, bool> res = m_Map.emplace( std::forward<Q>(key), std::move( mapped_type( std::forward<Args>(args)...)));
+                    std::pair<iterator, bool> res = m_Map.emplace( key_type( std::forward<Q>( key )), mapped_type( std::forward<Args>( args )...));
                     return res.second;
                 }
 
@@ -469,12 +469,12 @@ namespace cds { namespace container {
                 std::pair<bool, bool> update( const Q& key, Func func, bool bAllowInsert )
                 {
                     if ( bAllowInsert ) {
-                        std::pair<iterator, bool> res = m_Map.insert( value_type( key, mapped_type() ));
+                        std::pair<iterator, bool> res = m_Map.insert( value_type( key_type( key ), mapped_type() ));
                         func( res.second, *res.first );
                         return std::make_pair( true, res.second );
                     }
                     else {
-                        auto it = m_Map.find(key_type( key ));
+                        auto it = m_Map.find( key_type( key ));
                         if ( it == end() )
                             return std::make_pair( false, false );
                         func( false, *it );
@@ -485,7 +485,7 @@ namespace cds { namespace container {
                 template <typename Q, typename Func>
                 bool erase( const Q& key, Func f )
                 {
-                    iterator it = m_Map.find( key_type(key) );
+                    iterator it = m_Map.find( key_type( key ));
                     if ( it == m_Map.end() )
                         return false;
                     f( *it );
@@ -496,7 +496,7 @@ namespace cds { namespace container {
                 template <typename Q, typename Func>
                 bool find( Q& val, Func f )
                 {
-                    iterator it = m_Map.find( key_type(val) );
+                    iterator it = m_Map.find( key_type( val ));
                     if ( it == m_Map.end() )
                         return false;
                     f( *it, val );
index ae9cb1f50c78dff3c28fb680f5b279be0ee50b71..3de4363180fd271b814a6078fca24dc1834d972f 100644 (file)
@@ -347,25 +347,17 @@ namespace cds { namespace container {
         */
         bool pop( value_type& val )
         {
-            return pop_with( [&val]( value_type& src ) { val = src; } );
+            return pop_with( [&val]( value_type& src ) { val = std::move(src); } );
         }
 
         /// Pops an item from the stack with functor
         /**
+            \p Func can be used to copy/move popped item from the stack.
             \p Func interface is:
             \code
             void func( value_type& src );
-            \endcond
-            where \p src - item popped.
-
-            The \p %pop_with can be used to move item from the stack to user-provided storage:
-            \code
-            cds::container::TreiberStack<cds::gc::HP, std::string > myStack;
-            //...
-
-            std::string dest;
-            myStack.pop_with( [&dest]( std::string& src ) { dest = std::move( src ); } );
             \endcode
+            where \p src - item popped.
         */
         template <typename Func>
         bool pop_with( Func f )
index c4661898a6e8a55bad57e25a0f1ba6ee5373848e..7f7f88f14fac1da7253acb35736232afee99db8f 100644 (file)
@@ -70,8 +70,8 @@ namespace cds { namespace container {
             */
             typedef opt::v::relaxed_ordering    memory_model;
 
-            /// Alignment for internal queue data. Default is \p opt::cache_line_alignment
-            enum { alignment = opt::cache_line_alignment };
+            /// Padding for internal critical atomic data. Default is \p opt::cache_line_padding
+            enum { padding = opt::cache_line_padding };
         };
 
         /// Metafunction converting option list to \p tsigas_queue::traits
@@ -84,7 +84,7 @@ namespace cds { namespace container {
             - \p opt::back_off - back-off strategy used, default is \p cds::backoff::empty.
             - \p opt::item_counter - the type of item counting feature. Default is \p cds::atomicity::empty_item_counter (item counting disabled)
                 To enable item counting use \p cds::atomicity::item_counter
-            - \p opt::alignment - the alignment for internal queue data. Default is \p opt::cache_line_alignment
+            - \p opt::padding - padding for internal critical atomic data. Default is \p opt::cache_line_padding
             - \p opt::memory_model - C++ memory ordering model. Can be \p opt::v::relaxed_ordering (relaxed memory model, the default)
                 or \p opt::v::sequential_consistent (sequentially consisnent memory model).
 
@@ -93,7 +93,7 @@ namespace cds { namespace container {
             typedef cds::container::TsigasCycleQueue< Foo,
                 typename cds::container::tsigas_queue::make_traits<
                     cds::opt::buffer< cds::opt::v::static_buffer< void *, 1024 >,
-                    cds::opt::item_counte< cds::atomicity::item_counter >
+                    cds::opt::item_counter< cds::atomicity::item_counter >
                 >::type
             > myQueue;
             \endcode
@@ -284,6 +284,17 @@ namespace cds { namespace container {
             return false;
         }
 
+        /// Enqueues \p val value into the queue, move semantics
+        bool enqueue( value_type&& val )
+        {
+            scoped_node_ptr p( alloc_node_move( std::move( val )));
+            if ( base_class::enqueue( *p ) ) {
+                p.release();
+                return true;
+            }
+            return false;
+        }
+
         /// Enqueues data to the queue using a functor
         /**
             \p Func is a functor called to create node.
@@ -318,12 +329,18 @@ namespace cds { namespace container {
             return false;
         }
 
-        /// Synonym for template version of \p enqueue() function
+        /// Synonym for \p enqueue( value_type const& )
         bool push( value_type const& data )
         {
             return enqueue( data );
         }
 
+        /// Synonym for \p enqueue( value_type&& )
+        bool push( value_type&& data )
+        {
+            return enqueue( std::move( data ));
+        }
+
         /// Synonym for \p enqueue_with() function
         template <typename Func>
         bool push_with( Func f )
@@ -362,7 +379,7 @@ namespace cds { namespace container {
         */
         bool dequeue( value_type& dest )
         {
-            return dequeue_with( [&dest]( value_type& src ) { dest = src; } );
+            return dequeue_with( [&dest]( value_type& src ) { dest = std::move( src );});
         }
 
         /// Synonym for \p dequeue() function
index 29a126fa6a5a41f1bae81998485a372c87c2397d..354af99563b7c6e580070ed613b95051925a52b6 100644 (file)
@@ -57,7 +57,7 @@ namespace cds { namespace container {
 
             /// A functor to clean item dequeued.
             /**
-                The functor  calls the destructor for queue item.
+                The functor calls the destructor for queue item.
                 After an item is dequeued, \p value_cleaner cleans the cell that the item has been occupied.
                 If \p T is a complex type, \p value_cleaner may be the useful feature.
 
@@ -153,17 +153,17 @@ namespace cds { namespace container {
 
         Template parameters
         - \p T - type stored in queue.
-        - \p Traits - queue traits, default is \p vykov_queue::traits. You can use \p vykov_queue::make_traits
-            metafunction to make your traits or just derive your traits from \p %vykov_queue::traits:
+        - \p Traits - queue traits, default is \p vyukov_queue::traits. You can use \p vyukov_queue::make_traits
+            metafunction to make your traits or just derive your traits from \p %vyukov_queue::traits:
             \code
-            struct myTraits: public cds::container::vykov_queue::traits {
+            struct myTraits: public cds::container::vyukov_queue::traits {
                 typedef cds::atomicity::item_counter    item_counter;
             };
             typedef cds::container::VyukovMPMCCycleQueue< Foo, myTraits > myQueue;
 
             // Equivalent make_traits example:
             typedef cds::container::VyukovMPMCCycleQueue< cds::gc::HP, Foo,
-                typename cds::container::vykov_queue::make_traits<
+                typename cds::container::vyukov_queue::make_traits<
                     cds::opt::item_counter< cds::atomicity::item_counter >
                 >::type
             > myQueue;
@@ -306,12 +306,24 @@ namespace cds { namespace container {
             return enqueue_with( [&val]( value_type& dest ){ new ( &dest ) value_type( val ); });
         }
 
-        /// Synonym for \p enqueue()
+        /// Enqueues \p val value into the queue, move semantics
+        bool enqueue( value_type&& val )
+        {
+            return enqueue_with( [&val]( value_type& dest ) { new (&dest) value_type( std::move( val ));});
+        }
+
+        /// Synonym for \p enqueue( valuetype const& )
         bool push( value_type const& data )
         {
             return enqueue( data );
         }
 
+        /// Synonym for \p enqueue( value_type&& )
+        bool push( value_type&& data )
+        {
+            return enqueue( std::move( data ));
+        }
+
         /// Synonym for \p enqueue_with()
         template <typename Func>
         bool push_with( Func f )
@@ -380,13 +392,13 @@ namespace cds { namespace container {
 
         /// Dequeues a value from the queue
         /**
-            If queue is not empty, the function returns \p true, \p dest contains copy of
+            If queue is not empty, the function returns \p true, \p dest contains copy of
             dequeued value. The assignment operator for type \ref value_type is invoked.
             If queue is empty, the function returns \p false, \p dest is unchanged.
         */
-        bool dequeue(value_type & dest )
+        bool dequeue(value_type& dest )
         {
-            return dequeue_with( [&dest]( value_type& src ){ dest = src; } );
+            return dequeue_with( [&dest]( value_type& src ){ dest = std::move( src );});
         }
 
         /// Synonym for \p dequeue()
index c2fe82d5f04f5c0b271989e5f862adefee0b9310..30bbf4c33b11a67dfd0c18d2603c8e101bdc65f2 100644 (file)
     - <a href="http://www.boost.org/">boost library</a> 1.51 and above. You should create environment variable
         \p BOOST_PATH containing full path to \p boost root directory (for example, <tt>C:\\libs\\boost_1_57_0</tt>).
 
-   Open solution file <tt>cds\projects\vcX\cds.sln</tt> where \p vcX is the version of
-   Microsoft Visual C++ you use: vc12 for MS VC 2013 Update 4, vc14 for MS VC 2015. The solution
-   contains \p cds project and a lot of test projects. Just build the library using solution.
+   Open solution file <tt>cds\projects\vc14\cds.sln</tt> with Microsoft VisualStudio 2015.
+   The solution contains \p cds project and a lot of test projects. Just build the library using solution.
 
    <b>Warning</b>: the solution depends on \p BOOST_PATH environment variable that specifies full path
    to \p boost library root directory. The test projects search \p boost libraries in:
    \par *NIX build
 
    For Unix-like systems GCC and Clang compilers are supported.
-   Use GCC 4.8+ compiler or Clang 3.3+ to build <b>cds</b> library. The distributive contains
-   makefile and <tt>build.sh</tt> script in <tt>build</tt> directory.
-   The <tt>build/sample</tt> directory contains sample scripts for different operating systems and
-   processor architectures.
-   The <tt>build.sh</tt> script supports the following options:
-   - <tt>-c toolset</tt> - Toolset name, possible values: <tt>gcc</tt> (default), <tt>clang</tt>, <tt>icc</tt>
-   - <tt>-x compiler</tt> - C++ compiler name (e.g. g++, g++-4.5 and so on)
-   - <tt>-p arch</tt> - processor architecture; possible values for arch are: x86, amd64 (x86_64), sparc, ia64, ppc64
-   - <tt>-o OStype</tt> - OS family; possible values for OStype are: linux, sunos (solaris), hpux, mingw
-   - <tt>-D define</tt> additional defines
-   - <tt>-b bits</tt> - bits to build, accepts 64, 32
-   - <tt>-l "options"</tt> - extra linker options (in quotes)
-   - <tt>-z "options"</tt> - extra compiler options (in quotes)
-   - <tt>--with-boost path</tt> - path to boost include
-   - <tt>--debug-cxx-options "options"</tt> - extra compiler options for debug target
-   - <tt>--debug-ld-options "options"</tt> - extra linker options for debug target
-   - <tt>--release-cxx-options "options"</tt> - extra compiler options for release target
-   - <tt>--release-ld-options "optons"</tt> - extra linker options for release target
-   - <tt>--clean</tt> - clean all before building
-   - <tt>--debug-test</tt> - make unit test in debug mode; by defalt release unit test generated
-   - <tt>--amd64-use-128bit</tt> - compile with supporting 128bit (16byte) CAS on amd64 (for am64 only)
+   Use GCC 4.8+ compiler or Clang 3.3+ to build <b>cds</b> library with CMake.
+   See accompanying file <tt>/build/cmake/readme.md</tt> for more info.
 
    @note Important for GCC compiler: all your projects that use \p libcds must be compiled with <b>-fno-strict-aliasing</b>
    compiler flag.
index 3c0757f572b5fb863aa9996241aeacbb173a028d..cdb99cc348faa07203e711ebfd374317fe2b1578 100644 (file)
@@ -264,20 +264,19 @@ namespace cds { namespace intrusive {
         /// Metafunction converting option list to \p basket_queue::traits
         /**
             Supported \p Options are:
-
-            - opt::hook - hook used. Possible hooks are: \p basket_queue::base_hook, \p basket_queue::member_hook, \p basket_queue::traits_hook.
+            - \p opt::hook - hook used. Possible hooks are: \p basket_queue::base_hook, \p basket_queue::member_hook, \p basket_queue::traits_hook.
                 If the option is not specified, \p %basket_queue::base_hook<> is used.
-            - opt::back_off - back-off strategy used, default is \p cds::backoff::empty.
-            - opt::disposer - the functor used for dispose removed items. Default is \p opt::v::empty_disposer. This option is used
+            - \p opt::back_off - back-off strategy used, default is \p cds::backoff::empty.
+            - \p opt::disposer - the functor used for dispose removed items. Default is \p opt::v::empty_disposer. This option is used
                 when dequeuing.
-            - opt::link_checker - the type of node's link fields checking. Default is \p opt::debug_check_link
-            - opt::item_counter - the type of item counting feature. Default is \p cds::atomicity::empty_item_counter (item counting disabled)
+            - \p opt::link_checker - the type of node's link fields checking. Default is \p opt::debug_check_link
+            - \p opt::item_counter - the type of item counting feature. Default is \p cds::atomicity::empty_item_counter (item counting disabled)
                 To enable item counting use \p cds::atomicity::item_counter
-            - opt::stat - the type to gather internal statistics.
+            - \p opt::stat - the type to gather internal statistics.
                 Possible statistics types are: \p basket_queue::stat, \p basket_queue::empty_stat, user-provided class that supports \p %basket_queue::stat interface.
                 Default is \p %basket_queue::empty_stat (internal statistics disabled).
             - \p opt::padding - padding for internal critical atomic data. Default is \p opt::cache_line_padding
-            - opt::memory_model - C++ memory ordering model. Can be \p opt::v::relaxed_ordering (relaxed memory model, the default)
+            - \p opt::memory_model - C++ memory ordering model. Can be \p opt::v::relaxed_ordering (relaxed memory model, the default)
                 or \p opt::v::sequential_consistent (sequentially consisnent memory model).
 
             Example: declare \p %BasketQueue with item counting and internal statistics
@@ -343,7 +342,7 @@ namespace cds { namespace intrusive {
         of the backoff mechanisms to reduce contention, making the algorithm an attractive
         out-of-the-box queue.
 
-        In order to enqueue, just as in MSQueue, a thread first tries to link the new node to
+        In order to enqueue, just as in \p MSQueue, a thread first tries to link the new node to
         the last node. If it failed to do so, then another thread has already succeeded. Thus it
         tries to insert the new node into the new basket that was created by the winner thread.
         To dequeue a node, a thread first reads the head of the queue to obtain the
index 076fe5933a2538f2b01d1334386a9e9cb6e0c37c..09c16590143f9bec6d4dacde7dba8d451a259ee7 100644 (file)
@@ -978,48 +978,48 @@ namespace cds { namespace intrusive {
             }
         };
 
-        /// CuckooSet internal statistics
+        /// \p CuckooSet internal statistics
         struct stat {
             typedef cds::atomicity::event_counter   counter_type ;  ///< Counter type
 
-            counter_type    m_nRelocateCallCount    ; ///< Count of \p relocate function call
+            counter_type    m_nRelocateCallCount    ; ///< Count of \p relocate() function call
             counter_type    m_nRelocateRoundCount   ; ///< Count of attempts to relocate items
             counter_type    m_nFalseRelocateCount   ; ///< Count of unneeded attempts of \p relocate call
             counter_type    m_nSuccessRelocateCount ; ///< Count of successfull item relocating
             counter_type    m_nRelocateAboveThresholdCount; ///< Count of item relocating above probeset threshold
             counter_type    m_nFailedRelocateCount  ;   ///< Count of failed relocation attemp (when all probeset is full)
 
-            counter_type    m_nResizeCallCount      ;   ///< Count of \p resize function call
-            counter_type    m_nFalseResizeCount     ;   ///< Count of false \p resize function call (when other thread has been resized the set)
+            counter_type    m_nResizeCallCount      ;   ///< Count of \p resize() function call
+            counter_type    m_nFalseResizeCount     ;   ///< Count of false \p resize() function call (when other thread has been resized the set)
             counter_type    m_nResizeSuccessNodeMove;   ///< Count of successfull node moving when resizing
-            counter_type    m_nResizeRelocateCall   ;   ///< Count of \p relocate function call from \p resize function
+            counter_type    m_nResizeRelocateCall   ;   ///< Count of \p relocate() function call from \p resize function
 
-            counter_type    m_nInsertSuccess        ;   ///< Count of successfull \p insert function call
-            counter_type    m_nInsertFailed         ;   ///< Count of failed \p insert function call
-            counter_type    m_nInsertResizeCount    ;   ///< Count of \p resize function call from \p insert
-            counter_type    m_nInsertRelocateCount  ;   ///< Count of \p relocate function call from \p insert
-            counter_type    m_nInsertRelocateFault  ;   ///< Count of failed \p relocate function call from \p insert
+            counter_type    m_nInsertSuccess        ;   ///< Count of successfull \p insert() function call
+            counter_type    m_nInsertFailed         ;   ///< Count of failed \p insert() function call
+            counter_type    m_nInsertResizeCount    ;   ///< Count of \p resize() function call from \p insert()
+            counter_type    m_nInsertRelocateCount  ;   ///< Count of \p relocate() function call from \p insert()
+            counter_type    m_nInsertRelocateFault  ;   ///< Count of failed \p relocate() function call from \p insert()
 
             counter_type    m_nUpdateExistCount     ;   ///< Count of call \p update() function for existing node
-            counter_type    m_nUpdateSuccessCount   ;   ///< Count of successfull \p insert function call for new node
-            counter_type    m_nUpdateResizeCount    ;   ///< Count of \p resize function call from \p update()
-            counter_type    m_nUpdateRelocateCount  ;   ///< Count of \p relocate function call from \p update()
-            counter_type    m_nUpdateRelocateFault  ;   ///< Count of failed \p relocate function call from \p update()
+            counter_type    m_nUpdateSuccessCount   ;   ///< Count of successfull \p insert() function call for new node
+            counter_type    m_nUpdateResizeCount    ;   ///< Count of \p resize() function call from \p update()
+            counter_type    m_nUpdateRelocateCount  ;   ///< Count of \p relocate() function call from \p update()
+            counter_type    m_nUpdateRelocateFault  ;   ///< Count of failed \p relocate() function call from \p update()
 
-            counter_type    m_nUnlinkSuccess        ;   ///< Count of success \p unlink function call
-            counter_type    m_nUnlinkFailed         ;   ///< Count of failed \p unlink function call
+            counter_type    m_nUnlinkSuccess        ;   ///< Count of success \p unlink() function call
+            counter_type    m_nUnlinkFailed         ;   ///< Count of failed \p unlink() function call
 
-            counter_type    m_nEraseSuccess         ;   ///< Count of success \p erase function call
-            counter_type    m_nEraseFailed          ;   ///< Count of failed \p erase function call
+            counter_type    m_nEraseSuccess         ;   ///< Count of success \p erase() function call
+            counter_type    m_nEraseFailed          ;   ///< Count of failed \p erase() function call
 
-            counter_type    m_nFindSuccess         ;   ///< Count of success \p find function call
-            counter_type    m_nFindFailed          ;   ///< Count of failed \p find function call
+            counter_type    m_nFindSuccess         ;   ///< Count of success \p find() function call
+            counter_type    m_nFindFailed          ;   ///< Count of failed \p find() function call
 
-            counter_type    m_nFindEqualSuccess         ;   ///< Count of success \p find_equal function call
-            counter_type    m_nFindEqualFailed          ;   ///< Count of failed \p find_equal function call
+            counter_type    m_nFindEqualSuccess         ;   ///< Count of success \p find_equal() function call
+            counter_type    m_nFindEqualFailed          ;   ///< Count of failed \p find_equal() function call
 
-            counter_type    m_nFindWithSuccess         ;   ///< Count of success \p find_with function call
-            counter_type    m_nFindWithFailed          ;   ///< Count of failed \p find_with function call
+            counter_type    m_nFindWithSuccess         ;   ///< Count of success \p find_with() function call
+            counter_type    m_nFindWithFailed          ;   ///< Count of failed \p find_with() function call
 
             //@cond
             void    onRelocateCall()        { ++m_nRelocateCallCount; }
@@ -1613,7 +1613,7 @@ namespace cds { namespace intrusive {
         <b>About Cuckoo hashing</b>
 
             [From <i>"The Art of Multiprocessor Programming"</i>]
-            Cuckoo hashing is a hashing algorithm in which a newly added item displaces any earlier item
+            <a href="https://en.wikipedia.org/wiki/Cuckoo_hashing">Cuckoo hashing</a> is a hashing algorithm in which a newly added item displaces any earlier item
             occupying the same slot. For brevity, a table is a k-entry array of items. For a hash set f size
             N = 2k we use a two-entry array of tables, and two independent hash functions,
             <tt> h0, h1: KeyRange -> 0,...,k-1</tt>
@@ -1651,17 +1651,17 @@ namespace cds { namespace intrusive {
             the average search complexity is <tt>O(PROBE_SET/2)</tt>.
             However, the overhead of sorting can eliminate a gain of ordered search.
 
-            The probe set is ordered if opt::compare or opt::less is specified in \p Traits template
-            parameter. Otherwise, the probe set is unordered and \p Traits must contain
-            opt::equal_to option.
+            The probe set is ordered if \p compare or \p less is specified in \p Traits template
+            parameter. Otherwise, the probe set is unordered and \p Traits should provide
+            \p equal_to predicate.
 
-            The cds::intrusive::cuckoo namespace contains \p %CuckooSet-related declarations.
+            The \p cds::intrusive::cuckoo namespace contains \p %CuckooSet-related declarations.
 
         Template arguments:
-        - \p T - the type stored in the set.  The type must be based on cuckoo::node (for cuckoo::base_hook)
-            or it must have a member of type %cuckoo::node (for cuckoo::member_hook),
-            or it must be convertible to \p %cuckoo::node (for cuckoo::traits_hook)
-        - \p Traits - type traits, default is  cuckoo::traits. It is possible to declare option-based
+        - \p T - the type stored in the set. The type must be based on \p cuckoo::node (for \p cuckoo::base_hook)
+            or it must have a member of type %cuckoo::node (for \p cuckoo::member_hook),
+            or it must be convertible to \p %cuckoo::node (for \p cuckoo::traits_hook)
+        - \p Traits - type traits, default is \p cuckoo::traits. It is possible to declare option-based
             set with \p cuckoo::make_traits metafunction result as \p Traits template argument.
 
         <b>How to use</b>
@@ -1863,13 +1863,7 @@ namespace cds { namespace intrusive {
 
         typedef typename traits::mutex_policy  original_mutex_policy; ///< Concurrent access policy, see \p cuckoo::traits::mutex_policy
 
-        /// Actual mutex policy
-        /**
-            Actual mutex policy is built from mutex policy type provided by \p Traits template argument (see \p cuckoo::traits::mutex_policy)
-            but mutex policy internal statistics is conformed with \p cukoo::traits::stat type provided by \p Traits:
-            - if \p %cuckoo::traits::stat is \p cuckoo::empty_stat then mutex policy statistics is already empty
-            - otherwise real mutex policy statistics is used
-        */
+        //@cond
         typedef typename original_mutex_policy::template rebind_statistics<
             typename std::conditional<
                 std::is_same< stat, cuckoo::empty_stat >::value
@@ -1877,15 +1871,21 @@ namespace cds { namespace intrusive {
                 ,typename original_mutex_policy::real_stat
             >::type
         >::other    mutex_policy;
+        //@endcond
 
+        /// Probe set should be ordered or not
+        /**
+            If \p Traits specifies \p cmpare or \p less functor then the set is ordered.
+            Otherwise, it is unordered and \p Traits should provide \p equal_to functor.
+        */
         static bool const c_isSorted = !( std::is_same< typename traits::compare, opt::none >::value
-                && std::is_same< typename traits::less, opt::none >::value ) ; ///< whether the probe set should be ordered
+                && std::is_same< typename traits::less, opt::none >::value ) ;
         static size_t const c_nArity = hash::size ; ///< the arity of cuckoo hashing: the number of hash functors provided; minimum 2.
 
         /// Key equality functor; used only for unordered probe-set
         typedef typename opt::details::make_equal_to< value_type, traits, !c_isSorted>::type key_equal_to;
 
-        /// key comparing functor based on opt::compare and opt::less option setter. Used only for ordered probe set
+        /// key comparing functor based on \p opt::compare and \p opt::less option setter. Used only for ordered probe set
         typedef typename opt::details::make_comparator< value_type, traits >::type key_comparator;
 
         /// allocator type
@@ -2247,9 +2247,9 @@ namespace cds { namespace intrusive {
             then \p nProbesetSize is ignored since it should be equal to vector's \p Capacity.
         */
         CuckooSet(
-            size_t nInitialSize                 ///< Initial set size; if 0 - use default initial size \ref c_nDefaultInitialSize
+            size_t nInitialSize                 ///< Initial set size; if 0 - use default initial size \p c_nDefaultInitialSize
             , unsigned int nProbesetSize        ///< probe set size
-            , unsigned int nProbesetThreshold = 0   ///< probe set threshold, <tt>nProbesetThreshold < nProbesetSize</tt>. If 0, nProbesetThreshold = nProbesetSize - 1
+            , unsigned int nProbesetThreshold = 0   ///< probe set threshold, <tt>nProbesetThreshold < nProbesetSize</tt>. If 0, <tt>nProbesetThreshold = nProbesetSize - 1</tt>
         )
             : m_nProbesetSize( calc_probeset_size(nProbesetSize) )
             , m_nProbesetThreshold( nProbesetThreshold ? nProbesetThreshold : m_nProbesetSize - 1 )
@@ -2263,7 +2263,7 @@ namespace cds { namespace intrusive {
 
         /// Constructs the set object with given hash functor tuple
         /**
-            The probe set size and threshold are set as default, see CuckooSet()
+            The probe set size and threshold are set as default, see \p CuckooSet()
         */
         CuckooSet(
             hash_tuple_type const& h    ///< hash functor tuple of type <tt>std::tuple<H1, H2, ... Hn></tt> where <tt> n == \ref c_nArity </tt>
@@ -2285,9 +2285,9 @@ namespace cds { namespace intrusive {
             then \p nProbesetSize should be equal to vector's \p Capacity.
         */
         CuckooSet(
-            size_t nInitialSize                 ///< Initial set size; if 0 - use default initial size \ref c_nDefaultInitialSize
+            size_t nInitialSize                 ///< Initial set size; if 0 - use default initial size \p c_nDefaultInitialSize
             , unsigned int nProbesetSize        ///< probe set size, positive integer
-            , unsigned int nProbesetThreshold   ///< probe set threshold, <tt>nProbesetThreshold < nProbesetSize</tt>. If 0, nProbesetThreshold = nProbesetSize - 1
+            , unsigned int nProbesetThreshold   ///< probe set threshold, <tt>nProbesetThreshold < nProbesetSize</tt>. If 0, <tt>nProbesetThreshold = nProbesetSize - 1</tt>
             , hash_tuple_type const& h    ///< hash functor tuple of type <tt>std::tuple<H1, H2, ... Hn></tt> where <tt> n == \ref c_nArity </tt>
         )
             : m_nProbesetSize( calc_probeset_size(nProbesetSize) )
@@ -2303,7 +2303,7 @@ namespace cds { namespace intrusive {
 
         /// Constructs the set object with given hash functor tuple (move semantics)
         /**
-            The probe set size and threshold are set as default, see CuckooSet()
+            The probe set size and threshold are set as default, see \p CuckooSet()
         */
         CuckooSet(
             hash_tuple_type&& h     ///< hash functor tuple of type <tt>std::tuple<H1, H2, ... Hn></tt> where <tt> n == \ref c_nArity </tt>
@@ -2325,9 +2325,9 @@ namespace cds { namespace intrusive {
             then \p nProbesetSize should be equal to vector's \p Capacity.
         */
         CuckooSet(
-            size_t nInitialSize                 ///< Initial set size; if 0 - use default initial size \ref c_nDefaultInitialSize
+            size_t nInitialSize                 ///< Initial set size; if 0 - use default initial size \p c_nDefaultInitialSize
             , unsigned int nProbesetSize        ///< probe set size, positive integer
-            , unsigned int nProbesetThreshold   ///< probe set threshold, <tt>nProbesetThreshold < nProbesetSize</tt>. If 0, nProbesetThreshold = nProbesetSize - 1
+            , unsigned int nProbesetThreshold   ///< probe set threshold, <tt>nProbesetThreshold < nProbesetSize</tt>. If 0, <tt>nProbesetThreshold = nProbesetSize - 1</tt>
             , hash_tuple_type&& h    ///< hash functor tuple of type <tt>std::tuple<H1, H2, ... Hn></tt> where <tt> n == \ref c_nArity </tt>
         )
             : m_nProbesetSize( calc_probeset_size(nProbesetSize) )
@@ -2350,10 +2350,9 @@ namespace cds { namespace intrusive {
     public:
         /// Inserts new node
         /**
-            The function inserts \p val in the set if it does not contain
-            an item with key equal to \p val.
+            The function inserts \p val in the set if it does not contain an item with key equal to \p val.
 
-            Returns \p true if \p val is placed into the set, \p false otherwise.
+            Returns \p true if \p val is inserted into the set, \p false otherwise.
         */
         bool insert( value_type& val )
         {
@@ -2715,8 +2714,9 @@ namespace cds { namespace intrusive {
         /// Checks whether the set contains \p key using \p pred predicate for searching
         /**
             The function is similar to <tt>contains( key )</tt> but \p pred is used for key comparing.
-            \p Less functor has the interface like \p std::less.
-            \p Less must imply the same element order as the comparator used for building the set.
+            If the set is unordered, \p Predicate has semantics like \p std::equal_to.
+            For ordered set \p Predicate has \p std::less semantics. In that case \p pred
+            must imply the same element order as the comparator used for building the set.
         */
         template <typename Q, typename Predicate>
         bool contains( Q const& key, Predicate pred )
@@ -2736,7 +2736,7 @@ namespace cds { namespace intrusive {
         /// Clears the set
         /**
             The function unlinks all items from the set.
-            For any item \ref disposer is called
+            For any item <tt> @ref disposer</tt> is called
         */
         void clear()
         {
@@ -2745,7 +2745,7 @@ namespace cds { namespace intrusive {
 
         /// Clears the set and calls \p disposer for each item
         /**
-            The function unlinks all items from the set calling \p disposer for each item.
+            The function unlinks all items from the set calling \p oDisposer for each item.
             \p Disposer functor interface is:
             \code
             struct Disposer{
@@ -2753,7 +2753,7 @@ namespace cds { namespace intrusive {
             };
             \endcode
 
-            The \ref disposer specified in \p Traits traits is not called.
+            The <tt> @ref disposer</tt> specified in \p Traits is not called.
         */
         template <typename Disposer>
         void clear_and_dispose( Disposer oDisposer )
index f40713766f417833e3004f67625cac2860acf14c..a19b67d1e9db6ee48b3a30e369c9d053a36a6bba 100644 (file)
@@ -96,7 +96,7 @@ namespace cds { namespace intrusive {
                 delete_info     dInfo;
             };
 
-            update_desc *   pNextRetire     ;   // for local retired list (RCU)
+            update_desc *   pNextRetire; // for local retired list (RCU)
 
             update_desc()
                 : pNextRetire( nullptr )
@@ -374,9 +374,9 @@ namespace cds { namespace intrusive {
             event_counter   m_nInsertSuccess        ; ///< Count of success insertion
             event_counter   m_nInsertFailed         ; ///< Count of failed insertion
             event_counter   m_nInsertRetries        ; ///< Count of unsuccessful retries of insertion
-            event_counter   m_nEnsureExist          ; ///< Count of \p ensure call for existed node
-            event_counter   m_nEnsureNew            ; ///< Count of \p ensure call for new node
-            event_counter   m_nEnsureRetries        ; ///< Count of unsuccessful retries of ensuring
+            event_counter   m_nUpdateExist          ; ///< Count of \p update() call for existed node
+            event_counter   m_nUpdateNew            ; ///< Count of \p update() call for new node
+            event_counter   m_nUpdateRetries        ; ///< Count of unsuccessful retries of ensuring
             event_counter   m_nEraseSuccess         ; ///< Count of successful call of \p erase and \p unlink
             event_counter   m_nEraseFailed          ; ///< Count of failed call of \p erase and \p unlink
             event_counter   m_nEraseRetries         ; ///< Count of unsuccessful retries inside erasing/unlinking
@@ -404,9 +404,9 @@ namespace cds { namespace intrusive {
             void    onInsertSuccess()               { ++m_nInsertSuccess        ; }
             void    onInsertFailed()                { ++m_nInsertFailed         ; }
             void    onInsertRetry()                 { ++m_nInsertRetries        ; }
-            void    onEnsureExist()                 { ++m_nEnsureExist          ; }
-            void    onEnsureNew()                   { ++m_nEnsureNew            ; }
-            void    onEnsureRetry()                 { ++m_nEnsureRetries        ; }
+            void    onUpdateExist()                 { ++m_nUpdateExist          ; }
+            void    onUpdateNew()                   { ++m_nUpdateNew            ; }
+            void    onUpdateRetry()                 { ++m_nUpdateRetries        ; }
             void    onEraseSuccess()                { ++m_nEraseSuccess         ; }
             void    onEraseFailed()                 { ++m_nEraseFailed          ; }
             void    onEraseRetry()                  { ++m_nEraseRetries         ; }
@@ -437,9 +437,9 @@ namespace cds { namespace intrusive {
             void    onInsertSuccess()               const {}
             void    onInsertFailed()                const {}
             void    onInsertRetry()                 const {}
-            void    onEnsureExist()                 const {}
-            void    onEnsureNew()                   const {}
-            void    onEnsureRetry()                 const {}
+            void    onUpdateExist()                 const {}
+            void    onUpdateNew()                   const {}
+            void    onUpdateRetry()                 const {}
             void    onEraseSuccess()                const {}
             void    onEraseFailed()                 const {}
             void    onEraseRetry()                  const {}
@@ -463,13 +463,13 @@ namespace cds { namespace intrusive {
         /// EllenBinTree traits
         struct traits
         {
-            /// Hook used
+            /// Hook used (mandatory)
             /**
                 Possible values are: \p ellen_bintree::base_hook, \p ellen_bintree::member_hook, \p ellen_bintree::traits_hook.
             */
             typedef base_hook<>       hook;
 
-            /// Key extracting functor
+            /// Key extracting functor (mandatory)
             /**
                 You should explicit define a valid functor.
                 The functor has the following prototype:
@@ -481,7 +481,7 @@ namespace cds { namespace intrusive {
                 It should initialize \p dest key from \p src data.
                 The functor is used to initialize internal nodes.
             */
-            typedef opt::none           key_extractor;
+            typedef opt::none key_extractor;
 
             /// Key comparison functor
             /**
@@ -492,7 +492,7 @@ namespace cds { namespace intrusive {
                 You should provide \p compare or \p less functor.
                 See \ref cds_intrusive_EllenBinTree_rcu_less "predicate requirements".
             */
-            typedef opt::none                       compare;
+            typedef opt::none compare;
 
             /// Specifies binary predicate used for key compare.
             /**
@@ -501,26 +501,26 @@ namespace cds { namespace intrusive {
                 You should provide \p compare or \p less functor.
                 See \ref cds_intrusive_EllenBinTree_rcu_less "predicate requirements".
             */
-            typedef opt::none                       less;
+            typedef opt::none less;
 
             /// Disposer
             /**
                 The functor used for dispose removed items. Default is \p opt::v::empty_disposer.
             */
-            typedef opt::v::empty_disposer          disposer;
+            typedef opt::v::empty_disposer disposer;
 
             /// Item counter
             /**
                 The type for item counter, by default it is disabled (\p atomicity::empty_item_counter).
                 To enable it use \p atomicity::item_counter
             */
-            typedef atomicity::empty_item_counter     item_counter;
+            typedef atomicity::empty_item_counter item_counter;
 
             /// C++ memory ordering model
             /**
                 List of available memory ordering see \p opt::memory_model
             */
-            typedef opt::v::relaxed_ordering        memory_model;
+            typedef opt::v::relaxed_ordering memory_model;
 
             /// Allocator for update descriptors
             /**
@@ -536,29 +536,29 @@ namespace cds { namespace intrusive {
                 Also notice that size of update descriptor is constant and not dependent on the type of data
                 stored in the tree so single free-list object can be used for several \p EllenBinTree object.
             */
-            typedef CDS_DEFAULT_ALLOCATOR           update_desc_allocator;
+            typedef CDS_DEFAULT_ALLOCATOR update_desc_allocator;
 
             /// Allocator for internal nodes
             /**
                 The allocator type is used for \p ellen_bintree::internal_node.
             */
-            typedef CDS_DEFAULT_ALLOCATOR           node_allocator;
+            typedef CDS_DEFAULT_ALLOCATOR node_allocator;
 
             /// Internal statistics
             /**
                 By default, internal statistics is disabled (\p ellen_bintree::empty_stat).
                 To enable it use \p ellen_bintree::stat.
             */
-            typedef empty_stat                      stat;
+            typedef empty_stat stat;
 
             /// Back-off strategy
-            typedef cds::backoff::empty             back_off;
+            typedef cds::backoff::empty back_off;
 
             /// RCU deadlock checking policy (only for \ref cds_intrusive_EllenBinTree_rcu "RCU-based EllenBinTree")
             /**
                 List of available options see \p opt::rcu_check_deadlock
             */
-            typedef cds::opt::v::rcu_throw_deadlock      rcu_check_deadlock;
+            typedef cds::opt::v::rcu_throw_deadlock rcu_check_deadlock;
         };
 
         /// Metafunction converting option list to EllenBinTree traits
index fb0740927c7fdb954d977b63a5d72f09a3bec462..2a8e79b811ace70c6a567c9e0b9ebc091f868422 100644 (file)
@@ -288,9 +288,10 @@ namespace cds { namespace intrusive {
             - \p opt::compare - key comparison functor. No default functor is provided.
                 If the option is not specified, the \p opt::less is used.
             - \p opt::less - specifies binary predicate used for key comparison. Default is \p std::less<T>.
-            - \p opt::equal_to - specifies binary functor for comparing keys for equality. If \p equal_to is not specified, \p compare is
-                used, \p compare is not specified, \p less is used.
-            - \p opt::sort - specifies ordering policy. Default value is \p true.
+            - \p opt::equal_to - specifies binary functor for comparing keys for equality. This option is applicable only for unordered list.
+                If \p equal_to is not specified, \p compare is used, \p compare is not specified, \p less is used.
+            - \p opt::sort - specifies ordering policy. Default value is \p true, i.e. the list is ordered.
+                Note: unordering feature is not fully supported yet.
             - \p opt::back_off - back-off strategy used. If the option is not specified, the \p cds::backoff::Default is used.
             - \p opt::disposer - the functor used for dispose removed items. Default is \p opt::v::empty_disposer. Due the nature
                 of GC schema the disposer may be called asynchronously.
index 8348369f1d7046654271572f437f99b924182545..2e7eef9b71bc0e5fb74bd2fa6688f4b7d267e008 100644 (file)
@@ -94,10 +94,10 @@ namespace cds { namespace intrusive {
                     nLoadFactor = 1;
                 if ( nMaxItemCount == 0 )
                     nMaxItemCount = 4;
-                const size_t nBucketCount = (size_t)( nMaxItemCount / nLoadFactor );
-                const size_t nLog2 = cds::bitop::MSB( nBucketCount );
+                const size_t nBucketCount = nMaxItemCount / nLoadFactor;
+                const size_t exp2 = size_t( 1 ) << cds::bitop::MSB( nBucketCount );
 
-                return (( size_t( 1 << nLog2 ) < nBucketCount ? size_t( 1 << (nLog2 + 1) ) : size_t( 1 << nLog2 ))) - 1;
+                return ( exp2 < nBucketCount ? exp2 * 2 : exp2 ) - 1;
             }
 
             template <typename OrderedList, bool IsConst>
index 0975d8a769fdf7822cd9c15242dff0c1da95620d..de03f802c908de85b082ae0d9fa5f4fe3930e0f3 100644 (file)
@@ -69,15 +69,23 @@ namespace cds { namespace intrusive { namespace details {
             apply();
         }
 
-        raw_ptr_disposer& operator=(raw_ptr_disposer&& d)
+        raw_ptr_disposer& combine(raw_ptr_disposer&& d)
         {
-            assert( pReclaimedChain == nullptr );
-            pReclaimedChain = d.pReclaimedChain;
+            if ( pReclaimedChain == nullptr )
+                pReclaimedChain = d.pReclaimedChain;
+            else if ( d.pReclaimedChain ) {
+                // union reclaimed chains
+                node_type * pEnd = d.pReclaimedChain;
+                for ( ; pEnd->m_pDelChain; pEnd = pEnd->m_pDelChain );
+                pEnd->m_pDelChain = pReclaimedChain;
+                pReclaimedChain = d.pReclaimedChain;
+            }
             d.pReclaimedChain = nullptr;
             return *this;
         }
 
         raw_ptr_disposer& operator=(raw_ptr_disposer const& d) = delete;
+        raw_ptr_disposer& operator=( raw_ptr_disposer&& d ) = delete;
 
         void apply()
         {
index 9b942144758a6c47c43ee29574b4c97416d0cdac..0ee4c60aba35bcff04bfbd656f3765a1f4b63eab 100644 (file)
@@ -54,7 +54,7 @@ namespace cds { namespace intrusive {
             typedef GC              gc  ;   ///< Garbage collector
             typedef Tag             tag ;   ///< tag
 
-            typedef typename gc::template atomic_ref<node>    atomic_node_ptr    ;    ///< atomic pointer
+            typedef typename gc::template atomic_ref<node>    atomic_node_ptr; ///< atomic pointer
 
             /// Rebind node for other template parameters
             template <class GC2, typename Tag2 = tag>
index 4c0501653a3abde25d2287505293b1f84da5ed8e..7a18b503542ab00e5288dba9ddd0d6eec2648d1e 100644 (file)
@@ -551,7 +551,7 @@ namespace cds { namespace intrusive {
             /// Item counter
             /**
                 The type for item counting feature.
-                By default, item counting is disabled (\p atomicity::empty_item_counter)
+                By default, item counting is disabled (\p atomicity::empty_item_counter),
                 \p atomicity::item_counter enables it.
             */
             typedef atomicity::empty_item_counter     item_counter;
index 2259fe76b98257a46dd6d365538aecf442ad83cf..8f90aa25cdad01d380f3c360df7078f90cdc057d 100644 (file)
@@ -94,8 +94,8 @@ namespace cds { namespace intrusive {
 
             counter_type    m_nInsertSuccess;        ///< Count of success inserting
             counter_type    m_nInsertFailed;         ///< Count of failed inserting
-            counter_type    m_nEnsureNew;            ///< Count of new item created by \p ensure() member function
-            counter_type    m_nEnsureExist;          ///< Count of \p ensure() call for existing item
+            counter_type    m_nUpdateNew;            ///< Count of new item created by \p ensure() member function
+            counter_type    m_nUpdateExist;          ///< Count of \p ensure() call for existing item
             counter_type    m_nEraseSuccess;         ///< Count of success erasing of items
             counter_type    m_nEraseFailed;          ///< Count of attempts to erase unknown item
             counter_type    m_nExtractSuccess;       ///< Count of success extracting of items
@@ -112,8 +112,8 @@ namespace cds { namespace intrusive {
             //@cond
             void onInsertSuccess()       { ++m_nInsertSuccess; }
             void onInsertFailed()        { ++m_nInsertFailed; }
-            void onEnsureNew()           { ++m_nEnsureNew; }
-            void onEnsureExist()         { ++m_nEnsureExist; }
+            void onUpdateNew()           { ++m_nUpdateNew; }
+            void onUpdateExist()         { ++m_nUpdateExist; }
             void onEraseSuccess()        { ++m_nEraseSuccess; }
             void onEraseFailed()         { ++m_nEraseFailed; }
             void onExtractSuccess()      { ++m_nExtractSuccess; }
@@ -142,8 +142,8 @@ namespace cds { namespace intrusive {
             //@cond
             void onInsertSuccess()       const {}
             void onInsertFailed()        const {}
-            void onEnsureNew()           const {}
-            void onEnsureExist()         const {}
+            void onUpdateNew()           const {}
+            void onUpdateExist()         const {}
             void onEraseSuccess()        const {}
             void onEraseFailed()         const {}
             void onExtractSuccess()      const {}
@@ -781,7 +781,7 @@ namespace cds { namespace intrusive {
                     opt::compare< key_compare >
                     ,opt::disposer< wrapped_disposer >
                     ,opt::boundary_node_type< splitlist_node_type >
-                >::type    result;
+                >::type result;
             };
 
             template <typename OrderedList, bool IsConst>
@@ -836,7 +836,6 @@ namespace cds { namespace intrusive {
                         ++m_itCur;
                 }
 
-
                 value_ptr operator ->() const
                 {
                     return m_itCur.operator->();
index bbe14fe27f8deb25f15cb785e896dce23df0d554..edfaf23594fe5d35e101fb0ffb7bf11b5e658007 100644 (file)
@@ -83,7 +83,7 @@ namespace cds { namespace intrusive {
         the priority value plus some uniformly distributed random value.
 
         @attention Recall the tree is <b>unbalanced</b>. The complexity of operations is <tt>O(log N)</tt>
-        for uniformly distributed random keys, but in worst case the complexity is <tt>O(N)</tt>.
+        for uniformly distributed random keys, but in the worst case the complexity is <tt>O(N)</tt>.
 
         @note In the current implementation we do not use helping technique described in the original paper.
         Instead of helping, when a thread encounters a concurrent operation it just spins waiting for
@@ -349,8 +349,8 @@ namespace cds { namespace intrusive {
         // Foo struct is derived from two ellen_bintree::node class
         // with different tags
         struct Foo
-            : public cds::intrusive::ellen_bintree::node< gpb_rcu, cds::opt::tag< string_tag > >
-            , public cds::intrusive::ellen_bintree::node< gpb_rcu >, cds::opt::tag< int_tag >
+            : public cds::intrusive::ellen_bintree::node< gpb_rcu, cds::opt::tag< string_tag >>
+            , public cds::intrusive::ellen_bintree::node< gpb_rcu, cds::opt::tag< int_tag >>
         {
             std::string m_strKey    ;   // string key
             int         m_nKey      ;   // int key
@@ -848,7 +848,7 @@ namespace cds { namespace intrusive {
                         func( false, *node_traits::to_value_ptr( res.pLeaf ), val );
                         if ( pNewInternal.get())
                             m_Stat.onInternalNodeDeleted() ;    // unique_internal_node_ptr deletes internal node
-                        m_Stat.onEnsureExist();
+                        m_Stat.onUpdateExist();
                         return std::make_pair( true, false );
                     }
 
@@ -869,12 +869,12 @@ namespace cds { namespace intrusive {
                         help( res.updParent, updRetire );
 
                     bkoff();
-                    m_Stat.onEnsureRetry();
+                    m_Stat.onUpdateRetry();
                 }
             }
 
             ++m_ItemCounter;
-            m_Stat.onEnsureNew();
+            m_Stat.onUpdateNew();
 
             return std::make_pair( true, true );
         }
@@ -917,7 +917,8 @@ namespace cds { namespace intrusive {
             unlinks it from the tree, and returns \p true.
             If the item with key equal to \p key is not found the function return \p false.
 
-            Note the hash functor should accept a parameter of type \p Q that can be not the same as \p value_type.
+            Note the \p Traits::less and/or \p Traits::compare predicate should accept a parameter of type \p Q 
+            that can be not the same as \p value_type.
 
             RCU \p synchronize method can be called. RCU should not be locked.
         */
@@ -969,7 +970,8 @@ namespace cds { namespace intrusive {
 
             If the item with key equal to \p key is not found the function return \p false.
 
-            Note the hash functor should accept a parameter of type \p Q that can be not the same as \p value_type.
+            Note the \p Traits::less and/or \p Traits::compare predicate should accept a parameter of type \p Q 
+            that can be not the same as \p value_type.
 
             RCU \p synchronize method can be called. RCU should not be locked.
         */
index c654053f85eed0609fc467c9f3f22a857074cfac..dae8166584fe2295628fe1db996fe7acc5dae597 100644 (file)
 
 namespace cds { namespace intrusive {
 
-    /// FCQueue related definitions
+    /// \p FCQueue related definitions
     namespace fcqueue {
 
-        /// FCQueue internal statistics
+        /// \p FCQueue internal statistics
         template <typename Counter = cds::atomicity::event_counter >
         struct stat: public cds::algo::flat_combining::stat<Counter>
         {
@@ -70,7 +70,7 @@ namespace cds { namespace intrusive {
             //@endcond
         };
 
-        /// FCQueue type traits
+        /// \p FCQueue type traits
         struct traits: public cds::algo::flat_combining::traits
         {
             typedef cds::intrusive::opt::v::empty_disposer  disposer ; ///< Disposer to erase removed elements. Used only in \p FCQueue::clear() function
@@ -83,7 +83,7 @@ namespace cds { namespace intrusive {
             \p Options are:
             - \p opt::lock_type - mutex type, default is \p cds::sync::spin
             - \p opt::back_off - back-off strategy, defalt is \p cds::backoff::Default
-            - \p opt::disposer - the functor used for dispose removed items. Default is \p opt::intrusive::v::empty_disposer.
+            - \p opt::disposer - the functor used to dispose removed items. Default is \p opt::intrusive::v::empty_disposer.
                 This option is used only in \p FCQueue::clear() function.
             - \p opt::allocator - allocator type, default is \ref CDS_DEFAULT_ALLOCATOR
             - \p opt::stat - internal statistics, possible type: \p fcqueue::stat, \p fcqueue::empty_stat (the default)
@@ -91,7 +91,7 @@ namespace cds { namespace intrusive {
                 List of all available memory ordering see \p opt::memory_model.
                 Default is \p cds::opt::v:relaxed_ordering
             - \p opt::enable_elimination - enable/disable operation \ref cds_elimination_description "elimination"
-                By default, the elimination is disabled.
+                By default, the elimination is disabled (\p false)
         */
         template <typename... Options>
         struct make_traits {
index 64a66ba40fc773d2adbb1e241ba2dceb6013e4cf..f915850522e6ded5b931715295459ce0c329a889 100644 (file)
@@ -113,6 +113,10 @@ namespace cds { namespace intrusive {
 
         using exempt_ptr = cds::urcu::exempt_ptr< gc, value_type, value_type, disposer, void >; ///< pointer to extracted node
 
+        //@cond
+        typedef feldman_hashset::level_statistics level_statistics;
+        //@endcond
+
     protected:
         //@cond
         typedef typename base_class::node_ptr node_ptr;
@@ -496,7 +500,13 @@ namespace cds { namespace intrusive {
         using base_class::array_node_size;
 
         /// Collects tree level statistics into \p stat
-        /** @copydetails cds::intrusive::FeldmanHashSet::get_level_statistics
+        /**
+            The function traverses the set and collects statistics for each level of the tree
+            into \p feldman_hashset::level_statistics struct. The element of \p stat[i]
+            represents statistics for level \p i, level 0 is head array.
+            The function is thread-safe and may be called in multi-threaded environment.
+
+            Result can be useful for estimating efficiency of hash functor you use.
         */
         void get_level_statistics(std::vector<feldman_hashset::level_statistics>& stat) const
         {
@@ -580,13 +590,11 @@ namespace cds { namespace intrusive {
 
             value_type * pointer() const CDS_NOEXCEPT
             {
-                assert(gc::is_locked());
                 return m_pValue;
             }
 
             void forward()
             {
-                assert( gc::is_locked());
                 assert(m_set != nullptr);
                 assert(m_pNode != nullptr);
 
@@ -643,7 +651,6 @@ namespace cds { namespace intrusive {
 
             void backward()
             {
-                assert(gc::is_locked());
                 assert(m_set != nullptr);
                 assert(m_pNode != nullptr);
 
@@ -890,7 +897,7 @@ namespace cds { namespace intrusive {
             The set supports thread-safe iterators: you may iterate over the set in multi-threaded environment
             under explicit RCU lock.
             RCU lock requirement means that inserting or searching is allowed but you must not erase the items from the set
-            since erasing under RCU lock can lead to a deadlock. However, another thread can call \p erase() safely
+            because erasing under RCU lock can lead to a deadlock. However, another thread can call \p erase() safely
             while your thread is iterating.
 
             A typical example is:
diff --git a/cds/intrusive/free_list.h b/cds/intrusive/free_list.h
new file mode 100644 (file)
index 0000000..de92e06
--- /dev/null
@@ -0,0 +1,244 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSLIB_INTRUSIVE_FREE_LIST_H
+#define CDSLIB_INTRUSIVE_FREE_LIST_H
+
+#include <cds/algo/atomic.h>
+
+namespace cds { namespace intrusive {
+
+    /// Lock-free free list
+    /** @ingroup cds_intrusive_helper
+
+        Free list is a helper class intended for reusing objects instead of freeing them completely; 
+        this avoids the overhead of \p malloc(), and also avoids its worst-case behaviour of taking an operating system lock.
+        So, the free list can be considered as a specialized allocator for objects of some type.
+
+        The algorithm is taken from <a href="http://moodycamel.com/blog/2014/solving-the-aba-problem-for-lock-free-free-lists">this article</a>.
+        The algo does not require any SMR like Hazard Pointer to prevent ABA problem.
+
+        There is \ref TaggedFreeList "tagged pointers" variant of free list for processors which support double-width CAS.
+
+        \b How to use
+        \code
+        #include <cds/intrusive/free_list.h>
+
+        // Your struct should be derived from FreeList::node
+        struct Foo: public cds::intrusive::FreeList::node
+        {
+            // Foo fields
+        };
+
+        // Simplified Foo allocator
+        class FooAllocator
+        {
+        public:
+            // free-list clear() must be explicitly called before destroying the free-list object
+            ~FooAllocator()
+            {
+                m_FreeList.clear( []( freelist_node * p ) { delete static_cast<Foo *>( p ); });
+            }
+
+            Foo * alloc()
+            {
+                freelist_node * p = m_FreeList.get();
+                if ( p )
+                    return static_cast<Foo *>( p );
+                return new Foo;
+            };
+
+            void dealloc( Foo * p )
+            {
+                m_FreeList.put( static_cast<freelist_node *>( p ));
+            };
+
+        private:
+            typedef cds::intrusive::FreeList::node freelist_node;
+            cds::intrusive::FreeList m_FreeList;
+        };
+        \endcode
+    */
+    class FreeList
+    {
+    public:
+        /// Free list node
+        struct node {
+            //@cond
+            atomics::atomic<uint32_t>   m_freeListRefs;
+            atomics::atomic<node *>     m_freeListNext;
+
+            node()
+                : m_freeListRefs( 0 )
+                , m_freeListNext( nullptr )
+            {}
+            //@endcond
+        };
+
+    public:
+        /// Creates empty free list
+        FreeList()
+            : m_Head( nullptr )
+        {}
+
+        /// Destroys the free list. Free-list must be empty.
+        /**
+            @warning dtor does not free elements of the list.
+            To free elements you should manually call \p clear() with an appropriate disposer.
+        */
+        ~FreeList()
+        {
+            assert( empty() );
+        }
+
+        /// Puts \p pNode to the free list
+        void put( node * pNode )
+        {
+            // We know that the should-be-on-freelist bit is 0 at this point, so it's safe to
+            // set it using a fetch_add
+            if ( pNode->m_freeListRefs.fetch_add( c_ShouldBeOnFreeList, atomics::memory_order_release ) == 0 ) {
+                // Oh look! We were the last ones referencing this node, and we know
+                // we want to add it to the free list, so let's do it!
+                add_knowing_refcount_is_zero( pNode );
+            }
+        }
+
+        /// Gets a node from the free list. If the list is empty, returns \p nullptr
+        node * get()
+        {
+            auto head = m_Head.load( atomics::memory_order_acquire );
+            while ( head != nullptr ) {
+                auto prevHead = head;
+                auto refs = head->m_freeListRefs.load( atomics::memory_order_relaxed );
+                if ( (refs & c_RefsMask) == 0 || !head->m_freeListRefs.compare_exchange_strong( refs, refs + 1,
+                    atomics::memory_order_acquire, atomics::memory_order_relaxed )) 
+                {
+                    head = m_Head.load( atomics::memory_order_acquire );
+                    continue;
+                }
+
+                // Good, reference count has been incremented (it wasn't at zero), which means
+                // we can read the next and not worry about it changing between now and the time
+                // we do the CAS
+                node * next = head->m_freeListNext.load( atomics::memory_order_relaxed );
+                if ( m_Head.compare_exchange_strong( head, next, atomics::memory_order_acquire, atomics::memory_order_relaxed )) {
+                    // Yay, got the node. This means it was on the list, which means
+                    // shouldBeOnFreeList must be false no matter the refcount (because
+                    // nobody else knows it's been taken off yet, it can't have been put back on).
+                    assert( (head->m_freeListRefs.load( atomics::memory_order_relaxed ) & c_ShouldBeOnFreeList) == 0 );
+
+                    // Decrease refcount twice, once for our ref, and once for the list's ref
+                    head->m_freeListRefs.fetch_sub( 2, atomics::memory_order_relaxed );
+
+                    return head;
+                }
+
+                // OK, the head must have changed on us, but we still need to decrease the refcount we
+                // increased
+                refs = prevHead->m_freeListRefs.fetch_sub( 1, atomics::memory_order_acq_rel );
+                if ( refs == c_ShouldBeOnFreeList + 1 )
+                    add_knowing_refcount_is_zero( prevHead );
+            }
+
+            return nullptr;
+        }
+
+        /// Checks whether the free list is empty
+        bool empty() const
+        {
+            return m_Head.load( atomics::memory_order_relaxed ) == nullptr;
+        }
+
+        /// Clears the free list (not atomic)
+        /**
+            For each element \p disp disposer is called to free memory.
+            The \p Disposer interface:
+            \code
+            struct disposer
+            {
+                void operator()( FreeList::node * node );
+            };
+            \endcode
+
+            This method must be explicitly called before the free list destructor.
+        */
+        template <typename Disposer>
+        void clear( Disposer disp )
+        {
+            node * head = m_Head.load( atomics::memory_order_relaxed );
+            m_Head.store( nullptr, atomics::memory_order_relaxed );
+            while ( head ) {
+                node * next = head->m_freeListNext.load( atomics::memory_order_relaxed );
+                disp( head );
+                head = next;
+            }
+        }
+
+    private:
+        //@cond
+        void add_knowing_refcount_is_zero( node * pNode )
+        {
+            // Since the refcount is zero, and nobody can increase it once it's zero (except us, and we
+            // run only one copy of this method per node at a time, i.e. the single thread case), then we
+            // know we can safely change the next pointer of the node; however, once the refcount is back
+            // above zero, then other threads could increase it (happens under heavy contention, when the
+            // refcount goes to zero in between a load and a refcount increment of a node in try_get, then
+            // back up to something non-zero, then the refcount increment is done by the other thread) --
+            // so, if the CAS to add the node to the actual list fails, decrease the refcount and leave
+            // the add operation to the next thread who puts the refcount back at zero (which could be us,
+            // hence the loop).
+            node * head = m_Head.load( atomics::memory_order_relaxed );
+            while ( true ) {
+                pNode->m_freeListNext.store( head, atomics::memory_order_relaxed );
+                pNode->m_freeListRefs.store( 1, atomics::memory_order_release );
+                if ( !m_Head.compare_exchange_strong( head, pNode, atomics::memory_order_release, atomics::memory_order_relaxed )) {
+                    // Hmm, the add failed, but we can only try again when the refcount goes back to zero
+                    if ( pNode->m_freeListRefs.fetch_add( c_ShouldBeOnFreeList - 1, atomics::memory_order_release ) == 1 )
+                        continue;
+                }
+                return;
+            }
+        }
+        //@endcond
+
+    private:
+        //@cond
+        static CDS_CONSTEXPR uint32_t const c_RefsMask = 0x7FFFFFFF;
+        static CDS_CONSTEXPR uint32_t const c_ShouldBeOnFreeList = 0x80000000;
+
+        // Implemented like a stack, but where node order doesn't matter (nodes are
+        // inserted out of order under contention)
+        atomics::atomic<node *>  m_Head;
+        //@endcond
+    };
+
+}} // namespace cds::intrusive
+
+#endif // CDSLIB_INTRUSIVE_FREE_LIST_H
diff --git a/cds/intrusive/free_list_tagged.h b/cds/intrusive/free_list_tagged.h
new file mode 100644 (file)
index 0000000..d1fbbd5
--- /dev/null
@@ -0,0 +1,191 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSLIB_INTRUSIVE_FREE_LIST_TAGGED_H
+#define CDSLIB_INTRUSIVE_FREE_LIST_TAGGED_H
+
+#include <cds/algo/atomic.h>
+
+namespace cds { namespace intrusive {
+
+    /// Lock-free free list based on tagged pointers (required double-width CAS)
+    /** @ingroup cds_intrusive_helper
+        This variant of \p FreeList is intended for processor architectures that support double-width CAS.
+        It uses <a href="https://en.wikipedia.org/wiki/Tagged_pointer">tagged pointer</a> technique to solve ABA problem.
+
+        \b How to use
+        \code
+        #include <cds/intrusive/free_list_tagged.h>
+
+        // Your struct should be derived from TaggedFreeList::node
+        struct Foo: public cds::intrusive::TaggedFreeList::node
+        {
+            // Foo fields
+        };
+
+        // Simplified Foo allocator
+        class FooAllocator
+        {
+        public:
+            // free-list clear() must be explicitly called before destroying the free-list object
+            ~FooAllocator()
+            {
+                m_FreeList.clear( []( freelist_node * p ) { delete static_cast<Foo *>( p ); });
+            }
+
+            Foo * alloc()
+            {
+                freelist_node * p = m_FreeList.get();
+                if ( p )
+                    return static_cast<Foo *>( p );
+                return new Foo;
+            };
+
+            void dealloc( Foo * p )
+            {
+                m_FreeList.put( static_cast<freelist_node *>( p ));
+            };
+
+        private:
+            typedef cds::intrusive::TaggedFreeList::node freelist_node;
+            cds::intrusive::TaggedFreeList m_FreeList;
+        };
+        \endcode
+    */
+    class TaggedFreeList
+    {
+    public:
+        struct node {
+            //@cond
+            atomics::atomic<node *> m_freeListNext;
+
+            node()
+                : m_freeListNext( nullptr )
+            {}
+            //@endcond
+        };
+
+    public:
+        /// Creates empty free-list
+        TaggedFreeList()
+        {
+            // Your platform must support double-width CAS
+            assert( m_Head.is_lock_free());
+        }
+
+        /// Destroys the free list. Free-list must be empty.
+        /**
+            @warning dtor does not free elements of the list.
+            To free elements you should manually call \p clear() with an appropriate disposer.
+        */
+        ~TaggedFreeList()
+        {
+            assert( empty() );
+        }
+
+
+        /// Puts \p pNode to the free list
+        void put( node * pNode )
+        {
+            tagged_ptr currentHead = m_Head.load( atomics::memory_order_relaxed );
+            tagged_ptr newHead = { pNode };
+            do {
+                newHead.tag = currentHead.tag + 1;
+                pNode->m_freeListNext.store( currentHead.ptr, atomics::memory_order_relaxed );
+            } while ( !m_Head.compare_exchange_weak( currentHead, newHead, atomics::memory_order_release, atomics::memory_order_relaxed ));
+        }
+
+        /// Gets a node from the free list. If the list is empty, returns \p nullptr
+        node * get()
+        {
+            tagged_ptr currentHead = m_Head.load( atomics::memory_order_acquire );
+            tagged_ptr newHead;
+            while ( currentHead.ptr != nullptr ) {
+                newHead.ptr = currentHead.ptr->m_freeListNext.load( atomics::memory_order_relaxed );
+                newHead.tag = currentHead.tag + 1;
+                if ( m_Head.compare_exchange_weak( currentHead, newHead, atomics::memory_order_release, atomics::memory_order_acquire ) )
+                    break;
+            }
+            return currentHead.ptr;
+        }
+
+        /// Checks whether the free list is empty
+        bool empty() const
+        {
+            return m_Head.load( atomics::memory_order_relaxed ).ptr == nullptr;
+        }
+
+        /// Clears the free list (not atomic)
+        /**
+            For each element \p disp disposer is called to free memory.
+            The \p Disposer interface:
+            \code
+            struct disposer
+            {
+                void operator()( FreeList::node * node );
+            };
+            \endcode
+
+            This method must be explicitly called before the free list destructor.
+        */
+        template <typename Disposer>
+        void clear( Disposer disp )
+        {
+            node * head = m_Head.load( atomics::memory_order_relaxed ).ptr;
+            m_Head.store( { nullptr }, atomics::memory_order_relaxed );
+            while ( head ) {
+                node * next = head->m_freeListNext.load( atomics::memory_order_relaxed );
+                disp( head );
+                head = next;
+            }
+        }
+
+    private:
+        //@cond
+        struct tagged_ptr
+        {
+            node *    ptr;
+            uintptr_t tag;
+
+            tagged_ptr()
+                : ptr( nullptr )
+                , tag( 0 )
+            {}
+        };
+
+        static_assert(sizeof( tagged_ptr ) == sizeof(void *) * 2, "sizeof( tagged_ptr ) violation" );
+
+        atomics::atomic<tagged_ptr> m_Head;
+        //@endcond    
+    };
+
+}} // namespace cds::intrusive
+
+#endif // CDSLIB_INTRUSIVE_FREE_LIST_TAGGED_H
\ No newline at end of file
index 1d90bd5683625af85ec42636dbe0710450ad6619..7ed69b238632aecfccc2a2a06d982aff2dfa1266 100644 (file)
@@ -66,7 +66,7 @@ namespace cds { namespace intrusive {
         the operation done. Such solution allows greatly simplify implementation of the tree.
 
         @attention Recall the tree is <b>unbalanced</b>. The complexity of operations is <tt>O(log N)</tt>
-        for uniformly distributed random keys, but in worst case the complexity is <tt>O(N)</tt>.
+        for uniformly distributed random keys, but in the worst case the complexity is <tt>O(N)</tt>.
 
         @note Do not include <tt><cds/intrusive/impl/ellen_bintree.h></tt> header file explicitly.
         There are header file for each GC type:
@@ -437,7 +437,7 @@ namespace cds { namespace intrusive {
                     func( false, *node_traits::to_value_ptr( res.pLeaf ), val );
                     if ( pNewInternal.get() )
                         m_Stat.onInternalNodeDeleted() ;    // unique_internal_node_ptr deletes internal node
-                    m_Stat.onEnsureExist();
+                    m_Stat.onUpdateExist();
                     return std::make_pair( true, false );
                 }
 
@@ -456,11 +456,11 @@ namespace cds { namespace intrusive {
                 }
 
                 bkoff();
-                m_Stat.onEnsureRetry();
+                m_Stat.onUpdateRetry();
             }
 
             ++m_ItemCounter;
-            m_Stat.onEnsureNew();
+            m_Stat.onUpdateNew();
             return std::make_pair( true, true );
         }
         //@cond
@@ -499,7 +499,8 @@ namespace cds { namespace intrusive {
             unlinks it from the tree, and returns \p true.
             If the item with key equal to \p key is not found the function return \p false.
 
-            Note the hash functor should accept a parameter of type \p Q that can be not the same as \p value_type.
+            Note the \p Traits::less and/or \p Traits::compare predicate should accept a parameter of type \p Q 
+            that can be not the same as \p value_type.
         */
         template <typename Q>
         bool erase( const Q& key )
@@ -549,7 +550,8 @@ namespace cds { namespace intrusive {
 
             If the item with key equal to \p key is not found the function return \p false.
 
-            Note the hash functor should accept a parameter of type \p Q that can be not the same as \p value_type.
+            Note the \p Traits::less and/or \p Traits::compare predicate should accept a parameter of type \p Q 
+            that can be not the same as \p value_type.
         */
         template <typename Q, typename Func>
         bool erase( Q const& key, Func f )
index 75d8aa13d1056ec17a61cf053d7dd57daced91fc..c21646ce2b88c9b230ee5ee59fd28de3adc6db22 100644 (file)
@@ -145,6 +145,9 @@ namespace cds { namespace intrusive {
         /// Count of hazard pointers required
         static CDS_CONSTEXPR size_t const c_nHazardPtrCount = 2;
 
+        /// Level statistics
+        typedef feldman_hashset::level_statistics level_statistics;
+
     protected:
         //@cond
         typedef typename base_class::node_ptr node_ptr;
@@ -186,7 +189,7 @@ namespace cds { namespace intrusive {
                 m_guard.copy( rhs.m_guard );
             }
 
-            iterator_base& operator=(iterator_base const& rhs) CDS_NOEXCEPT
+            iterator_base& operator=( iterator_base const& rhs ) CDS_NOEXCEPT
             {
                 m_pNode = rhs.m_pNode;
                 m_idx = rhs.m_idx;
@@ -212,12 +215,12 @@ namespace cds { namespace intrusive {
                 m_guard.clear();
             }
 
-            bool operator ==(iterator_base const& rhs) const CDS_NOEXCEPT
+            bool operator ==( iterator_base const& rhs ) const CDS_NOEXCEPT
             {
                 return m_pNode == rhs.m_pNode && m_idx == rhs.m_idx && m_set == rhs.m_set;
             }
 
-            bool operator !=(iterator_base const& rhs) const CDS_NOEXCEPT
+            bool operator !=( iterator_base const& rhs ) const CDS_NOEXCEPT
             {
                 return !( *this == rhs );
             }
@@ -270,7 +273,7 @@ namespace cds { namespace intrusive {
                         else {
                             if ( slot.ptr()) {
                                 // data node
-                                if ( m_guard.protect( pNode->nodes[idx], [](node_ptr p) -> value_type * { return p.ptr(); }) == slot ) {
+                                if ( m_guard.protect( pNode->nodes[idx], []( node_ptr p ) -> value_type* { return p.ptr(); }) == slot ) {
                                     m_pNode = pNode;
                                     m_idx = idx;
                                     return;
@@ -328,7 +331,7 @@ namespace cds { namespace intrusive {
                         else {
                             if ( slot.ptr()) {
                                 // data node
-                                if ( m_guard.protect( pNode->nodes[idx], [](node_ptr p) -> value_type * { return p.ptr(); }) == slot ) {
+                                if ( m_guard.protect( pNode->nodes[idx], []( node_ptr p ) -> value_type* { return p.ptr(); }) == slot ) {
                                     m_pNode = pNode;
                                     m_idx = idx;
                                     return;
@@ -402,7 +405,7 @@ namespace cds { namespace intrusive {
                 : iterator_base( rhs )
             {}
 
-            bidirectional_iterator& operator=(bidirectional_iterator const& rhs) CDS_NOEXCEPT
+            bidirectional_iterator& operator=( bidirectional_iterator const& rhs ) CDS_NOEXCEPT
             {
                 iterator_base::operator=( rhs );
                 return *this;
@@ -438,13 +441,13 @@ namespace cds { namespace intrusive {
             }
 
             template <bool IsConst2>
-            bool operator ==(bidirectional_iterator<IsConst2> const& rhs) const CDS_NOEXCEPT
+            bool operator ==( bidirectional_iterator<IsConst2> const& rhs ) const CDS_NOEXCEPT
             {
                 return iterator_base::operator==( rhs );
             }
 
             template <bool IsConst2>
-            bool operator !=(bidirectional_iterator<IsConst2> const& rhs) const CDS_NOEXCEPT
+            bool operator !=( bidirectional_iterator<IsConst2> const& rhs ) const CDS_NOEXCEPT
             {
                 return !( *this == rhs );
             }
@@ -514,13 +517,13 @@ namespace cds { namespace intrusive {
             }
 
             template <bool IsConst2>
-            bool operator ==(reverse_bidirectional_iterator<IsConst2> const& rhs) const
+            bool operator ==( reverse_bidirectional_iterator<IsConst2> const& rhs ) const
             {
                 return iterator_base::operator==( rhs );
             }
 
             template <bool IsConst2>
-            bool operator !=(reverse_bidirectional_iterator<IsConst2> const& rhs)
+            bool operator !=( reverse_bidirectional_iterator<IsConst2> const& rhs )
             {
                 return !( *this == rhs );
             }
@@ -564,7 +567,7 @@ namespace cds { namespace intrusive {
 
             Equation for \p head_bits and \p array_bits:
             \code
-            sizeof(hash_type) * 8 == head_bits + N * array_bits
+            sizeof( hash_type ) * 8 == head_bits + N * array_bits
             \endcode
             where \p N is multi-level array depth.
         */
@@ -587,7 +590,7 @@ namespace cds { namespace intrusive {
         */
         bool insert( value_type& val )
         {
-            return insert( val, [](value_type&) {} );
+            return insert( val, []( value_type& ) {} );
         }
 
         /// Inserts new node
@@ -612,7 +615,7 @@ namespace cds { namespace intrusive {
         template <typename Func>
         bool insert( value_type& val, Func f )
         {
-            hash_type const& hash = hash_accessor()(val);
+            hash_type const& hash = hash_accessor()( val );
             traverse_data pos( hash, *this );
             hash_comparator cmp;
             typename gc::template GuardArray<2> guards;
@@ -623,13 +626,13 @@ namespace cds { namespace intrusive {
                 assert( slot.bits() == 0 );
 
                 // protect data node by hazard pointer
-                if (guards.protect( 0, pos.pArr->nodes[pos.nSlot], [](node_ptr p) -> value_type * { return p.ptr(); }) != slot ) {
+                if ( guards.protect( 0, pos.pArr->nodes[pos.nSlot], []( node_ptr p ) -> value_type* { return p.ptr(); }) != slot ) {
                     // slot value has been changed - retry
                     stats().onSlotChanged();
                 }
 
-                if (slot.ptr()) {
-                    if ( cmp( hash, hash_accessor()(*slot.ptr())) == 0 ) {
+                if ( slot.ptr()) {
+                    if ( cmp( hash, hash_accessor()( *slot.ptr())) == 0 ) {
                         // the item with that hash value already exists
                         stats().onInsertFailed();
                         return false;
@@ -641,13 +644,13 @@ namespace cds { namespace intrusive {
                 else {
                     // the slot is empty, try to insert data node
                     node_ptr pNull;
-                    if ( pos.pArr->nodes[pos.nSlot].compare_exchange_strong( pNull, node_ptr(&val), memory_model::memory_order_release, atomics::memory_order_relaxed ))
+                    if ( pos.pArr->nodes[pos.nSlot].compare_exchange_strong( pNull, node_ptr( &val ), memory_model::memory_order_release, atomics::memory_order_relaxed ))
                     {
                         // the new data node has been inserted
-                        f(val);
+                        f( val );
                         ++m_ItemCounter;
                         stats().onInsertSuccess();
-                        stats().height(pos.nHeight);
+                        stats().height( pos.nHeight );
                         return true;
                     }
 
@@ -675,7 +678,7 @@ namespace cds { namespace intrusive {
         */
         std::pair<bool, bool> update( value_type& val, bool bInsert = true )
         {
-            return do_update(val, [](value_type&, value_type *) {}, bInsert );
+            return do_update( val, []( value_type&, value_type* ) {}, bInsert );
         }
 
         /// Unlinks the item \p val from the set
@@ -688,7 +691,7 @@ namespace cds { namespace intrusive {
         bool unlink( value_type const& val )
         {
             typename gc::Guard guard;
-            auto pred = [&val](value_type const& item) -> bool { return &item == &val; };
+            auto pred = [&val]( value_type const& item ) -> bool { return &item == &val; };
             value_type * p = do_erase( hash_accessor()( val ), guard, std::ref( pred ));
             return p != nullptr;
         }
@@ -703,7 +706,7 @@ namespace cds { namespace intrusive {
         */
         bool erase( hash_type const& hash )
         {
-            return erase(hash, [](value_type const&) {} );
+            return erase( hash, []( value_type const& ) {} );
         }
 
         /// Deletes the item from the set
@@ -831,7 +834,7 @@ namespace cds { namespace intrusive {
         */
         bool contains( hash_type const& hash )
         {
-            return find( hash, [](value_type&) {} );
+            return find( hash, []( value_type& ) {} );
         }
 
         /// Finds an item by it's \p hash and returns the item found
@@ -909,15 +912,15 @@ namespace cds { namespace intrusive {
         using base_class::array_node_size;
 
         /// Collects tree level statistics into \p stat
-        /** @anchor cds_intrusive_FeldmanHashSet_hp_get_level_statistics
-            The function traverses the set and collects staistics for each level of the tree
+        /** 
+            The function traverses the set and collects statistics for each level of the tree
             into \p feldman_hashset::level_statistics struct. The element of \p stat[i]
             represents statistics for level \p i, level 0 is head array.
             The function is thread-safe and may be called in multi-threaded environment.
 
             Result can be useful for estimating efficiency of hash functor you use.
         */
-        void get_level_statistics(std::vector< feldman_hashset::level_statistics>& stat) const
+        void get_level_statistics( std::vector< feldman_hashset::level_statistics>& stat ) const
         {
             base_class::get_level_statistics( stat );
         }
@@ -1058,7 +1061,7 @@ namespace cds { namespace intrusive {
                     }
                     else if ( slot.bits() == base_class::flag_array_converting ) {
                         // the slot is converting to array node right now
-                        while ( (slot = pArr->load(memory_model::memory_order_acquire)).bits() == base_class::flag_array_converting ) {
+                        while (( slot = pArr->load( memory_model::memory_order_acquire )).bits() == base_class::flag_array_converting ) {
                             bkoff();
                             stats().onSlotConverting();
                         }
@@ -1092,17 +1095,17 @@ namespace cds { namespace intrusive {
             traverse_data pos( hash, *this );
             hash_comparator cmp;
 
-            while (true) {
+            while ( true ) {
                 node_ptr slot = base_class::traverse( pos );
-                assert(slot.bits() == 0);
+                assert( slot.bits() == 0 );
 
                 // protect data node by hazard pointer
-                if (guard.protect( pos.pArr->nodes[pos.nSlot], [](node_ptr p) -> value_type * { return p.ptr(); }) != slot) {
+                if ( guard.protect( pos.pArr->nodes[pos.nSlot], []( node_ptr p ) -> value_type* { return p.ptr(); }) != slot) {
                     // slot value has been changed - retry
                     stats().onSlotChanged();
                     continue;
                 }
-                else if (slot.ptr() && cmp(hash, hash_accessor()(*slot.ptr())) == 0) {
+                else if ( slot.ptr() && cmp( hash, hash_accessor()( *slot.ptr())) == 0 ) {
                     // item found
                     stats().onFindSuccess();
                     return slot.ptr();
@@ -1117,21 +1120,21 @@ namespace cds { namespace intrusive {
         {
             traverse_data pos( hash, *this );
             hash_comparator cmp;
-            while (true) {
+            while ( true ) {
                 node_ptr slot = base_class::traverse( pos );
-                assert(slot.bits() == 0);
+                assert( slot.bits() == 0 );
 
                 // protect data node by hazard pointer
-                if (guard.protect( pos.pArr->nodes[pos.nSlot], [](node_ptr p) -> value_type * { return p.ptr(); }) != slot) {
+                if ( guard.protect( pos.pArr->nodes[pos.nSlot], []( node_ptr p ) -> value_type* { return p.ptr(); }) != slot ) {
                     // slot value has been changed - retry
                     stats().onSlotChanged();
                 }
-                else if (slot.ptr()) {
-                    if ( cmp(hash, hash_accessor()(*slot.ptr())) == 0 && pred(*slot.ptr())) {
+                else if ( slot.ptr()) {
+                    if ( cmp( hash, hash_accessor()( *slot.ptr())) == 0 && pred( *slot.ptr())) {
                         // item found - replace it with nullptr
-                        if ( pos.pArr->nodes[pos.nSlot].compare_exchange_strong(slot, node_ptr(nullptr), memory_model::memory_order_acquire, atomics::memory_order_relaxed)) {
+                        if ( pos.pArr->nodes[pos.nSlot].compare_exchange_strong( slot, node_ptr( nullptr ), memory_model::memory_order_acquire, atomics::memory_order_relaxed)) {
                             // slot is guarded by HP
-                            gc::template retire<disposer>(slot.ptr());
+                            gc::template retire<disposer>( slot.ptr());
                             --m_ItemCounter;
                             stats().onEraseSuccess();
 
@@ -1155,15 +1158,17 @@ namespace cds { namespace intrusive {
         {
             if ( iter.m_set != this )
                 return false;
-            if ( iter.m_pNode == head() && iter.m_idx >= head_size())
-                return false;
-            if ( iter.m_idx >= array_node_size())
+            if ( iter.m_pNode == head()) {
+                if ( iter.m_idx >= head_size())
+                    return false;
+            }
+            else if ( iter.m_idx >= array_node_size())
                 return false;
 
             for (;;) {
                 node_ptr slot = iter.m_pNode->nodes[iter.m_idx].load( memory_model::memory_order_acquire );
                 if ( slot.bits() == 0 && slot.ptr() == iter.pointer()) {
-                    if ( iter.m_pNode->nodes[iter.m_idx].compare_exchange_strong(slot, node_ptr(nullptr), memory_model::memory_order_acquire, atomics::memory_order_relaxed)) {
+                    if ( iter.m_pNode->nodes[iter.m_idx].compare_exchange_strong( slot, node_ptr( nullptr ), memory_model::memory_order_acquire, atomics::memory_order_relaxed )) {
                         // the item is guarded by iterator, so we may retire it safely
                         gc::template retire<disposer>( slot.ptr());
                         --m_ItemCounter;
@@ -1185,30 +1190,30 @@ namespace cds { namespace intrusive {
             typename gc::template GuardArray<2> guards;
 
             guards.assign( 1, &val );
-            while (true) {
+            while ( true ) {
                 node_ptr slot = base_class::traverse( pos );
-                assert(slot.bits() == 0);
+                assert( slot.bits() == 0 );
 
                 // protect data node by hazard pointer
-                if ( guards.protect( 0, pos.pArr->nodes[pos.nSlot], [](node_ptr p) -> value_type * { return p.ptr(); }) != slot ) {
+                if ( guards.protect( 0, pos.pArr->nodes[pos.nSlot], []( node_ptr p ) -> value_type* { return p.ptr(); }) != slot ) {
                     // slot value has been changed - retry
                     stats().onSlotChanged();
                 }
                 else if ( slot.ptr()) {
-                    if ( cmp( hash, hash_accessor()(*slot.ptr())) == 0 ) {
+                    if ( cmp( hash, hash_accessor()( *slot.ptr())) == 0 ) {
                         // the item with that hash value already exists
                         // Replace it with val
                         if ( slot.ptr() == &val ) {
                             stats().onUpdateExisting();
-                            return std::make_pair(true, false);
+                            return std::make_pair( true, false );
                         }
 
-                        if ( pos.pArr->nodes[pos.nSlot].compare_exchange_strong(slot, node_ptr(&val), memory_model::memory_order_release, atomics::memory_order_relaxed)) {
+                        if ( pos.pArr->nodes[pos.nSlot].compare_exchange_strong( slot, node_ptr( &val ), memory_model::memory_order_release, atomics::memory_order_relaxed )) {
                             // slot can be disposed
                             f( val, slot.ptr());
                             gc::template retire<disposer>( slot.ptr());
                             stats().onUpdateExisting();
-                            return std::make_pair(true, false);
+                            return std::make_pair( true, false );
                         }
 
                         stats().onUpdateRetry();
@@ -1221,26 +1226,26 @@ namespace cds { namespace intrusive {
                     }
                     else {
                         stats().onUpdateFailed();
-                        return std::make_pair(false, false);
+                        return std::make_pair( false, false );
                     }
                 }
                 else {
                     // the slot is empty, try to insert data node
                     if ( bInsert ) {
                         node_ptr pNull;
-                        if ( pos.pArr->nodes[pos.nSlot].compare_exchange_strong(pNull, node_ptr(&val), memory_model::memory_order_release, atomics::memory_order_relaxed))
+                        if ( pos.pArr->nodes[pos.nSlot].compare_exchange_strong( pNull, node_ptr( &val ), memory_model::memory_order_release, atomics::memory_order_relaxed ))
                         {
                             // the new data node has been inserted
-                            f(val, nullptr);
+                            f( val, nullptr );
                             ++m_ItemCounter;
                             stats().onUpdateNew();
                             stats().height( pos.nHeight );
-                            return std::make_pair(true, true);
+                            return std::make_pair( true, true );
                         }
                     }
                     else {
                         stats().onUpdateFailed();
-                        return std::make_pair(false, false);
+                        return std::make_pair( false, false );
                     }
 
                     // insert failed - slot has been changed by another thread
index 459111f7a5f492f2e0f8c3e20e3d2a644b7c6fbb..24970fc6d97d61cce9a9fad9706654f7be5612ea 100644 (file)
@@ -192,7 +192,7 @@ namespace cds { namespace intrusive {
         typedef typename hook::node_type node_type; ///< node type
 
 #   ifdef CDS_DOXYGEN_INVOKED
-        typedef implementation_defined key_comparator  ;    ///< key comparison functor based on opt::compare and opt::less option setter.
+        typedef implementation_defined key_comparator;    ///< key comparison functor based on opt::compare and opt::less option setter.
 #   else
         typedef typename opt::details::make_comparator< value_type, traits >::type key_comparator;
 #   endif
@@ -201,12 +201,14 @@ namespace cds { namespace intrusive {
         typedef typename get_node_traits< value_type, node_type, hook>::type node_traits; ///< node traits
         typedef typename lazy_list::get_link_checker< node_type, traits::link_checker >::type link_checker; ///< link checker
 
-        typedef typename traits::back_off  back_off    ;   ///< back-off strategy
-        typedef typename traits::item_counter item_counter ;   ///< Item counting policy used
-        typedef typename traits::memory_model  memory_model;   ///< C++ memory ordering (see \p lazy_list::traits::memory_model)
+        typedef typename traits::back_off  back_off;         ///< back-off strategy
+        typedef typename traits::item_counter item_counter;  ///< Item counting policy used
+        typedef typename traits::memory_model  memory_model; ///< C++ memory ordering (see \p lazy_list::traits::memory_model)
 
         typedef typename gc::template guarded_ptr< value_type > guarded_ptr; ///< Guarded pointer
 
+        static CDS_CONSTEXPR const size_t c_nHazardPtrCount = 4; ///< Count of hazard pointer required for the algorithm
+
         //@cond
         // Rebind traits (split-list support)
         template <typename... Options>
@@ -215,7 +217,7 @@ namespace cds { namespace intrusive {
                 gc
                 , value_type
                 , typename cds::opt::make_options< traits, Options...>::type
-            >   type;
+            > type;
         };
         //@endcond
 
@@ -228,7 +230,7 @@ namespace cds { namespace intrusive {
         node_type   m_Head;
         node_type   m_Tail;
 
-        item_counter    m_ItemCounter   ;   ///< Item counter
+        item_counter    m_ItemCounter;
 
         //@cond
         struct clean_disposer {
@@ -241,10 +243,10 @@ namespace cds { namespace intrusive {
 
         /// Position pointer for item search
         struct position {
-            node_type *     pPred   ;    ///< Previous node
-            node_type *     pCur    ;    ///< Current node
+            node_type *     pPred; ///< Previous node
+            node_type *     pCur;  ///< Current node
 
-            typename gc::template GuardArray<2> guards  ;   ///< Guards array
+            typename gc::template GuardArray<2> guards; ///< Guards array
 
             enum {
                 guard_prev_item,
@@ -274,6 +276,7 @@ namespace cds { namespace intrusive {
         void link_node( node_type * pNode, node_type * pPred, node_type * pCur )
         {
             assert( pPred->m_pNext.load(memory_model::memory_order_relaxed).ptr() == pCur );
+            link_checker::is_empty( pNode );
 
             pNode->m_pNext.store( marked_node_ptr(pCur), memory_model::memory_order_release );
             pPred->m_pNext.store( marked_node_ptr(pNode), memory_model::memory_order_release );
@@ -406,6 +409,8 @@ namespace cds { namespace intrusive {
         //@endcond
 
     public:
+    ///@name Forward iterators (only for debugging purpose)
+    //@{
         /// Forward iterator
         /**
             The forward iterator for lazy list has some features:
@@ -416,9 +421,9 @@ namespace cds { namespace intrusive {
             - The iterator cannot be moved across thread boundary since it contains GC's guard that is thread-private GC data.
             - Iterator ensures thread-safety even if you delete the item that iterator points to. However, in case of concurrent
               deleting operations it is no guarantee that you iterate all item in the list.
+              Moreover, a crash is possible when you try to iterate the next element that has been deleted by concurrent thread.
 
-            Therefore, the use of iterators in concurrent environment is not good idea. Use the iterator on the concurrent container
-            for debug purpose only.
+            @warning Use this iterator on the concurrent container for debugging purpose only.
         */
         typedef iterator_type<false>    iterator;
         /// Const forward iterator
@@ -451,28 +456,29 @@ namespace cds { namespace intrusive {
         }
 
         /// Returns a forward const iterator addressing the first element in a list
-        //@{
         const_iterator begin() const
         {
             return get_const_begin();
         }
+
+        /// Returns a forward const iterator addressing the first element in a list
         const_iterator cbegin() const
         {
             return get_const_begin();
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a list
-        //@{
         const_iterator end() const
         {
             return get_const_end();
         }
+
+        /// Returns an const iterator that addresses the location succeeding the last element in a list
         const_iterator cend() const
         {
             return get_const_end();
         }
-        //@}
+    //@}
 
     private:
         //@cond
@@ -595,6 +601,8 @@ namespace cds { namespace intrusive {
             is equal to <tt> &val </tt>.
 
             The function returns \p true if success and \p false otherwise.
+
+            \p disposer specified in \p Traits is called for unlinked item.
         */
         bool unlink( value_type& val )
         {
@@ -606,6 +614,8 @@ namespace cds { namespace intrusive {
             The function searches an item with key equal to \p key in the list,
             unlinks it from the list, and returns \p true.
             If the item with the key equal to \p key is not found the function return \p false.
+
+            \p disposer specified in \p Traits is called for deleted item.
         */
         template <typename Q>
         bool erase( Q const& key )
@@ -619,6 +629,8 @@ namespace cds { namespace intrusive {
             but \p pred is used for key comparing.
             \p Less functor has the interface like \p std::less.
             \p pred must imply the same element order as the comparator used for building the list.
+
+            \p disposer specified in \p Traits is called for deleted item.
         */
         template <typename Q, typename Less>
         bool erase_with( Q const& key, Less pred )
@@ -639,6 +651,8 @@ namespace cds { namespace intrusive {
             \endcode
 
             If \p key is not found the function return \p false.
+
+            \p disposer specified in \p Traits is called for deleted item.
         */
         template <typename Q, typename Func>
         bool erase( const Q& key, Func func )
@@ -652,6 +666,8 @@ namespace cds { namespace intrusive {
             but \p pred is used for key comparing.
             \p Less functor has the interface like \p std::less.
             \p pred must imply the same element order as the comparator used for building the list.
+
+            \p disposer specified in \p Traits is called for deleted item.
         */
         template <typename Q, typename Less, typename Func>
         bool erase_with( const Q& key, Less pred, Func func )
@@ -872,6 +888,7 @@ namespace cds { namespace intrusive {
                     h->m_Lock.lock();
 
                     unlink_node( &m_Head, h.ptr(), &m_Head );
+                    --m_ItemCounter;
 
                     h->m_Lock.unlock();
                     m_Head.m_Lock.unlock();
@@ -921,7 +938,6 @@ namespace cds { namespace intrusive {
 
         bool insert_at( node_type * pHead, value_type& val )
         {
-            link_checker::is_empty( node_traits::to_node_ptr( val ));
             position pos;
             key_comparator  cmp;
 
@@ -947,7 +963,6 @@ namespace cds { namespace intrusive {
         template <typename Func>
         bool insert_at( node_type * pHead, value_type& val, Func f )
         {
-            link_checker::is_empty( node_traits::to_node_ptr( val ));
             position pos;
             key_comparator  cmp;
 
@@ -993,8 +1008,6 @@ namespace cds { namespace intrusive {
                             if ( !bAllowInsert )
                                 return std::make_pair( false, false );
 
-                            link_checker::is_empty( node_traits::to_node_ptr( val ));
-
                             link_node( node_traits::to_node_ptr( val ), pos.pPred, pos.pCur );
                             func( true, val, val );
                             ++m_ItemCounter;
index cc15632240c56dcd065a4a67b4ac4b00412152c1..63be73333fefc460b87f57b39fad5d24fccfa6c0 100644 (file)
@@ -211,6 +211,8 @@ namespace cds { namespace intrusive {
 
         typedef typename gc::template guarded_ptr< value_type > guarded_ptr; ///< Guarded pointer
 
+        static CDS_CONSTEXPR const size_t c_nHazardPtrCount = 4; ///< Count of hazard pointer required for the algorithm
+
         //@cond
         // Rebind traits (split-list support)
         template <typename... Options>
@@ -406,6 +408,8 @@ namespace cds { namespace intrusive {
         //@endcond
 
     public:
+    ///@name Forward iterators (only for debugging purpose)
+    //@{
         /// Forward iterator
         /**
             The forward iterator for Michael's list has some features:
@@ -415,10 +419,10 @@ namespace cds { namespace intrusive {
               may be thrown if the limit of guard count per thread is exceeded.
             - The iterator cannot be moved across thread boundary since it contains thread-private GC's guard.
             - Iterator ensures thread-safety even if you delete the item the iterator points to. However, in case of concurrent
-              deleting operations there is no guarantee that you iterate all item in the list.
+              deleting operations there is no guarantee that you iterate all item in the list. 
+              Moreover, a crash is possible when you try to iterate the next element that has been deleted by concurrent thread.
 
-            Therefore, the use of iterators in concurrent environment is not good idea. Use the iterator on the concurrent container
-            for debug purpose only.
+            @warning Use this iterator on the concurrent container for debugging purpose only.
 
             The iterator interface:
             \code
@@ -500,6 +504,7 @@ namespace cds { namespace intrusive {
         {
             return const_iterator();
         }
+    //@}
 
     public:
         /// Default constructor initializes empty list
@@ -604,6 +609,8 @@ namespace cds { namespace intrusive {
             only if \p val is an item of the list, i.e. the pointer to item found
             is equal to <tt> &val </tt>.
 
+            \p disposer specified in \p Traits is called for deleted item.
+
             The function returns \p true if success and \p false otherwise.
         */
         bool unlink( value_type& val )
@@ -616,6 +623,8 @@ namespace cds { namespace intrusive {
             The function searches an item with key equal to \p key in the list,
             unlinks it from the list, and returns \p true.
             If \p key is not found the function return \p false.
+
+            \p disposer specified in \p Traits is called for deleted item.
         */
         template <typename Q>
         bool erase( Q const& key )
@@ -629,6 +638,8 @@ namespace cds { namespace intrusive {
             but \p pred is used for key comparing.
             \p Less functor has the interface like \p std::less.
             \p pred must imply the same element order as the comparator used for building the list.
+
+            \p disposer specified in \p Traits is called for deleted item.
         */
         template <typename Q, typename Less>
         bool erase_with( Q const& key, Less pred )
@@ -648,6 +659,8 @@ namespace cds { namespace intrusive {
             };
             \endcode
             If \p key is not found the function return \p false, \p func is not called.
+
+            \p disposer specified in \p Traits is called for deleted item.
         */
         template <typename Q, typename Func>
         bool erase( Q const& key, Func func )
@@ -661,6 +674,8 @@ namespace cds { namespace intrusive {
             but \p pred is used for key comparing.
             \p Less functor has the interface like \p std::less.
             \p pred must imply the same element order as the comparator used for building the list.
+
+            \p disposer specified in \p Traits is called for deleted item.
         */
         template <typename Q, typename Less, typename Func>
         bool erase_with( Q const& key, Less pred, Func f )
@@ -935,7 +950,6 @@ namespace cds { namespace intrusive {
         bool insert_at( atomic_node_ptr& refHead, value_type& val )
         {
             node_type * pNode = node_traits::to_node_ptr( val );
-            link_checker::is_empty( pNode );
             position pos;
 
             while ( true ) {
@@ -956,7 +970,6 @@ namespace cds { namespace intrusive {
         bool insert_at( atomic_node_ptr& refHead, value_type& val, Func f )
         {
             node_type * pNode = node_traits::to_node_ptr( val );
-            link_checker::is_empty( pNode );
             position pos;
 
             while ( true ) {
index 1e3e876b987e6240a16e8383b83734df4ade291d..5fd0545f23cd2609667be9bebc6b31abf4d1d8b6 100644 (file)
@@ -391,6 +391,11 @@ namespace cds { namespace intrusive {
         static unsigned int const c_nMinHeight = 5;
         //@endcond
 
+        // c_nMaxHeight * 2 - pPred/pSucc guards
+        // + 1 - for erase, unlink
+        // + 1 - for clear
+        static size_t const c_nHazardPtrCount = c_nMaxHeight * 2 + 2; ///< Count of hazard pointer required for the skip-list
+
     protected:
         typedef typename node_type::atomic_marked_ptr   atomic_node_ptr;   ///< Atomic marked node pointer
         typedef typename node_type::marked_ptr          marked_node_ptr;   ///< Node marked pointer
@@ -407,10 +412,6 @@ namespace cds { namespace intrusive {
 
         typedef std::unique_ptr< node_type, typename node_builder::node_disposer > scoped_node_ptr;
 
-        // c_nMaxHeight * 2 - pPred/pSucc guards
-        // + 1 - for erase, unlink
-        // + 1 - for clear
-        static size_t const c_nHazardPtrCount = c_nMaxHeight * 2 + 2;
         struct position {
             node_type *   pPrev[ c_nMaxHeight ];
             node_type *   pSucc[ c_nMaxHeight ];
@@ -990,7 +991,50 @@ namespace cds { namespace intrusive {
         }
 
     public:
+    ///@name Forward iterators (only for debugging purpose)
+    //@{
         /// Iterator type
+        /**
+            The forward iterator has some features:
+            - it has no post-increment operator
+            - to protect the value, the iterator contains a GC-specific guard + another guard is required locally for increment operator.
+              For some GC (like as \p gc::HP), a guard is a limited resource per thread, so an exception (or assertion) "no free guard"
+              may be thrown if the limit of guard count per thread is exceeded.
+            - The iterator cannot be moved across thread boundary because it contains thread-private GC's guard.
+            - Iterator ensures thread-safety even if you delete the item the iterator points to. However, in case of concurrent
+              deleting operations there is no guarantee that you iterate all item in the list. 
+              Moreover, a crash is possible when you try to iterate the next element that has been deleted by concurrent thread.
+
+            @warning Use this iterator on the concurrent container for debugging purpose only.
+
+            The iterator interface:
+            \code
+            class iterator {
+            public:
+                // Default constructor
+                iterator();
+
+                // Copy construtor
+                iterator( iterator const& src );
+
+                // Dereference operator
+                value_type * operator ->() const;
+
+                // Dereference operator
+                value_type& operator *() const;
+
+                // Preincrement operator
+                iterator& operator ++();
+
+                // Assignment operator
+                iterator& operator = (iterator const& src);
+
+                // Equality operators
+                bool operator ==(iterator const& i ) const;
+                bool operator !=(iterator const& i ) const;
+            };
+            \endcode
+        */
         typedef skip_list::details::iterator< gc, node_traits, back_off, false >  iterator;
 
         /// Const iterator type
@@ -1029,6 +1073,7 @@ namespace cds { namespace intrusive {
         {
             return const_iterator();
         }
+    //@}
 
     public:
         /// Inserts new node
index e43bd3f5e00cb322da6f7299314cadaca2a022d7..cd31be7b7809bb67cdfdf32364a1dbf551462bf9 100644 (file)
@@ -201,6 +201,7 @@ namespace cds { namespace intrusive {
 
         void link_node( node_type * pNode, node_type * pPred, node_type * pCur )
         {
+            link_checker::is_empty( pNode );
             assert( pPred->m_pNext.load(memory_model::memory_order_relaxed) == pCur );
 
             pNode->m_pNext.store( pCur, memory_model::memory_order_release );
@@ -558,6 +559,7 @@ namespace cds { namespace intrusive {
             while ( pHead != &m_Tail ) {
                 node_type * p = pHead->m_pNext.load(memory_model::memory_order_relaxed);
                 dispose_node( pHead, disp );
+                --m_ItemCounter;
                 pHead = p;
             }
         }
@@ -612,7 +614,6 @@ namespace cds { namespace intrusive {
 
         bool insert_at( node_type * pHead, value_type& val )
         {
-            link_checker::is_empty( node_traits::to_node_ptr( val ) );
             position pos;
             key_comparator pred;
 
@@ -665,8 +666,6 @@ namespace cds { namespace intrusive {
                             if ( !bAllowInsert )
                                 return std::make_pair( end(), false );
 
-                            link_checker::is_empty( node_traits::to_node_ptr( val ) );
-
                             link_node( node_traits::to_node_ptr( val ), pos.pPred, pos.pCur );
                             func( true, val, val );
                             ++m_ItemCounter;
@@ -778,6 +777,25 @@ namespace cds { namespace intrusive {
             return pPred->m_pNext.load(memory_model::memory_order_acquire) == pCur;
         }
 
+        // for split-list
+        template <typename Predicate>
+        void erase_for( Predicate pred )
+        {
+            node_type * pPred = nullptr;
+            node_type * pHead = m_Head.m_pNext.load( memory_model::memory_order_relaxed );
+
+            while ( pHead != &m_Tail ) {
+                node_type * p = pHead->m_pNext.load( memory_model::memory_order_relaxed );
+                if ( pred( *node_traits::to_value_ptr( pHead ))) {
+                    assert( pPred != nullptr );
+                    pPred->m_pNext.store( p, memory_model::memory_order_relaxed );
+                    dispose_node( pHead, disposer() );
+                }
+                else
+                    pPred = pHead;
+                pHead = p;
+            }
+        }
         //@endcond
     };
 
index de34c4f851023b405602237cf723075a6eb3f20c..244e42865ca5f6e23b50cfdd6e318354ed796fe2 100644 (file)
@@ -228,6 +228,7 @@ namespace cds { namespace intrusive {
         static void link_node( node_type * pNode, node_type * pPred, node_type * pCur )
         {
             assert( pPred->m_pNext.load(memory_model::memory_order_relaxed).ptr() == pCur );
+            link_checker::is_empty( pNode );
 
             pNode->m_pNext.store( marked_node_ptr(pCur), memory_model::memory_order_relaxed );
             pPred->m_pNext.store( marked_node_ptr(pNode), memory_model::memory_order_release );
@@ -351,8 +352,15 @@ namespace cds { namespace intrusive {
         //@endcond
 
     public:
+    ///@name Forward iterators (thread-safe only under RCU lock)
+    //@{
         /// Forward iterator
+        /**
+            You may safely use iterators in multi-threaded environment only under RCU lock.
+            Otherwise, a crash is possible if another thread deletes the item the iterator points to.
+        */
         typedef iterator_type<false>    iterator;
+
         /// Const forward iterator
         typedef iterator_type<true>     const_iterator;
 
@@ -380,28 +388,29 @@ namespace cds { namespace intrusive {
         }
 
         /// Returns a forward const iterator addressing the first element in a list
-        //@{
         const_iterator begin() const
         {
             return get_const_begin();
         }
+
+        /// Returns a forward const iterator addressing the first element in a list
         const_iterator cbegin() const
         {
             return get_const_begin();
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a list
-        //@{
         const_iterator end() const
         {
             return get_const_end();
         }
+
+        /// Returns an const iterator that addresses the location succeeding the last element in a list
         const_iterator cend() const
         {
             return get_const_end();
         }
-        //@}
+    //@}
 
     private:
         //@cond
@@ -510,15 +519,15 @@ namespace cds { namespace intrusive {
         {
             return update( val, func, true );
         }
-        //@cond
+        //@endcond
 
         /// Unlinks the item \p val from the list
         /**
             The function searches the item \p val in the list and unlink it from the list
             if it is found and it is equal to \p val.
 
-            Difference between \ref erase and \p unlink functions: \p erase finds <i>a key</i>
-            and deletes the item found. \p unlink finds an item by key and deletes it
+            Difference between \p erase() and \p %unlink() functions: \p %erase() finds <i>a key</i>
+            and deletes the item found. \p %unlink() finds an item by key and deletes it
             only if \p val is an item of that list, i.e. the pointer to item found
             is equal to <tt> &val </tt>.
 
@@ -527,8 +536,10 @@ namespace cds { namespace intrusive {
             RCU \p synchronize method can be called. The RCU should not be locked.
             Note that depending on RCU type used the \ref disposer call can be deferred.
 
-            The function can throw cds::urcu::rcu_deadlock exception if deadlock is encountered and
-            deadlock checking policy is opt::v::rcu_throw_deadlock.
+            \p disposer specified in \p Traits is called for unlinked item.
+
+            The function can throw \p cds::urcu::rcu_deadlock exception if deadlock is encountered and
+            deadlock checking policy is \p opt::v::rcu_throw_deadlock.
         */
         bool unlink( value_type& val )
         {
@@ -536,7 +547,7 @@ namespace cds { namespace intrusive {
         }
 
         /// Deletes the item from the list
-        /** \anchor cds_intrusive_LazyList_rcu_find_erase
+        /**
             The function searches an item with key equal to \p key in the list,
             unlinks it from the list, and returns \p true.
             If the item with the key equal to \p key is not found the function return \p false.
@@ -544,8 +555,10 @@ namespace cds { namespace intrusive {
             RCU \p synchronize method can be called. The RCU should not be locked.
             Note that depending on RCU type used the \ref disposer call can be deferred.
 
+            \p disposer specified in \p Traits is called for deleted item.
+
             The function can throw \ref cds_urcu_rcu_deadlock "cds::urcu::rcu_deadlock" exception if deadlock is encountered and
-            deadlock checking policy is opt::v::rcu_throw_deadlock.
+            deadlock checking policy is \p opt::v::rcu_throw_deadlock.
         */
         template <typename Q>
         bool erase( Q const& key )
@@ -555,10 +568,12 @@ namespace cds { namespace intrusive {
 
         /// Deletes the item from the list using \p pred predicate for searching
         /**
-            The function is an analog of \ref cds_intrusive_LazyList_rcu_find_erase "erase(Q const&)"
+            The function is an analog of \p erase(Q const&)
             but \p pred is used for key comparing.
             \p Less functor has the interface like \p std::less.
             \p pred must imply the same element order as the comparator used for building the list.
+
+            \p disposer specified in \p Traits is called for deleted item.
         */
         template <typename Q, typename Less>
         bool erase_with( Q const& key, Less pred )
@@ -568,7 +583,7 @@ namespace cds { namespace intrusive {
         }
 
         /// Deletes the item from the list
-        /** \anchor cds_intrusive_LazyList_rcu_find_erase_func
+        /**
             The function searches an item with key equal to \p key in the list,
             call \p func functor with item found, unlinks it from the list, and returns \p true.
             The \p Func interface is
@@ -583,8 +598,10 @@ namespace cds { namespace intrusive {
             RCU \p synchronize method can be called. The RCU should not be locked.
             Note that depending on RCU type used the \ref disposer call can be deferred.
 
+            \p disposer specified in \p Traits is called for deleted item.
+
             The function can throw \ref cds_urcu_rcu_deadlock "cds::urcu::rcu_deadlock" exception if deadlock is encountered and
-            deadlock checking policy is opt::v::rcu_throw_deadlock.
+            deadlock checking policy is \p opt::v::rcu_throw_deadlock.
         */
         template <typename Q, typename Func>
         bool erase( Q const& key, Func func )
@@ -594,10 +611,12 @@ namespace cds { namespace intrusive {
 
         /// Deletes the item from the list using \p pred predicate for searching
         /**
-            The function is an analog of \ref cds_intrusive_LazyList_rcu_find_erase_func "erase(Q const&, Func)"
+            The function is an analog of \p erase(Q const&, Func)
             but \p pred is used for key comparing.
             \p Less functor has the interface like \p std::less.
             \p pred must imply the same element order as the comparator used for building the list.
+
+            \p disposer specified in \p Traits is called for deleted item.
         */
         template <typename Q, typename Less, typename Func>
         bool erase_with( Q const& key, Less pred, Func func )
@@ -608,7 +627,6 @@ namespace cds { namespace intrusive {
 
         /// Extracts an item from the list
         /**
-        \anchor cds_intrusive_LazyList_rcu_extract
             The function searches an item with key equal to \p key in the list,
             unlinks it from the list, and returns \ref cds::urcu::exempt_ptr "exempt_ptr" pointer to an item found.
             If the item is not found the function returns empty \p exempt_ptr.
@@ -616,8 +634,8 @@ namespace cds { namespace intrusive {
             @note The function does NOT call RCU read-side lock or synchronization,
             and does NOT dispose the item found. It just unlinks the item from the list
             and returns a pointer to it.
-            You should manually lock RCU before calling this function, and you should manually synchronize RCU
-            outside the RCU lock region before reusing returned pointer.
+            You should manually lock RCU before calling this function, and you should manually release
+            the returned exempt pointer outside the RCU lock region before reusing returned pointer.
 
             \code
             #include <cds/urcu/general_buffered.h>
@@ -671,7 +689,7 @@ namespace cds { namespace intrusive {
         }
 
         /// Finds the key \p key
-        /** \anchor cds_intrusive_LazyList_rcu_find_func
+        /**
             The function searches the item with key equal to \p key
             and calls the functor \p f for item found.
             The interface of \p Func functor is:
@@ -702,7 +720,7 @@ namespace cds { namespace intrusive {
 
         /// Finds the key \p key using \p pred predicate for searching
         /**
-            The function is an analog of <tt>contains( key )</tt> but \p pred is used for key comparing.
+            The function is an analog of \p find( Q&, Func ) but \p pred is used for key comparing.
             \p Less functor has the interface like \p std::less.
             \p pred must imply the same element order as the comparator used for building the list.
         */
@@ -742,7 +760,7 @@ namespace cds { namespace intrusive {
 
         /// Checks whether the map contains \p key using \p pred predicate for searching
         /**
-            The function is an analog of <tt>contains( key )</tt> but \p pred is used for key comparing.
+            The function is an analog of \p contains( Q const& ) but \p pred is used for key comparing.
             \p Less functor has the interface like \p std::less.
             \p Less must imply the same element order as the comparator used for building the list.
         */
@@ -897,7 +915,6 @@ namespace cds { namespace intrusive {
         template <typename Func>
         bool insert_at( node_type * pHead, value_type& val, Func f )
         {
-            link_checker::is_empty( node_traits::to_node_ptr( val ));
             position pos;
             key_comparator  cmp;
 
@@ -1165,7 +1182,6 @@ namespace cds { namespace intrusive {
             // RCU lock should be locked
             assert( gc::is_locked());
 
-            link_checker::is_empty( node_traits::to_node_ptr( val ));
             position pos;
             key_comparator  cmp;
 
@@ -1212,8 +1228,6 @@ namespace cds { namespace intrusive {
                             if ( !bAllowInsert )
                                 return std::make_pair( end(), false );
 
-                            link_checker::is_empty( node_traits::to_node_ptr( val ));
-
                             func( true, val, val );
                             link_node( node_traits::to_node_ptr( val ), pos.pPred, pos.pCur );
                             ++m_ItemCounter;
index dd4e2e42adacc0d1677adf7adaab5426b7a043d8..b50a41c900a6d37b4f4d1e824881075dfa3d46a0 100644 (file)
@@ -31,7 +31,7 @@
 #ifndef CDSLIB_INTRUSIVE_MICHAEL_LIST_HP_H
 #define CDSLIB_INTRUSIVE_MICHAEL_LIST_HP_H
 
-#include <cds/intrusive/impl/michael_list.h>
 #include <cds/gc/hp.h>
+#include <cds/intrusive/impl/michael_list.h>
 
 #endif // #ifndef CDSLIB_INTRUSIVE_MICHAEL_LIST_HP_H
index e8ba4dd07f4b8e36ecf616b730f38b3ec34e962e..de48a4bf4fb09acf3b4c431e38bac3000fadf3d5 100644 (file)
@@ -530,7 +530,6 @@ namespace cds { namespace intrusive {
 
         bool insert_at( atomic_node_ptr& refHead, value_type& val )
         {
-            link_checker::is_empty( node_traits::to_node_ptr( val ) );
             position pos;
 
             while ( true ) {
@@ -567,8 +566,6 @@ namespace cds { namespace intrusive {
                     if ( !bAllowInsert )
                         return std::make_pair( end(), false );
 
-                    link_checker::is_empty( node_traits::to_node_ptr( val ) );
-
                     if ( link_node( node_traits::to_node_ptr( val ), pos ) ) {
                         ++m_ItemCounter;
                         func( true, val , val );
@@ -669,6 +666,25 @@ namespace cds { namespace intrusive {
                 pCur = pNext;
             }
         }
+
+        // for split-list
+        template <typename Predicate>
+        void erase_for( Predicate pred )
+        {
+            node_type * pPred = nullptr;
+            node_type * pHead = m_pHead.load( memory_model::memory_order_relaxed );
+            while ( pHead ) {
+                node_type * p = pHead->m_pNext.load( memory_model::memory_order_relaxed );
+                if ( pred( *node_traits::to_value_ptr( pHead ))) {
+                    assert( pPred != nullptr );
+                    pPred->m_pNext.store( p, memory_model::memory_order_relaxed );
+                    dispose_node( pHead, disposer());
+                }
+                else
+                    pPred = pHead;
+                pHead = p;
+            }
+        }
         //@endcond
     };
 
index 31cc563d97d9953a896cb5e196b29b386a21a33b..b19cf84a2f0d12e1af5280089ca5fb61eb47aff2 100644 (file)
@@ -371,8 +371,15 @@ namespace cds { namespace intrusive {
         //@endcond
 
     public:
+    ///@name Forward iterators (thread-safe only under RCU lock)
+    //@{
         /// Forward iterator
+        /**
+            You may safely use iterators in multi-threaded environment only under RCU lock.
+            Otherwise, a crash is possible if another thread deletes the item the iterator points to.
+        */
         typedef iterator_type<false>    iterator;
+
         /// Const forward iterator
         typedef iterator_type<true>     const_iterator;
 
@@ -419,6 +426,7 @@ namespace cds { namespace intrusive {
         {
             return const_iterator();
         }
+    //@}
 
     public:
         /// Default constructor initializes empty list
@@ -518,14 +526,15 @@ namespace cds { namespace intrusive {
         {
             return update( val, func, true );
         }
+        //@endcond
 
         /// Unlinks the item \p val from the list
         /**
             The function searches the item \p val in the list and unlink it from the list
             if it is found and it is equal to \p val.
 
-            Difference between \ref erase and \p unlink functions: \p erase finds <i>a key</i>
-            and deletes the item found. \p unlink finds an item by key and deletes it
+            Difference between \p erase() and \p %unlink() functions: \p %erase() finds <i>a key</i>
+            and deletes the item found. \p %unlink() finds an item by key and deletes it
             only if \p val is an item of that list, i.e. the pointer to the item found
             is equal to <tt> &val </tt>.
 
@@ -534,6 +543,8 @@ namespace cds { namespace intrusive {
             RCU \p synchronize method can be called.
             Note that depending on RCU type used the \ref disposer call can be deferred.
 
+            \p disposer specified in \p Traits is called for unlinked item.
+
             The function can throw cds::urcu::rcu_deadlock exception if deadlock is encountered and
             deadlock checking policy is opt::v::rcu_throw_deadlock.
         */
@@ -543,7 +554,7 @@ namespace cds { namespace intrusive {
         }
 
         /// Deletes the item from the list
-        /** \anchor cds_intrusive_MichaelList_rcu_erase_val
+        /**
             The function searches an item with key equal to \p key in the list,
             unlinks it from the list, and returns \p true.
             If the item with the key equal to \p key is not found the function return \p false.
@@ -551,6 +562,8 @@ namespace cds { namespace intrusive {
             RCU \p synchronize method can be called.
             Note that depending on RCU type used the \ref disposer call can be deferred.
 
+            \p disposer specified in \p Traits is called for deleted item.
+
             The function can throw \ref cds_urcu_rcu_deadlock "cds::urcu::rcu_deadlock" exception if a deadlock is detected and
             the deadlock checking policy is \p opt::v::rcu_throw_deadlock.
         */
@@ -562,10 +575,12 @@ namespace cds { namespace intrusive {
 
         /// Deletes the item from the list using \p pred predicate for searching
         /**
-            The function is an analog of \ref cds_intrusive_MichaelList_rcu_erase_val "erase(Q const&)"
+            The function is an analog of \p erase(Q const&)
             but \p pred is used for key comparing.
             \p Less functor has the interface like \p std::less.
             \p pred must imply the same element order as the comparator used for building the list.
+
+            \p disposer specified in \p Traits is called for deleted item.
         */
         template <typename Q, typename Less>
         bool erase_with( Q const& key, Less pred )
@@ -575,7 +590,7 @@ namespace cds { namespace intrusive {
         }
 
         /// Deletes the item from the list
-        /** \anchor cds_intrusive_MichaelList_rcu_erase_func
+        /**
             The function searches an item with key equal to \p key in the list,
             call \p func functor with item found, unlinks it from the list, and returns \p true.
             The \p Func interface is
@@ -590,6 +605,8 @@ namespace cds { namespace intrusive {
             RCU \p synchronize method can be called.
             Note that depending on RCU type used the \ref disposer call can be deferred.
 
+            \p disposer specified in \p Traits is called for deleted item.
+
             The function can throw \ref cds_urcu_rcu_deadlock "cds::urcu::rcu_deadlock" exception if a deadlock is detected and
             the deadlock checking policy is \p opt::v::rcu_throw_deadlock.
         */
@@ -601,10 +618,12 @@ namespace cds { namespace intrusive {
 
         /// Deletes the item from the list using \p pred predicate for searching
         /**
-            The function is an analog of \ref cds_intrusive_MichaelList_rcu_erase_func "erase(Q const&, Func)"
+            The function is an analog of \p erase(Q const&, Func)
             but \p pred is used for key comparing.
             \p Less functor has the interface like \p std::less.
             \p pred must imply the same element order as the comparator used for building the list.
+
+            \p disposer specified in \p Traits is called for deleted item.
         */
         template <typename Q, typename Less, typename Func>
         bool erase_with( Q const& key, Less pred, Func func )
@@ -615,7 +634,6 @@ namespace cds { namespace intrusive {
 
         /// Extracts an item from the list
         /**
-        @anchor cds_intrusive_MichaelList_rcu_extract
             The function searches an item with key equal to \p key in the list,
             unlinks it from the list, and returns \ref cds::urcu::exempt_ptr "exempt_ptr" pointer to the item found.
             If \p key is not found the function returns an empty \p exempt_ptr.
@@ -623,7 +641,7 @@ namespace cds { namespace intrusive {
             @note The function does NOT dispose the item found. It just unlinks the item from the list
             and returns a pointer to item found.
             You shouldn't lock RCU for current thread before calling this function, and you should manually release
-            \p dest exempt pointer outside the RCU lock before reusing it.
+            the returned exempt pointer before reusing it.
 
             \code
             #include <cds/urcu/general_buffered.h>
@@ -675,7 +693,7 @@ namespace cds { namespace intrusive {
         }
 
         /// Find the key \p val
-        /** \anchor cds_intrusive_MichaelList_rcu_find_func
+        /**
             The function searches the item with key equal to \p key
             and calls the functor \p f for item found.
             The interface of \p Func functor is:
@@ -906,7 +924,6 @@ namespace cds { namespace intrusive {
         template <typename Func>
         bool insert_at( atomic_node_ptr& refHead, value_type& val, Func f )
         {
-            link_checker::is_empty( node_traits::to_node_ptr( val ) );
             position pos( refHead );
 
             {
@@ -1154,7 +1171,6 @@ namespace cds { namespace intrusive {
         {
             // RCU lock should be locked!!!
             assert( gc::is_locked() );
-            link_checker::is_empty( node_traits::to_node_ptr( val ) );
 
             while ( true ) {
                 if ( search( pos.refHead, val, pos, key_comparator() ) )
@@ -1187,8 +1203,6 @@ namespace cds { namespace intrusive {
                     if ( !bInsert )
                         return std::make_pair( end(), false );
 
-                    link_checker::is_empty( node_traits::to_node_ptr( val ) );
-
                     if ( link_node( node_traits::to_node_ptr( val ), pos ) ) {
                         ++m_ItemCounter;
                         func( true, val , val );
index 2d733f2957c6d21e851d82de156566f0d3c296c5..201a8275b9ffca581a8893db9a7f656005c43c4d 100644 (file)
@@ -264,6 +264,9 @@ namespace cds { namespace intrusive {
         /// Bucket table allocator
         typedef cds::details::Allocator< bucket_type, typename traits::allocator > bucket_table_allocator;
 
+        /// Count of hazard pointer required for the algorithm
+        static CDS_CONSTEXPR const size_t c_nHazardPtrCount = ordered_list::c_nHazardPtrCount;
+
     protected:
         item_counter    m_ItemCounter;   ///< Item counter
         hash            m_HashFunctor;   ///< Hash functor
@@ -292,17 +295,19 @@ namespace cds { namespace intrusive {
         //@endcond
 
     public:
+    ///@name Forward iterators (only for debugging purpose)
+    //@{
         /// Forward iterator
         /**
             The forward iterator for Michael's set is based on \p OrderedList forward iterator and has some features:
             - it has no post-increment operator
             - it iterates items in unordered fashion
-            - The iterator cannot be moved across thread boundary since it may contain GC's guard that is thread-private GC data.
+            - The iterator cannot be moved across thread boundary because it may contain GC's guard that is thread-private GC data.
             - Iterator ensures thread-safety even if you delete the item that iterator points to. However, in case of concurrent
               deleting operations it is no guarantee that you iterate all item in the set.
+              Moreover, a crash is possible when you try to iterate the next element that has been deleted by concurrent thread.
 
-            Therefore, the use of iterators in concurrent environment is not good idea. Use the iterator for the concurrent container
-            for debug purpose only.
+            @warning Use this iterator on the concurrent container for debugging purpose only.
         */
         typedef michael_set::details::iterator< bucket_type, false >    iterator;
 
@@ -333,28 +338,29 @@ namespace cds { namespace intrusive {
         }
 
         /// Returns a forward const iterator addressing the first element in a set
-        //@{
         const_iterator begin() const
         {
             return get_const_begin();
         }
+
+        /// Returns a forward const iterator addressing the first element in a set
         const_iterator cbegin() const
         {
             return get_const_begin();
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a set
-        //@{
         const_iterator end() const
         {
             return get_const_end();
         }
+
+        /// Returns an const iterator that addresses the location succeeding the last element in a set
         const_iterator cend() const
         {
             return get_const_end();
         }
-        //@}
+    //@}
 
     private:
         //@cond
@@ -559,7 +565,7 @@ namespace cds { namespace intrusive {
             Note the hash functor should accept a parameter of type \p Q that can be not the same as \p value_type.
         */
         template <typename Q, typename Func>
-        bool erase( const Q& key, Func f )
+        bool erase( Q const& key, Func f )
         {
             if ( bucket( key ).erase( key, f )) {
                 --m_ItemCounter;
@@ -576,7 +582,7 @@ namespace cds { namespace intrusive {
             \p pred must imply the same element order as the comparator used for building the set.
         */
         template <typename Q, typename Less, typename Func>
-        bool erase_with( const Q& key, Less pred, Func f )
+        bool erase_with( Q const& key, Less pred, Func f )
         {
             if ( bucket( key ).erase_with( key, pred, f )) {
                 --m_ItemCounter;
index 799cc4143b48aa7a78b5e3b0b32f2196dcf611cf..b30bff95874928601f92abc4a47f95602c275212 100644 (file)
@@ -102,11 +102,41 @@ namespace cds { namespace intrusive {
         //@endcond
 
     public:
+    ///@name Forward iterators
+    //@{
         /// Forward iterator
         /**
             The forward iterator for Michael's set is based on \p OrderedList forward iterator and has some features:
             - it has no post-increment operator
             - it iterates items in unordered fashion
+
+            The iterator interface:
+            \code
+            class iterator {
+            public:
+                // Default constructor
+                iterator();
+
+                // Copy construtor
+                iterator( iterator const& src );
+
+                // Dereference operator
+                value_type * operator ->() const;
+
+                // Dereference operator
+                value_type& operator *() const;
+
+                // Preincrement operator
+                iterator& operator ++();
+
+                // Assignment operator
+                iterator& operator = (iterator const& src);
+
+                // Equality operators
+                bool operator ==(iterator const& i ) const;
+                bool operator !=(iterator const& i ) const;
+            };
+            \endcode
         */
         typedef michael_set::details::iterator< bucket_type, false >    iterator;
 
@@ -137,28 +167,27 @@ namespace cds { namespace intrusive {
         }
 
         /// Returns a forward const iterator addressing the first element in a set
-        //@{
         const_iterator begin() const
         {
             return cbegin();
         }
+        /// Returns a forward const iterator addressing the first element in a set
         const_iterator cbegin() const
         {
             return const_iterator( m_Buckets[0].cbegin(), m_Buckets, m_Buckets + bucket_count() );
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a set
-        //@{
         const_iterator end() const
         {
             return cend();
         }
+        /// Returns an const iterator that addresses the location succeeding the last element in a set
         const_iterator cend() const
         {
             return const_iterator( m_Buckets[bucket_count() - 1].cend(), m_Buckets + bucket_count() - 1, m_Buckets + bucket_count() );
         }
-        //@}
+    //@}
 
     public:
         /// Initializes hash set
@@ -355,9 +384,9 @@ namespace cds { namespace intrusive {
         /**
             The function unlink all items from the set.
             The function is not atomic. It cleans up each bucket and then resets the item counter to zero.
-            If there are a thread that performs insertion while \p clear is working the result is undefined in general case:
+            If there are a thread that performs insertion while \p %clear() is working the result is undefined in general case:
             <tt> empty() </tt> may return \p true but the set may contain item(s).
-            Therefore, \p clear may be used only for debugging purposes.
+            Therefore, \p %clear() may be used only for debugging purposes.
 
             For each item the \p disposer is called after unlinking.
         */
index a506f84368f63ab30ee5a359851e2a9e33df3ff0..4b762fea0d1c1dd3ea968e3ac216468d82c06b1a 100644 (file)
@@ -156,11 +156,44 @@ namespace cds { namespace intrusive {
         //@endcond
 
     public:
+    ///@name Forward iterators (thread-safe under RCU lock)
+    //@{
         /// Forward iterator
         /**
             The forward iterator for Michael's set is based on \p OrderedList forward iterator and has some features:
             - it has no post-increment operator
             - it iterates items in unordered fashion
+
+            You may safely use iterators in multi-threaded environment only under RCU lock.
+            Otherwise, a crash is possible if another thread deletes the element the iterator points to.
+
+            The iterator interface:
+            \code
+            class iterator {
+            public:
+                // Default constructor
+                iterator();
+
+                // Copy construtor
+                iterator( iterator const& src );
+
+                // Dereference operator
+                value_type * operator ->() const;
+
+                // Dereference operator
+                value_type& operator *() const;
+
+                // Preincrement operator
+                iterator& operator ++();
+
+                // Assignment operator
+                iterator& operator = (iterator const& src);
+
+                // Equality operators
+                bool operator ==(iterator const& i ) const;
+                bool operator !=(iterator const& i ) const;
+            };
+            \endcode
         */
         typedef michael_set::details::iterator< bucket_type, false >    iterator;
 
@@ -191,28 +224,29 @@ namespace cds { namespace intrusive {
         }
 
         /// Returns a forward const iterator addressing the first element in a set
-        //@{
         const_iterator begin() const
         {
             return cbegin();
         }
+
+        /// Returns a forward const iterator addressing the first element in a set
         const_iterator cbegin() const
         {
             return const_iterator( m_Buckets[0].cbegin(), m_Buckets, m_Buckets + bucket_count() );
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a set
-        //@{
         const_iterator end() const
         {
             return cend();
         }
+
+        /// Returns an const iterator that addresses the location succeeding the last element in a set
         const_iterator cend() const
         {
             return const_iterator( m_Buckets[bucket_count() - 1].cend(), m_Buckets + bucket_count() - 1, m_Buckets + bucket_count() );
         }
-        //@}
+    //@}
 
     public:
         /// Initialize hash set
@@ -439,6 +473,7 @@ namespace cds { namespace intrusive {
             Depends on \p bucket_type you should or should not lock RCU before calling of this function:
             - for the set based on \ref cds_intrusive_MichaelList_rcu "MichaelList" RCU should not be locked
             - for the set based on \ref cds_intrusive_LazyList_rcu "LazyList" RCU should be locked
+
             See ordered list implementation for details.
 
             \code
index 7a194993d5080bc56c5377e664cabdaa00de37ae..9a8d12422dfe24e57cab844c846ead263153c029 100644 (file)
@@ -51,7 +51,7 @@ namespace cds { namespace intrusive {
         frequently, our modification will reduce the number of accesses to global memory. This modification, however,
         introduces the possibility of \p Head and \p Tail 'crossing'."
 
-        Explanation of template arguments see intrusive::MSQueue.
+        Explanation of template arguments see \p intrusive::MSQueue.
 
         \par Examples
         \code
index c85989adb8907bf495530fb330347939a6ebb30f..8dfbad07831fdd3b5ddb7f0a43c8bc3f55d2bbab 100644 (file)
@@ -245,7 +245,7 @@ namespace cds { namespace intrusive {
     public:
         /// Constructs empty priority queue
         /**
-            For cds::opt::v::static_buffer the \p nCapacity parameter is ignored.
+            For \p cds::opt::v::static_buffer the \p nCapacity parameter is ignored.
         */
         MSPriorityQueue( size_t nCapacity )
             : m_Heap( nCapacity )
index 2f05c1b4ffdb3b28ae1751a76f3f0597abd3cd07..461021e92800c28721369d61c75d231602361749 100644 (file)
@@ -38,7 +38,7 @@
 
 namespace cds { namespace intrusive {
 
-    /// OptimisticQueue related definitions
+    /// \p OptimisticQueue related definitions
     /** @ingroup cds_intrusive_helper
     */
     namespace optimistic_queue {
@@ -88,8 +88,8 @@ namespace cds { namespace intrusive {
         /// Base hook
         /**
             \p Options are:
-            - opt::gc - garbage collector used.
-            - opt::tag - a \ref cds_intrusive_hook_tag "tag"
+            - \p opt::gc - garbage collector used.
+            - \p opt::tag - a \ref cds_intrusive_hook_tag "tag"
         */
         template < typename... Options >
         struct base_hook: public hook< opt::base_hook_tag, Options... >
@@ -101,8 +101,8 @@ namespace cds { namespace intrusive {
             Use \p offsetof macro to define \p MemberOffset
 
             \p Options are:
-            - opt::gc - garbage collector used.
-            - opt::tag - a \ref cds_intrusive_hook_tag "tag"
+            - \p opt::gc - garbage collector used.
+            - \p opt::tag - a \ref cds_intrusive_hook_tag "tag"
         */
         template < size_t MemberOffset, typename... Options >
         struct member_hook: public hook< opt::member_hook_tag, Options... >
@@ -118,8 +118,8 @@ namespace cds { namespace intrusive {
             See \ref node_traits for \p NodeTraits interface description
 
             \p Options are:
-            - opt::gc - garbage collector used.
-            - opt::tag - a \ref cds_intrusive_hook_tag "tag"
+            - \p opt::gc - garbage collector used.
+            - \p opt::tag - a \ref cds_intrusive_hook_tag "tag"
         */
         template <typename NodeTraits, typename... Options >
         struct traits_hook: public hook< opt::traits_hook_tag, Options... >
@@ -174,11 +174,10 @@ namespace cds { namespace intrusive {
         };
         //@endcond
 
-        /// OptimisticQueue internal statistics. May be used for debugging or profiling
+        /// \p OptimisticQueue internal statistics. May be used for debugging or profiling
         /**
             Template argument \p Counter defines type of counter.
-            Default is \p cds::atomicity::event_counter, that is weak, i.e. it is not guaranteed
-            strict event counting.
+            Default is \p cds::atomicity::event_counter.
             You may use stronger type of counter like as \p cds::atomicity::item_counter,
             or even integral type, for example, \p int.
         */
@@ -242,7 +241,7 @@ namespace cds { namespace intrusive {
             //@endcond
         };
 
-        /// Dummy OptimisticQueue statistics - no counting is performed. Support interface like \ref optimistic_queue::stat
+        /// Dummy \p OptimisticQueue statistics - no counting is performed. Support interface like \p optimistic_queue::stat
         struct empty_stat
         {
             //@cond
@@ -263,7 +262,7 @@ namespace cds { namespace intrusive {
             //@endcond
         };
 
-        /// OptimisticQueue default type traits
+        /// \p OptimisticQueue default type traits
         struct traits
         {
             /// Back-off strategy
@@ -447,6 +446,8 @@ namespace cds { namespace intrusive {
             typedef OptimisticQueue< GC2, T2, Traits2 > other   ;   ///< Rebinding result
         };
 
+        static CDS_CONSTEXPR const size_t c_nHazardPtrCount = 5; ///< Count of hazard pointer required for the algorithm
+
     protected:
         //@cond
         typedef typename node_type::atomic_node_ptr atomic_node_ptr;
@@ -470,8 +471,6 @@ namespace cds { namespace intrusive {
         item_counter        m_ItemCounter   ;   ///< Item counter
         stat                m_Stat          ;   ///< Internal statistics
 
-        static CDS_CONSTEXPR const size_t c_nHazardPtrCount = 5 ; ///< Count of hazard pointer required for the algorithm
-
     protected:
         //@cond
         static void clear_links( node_type * pNode )
@@ -646,10 +645,10 @@ namespace cds { namespace intrusive {
             |       ...        |
             \endcode
 
-            \p dequeue function returns Item 2, that becomes new top of queue, and calls
+            \p %dequeue() function returns Item 2, that becomes new top of queue, and calls
             the disposer for Item 1, that was queue's top on function entry.
             Thus, you cannot manually delete item returned because it is still included in
-            item sequence and it has valuable link field that must not be zeroed.
+            the queue and it has valuable link field that must not be zeroed.
             The item may be deleted only in disposer call.
         */
         value_type * dequeue()
index 254b8ce2e50eac3b4902523cb7fcfaf192c5d156..17d7309248861c585aa2be478637bcebdebff3a9 100644 (file)
@@ -77,8 +77,8 @@ namespace cds { namespace intrusive {
             \endcode
 
             Predefined types for \p Type:
-            - opt::v::empty_disposer - the disposer that does nothing
-            - opt::v::delete_disposer - the disposer that calls operator \p delete
+            - \p opt::v::empty_disposer - the disposer that does nothing
+            - \p opt::v::delete_disposer - the disposer that calls operator \p delete
 
             Usually, the disposer should be stateless default-constructible functor.
             It is called by garbage collector in deferred mode.
index dfb93882d32f6dd7b313ba87c10d91b68b49d8b7..83cfb1da6c5f51f1ef43283ae006219d59a9e5aa 100644 (file)
@@ -152,7 +152,7 @@ namespace cds { namespace intrusive {
             all other \p %segmented_queue::traits members left unchanged.
 
             \p Options are:
-            - \p opt::disposer - the functor used for dispose removed items.
+            - \p opt::disposer - the functor used to dispose removed items.
             - \p opt::stat - internal statistics, possible type: \p segmented_queue::stat, \p segmented_queue::empty_stat (the default)
             - \p opt::item_counter - item counting feature. Note that \p atomicity::empty_item_counetr is not suitable
                 for segmented queue.
@@ -599,7 +599,7 @@ namespace cds { namespace intrusive {
 
         /// Clear the queue
         /**
-            The function repeatedly calls \ref dequeue until it returns \p nullptr.
+            The function repeatedly calls \p dequeue() until it returns \p nullptr.
             The disposer specified in \p Traits template argument is called for each removed item.
         */
         void clear()
index dd5b0ab8fb954fd9d116fc13aec2bd0db3894018..833be13e7d7d23d354321d0d91df301f7f873f8a 100644 (file)
@@ -608,7 +608,14 @@ namespace cds { namespace intrusive {
         }
 
     public:
-        /// Iterator type
+    ///@name Forward iterators
+    //@{
+        /// Forward iterator
+        /**
+            The forward iterator for a split-list has some features:
+            - it has no post-increment operator
+            - it depends on iterator of underlying \p OrderedList
+        */
         typedef skip_list::details::iterator< gc, node_traits, back_off, false >  iterator;
 
         /// Const iterator type
@@ -647,6 +654,7 @@ namespace cds { namespace intrusive {
         {
             return const_iterator();
         }
+    //@}
 
     protected:
         //@cond
index 0cd3e7ac760382451471b14a7ed7ce81028e3190..0fc5992a71cb1ef68111176ac656e8dfb10ed2b2 100644 (file)
@@ -218,9 +218,6 @@ namespace cds { namespace intrusive {
         protected:
             void next()
             {
-                // RCU should be locked before iterating!!!
-                assert( gc::is_locked() );
-
                 back_off bkoff;
 
                 for (;;) {
@@ -253,9 +250,6 @@ namespace cds { namespace intrusive {
             iterator( node_type& refHead )
                 : m_pNode( nullptr )
             {
-                // RCU should be locked before iterating!!!
-                assert( gc::is_locked() );
-
                 back_off bkoff;
 
                 for (;;) {
@@ -279,17 +273,11 @@ namespace cds { namespace intrusive {
         public:
             iterator()
                 : m_pNode( nullptr )
-            {
-                // RCU should be locked before iterating!!!
-                assert( gc::is_locked() );
-            }
+            {}
 
             iterator( iterator const& s)
                 : m_pNode( s.m_pNode )
-            {
-                // RCU should be locked before iterating!!!
-                assert( gc::is_locked() );
-            }
+            {}
 
             value_type * operator ->() const
             {
@@ -1335,7 +1323,17 @@ namespace cds { namespace intrusive {
         }
 
     public:
-        /// Iterator type
+    ///@name Forward iterators (thread-safe under RCU lock)
+    //@{
+        /// Forward iterator
+        /**
+            The forward iterator has some features:
+            - it has no post-increment operator
+            - it depends on iterator of underlying \p OrderedList
+
+            You may safely use iterators in multi-threaded environment only under RCU lock.
+            Otherwise, a crash is possible if another thread deletes the element the iterator points to.
+        */
         typedef skip_list::details::iterator< gc, node_traits, back_off, false >  iterator;
 
         /// Const iterator type
@@ -1376,6 +1374,7 @@ namespace cds { namespace intrusive {
         {
             return const_iterator();
         }
+    //@}
 
     public:
         /// Inserts new node
index 9a7e198e55a61d31bacc2671a1557cb0b22b074c..832534c7c259471348d94402d109e594747aa467 100644 (file)
@@ -248,6 +248,9 @@ namespace cds { namespace intrusive {
         typedef typename traits::stat              stat;         ///< Internal statistics, see \p spit_list::stat
         typedef typename ordered_list::guarded_ptr guarded_ptr;  ///< Guarded pointer
 
+        /// Count of hazard pointer required
+        static CDS_CONSTEXPR const size_t c_nHazardPtrCount = ordered_list::c_nHazardPtrCount + 4; // +4 - for iterators
+
     protected:
         typedef typename ordered_list::node_type    list_node_type;  ///< Node type as declared in ordered list
         typedef split_list::node<list_node_type>    node_type;       ///< split-list node type
@@ -751,10 +754,10 @@ namespace cds { namespace intrusive {
             std::pair<bool, bool> bRet = m_List.update_at( pHead, val, func, bAllowInsert );
             if ( bRet.first && bRet.second ) {
                 inc_item_count();
-                m_Stat.onEnsureNew();
+                m_Stat.onUpdateNew();
             }
             else
-                m_Stat.onEnsureExist();
+                m_Stat.onUpdateExist();
             return bRet;
         }
         //@cond
@@ -1135,6 +1138,8 @@ namespace cds { namespace intrusive {
         };
         //@endcond
     public:
+    ///@name Forward iterators (only for debugging purpose)
+    //@{
         /// Forward iterator
         /**
             The forward iterator for a split-list has some features:
@@ -1142,12 +1147,13 @@ namespace cds { namespace intrusive {
             - it depends on iterator of underlying \p OrderedList
             - The iterator cannot be moved across thread boundary since it may contain GC's guard that is thread-private GC data.
             - Iterator ensures thread-safety even if you delete the item that iterator points to. However, in case of concurrent
-              deleting operations it is no guarantee that you iterate all item in the split-list.
+              deleting operations it is no guarantee that you iterate all item in the set.
+              Moreover, a crash is possible when you try to iterate the next element that has been deleted by concurrent thread.
 
-            Therefore, the use of iterators in concurrent environment is not good idea. Use the iterator on the concurrent container
-            for debug purpose only.
+            @warning Use this iterator on the concurrent container for debugging purpose only.
         */
         typedef iterator_type<false>    iterator;
+
         /// Const forward iterator
         /**
             For iterator's features and requirements see \ref iterator
@@ -1196,7 +1202,7 @@ namespace cds { namespace intrusive {
         {
             return const_iterator( m_List.cend(), m_List.cend());
         }
-
+    //@}
     };
 
 }}  // namespace cds::intrusive
index f10775135fae6f82d9501700d4dbf1498ded94e1..41066182d6075c78cbaaa4cfd18aa787cfa94a8e 100644 (file)
@@ -119,7 +119,7 @@ namespace cds { namespace intrusive {
         class ordered_list_wrapper: public ordered_list
         {
             typedef ordered_list base_class;
-            typedef typename base_class::auxiliary_head       bucket_head_type;
+            typedef typename base_class::auxiliary_head bucket_head_type;
 
         public:
             list_iterator insert_at_( dummy_node_type * pHead, value_type& val )
@@ -162,6 +162,12 @@ namespace cds { namespace intrusive {
                 bucket_head_type h(static_cast<list_node_type *>(pHead));
                 return base_class::insert_aux_node( h, pNode );
             }
+
+            template <typename Predicate>
+            void erase_for( Predicate pred )
+            {
+                return base_class::erase_for( pred );
+            }
         };
 
         //@endcond
@@ -495,6 +501,23 @@ namespace cds { namespace intrusive {
         }
         //@endcond
 
+
+        /// Clears the set (non-atomic, not thread-safe)
+        /**
+            The function unlink all items from the set.
+            The function is not atomic. It cleans up each bucket and then resets the item counter to zero.
+            If there are a thread that performs insertion while \p %clear() is working the result is undefined in general case:
+            <tt> empty() </tt> may return \p true but the set may contain item(s).
+            Therefore, \p %clear() may be used only for debugging purposes.
+
+            For each item the \p disposer is called after unlinking.
+        */
+        void clear()
+        {
+            m_List.erase_for( []( value_type const& val ) -> bool { return !node_traits::to_node_ptr( val )->is_dummy(); } );
+            m_ItemCounter.reset();
+        }
+
         /// Checks if the set is empty
         /**
             Emptiness is checked by item counting: if item count is zero then the set is empty.
@@ -542,6 +565,8 @@ namespace cds { namespace intrusive {
         //@endcond
 
     public:
+    ///@name Forward iterators
+    //@{
         /// Forward iterator
         /**
             The forward iterator for a split-list has some features:
@@ -549,6 +574,7 @@ namespace cds { namespace intrusive {
             - it depends on iterator of underlying \p OrderedList
         */
         typedef iterator_type<false>    iterator;
+
         /// Const forward iterator
         /**
             For iterator's features and requirements see \ref iterator
@@ -577,28 +603,29 @@ namespace cds { namespace intrusive {
         }
 
         /// Returns a forward const iterator addressing the first element in a split-list
-        //@{
         const_iterator begin() const
         {
             return const_iterator( m_List.begin(), m_List.end() );
         }
+
+        /// Returns a forward const iterator addressing the first element in a split-list
         const_iterator cbegin() const
         {
             return const_iterator( m_List.cbegin(), m_List.cend() );
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a split-list
-        //@{
         const_iterator end() const
         {
             return const_iterator( m_List.end(), m_List.end() );
         }
+
+        /// Returns an const iterator that addresses the location succeeding the last element in a split-list
         const_iterator cend() const
         {
             return const_iterator( m_List.cend(), m_List.cend() );
         }
-        //@}
+    //@}
 
     protected:
         //@cond
@@ -633,10 +660,10 @@ namespace cds { namespace intrusive {
             if ( ret.first != m_List.end() ) {
                 if ( ret.second ) {
                     inc_item_count();
-                    m_Stat.onEnsureNew();
+                    m_Stat.onUpdateNew();
                 }
                 else
-                    m_Stat.onEnsureExist();
+                    m_Stat.onUpdateExist();
                 return std::make_pair( iterator(ret.first, m_List.end()), ret.second );
             }
             return std::make_pair( end(), ret.second );
index 94088046cf9ceedb4f0fb5e4c0f5d9ac1752bf15..e27c64d8a7dd5864ef6c59e3352f8e17a8a292e1 100644 (file)
@@ -636,10 +636,10 @@ namespace cds { namespace intrusive {
             std::pair<bool, bool> bRet = m_List.update_at( pHead, val, func, bAllowInsert );
             if ( bRet.first && bRet.second ) {
                 inc_item_count();
-                m_Stat.onEnsureNew();
+                m_Stat.onUpdateNew();
             }
             else
-                m_Stat.onEnsureExist();
+                m_Stat.onUpdateExist();
             return bRet;
         }
         //@cond
@@ -1025,19 +1025,19 @@ namespace cds { namespace intrusive {
         //@endcond
 
     public:
+    ///@name Forward iterators (thread-safe under RCU lock)
+    //@{
         /// Forward iterator
         /**
             The forward iterator for a split-list has some features:
             - it has no post-increment operator
             - it depends on iterator of underlying \p OrderedList
-            - The iterator cannot be moved across thread boundary since it may contain GC's guard that is thread-private GC data.
-            - Iterator ensures thread-safety even if you delete the item that iterator points to. However, in case of concurrent
-              deleting operations it is no guarantee that you iterate all item in the split-list.
 
-            Therefore, the use of iterators in concurrent environment is not good idea. Use the iterator on the concurrent container
-            for debug purpose only.
+            You may safely use iterators in multi-threaded environment only under RCU lock.
+            Otherwise, a crash is possible if another thread deletes the element the iterator points to.
         */
         typedef iterator_type<false>    iterator;
+
         /// Const forward iterator
         /**
             For iterator's features and requirements see \ref iterator
@@ -1086,7 +1086,7 @@ namespace cds { namespace intrusive {
         {
             return const_iterator( m_List.cend(), m_List.cend() );
         }
-
+    //@}
     };
 
 }}  // namespace cds::intrusive
index 2f416cc7e9140e21e281e686bf108d4b4f248890..ed91ee54ee941bdb0fe5d4d042580a7d59ee0534 100644 (file)
@@ -223,7 +223,7 @@ namespace cds { namespace intrusive {
                 typedef typename container_type::iterator       iterator        ;   ///< container iterator
                 typedef typename container_type::const_iterator const_iterator  ;   ///< container const iterator
 
-                typedef typename container_type::value_compare  key_comparator;
+                typedef typename container_type::key_compare  key_comparator;
 
             private:
                 container_type  m_Set;
@@ -255,7 +255,7 @@ namespace cds { namespace intrusive {
                         return std::make_pair( true, res.second );
                     }
                     else {
-                        auto it = m_Set.find( val );
+                        auto it = m_Set.find( val, key_comparator() );
                         if ( it == m_Set.end() )
                             return std::make_pair( false, false );
                         f( false, *it, val );
@@ -265,7 +265,7 @@ namespace cds { namespace intrusive {
 
                 bool unlink( value_type& val )
                 {
-                    iterator it = m_Set.find( value_type(val));
+                    iterator it = m_Set.find( val, key_comparator() );
                     if ( it == m_Set.end() || &(*it) != &val )
                         return false;
                     m_Set.erase( it );
@@ -297,13 +297,13 @@ namespace cds { namespace intrusive {
                 }
 
                 template <typename Q, typename Func>
-                bool find( Q& key, Func f )
+                bool find( Q const& key, Func f )
                 {
                     return find( key, key_comparator(), f );
                 }
 
                 template <typename Q, typename Compare, typename Func>
-                bool find( Q& key, Compare cmp, Func f )
+                bool find( Q const& key, Compare cmp, Func f )
                 {
                     iterator it = m_Set.find( key, cmp );
                     if ( it == m_Set.end() )
index ab164016857a442abad1b21471e9d96e72526b16..aa4147e043bc96bc85333634f5bc6f93056b2189 100644 (file)
@@ -658,6 +658,9 @@ namespace cds { namespace intrusive {
         typedef typename traits::stat           stat;           ///< Internal statistics
         typedef typename traits::back_off       back_off;       ///< back-off strategy
 
+        /// How many Hazard pointers is required for Treiber's stack implementation
+        static CDS_CONSTEXPR size_t const c_nHazardPtrCount = 1;
+
     public: // related to elimination back-off
 
         /// Elimination back-off is enabled or not
@@ -707,7 +710,7 @@ namespace cds { namespace intrusive {
         /// Constructs empty stack and initializes elimination back-off data
         /**
             This form should be used if you use elimination back-off with dynamically allocated collision array, i.e
-            \p Options... contains cds::opt::buffer< cds::opt::v::dynamic_buffer >.
+            \p Traits contains <tt>typedef cds::opt::v::dynamic_buffer buffer</tt>.
             \p nCollisionCapacity parameter specifies the capacity of collision array.
         */
         TreiberStack( size_t nCollisionCapacity )
index 1fcac55a5db77fdadc24f1ab1560c7daf667163b..1d1f5788eb22ae076a8f5b5a5a4517e09302661e 100644 (file)
@@ -71,8 +71,8 @@ namespace cds { namespace intrusive {
             */
             typedef opt::v::relaxed_ordering    memory_model;
 
-            /// Alignment for internal queue data. Default is \p opt::cache_line_alignment
-            enum { alignment = opt::cache_line_alignment };
+            /// Padding for internal critical atomic data. Default is \p opt::cache_line_padding
+            enum { padding = opt::cache_line_padding };
         };
 
         /// Metafunction converting option list to \p tsigas_queue::traits
@@ -86,7 +86,7 @@ namespace cds { namespace intrusive {
                 when dequeuing.
             - \p opt::item_counter - the type of item counting feature. Default is \p cds::atomicity::empty_item_counter (item counting disabled)
                 To enable item counting use \p cds::atomicity::item_counter
-            - \p opt::alignment - the alignment for internal queue data. Default is \p opt::cache_line_alignment
+            - \p opt::padding - padding for internal critical atomic data. Default is \p opt::cache_line_padding
             - \p opt::memory_model - C++ memory ordering model. Can be \p opt::v::relaxed_ordering (relaxed memory model, the default)
                 or \p opt::v::sequential_consistent (sequentially consisnent memory model).
 
@@ -192,17 +192,18 @@ namespace cds { namespace intrusive {
 
     protected:
         //@cond
-        typedef typename opt::details::alignment_setter< buffer, traits::alignment >::type aligned_buffer;
         typedef size_t index_type;
-        typedef typename opt::details::alignment_setter< atomics::atomic<index_type>, traits::alignment >::type aligned_index;
         //@endcond
 
     protected:
         //@cond
-        buffer          m_buffer    ;   ///< array of pointer T *, array size is equal to m_nCapacity+1
-        aligned_index   m_nHead     ;   ///< index of queue's head
-        aligned_index   m_nTail     ;   ///< index of queue's tail
-        item_counter    m_ItemCounter   ;   ///< item counter
+        buffer       m_buffer    ;   ///< array of pointer T *, array size is equal to m_nCapacity+1
+        typename opt::details::apply_padding< index_type, traits::padding >::padding_type pad1_;
+        atomics::atomic<index_type>   m_nHead     ;   ///< index of queue's head
+        typename opt::details::apply_padding< index_type, traits::padding >::padding_type pad2_;
+        atomics::atomic<index_type>   m_nTail     ;   ///< index of queue's tail
+        typename opt::details::apply_padding< index_type, traits::padding >::padding_type pad3_;
+        item_counter m_ItemCounter;  ///< item counter
         //@endcond
 
     protected:
index 63d135cfa5ac05ee8222ff0f26151eeef7662cca..e773636f8ca7d2e8197fdce06c9a1877ede68500 100644 (file)
@@ -95,17 +95,17 @@ namespace cds { namespace intrusive {
 
         Template parameters:
         - \p T - type stored in queue.
-        - \p Traits - queue traits, default is \p vykov_queue::traits. You can use \p vykov_queue::make_traits
-            metafunction to make your traits or just derive your traits from \p %vykov_queue::traits:
+        - \p Traits - queue traits, default is \p vyukov_queue::traits. You can use \p vyukov_queue::make_traits
+            metafunction to make your traits or just derive your traits from \p %vyukov_queue::traits:
             \code
-            struct myTraits: public cds::intrusive::vykov_queue::traits {
+            struct myTraits: public cds::intrusive::vyukov_queue::traits {
                 typedef cds::atomicity::item_counter    item_counter;
             };
             typedef cds::intrusive::VyukovMPMCCycleQueue< Foo, myTraits > myQueue;
 
             // Equivalent make_traits example:
             typedef cds::intrusive::VyukovMPMCCycleQueue< cds::gc::HP, Foo,
-                typename cds::intrusive::vykov_queue::make_traits<
+                typename cds::intrusive::vyukov_queue::make_traits<
                     cds::opt::item_counter< cds::atomicity::item_counter >
                 >::type
             > myQueue;
index 0d29b98a4f5dd7ddf827e13e64494e5abf40377e..4c5780971ffb1483f619bd4f3fe5f23c8bf7ccb2 100644 (file)
@@ -48,7 +48,7 @@ namespace cds { namespace memory {
     /// Free-list based on bounded lock-free queue \p cds::intrusive::VyukovMPMCCycleQueue
     /** @ingroup cds_memory_pool
         Template parameters:
-        - \p T - the type of object maintaining by free-list
+        - \p T - the type of object maintaining by free-list. \p T must be default constructible.
         - \p Traits - traits for \p cds::intrusive::VyukovMPMCCycleQueue class plus
             \p cds::opt::allocator option, defaul is \p vyukov_queue_pool_traits
 
@@ -124,6 +124,7 @@ namespace cds { namespace memory {
     protected:
         //@cond
         typedef cds::details::Allocator< value_type, allocator_type >   cxx_allocator;
+        typedef typename cxx_allocator::allocator_type std_allocator;
 
         queue_type      m_Queue;
         value_type *    m_pFirst;
@@ -134,7 +135,7 @@ namespace cds { namespace memory {
         //@cond
         void preallocate_pool()
         {
-            m_pFirst = cxx_allocator().NewArray( m_Queue.capacity() );
+            m_pFirst = std_allocator().allocate( m_Queue.capacity() );
             m_pLast = m_pFirst + m_Queue.capacity();
 
             for ( value_type * p = m_pFirst; p < m_pLast; ++p ) {
@@ -165,13 +166,13 @@ namespace cds { namespace memory {
         ~vyukov_queue_pool()
         {
             m_Queue.clear();
-            cxx_allocator().Delete( m_pFirst, m_Queue.capacity());
+            std_allocator().deallocate( m_pFirst, m_Queue.capacity());
         }
 
         /// Allocates an object from pool
         /**
             The pool supports allocation only single object (\p n = 1).
-            If \p n > 1 the behaviour is undefined.
+            If \p n > 1 the behavior is undefined.
 
             If the queue is not empty, the popped value is returned.
             Otherwise, a new value allocated.
@@ -184,7 +185,7 @@ namespace cds { namespace memory {
             value_type * p = m_Queue.pop();
             if ( p ) {
                 assert( from_pool(p) );
-                return p;
+                return new( p ) value_type;
             }
             // The pool is empty - allocate new from the heap
             return cxx_allocator().New();
@@ -193,7 +194,7 @@ namespace cds { namespace memory {
         /// Deallocated the object \p p
         /**
             The pool supports allocation only single object (\p n = 1).
-            If \p n > 1 the behaviour is undefined.
+            If \p n > 1 the behavior is undefined.
 
             If \p p is from preallocated pool, it pushes into the queue.
             Otherwise, \p p is deallocated by allocator provided.
@@ -205,6 +206,7 @@ namespace cds { namespace memory {
 
             if ( p ) {
                 if ( from_pool(p) ) {
+                    p->~value_type();
                     // The queue can notify about false fullness state
                     // so we push in loop
                     back_off bkoff;
@@ -221,9 +223,9 @@ namespace cds { namespace memory {
     /// Lazy free-list based on bounded lock-free queue \p cds::intrusive::VyukovMPMCCycleQueue
     /** @ingroup cds_memory_pool
         Template parameters:
-        - \p T - the type of object maintaining by free-list
+        - \p T - the type of object maintaining by free-list. \p T must be default constructible
         - \p Traits - traits for \p cds::intrusive::VyukovMPMCCycleQueue class plus
-            \p cds::opt::allocator option, defaul is \p vyukov_queue_pool_traits
+            \p cds::opt::allocator option, default is \p vyukov_queue_pool_traits
 
         \b Internals
 
@@ -292,6 +294,7 @@ namespace cds { namespace memory {
     protected:
         //@cond
         typedef cds::details::Allocator< value_type, allocator_type >   cxx_allocator;
+        typedef typename cxx_allocator::allocator_type std_allocator;
 
         queue_type      m_Queue;
         //@endcond
@@ -305,15 +308,15 @@ namespace cds { namespace memory {
         /// Deallocates all objects from the pool
         ~lazy_vyukov_queue_pool()
         {
-            cxx_allocator a;
+            std_allocator a;
             while ( !m_Queue.empty() )
-                a.Delete( m_Queue.pop());
+                a.deallocate( m_Queue.pop(), 1 );
         }
 
         /// Allocates an object from pool
         /**
             The pool supports allocation only single object (\p n = 1).
-            If \p n > 1 the behaviour is undefined.
+            If \p n > 1 the behavior is undefined.
 
             If the queue is not empty, the popped value is returned.
             Otherwise, a new value allocated.
@@ -325,7 +328,7 @@ namespace cds { namespace memory {
 
             value_type * p = m_Queue.pop();
             if ( p )
-                return p;
+                return new( p ) value_type;
 
             return cxx_allocator().New();
         }
@@ -344,9 +347,10 @@ namespace cds { namespace memory {
             CDS_UNUSED(n);
 
             if ( p ) {
+                p->~value_type();
                 // Here we ignore false fullness state of the queue
                 if ( !m_Queue.push( *p ))
-                    cxx_allocator().Delete( p );
+                    std_allocator().deallocate( p, 1 );
             }
         }
 
@@ -355,7 +359,7 @@ namespace cds { namespace memory {
     /// Bounded free-list based on bounded lock-free queue \p cds::intrusive::VyukovMPMCCycleQueue
     /** @ingroup cds_memory_pool
         Template parameters:
-        - \p T - the type of object maintaining by free-list
+        - \p T - the type of object maintaining by free-list. \p T must be default-constructible
         - \p Traits - traits for \p cds::intrusive::VyukovMPMCCycleQueue class plus
             \p cds::opt::allocator option, defaul is \p vyukov_queue_pool_traits
 
@@ -435,7 +439,8 @@ namespace cds { namespace memory {
 
     protected:
         //@cond
-        typedef cds::details::Allocator< value_type, allocator_type >   cxx_allocator;
+        typedef cds::details::Allocator< value_type, allocator_type > cxx_allocator;
+        typedef typename cxx_allocator::allocator_type std_allocator;
 
         queue_type      m_Queue;
         value_type *    m_pFirst;
@@ -447,7 +452,7 @@ namespace cds { namespace memory {
         void preallocate_pool()
         {
             size_t const nCount = m_Queue.capacity();
-            m_pFirst = cxx_allocator().NewArray( nCount );
+            m_pFirst = std_allocator().allocate( nCount );
             m_pLast = m_pFirst + nCount;
 
             for ( value_type * p = m_pFirst; p < m_pLast; ++p )
@@ -477,7 +482,7 @@ namespace cds { namespace memory {
         ~bounded_vyukov_queue_pool()
         {
             m_Queue.clear();
-            cxx_allocator().Delete( m_pFirst, m_Queue.capacity() );
+            std_allocator().deallocate( m_pFirst, m_Queue.capacity());
         }
 
         /// Allocates an object from pool
index 7c04ff007cfe83f8a6f10db22796dcea27003a9a..93c1e47e3de95ee60a9a2b39307fc13a6ab07c05 100644 (file)
@@ -31,6 +31,7 @@
 #ifndef CDSLIB_OPT_BUFFER_H
 #define CDSLIB_OPT_BUFFER_H
 
+#include <memory.h>
 #include <cds/details/defs.h>
 #include <cds/user_setup/allocator.h>
 #include <cds/details/allocator.h>
index e78655bb02cfc2e57536cd8555ba1834cd2ef965..c2d39f3e294870a40c0993b576144cbfc1226e2a 100644 (file)
@@ -302,17 +302,17 @@ namespace opt {
         This option allows to set up appropriate item counting policy for that data structure.
 
         Predefined option \p Type:
-        - atomicity::empty_item_counter - no item counting performed. It is default policy for many
+        - \p atomicity::empty_item_counter - no item counting performed. It is default policy for many
             containers
-        - atomicity::item_counter - the class that provides atomically item counting
-        - opt::v::sequential_item_counter - simple non-atomic item counter. This item counter is not intended for
+        - \p atomicity::item_counter - the class that provides atomically item counting
+        - \p opt::v::sequential_item_counter - simple non-atomic item counter. This item counter is not intended for
             concurrent containers and may be used only if it is explicitly noted.
 
-        You may provide other implementation of atomicity::item_counter interface for your needs.
+        You may provide other implementation of \p atomicity::item_counter interface for your needs.
 
         Note, the item counting in lock-free containers cannot be exact; for example, if
         item counter for a container returns zero it is not mean that the container is empty.
-        Thus, item counter may be used for statistical purposes only.
+        Thus, the item counter may be used for statistical purposes only.
     */
     template <typename Type>
     struct item_counter {
@@ -370,7 +370,7 @@ namespace opt {
         no_special_padding = 0,   ///< no special padding
         cache_line_padding = 1,   ///< use cache line size defined in cds/user_setup/cache_line.h
 
-        /// Apply padding only for tiny data of size less than required padding
+        /// Apply padding only for tiny data when data size is less than required padding
         /**
             The flag means that if your data size is less than the casheline size, the padding is applyed.
             Otherwise no padding will be applyed.
@@ -851,14 +851,14 @@ namespace cds { namespace opt {
             }
         };
 
-        /// \p opt::move_policy based on assignment operator
+        /// \p opt::move_policy based on move-assignment operator
         struct assignment_move_policy
         {
-            /// <tt> dest = src </tt>
+            /// <tt> dest = std::move( src ) </tt>
             template <typename T>
-            void operator()( T& dest, T const& src ) const
+            void operator()( T& dest, T&& src ) const
             {
-                dest = src;
+                dest = std::move( src );
             }
         };
 
index 5a4b0888a3708f1772b8479a8685a761d15c0b0d..24817dd7db2364d9d9e17e8e59389f50f375d95f 100644 (file)
@@ -75,7 +75,7 @@ namespace cds { namespace sync {
             template <typename Node>
             struct node_injection: public Node
             {
-                // Monitor data to inject into container's node
+                // Monitor data injecting into container's node
                 // ...
             };
             // Locks the node
@@ -89,7 +89,7 @@ namespace cds { namespace sync {
             using scoped_lock = monitor_scoped_lock< pool_monitor, Node >;
         };
         \endcode
-        Monitor's data must be inject into container's node as \p m_SyncMonitorInjection data member:
+        Monitor's data must be injected into container's node as \p m_SyncMonitorInjection data member:
         \code
         template <typename SyncMonitor>
         struct my_node
index 374ac81d43b6eedd570a01300343a21679eef800..c277edfe7388ba3a66c29fe3985ef0dca86ef8df 100644 (file)
@@ -47,7 +47,7 @@ namespace cds { namespace urcu {
         outside RCU lock.
 
         The object of \p %raw_ptr solves that problem: it contains the pointer to the node found
-        and a chain of nodes that were reclaimed during traversing. The \p %raw_ptr object destructor
+        and a chain of nodes that were be reclaimed during traversing. The \p %raw_ptr object destructor
         frees the chain (but not the node found) passing it to RCU \p batch_retire().
 
         The object of \p %raw_ptr class must be destructed only outside RCU-lock of current thread.
@@ -136,16 +136,12 @@ namespace cds { namespace urcu {
         /// Move assignment operator
         /**
             This operator may be called only inside RCU-lock.
-            The \p this should be empty.
         */
         raw_ptr& operator=( raw_ptr&& p ) CDS_NOEXCEPT
         {
-            assert( empty() );
-            if ( !rcu::is_locked() )
-                release();
-
+            assert( rcu::is_locked());
             m_ptr = p.m_ptr;
-            m_Enum = std::move( p.m_Enum );
+            m_Enum.combine(  std::move( p.m_Enum ));
             p.m_ptr = nullptr;
             return *this;
         }
index 337ba6baa64942a66f5146df3d3b1a643f8d86b8..222f0e61e060bb5766a6a140f1524b2d9e866d8c 100644 (file)
 
 // cds library version
 
-#define CDS_VERSION        0x020100
+#define CDS_VERSION        0x020200
 
 #define CDS_VERSION_MAJOR  ((CDS_VERSION & 0xFF0000)>> 16)
 #define CDS_VERSION_MINOR  ((CDS_VERSION & 0x00FF00) >> 8)
 #define CDS_VERSION_PATCH  (CDS_VERSION & 0x0000FF)
 
 // CDS_VERSION == CDS_VERSION_MAJOR '.' CDS_VERSION_MINOR '.' CDS_VERSION_PATCH
-#define CDS_VERSION_STRING        "2.1.0"
+#define CDS_VERSION_STRING        "2.2.0"
 
 #endif  // #ifndef CDSLIB_VERSION_H
 
index 61f5326dfa088acd550a6d707fdd8c117c1fc02f..44c454456189c18d15f3e94962ab197ab18b41c8 100644 (file)
@@ -1,3 +1,17 @@
+2.2.0
+    General release
+    - Changed: CMake is used for build libcds. Ancient build.sh is removed
+    - Changed: unit and stress tests are migrated to googletest framework
+    - Fixed: serious bug in MichaelSet::emplace() function
+      New node was created twice from the arguments by move semantics. 
+      However, move semantics may change internal state of the argument
+      that can lead to an incorrect element in the set and even
+      to an incorrect key that breaks the set logic.
+    - Fixed: bug in FeldmanHashSet::erase_at( iterator ): due an error
+      in precondition checking the function can incorrectly return false.
+    - Fixed: possible double-free case in flat combining algorithm. 
+      Thanks to Amila Jayasekara who points me to this problem
+
 2.1.0 06.01.2016
     General release
     - Added: FeldmanHashSet/Map - an interesting hash map algorithm
index fd6a72d8eeb5115360147168f7de6a40f4ea0ded..509da7300436c90d93525323a2cc91d985a3ffd4 100644 (file)
@@ -31,7 +31,7 @@ PROJECT_NAME           = cds
 # This could be handy for archiving the generated documentation or 
 # if some version control system is used.
 
-PROJECT_NUMBER         = 2.1.0
+PROJECT_NUMBER         = 2.2.0
 
 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
 # base path where the generated documentation will be put. 
@@ -69,7 +69,7 @@ OUTPUT_LANGUAGE        = English
 
 BRIEF_MEMBER_DESC      = YES
 
-MARKDOWN_SUPPORT = NO
+MARKDOWN_SUPPORT = YES
 
 # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
 # the brief description of a member or function before the detailed description. 
index 3928f1ea6f448c3d2f1ba6a0976e4e57732991ee..9f57b766cd33ce60f5fbf47946a27a95ccef8d45 100644 (file)
@@ -1,7 +1,7 @@
 <hr/>\r
 <div align="right">\r
   <b>$projectname</b> <b>$projectnumber</b> \r
-  Developed by <i>Maxim Khizhinsky aka khizmax</i> 2007 - 2015\r
+  Developed by <i>Maxim Khizhinsky aka khizmax</i> 2007 - 2016\r
   <br/>\r
   <i>Autogenerated $datetime by Doxygen $doxygenversion</i>\r
 </div>\r
diff --git a/projects/Win/vc12/cds.sln b/projects/Win/vc12/cds.sln
deleted file mode 100644 (file)
index ea2f946..0000000
+++ /dev/null
@@ -1,722 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 12.00\r
-# Visual Studio Express 2013 for Windows Desktop\r
-VisualStudioVersion = 12.0.40629.0\r
-MinimumVisualStudioVersion = 10.0.40219.1\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cds", "cds.vcxproj", "{408FE9BC-44F0-4E6A-89FA-D6F952584239}"\r
-EndProject\r
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "multi-threaded test", "multi-threaded test", "{B30CA283-1796-4763-92C3-2E4848D443F7}"\r
-       ProjectSection(SolutionItems) = preProject\r
-               ..\..\..\tests\unit\print_bronsonavltree_stat.h = ..\..\..\tests\unit\print_bronsonavltree_stat.h\r
-               ..\..\..\tests\unit\print_cuckoo_stat.h = ..\..\..\tests\unit\print_cuckoo_stat.h\r
-               ..\..\..\tests\unit\print_ellenbintree_stat.h = ..\..\..\tests\unit\print_ellenbintree_stat.h\r
-               ..\..\..\tests\unit\print_mspriorityqueue_stat.h = ..\..\..\tests\unit\print_mspriorityqueue_stat.h\r
-               ..\..\..\tests\unit\print_feldman_hashset_stat.h = ..\..\..\tests\unit\print_feldman_hashset_stat.h\r
-               ..\..\..\tests\unit\print_segmentedqueue_stat.h = ..\..\..\tests\unit\print_segmentedqueue_stat.h\r
-               ..\..\..\tests\unit\print_skip_list_stat.h = ..\..\..\tests\unit\print_skip_list_stat.h\r
-               ..\..\..\tests\unit\print_split_list_stat.h = ..\..\..\tests\unit\print_split_list_stat.h\r
-               ..\..\..\tests\unit\print_sync_monitor_stat.h = ..\..\..\tests\unit\print_sync_monitor_stat.h\r
-               ..\..\..\tests\unit\set2\set_type_cuckoo.h = ..\..\..\tests\unit\set2\set_type_cuckoo.h\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-prerequisites", "unit-prerequisites.vcxproj", "{61179F2F-07E1-490D-B64D-D85A90B6EF81}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-misc", "unit-misc.vcxproj", "{77350FDC-9E51-438B-9A8F-D2FEA11D46B2}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-queue", "unit-queue.vcxproj", "{6C15AF8A-4A99-49F9-BCF0-1BF36771099A}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-stack", "unit-stack.vcxproj", "{E29DE1F7-AE8D-4AE6-98B1-147E5103D974}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
-       EndProjectSection\r
-EndProject\r
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "single-threaded test", "single-threaded test", "{B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}"\r
-       ProjectSection(SolutionItems) = preProject\r
-               ..\..\..\tests\test-hdr\size_check.h = ..\..\..\tests\test-hdr\size_check.h\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hdr-test-deque", "hdr-test-deque.vcxproj", "{CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hdr-test-map", "hdr-test-map.vcxproj", "{282E9A9A-386A-40FB-A483-994BACE24830}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hdr-test-misc", "hdr-test-misc.vcxproj", "{C5E76975-B87B-4B9E-8596-B01DDA683FCA}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hdr-test-list", "hdr-test-list.vcxproj", "{EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
-       EndProjectSection\r
-EndProject\r
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "map", "map", "{6BB7A27F-FC59-4267-B6FA-D034176D1459}"\r
-       ProjectSection(SolutionItems) = preProject\r
-               ..\..\..\tests\unit\map2\map_defs.h = ..\..\..\tests\unit\map2\map_defs.h\r
-               ..\..\..\tests\unit\map2\map_type.h = ..\..\..\tests\unit\map2\map_type.h\r
-               ..\..\..\tests\unit\map2\map_type_bronson_avltree.h = ..\..\..\tests\unit\map2\map_type_bronson_avltree.h\r
-               ..\..\..\tests\unit\map2\map_type_cuckoo.h = ..\..\..\tests\unit\map2\map_type_cuckoo.h\r
-               ..\..\..\tests\unit\map2\map_type_ellen_bintree.h = ..\..\..\tests\unit\map2\map_type_ellen_bintree.h\r
-               ..\..\..\tests\unit\map2\map_type_lazy_list.h = ..\..\..\tests\unit\map2\map_type_lazy_list.h\r
-               ..\..\..\tests\unit\map2\map_type_michael.h = ..\..\..\tests\unit\map2\map_type_michael.h\r
-               ..\..\..\tests\unit\map2\map_type_michael_list.h = ..\..\..\tests\unit\map2\map_type_michael_list.h\r
-               ..\..\..\tests\unit\map2\map_type_feldman_hashmap.h = ..\..\..\tests\unit\map2\map_type_feldman_hashmap.h\r
-               ..\..\..\tests\unit\map2\map_type_skip_list.h = ..\..\..\tests\unit\map2\map_type_skip_list.h\r
-               ..\..\..\tests\unit\map2\map_type_split_list.h = ..\..\..\tests\unit\map2\map_type_split_list.h\r
-               ..\..\..\tests\unit\map2\map_type_std.h = ..\..\..\tests\unit\map2\map_type_std.h\r
-               ..\..\..\tests\unit\map2\map_type_striped.h = ..\..\..\tests\unit\map2\map_type_striped.h\r
-               ..\..\..\tests\unit\map2\std_hash_map.h = ..\..\..\tests\unit\map2\std_hash_map.h\r
-               ..\..\..\tests\unit\map2\std_map.h = ..\..\..\tests\unit\map2\std_map.h\r
-       EndProjectSection\r
-EndProject\r
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "set", "set", "{A64449B7-90FB-4E2B-A686-9EFC0E298644}"\r
-       ProjectSection(SolutionItems) = preProject\r
-               ..\..\..\tests\unit\set2\set_defs.h = ..\..\..\tests\unit\set2\set_defs.h\r
-               ..\..\..\tests\unit\set2\set_type.h = ..\..\..\tests\unit\set2\set_type.h\r
-               ..\..\..\tests\unit\set2\set_type_cuckoo.h = ..\..\..\tests\unit\set2\set_type_cuckoo.h\r
-               ..\..\..\tests\unit\set2\set_type_ellen_bintree.h = ..\..\..\tests\unit\set2\set_type_ellen_bintree.h\r
-               ..\..\..\tests\unit\set2\set_type_lazy_list.h = ..\..\..\tests\unit\set2\set_type_lazy_list.h\r
-               ..\..\..\tests\unit\set2\set_type_michael.h = ..\..\..\tests\unit\set2\set_type_michael.h\r
-               ..\..\..\tests\unit\set2\set_type_michael_list.h = ..\..\..\tests\unit\set2\set_type_michael_list.h\r
-               ..\..\..\tests\unit\set2\set_type_feldman_hashset.h = ..\..\..\tests\unit\set2\set_type_feldman_hashset.h\r
-               ..\..\..\tests\unit\set2\set_type_skip_list.h = ..\..\..\tests\unit\set2\set_type_skip_list.h\r
-               ..\..\..\tests\unit\set2\set_type_split_list.h = ..\..\..\tests\unit\set2\set_type_split_list.h\r
-               ..\..\..\tests\unit\set2\set_type_std.h = ..\..\..\tests\unit\set2\set_type_std.h\r
-               ..\..\..\tests\unit\set2\set_type_striped.h = ..\..\..\tests\unit\set2\set_type_striped.h\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-map-delodd", "unit-map-delodd.vcxproj", "{3C598F96-FB84-4D42-9B43-F697F53B0221}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-map-find", "unit-map-find.vcxproj", "{BA2A9239-0299-4069-BB0E-16DACE87ADE0}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-map-insdel", "unit-map-insdel.vcxproj", "{CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-set-delodd", "unit-set-delodd.vcxproj", "{AF7B2253-2E6D-4992-94D9-4B3699C54929}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-set-insdel", "unit-set-insdel.vcxproj", "{BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hdr-test-priority_queue", "hdr-test-priority_queue.vcxproj", "{90192F7D-5850-41DD-AE89-62D26B387162}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hdr-test-queue", "hdr-test-queue.vcxproj", "{33664E63-8D24-4FF4-A744-9782EB711509}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hdr-test-set", "hdr-test-set.vcxproj", "{E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hdr-test-stack", "hdr-test-stack.vcxproj", "{E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hdr-test-striped-set", "hdr-test-striped-set.vcxproj", "{A38E5597-6916-4480-A343-C9846EF544E4}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hdr-test-tree", "hdr-test-tree.vcxproj", "{6F834EAD-7B94-4979-A0F1-A662E3D30145}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-pqueue", "unit-pqueue.vcxproj", "{20B6C380-E96A-4CFF-BC17-D88AAE581919}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-map-insdel-item", "unit-map-insdel-item.vcxproj", "{7521DD92-56FF-4ECA-93E5-CCE50862354B}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-map-insdelfind", "unit-map-insdelfind.vcxproj", "{CA6F0834-0628-4CD7-8800-AEABCD636360}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-set-insdelfind", "unit-set-insdelfind.vcxproj", "{DE256E91-EE96-412E-82EE-DD7BD1A1130D}"\r
-       ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
-       EndProjectSection\r
-EndProject\r
-Global\r
-       GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
-               Debug|Win32 = Debug|Win32\r
-               Debug|x64 = Debug|x64\r
-               DebugVLD|Win32 = DebugVLD|Win32\r
-               DebugVLD|x64 = DebugVLD|x64\r
-               ICL-Debug|Win32 = ICL-Debug|Win32\r
-               ICL-Debug|x64 = ICL-Debug|x64\r
-               ICL-Release|Win32 = ICL-Release|Win32\r
-               ICL-Release|x64 = ICL-Release|x64\r
-               Release|Win32 = Release|Win32\r
-               Release|x64 = Release|x64\r
-       EndGlobalSection\r
-       GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.Debug|Win32.Build.0 = Debug|Win32\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.Debug|x64.ActiveCfg = Debug|x64\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.Debug|x64.Build.0 = Debug|x64\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.Release|Win32.ActiveCfg = Release|Win32\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.Release|Win32.Build.0 = Release|Win32\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.Release|x64.ActiveCfg = Release|x64\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.Release|x64.Build.0 = Release|x64\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.Debug|Win32.Build.0 = Debug|Win32\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.Debug|x64.ActiveCfg = Debug|x64\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.Debug|x64.Build.0 = Debug|x64\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.DebugVLD|Win32.ActiveCfg = Debug|Win32\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.DebugVLD|Win32.Build.0 = Debug|Win32\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.Release|Win32.ActiveCfg = Release|Win32\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.Release|Win32.Build.0 = Release|Win32\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.Release|x64.ActiveCfg = Release|x64\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.Release|x64.Build.0 = Release|x64\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.Debug|Win32.Build.0 = Debug|Win32\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.Debug|x64.ActiveCfg = Debug|x64\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.Debug|x64.Build.0 = Debug|x64\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.DebugVLD|Win32.ActiveCfg = Debug|Win32\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.DebugVLD|Win32.Build.0 = Debug|Win32\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.Release|Win32.ActiveCfg = Release|Win32\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.Release|Win32.Build.0 = Release|Win32\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.Release|x64.ActiveCfg = Release|x64\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.Release|x64.Build.0 = Release|x64\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.Debug|Win32.Build.0 = Debug|Win32\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.Debug|x64.ActiveCfg = Debug|x64\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.Debug|x64.Build.0 = Debug|x64\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.DebugVLD|Win32.ActiveCfg = Debug|Win32\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.DebugVLD|Win32.Build.0 = Debug|Win32\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.Release|Win32.ActiveCfg = Release|Win32\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.Release|Win32.Build.0 = Release|Win32\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.Release|x64.ActiveCfg = Release|x64\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.Release|x64.Build.0 = Release|x64\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.Debug|Win32.Build.0 = Debug|Win32\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.Debug|x64.ActiveCfg = Debug|x64\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.Debug|x64.Build.0 = Debug|x64\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.DebugVLD|Win32.ActiveCfg = Debug|Win32\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.DebugVLD|Win32.Build.0 = Debug|Win32\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.Release|Win32.ActiveCfg = Release|Win32\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.Release|Win32.Build.0 = Release|Win32\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.Release|x64.ActiveCfg = Release|x64\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.Release|x64.Build.0 = Release|x64\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.Debug|Win32.Build.0 = Debug|Win32\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.Debug|x64.ActiveCfg = Debug|x64\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.Debug|x64.Build.0 = Debug|x64\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.Release|Win32.ActiveCfg = Release|Win32\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.Release|Win32.Build.0 = Release|Win32\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.Release|x64.ActiveCfg = Release|x64\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.Release|x64.Build.0 = Release|x64\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.Debug|Win32.Build.0 = Debug|Win32\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.Debug|x64.ActiveCfg = Debug|x64\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.Debug|x64.Build.0 = Debug|x64\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.Release|Win32.ActiveCfg = Release|Win32\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.Release|Win32.Build.0 = Release|Win32\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.Release|x64.ActiveCfg = Release|x64\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.Release|x64.Build.0 = Release|x64\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.Debug|Win32.Build.0 = Debug|Win32\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.Debug|x64.ActiveCfg = Debug|x64\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.Debug|x64.Build.0 = Debug|x64\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.Release|Win32.ActiveCfg = Release|Win32\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.Release|Win32.Build.0 = Release|Win32\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.Release|x64.ActiveCfg = Release|x64\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.Release|x64.Build.0 = Release|x64\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.Debug|Win32.Build.0 = Debug|Win32\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.Debug|x64.ActiveCfg = Debug|x64\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.Debug|x64.Build.0 = Debug|x64\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.Release|Win32.ActiveCfg = Release|Win32\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.Release|Win32.Build.0 = Release|Win32\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.Release|x64.ActiveCfg = Release|x64\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.Release|x64.Build.0 = Release|x64\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.Debug|Win32.Build.0 = Debug|Win32\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.Debug|x64.ActiveCfg = Debug|x64\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.Debug|x64.Build.0 = Debug|x64\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.Release|Win32.ActiveCfg = Release|Win32\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.Release|Win32.Build.0 = Release|Win32\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.Release|x64.ActiveCfg = Release|x64\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.Release|x64.Build.0 = Release|x64\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.Debug|Win32.Build.0 = Debug|Win32\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.Debug|x64.ActiveCfg = Debug|x64\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.Debug|x64.Build.0 = Debug|x64\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.Release|Win32.ActiveCfg = Release|Win32\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.Release|Win32.Build.0 = Release|Win32\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.Release|x64.ActiveCfg = Release|x64\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.Release|x64.Build.0 = Release|x64\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.Debug|Win32.Build.0 = Debug|Win32\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.Debug|x64.ActiveCfg = Debug|x64\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.Debug|x64.Build.0 = Debug|x64\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.Release|Win32.ActiveCfg = Release|Win32\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.Release|Win32.Build.0 = Release|Win32\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.Release|x64.ActiveCfg = Release|x64\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.Release|x64.Build.0 = Release|x64\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.Debug|Win32.Build.0 = Debug|Win32\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.Debug|x64.ActiveCfg = Debug|x64\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.Debug|x64.Build.0 = Debug|x64\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.Release|Win32.ActiveCfg = Release|Win32\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.Release|Win32.Build.0 = Release|Win32\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.Release|x64.ActiveCfg = Release|x64\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.Release|x64.Build.0 = Release|x64\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.Debug|Win32.Build.0 = Debug|Win32\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.Debug|x64.ActiveCfg = Debug|x64\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.Debug|x64.Build.0 = Debug|x64\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.Release|Win32.ActiveCfg = Release|Win32\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.Release|Win32.Build.0 = Release|Win32\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.Release|x64.ActiveCfg = Release|x64\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.Release|x64.Build.0 = Release|x64\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.Debug|Win32.Build.0 = Debug|Win32\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.Debug|x64.ActiveCfg = Debug|x64\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.Debug|x64.Build.0 = Debug|x64\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.Release|Win32.ActiveCfg = Release|Win32\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.Release|Win32.Build.0 = Release|Win32\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.Release|x64.ActiveCfg = Release|x64\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.Release|x64.Build.0 = Release|x64\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.Debug|Win32.Build.0 = Debug|Win32\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.Debug|x64.ActiveCfg = Debug|x64\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.Debug|x64.Build.0 = Debug|x64\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.Release|Win32.ActiveCfg = Release|Win32\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.Release|Win32.Build.0 = Release|Win32\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.Release|x64.ActiveCfg = Release|x64\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.Release|x64.Build.0 = Release|x64\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.Debug|Win32.Build.0 = Debug|Win32\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.Debug|x64.ActiveCfg = Debug|x64\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.Debug|x64.Build.0 = Debug|x64\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.Release|Win32.ActiveCfg = Release|Win32\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.Release|Win32.Build.0 = Release|Win32\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.Release|x64.ActiveCfg = Release|x64\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.Release|x64.Build.0 = Release|x64\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.Debug|Win32.Build.0 = Debug|Win32\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.Debug|x64.ActiveCfg = Debug|x64\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.Debug|x64.Build.0 = Debug|x64\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.Release|Win32.ActiveCfg = Release|Win32\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.Release|Win32.Build.0 = Release|Win32\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.Release|x64.ActiveCfg = Release|x64\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.Release|x64.Build.0 = Release|x64\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.Debug|Win32.Build.0 = Debug|Win32\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.Debug|x64.ActiveCfg = Debug|x64\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.Debug|x64.Build.0 = Debug|x64\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.Release|Win32.ActiveCfg = Release|Win32\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.Release|Win32.Build.0 = Release|Win32\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.Release|x64.ActiveCfg = Release|x64\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.Release|x64.Build.0 = Release|x64\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.Debug|Win32.Build.0 = Debug|Win32\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.Debug|x64.ActiveCfg = Debug|x64\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.Debug|x64.Build.0 = Debug|x64\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.Release|Win32.ActiveCfg = Release|Win32\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.Release|Win32.Build.0 = Release|Win32\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.Release|x64.ActiveCfg = Release|x64\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.Release|x64.Build.0 = Release|x64\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.Debug|Win32.Build.0 = Debug|Win32\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.Debug|x64.ActiveCfg = Debug|x64\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.Debug|x64.Build.0 = Debug|x64\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.Release|Win32.ActiveCfg = Release|Win32\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.Release|Win32.Build.0 = Release|Win32\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.Release|x64.ActiveCfg = Release|x64\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.Release|x64.Build.0 = Release|x64\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.Debug|Win32.Build.0 = Debug|Win32\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.Debug|x64.ActiveCfg = Debug|x64\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.Debug|x64.Build.0 = Debug|x64\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.Release|Win32.ActiveCfg = Release|Win32\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.Release|Win32.Build.0 = Release|Win32\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.Release|x64.ActiveCfg = Release|x64\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.Release|x64.Build.0 = Release|x64\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.Debug|Win32.Build.0 = Debug|Win32\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.Debug|x64.ActiveCfg = Debug|x64\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.Debug|x64.Build.0 = Debug|x64\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.Release|Win32.ActiveCfg = Release|Win32\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.Release|Win32.Build.0 = Release|Win32\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.Release|x64.ActiveCfg = Release|x64\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.Release|x64.Build.0 = Release|x64\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.Debug|Win32.Build.0 = Debug|Win32\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.Debug|x64.ActiveCfg = Debug|x64\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.Debug|x64.Build.0 = Debug|x64\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.Release|Win32.ActiveCfg = Release|Win32\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.Release|Win32.Build.0 = Release|Win32\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.Release|x64.ActiveCfg = Release|x64\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.Release|x64.Build.0 = Release|x64\r
-       EndGlobalSection\r
-       GlobalSection(SolutionProperties) = preSolution\r
-               HideSolutionNode = FALSE\r
-       EndGlobalSection\r
-       GlobalSection(NestedProjects) = preSolution\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {B30CA283-1796-4763-92C3-2E4848D443F7}\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2} = {B30CA283-1796-4763-92C3-2E4848D443F7}\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A} = {B30CA283-1796-4763-92C3-2E4848D443F7}\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974} = {B30CA283-1796-4763-92C3-2E4848D443F7}\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
-               {282E9A9A-386A-40FB-A483-994BACE24830} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
-               {6BB7A27F-FC59-4267-B6FA-D034176D1459} = {B30CA283-1796-4763-92C3-2E4848D443F7}\r
-               {A64449B7-90FB-4E2B-A686-9EFC0E298644} = {B30CA283-1796-4763-92C3-2E4848D443F7}\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221} = {6BB7A27F-FC59-4267-B6FA-D034176D1459}\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0} = {6BB7A27F-FC59-4267-B6FA-D034176D1459}\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4} = {6BB7A27F-FC59-4267-B6FA-D034176D1459}\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929} = {A64449B7-90FB-4E2B-A686-9EFC0E298644}\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1} = {A64449B7-90FB-4E2B-A686-9EFC0E298644}\r
-               {90192F7D-5850-41DD-AE89-62D26B387162} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
-               {33664E63-8D24-4FF4-A744-9782EB711509} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
-               {A38E5597-6916-4480-A343-C9846EF544E4} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919} = {B30CA283-1796-4763-92C3-2E4848D443F7}\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B} = {6BB7A27F-FC59-4267-B6FA-D034176D1459}\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360} = {6BB7A27F-FC59-4267-B6FA-D034176D1459}\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D} = {A64449B7-90FB-4E2B-A686-9EFC0E298644}\r
-       EndGlobalSection\r
-       GlobalSection(DPCodeReviewSolutionGUID) = preSolution\r
-               DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000}\r
-       EndGlobalSection\r
-EndGlobal\r
diff --git a/projects/Win/vc12/cds.vcxproj b/projects/Win/vc12/cds.vcxproj
deleted file mode 100644 (file)
index 7252fb6..0000000
+++ /dev/null
@@ -1,984 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{408FE9BC-44F0-4E6A-89FA-D6F952584239}</ProjectGuid>\r
-    <RootNamespace>cds</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">true</LinkIncremental>\r
-    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</GenerateManifest>\r
-    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">true</GenerateManifest>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">true</LinkIncremental>\r
-    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</GenerateManifest>\r
-    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">true</GenerateManifest>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</GenerateManifest>\r
-    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">true</GenerateManifest>\r
-    <PostBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</PostBuildEventUseInBuild>\r
-    <PostBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</PostBuildEventUseInBuild>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</GenerateManifest>\r
-    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">true</GenerateManifest>\r
-    <PostBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</PostBuildEventUseInBuild>\r
-    <PostBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</PostBuildEventUseInBuild>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">true</LinkIncremental>\r
-    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">true</GenerateManifest>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">true</LinkIncremental>\r
-    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">true</GenerateManifest>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">libcds-x86-vc12_debug</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">libcds-x86-icl_debug</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">libcds-x86-vc12_debug</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">libcds-x86-vc12</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">libcds-x86-icl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">libcds-amd64-vc12_debug</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">libcds-amd64-icl_debug</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">libcds-amd64-vc12_debug</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">libcds-amd64-vc12</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">libcds-amd64-icl</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/wd4512 /wd4127 /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>\r
-      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/wd4512 /wd4127 %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>\r
-      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/wd4512 /wd4127 /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
-      <WarningLevel>Level4</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>\r
-      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <AdditionalDependencies>\r
-      </AdditionalDependencies>\r
-      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/wd4512 /wd4127 %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
-      <WarningLevel>Level4</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>\r
-      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <AdditionalDependencies>\r
-      </AdditionalDependencies>\r
-      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/wd4512 /wd4127 /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>\r
-      <WholeProgramOptimization>false</WholeProgramOptimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>\r
-      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <SubSystem>NotSet</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>\r
-      </LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <AdditionalDependencies>\r
-      </AdditionalDependencies>\r
-    </Link>\r
-    <PostBuildEvent>\r
-      <Message>\r
-      </Message>\r
-      <Command>\r
-      </Command>\r
-    </PostBuildEvent>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/wd4512 /wd4127 %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>\r
-      <WholeProgramOptimization>false</WholeProgramOptimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>\r
-      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <SubSystem>NotSet</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>\r
-      </LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <AdditionalDependencies>\r
-      </AdditionalDependencies>\r
-    </Link>\r
-    <PostBuildEvent>\r
-      <Message>\r
-      </Message>\r
-      <Command>\r
-      </Command>\r
-    </PostBuildEvent>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/wd4512 /wd4127 /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <EnableFiberSafeOptimizations>false</EnableFiberSafeOptimizations>\r
-      <WholeProgramOptimization>false</WholeProgramOptimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>\r
-      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <SubSystem>NotSet</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>\r
-      </LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>false</Profile>\r
-      <AdditionalDependencies>\r
-      </AdditionalDependencies>\r
-      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>\r
-      <SuppressStartupBanner>false</SuppressStartupBanner>\r
-    </Link>\r
-    <PostBuildEvent>\r
-      <Message>\r
-      </Message>\r
-      <Command>\r
-      </Command>\r
-    </PostBuildEvent>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/wd4512 /wd4127 %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <EnableFiberSafeOptimizations>false</EnableFiberSafeOptimizations>\r
-      <WholeProgramOptimization>false</WholeProgramOptimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <EmitDiagnosticsToFile>false</EmitDiagnosticsToFile>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>\r
-      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <SubSystem>NotSet</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>\r
-      </LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>false</Profile>\r
-      <AdditionalDependencies>\r
-      </AdditionalDependencies>\r
-      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>\r
-      <SuppressStartupBanner>false</SuppressStartupBanner>\r
-    </Link>\r
-    <PostBuildEvent>\r
-      <Message>\r
-      </Message>\r
-      <Command>\r
-      </Command>\r
-    </PostBuildEvent>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/wd4512 /wd4127 /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>\r
-      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/wd4512 /wd4127 /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
-      <WarningLevel>Level4</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>\r
-      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\src\dhp_gc.cpp" />\r
-    <ClCompile Include="..\..\..\src\dllmain.cpp" />\r
-    <ClCompile Include="..\..\..\src\hp_gc.cpp" />\r
-    <ClCompile Include="..\..\..\src\init.cpp" />\r
-    <ClCompile Include="..\..\..\src\michael_heap.cpp" />\r
-    <ClCompile Include="..\..\..\src\topology_hpux.cpp" />\r
-    <ClCompile Include="..\..\..\src\topology_linux.cpp" />\r
-    <ClCompile Include="..\..\..\src\topology_osx.cpp" />\r
-    <ClCompile Include="..\..\..\src\urcu_gp.cpp" />\r
-    <ClCompile Include="..\..\..\src\urcu_sh.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\cds\algo\atomic.h" />\r
-    <ClInclude Include="..\..\..\cds\algo\backoff_strategy.h" />\r
-    <ClInclude Include="..\..\..\cds\algo\base.h" />\r
-    <ClInclude Include="..\..\..\cds\algo\bitop.h" />\r
-    <ClInclude Include="..\..\..\cds\algo\split_bitstring.h" />\r
-    <ClInclude Include="..\..\..\cds\algo\elimination.h" />\r
-    <ClInclude Include="..\..\..\cds\algo\elimination_opt.h" />\r
-    <ClInclude Include="..\..\..\cds\algo\elimination_tls.h" />\r
-    <ClInclude Include="..\..\..\cds\algo\flat_combining.h" />\r
-    <ClInclude Include="..\..\..\cds\algo\int_algo.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\clang\defs.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\cxx11_atomic.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\feature_tsan.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\amd64\cxx11_atomic.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\compiler_macro.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\ia64\cxx11_atomic.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\sparc\cxx11_atomic.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\x86\cxx11_atomic.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\x86\cxx11_atomic32.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\icl\compiler_barriers.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\icl\defs.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\vc\amd64\cxx11_atomic.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\vc\x86\cxx11_atomic.h" />\r
-    <ClInclude Include="..\..\..\cds\container\basket_queue.h" />\r
-    <ClInclude Include="..\..\..\cds\container\bronson_avltree_map_rcu.h" />\r
-    <ClInclude Include="..\..\..\cds\container\cuckoo_map.h" />\r
-    <ClInclude Include="..\..\..\cds\container\cuckoo_set.h" />\r
-    <ClInclude Include="..\..\..\cds\container\details\base.h" />\r
-    <ClInclude Include="..\..\..\cds\container\details\bronson_avltree_base.h" />\r
-    <ClInclude Include="..\..\..\cds\container\details\cuckoo_base.h" />\r
-    <ClInclude Include="..\..\..\cds\container\details\ellen_bintree_base.h" />\r
-    <ClInclude Include="..\..\..\cds\container\details\guarded_ptr_cast.h" />\r
-    <ClInclude Include="..\..\..\cds\container\details\lazy_list_base.h" />\r
-    <ClInclude Include="..\..\..\cds\container\details\make_skip_list_map.h" />\r
-    <ClInclude Include="..\..\..\cds\container\details\make_skip_list_set.h" />\r
-    <ClInclude Include="..\..\..\cds\container\details\make_split_list_set.h" />\r
-    <ClInclude Include="..\..\..\cds\container\details\michael_list_base.h" />\r
-    <ClInclude Include="..\..\..\cds\container\details\michael_map_base.h" />\r
-    <ClInclude Include="..\..\..\cds\container\details\michael_set_base.h" />\r
-    <ClInclude Include="..\..\..\cds\container\details\feldman_hashmap_base.h" />\r
-    <ClInclude Include="..\..\..\cds\container\details\feldman_hashset_base.h" />\r
-    <ClInclude Include="..\..\..\cds\container\details\skip_list_base.h" />\r
-    <ClInclude Include="..\..\..\cds\container\details\split_list_base.h" />\r
-    <ClInclude Include="..\..\..\cds\container\ellen_bintree_map_dhp.h" />\r
-    <ClInclude Include="..\..\..\cds\container\ellen_bintree_map_hp.h" />\r
-    <ClInclude Include="..\..\..\cds\container\ellen_bintree_map_rcu.h" />\r
-    <ClInclude Include="..\..\..\cds\container\ellen_bintree_set_dhp.h" />\r
-    <ClInclude Include="..\..\..\cds\container\ellen_bintree_set_hp.h" />\r
-    <ClInclude Include="..\..\..\cds\container\ellen_bintree_set_rcu.h" />\r
-    <ClInclude Include="..\..\..\cds\container\impl\bronson_avltree_map_rcu.h" />\r
-    <ClInclude Include="..\..\..\cds\container\impl\ellen_bintree_map.h" />\r
-    <ClInclude Include="..\..\..\cds\container\impl\ellen_bintree_set.h" />\r
-    <ClInclude Include="..\..\..\cds\container\impl\lazy_kvlist.h" />\r
-    <ClInclude Include="..\..\..\cds\container\impl\lazy_list.h" />\r
-    <ClInclude Include="..\..\..\cds\container\impl\michael_kvlist.h" />\r
-    <ClInclude Include="..\..\..\cds\container\impl\michael_list.h" />\r
-    <ClInclude Include="..\..\..\cds\container\impl\feldman_hashmap.h" />\r
-    <ClInclude Include="..\..\..\cds\container\impl\feldman_hashset.h" />\r
-    <ClInclude Include="..\..\..\cds\container\impl\skip_list_map.h" />\r
-    <ClInclude Include="..\..\..\cds\container\impl\skip_list_set.h" />\r
-    <ClInclude Include="..\..\..\cds\container\lazy_kvlist_dhp.h" />\r
-    <ClInclude Include="..\..\..\cds\container\lazy_kvlist_rcu.h" />\r
-    <ClInclude Include="..\..\..\cds\container\lazy_list_dhp.h" />\r
-    <ClInclude Include="..\..\..\cds\container\lazy_list_rcu.h" />\r
-    <ClInclude Include="..\..\..\cds\container\michael_kvlist_dhp.h" />\r
-    <ClInclude Include="..\..\..\cds\container\michael_kvlist_rcu.h" />\r
-    <ClInclude Include="..\..\..\cds\container\michael_list_dhp.h" />\r
-    <ClInclude Include="..\..\..\cds\container\michael_list_rcu.h" />\r
-    <ClInclude Include="..\..\..\cds\container\michael_map_rcu.h" />\r
-    <ClInclude Include="..\..\..\cds\container\michael_set_rcu.h" />\r
-    <ClInclude Include="..\..\..\cds\container\mspriority_queue.h" />\r
-    <ClInclude Include="..\..\..\cds\container\feldman_hashmap_dhp.h" />\r
-    <ClInclude Include="..\..\..\cds\container\feldman_hashmap_hp.h" />\r
-    <ClInclude Include="..\..\..\cds\container\feldman_hashmap_rcu.h" />\r
-    <ClInclude Include="..\..\..\cds\container\feldman_hashset_dhp.h" />\r
-    <ClInclude Include="..\..\..\cds\container\feldman_hashset_hp.h" />\r
-    <ClInclude Include="..\..\..\cds\container\feldman_hashset_rcu.h" />\r
-    <ClInclude Include="..\..\..\cds\container\skip_list_map_dhp.h" />\r
-    <ClInclude Include="..\..\..\cds\container\skip_list_map_hp.h" />\r
-    <ClInclude Include="..\..\..\cds\container\skip_list_map_nogc.h" />\r
-    <ClInclude Include="..\..\..\cds\container\skip_list_map_rcu.h" />\r
-    <ClInclude Include="..\..\..\cds\container\skip_list_set_dhp.h" />\r
-    <ClInclude Include="..\..\..\cds\container\skip_list_set_hp.h" />\r
-    <ClInclude Include="..\..\..\cds\container\skip_list_set_nogc.h" />\r
-    <ClInclude Include="..\..\..\cds\container\skip_list_set_rcu.h" />\r
-    <ClInclude Include="..\..\..\cds\container\split_list_map_rcu.h" />\r
-    <ClInclude Include="..\..\..\cds\container\split_list_set_rcu.h" />\r
-    <ClInclude Include="..\..\..\cds\container\striped_map.h" />\r
-    <ClInclude Include="..\..\..\cds\container\striped_map\boost_flat_map.h" />\r
-    <ClInclude Include="..\..\..\cds\container\striped_map\boost_list.h" />\r
-    <ClInclude Include="..\..\..\cds\container\striped_map\boost_map.h" />\r
-    <ClInclude Include="..\..\..\cds\container\striped_map\boost_slist.h" />\r
-    <ClInclude Include="..\..\..\cds\container\striped_map\boost_unordered_map.h" />\r
-    <ClInclude Include="..\..\..\cds\container\striped_map\std_hash_map.h" />\r
-    <ClInclude Include="..\..\..\cds\container\striped_map\std_list.h" />\r
-    <ClInclude Include="..\..\..\cds\container\striped_map\std_map.h" />\r
-    <ClInclude Include="..\..\..\cds\container\striped_set.h" />\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\adapter.h" />\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\boost_flat_set.h" />\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\boost_list.h" />\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\boost_set.h" />\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\boost_slist.h" />\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\boost_stable_vector.h" />\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\boost_unordered_set.h" />\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\boost_vector.h" />\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\std_hash_set.h" />\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\std_list.h" />\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\std_set.h" />\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\std_vector.h" />\r
-    <ClInclude Include="..\..\..\cds\details\binary_functor_wrapper.h" />\r
-    <ClInclude Include="..\..\..\cds\details\bit_reverse_counter.h" />\r
-    <ClInclude Include="..\..\..\cds\details\bounded_container.h" />\r
-    <ClInclude Include="..\..\..\cds\details\lib.h" />\r
-    <ClInclude Include="..\..\..\cds\details\static_functor.h" />\r
-    <ClInclude Include="..\..\..\cds\gc\details\dhp.h" />\r
-    <ClInclude Include="..\..\..\cds\gc\details\hp.h" />\r
-    <ClInclude Include="..\..\..\cds\gc\details\hp_alloc.h" />\r
-    <ClInclude Include="..\..\..\cds\gc\details\hp_type.h" />\r
-    <ClInclude Include="..\..\..\cds\gc\dhp.h" />\r
-    <ClInclude Include="..\..\..\cds\gc\impl\dhp_decl.h" />\r
-    <ClInclude Include="..\..\..\cds\gc\impl\dhp_impl.h" />\r
-    <ClInclude Include="..\..\..\cds\gc\impl\hp_decl.h" />\r
-    <ClInclude Include="..\..\..\cds\gc\impl\hp_impl.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\basket_queue.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\cuckoo_set.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\details\base.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\details\ellen_bintree_base.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\details\lazy_list_base.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\details\michael_list_base.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\details\michael_set_base.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\details\feldman_hashset_base.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\details\node_traits.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\details\raw_ptr_disposer.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\details\single_link_struct.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\details\skip_list_base.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\details\split_list_base.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\ellen_bintree_dhp.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\ellen_bintree_hp.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\ellen_bintree_rcu.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\impl\ellen_bintree.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\impl\lazy_list.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\impl\michael_list.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\impl\feldman_hashset.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\impl\skip_list.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\lazy_list_dhp.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\lazy_list_rcu.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\michael_list_dhp.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\michael_list_rcu.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\michael_set_rcu.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\mspriority_queue.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\feldman_hashset_dhp.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\feldman_hashset_hp.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\feldman_hashset_rcu.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\options.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\skip_list_dhp.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\skip_list_hp.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\skip_list_nogc.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\skip_list_rcu.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\split_list_rcu.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set\adapter.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set\boost_avl_set.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set\boost_list.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set\boost_set.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set\boost_sg_set.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set\boost_slist.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set\boost_splay_set.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set\boost_treap_set.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set\boost_unordered_set.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set\resizing_policy.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set\striping_policy.h" />\r
-    <ClInclude Include="..\..\..\cds\lock\array.h" />\r
-    <ClInclude Include="..\..\..\cds\memory\pool_allocator.h" />\r
-    <ClInclude Include="..\..\..\cds\memory\vyukov_queue_pool.h" />\r
-    <ClInclude Include="..\..\..\cds\os\osx\timer.h" />\r
-    <ClInclude Include="..\..\..\cds\os\osx\topology.h" />\r
-    <ClInclude Include="..\..\..\cds\os\posix\fake_topology.h" />\r
-    <ClInclude Include="..\..\..\cds\os\posix\timer.h" />\r
-    <ClInclude Include="..\..\..\cds\sync\injecting_monitor.h" />\r
-    <ClInclude Include="..\..\..\cds\sync\lock_array.h" />\r
-    <ClInclude Include="..\..\..\cds\sync\monitor.h" />\r
-    <ClInclude Include="..\..\..\cds\sync\pool_monitor.h" />\r
-    <ClInclude Include="..\..\..\cds\sync\spinlock.h" />\r
-    <ClInclude Include="..\..\..\cds\threading\details\cxx11.h" />\r
-    <ClInclude Include="..\..\..\cds\threading\details\cxx11_manager.h" />\r
-    <ClInclude Include="..\..\..\cds\urcu\details\base.h" />\r
-    <ClInclude Include="..\..\..\cds\urcu\details\check_deadlock.h" />\r
-    <ClInclude Include="..\..\..\cds\urcu\details\gp.h" />\r
-    <ClInclude Include="..\..\..\cds\urcu\details\gpb.h" />\r
-    <ClInclude Include="..\..\..\cds\urcu\details\gpi.h" />\r
-    <ClInclude Include="..\..\..\cds\urcu\details\gpt.h" />\r
-    <ClInclude Include="..\..\..\cds\urcu\details\gp_decl.h" />\r
-    <ClInclude Include="..\..\..\cds\urcu\details\sh.h" />\r
-    <ClInclude Include="..\..\..\cds\urcu\details\sh_decl.h" />\r
-    <ClInclude Include="..\..\..\cds\urcu\details\sig_buffered.h" />\r
-    <ClInclude Include="..\..\..\cds\urcu\details\sig_threaded.h" />\r
-    <ClInclude Include="..\..\..\cds\urcu\exempt_ptr.h" />\r
-    <ClInclude Include="..\..\..\cds\urcu\dispose_thread.h" />\r
-    <ClInclude Include="..\..\..\cds\urcu\general_buffered.h" />\r
-    <ClInclude Include="..\..\..\cds\urcu\general_instant.h" />\r
-    <ClInclude Include="..\..\..\cds\urcu\general_threaded.h" />\r
-    <ClInclude Include="..\..\..\cds\urcu\options.h" />\r
-    <ClInclude Include="..\..\..\cds\urcu\raw_ptr.h" />\r
-    <ClInclude Include="..\..\..\cds\urcu\signal_buffered.h" />\r
-    <ClInclude Include="..\..\..\cds\urcu\signal_threaded.h" />\r
-    <ClInclude Include="..\..\..\cds\init.h" />\r
-    <ClInclude Include="..\..\..\cds\version.h" />\r
-    <ClInclude Include="..\..\..\cds\details\aligned_allocator.h" />\r
-    <ClInclude Include="..\..\..\cds\details\aligned_type.h" />\r
-    <ClInclude Include="..\..\..\cds\details\allocator.h" />\r
-    <ClInclude Include="..\..\..\cds\details\bitop_generic.h" />\r
-    <ClInclude Include="..\..\..\cds\details\bounded_array.h" />\r
-    <ClInclude Include="..\..\..\cds\details\defs.h" />\r
-    <ClInclude Include="..\..\..\cds\details\is_aligned.h" />\r
-    <ClInclude Include="..\..\..\cds\details\make_const_type.h" />\r
-    <ClInclude Include="..\..\..\cds\details\marked_ptr.h" />\r
-    <ClInclude Include="..\..\..\cds\details\trivial_assign.h" />\r
-    <ClInclude Include="..\..\..\cds\details\type_padding.h" />\r
-    <ClInclude Include="..\..\..\cds\gc\default_gc.h" />\r
-    <ClInclude Include="..\..\..\cds\gc\hp.h" />\r
-    <ClInclude Include="..\..\..\cds\gc\nogc.h" />\r
-    <ClInclude Include="..\..\..\cds\gc\details\retired_ptr.h" />\r
-    <ClInclude Include="..\..\..\cds\user_setup\allocator.h" />\r
-    <ClInclude Include="..\..\..\cds\user_setup\cache_line.h" />\r
-    <ClInclude Include="..\..\..\cds\user_setup\threading.h" />\r
-    <ClInclude Include="..\..\..\cds\lock\spinlock.h" />\r
-    <ClInclude Include="..\..\..\cds\threading\details\_common.h" />\r
-    <ClInclude Include="..\..\..\cds\threading\details\auto_detect.h" />\r
-    <ClInclude Include="..\..\..\cds\threading\details\gcc.h" />\r
-    <ClInclude Include="..\..\..\cds\threading\details\gcc_manager.h" />\r
-    <ClInclude Include="..\..\..\cds\threading\model.h" />\r
-    <ClInclude Include="..\..\..\cds\threading\details\msvc.h" />\r
-    <ClInclude Include="..\..\..\cds\threading\details\msvc_manager.h" />\r
-    <ClInclude Include="..\..\..\cds\threading\details\pthread.h" />\r
-    <ClInclude Include="..\..\..\cds\threading\details\pthread_manager.h" />\r
-    <ClInclude Include="..\..\..\cds\threading\details\wintls.h" />\r
-    <ClInclude Include="..\..\..\cds\threading\details\wintls_manager.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\backoff.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\bitop.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\defs.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\compiler_barriers.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\defs.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\amd64\backoff.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\amd64\bitop.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\ia64\backoff.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\ia64\bitop.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\sparc\backoff.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\sparc\bitop.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\x86\backoff.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\x86\bitop.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\ppc64\backoff.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\ppc64\bitop.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\vc\compiler_barriers.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\vc\defs.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\vc\x86\backoff.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\vc\x86\bitop.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\vc\amd64\backoff.h" />\r
-    <ClInclude Include="..\..\..\cds\compiler\vc\amd64\bitop.h" />\r
-    <ClInclude Include="..\..\..\cds\os\alloc_aligned.h" />\r
-    <ClInclude Include="..\..\..\cds\os\thread.h" />\r
-    <ClInclude Include="..\..\..\cds\os\timer.h" />\r
-    <ClInclude Include="..\..\..\cds\os\topology.h" />\r
-    <ClInclude Include="..\..\..\cds\os\hpux\alloc_aligned.h" />\r
-    <ClInclude Include="..\..\..\cds\os\hpux\timer.h" />\r
-    <ClInclude Include="..\..\..\cds\os\hpux\topology.h" />\r
-    <ClInclude Include="..\..\..\cds\os\linux\alloc_aligned.h" />\r
-    <ClInclude Include="..\..\..\cds\os\linux\timer.h" />\r
-    <ClInclude Include="..\..\..\cds\os\linux\topology.h" />\r
-    <ClInclude Include="..\..\..\cds\os\posix\alloc_aligned.h" />\r
-    <ClInclude Include="..\..\..\cds\os\posix\thread.h" />\r
-    <ClInclude Include="..\..\..\cds\os\sunos\alloc_aligned.h" />\r
-    <ClInclude Include="..\..\..\cds\os\sunos\timer.h" />\r
-    <ClInclude Include="..\..\..\cds\os\sunos\topology.h" />\r
-    <ClInclude Include="..\..\..\cds\os\win\alloc_aligned.h" />\r
-    <ClInclude Include="..\..\..\cds\os\win\thread.h" />\r
-    <ClInclude Include="..\..\..\cds\os\win\timer.h" />\r
-    <ClInclude Include="..\..\..\cds\os\win\topology.h" />\r
-    <ClInclude Include="..\..\..\cds\os\aix\alloc_aligned.h" />\r
-    <ClInclude Include="..\..\..\cds\os\aix\timer.h" />\r
-    <ClInclude Include="..\..\..\cds\os\aix\topology.h" />\r
-    <ClInclude Include="..\..\..\cds\os\libc\alloc_aligned.h" />\r
-    <ClInclude Include="..\..\..\cds\os\free_bsd\alloc_aligned.h" />\r
-    <ClInclude Include="..\..\..\cds\os\free_bsd\timer.h" />\r
-    <ClInclude Include="..\..\..\cds\os\free_bsd\topology.h" />\r
-    <ClInclude Include="..\..\..\cds\os\details\fake_topology.h" />\r
-    <ClInclude Include="..\..\..\cds\memory\michael\allocator.h" />\r
-    <ClInclude Include="..\..\..\cds\memory\michael\bound_check.h" />\r
-    <ClInclude Include="..\..\..\cds\memory\michael\options.h" />\r
-    <ClInclude Include="..\..\..\cds\memory\michael\osalloc_stat.h" />\r
-    <ClInclude Include="..\..\..\cds\memory\michael\procheap_stat.h" />\r
-    <ClInclude Include="..\..\..\cds\opt\buffer.h" />\r
-    <ClInclude Include="..\..\..\cds\opt\compare.h" />\r
-    <ClInclude Include="..\..\..\cds\opt\hash.h" />\r
-    <ClInclude Include="..\..\..\cds\opt\options.h" />\r
-    <ClInclude Include="..\..\..\cds\opt\permutation.h" />\r
-    <ClInclude Include="..\..\..\cds\opt\value_cleaner.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\fcqueue.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\fcstack.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\lazy_list_hp.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\lazy_list_nogc.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\michael_list_hp.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\michael_list_nogc.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\michael_set.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\michael_set_nogc.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\moir_queue.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\msqueue.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\optimistic_queue.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\segmented_queue.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\split_list.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\split_list_nogc.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\treiber_stack.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\tsigas_cycle_queue.h" />\r
-    <ClInclude Include="..\..\..\cds\intrusive\vyukov_mpmc_cycle_queue.h" />\r
-    <ClInclude Include="..\..\..\cds\container\fcdeque.h" />\r
-    <ClInclude Include="..\..\..\cds\container\fcpriority_queue.h" />\r
-    <ClInclude Include="..\..\..\cds\container\fcqueue.h" />\r
-    <ClInclude Include="..\..\..\cds\container\fcstack.h" />\r
-    <ClInclude Include="..\..\..\cds\container\lazy_kvlist_hp.h" />\r
-    <ClInclude Include="..\..\..\cds\container\lazy_kvlist_nogc.h" />\r
-    <ClInclude Include="..\..\..\cds\container\lazy_list_hp.h" />\r
-    <ClInclude Include="..\..\..\cds\container\lazy_list_nogc.h" />\r
-    <ClInclude Include="..\..\..\cds\container\michael_kvlist_hp.h" />\r
-    <ClInclude Include="..\..\..\cds\container\michael_kvlist_nogc.h" />\r
-    <ClInclude Include="..\..\..\cds\container\michael_list_hp.h" />\r
-    <ClInclude Include="..\..\..\cds\container\michael_list_nogc.h" />\r
-    <ClInclude Include="..\..\..\cds\container\michael_map.h" />\r
-    <ClInclude Include="..\..\..\cds\container\michael_map_nogc.h" />\r
-    <ClInclude Include="..\..\..\cds\container\michael_set.h" />\r
-    <ClInclude Include="..\..\..\cds\container\michael_set_nogc.h" />\r
-    <ClInclude Include="..\..\..\cds\container\moir_queue.h" />\r
-    <ClInclude Include="..\..\..\cds\container\msqueue.h" />\r
-    <ClInclude Include="..\..\..\cds\container\optimistic_queue.h" />\r
-    <ClInclude Include="..\..\..\cds\container\rwqueue.h" />\r
-    <ClInclude Include="..\..\..\cds\container\segmented_queue.h" />\r
-    <ClInclude Include="..\..\..\cds\container\split_list_map.h" />\r
-    <ClInclude Include="..\..\..\cds\container\split_list_map_nogc.h" />\r
-    <ClInclude Include="..\..\..\cds\container\split_list_set.h" />\r
-    <ClInclude Include="..\..\..\cds\container\split_list_set_nogc.h" />\r
-    <ClInclude Include="..\..\..\cds\container\treiber_stack.h" />\r
-    <ClInclude Include="..\..\..\cds\container\tsigas_cycle_queue.h" />\r
-    <ClInclude Include="..\..\..\cds\container\vyukov_mpmc_cycle_queue.h" />\r
-    <ClInclude Include="..\..\..\cds\container\details\make_lazy_kvlist.h" />\r
-    <ClInclude Include="..\..\..\cds\container\details\make_lazy_list.h" />\r
-    <ClInclude Include="..\..\..\cds\container\details\make_michael_kvlist.h" />\r
-    <ClInclude Include="..\..\..\cds\container\details\make_michael_list.h" />\r
-    <ClInclude Include="..\..\..\src\hp_const.h" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/cds.vcxproj.filters b/projects/Win/vc12/cds.vcxproj.filters
deleted file mode 100644 (file)
index f1b3729..0000000
+++ /dev/null
@@ -1,1230 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <Filter Include="Source Files">\r
-      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r
-      <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r
-    </Filter>\r
-    <Filter Include="Header Files">\r
-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r
-      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds">\r
-      <UniqueIdentifier>{202add83-3de8-46db-a1aa-4c0030beae1a}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\details">\r
-      <UniqueIdentifier>{0051e611-824f-49c5-b100-df394c55975a}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\gc">\r
-      <UniqueIdentifier>{a3c9928d-5261-4593-a8b9-728235f7056f}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\gc\details">\r
-      <UniqueIdentifier>{d7c48c0e-cc45-4a1a-b8e9-aa5b50abd22a}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\user_setup">\r
-      <UniqueIdentifier>{f9f695b1-1322-437c-87b2-c243d83e1b0c}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\lock">\r
-      <UniqueIdentifier>{189d2da3-ba56-44b2-be2a-fad41fd75c4e}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\threading">\r
-      <UniqueIdentifier>{1af712b3-4429-4ecc-b0a2-f9c639decd19}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\compiler">\r
-      <UniqueIdentifier>{4cce5abe-4256-4883-988d-2e725f38eee4}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\compiler\gcc">\r
-      <UniqueIdentifier>{98435c30-814f-40fb-8906-0e7847db55ff}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\compiler\gcc\amd64">\r
-      <UniqueIdentifier>{87ab6aea-29b2-4e79-ad22-2190fa3c5870}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\compiler\gcc\ia64">\r
-      <UniqueIdentifier>{9aedc993-3ad3-4f6b-9df0-cdf5a69a3ae0}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\compiler\gcc\sparc">\r
-      <UniqueIdentifier>{44e1d2da-18b3-416f-9aeb-d937d46b5479}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\compiler\gcc\x86">\r
-      <UniqueIdentifier>{45671e15-bec1-47fd-a174-a7b57bb55458}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\compiler\gcc\ppc64">\r
-      <UniqueIdentifier>{58c4d0de-4802-4a0f-9f03-37b338b9d08a}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\compiler\vc">\r
-      <UniqueIdentifier>{04b93d00-cb76-468a-86ce-f03ba531e47d}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\compiler\vc\x86">\r
-      <UniqueIdentifier>{2a690a60-0be8-423f-91cb-7f198b4bc507}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\compiler\vc\amd64">\r
-      <UniqueIdentifier>{125d466a-6e6e-4c88-9c60-475557797d91}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\OS">\r
-      <UniqueIdentifier>{f058a2ad-989d-45e9-9bb2-43dfda122708}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\OS\hpux">\r
-      <UniqueIdentifier>{36e1bb0b-ab23-4484-8fb2-cc52bad3dbe3}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\OS\linux">\r
-      <UniqueIdentifier>{6d27baa4-414b-41a6-a7e0-72e406af5543}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\OS\posix">\r
-      <UniqueIdentifier>{00c94a5c-9f94-427b-9739-fc06a2f39167}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\OS\sunos">\r
-      <UniqueIdentifier>{4bc2a231-2ea0-4af8-84ad-534a76fda942}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\OS\win">\r
-      <UniqueIdentifier>{64c62189-73c0-4c45-9bf5-aed7b5c6c5e4}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\OS\aix">\r
-      <UniqueIdentifier>{5cf9ca07-cadf-4854-a36d-f8293bffc553}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\OS\libc">\r
-      <UniqueIdentifier>{20b237f6-e6fd-43bd-970d-4f1daf89f494}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\OS\free_bsd">\r
-      <UniqueIdentifier>{f1518588-7c09-496e-81c0-a1ee55cc5d21}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\OS\details">\r
-      <UniqueIdentifier>{fcebfe0e-30de-48ac-8890-7497f1d97fba}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\memory">\r
-      <UniqueIdentifier>{5c631093-3ca2-4a36-acf7-2d9368b65366}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\memory\michael">\r
-      <UniqueIdentifier>{b7cdb65c-15d3-4655-abec-1e4640271432}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\opt">\r
-      <UniqueIdentifier>{fe7576b4-d93f-473a-8522-493feac51996}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\intrusive">\r
-      <UniqueIdentifier>{7226715d-6777-4c01-8e66-83b3885c00c1}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\container">\r
-      <UniqueIdentifier>{84ca9e83-f6c9-4503-a45f-14f08317fd70}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\container\details">\r
-      <UniqueIdentifier>{4b79fe31-4f6c-4e05-8910-1151a26d51f3}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Resource Files">\r
-      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r
-      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx</Extensions>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\compiler\clang">\r
-      <UniqueIdentifier>{ae97048d-bd62-4ff2-be28-3c84338e7186}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\intrusive\striped_set">\r
-      <UniqueIdentifier>{560b4d4c-71e1-443c-942e-dcc5a275c7c2}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\container\striped_map">\r
-      <UniqueIdentifier>{6530b757-5bb7-4de0-b1c9-019acc8183ba}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\container\striped_set">\r
-      <UniqueIdentifier>{d3f68c37-8c36-448e-9d4c-cd89a940d275}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\urcu">\r
-      <UniqueIdentifier>{32754dfc-727a-42ff-b243-9a8510bf5c4e}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\urcu\details">\r
-      <UniqueIdentifier>{c621d14b-f90c-4e13-bfd6-16318f3e16da}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\intrusive\details">\r
-      <UniqueIdentifier>{97ec57a8-312a-408a-9f19-76705940a0aa}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\compiler\icl">\r
-      <UniqueIdentifier>{355e1ac3-ee6a-49c1-8ba6-03e0b7a036e3}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\OS\osx">\r
-      <UniqueIdentifier>{d6687964-5707-4f13-aedf-99873453e402}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\algo">\r
-      <UniqueIdentifier>{a85484ff-a066-4ee3-a856-b724b72dd7ff}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\intrusive\impl">\r
-      <UniqueIdentifier>{00a14aa8-3035-4b56-bc86-442ca9bf8f44}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\container\impl">\r
-      <UniqueIdentifier>{0a2328b4-ff6f-4afb-8de0-9884ae172fa9}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\gc\impl">\r
-      <UniqueIdentifier>{3195cce2-1710-4b79-a1cf-6c7cea085fa3}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files\cds\sync">\r
-      <UniqueIdentifier>{03d212fb-73f8-4f0e-9aff-f22b0783fee8}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\src\dllmain.cpp">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\src\init.cpp">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\src\michael_heap.cpp">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\src\topology_hpux.cpp">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\src\topology_linux.cpp">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\src\urcu_gp.cpp">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\src\urcu_sh.cpp">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\src\topology_osx.cpp">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\src\hp_gc.cpp">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\src\dhp_gc.cpp">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\cds\init.h">\r
-      <Filter>Header Files\cds</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\version.h">\r
-      <Filter>Header Files\cds</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\details\aligned_allocator.h">\r
-      <Filter>Header Files\cds\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\details\aligned_type.h">\r
-      <Filter>Header Files\cds\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\details\allocator.h">\r
-      <Filter>Header Files\cds\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\details\bitop_generic.h">\r
-      <Filter>Header Files\cds\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\details\bounded_array.h">\r
-      <Filter>Header Files\cds\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\details\defs.h">\r
-      <Filter>Header Files\cds\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\details\is_aligned.h">\r
-      <Filter>Header Files\cds\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\details\make_const_type.h">\r
-      <Filter>Header Files\cds\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\details\marked_ptr.h">\r
-      <Filter>Header Files\cds\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\details\trivial_assign.h">\r
-      <Filter>Header Files\cds\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\details\type_padding.h">\r
-      <Filter>Header Files\cds\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\gc\default_gc.h">\r
-      <Filter>Header Files\cds\gc</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\gc\hp.h">\r
-      <Filter>Header Files\cds\gc</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\gc\nogc.h">\r
-      <Filter>Header Files\cds\gc</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\gc\details\retired_ptr.h">\r
-      <Filter>Header Files\cds\gc\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\user_setup\allocator.h">\r
-      <Filter>Header Files\cds\user_setup</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\user_setup\cache_line.h">\r
-      <Filter>Header Files\cds\user_setup</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\user_setup\threading.h">\r
-      <Filter>Header Files\cds\user_setup</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\lock\spinlock.h">\r
-      <Filter>Header Files\cds\lock</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\threading\details\_common.h">\r
-      <Filter>Header Files\cds\threading</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\threading\details\auto_detect.h">\r
-      <Filter>Header Files\cds\threading</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\threading\details\gcc.h">\r
-      <Filter>Header Files\cds\threading</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\threading\details\gcc_manager.h">\r
-      <Filter>Header Files\cds\threading</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\threading\model.h">\r
-      <Filter>Header Files\cds\threading</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\threading\details\msvc.h">\r
-      <Filter>Header Files\cds\threading</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\threading\details\msvc_manager.h">\r
-      <Filter>Header Files\cds\threading</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\threading\details\pthread.h">\r
-      <Filter>Header Files\cds\threading</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\threading\details\pthread_manager.h">\r
-      <Filter>Header Files\cds\threading</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\threading\details\wintls.h">\r
-      <Filter>Header Files\cds\threading</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\threading\details\wintls_manager.h">\r
-      <Filter>Header Files\cds\threading</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\backoff.h">\r
-      <Filter>Header Files\cds\compiler</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\bitop.h">\r
-      <Filter>Header Files\cds\compiler</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\defs.h">\r
-      <Filter>Header Files\cds\compiler</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\compiler_barriers.h">\r
-      <Filter>Header Files\cds\compiler\gcc</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\defs.h">\r
-      <Filter>Header Files\cds\compiler\gcc</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\amd64\backoff.h">\r
-      <Filter>Header Files\cds\compiler\gcc\amd64</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\amd64\bitop.h">\r
-      <Filter>Header Files\cds\compiler\gcc\amd64</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\ia64\backoff.h">\r
-      <Filter>Header Files\cds\compiler\gcc\ia64</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\ia64\bitop.h">\r
-      <Filter>Header Files\cds\compiler\gcc\ia64</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\sparc\backoff.h">\r
-      <Filter>Header Files\cds\compiler\gcc\sparc</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\sparc\bitop.h">\r
-      <Filter>Header Files\cds\compiler\gcc\sparc</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\x86\backoff.h">\r
-      <Filter>Header Files\cds\compiler\gcc\x86</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\x86\bitop.h">\r
-      <Filter>Header Files\cds\compiler\gcc\x86</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\ppc64\backoff.h">\r
-      <Filter>Header Files\cds\compiler\gcc\ppc64</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\ppc64\bitop.h">\r
-      <Filter>Header Files\cds\compiler\gcc\ppc64</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\vc\compiler_barriers.h">\r
-      <Filter>Header Files\cds\compiler\vc</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\vc\defs.h">\r
-      <Filter>Header Files\cds\compiler\vc</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\vc\x86\backoff.h">\r
-      <Filter>Header Files\cds\compiler\vc\x86</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\vc\x86\bitop.h">\r
-      <Filter>Header Files\cds\compiler\vc\x86</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\vc\amd64\backoff.h">\r
-      <Filter>Header Files\cds\compiler\vc\amd64</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\vc\amd64\bitop.h">\r
-      <Filter>Header Files\cds\compiler\vc\amd64</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\alloc_aligned.h">\r
-      <Filter>Header Files\cds\OS</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\thread.h">\r
-      <Filter>Header Files\cds\OS</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\timer.h">\r
-      <Filter>Header Files\cds\OS</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\topology.h">\r
-      <Filter>Header Files\cds\OS</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\hpux\alloc_aligned.h">\r
-      <Filter>Header Files\cds\OS\hpux</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\hpux\timer.h">\r
-      <Filter>Header Files\cds\OS\hpux</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\hpux\topology.h">\r
-      <Filter>Header Files\cds\OS\hpux</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\linux\alloc_aligned.h">\r
-      <Filter>Header Files\cds\OS\linux</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\linux\timer.h">\r
-      <Filter>Header Files\cds\OS\linux</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\linux\topology.h">\r
-      <Filter>Header Files\cds\OS\linux</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\posix\alloc_aligned.h">\r
-      <Filter>Header Files\cds\OS\posix</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\posix\thread.h">\r
-      <Filter>Header Files\cds\OS\posix</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\sunos\alloc_aligned.h">\r
-      <Filter>Header Files\cds\OS\sunos</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\sunos\timer.h">\r
-      <Filter>Header Files\cds\OS\sunos</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\sunos\topology.h">\r
-      <Filter>Header Files\cds\OS\sunos</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\win\alloc_aligned.h">\r
-      <Filter>Header Files\cds\OS\win</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\win\thread.h">\r
-      <Filter>Header Files\cds\OS\win</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\win\timer.h">\r
-      <Filter>Header Files\cds\OS\win</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\win\topology.h">\r
-      <Filter>Header Files\cds\OS\win</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\aix\alloc_aligned.h">\r
-      <Filter>Header Files\cds\OS\aix</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\aix\timer.h">\r
-      <Filter>Header Files\cds\OS\aix</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\aix\topology.h">\r
-      <Filter>Header Files\cds\OS\aix</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\libc\alloc_aligned.h">\r
-      <Filter>Header Files\cds\OS\libc</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\free_bsd\alloc_aligned.h">\r
-      <Filter>Header Files\cds\OS\free_bsd</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\free_bsd\timer.h">\r
-      <Filter>Header Files\cds\OS\free_bsd</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\free_bsd\topology.h">\r
-      <Filter>Header Files\cds\OS\free_bsd</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\details\fake_topology.h">\r
-      <Filter>Header Files\cds\OS\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\memory\michael\allocator.h">\r
-      <Filter>Header Files\cds\memory\michael</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\memory\michael\bound_check.h">\r
-      <Filter>Header Files\cds\memory\michael</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\memory\michael\options.h">\r
-      <Filter>Header Files\cds\memory\michael</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\memory\michael\osalloc_stat.h">\r
-      <Filter>Header Files\cds\memory\michael</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\memory\michael\procheap_stat.h">\r
-      <Filter>Header Files\cds\memory\michael</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\opt\buffer.h">\r
-      <Filter>Header Files\cds\opt</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\opt\compare.h">\r
-      <Filter>Header Files\cds\opt</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\opt\hash.h">\r
-      <Filter>Header Files\cds\opt</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\opt\options.h">\r
-      <Filter>Header Files\cds\opt</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\opt\permutation.h">\r
-      <Filter>Header Files\cds\opt</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\opt\value_cleaner.h">\r
-      <Filter>Header Files\cds\opt</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\fcqueue.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\fcstack.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\lazy_list_hp.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\lazy_list_nogc.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\michael_list_hp.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\michael_list_nogc.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\michael_set.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\michael_set_nogc.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\moir_queue.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\msqueue.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\optimistic_queue.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\segmented_queue.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\split_list.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\split_list_nogc.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\treiber_stack.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\tsigas_cycle_queue.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\vyukov_mpmc_cycle_queue.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\fcdeque.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\fcpriority_queue.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\fcqueue.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\fcstack.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\lazy_kvlist_hp.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\lazy_kvlist_nogc.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\lazy_list_hp.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\lazy_list_nogc.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\michael_kvlist_hp.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\michael_kvlist_nogc.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\michael_list_hp.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\michael_list_nogc.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\michael_map.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\michael_map_nogc.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\michael_set.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\michael_set_nogc.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\moir_queue.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\msqueue.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\optimistic_queue.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\rwqueue.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\segmented_queue.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\split_list_map.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\split_list_map_nogc.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\split_list_set.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\split_list_set_nogc.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\treiber_stack.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\tsigas_cycle_queue.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\vyukov_mpmc_cycle_queue.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\details\guarded_ptr_cast.h">\r
-      <Filter>Header Files\cds\container\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\details\make_lazy_kvlist.h">\r
-      <Filter>Header Files\cds\container\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\details\make_lazy_list.h">\r
-      <Filter>Header Files\cds\container\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\details\make_michael_kvlist.h">\r
-      <Filter>Header Files\cds\container\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\details\make_michael_list.h">\r
-      <Filter>Header Files\cds\container\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\cxx11_atomic.h">\r
-      <Filter>Header Files\cds\compiler</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\vc\x86\cxx11_atomic.h">\r
-      <Filter>Header Files\cds\compiler\vc\x86</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\vc\amd64\cxx11_atomic.h">\r
-      <Filter>Header Files\cds\compiler\vc\amd64</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\amd64\cxx11_atomic.h">\r
-      <Filter>Header Files\cds\compiler\gcc\amd64</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\x86\cxx11_atomic.h">\r
-      <Filter>Header Files\cds\compiler\gcc\x86</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\sparc\cxx11_atomic.h">\r
-      <Filter>Header Files\cds\compiler\gcc\sparc</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\ia64\cxx11_atomic.h">\r
-      <Filter>Header Files\cds\compiler\gcc\ia64</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\details\bounded_container.h">\r
-      <Filter>Header Files\cds\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\clang\defs.h">\r
-      <Filter>Header Files\cds\compiler\clang</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\basket_queue.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\basket_queue.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\cuckoo_set.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set\adapter.h">\r
-      <Filter>Header Files\cds\intrusive\striped_set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set\boost_avl_set.h">\r
-      <Filter>Header Files\cds\intrusive\striped_set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set\boost_list.h">\r
-      <Filter>Header Files\cds\intrusive\striped_set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set\boost_set.h">\r
-      <Filter>Header Files\cds\intrusive\striped_set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set\boost_sg_set.h">\r
-      <Filter>Header Files\cds\intrusive\striped_set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set\boost_slist.h">\r
-      <Filter>Header Files\cds\intrusive\striped_set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set\boost_splay_set.h">\r
-      <Filter>Header Files\cds\intrusive\striped_set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set\boost_treap_set.h">\r
-      <Filter>Header Files\cds\intrusive\striped_set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set\boost_unordered_set.h">\r
-      <Filter>Header Files\cds\intrusive\striped_set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set\resizing_policy.h">\r
-      <Filter>Header Files\cds\intrusive\striped_set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\striped_set\striping_policy.h">\r
-      <Filter>Header Files\cds\intrusive\striped_set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\adapter.h">\r
-      <Filter>Header Files\cds\container\striped_set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\boost_flat_set.h">\r
-      <Filter>Header Files\cds\container\striped_set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\boost_list.h">\r
-      <Filter>Header Files\cds\container\striped_set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\boost_set.h">\r
-      <Filter>Header Files\cds\container\striped_set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\boost_slist.h">\r
-      <Filter>Header Files\cds\container\striped_set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\boost_stable_vector.h">\r
-      <Filter>Header Files\cds\container\striped_set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\boost_unordered_set.h">\r
-      <Filter>Header Files\cds\container\striped_set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\boost_vector.h">\r
-      <Filter>Header Files\cds\container\striped_set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\std_hash_set.h">\r
-      <Filter>Header Files\cds\container\striped_set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\std_list.h">\r
-      <Filter>Header Files\cds\container\striped_set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\std_set.h">\r
-      <Filter>Header Files\cds\container\striped_set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\striped_set\std_vector.h">\r
-      <Filter>Header Files\cds\container\striped_set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\striped_map\boost_flat_map.h">\r
-      <Filter>Header Files\cds\container\striped_map</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\striped_map\boost_list.h">\r
-      <Filter>Header Files\cds\container\striped_map</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\striped_map\boost_map.h">\r
-      <Filter>Header Files\cds\container\striped_map</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\striped_map\boost_slist.h">\r
-      <Filter>Header Files\cds\container\striped_map</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\striped_map\boost_unordered_map.h">\r
-      <Filter>Header Files\cds\container\striped_map</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\striped_map\std_hash_map.h">\r
-      <Filter>Header Files\cds\container\striped_map</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\striped_map\std_list.h">\r
-      <Filter>Header Files\cds\container\striped_map</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\striped_map\std_map.h">\r
-      <Filter>Header Files\cds\container\striped_map</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\striped_map.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\striped_set.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\cuckoo_set.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\cuckoo_map.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\skip_list_hp.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\skip_list_set_hp.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\details\make_skip_list_set.h">\r
-      <Filter>Header Files\cds\container\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\skip_list_map_hp.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\details\make_skip_list_map.h">\r
-      <Filter>Header Files\cds\container\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\details\static_functor.h">\r
-      <Filter>Header Files\cds\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\michael_list_rcu.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\options.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\urcu\details\base.h">\r
-      <Filter>Header Files\cds\urcu\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\urcu\details\check_deadlock.h">\r
-      <Filter>Header Files\cds\urcu\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\urcu\details\gp.h">\r
-      <Filter>Header Files\cds\urcu\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\urcu\details\gp_decl.h">\r
-      <Filter>Header Files\cds\urcu\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\urcu\details\gpb.h">\r
-      <Filter>Header Files\cds\urcu\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\urcu\details\gpi.h">\r
-      <Filter>Header Files\cds\urcu\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\urcu\details\gpt.h">\r
-      <Filter>Header Files\cds\urcu\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\urcu\exempt_ptr.h">\r
-      <Filter>Header Files\cds\urcu</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\urcu\general_buffered.h">\r
-      <Filter>Header Files\cds\urcu</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\urcu\general_instant.h">\r
-      <Filter>Header Files\cds\urcu</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\urcu\general_threaded.h">\r
-      <Filter>Header Files\cds\urcu</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\urcu\options.h">\r
-      <Filter>Header Files\cds\urcu</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\lazy_list_rcu.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\michael_set_rcu.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\michael_list_rcu.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\lazy_list_rcu.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\michael_kvlist_rcu.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\lazy_kvlist_rcu.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\split_list_rcu.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\split_list_set_rcu.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\michael_map_rcu.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\michael_set_rcu.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\split_list_map_rcu.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\skip_list_rcu.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\skip_list_set_rcu.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\skip_list_map_rcu.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\skip_list_nogc.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\threading\details\cxx11.h">\r
-      <Filter>Header Files\cds\threading</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\threading\details\cxx11_manager.h">\r
-      <Filter>Header Files\cds\threading</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\skip_list_set_nogc.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\skip_list_map_nogc.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\details\binary_functor_wrapper.h">\r
-      <Filter>Header Files\cds\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\urcu\details\sh.h">\r
-      <Filter>Header Files\cds\urcu\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\urcu\details\sh_decl.h">\r
-      <Filter>Header Files\cds\urcu\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\urcu\details\sig_buffered.h">\r
-      <Filter>Header Files\cds\urcu\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\urcu\details\sig_threaded.h">\r
-      <Filter>Header Files\cds\urcu\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\urcu\dispose_thread.h">\r
-      <Filter>Header Files\cds\urcu</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\urcu\signal_buffered.h">\r
-      <Filter>Header Files\cds\urcu</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\urcu\signal_threaded.h">\r
-      <Filter>Header Files\cds\urcu</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\details\ellen_bintree_base.h">\r
-      <Filter>Header Files\cds\intrusive\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\ellen_bintree_hp.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\ellen_bintree_rcu.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\ellen_bintree_set_rcu.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\memory\pool_allocator.h">\r
-      <Filter>Header Files\cds\memory</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\memory\vyukov_queue_pool.h">\r
-      <Filter>Header Files\cds\memory</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\ellen_bintree_map_rcu.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\details\bit_reverse_counter.h">\r
-      <Filter>Header Files\cds\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\mspriority_queue.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\icl\compiler_barriers.h">\r
-      <Filter>Header Files\cds\compiler\icl</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\icl\defs.h">\r
-      <Filter>Header Files\cds\compiler\icl</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\details\lib.h">\r
-      <Filter>Header Files\cds\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\ellen_bintree_map_hp.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\ellen_bintree_set_hp.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\mspriority_queue.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\compiler_macro.h">\r
-      <Filter>Header Files\cds\compiler\gcc</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\posix\fake_topology.h">\r
-      <Filter>Header Files\cds\OS\posix</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\posix\timer.h">\r
-      <Filter>Header Files\cds\OS\posix</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\osx\timer.h">\r
-      <Filter>Header Files\cds\OS\osx</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\os\osx\topology.h">\r
-      <Filter>Header Files\cds\OS\osx</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\algo\base.h">\r
-      <Filter>Header Files\cds\algo</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\algo\elimination.h">\r
-      <Filter>Header Files\cds\algo</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\algo\elimination_opt.h">\r
-      <Filter>Header Files\cds\algo</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\algo\elimination_tls.h">\r
-      <Filter>Header Files\cds\algo</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\algo\backoff_strategy.h">\r
-      <Filter>Header Files\cds\algo</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\algo\bitop.h">\r
-      <Filter>Header Files\cds\algo</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\algo\flat_combining.h">\r
-      <Filter>Header Files\cds\algo</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\algo\int_algo.h">\r
-      <Filter>Header Files\cds\algo</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\lock\array.h">\r
-      <Filter>Header Files\cds\lock</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\details\make_split_list_set.h">\r
-      <Filter>Header Files\cds\container\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\gcc\x86\cxx11_atomic32.h">\r
-      <Filter>Header Files\cds\compiler\gcc\x86</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\details\single_link_struct.h">\r
-      <Filter>Header Files\cds\intrusive\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\details\base.h">\r
-      <Filter>Header Files\cds\intrusive\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\impl\ellen_bintree.h">\r
-      <Filter>Header Files\cds\intrusive\impl</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\details\lazy_list_base.h">\r
-      <Filter>Header Files\cds\intrusive\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\impl\lazy_list.h">\r
-      <Filter>Header Files\cds\intrusive\impl</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\details\michael_list_base.h">\r
-      <Filter>Header Files\cds\intrusive\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\impl\michael_list.h">\r
-      <Filter>Header Files\cds\intrusive\impl</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\details\michael_set_base.h">\r
-      <Filter>Header Files\cds\intrusive\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\details\node_traits.h">\r
-      <Filter>Header Files\cds\intrusive\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\details\skip_list_base.h">\r
-      <Filter>Header Files\cds\intrusive\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\impl\skip_list.h">\r
-      <Filter>Header Files\cds\intrusive\impl</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\details\split_list_base.h">\r
-      <Filter>Header Files\cds\intrusive\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\details\base.h">\r
-      <Filter>Header Files\cds\container\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\details\cuckoo_base.h">\r
-      <Filter>Header Files\cds\container\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\details\ellen_bintree_base.h">\r
-      <Filter>Header Files\cds\container\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\impl\ellen_bintree_map.h">\r
-      <Filter>Header Files\cds\container\impl</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\impl\ellen_bintree_set.h">\r
-      <Filter>Header Files\cds\container\impl</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\impl\lazy_kvlist.h">\r
-      <Filter>Header Files\cds\container\impl</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\details\lazy_list_base.h">\r
-      <Filter>Header Files\cds\container\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\impl\lazy_list.h">\r
-      <Filter>Header Files\cds\container\impl</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\impl\michael_kvlist.h">\r
-      <Filter>Header Files\cds\container\impl</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\details\michael_list_base.h">\r
-      <Filter>Header Files\cds\container\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\impl\michael_list.h">\r
-      <Filter>Header Files\cds\container\impl</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\details\michael_map_base.h">\r
-      <Filter>Header Files\cds\container\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\details\michael_set_base.h">\r
-      <Filter>Header Files\cds\container\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\details\skip_list_base.h">\r
-      <Filter>Header Files\cds\container\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\impl\skip_list_map.h">\r
-      <Filter>Header Files\cds\container\impl</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\impl\skip_list_set.h">\r
-      <Filter>Header Files\cds\container\impl</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\details\split_list_base.h">\r
-      <Filter>Header Files\cds\container\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\michael_list_dhp.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\michael_list_dhp.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\michael_kvlist_dhp.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\lazy_list_dhp.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\lazy_list_dhp.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\lazy_kvlist_dhp.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\skip_list_dhp.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\skip_list_set_dhp.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\skip_list_map_dhp.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\ellen_bintree_dhp.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\ellen_bintree_map_dhp.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\ellen_bintree_set_dhp.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\gc\dhp.h">\r
-      <Filter>Header Files\cds\gc</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\src\hp_const.h">\r
-      <Filter>Source Files</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\gc\details\hp_alloc.h">\r
-      <Filter>Header Files\cds\gc\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\gc\details\hp_type.h">\r
-      <Filter>Header Files\cds\gc\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\gc\details\hp.h">\r
-      <Filter>Header Files\cds\gc\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\gc\details\dhp.h">\r
-      <Filter>Header Files\cds\gc\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\gc\impl\dhp_decl.h">\r
-      <Filter>Header Files\cds\gc\impl</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\gc\impl\dhp_impl.h">\r
-      <Filter>Header Files\cds\gc\impl</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\gc\impl\hp_decl.h">\r
-      <Filter>Header Files\cds\gc\impl</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\gc\impl\hp_impl.h">\r
-      <Filter>Header Files\cds\gc\impl</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\algo\atomic.h">\r
-      <Filter>Header Files\cds\algo</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\details\bronson_avltree_base.h">\r
-      <Filter>Header Files\cds\container\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\impl\bronson_avltree_map_rcu.h">\r
-      <Filter>Header Files\cds\container\impl</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\bronson_avltree_map_rcu.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\sync\spinlock.h">\r
-      <Filter>Header Files\cds\sync</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\sync\lock_array.h">\r
-      <Filter>Header Files\cds\sync</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\sync\monitor.h">\r
-      <Filter>Header Files\cds\sync</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\sync\injecting_monitor.h">\r
-      <Filter>Header Files\cds\sync</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\sync\pool_monitor.h">\r
-      <Filter>Header Files\cds\sync</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\compiler\feature_tsan.h">\r
-      <Filter>Header Files\cds\compiler</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\urcu\raw_ptr.h">\r
-      <Filter>Header Files\cds\urcu</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\details\raw_ptr_disposer.h">\r
-      <Filter>Header Files\cds\intrusive\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\impl\feldman_hashset.h">\r
-      <Filter>Header Files\cds\intrusive\impl</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\details\feldman_hashset_base.h">\r
-      <Filter>Header Files\cds\intrusive\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\feldman_hashset_hp.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\feldman_hashset_dhp.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\algo\split_bitstring.h">\r
-      <Filter>Header Files\cds\algo</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\details\feldman_hashset_base.h">\r
-      <Filter>Header Files\cds\container\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\impl\feldman_hashset.h">\r
-      <Filter>Header Files\cds\container\impl</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\feldman_hashset_hp.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\feldman_hashset_dhp.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\details\feldman_hashmap_base.h">\r
-      <Filter>Header Files\cds\container\details</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\impl\feldman_hashmap.h">\r
-      <Filter>Header Files\cds\container\impl</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\feldman_hashmap_dhp.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\feldman_hashmap_hp.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\intrusive\feldman_hashset_rcu.h">\r
-      <Filter>Header Files\cds\intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\feldman_hashset_rcu.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\cds\container\feldman_hashmap_rcu.h">\r
-      <Filter>Header Files\cds\container</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/hdr-test-deque.vcxproj b/projects/Win/vc12/hdr-test-deque.vcxproj
deleted file mode 100644 (file)
index ad2721c..0000000
+++ /dev/null
@@ -1,559 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}</ProjectGuid>\r
-    <RootNamespace>hdrtestdeque</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <RecognizeRestrictKeyword>false</RecognizeRestrictKeyword>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <RecognizeRestrictKeyword>false</RecognizeRestrictKeyword>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <RecognizeRestrictKeyword>false</RecognizeRestrictKeyword>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <RecognizeRestrictKeyword>false</RecognizeRestrictKeyword>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\deque\hdr_fcdeque.cpp" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/hdr-test-list.vcxproj b/projects/Win/vc12/hdr-test-list.vcxproj
deleted file mode 100644 (file)
index f74c790..0000000
+++ /dev/null
@@ -1,608 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_lazy.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_michael.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_michael_kv.h" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_nogc_unord.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_list_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_list_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_list_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_list_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_list_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_nogc_unord.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_nogc_unord.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_rcu_sht.cpp" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}</ProjectGuid>\r
-    <RootNamespace>hdrtestordlist</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-    <ProjectName>hdr-test-list</ProjectName>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/hdr-test-list.vcxproj.filters b/projects/Win/vc12/hdr-test-list.vcxproj.filters
deleted file mode 100644 (file)
index 24f6289..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <Filter Include="intrusive">\r
-      <UniqueIdentifier>{fff45fc3-9c35-4f00-94ac-a2403b1caed6}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container">\r
-      <UniqueIdentifier>{b0d8933f-3fbc-49c2-ad77-89bd74461395}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy.h">\r
-      <Filter>intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael.h">\r
-      <Filter>intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_lazy.h">\r
-      <Filter>container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv.h">\r
-      <Filter>container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_michael.h">\r
-      <Filter>container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_michael_kv.h">\r
-      <Filter>container</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_dhp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_hp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_nogc.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_rcu_gpb.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_rcu_gpi.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_rcu_gpt.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_rcu_shb.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_rcu_sht.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_dhp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_hp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_list_rcu_gpb.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_list_rcu_gpi.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_list_rcu_gpt.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_list_rcu_shb.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_list_rcu_sht.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_nogc.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_dhp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_hp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_dhp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_hp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_nogc.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_rcu_gpb.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_rcu_gpi.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_rcu_gpt.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_rcu_shb.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_rcu_sht.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_nogc.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_rcu_gpb.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_rcu_gpi.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_rcu_gpt.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_rcu_shb.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_rcu_sht.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_dhp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_hp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_dhp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_hp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_nogc.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_rcu_gpb.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_rcu_gpi.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_rcu_gpt.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_rcu_shb.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_rcu_sht.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_nogc.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_rcu_gpb.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_rcu_gpi.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_rcu_gpt.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_rcu_shb.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_rcu_sht.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_nogc_unord.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_nogc_unord.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_nogc_unord.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/hdr-test-map.vcxproj b/projects/Win/vc12/hdr-test-map.vcxproj
deleted file mode 100644 (file)
index fbd6897..0000000
+++ /dev/null
@@ -1,622 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{282E9A9A-386A-40FB-A483-994BACE24830}</ProjectGuid>\r
-    <RootNamespace>hdrtestmap</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_cuckoo_map.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_map.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_striped_map.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\print_skiplist_stat.h" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_cuckoo_map.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_boost_flat_map.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_boost_list.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_boost_map.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_boost_unordered_map.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_hashmap_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_list.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_map.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_slist.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_boost_flat_map.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_boost_list.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_boost_map.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_boost_unordered_map.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_hashmap_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_list.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_map.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_slist.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_map_reg.cpp" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/hdr-test-map.vcxproj.filters b/projects/Win/vc12/hdr-test-map.vcxproj.filters
deleted file mode 100644 (file)
index 2fe1b48..0000000
+++ /dev/null
@@ -1,239 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_cuckoo_map.cpp">\r
-      <Filter>cuckoo</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_hp.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_hp.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_nogc.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_nogc.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_boost_flat_map.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_boost_list.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_boost_map.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_boost_unordered_map.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_hashmap_std.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_list.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_map.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_slist.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_hp.cpp">\r
-      <Filter>skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_hp.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_hp.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_nogc.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_nogc.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_boost_flat_map.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_boost_list.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_boost_map.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_boost_unordered_map.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_hashmap_std.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_list.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_map.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_slist.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_rcu_gpb.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_rcu_gpi.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_rcu_gpt.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_rcu_gpb.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_rcu_gpi.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_rcu_gpt.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_rcu_gpb.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_rcu_gpi.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_rcu_gpt.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_rcu_gpb.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_rcu_gpi.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_rcu_gpt.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu_gpb.cpp">\r
-      <Filter>skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu_gpi.cpp">\r
-      <Filter>skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu_gpt.cpp">\r
-      <Filter>skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_nogc.cpp">\r
-      <Filter>skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_map_reg.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_rcu_shb.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_rcu_sht.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_rcu_shb.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_rcu_sht.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu_shb.cpp">\r
-      <Filter>skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu_sht.cpp">\r
-      <Filter>skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_rcu_shb.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_rcu_sht.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_rcu_shb.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_rcu_sht.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_dhp.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_dhp.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_dhp.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_dhp.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_dhp.cpp">\r
-      <Filter>skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_hp.cpp">\r
-      <Filter>multilvel_hashmap</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_dhp.cpp">\r
-      <Filter>multilvel_hashmap</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_rcu_gpb.cpp">\r
-      <Filter>multilvel_hashmap</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_rcu_gpi.cpp">\r
-      <Filter>multilvel_hashmap</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_rcu_gpt.cpp">\r
-      <Filter>multilvel_hashmap</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_rcu_shb.cpp">\r
-      <Filter>multilvel_hashmap</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_rcu_sht.cpp">\r
-      <Filter>multilvel_hashmap</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_map.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\print_skiplist_stat.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map.h">\r
-      <Filter>skip_list</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu.h">\r
-      <Filter>skip_list</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_striped_map.h">\r
-      <Filter>striped</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_cuckoo_map.h">\r
-      <Filter>cuckoo</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap.h">\r
-      <Filter>multilvel_hashmap</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <Filter Include="cuckoo">\r
-      <UniqueIdentifier>{9cc8e982-b321-4a7d-8362-7f1491ad445d}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="michael">\r
-      <UniqueIdentifier>{c524c47b-2087-42eb-b3b2-f70ed379e373}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="striped">\r
-      <UniqueIdentifier>{33452d52-b86d-4143-9f87-bf154d53f890}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="skip_list">\r
-      <UniqueIdentifier>{1f7bd2f3-a377-47a5-aaae-aaddd60cbedc}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="split_list">\r
-      <UniqueIdentifier>{9318c3c0-92a3-4a5a-be2b-a47411a3e4c4}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="multilvel_hashmap">\r
-      <UniqueIdentifier>{cf81877d-3069-48a6-a143-2281963e9c4f}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/hdr-test-misc.vcxproj b/projects/Win/vc12/hdr-test-misc.vcxproj
deleted file mode 100644 (file)
index 1798dc6..0000000
+++ /dev/null
@@ -1,562 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{C5E76975-B87B-4B9E-8596-B01DDA683FCA}</ProjectGuid>\r
-    <RootNamespace>hdrtestmisc</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\misc\allocator_test.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\misc\bitop_st.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\misc\cxx11_atomic_class.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\misc\cxx11_atomic_func.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\misc\find_option.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\misc\hash_tuple.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\misc\michael_allocator.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\misc\split_bitstring.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\misc\thread_init_fini.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\misc\permutation_generator.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\misc\cxx11_convert_memory_order.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\misc\michael_allocator.h" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/hdr-test-priority_queue.vcxproj b/projects/Win/vc12/hdr-test-priority_queue.vcxproj
deleted file mode 100644 (file)
index 44b11b8..0000000
+++ /dev/null
@@ -1,560 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_fcpqueue_boost_stable_vector.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_fcpqueue_deque.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_fcpqueue_vector.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_intrusive_mspqueue_dyn.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_intrusive_mspqueue_static.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_mspqueue_dyn.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_mspqueue_static.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_priority_queue_reg.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\priority_queue\hdr_intrusive_pqueue.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\priority_queue\hdr_pqueue.h" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{90192F7D-5850-41dd-AE89-62D26B387162}</ProjectGuid>\r
-    <RootNamespace>hdrtestpriority_queue</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/hdr-test-priority_queue.vcxproj.filters b/projects/Win/vc12/hdr-test-priority_queue.vcxproj.filters
deleted file mode 100644 (file)
index 3a2eb19..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <Filter Include="intrusive">\r
-      <UniqueIdentifier>{2e5ccb52-5287-4912-8d3f-aeaf257134cd}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container">\r
-      <UniqueIdentifier>{d864adcf-d418-48b8-85be-6f4d39ac6941}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_priority_queue_reg.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_intrusive_mspqueue_dyn.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_intrusive_mspqueue_static.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_mspqueue_dyn.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_mspqueue_static.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_fcpqueue_boost_stable_vector.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_fcpqueue_deque.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_fcpqueue_vector.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\priority_queue\hdr_intrusive_pqueue.h">\r
-      <Filter>intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\priority_queue\hdr_pqueue.h">\r
-      <Filter>container</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/hdr-test-queue.vcxproj b/projects/Win/vc12/hdr-test-queue.vcxproj
deleted file mode 100644 (file)
index 93c1512..0000000
+++ /dev/null
@@ -1,583 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{33664E63-8D24-4FF4-A744-9782EB711509}</ProjectGuid>\r
-    <RootNamespace>hdrtestqueue</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_basketqueue_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_basketqueue_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_fcqueue.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_basketqueue_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_fcqueue.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_basketqueue_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_moirqueue_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_moirqueue_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_msqueue_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_msqueue_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_optimisticqueue_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_optimisticqueue_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_segmented_queue_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_segmented_queue_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_tsigas_cycle_queue.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_vyukovmpmc_cycle_queue.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_moirqueue_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_moirqueue_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_msqueue_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_msqueue_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_optimistic_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_optimistic_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_queue_register.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_rwqueue.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_segmented_queue_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_segmented_queue_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_tsigas_cycle_queue.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_vyukov_mpmc_cyclic.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_fcqueue.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_msqueue.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_segmented_queue.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_queue.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_segmented_queue.h" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/hdr-test-queue.vcxproj.filters b/projects/Win/vc12/hdr-test-queue.vcxproj.filters
deleted file mode 100644 (file)
index d75ac5e..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_fcqueue.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_basketqueue_hp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_fcqueue.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_moirqueue_hp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_msqueue_hp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_optimisticqueue_hp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_segmented_queue_hp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_tsigas_cycle_queue.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_vyukovmpmc_cycle_queue.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_rwqueue.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_segmented_queue_hp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_vyukov_mpmc_cyclic.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_moirqueue_dhp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_msqueue_dhp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_moirqueue_dhp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_moirqueue_hp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_msqueue_dhp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_msqueue_hp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_queue_register.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_basketqueue_dhp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_basketqueue_dhp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_basketqueue_hp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_optimisticqueue_dhp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_optimistic_dhp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_optimistic_hp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_segmented_queue_dhp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_segmented_queue_dhp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_tsigas_cycle_queue.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_msqueue.h">\r
-      <Filter>intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_segmented_queue.h">\r
-      <Filter>intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_segmented_queue.h">\r
-      <Filter>container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_fcqueue.h">\r
-      <Filter>container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_queue.h">\r
-      <Filter>container</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <Filter Include="intrusive">\r
-      <UniqueIdentifier>{68aaf08b-6544-4d6a-b912-0935954efdf2}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container">\r
-      <UniqueIdentifier>{a466b6f6-2b88-4c6e-84df-1f9d53122909}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/hdr-test-set.vcxproj b/projects/Win/vc12/hdr-test-set.vcxproj
deleted file mode 100644 (file)
index b0e3f78..0000000
+++ /dev/null
@@ -1,660 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}</ProjectGuid>\r
-    <RootNamespace>hdrtestset</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_set.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_set.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_set_rcu.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_set.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu.h" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_dhp_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_hp_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_nogc_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpb_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpi_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpt_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_shb_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_sht_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_dhp_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_hp_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_nogc_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpb_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpi_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpt_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_shb_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_sht_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_dhp_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_hp_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_nogc_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpb_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpi_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpt_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_shb_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_sht_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_rcu_sht.cpp" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/hdr-test-set.vcxproj.filters b/projects/Win/vc12/hdr-test-set.vcxproj.filters
deleted file mode 100644 (file)
index c44ec9d..0000000
+++ /dev/null
@@ -1,369 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_set.h">\r
-      <Filter>intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_set.h">\r
-      <Filter>container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_set.h">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_set_rcu.h">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set.h">\r
-      <Filter>container\skip_list</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu.h">\r
-      <Filter>container\skip_list</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset.h">\r
-      <Filter>intrusive\feldman_hashset</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset.h">\r
-      <Filter>container\feldman_hashset</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <Filter Include="intrusive">\r
-      <UniqueIdentifier>{83622d26-addb-4c52-98b3-eaa62a1047b6}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container">\r
-      <UniqueIdentifier>{c0375a89-d67a-480a-83d2-d1cdd8d467e9}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="intrusive\michael_set">\r
-      <UniqueIdentifier>{4719fe70-337c-4740-931e-548d21a39466}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="intrusive\split_list">\r
-      <UniqueIdentifier>{7786d807-8092-4310-9109-945854d26048}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="intrusive\skip_list">\r
-      <UniqueIdentifier>{5b8a3b8a-27ad-49e7-9714-1859a842fd7f}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container\michael_set">\r
-      <UniqueIdentifier>{dc053424-ec8d-46a7-9236-6a75f4dc0ad5}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container\skip_list">\r
-      <UniqueIdentifier>{c1d0709e-ede1-4125-b4b8-eb3177ce05d2}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container\split_list">\r
-      <UniqueIdentifier>{61f94a40-c964-4233-af67-66a1be1e0aab}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="intrusive\feldman_hashset">\r
-      <UniqueIdentifier>{a878aed0-83c9-4ca7-95bb-74f10aad8bde}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container\feldman_hashset">\r
-      <UniqueIdentifier>{5268f225-1474-413e-a1cb-5f00b8df5e1e}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_hp.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_hp_lazy.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_nogc.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_nogc_lazy.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpb.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpb_lazy.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpi.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpi_lazy.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpt.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpt_lazy.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_hp.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_hp_member.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_hp.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_hp_lazy.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_nogc.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_nogc_lazy.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpb.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpb_lazy.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpi.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpi_lazy.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpt.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpt_lazy.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_hp.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_hp.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_nogc.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_rcu_gpi.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_rcu_gpt.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_nogc.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_rcu_gpb.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_rcu_gpi.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_rcu_gpt.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_hp.cpp">\r
-      <Filter>container\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_hp.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_hp.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_nogc.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_nogc.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpb.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpb_member.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpi.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpi_member.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpt.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpt_member.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu_gpb.cpp">\r
-      <Filter>container\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu_gpi.cpp">\r
-      <Filter>container\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu_gpt.cpp">\r
-      <Filter>container\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_nogc.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_nogc_member.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_nogc.cpp">\r
-      <Filter>container\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_shb.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_shb_lazy.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_sht.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_sht_lazy.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_shb.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_shb_member.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_sht.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_sht_member.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_shb.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_shb_lazy.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_sht.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_sht_lazy.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_rcu_shb.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_rcu_sht.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_rcu_shb.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_rcu_sht.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu_shb.cpp">\r
-      <Filter>container\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu_sht.cpp">\r
-      <Filter>container\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_rcu_shb.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_rcu_sht.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_rcu_shb.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_rcu_sht.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_dhp.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_dhp_lazy.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_dhp.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_dhp.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_rcu_gpb.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_dhp.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_dhp.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_dhp.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_dhp_lazy.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_rcu_gpb.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_rcu_gpi.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_rcu_gpt.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_rcu_gpb.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_rcu_gpi.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_rcu_gpt.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_dhp.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_dhp_member.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_dhp.cpp">\r
-      <Filter>container\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_hp.cpp">\r
-      <Filter>intrusive\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_dhp.cpp">\r
-      <Filter>intrusive\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_hp.cpp">\r
-      <Filter>container\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_dhp.cpp">\r
-      <Filter>container\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_rcu_gpb.cpp">\r
-      <Filter>intrusive\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_rcu_gpi.cpp">\r
-      <Filter>intrusive\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_rcu_gpt.cpp">\r
-      <Filter>intrusive\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_rcu_shb.cpp">\r
-      <Filter>intrusive\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_rcu_sht.cpp">\r
-      <Filter>intrusive\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_rcu_gpb.cpp">\r
-      <Filter>container\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_rcu_gpi.cpp">\r
-      <Filter>container\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_rcu_gpt.cpp">\r
-      <Filter>container\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_rcu_shb.cpp">\r
-      <Filter>container\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_rcu_sht.cpp">\r
-      <Filter>container\feldman_hashset</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/hdr-test-stack.vcxproj b/projects/Win/vc12/hdr-test-stack.vcxproj
deleted file mode 100644 (file)
index 2202a07..0000000
+++ /dev/null
@@ -1,562 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}</ProjectGuid>\r
-    <RootNamespace>hdrteststack</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_treiber_stack.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\stack\hdr_treiber_stack.h" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_elimination_stack_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_elimination_stack_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_fcstack.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_elimination_stack_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_elimination_stack_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_fcstack.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_treiber_stack_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_treiber_stack_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_treiber_stack_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_treiber_stack_hp.cpp" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/hdr-test-striped-set.vcxproj b/projects/Win/vc12/hdr-test-striped-set.vcxproj
deleted file mode 100644 (file)
index 99feb8f..0000000
+++ /dev/null
@@ -1,597 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_cuckoo_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_cuckoo_refinable_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_cuckoo_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_avlset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_list.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_sgset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_slist.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_splayset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_treapset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_uset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_avlset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_list.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_sgset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_slist.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_splayset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_treapset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_uset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_flat_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_list.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_stable_vector.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_unordered_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_vector.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_hashset_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_list.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_slist.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_vector.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_flat_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_list.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_stable_vector.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_unordered_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_vector.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_hashset_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_list.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_slist.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_vector.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_cuckoo_set.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_cuckoo_set.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_set.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_striped_set.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\intrusive_cuckoo_set_common.h" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{A38E5597-6916-4480-A343-C9846EF544E4}</ProjectGuid>\r
-    <RootNamespace>hdrteststripedset</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/hdr-test-striped-set.vcxproj.filters b/projects/Win/vc12/hdr-test-striped-set.vcxproj.filters
deleted file mode 100644 (file)
index 80351d3..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <Filter Include="container">\r
-      <UniqueIdentifier>{4061d7f1-7ab8-4624-adb0-b4533e05a932}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="intrusive">\r
-      <UniqueIdentifier>{718f3de0-3b1c-4245-944c-0a56f288c6f7}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="intrusive\cuckoo">\r
-      <UniqueIdentifier>{db3df5e9-9ef5-407f-821d-e25b9cc70082}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="intrusive\striped">\r
-      <UniqueIdentifier>{0147ba57-0ecc-4674-8d7b-7492054d3a48}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container\cuckoo">\r
-      <UniqueIdentifier>{ee3a372b-70df-47e6-bade-e7c4d1de7ec3}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container\striped">\r
-      <UniqueIdentifier>{4c811e47-74dd-436d-93f7-686f35980069}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_cuckoo_refinable_set.cpp">\r
-      <Filter>intrusive\cuckoo</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_cuckoo_set.cpp">\r
-      <Filter>intrusive\cuckoo</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_avlset.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_list.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_set.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_sgset.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_slist.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_splayset.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_treapset.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_uset.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_avlset.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_list.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_set.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_sgset.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_slist.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_splayset.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_treapset.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_uset.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_set.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_cuckoo_set.cpp">\r
-      <Filter>container\cuckoo</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_flat_set.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_list.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_set.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_stable_vector.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_unordered_set.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_vector.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_hashset_std.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_list.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_set.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_slist.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_vector.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_flat_set.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_list.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_set.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_stable_vector.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_unordered_set.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_vector.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_hashset_std.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_list.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_set.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_slist.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_vector.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_cuckoo_set.h">\r
-      <Filter>intrusive\cuckoo</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\intrusive_cuckoo_set_common.h">\r
-      <Filter>intrusive\cuckoo</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_set.h">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_cuckoo_set.h">\r
-      <Filter>container\cuckoo</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_striped_set.h">\r
-      <Filter>container\striped</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/hdr-test-tree.vcxproj b/projects/Win/vc12/hdr-test-tree.vcxproj
deleted file mode 100644 (file)
index f8c9c15..0000000
+++ /dev/null
@@ -1,596 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{6F834EAD-7B94-4979-A0F1-A662E3D30145}</ProjectGuid>\r
-    <RootNamespace>hdrtesttree</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;NOMINMAX;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;NOMINMAX;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_bintree.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_pool_dhp.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_pool_hp.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_pool_rcu.h" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpb_pool_monitor.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpi_pool_monitor.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpt_pool_monitor.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_shb_pool_monitor.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_sht_pool_monitor.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_dhp_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_hp_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpb_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpi_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpt_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_shb_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_sht_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_tree_reg.cpp" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/hdr-test-tree.vcxproj.filters b/projects/Win/vc12/hdr-test-tree.vcxproj.filters
deleted file mode 100644 (file)
index eab1bba..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <Filter Include="container">\r
-      <UniqueIdentifier>{dec34594-a06a-4ed8-9792-fbc6b2a251f5}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="intrusive">\r
-      <UniqueIdentifier>{a13910ed-6cb1-46bc-a137-7da531e65e3a}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container\ellen-bintree-set">\r
-      <UniqueIdentifier>{e2f66f2f-4770-4533-86f0-75fe68a263ab}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container\bronson-avltree-map">\r
-      <UniqueIdentifier>{36cb9dc5-7022-42bd-a68d-db247368092f}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container\ellen-bintree-map">\r
-      <UniqueIdentifier>{c47142c5-b407-4938-94f6-49f43f192890}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="intrusive\ellen-bintree-set">\r
-      <UniqueIdentifier>{af39cad7-51ab-4d41-ae94-d02f650314da}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map.h">\r
-      <Filter>container\bronson-avltree-map</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set.h">\r
-      <Filter>container\ellen-bintree-set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map.h">\r
-      <Filter>container\ellen-bintree-map</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_bintree.h">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_pool_dhp.h">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_pool_hp.h">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_pool_rcu.h">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_tree_reg.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpb.cpp">\r
-      <Filter>container\bronson-avltree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpb_pool_monitor.cpp">\r
-      <Filter>container\bronson-avltree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpi.cpp">\r
-      <Filter>container\bronson-avltree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpi_pool_monitor.cpp">\r
-      <Filter>container\bronson-avltree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpt.cpp">\r
-      <Filter>container\bronson-avltree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpt_pool_monitor.cpp">\r
-      <Filter>container\bronson-avltree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_shb.cpp">\r
-      <Filter>container\bronson-avltree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_shb_pool_monitor.cpp">\r
-      <Filter>container\bronson-avltree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_sht.cpp">\r
-      <Filter>container\bronson-avltree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_sht_pool_monitor.cpp">\r
-      <Filter>container\bronson-avltree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_dhp.cpp">\r
-      <Filter>container\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_hp.cpp">\r
-      <Filter>container\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_rcu_gpb.cpp">\r
-      <Filter>container\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_rcu_gpi.cpp">\r
-      <Filter>container\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_rcu_gpt.cpp">\r
-      <Filter>container\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_rcu_shb.cpp">\r
-      <Filter>container\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_rcu_sht.cpp">\r
-      <Filter>container\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_dhp.cpp">\r
-      <Filter>container\ellen-bintree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_hp.cpp">\r
-      <Filter>container\ellen-bintree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_rcu_gpb.cpp">\r
-      <Filter>container\ellen-bintree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_rcu_gpi.cpp">\r
-      <Filter>container\ellen-bintree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_rcu_gpt.cpp">\r
-      <Filter>container\ellen-bintree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_rcu_shb.cpp">\r
-      <Filter>container\ellen-bintree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_rcu_sht.cpp">\r
-      <Filter>container\ellen-bintree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_dhp.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_dhp_member.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_hp.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_hp_member.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpb.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpb_member.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpi.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpi_member.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpt.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpt_member.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_shb.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_shb_member.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_sht.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_sht_member.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/unit-map-delodd.vcxproj b/projects/Win/vc12/unit-map-delodd.vcxproj
deleted file mode 100644 (file)
index 2565685..0000000
+++ /dev/null
@@ -1,520 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_delodd.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_delodd_bronsonavltree.cpp">\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</ExcludedFromBuild>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_delodd_cuckoo.cpp">\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</ExcludedFromBuild>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_delodd_ellentree.cpp">\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</ExcludedFromBuild>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_delodd_michael.cpp">\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</ExcludedFromBuild>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_delodd_feldmanhashmap.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_delodd_skip.cpp">\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</ExcludedFromBuild>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_delodd_split.cpp">\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</ExcludedFromBuild>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_delodd.h" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{3C598F96-FB84-4d42-9B43-F697F53B0221}</ProjectGuid>\r
-    <RootNamespace>unitmap</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/unit-map-find.vcxproj b/projects/Win/vc12/unit-map-find.vcxproj
deleted file mode 100644 (file)
index 645cf35..0000000
+++ /dev/null
@@ -1,536 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_bronsonavltree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_feldmanhashmap.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_striped.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_bronsonavltree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_feldmanhashmap.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_striped.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_bronsonavltree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_feldmanhashmap.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_striped.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_find_int.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_find_string.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insfind_int.h" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{BA2A9239-0299-4069-BB0E-16DACE87ADE0}</ProjectGuid>\r
-    <RootNamespace>unitmap</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/unit-map-find.vcxproj.filters b/projects/Win/vc12/unit-map-find.vcxproj.filters
deleted file mode 100644 (file)
index bb9c849..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int.cpp">\r
-      <Filter>map_find_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_bronsonavltree.cpp">\r
-      <Filter>map_find_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_cuckoo.cpp">\r
-      <Filter>map_find_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_ellentree.cpp">\r
-      <Filter>map_find_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_michael.cpp">\r
-      <Filter>map_find_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_skip.cpp">\r
-      <Filter>map_find_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_split.cpp">\r
-      <Filter>map_find_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_std.cpp">\r
-      <Filter>map_find_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_striped.cpp">\r
-      <Filter>map_find_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string.cpp">\r
-      <Filter>map_find_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_bronsonavltree.cpp">\r
-      <Filter>map_find_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_cuckoo.cpp">\r
-      <Filter>map_find_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_ellentree.cpp">\r
-      <Filter>map_find_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_michael.cpp">\r
-      <Filter>map_find_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_skip.cpp">\r
-      <Filter>map_find_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_split.cpp">\r
-      <Filter>map_find_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_std.cpp">\r
-      <Filter>map_find_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_striped.cpp">\r
-      <Filter>map_find_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int.cpp">\r
-      <Filter>map_insfind_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_bronsonavltree.cpp">\r
-      <Filter>map_insfind_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_cuckoo.cpp">\r
-      <Filter>map_insfind_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_ellentree.cpp">\r
-      <Filter>map_insfind_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_michael.cpp">\r
-      <Filter>map_insfind_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_skip.cpp">\r
-      <Filter>map_insfind_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_split.cpp">\r
-      <Filter>map_insfind_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_std.cpp">\r
-      <Filter>map_insfind_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_striped.cpp">\r
-      <Filter>map_insfind_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_feldmanhashmap.cpp">\r
-      <Filter>map_find_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_feldmanhashmap.cpp">\r
-      <Filter>map_find_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_feldmanhashmap.cpp">\r
-      <Filter>map_insfind_int</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_find_int.h">\r
-      <Filter>map_find_int</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_find_string.h">\r
-      <Filter>map_find_string</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insfind_int.h">\r
-      <Filter>map_insfind_int</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <Filter Include="map_find_int">\r
-      <UniqueIdentifier>{05793356-5544-4e12-893f-5761dea6536e}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="map_find_string">\r
-      <UniqueIdentifier>{c6ad8146-72e2-473c-aa04-3db455858146}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="map_insfind_int">\r
-      <UniqueIdentifier>{ba26fa2b-d618-4dd8-97d6-7dc874d9acf4}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/unit-map-insdel-item.vcxproj b/projects/Win/vc12/unit-map-insdel-item.vcxproj
deleted file mode 100644 (file)
index 46c8c04..0000000
+++ /dev/null
@@ -1,523 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_bronsonavltree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_feldmanhashmap.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_striped.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_bronsonavltree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_feldmanhashmap.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_striped.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insdel_item_int.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insdel_item_string.h" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{7521DD92-56FF-4ECA-93E5-CCE50862354B}</ProjectGuid>\r
-    <RootNamespace>unitmap</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520;4503</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4520;4503</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520;4503</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520;4503</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4520;4503</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520;4503</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520;4503</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4520;4503</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520;4503</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4520;4503</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/unit-map-insdel-item.vcxproj.filters b/projects/Win/vc12/unit-map-insdel-item.vcxproj.filters
deleted file mode 100644 (file)
index 8c0b268..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <Filter Include="map_insdel_item_int">\r
-      <UniqueIdentifier>{3db58209-d436-470d-8e7b-716a4c54b7d2}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="map_insdel_item_string">\r
-      <UniqueIdentifier>{bd71af30-f7c6-4e9c-810f-dd0d5a6e64b0}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int.cpp">\r
-      <Filter>map_insdel_item_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_bronsonavltree.cpp">\r
-      <Filter>map_insdel_item_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_cuckoo.cpp">\r
-      <Filter>map_insdel_item_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_ellentree.cpp">\r
-      <Filter>map_insdel_item_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_michael.cpp">\r
-      <Filter>map_insdel_item_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_skip.cpp">\r
-      <Filter>map_insdel_item_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_split.cpp">\r
-      <Filter>map_insdel_item_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_striped.cpp">\r
-      <Filter>map_insdel_item_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string.cpp">\r
-      <Filter>map_insdel_item_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_bronsonavltree.cpp">\r
-      <Filter>map_insdel_item_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_cuckoo.cpp">\r
-      <Filter>map_insdel_item_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_ellentree.cpp">\r
-      <Filter>map_insdel_item_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_michael.cpp">\r
-      <Filter>map_insdel_item_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_skip.cpp">\r
-      <Filter>map_insdel_item_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_split.cpp">\r
-      <Filter>map_insdel_item_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_striped.cpp">\r
-      <Filter>map_insdel_item_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_feldmanhashmap.cpp">\r
-      <Filter>map_insdel_item_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_feldmanhashmap.cpp">\r
-      <Filter>map_insdel_item_string</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insdel_item_int.h">\r
-      <Filter>map_insdel_item_int</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insdel_item_string.h">\r
-      <Filter>map_insdel_item_string</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/unit-map-insdel.vcxproj b/projects/Win/vc12/unit-map-insdel.vcxproj
deleted file mode 100644 (file)
index 3fa519a..0000000
+++ /dev/null
@@ -1,539 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_bronsonavltree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_feldmanhashmap.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_striped.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_bronsonavltree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_feldmanhashmap.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_striped.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_bronsonavltree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_feldmanhashmap.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_striped.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insdel_func.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insdel_int.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insdel_string.h" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}</ProjectGuid>\r
-    <RootNamespace>unitmap</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <RunCodeAnalysis>false</RunCodeAnalysis>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-      <EnablePREfast>false</EnablePREfast>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/unit-map-insdel.vcxproj.filters b/projects/Win/vc12/unit-map-insdel.vcxproj.filters
deleted file mode 100644 (file)
index ef09d09..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func.cpp">\r
-      <Filter>map_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_bronsonavltree.cpp">\r
-      <Filter>map_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_cuckoo.cpp">\r
-      <Filter>map_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_ellentree.cpp">\r
-      <Filter>map_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_michael.cpp">\r
-      <Filter>map_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_skip.cpp">\r
-      <Filter>map_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_split.cpp">\r
-      <Filter>map_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_striped.cpp">\r
-      <Filter>map_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int.cpp">\r
-      <Filter>map_insdel_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_bronsonavltree.cpp">\r
-      <Filter>map_insdel_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_cuckoo.cpp">\r
-      <Filter>map_insdel_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_ellentree.cpp">\r
-      <Filter>map_insdel_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_michael.cpp">\r
-      <Filter>map_insdel_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_skip.cpp">\r
-      <Filter>map_insdel_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_split.cpp">\r
-      <Filter>map_insdel_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_striped.cpp">\r
-      <Filter>map_insdel_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string.cpp">\r
-      <Filter>map_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_bronsonavltree.cpp">\r
-      <Filter>map_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_cuckoo.cpp">\r
-      <Filter>map_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_ellentree.cpp">\r
-      <Filter>map_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_michael.cpp">\r
-      <Filter>map_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_skip.cpp">\r
-      <Filter>map_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_split.cpp">\r
-      <Filter>map_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_std.cpp">\r
-      <Filter>map_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_striped.cpp">\r
-      <Filter>map_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_feldmanhashmap.cpp">\r
-      <Filter>map_insdel_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_std.cpp">\r
-      <Filter>map_insdel_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_feldmanhashmap.cpp">\r
-      <Filter>map_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_feldmanhashmap.cpp">\r
-      <Filter>map_insdel_string</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <Filter Include="map_insdel_func">\r
-      <UniqueIdentifier>{7cb9e730-e4e0-4648-96f1-e1dbf119756e}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="map_insdel_int">\r
-      <UniqueIdentifier>{55aed984-fed9-4007-9ad3-59bec69befe8}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="map_insdel_string">\r
-      <UniqueIdentifier>{f613f4ac-8b0f-4a85-81be-d243141b3ce3}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insdel_func.h">\r
-      <Filter>map_insdel_func</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insdel_int.h">\r
-      <Filter>map_insdel_int</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insdel_string.h">\r
-      <Filter>map_insdel_string</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/unit-map-insdelfind.vcxproj b/projects/Win/vc12/unit-map-insdelfind.vcxproj
deleted file mode 100644 (file)
index 5a29b64..0000000
+++ /dev/null
@@ -1,514 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdelfind.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdelfind_bronsonavltree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdelfind_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdelfind_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdelfind_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdelfind_feldmanhashmap.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdelfind_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdelfind_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdelfind_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdelfind_striped.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insdelfind.h" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{CA6F0834-0628-4CD7-8800-AEABCD636360}</ProjectGuid>\r
-    <RootNamespace>unitmap</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/unit-misc.vcxproj b/projects/Win/vc12/unit-misc.vcxproj
deleted file mode 100644 (file)
index 277d7cc..0000000
+++ /dev/null
@@ -1,509 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{77350FDC-9E51-438B-9A8F-D2FEA11D46B2}</ProjectGuid>\r
-    <RootNamespace>unitmisc</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\alloc\hoard_threadtest.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\alloc\larson.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\alloc\linux_scale.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\alloc\michael_allocator.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\alloc\random.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\lock\spinlock.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\alloc\michael_allocator.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\alloc\random_gen.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\lock\nolock.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\lock\win32_lock.h" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/unit-misc.vcxproj.filters b/projects/Win/vc12/unit-misc.vcxproj.filters
deleted file mode 100644 (file)
index 39108a6..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\alloc\hoard_threadtest.cpp">\r
-      <Filter>alloc</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\alloc\larson.cpp">\r
-      <Filter>alloc</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\alloc\linux_scale.cpp">\r
-      <Filter>alloc</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\alloc\michael_allocator.cpp">\r
-      <Filter>alloc</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\alloc\random.cpp">\r
-      <Filter>alloc</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\lock\spinlock.cpp">\r
-      <Filter>lock</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\alloc\random_gen.h">\r
-      <Filter>alloc</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\unit\alloc\michael_allocator.h">\r
-      <Filter>alloc</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\unit\lock\win32_lock.h">\r
-      <Filter>lock</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\unit\lock\nolock.h">\r
-      <Filter>lock</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <Filter Include="alloc">\r
-      <UniqueIdentifier>{03866e2b-6bdb-47ed-a165-3c7f19927d0e}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="lock">\r
-      <UniqueIdentifier>{6952493f-7eee-4643-a7c4-b2fefbb583d2}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/unit-pqueue.vcxproj b/projects/Win/vc12/unit-pqueue.vcxproj
deleted file mode 100644 (file)
index e2327e4..0000000
+++ /dev/null
@@ -1,508 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\pqueue\ellen_bintree_pqueue.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\pqueue\pqueue_defs.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\pqueue\pqueue_item.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\pqueue\pqueue_type.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\pqueue\skiplist_pqueue.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\pqueue\std_pqueue.h" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\pqueue\pop.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\pqueue\push.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\pqueue\push_pop.cpp" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{20B6C380-E96A-4cff-BC17-D88AAE581919}</ProjectGuid>\r
-    <RootNamespace>unitpqueue</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/unit-prerequisites.vcxproj b/projects/Win/vc12/unit-prerequisites.vcxproj
deleted file mode 100644 (file)
index e9f737c..0000000
+++ /dev/null
@@ -1,587 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{61179F2F-07E1-490D-B64D-D85A90B6EF81}</ProjectGuid>\r
-    <RootNamespace>unitprerequisites</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>BOOST_ERROR_CODE_HEADER_ONLY;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Lib>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-    </Lib>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>BOOST_ERROR_CODE_HEADER_ONLY;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Lib>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-    </Lib>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>BOOST_ERROR_CODE_HEADER_ONLY;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Lib>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-    </Lib>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>BOOST_ERROR_CODE_HEADER_ONLY;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Lib>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-    </Lib>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>BOOST_ERROR_CODE_HEADER_ONLY;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Lib>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-    </Lib>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>BOOST_ERROR_CODE_HEADER_ONLY;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Lib>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-    </Lib>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>BOOST_ERROR_CODE_HEADER_ONLY;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Lib>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-    </Lib>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>BOOST_ERROR_CODE_HEADER_ONLY;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Lib>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-    </Lib>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>BOOST_ERROR_CODE_HEADER_ONLY;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Lib>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-    </Lib>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>BOOST_ERROR_CODE_HEADER_ONLY;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Lib>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-    </Lib>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\cppunit\cppunit_mini.h" />\r
-    <ClInclude Include="..\..\..\tests\cppunit\cppunit_proxy.h" />\r
-    <ClInclude Include="..\..\..\tests\cppunit\file_reporter.h" />\r
-    <ClInclude Include="..\..\..\tests\hashing\city.h" />\r
-    <ClInclude Include="..\..\..\tests\hashing\hash_func.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\ellen_bintree_update_desc_pool.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\michael_alloc.h" />\r
-    <ClInclude Include="..\..\..\tests\cppunit\test_beans.h" />\r
-    <ClInclude Include="..\..\..\tests\cppunit\thread.h" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\hashing\city.cpp">\r
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level2</WarningLevel>\r
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">Level2</WarningLevel>\r
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">Level2</WarningLevel>\r
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">Level2</WarningLevel>\r
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level2</WarningLevel>\r
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level2</WarningLevel>\r
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">Level2</WarningLevel>\r
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">Level2</WarningLevel>\r
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">Level2</WarningLevel>\r
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level2</WarningLevel>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\ellen_bintree_update_desc_pool.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\michael_alloc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\cppunit\test_main.cpp">\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\cppunit\thread.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <CustomBuild Include="..\..\..\tests\data\test-debug.conf">\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TargetDir)\test-debug.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(TargetDir)\test-debug.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(TargetDir)\test-debug.conf;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TargetDir)\test-debug.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(TargetDir)\test-debug.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(TargetDir)\test-debug.conf;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TargetDir)\test-debug.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(TargetDir)\test-debug.conf;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TargetDir)\test-debug.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(TargetDir)\test-debug.conf;%(Outputs)</Outputs>\r
-    </CustomBuild>\r
-    <CustomBuild Include="..\..\..\tests\data\test-express.conf">\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TargetDir)\test-express.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(TargetDir)\test-express.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(TargetDir)\test-express.conf;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TargetDir)\test-express.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(TargetDir)\test-express.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(TargetDir)\test-express.conf;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TargetDir)\test-express.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(TargetDir)\test-express.conf;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TargetDir)\test-express.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(TargetDir)\test-express.conf;%(Outputs)</Outputs>\r
-    </CustomBuild>\r
-    <CustomBuild Include="..\..\..\tests\data\test.conf">\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TargetDir)\test.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(TargetDir)\test.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(TargetDir)\test.conf;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TargetDir)\test.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(TargetDir)\test.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(TargetDir)\test.conf;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TargetDir)\test.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(TargetDir)\test.conf;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TargetDir)\test.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(TargetDir)\test.conf;%(Outputs)</Outputs>\r
-    </CustomBuild>\r
-    <CustomBuild Include="..\..\..\tests\data\text.txt">\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Build text dictionary</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">Build text dictionary</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">Build text dictionary</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Build text dictionary</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">Build text dictionary</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">Build text dictionary</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Build text dictionary</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">Build text dictionary</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Build text dictionary</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">Build text dictionary</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
-    </CustomBuild>\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/unit-queue.vcxproj b/projects/Win/vc12/unit-queue.vcxproj
deleted file mode 100644 (file)
index db7ddda..0000000
+++ /dev/null
@@ -1,510 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{6C15AF8A-4A99-49F9-BCF0-1BF36771099A}</ProjectGuid>\r
-    <RootNamespace>unitqueue</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\queue\bounded_queue_fulness.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\queue\intrusive_queue_reader_writer.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\queue\queue_pop.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\queue\queue_push.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\queue\queue_random.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\queue\queue_reader_writer.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\queue\intrusive_queue_defs.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\queue\intrusive_queue_type.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\queue\queue_defs.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\queue\queue_type.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\queue\std_queue.h" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/unit-set-delodd.vcxproj b/projects/Win/vc12/unit-set-delodd.vcxproj
deleted file mode 100644 (file)
index 31659ab..0000000
+++ /dev/null
@@ -1,507 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_delodd.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_delodd_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_delodd_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_delodd_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_delodd_feldmanhashset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_delodd_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_delodd_split.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\set2\set_delodd.h" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{AF7B2253-2E6D-4992-94D9-4B3699C54929}</ProjectGuid>\r
-    <RootNamespace>unitset</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/unit-set-insdel.vcxproj b/projects/Win/vc12/unit-set-insdel.vcxproj
deleted file mode 100644 (file)
index 2a47a45..0000000
+++ /dev/null
@@ -1,522 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_feldmanhashset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_striped.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_feldmanhashset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_striped.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\set2\set_insdel_func.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\set2\set_insdel_string.h" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}</ProjectGuid>\r
-    <RootNamespace>unitset</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/unit-set-insdel.vcxproj.filters b/projects/Win/vc12/unit-set-insdel.vcxproj.filters
deleted file mode 100644 (file)
index 643f585..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func.cpp">\r
-      <Filter>set_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_cuckoo.cpp">\r
-      <Filter>set_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_ellentree.cpp">\r
-      <Filter>set_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_skip.cpp">\r
-      <Filter>set_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_split.cpp">\r
-      <Filter>set_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_striped.cpp">\r
-      <Filter>set_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string.cpp">\r
-      <Filter>set_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_cuckoo.cpp">\r
-      <Filter>set_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_ellentree.cpp">\r
-      <Filter>set_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_michael.cpp">\r
-      <Filter>set_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_skip.cpp">\r
-      <Filter>set_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_split.cpp">\r
-      <Filter>set_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_std.cpp">\r
-      <Filter>set_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_striped.cpp">\r
-      <Filter>set_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_michael.cpp">\r
-      <Filter>set_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_feldmanhashset.cpp">\r
-      <Filter>set_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_feldmanhashset.cpp">\r
-      <Filter>set_insdel_string</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <Filter Include="set_insdel_func">\r
-      <UniqueIdentifier>{cbe5ede5-77ea-49bb-be6a-16d30d8416f7}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="set_insdel_string">\r
-      <UniqueIdentifier>{8a51ae1e-c41c-4394-bf84-3de8c45ea8bb}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\set2\set_insdel_func.h">\r
-      <Filter>set_insdel_func</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\unit\set2\set_insdel_string.h">\r
-      <Filter>set_insdel_string</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/unit-set-insdelfind.vcxproj b/projects/Win/vc12/unit-set-insdelfind.vcxproj
deleted file mode 100644 (file)
index 30f7f34..0000000
+++ /dev/null
@@ -1,513 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdelfind.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdelfind_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdelfind_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdelfind_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdelfind_feldmanhashset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdelfind_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdelfind_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdelfind_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdelfind_striped.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\set2\set_insdelfind.h" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{DE256E91-EE96-412E-82EE-DD7BD1A1130D}</ProjectGuid>\r
-    <RootNamespace>unitset</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc12/unit-stack.vcxproj b/projects/Win/vc12/unit-stack.vcxproj
deleted file mode 100644 (file)
index 2b1d22b..0000000
+++ /dev/null
@@ -1,506 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{E29DE1F7-AE8D-4AE6-98B1-147E5103D974}</ProjectGuid>\r
-    <RootNamespace>unitstack</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <VCTargetsPath Condition="'$(VCTargetsPath11)' != '' and '$(VSVersion)' == '' and $(VisualStudioVersion) == ''">$(VCTargetsPath11)</VCTargetsPath>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v120</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc12\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc12-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc12\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc12-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\stack\stack_intrusive_pushpop.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\stack\stack_push.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\stack\stack_pushpop.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\stack\intrusive_stack_type.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\stack\intrusive_stack_defs.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\stack\stack_type.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\stack\stack_defs.h" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
index 7300001df25fcf4976a244f899bb22ad01990775..c15b6f4a57129794d011b2ac43e14d23ad46603c 100644 (file)
 Microsoft Visual Studio Solution File, Format Version 12.00\r
 # Visual Studio 14\r
-VisualStudioVersion = 14.0.23107.0\r
+VisualStudioVersion = 14.0.25123.0\r
 MinimumVisualStudioVersion = 10.0.40219.1\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cds", "cds.vcxproj", "{408FE9BC-44F0-4E6A-89FA-D6F952584239}"\r
 EndProject\r
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "multi-threaded test", "multi-threaded test", "{B30CA283-1796-4763-92C3-2E4848D443F7}"\r
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "unit", "unit", "{810490B7-31E5-49AE-8455-CAF99A9658B6}"\r
        ProjectSection(SolutionItems) = preProject\r
-               ..\..\..\tests\unit\print_bronsonavltree_stat.h = ..\..\..\tests\unit\print_bronsonavltree_stat.h\r
-               ..\..\..\tests\unit\print_cuckoo_stat.h = ..\..\..\tests\unit\print_cuckoo_stat.h\r
-               ..\..\..\tests\unit\print_ellenbintree_stat.h = ..\..\..\tests\unit\print_ellenbintree_stat.h\r
-               ..\..\..\tests\unit\print_mspriorityqueue_stat.h = ..\..\..\tests\unit\print_mspriorityqueue_stat.h\r
-               ..\..\..\tests\unit\print_feldman_hashset_stat.h = ..\..\..\tests\unit\print_feldman_hashset_stat.h\r
-               ..\..\..\tests\unit\print_segmentedqueue_stat.h = ..\..\..\tests\unit\print_segmentedqueue_stat.h\r
-               ..\..\..\tests\unit\print_skip_list_stat.h = ..\..\..\tests\unit\print_skip_list_stat.h\r
-               ..\..\..\tests\unit\print_split_list_stat.h = ..\..\..\tests\unit\print_split_list_stat.h\r
-               ..\..\..\tests\unit\print_sync_monitor_stat.h = ..\..\..\tests\unit\print_sync_monitor_stat.h\r
-               ..\..\..\tests\unit\set2\set_type_cuckoo.h = ..\..\..\tests\unit\set2\set_type_cuckoo.h\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-prerequisites", "unit-prerequisites.vcxproj", "{61179F2F-07E1-490D-B64D-D85A90B6EF81}"\r
+               ..\..\..\tests\test-hdr\size_check.h = ..\..\..\tests\test-hdr\size_check.h\r
+       EndProjectSection\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest-stack", "gtest-stack.vcxproj", "{5407E9D2-67D9-4266-976E-7A90BDE2541D}"\r
        ProjectSection(ProjectDependencies) = postProject\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-misc", "unit-misc.vcxproj", "{77350FDC-9E51-438B-9A8F-D2FEA11D46B2}"\r
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cds_test", "cds_test", "{3A510E45-180B-4ADC-AFCD-D75774B68580}"\r
+       ProjectSection(SolutionItems) = preProject\r
+               ..\..\..\test\include\cds_test\check_size.h = ..\..\..\test\include\cds_test\check_size.h\r
+               ..\..\..\test\include\cds_test\fixture.h = ..\..\..\test\include\cds_test\fixture.h\r
+               ..\..\..\test\include\cds_test\hash_func.h = ..\..\..\test\include\cds_test\hash_func.h\r
+               ..\..\..\test\include\cds_test\stat_bronson_avltree_out.h = ..\..\..\test\include\cds_test\stat_bronson_avltree_out.h\r
+               ..\..\..\test\include\cds_test\stat_cuckoo_out.h = ..\..\..\test\include\cds_test\stat_cuckoo_out.h\r
+               ..\..\..\test\include\cds_test\stat_ellenbintree_out.h = ..\..\..\test\include\cds_test\stat_ellenbintree_out.h\r
+               ..\..\..\test\include\cds_test\stat_feldman_hashset_out.h = ..\..\..\test\include\cds_test\stat_feldman_hashset_out.h\r
+               ..\..\..\test\include\cds_test\stat_skiplist_out.h = ..\..\..\test\include\cds_test\stat_skiplist_out.h\r
+               ..\..\..\test\include\cds_test\stat_splitlist_out.h = ..\..\..\test\include\cds_test\stat_splitlist_out.h\r
+               ..\..\..\test\include\cds_test\stat_sync_monitor_out.h = ..\..\..\test\include\cds_test\stat_sync_monitor_out.h\r
+               ..\..\..\test\include\cds_test\stress_test.h = ..\..\..\test\include\cds_test\stress_test.h\r
+               ..\..\..\test\include\cds_test\thread.h = ..\..\..\test\include\cds_test\thread.h\r
+       EndProjectSection\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest-deque", "gtest-deque.vcxproj", "{EA5D825A-83A4-4A36-83C1-3D048D21D55B}"\r
        ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-queue", "unit-queue.vcxproj", "{6C15AF8A-4A99-49F9-BCF0-1BF36771099A}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest-pqueue", "gtest-pqueue.vcxproj", "{ED94B1D1-2442-43C2-A71C-A757122408A6}"\r
        ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-stack", "unit-stack.vcxproj", "{E29DE1F7-AE8D-4AE6-98B1-147E5103D974}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest-queue", "gtest-queue.vcxproj", "{9EB8FAB6-78E8-48B6-9589-85985CE8D33D}"\r
        ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "single-threaded test", "single-threaded test", "{B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}"\r
-       ProjectSection(SolutionItems) = preProject\r
-               ..\..\..\tests\test-hdr\size_check.h = ..\..\..\tests\test-hdr\size_check.h\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest-list", "gtest-list.vcxproj", "{83FC591C-2CA2-4631-AD13-218FF4C27692}"\r
+       ProjectSection(ProjectDependencies) = postProject\r
+               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hdr-test-deque", "hdr-test-deque.vcxproj", "{CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}"\r
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "stress", "stress", "{10E1FAF2-904D-405E-8AB5-6878A1B03346}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stress-framework", "stress-framework.vcxproj", "{A34CED07-A442-4FA1-81C4-F8B9CD3C832B}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stress-stack", "stress-stack.vcxproj", "{5E1C3684-9463-4A98-BAFC-9BD51F179BB6}"\r
        ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B} = {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hdr-test-map", "hdr-test-map.vcxproj", "{282E9A9A-386A-40FB-A483-994BACE24830}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stress-queue", "stress-queue.vcxproj", "{50B2EC4B-A118-4E7B-ABC7-2EA8B685A58C}"\r
        ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B} = {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hdr-test-misc", "hdr-test-misc.vcxproj", "{C5E76975-B87B-4B9E-8596-B01DDA683FCA}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stress-pqueue", "stress-pqueue.vcxproj", "{51AC349E-B365-4FCF-8778-17A1534E4584}"\r
        ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B} = {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hdr-test-list", "hdr-test-list.vcxproj", "{EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest-set", "gtest-set.vcxproj", "{A589D3F1-A749-4268-ADEC-D0CE13D1E359}"\r
        ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "map", "map", "{6BB7A27F-FC59-4267-B6FA-D034176D1459}"\r
-       ProjectSection(SolutionItems) = preProject\r
-               ..\..\..\tests\unit\map2\map_defs.h = ..\..\..\tests\unit\map2\map_defs.h\r
-               ..\..\..\tests\unit\map2\map_type.h = ..\..\..\tests\unit\map2\map_type.h\r
-               ..\..\..\tests\unit\map2\map_type_bronson_avltree.h = ..\..\..\tests\unit\map2\map_type_bronson_avltree.h\r
-               ..\..\..\tests\unit\map2\map_type_cuckoo.h = ..\..\..\tests\unit\map2\map_type_cuckoo.h\r
-               ..\..\..\tests\unit\map2\map_type_ellen_bintree.h = ..\..\..\tests\unit\map2\map_type_ellen_bintree.h\r
-               ..\..\..\tests\unit\map2\map_type_lazy_list.h = ..\..\..\tests\unit\map2\map_type_lazy_list.h\r
-               ..\..\..\tests\unit\map2\map_type_michael.h = ..\..\..\tests\unit\map2\map_type_michael.h\r
-               ..\..\..\tests\unit\map2\map_type_michael_list.h = ..\..\..\tests\unit\map2\map_type_michael_list.h\r
-               ..\..\..\tests\unit\map2\map_type_feldman_hashmap.h = ..\..\..\tests\unit\map2\map_type_feldman_hashmap.h\r
-               ..\..\..\tests\unit\map2\map_type_skip_list.h = ..\..\..\tests\unit\map2\map_type_skip_list.h\r
-               ..\..\..\tests\unit\map2\map_type_split_list.h = ..\..\..\tests\unit\map2\map_type_split_list.h\r
-               ..\..\..\tests\unit\map2\map_type_std.h = ..\..\..\tests\unit\map2\map_type_std.h\r
-               ..\..\..\tests\unit\map2\map_type_striped.h = ..\..\..\tests\unit\map2\map_type_striped.h\r
-               ..\..\..\tests\unit\map2\std_hash_map.h = ..\..\..\tests\unit\map2\std_hash_map.h\r
-               ..\..\..\tests\unit\map2\std_map.h = ..\..\..\tests\unit\map2\std_map.h\r
-       EndProjectSection\r
-EndProject\r
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "set", "set", "{A64449B7-90FB-4E2B-A686-9EFC0E298644}"\r
-       ProjectSection(SolutionItems) = preProject\r
-               ..\..\..\tests\unit\set2\set_defs.h = ..\..\..\tests\unit\set2\set_defs.h\r
-               ..\..\..\tests\unit\set2\set_type.h = ..\..\..\tests\unit\set2\set_type.h\r
-               ..\..\..\tests\unit\set2\set_type_cuckoo.h = ..\..\..\tests\unit\set2\set_type_cuckoo.h\r
-               ..\..\..\tests\unit\set2\set_type_ellen_bintree.h = ..\..\..\tests\unit\set2\set_type_ellen_bintree.h\r
-               ..\..\..\tests\unit\set2\set_type_lazy_list.h = ..\..\..\tests\unit\set2\set_type_lazy_list.h\r
-               ..\..\..\tests\unit\set2\set_type_michael.h = ..\..\..\tests\unit\set2\set_type_michael.h\r
-               ..\..\..\tests\unit\set2\set_type_michael_list.h = ..\..\..\tests\unit\set2\set_type_michael_list.h\r
-               ..\..\..\tests\unit\set2\set_type_feldman_hashset.h = ..\..\..\tests\unit\set2\set_type_feldman_hashset.h\r
-               ..\..\..\tests\unit\set2\set_type_skip_list.h = ..\..\..\tests\unit\set2\set_type_skip_list.h\r
-               ..\..\..\tests\unit\set2\set_type_split_list.h = ..\..\..\tests\unit\set2\set_type_split_list.h\r
-               ..\..\..\tests\unit\set2\set_type_std.h = ..\..\..\tests\unit\set2\set_type_std.h\r
-               ..\..\..\tests\unit\set2\set_type_striped.h = ..\..\..\tests\unit\set2\set_type_striped.h\r
-       EndProjectSection\r
-EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-map-delodd", "unit-map-delodd.vcxproj", "{3C598F96-FB84-4D42-9B43-F697F53B0221}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest-intrusive-set", "gtest-intrusive-set.vcxproj", "{EC1EF263-7E34-4867-9ED9-77AA7963CD4A}"\r
+       ProjectSection(ProjectDependencies) = postProject\r
+               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
+       EndProjectSection\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest-striped-set", "gtest-striped-set.vcxproj", "{648021D3-6E18-4B94-88B8-F6A59609E210}"\r
+       ProjectSection(ProjectDependencies) = postProject\r
+               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
+       EndProjectSection\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest-map", "gtest-map.vcxproj", "{42B7E892-DDDA-4D00-9AB7-378E0E7E9433}"\r
        ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-map-find", "unit-map-find.vcxproj", "{BA2A9239-0299-4069-BB0E-16DACE87ADE0}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest-striped-map", "gtest-striped-map.vcxproj", "{00FD5CB8-E1A4-40CA-B613-30A06A75622B}"\r
        ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-map-insdel", "unit-map-insdel.vcxproj", "{CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest-tree", "gtest-tree.vcxproj", "{2ABD6A2E-BEA7-4C8C-982B-A609F83D2DCB}"\r
        ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-set-delodd", "unit-set-delodd.vcxproj", "{AF7B2253-2E6D-4992-94D9-4B3699C54929}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest-misc", "gtest-misc.vcxproj", "{FA22E700-1AE5-4D7B-B9F1-0A919FF7FF06}"\r
        ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-set-insdel", "unit-set-insdel.vcxproj", "{BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}"\r
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "set", "set", "{0D83E8C7-97D1-4BA1-928A-6846E7089652}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stress-set-delodd", "stress-set-delodd.vcxproj", "{8202D428-1E08-4744-B372-6B2E83A9928E}"\r
        ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B} = {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hdr-test-priority_queue", "hdr-test-priority_queue.vcxproj", "{90192F7D-5850-41DD-AE89-62D26B387162}"\r
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Header Files", "Header Files", "{D968B0F5-52BD-40C1-B230-28104567CE97}"\r
+       ProjectSection(SolutionItems) = preProject\r
+               ..\..\..\test\stress\set\set_type.h = ..\..\..\test\stress\set\set_type.h\r
+               ..\..\..\test\stress\set\set_type_cuckoo.h = ..\..\..\test\stress\set\set_type_cuckoo.h\r
+               ..\..\..\test\stress\set\set_type_ellen_bintree.h = ..\..\..\test\stress\set\set_type_ellen_bintree.h\r
+               ..\..\..\test\stress\set\set_type_feldman_hashset.h = ..\..\..\test\stress\set\set_type_feldman_hashset.h\r
+               ..\..\..\test\stress\set\set_type_lazy_list.h = ..\..\..\test\stress\set\set_type_lazy_list.h\r
+               ..\..\..\test\stress\set\set_type_michael.h = ..\..\..\test\stress\set\set_type_michael.h\r
+               ..\..\..\test\stress\set\set_type_michael_list.h = ..\..\..\test\stress\set\set_type_michael_list.h\r
+               ..\..\..\test\stress\set\set_type_skip_list.h = ..\..\..\test\stress\set\set_type_skip_list.h\r
+               ..\..\..\test\stress\set\set_type_split_list.h = ..\..\..\test\stress\set\set_type_split_list.h\r
+               ..\..\..\test\stress\set\set_type_std.h = ..\..\..\test\stress\set\set_type_std.h\r
+               ..\..\..\test\stress\set\set_type_striped.h = ..\..\..\test\stress\set\set_type_striped.h\r
+       EndProjectSection\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stress-set-insdelfind", "stress-set-insdelfind.vcxproj", "{133D1AEE-3BAF-42D1-B1AB-93D5239F4926}"\r
        ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B} = {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hdr-test-queue", "hdr-test-queue.vcxproj", "{33664E63-8D24-4FF4-A744-9782EB711509}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stress-set-insdel-func", "stress-set-insdel_func.vcxproj", "{EE7A269E-83E4-402B-9C79-85058826E81E}"\r
+       ProjectSection(ProjectDependencies) = postProject\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B} = {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}\r
+               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
+       EndProjectSection\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stress-set-insdel-string", "stress-set-insdel_string.vcxproj", "{937D82C6-92AB-4C58-ACE8-F88E7063BFA9}"\r
+       ProjectSection(ProjectDependencies) = postProject\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B} = {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}\r
+               {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
+       EndProjectSection\r
+EndProject\r
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "map", "map", "{7D3EE35B-185D-40B5-88C2-7F9933426978}"\r
+EndProject\r
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Header Files", "Header Files", "{2C41747C-6CC6-4AE8-9EB8-EB8B954BBDB4}"\r
+       ProjectSection(SolutionItems) = preProject\r
+               ..\..\..\test\stress\map\map_type.h = ..\..\..\test\stress\map\map_type.h\r
+               ..\..\..\test\stress\map\map_type_bronson_avltree.h = ..\..\..\test\stress\map\map_type_bronson_avltree.h\r
+               ..\..\..\test\stress\map\map_type_cuckoo.h = ..\..\..\test\stress\map\map_type_cuckoo.h\r
+               ..\..\..\test\stress\map\map_type_ellen_bintree.h = ..\..\..\test\stress\map\map_type_ellen_bintree.h\r
+               ..\..\..\test\stress\map\map_type_feldman_hashmap.h = ..\..\..\test\stress\map\map_type_feldman_hashmap.h\r
+               ..\..\..\test\stress\map\map_type_lazy_list.h = ..\..\..\test\stress\map\map_type_lazy_list.h\r
+               ..\..\..\test\stress\map\map_type_michael.h = ..\..\..\test\stress\map\map_type_michael.h\r
+               ..\..\..\test\stress\map\map_type_michael_list.h = ..\..\..\test\stress\map\map_type_michael_list.h\r
+               ..\..\..\test\stress\map\map_type_skip_list.h = ..\..\..\test\stress\map\map_type_skip_list.h\r
+               ..\..\..\test\stress\map\map_type_split_list.h = ..\..\..\test\stress\map\map_type_split_list.h\r
+               ..\..\..\test\stress\map\map_type_std.h = ..\..\..\test\stress\map\map_type_std.h\r
+               ..\..\..\test\stress\map\map_type_striped.h = ..\..\..\test\stress\map\map_type_striped.h\r
+       EndProjectSection\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stress-map-delodd", "stress-map-delodd.vcxproj", "{DD432BE7-0CA8-47C6-B861-943A036C18EF}"\r
        ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B} = {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hdr-test-set", "hdr-test-set.vcxproj", "{E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stress-map-find_int", "stress-map-find_int.vcxproj", "{3F36B97B-8028-4335-ADDD-20B6B81F87AF}"\r
        ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B} = {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hdr-test-stack", "hdr-test-stack.vcxproj", "{E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stress-map-find_string", "stress-map-find_string.vcxproj", "{C127CD80-E8A7-47E4-B7EC-1709D2188982}"\r
        ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B} = {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hdr-test-striped-set", "hdr-test-striped-set.vcxproj", "{A38E5597-6916-4480-A343-C9846EF544E4}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stress-map-insdel-func", "stress-map-insdel-func.vcxproj", "{34FA4110-F17B-4AD0-A4C9-C91B92AD06E4}"\r
        ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B} = {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hdr-test-tree", "hdr-test-tree.vcxproj", "{6F834EAD-7B94-4979-A0F1-A662E3D30145}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stress-map-insdel-int", "stress-map-insdel-int.vcxproj", "{46649F79-2919-4B4C-B243-08C724901F58}"\r
        ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B} = {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-pqueue", "unit-pqueue.vcxproj", "{20B6C380-E96A-4CFF-BC17-D88AAE581919}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stress-map-insdel-string", "stress-map-insdel-string.vcxproj", "{2D0E651D-058D-4D69-9A44-12149E6CA5BE}"\r
        ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B} = {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-map-insdel-item", "unit-map-insdel-item.vcxproj", "{7521DD92-56FF-4ECA-93E5-CCE50862354B}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stress-map-insdel-item-int", "stress-map-insdel-item-int.vcxproj", "{50387CA5-F5B2-4C40-ACFD-FC3C9EE2CD6B}"\r
        ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B} = {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-map-insdelfind", "unit-map-insdelfind.vcxproj", "{CA6F0834-0628-4CD7-8800-AEABCD636360}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stress-map-insdelfind", "stress-map-insdelfind.vcxproj", "{1BB746AC-7856-4E59-9430-51177621DC35}"\r
        ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B} = {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit-set-insdelfind", "unit-set-insdelfind.vcxproj", "{DE256E91-EE96-412E-82EE-DD7BD1A1130D}"\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stress-map-insfind-int", "stress-map-insfind-int.vcxproj", "{24DF3B87-387E-4EFC-BDE0-8DAD279FE19A}"\r
        ProjectSection(ProjectDependencies) = postProject\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B} = {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
        EndProjectSection\r
 EndProject\r
@@ -199,14 +224,8 @@ Global
        GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
                Debug|Win32 = Debug|Win32\r
                Debug|x64 = Debug|x64\r
-               Debug-clang-3.7|Win32 = Debug-clang-3.7|Win32\r
-               Debug-clang-3.7|x64 = Debug-clang-3.7|x64\r
                DebugVLD|Win32 = DebugVLD|Win32\r
                DebugVLD|x64 = DebugVLD|x64\r
-               ICL-Debug|Win32 = ICL-Debug|Win32\r
-               ICL-Debug|x64 = ICL-Debug|x64\r
-               ICL-Release|Win32 = ICL-Release|Win32\r
-               ICL-Release|x64 = ICL-Release|x64\r
                Release|Win32 = Release|Win32\r
                Release|x64 = Release|x64\r
        EndGlobalSection\r
@@ -215,604 +234,400 @@ Global
                {408FE9BC-44F0-4E6A-89FA-D6F952584239}.Debug|Win32.Build.0 = Debug|Win32\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239}.Debug|x64.ActiveCfg = Debug|x64\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239}.Debug|x64.Build.0 = Debug|x64\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {408FE9BC-44F0-4E6A-89FA-D6F952584239}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239}.Release|Win32.ActiveCfg = Release|Win32\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239}.Release|Win32.Build.0 = Release|Win32\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239}.Release|x64.ActiveCfg = Release|x64\r
                {408FE9BC-44F0-4E6A-89FA-D6F952584239}.Release|x64.Build.0 = Release|x64\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.Debug|Win32.Build.0 = Debug|Win32\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.Debug|x64.ActiveCfg = Debug|x64\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.Debug|x64.Build.0 = Debug|x64\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.DebugVLD|Win32.ActiveCfg = Debug|Win32\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.DebugVLD|Win32.Build.0 = Debug|Win32\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.Release|Win32.ActiveCfg = Release|Win32\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.Release|Win32.Build.0 = Release|Win32\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.Release|x64.ActiveCfg = Release|x64\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81}.Release|x64.Build.0 = Release|x64\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.Debug|Win32.Build.0 = Debug|Win32\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.Debug|x64.ActiveCfg = Debug|x64\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.Debug|x64.Build.0 = Debug|x64\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.DebugVLD|Win32.ActiveCfg = Debug|Win32\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.DebugVLD|Win32.Build.0 = Debug|Win32\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.Release|Win32.ActiveCfg = Release|Win32\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.Release|Win32.Build.0 = Release|Win32\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.Release|x64.ActiveCfg = Release|x64\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2}.Release|x64.Build.0 = Release|x64\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.Debug|Win32.Build.0 = Debug|Win32\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.Debug|x64.ActiveCfg = Debug|x64\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.Debug|x64.Build.0 = Debug|x64\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.DebugVLD|Win32.ActiveCfg = Debug|Win32\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.DebugVLD|Win32.Build.0 = Debug|Win32\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.Release|Win32.ActiveCfg = Release|Win32\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.Release|Win32.Build.0 = Release|Win32\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.Release|x64.ActiveCfg = Release|x64\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A}.Release|x64.Build.0 = Release|x64\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.Debug|Win32.Build.0 = Debug|Win32\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.Debug|x64.ActiveCfg = Debug|x64\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.Debug|x64.Build.0 = Debug|x64\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.DebugVLD|Win32.ActiveCfg = Debug|Win32\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.DebugVLD|Win32.Build.0 = Debug|Win32\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.Release|Win32.ActiveCfg = Release|Win32\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.Release|Win32.Build.0 = Release|Win32\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.Release|x64.ActiveCfg = Release|x64\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974}.Release|x64.Build.0 = Release|x64\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.Debug|Win32.Build.0 = Debug|Win32\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.Debug|x64.ActiveCfg = Debug|x64\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.Debug|x64.Build.0 = Debug|x64\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.Release|Win32.ActiveCfg = Release|Win32\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.Release|Win32.Build.0 = Release|Win32\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.Release|x64.ActiveCfg = Release|x64\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}.Release|x64.Build.0 = Release|x64\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.Debug|Win32.Build.0 = Debug|Win32\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.Debug|x64.ActiveCfg = Debug|x64\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.Debug|x64.Build.0 = Debug|x64\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.Release|Win32.ActiveCfg = Release|Win32\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.Release|Win32.Build.0 = Release|Win32\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.Release|x64.ActiveCfg = Release|x64\r
-               {282E9A9A-386A-40FB-A483-994BACE24830}.Release|x64.Build.0 = Release|x64\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.Debug|Win32.Build.0 = Debug|Win32\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.Debug|x64.ActiveCfg = Debug|x64\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.Debug|x64.Build.0 = Debug|x64\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.Release|Win32.ActiveCfg = Release|Win32\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.Release|Win32.Build.0 = Release|Win32\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.Release|x64.ActiveCfg = Release|x64\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA}.Release|x64.Build.0 = Release|x64\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.Debug|Win32.Build.0 = Debug|Win32\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.Debug|x64.ActiveCfg = Debug|x64\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.Debug|x64.Build.0 = Debug|x64\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.Release|Win32.ActiveCfg = Release|Win32\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.Release|Win32.Build.0 = Release|Win32\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.Release|x64.ActiveCfg = Release|x64\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}.Release|x64.Build.0 = Release|x64\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.Debug|Win32.Build.0 = Debug|Win32\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.Debug|x64.ActiveCfg = Debug|x64\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.Debug|x64.Build.0 = Debug|x64\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.Release|Win32.ActiveCfg = Release|Win32\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.Release|Win32.Build.0 = Release|Win32\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.Release|x64.ActiveCfg = Release|x64\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221}.Release|x64.Build.0 = Release|x64\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.Debug|Win32.Build.0 = Debug|Win32\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.Debug|x64.ActiveCfg = Debug|x64\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.Debug|x64.Build.0 = Debug|x64\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.Release|Win32.ActiveCfg = Release|Win32\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.Release|Win32.Build.0 = Release|Win32\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.Release|x64.ActiveCfg = Release|x64\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0}.Release|x64.Build.0 = Release|x64\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.Debug|Win32.Build.0 = Debug|Win32\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.Debug|x64.ActiveCfg = Debug|x64\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.Debug|x64.Build.0 = Debug|x64\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.Release|Win32.ActiveCfg = Release|Win32\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.Release|Win32.Build.0 = Release|Win32\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.Release|x64.ActiveCfg = Release|x64\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}.Release|x64.Build.0 = Release|x64\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.Debug|Win32.Build.0 = Debug|Win32\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.Debug|x64.ActiveCfg = Debug|x64\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.Debug|x64.Build.0 = Debug|x64\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.Release|Win32.ActiveCfg = Release|Win32\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.Release|Win32.Build.0 = Release|Win32\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.Release|x64.ActiveCfg = Release|x64\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929}.Release|x64.Build.0 = Release|x64\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.Debug|Win32.Build.0 = Debug|Win32\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.Debug|x64.ActiveCfg = Debug|x64\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.Debug|x64.Build.0 = Debug|x64\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.Release|Win32.ActiveCfg = Release|Win32\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.Release|Win32.Build.0 = Release|Win32\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.Release|x64.ActiveCfg = Release|x64\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.Release|x64.Build.0 = Release|x64\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.Debug|Win32.Build.0 = Debug|Win32\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.Debug|x64.ActiveCfg = Debug|x64\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.Debug|x64.Build.0 = Debug|x64\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.Release|Win32.ActiveCfg = Release|Win32\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.Release|Win32.Build.0 = Release|Win32\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.Release|x64.ActiveCfg = Release|x64\r
-               {90192F7D-5850-41DD-AE89-62D26B387162}.Release|x64.Build.0 = Release|x64\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.Debug|Win32.Build.0 = Debug|Win32\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.Debug|x64.ActiveCfg = Debug|x64\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.Debug|x64.Build.0 = Debug|x64\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.Release|Win32.ActiveCfg = Release|Win32\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.Release|Win32.Build.0 = Release|Win32\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.Release|x64.ActiveCfg = Release|x64\r
-               {33664E63-8D24-4FF4-A744-9782EB711509}.Release|x64.Build.0 = Release|x64\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.Debug|Win32.Build.0 = Debug|Win32\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.Debug|x64.ActiveCfg = Debug|x64\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.Debug|x64.Build.0 = Debug|x64\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.Release|Win32.ActiveCfg = Release|Win32\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.Release|Win32.Build.0 = Release|Win32\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.Release|x64.ActiveCfg = Release|x64\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.Release|x64.Build.0 = Release|x64\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.Debug|Win32.Build.0 = Debug|Win32\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.Debug|x64.ActiveCfg = Debug|x64\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.Debug|x64.Build.0 = Debug|x64\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.Release|Win32.ActiveCfg = Release|Win32\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.Release|Win32.Build.0 = Release|Win32\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.Release|x64.ActiveCfg = Release|x64\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}.Release|x64.Build.0 = Release|x64\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.Debug|Win32.Build.0 = Debug|Win32\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.Debug|x64.ActiveCfg = Debug|x64\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.Debug|x64.Build.0 = Debug|x64\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.Release|Win32.ActiveCfg = Release|Win32\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.Release|Win32.Build.0 = Release|Win32\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.Release|x64.ActiveCfg = Release|x64\r
-               {A38E5597-6916-4480-A343-C9846EF544E4}.Release|x64.Build.0 = Release|x64\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.Debug|Win32.Build.0 = Debug|Win32\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.Debug|x64.ActiveCfg = Debug|x64\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.Debug|x64.Build.0 = Debug|x64\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.Release|Win32.ActiveCfg = Release|Win32\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.Release|Win32.Build.0 = Release|Win32\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.Release|x64.ActiveCfg = Release|x64\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145}.Release|x64.Build.0 = Release|x64\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.Debug|Win32.Build.0 = Debug|Win32\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.Debug|x64.ActiveCfg = Debug|x64\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.Debug|x64.Build.0 = Debug|x64\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.Release|Win32.ActiveCfg = Release|Win32\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.Release|Win32.Build.0 = Release|Win32\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.Release|x64.ActiveCfg = Release|x64\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919}.Release|x64.Build.0 = Release|x64\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.Debug|Win32.Build.0 = Debug|Win32\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.Debug|x64.ActiveCfg = Debug|x64\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.Debug|x64.Build.0 = Debug|x64\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.Release|Win32.ActiveCfg = Release|Win32\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.Release|Win32.Build.0 = Release|Win32\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.Release|x64.ActiveCfg = Release|x64\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B}.Release|x64.Build.0 = Release|x64\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.Debug|Win32.Build.0 = Debug|Win32\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.Debug|x64.ActiveCfg = Debug|x64\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.Debug|x64.Build.0 = Debug|x64\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.Release|Win32.ActiveCfg = Release|Win32\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.Release|Win32.Build.0 = Release|Win32\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.Release|x64.ActiveCfg = Release|x64\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360}.Release|x64.Build.0 = Release|x64\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.Debug|Win32.Build.0 = Debug|Win32\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.Debug|x64.ActiveCfg = Debug|x64\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.Debug|x64.Build.0 = Debug|x64\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.Debug-clang-3.7|Win32.ActiveCfg = Debug-clang-3.7|Win32\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.Debug-clang-3.7|Win32.Build.0 = Debug-clang-3.7|Win32\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.Debug-clang-3.7|x64.ActiveCfg = Debug-clang-3.7|x64\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.Debug-clang-3.7|x64.Build.0 = Debug-clang-3.7|x64\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.ICL-Debug|Win32.ActiveCfg = ICL-Debug|Win32\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.ICL-Debug|Win32.Build.0 = ICL-Debug|Win32\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.ICL-Debug|x64.ActiveCfg = ICL-Debug|x64\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.ICL-Debug|x64.Build.0 = ICL-Debug|x64\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.ICL-Release|Win32.ActiveCfg = ICL-Release|Win32\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.ICL-Release|Win32.Build.0 = ICL-Release|Win32\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.ICL-Release|x64.ActiveCfg = ICL-Release|x64\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.ICL-Release|x64.Build.0 = ICL-Release|x64\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.Release|Win32.ActiveCfg = Release|Win32\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.Release|Win32.Build.0 = Release|Win32\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.Release|x64.ActiveCfg = Release|x64\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D}.Release|x64.Build.0 = Release|x64\r
+               {5407E9D2-67D9-4266-976E-7A90BDE2541D}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {5407E9D2-67D9-4266-976E-7A90BDE2541D}.Debug|Win32.Build.0 = Debug|Win32\r
+               {5407E9D2-67D9-4266-976E-7A90BDE2541D}.Debug|x64.ActiveCfg = Debug|x64\r
+               {5407E9D2-67D9-4266-976E-7A90BDE2541D}.Debug|x64.Build.0 = Debug|x64\r
+               {5407E9D2-67D9-4266-976E-7A90BDE2541D}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {5407E9D2-67D9-4266-976E-7A90BDE2541D}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {5407E9D2-67D9-4266-976E-7A90BDE2541D}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {5407E9D2-67D9-4266-976E-7A90BDE2541D}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {5407E9D2-67D9-4266-976E-7A90BDE2541D}.Release|Win32.ActiveCfg = Release|Win32\r
+               {5407E9D2-67D9-4266-976E-7A90BDE2541D}.Release|Win32.Build.0 = Release|Win32\r
+               {5407E9D2-67D9-4266-976E-7A90BDE2541D}.Release|x64.ActiveCfg = Release|x64\r
+               {5407E9D2-67D9-4266-976E-7A90BDE2541D}.Release|x64.Build.0 = Release|x64\r
+               {EA5D825A-83A4-4A36-83C1-3D048D21D55B}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {EA5D825A-83A4-4A36-83C1-3D048D21D55B}.Debug|Win32.Build.0 = Debug|Win32\r
+               {EA5D825A-83A4-4A36-83C1-3D048D21D55B}.Debug|x64.ActiveCfg = Debug|x64\r
+               {EA5D825A-83A4-4A36-83C1-3D048D21D55B}.Debug|x64.Build.0 = Debug|x64\r
+               {EA5D825A-83A4-4A36-83C1-3D048D21D55B}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {EA5D825A-83A4-4A36-83C1-3D048D21D55B}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {EA5D825A-83A4-4A36-83C1-3D048D21D55B}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {EA5D825A-83A4-4A36-83C1-3D048D21D55B}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {EA5D825A-83A4-4A36-83C1-3D048D21D55B}.Release|Win32.ActiveCfg = Release|Win32\r
+               {EA5D825A-83A4-4A36-83C1-3D048D21D55B}.Release|Win32.Build.0 = Release|Win32\r
+               {EA5D825A-83A4-4A36-83C1-3D048D21D55B}.Release|x64.ActiveCfg = Release|x64\r
+               {EA5D825A-83A4-4A36-83C1-3D048D21D55B}.Release|x64.Build.0 = Release|x64\r
+               {ED94B1D1-2442-43C2-A71C-A757122408A6}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {ED94B1D1-2442-43C2-A71C-A757122408A6}.Debug|Win32.Build.0 = Debug|Win32\r
+               {ED94B1D1-2442-43C2-A71C-A757122408A6}.Debug|x64.ActiveCfg = Debug|x64\r
+               {ED94B1D1-2442-43C2-A71C-A757122408A6}.Debug|x64.Build.0 = Debug|x64\r
+               {ED94B1D1-2442-43C2-A71C-A757122408A6}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {ED94B1D1-2442-43C2-A71C-A757122408A6}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {ED94B1D1-2442-43C2-A71C-A757122408A6}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {ED94B1D1-2442-43C2-A71C-A757122408A6}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {ED94B1D1-2442-43C2-A71C-A757122408A6}.Release|Win32.ActiveCfg = Release|Win32\r
+               {ED94B1D1-2442-43C2-A71C-A757122408A6}.Release|Win32.Build.0 = Release|Win32\r
+               {ED94B1D1-2442-43C2-A71C-A757122408A6}.Release|x64.ActiveCfg = Release|x64\r
+               {ED94B1D1-2442-43C2-A71C-A757122408A6}.Release|x64.Build.0 = Release|x64\r
+               {9EB8FAB6-78E8-48B6-9589-85985CE8D33D}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {9EB8FAB6-78E8-48B6-9589-85985CE8D33D}.Debug|Win32.Build.0 = Debug|Win32\r
+               {9EB8FAB6-78E8-48B6-9589-85985CE8D33D}.Debug|x64.ActiveCfg = Debug|x64\r
+               {9EB8FAB6-78E8-48B6-9589-85985CE8D33D}.Debug|x64.Build.0 = Debug|x64\r
+               {9EB8FAB6-78E8-48B6-9589-85985CE8D33D}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {9EB8FAB6-78E8-48B6-9589-85985CE8D33D}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {9EB8FAB6-78E8-48B6-9589-85985CE8D33D}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {9EB8FAB6-78E8-48B6-9589-85985CE8D33D}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {9EB8FAB6-78E8-48B6-9589-85985CE8D33D}.Release|Win32.ActiveCfg = Release|Win32\r
+               {9EB8FAB6-78E8-48B6-9589-85985CE8D33D}.Release|Win32.Build.0 = Release|Win32\r
+               {9EB8FAB6-78E8-48B6-9589-85985CE8D33D}.Release|x64.ActiveCfg = Release|x64\r
+               {9EB8FAB6-78E8-48B6-9589-85985CE8D33D}.Release|x64.Build.0 = Release|x64\r
+               {83FC591C-2CA2-4631-AD13-218FF4C27692}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {83FC591C-2CA2-4631-AD13-218FF4C27692}.Debug|Win32.Build.0 = Debug|Win32\r
+               {83FC591C-2CA2-4631-AD13-218FF4C27692}.Debug|x64.ActiveCfg = Debug|x64\r
+               {83FC591C-2CA2-4631-AD13-218FF4C27692}.Debug|x64.Build.0 = Debug|x64\r
+               {83FC591C-2CA2-4631-AD13-218FF4C27692}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {83FC591C-2CA2-4631-AD13-218FF4C27692}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {83FC591C-2CA2-4631-AD13-218FF4C27692}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {83FC591C-2CA2-4631-AD13-218FF4C27692}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {83FC591C-2CA2-4631-AD13-218FF4C27692}.Release|Win32.ActiveCfg = Release|Win32\r
+               {83FC591C-2CA2-4631-AD13-218FF4C27692}.Release|Win32.Build.0 = Release|Win32\r
+               {83FC591C-2CA2-4631-AD13-218FF4C27692}.Release|x64.ActiveCfg = Release|x64\r
+               {83FC591C-2CA2-4631-AD13-218FF4C27692}.Release|x64.Build.0 = Release|x64\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}.Debug|Win32.Build.0 = Debug|Win32\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}.Debug|x64.ActiveCfg = Debug|x64\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}.Debug|x64.Build.0 = Debug|x64\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}.Release|Win32.ActiveCfg = Release|Win32\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}.Release|Win32.Build.0 = Release|Win32\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}.Release|x64.ActiveCfg = Release|x64\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B}.Release|x64.Build.0 = Release|x64\r
+               {5E1C3684-9463-4A98-BAFC-9BD51F179BB6}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {5E1C3684-9463-4A98-BAFC-9BD51F179BB6}.Debug|Win32.Build.0 = Debug|Win32\r
+               {5E1C3684-9463-4A98-BAFC-9BD51F179BB6}.Debug|x64.ActiveCfg = Debug|x64\r
+               {5E1C3684-9463-4A98-BAFC-9BD51F179BB6}.Debug|x64.Build.0 = Debug|x64\r
+               {5E1C3684-9463-4A98-BAFC-9BD51F179BB6}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {5E1C3684-9463-4A98-BAFC-9BD51F179BB6}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {5E1C3684-9463-4A98-BAFC-9BD51F179BB6}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {5E1C3684-9463-4A98-BAFC-9BD51F179BB6}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {5E1C3684-9463-4A98-BAFC-9BD51F179BB6}.Release|Win32.ActiveCfg = Release|Win32\r
+               {5E1C3684-9463-4A98-BAFC-9BD51F179BB6}.Release|Win32.Build.0 = Release|Win32\r
+               {5E1C3684-9463-4A98-BAFC-9BD51F179BB6}.Release|x64.ActiveCfg = Release|x64\r
+               {5E1C3684-9463-4A98-BAFC-9BD51F179BB6}.Release|x64.Build.0 = Release|x64\r
+               {50B2EC4B-A118-4E7B-ABC7-2EA8B685A58C}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {50B2EC4B-A118-4E7B-ABC7-2EA8B685A58C}.Debug|Win32.Build.0 = Debug|Win32\r
+               {50B2EC4B-A118-4E7B-ABC7-2EA8B685A58C}.Debug|x64.ActiveCfg = Debug|x64\r
+               {50B2EC4B-A118-4E7B-ABC7-2EA8B685A58C}.Debug|x64.Build.0 = Debug|x64\r
+               {50B2EC4B-A118-4E7B-ABC7-2EA8B685A58C}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {50B2EC4B-A118-4E7B-ABC7-2EA8B685A58C}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {50B2EC4B-A118-4E7B-ABC7-2EA8B685A58C}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {50B2EC4B-A118-4E7B-ABC7-2EA8B685A58C}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {50B2EC4B-A118-4E7B-ABC7-2EA8B685A58C}.Release|Win32.ActiveCfg = Release|Win32\r
+               {50B2EC4B-A118-4E7B-ABC7-2EA8B685A58C}.Release|Win32.Build.0 = Release|Win32\r
+               {50B2EC4B-A118-4E7B-ABC7-2EA8B685A58C}.Release|x64.ActiveCfg = Release|x64\r
+               {50B2EC4B-A118-4E7B-ABC7-2EA8B685A58C}.Release|x64.Build.0 = Release|x64\r
+               {51AC349E-B365-4FCF-8778-17A1534E4584}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {51AC349E-B365-4FCF-8778-17A1534E4584}.Debug|Win32.Build.0 = Debug|Win32\r
+               {51AC349E-B365-4FCF-8778-17A1534E4584}.Debug|x64.ActiveCfg = Debug|x64\r
+               {51AC349E-B365-4FCF-8778-17A1534E4584}.Debug|x64.Build.0 = Debug|x64\r
+               {51AC349E-B365-4FCF-8778-17A1534E4584}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {51AC349E-B365-4FCF-8778-17A1534E4584}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {51AC349E-B365-4FCF-8778-17A1534E4584}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {51AC349E-B365-4FCF-8778-17A1534E4584}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {51AC349E-B365-4FCF-8778-17A1534E4584}.Release|Win32.ActiveCfg = Release|Win32\r
+               {51AC349E-B365-4FCF-8778-17A1534E4584}.Release|Win32.Build.0 = Release|Win32\r
+               {51AC349E-B365-4FCF-8778-17A1534E4584}.Release|x64.ActiveCfg = Release|x64\r
+               {51AC349E-B365-4FCF-8778-17A1534E4584}.Release|x64.Build.0 = Release|x64\r
+               {A589D3F1-A749-4268-ADEC-D0CE13D1E359}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {A589D3F1-A749-4268-ADEC-D0CE13D1E359}.Debug|Win32.Build.0 = Debug|Win32\r
+               {A589D3F1-A749-4268-ADEC-D0CE13D1E359}.Debug|x64.ActiveCfg = Debug|x64\r
+               {A589D3F1-A749-4268-ADEC-D0CE13D1E359}.Debug|x64.Build.0 = Debug|x64\r
+               {A589D3F1-A749-4268-ADEC-D0CE13D1E359}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {A589D3F1-A749-4268-ADEC-D0CE13D1E359}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {A589D3F1-A749-4268-ADEC-D0CE13D1E359}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {A589D3F1-A749-4268-ADEC-D0CE13D1E359}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {A589D3F1-A749-4268-ADEC-D0CE13D1E359}.Release|Win32.ActiveCfg = Release|Win32\r
+               {A589D3F1-A749-4268-ADEC-D0CE13D1E359}.Release|Win32.Build.0 = Release|Win32\r
+               {A589D3F1-A749-4268-ADEC-D0CE13D1E359}.Release|x64.ActiveCfg = Release|x64\r
+               {A589D3F1-A749-4268-ADEC-D0CE13D1E359}.Release|x64.Build.0 = Release|x64\r
+               {EC1EF263-7E34-4867-9ED9-77AA7963CD4A}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {EC1EF263-7E34-4867-9ED9-77AA7963CD4A}.Debug|Win32.Build.0 = Debug|Win32\r
+               {EC1EF263-7E34-4867-9ED9-77AA7963CD4A}.Debug|x64.ActiveCfg = Debug|x64\r
+               {EC1EF263-7E34-4867-9ED9-77AA7963CD4A}.Debug|x64.Build.0 = Debug|x64\r
+               {EC1EF263-7E34-4867-9ED9-77AA7963CD4A}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {EC1EF263-7E34-4867-9ED9-77AA7963CD4A}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {EC1EF263-7E34-4867-9ED9-77AA7963CD4A}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {EC1EF263-7E34-4867-9ED9-77AA7963CD4A}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {EC1EF263-7E34-4867-9ED9-77AA7963CD4A}.Release|Win32.ActiveCfg = Release|Win32\r
+               {EC1EF263-7E34-4867-9ED9-77AA7963CD4A}.Release|Win32.Build.0 = Release|Win32\r
+               {EC1EF263-7E34-4867-9ED9-77AA7963CD4A}.Release|x64.ActiveCfg = Release|x64\r
+               {EC1EF263-7E34-4867-9ED9-77AA7963CD4A}.Release|x64.Build.0 = Release|x64\r
+               {648021D3-6E18-4B94-88B8-F6A59609E210}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {648021D3-6E18-4B94-88B8-F6A59609E210}.Debug|Win32.Build.0 = Debug|Win32\r
+               {648021D3-6E18-4B94-88B8-F6A59609E210}.Debug|x64.ActiveCfg = Debug|x64\r
+               {648021D3-6E18-4B94-88B8-F6A59609E210}.Debug|x64.Build.0 = Debug|x64\r
+               {648021D3-6E18-4B94-88B8-F6A59609E210}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {648021D3-6E18-4B94-88B8-F6A59609E210}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {648021D3-6E18-4B94-88B8-F6A59609E210}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {648021D3-6E18-4B94-88B8-F6A59609E210}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {648021D3-6E18-4B94-88B8-F6A59609E210}.Release|Win32.ActiveCfg = Release|Win32\r
+               {648021D3-6E18-4B94-88B8-F6A59609E210}.Release|Win32.Build.0 = Release|Win32\r
+               {648021D3-6E18-4B94-88B8-F6A59609E210}.Release|x64.ActiveCfg = Release|x64\r
+               {648021D3-6E18-4B94-88B8-F6A59609E210}.Release|x64.Build.0 = Release|x64\r
+               {42B7E892-DDDA-4D00-9AB7-378E0E7E9433}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {42B7E892-DDDA-4D00-9AB7-378E0E7E9433}.Debug|Win32.Build.0 = Debug|Win32\r
+               {42B7E892-DDDA-4D00-9AB7-378E0E7E9433}.Debug|x64.ActiveCfg = Debug|x64\r
+               {42B7E892-DDDA-4D00-9AB7-378E0E7E9433}.Debug|x64.Build.0 = Debug|x64\r
+               {42B7E892-DDDA-4D00-9AB7-378E0E7E9433}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {42B7E892-DDDA-4D00-9AB7-378E0E7E9433}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {42B7E892-DDDA-4D00-9AB7-378E0E7E9433}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {42B7E892-DDDA-4D00-9AB7-378E0E7E9433}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {42B7E892-DDDA-4D00-9AB7-378E0E7E9433}.Release|Win32.ActiveCfg = Release|Win32\r
+               {42B7E892-DDDA-4D00-9AB7-378E0E7E9433}.Release|Win32.Build.0 = Release|Win32\r
+               {42B7E892-DDDA-4D00-9AB7-378E0E7E9433}.Release|x64.ActiveCfg = Release|x64\r
+               {42B7E892-DDDA-4D00-9AB7-378E0E7E9433}.Release|x64.Build.0 = Release|x64\r
+               {00FD5CB8-E1A4-40CA-B613-30A06A75622B}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {00FD5CB8-E1A4-40CA-B613-30A06A75622B}.Debug|Win32.Build.0 = Debug|Win32\r
+               {00FD5CB8-E1A4-40CA-B613-30A06A75622B}.Debug|x64.ActiveCfg = Debug|x64\r
+               {00FD5CB8-E1A4-40CA-B613-30A06A75622B}.Debug|x64.Build.0 = Debug|x64\r
+               {00FD5CB8-E1A4-40CA-B613-30A06A75622B}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {00FD5CB8-E1A4-40CA-B613-30A06A75622B}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {00FD5CB8-E1A4-40CA-B613-30A06A75622B}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {00FD5CB8-E1A4-40CA-B613-30A06A75622B}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {00FD5CB8-E1A4-40CA-B613-30A06A75622B}.Release|Win32.ActiveCfg = Release|Win32\r
+               {00FD5CB8-E1A4-40CA-B613-30A06A75622B}.Release|Win32.Build.0 = Release|Win32\r
+               {00FD5CB8-E1A4-40CA-B613-30A06A75622B}.Release|x64.ActiveCfg = Release|x64\r
+               {00FD5CB8-E1A4-40CA-B613-30A06A75622B}.Release|x64.Build.0 = Release|x64\r
+               {2ABD6A2E-BEA7-4C8C-982B-A609F83D2DCB}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {2ABD6A2E-BEA7-4C8C-982B-A609F83D2DCB}.Debug|Win32.Build.0 = Debug|Win32\r
+               {2ABD6A2E-BEA7-4C8C-982B-A609F83D2DCB}.Debug|x64.ActiveCfg = Debug|x64\r
+               {2ABD6A2E-BEA7-4C8C-982B-A609F83D2DCB}.Debug|x64.Build.0 = Debug|x64\r
+               {2ABD6A2E-BEA7-4C8C-982B-A609F83D2DCB}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {2ABD6A2E-BEA7-4C8C-982B-A609F83D2DCB}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {2ABD6A2E-BEA7-4C8C-982B-A609F83D2DCB}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {2ABD6A2E-BEA7-4C8C-982B-A609F83D2DCB}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {2ABD6A2E-BEA7-4C8C-982B-A609F83D2DCB}.Release|Win32.ActiveCfg = Release|Win32\r
+               {2ABD6A2E-BEA7-4C8C-982B-A609F83D2DCB}.Release|Win32.Build.0 = Release|Win32\r
+               {2ABD6A2E-BEA7-4C8C-982B-A609F83D2DCB}.Release|x64.ActiveCfg = Release|x64\r
+               {2ABD6A2E-BEA7-4C8C-982B-A609F83D2DCB}.Release|x64.Build.0 = Release|x64\r
+               {FA22E700-1AE5-4D7B-B9F1-0A919FF7FF06}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {FA22E700-1AE5-4D7B-B9F1-0A919FF7FF06}.Debug|Win32.Build.0 = Debug|Win32\r
+               {FA22E700-1AE5-4D7B-B9F1-0A919FF7FF06}.Debug|x64.ActiveCfg = Debug|x64\r
+               {FA22E700-1AE5-4D7B-B9F1-0A919FF7FF06}.Debug|x64.Build.0 = Debug|x64\r
+               {FA22E700-1AE5-4D7B-B9F1-0A919FF7FF06}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {FA22E700-1AE5-4D7B-B9F1-0A919FF7FF06}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {FA22E700-1AE5-4D7B-B9F1-0A919FF7FF06}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {FA22E700-1AE5-4D7B-B9F1-0A919FF7FF06}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {FA22E700-1AE5-4D7B-B9F1-0A919FF7FF06}.Release|Win32.ActiveCfg = Release|Win32\r
+               {FA22E700-1AE5-4D7B-B9F1-0A919FF7FF06}.Release|Win32.Build.0 = Release|Win32\r
+               {FA22E700-1AE5-4D7B-B9F1-0A919FF7FF06}.Release|x64.ActiveCfg = Release|x64\r
+               {FA22E700-1AE5-4D7B-B9F1-0A919FF7FF06}.Release|x64.Build.0 = Release|x64\r
+               {8202D428-1E08-4744-B372-6B2E83A9928E}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {8202D428-1E08-4744-B372-6B2E83A9928E}.Debug|Win32.Build.0 = Debug|Win32\r
+               {8202D428-1E08-4744-B372-6B2E83A9928E}.Debug|x64.ActiveCfg = Debug|x64\r
+               {8202D428-1E08-4744-B372-6B2E83A9928E}.Debug|x64.Build.0 = Debug|x64\r
+               {8202D428-1E08-4744-B372-6B2E83A9928E}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {8202D428-1E08-4744-B372-6B2E83A9928E}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {8202D428-1E08-4744-B372-6B2E83A9928E}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {8202D428-1E08-4744-B372-6B2E83A9928E}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {8202D428-1E08-4744-B372-6B2E83A9928E}.Release|Win32.ActiveCfg = Release|Win32\r
+               {8202D428-1E08-4744-B372-6B2E83A9928E}.Release|Win32.Build.0 = Release|Win32\r
+               {8202D428-1E08-4744-B372-6B2E83A9928E}.Release|x64.ActiveCfg = Release|x64\r
+               {8202D428-1E08-4744-B372-6B2E83A9928E}.Release|x64.Build.0 = Release|x64\r
+               {133D1AEE-3BAF-42D1-B1AB-93D5239F4926}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {133D1AEE-3BAF-42D1-B1AB-93D5239F4926}.Debug|Win32.Build.0 = Debug|Win32\r
+               {133D1AEE-3BAF-42D1-B1AB-93D5239F4926}.Debug|x64.ActiveCfg = Debug|x64\r
+               {133D1AEE-3BAF-42D1-B1AB-93D5239F4926}.Debug|x64.Build.0 = Debug|x64\r
+               {133D1AEE-3BAF-42D1-B1AB-93D5239F4926}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {133D1AEE-3BAF-42D1-B1AB-93D5239F4926}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {133D1AEE-3BAF-42D1-B1AB-93D5239F4926}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {133D1AEE-3BAF-42D1-B1AB-93D5239F4926}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {133D1AEE-3BAF-42D1-B1AB-93D5239F4926}.Release|Win32.ActiveCfg = Release|Win32\r
+               {133D1AEE-3BAF-42D1-B1AB-93D5239F4926}.Release|Win32.Build.0 = Release|Win32\r
+               {133D1AEE-3BAF-42D1-B1AB-93D5239F4926}.Release|x64.ActiveCfg = Release|x64\r
+               {133D1AEE-3BAF-42D1-B1AB-93D5239F4926}.Release|x64.Build.0 = Release|x64\r
+               {EE7A269E-83E4-402B-9C79-85058826E81E}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {EE7A269E-83E4-402B-9C79-85058826E81E}.Debug|Win32.Build.0 = Debug|Win32\r
+               {EE7A269E-83E4-402B-9C79-85058826E81E}.Debug|x64.ActiveCfg = Debug|x64\r
+               {EE7A269E-83E4-402B-9C79-85058826E81E}.Debug|x64.Build.0 = Debug|x64\r
+               {EE7A269E-83E4-402B-9C79-85058826E81E}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {EE7A269E-83E4-402B-9C79-85058826E81E}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {EE7A269E-83E4-402B-9C79-85058826E81E}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {EE7A269E-83E4-402B-9C79-85058826E81E}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {EE7A269E-83E4-402B-9C79-85058826E81E}.Release|Win32.ActiveCfg = Release|Win32\r
+               {EE7A269E-83E4-402B-9C79-85058826E81E}.Release|Win32.Build.0 = Release|Win32\r
+               {EE7A269E-83E4-402B-9C79-85058826E81E}.Release|x64.ActiveCfg = Release|x64\r
+               {EE7A269E-83E4-402B-9C79-85058826E81E}.Release|x64.Build.0 = Release|x64\r
+               {937D82C6-92AB-4C58-ACE8-F88E7063BFA9}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {937D82C6-92AB-4C58-ACE8-F88E7063BFA9}.Debug|Win32.Build.0 = Debug|Win32\r
+               {937D82C6-92AB-4C58-ACE8-F88E7063BFA9}.Debug|x64.ActiveCfg = Debug|x64\r
+               {937D82C6-92AB-4C58-ACE8-F88E7063BFA9}.Debug|x64.Build.0 = Debug|x64\r
+               {937D82C6-92AB-4C58-ACE8-F88E7063BFA9}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {937D82C6-92AB-4C58-ACE8-F88E7063BFA9}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {937D82C6-92AB-4C58-ACE8-F88E7063BFA9}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {937D82C6-92AB-4C58-ACE8-F88E7063BFA9}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {937D82C6-92AB-4C58-ACE8-F88E7063BFA9}.Release|Win32.ActiveCfg = Release|Win32\r
+               {937D82C6-92AB-4C58-ACE8-F88E7063BFA9}.Release|Win32.Build.0 = Release|Win32\r
+               {937D82C6-92AB-4C58-ACE8-F88E7063BFA9}.Release|x64.ActiveCfg = Release|x64\r
+               {937D82C6-92AB-4C58-ACE8-F88E7063BFA9}.Release|x64.Build.0 = Release|x64\r
+               {DD432BE7-0CA8-47C6-B861-943A036C18EF}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {DD432BE7-0CA8-47C6-B861-943A036C18EF}.Debug|Win32.Build.0 = Debug|Win32\r
+               {DD432BE7-0CA8-47C6-B861-943A036C18EF}.Debug|x64.ActiveCfg = Debug|x64\r
+               {DD432BE7-0CA8-47C6-B861-943A036C18EF}.Debug|x64.Build.0 = Debug|x64\r
+               {DD432BE7-0CA8-47C6-B861-943A036C18EF}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {DD432BE7-0CA8-47C6-B861-943A036C18EF}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {DD432BE7-0CA8-47C6-B861-943A036C18EF}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {DD432BE7-0CA8-47C6-B861-943A036C18EF}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {DD432BE7-0CA8-47C6-B861-943A036C18EF}.Release|Win32.ActiveCfg = Release|Win32\r
+               {DD432BE7-0CA8-47C6-B861-943A036C18EF}.Release|Win32.Build.0 = Release|Win32\r
+               {DD432BE7-0CA8-47C6-B861-943A036C18EF}.Release|x64.ActiveCfg = Release|x64\r
+               {DD432BE7-0CA8-47C6-B861-943A036C18EF}.Release|x64.Build.0 = Release|x64\r
+               {3F36B97B-8028-4335-ADDD-20B6B81F87AF}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {3F36B97B-8028-4335-ADDD-20B6B81F87AF}.Debug|Win32.Build.0 = Debug|Win32\r
+               {3F36B97B-8028-4335-ADDD-20B6B81F87AF}.Debug|x64.ActiveCfg = Debug|x64\r
+               {3F36B97B-8028-4335-ADDD-20B6B81F87AF}.Debug|x64.Build.0 = Debug|x64\r
+               {3F36B97B-8028-4335-ADDD-20B6B81F87AF}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {3F36B97B-8028-4335-ADDD-20B6B81F87AF}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {3F36B97B-8028-4335-ADDD-20B6B81F87AF}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {3F36B97B-8028-4335-ADDD-20B6B81F87AF}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {3F36B97B-8028-4335-ADDD-20B6B81F87AF}.Release|Win32.ActiveCfg = Release|Win32\r
+               {3F36B97B-8028-4335-ADDD-20B6B81F87AF}.Release|Win32.Build.0 = Release|Win32\r
+               {3F36B97B-8028-4335-ADDD-20B6B81F87AF}.Release|x64.ActiveCfg = Release|x64\r
+               {3F36B97B-8028-4335-ADDD-20B6B81F87AF}.Release|x64.Build.0 = Release|x64\r
+               {C127CD80-E8A7-47E4-B7EC-1709D2188982}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {C127CD80-E8A7-47E4-B7EC-1709D2188982}.Debug|Win32.Build.0 = Debug|Win32\r
+               {C127CD80-E8A7-47E4-B7EC-1709D2188982}.Debug|x64.ActiveCfg = Debug|x64\r
+               {C127CD80-E8A7-47E4-B7EC-1709D2188982}.Debug|x64.Build.0 = Debug|x64\r
+               {C127CD80-E8A7-47E4-B7EC-1709D2188982}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {C127CD80-E8A7-47E4-B7EC-1709D2188982}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {C127CD80-E8A7-47E4-B7EC-1709D2188982}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {C127CD80-E8A7-47E4-B7EC-1709D2188982}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {C127CD80-E8A7-47E4-B7EC-1709D2188982}.Release|Win32.ActiveCfg = Release|Win32\r
+               {C127CD80-E8A7-47E4-B7EC-1709D2188982}.Release|Win32.Build.0 = Release|Win32\r
+               {C127CD80-E8A7-47E4-B7EC-1709D2188982}.Release|x64.ActiveCfg = Release|x64\r
+               {C127CD80-E8A7-47E4-B7EC-1709D2188982}.Release|x64.Build.0 = Release|x64\r
+               {34FA4110-F17B-4AD0-A4C9-C91B92AD06E4}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {34FA4110-F17B-4AD0-A4C9-C91B92AD06E4}.Debug|Win32.Build.0 = Debug|Win32\r
+               {34FA4110-F17B-4AD0-A4C9-C91B92AD06E4}.Debug|x64.ActiveCfg = Debug|x64\r
+               {34FA4110-F17B-4AD0-A4C9-C91B92AD06E4}.Debug|x64.Build.0 = Debug|x64\r
+               {34FA4110-F17B-4AD0-A4C9-C91B92AD06E4}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {34FA4110-F17B-4AD0-A4C9-C91B92AD06E4}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {34FA4110-F17B-4AD0-A4C9-C91B92AD06E4}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {34FA4110-F17B-4AD0-A4C9-C91B92AD06E4}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {34FA4110-F17B-4AD0-A4C9-C91B92AD06E4}.Release|Win32.ActiveCfg = Release|Win32\r
+               {34FA4110-F17B-4AD0-A4C9-C91B92AD06E4}.Release|Win32.Build.0 = Release|Win32\r
+               {34FA4110-F17B-4AD0-A4C9-C91B92AD06E4}.Release|x64.ActiveCfg = Release|x64\r
+               {34FA4110-F17B-4AD0-A4C9-C91B92AD06E4}.Release|x64.Build.0 = Release|x64\r
+               {46649F79-2919-4B4C-B243-08C724901F58}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {46649F79-2919-4B4C-B243-08C724901F58}.Debug|Win32.Build.0 = Debug|Win32\r
+               {46649F79-2919-4B4C-B243-08C724901F58}.Debug|x64.ActiveCfg = Debug|x64\r
+               {46649F79-2919-4B4C-B243-08C724901F58}.Debug|x64.Build.0 = Debug|x64\r
+               {46649F79-2919-4B4C-B243-08C724901F58}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {46649F79-2919-4B4C-B243-08C724901F58}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {46649F79-2919-4B4C-B243-08C724901F58}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {46649F79-2919-4B4C-B243-08C724901F58}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {46649F79-2919-4B4C-B243-08C724901F58}.Release|Win32.ActiveCfg = Release|Win32\r
+               {46649F79-2919-4B4C-B243-08C724901F58}.Release|Win32.Build.0 = Release|Win32\r
+               {46649F79-2919-4B4C-B243-08C724901F58}.Release|x64.ActiveCfg = Release|x64\r
+               {46649F79-2919-4B4C-B243-08C724901F58}.Release|x64.Build.0 = Release|x64\r
+               {2D0E651D-058D-4D69-9A44-12149E6CA5BE}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {2D0E651D-058D-4D69-9A44-12149E6CA5BE}.Debug|Win32.Build.0 = Debug|Win32\r
+               {2D0E651D-058D-4D69-9A44-12149E6CA5BE}.Debug|x64.ActiveCfg = Debug|x64\r
+               {2D0E651D-058D-4D69-9A44-12149E6CA5BE}.Debug|x64.Build.0 = Debug|x64\r
+               {2D0E651D-058D-4D69-9A44-12149E6CA5BE}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {2D0E651D-058D-4D69-9A44-12149E6CA5BE}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {2D0E651D-058D-4D69-9A44-12149E6CA5BE}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {2D0E651D-058D-4D69-9A44-12149E6CA5BE}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {2D0E651D-058D-4D69-9A44-12149E6CA5BE}.Release|Win32.ActiveCfg = Release|Win32\r
+               {2D0E651D-058D-4D69-9A44-12149E6CA5BE}.Release|Win32.Build.0 = Release|Win32\r
+               {2D0E651D-058D-4D69-9A44-12149E6CA5BE}.Release|x64.ActiveCfg = Release|x64\r
+               {2D0E651D-058D-4D69-9A44-12149E6CA5BE}.Release|x64.Build.0 = Release|x64\r
+               {50387CA5-F5B2-4C40-ACFD-FC3C9EE2CD6B}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {50387CA5-F5B2-4C40-ACFD-FC3C9EE2CD6B}.Debug|Win32.Build.0 = Debug|Win32\r
+               {50387CA5-F5B2-4C40-ACFD-FC3C9EE2CD6B}.Debug|x64.ActiveCfg = Debug|x64\r
+               {50387CA5-F5B2-4C40-ACFD-FC3C9EE2CD6B}.Debug|x64.Build.0 = Debug|x64\r
+               {50387CA5-F5B2-4C40-ACFD-FC3C9EE2CD6B}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {50387CA5-F5B2-4C40-ACFD-FC3C9EE2CD6B}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {50387CA5-F5B2-4C40-ACFD-FC3C9EE2CD6B}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {50387CA5-F5B2-4C40-ACFD-FC3C9EE2CD6B}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {50387CA5-F5B2-4C40-ACFD-FC3C9EE2CD6B}.Release|Win32.ActiveCfg = Release|Win32\r
+               {50387CA5-F5B2-4C40-ACFD-FC3C9EE2CD6B}.Release|Win32.Build.0 = Release|Win32\r
+               {50387CA5-F5B2-4C40-ACFD-FC3C9EE2CD6B}.Release|x64.ActiveCfg = Release|x64\r
+               {50387CA5-F5B2-4C40-ACFD-FC3C9EE2CD6B}.Release|x64.Build.0 = Release|x64\r
+               {1BB746AC-7856-4E59-9430-51177621DC35}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {1BB746AC-7856-4E59-9430-51177621DC35}.Debug|Win32.Build.0 = Debug|Win32\r
+               {1BB746AC-7856-4E59-9430-51177621DC35}.Debug|x64.ActiveCfg = Debug|x64\r
+               {1BB746AC-7856-4E59-9430-51177621DC35}.Debug|x64.Build.0 = Debug|x64\r
+               {1BB746AC-7856-4E59-9430-51177621DC35}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {1BB746AC-7856-4E59-9430-51177621DC35}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {1BB746AC-7856-4E59-9430-51177621DC35}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {1BB746AC-7856-4E59-9430-51177621DC35}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {1BB746AC-7856-4E59-9430-51177621DC35}.Release|Win32.ActiveCfg = Release|Win32\r
+               {1BB746AC-7856-4E59-9430-51177621DC35}.Release|Win32.Build.0 = Release|Win32\r
+               {1BB746AC-7856-4E59-9430-51177621DC35}.Release|x64.ActiveCfg = Release|x64\r
+               {1BB746AC-7856-4E59-9430-51177621DC35}.Release|x64.Build.0 = Release|x64\r
+               {24DF3B87-387E-4EFC-BDE0-8DAD279FE19A}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {24DF3B87-387E-4EFC-BDE0-8DAD279FE19A}.Debug|Win32.Build.0 = Debug|Win32\r
+               {24DF3B87-387E-4EFC-BDE0-8DAD279FE19A}.Debug|x64.ActiveCfg = Debug|x64\r
+               {24DF3B87-387E-4EFC-BDE0-8DAD279FE19A}.Debug|x64.Build.0 = Debug|x64\r
+               {24DF3B87-387E-4EFC-BDE0-8DAD279FE19A}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
+               {24DF3B87-387E-4EFC-BDE0-8DAD279FE19A}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
+               {24DF3B87-387E-4EFC-BDE0-8DAD279FE19A}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
+               {24DF3B87-387E-4EFC-BDE0-8DAD279FE19A}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
+               {24DF3B87-387E-4EFC-BDE0-8DAD279FE19A}.Release|Win32.ActiveCfg = Release|Win32\r
+               {24DF3B87-387E-4EFC-BDE0-8DAD279FE19A}.Release|Win32.Build.0 = Release|Win32\r
+               {24DF3B87-387E-4EFC-BDE0-8DAD279FE19A}.Release|x64.ActiveCfg = Release|x64\r
+               {24DF3B87-387E-4EFC-BDE0-8DAD279FE19A}.Release|x64.Build.0 = Release|x64\r
        EndGlobalSection\r
        GlobalSection(SolutionProperties) = preSolution\r
                HideSolutionNode = FALSE\r
        EndGlobalSection\r
        GlobalSection(NestedProjects) = preSolution\r
-               {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {B30CA283-1796-4763-92C3-2E4848D443F7}\r
-               {77350FDC-9E51-438B-9A8F-D2FEA11D46B2} = {B30CA283-1796-4763-92C3-2E4848D443F7}\r
-               {6C15AF8A-4A99-49F9-BCF0-1BF36771099A} = {B30CA283-1796-4763-92C3-2E4848D443F7}\r
-               {E29DE1F7-AE8D-4AE6-98B1-147E5103D974} = {B30CA283-1796-4763-92C3-2E4848D443F7}\r
-               {CD0BC7FC-9BFF-40B0-8E66-99D244A8A026} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
-               {282E9A9A-386A-40FB-A483-994BACE24830} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
-               {C5E76975-B87B-4B9E-8596-B01DDA683FCA} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
-               {EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
-               {6BB7A27F-FC59-4267-B6FA-D034176D1459} = {B30CA283-1796-4763-92C3-2E4848D443F7}\r
-               {A64449B7-90FB-4E2B-A686-9EFC0E298644} = {B30CA283-1796-4763-92C3-2E4848D443F7}\r
-               {3C598F96-FB84-4D42-9B43-F697F53B0221} = {6BB7A27F-FC59-4267-B6FA-D034176D1459}\r
-               {BA2A9239-0299-4069-BB0E-16DACE87ADE0} = {6BB7A27F-FC59-4267-B6FA-D034176D1459}\r
-               {CA25BDBF-B354-4597-B6D2-220ABBB0D2F4} = {6BB7A27F-FC59-4267-B6FA-D034176D1459}\r
-               {AF7B2253-2E6D-4992-94D9-4B3699C54929} = {A64449B7-90FB-4E2B-A686-9EFC0E298644}\r
-               {BA23811C-D4CB-4836-B2F3-6791BD6FFCD1} = {A64449B7-90FB-4E2B-A686-9EFC0E298644}\r
-               {90192F7D-5850-41DD-AE89-62D26B387162} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
-               {33664E63-8D24-4FF4-A744-9782EB711509} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
-               {E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
-               {E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
-               {A38E5597-6916-4480-A343-C9846EF544E4} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
-               {6F834EAD-7B94-4979-A0F1-A662E3D30145} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
-               {20B6C380-E96A-4CFF-BC17-D88AAE581919} = {B30CA283-1796-4763-92C3-2E4848D443F7}\r
-               {7521DD92-56FF-4ECA-93E5-CCE50862354B} = {6BB7A27F-FC59-4267-B6FA-D034176D1459}\r
-               {CA6F0834-0628-4CD7-8800-AEABCD636360} = {6BB7A27F-FC59-4267-B6FA-D034176D1459}\r
-               {DE256E91-EE96-412E-82EE-DD7BD1A1130D} = {A64449B7-90FB-4E2B-A686-9EFC0E298644}\r
+               {5407E9D2-67D9-4266-976E-7A90BDE2541D} = {810490B7-31E5-49AE-8455-CAF99A9658B6}\r
+               {EA5D825A-83A4-4A36-83C1-3D048D21D55B} = {810490B7-31E5-49AE-8455-CAF99A9658B6}\r
+               {ED94B1D1-2442-43C2-A71C-A757122408A6} = {810490B7-31E5-49AE-8455-CAF99A9658B6}\r
+               {9EB8FAB6-78E8-48B6-9589-85985CE8D33D} = {810490B7-31E5-49AE-8455-CAF99A9658B6}\r
+               {83FC591C-2CA2-4631-AD13-218FF4C27692} = {810490B7-31E5-49AE-8455-CAF99A9658B6}\r
+               {A34CED07-A442-4FA1-81C4-F8B9CD3C832B} = {10E1FAF2-904D-405E-8AB5-6878A1B03346}\r
+               {5E1C3684-9463-4A98-BAFC-9BD51F179BB6} = {10E1FAF2-904D-405E-8AB5-6878A1B03346}\r
+               {50B2EC4B-A118-4E7B-ABC7-2EA8B685A58C} = {10E1FAF2-904D-405E-8AB5-6878A1B03346}\r
+               {51AC349E-B365-4FCF-8778-17A1534E4584} = {10E1FAF2-904D-405E-8AB5-6878A1B03346}\r
+               {A589D3F1-A749-4268-ADEC-D0CE13D1E359} = {810490B7-31E5-49AE-8455-CAF99A9658B6}\r
+               {EC1EF263-7E34-4867-9ED9-77AA7963CD4A} = {810490B7-31E5-49AE-8455-CAF99A9658B6}\r
+               {648021D3-6E18-4B94-88B8-F6A59609E210} = {810490B7-31E5-49AE-8455-CAF99A9658B6}\r
+               {42B7E892-DDDA-4D00-9AB7-378E0E7E9433} = {810490B7-31E5-49AE-8455-CAF99A9658B6}\r
+               {00FD5CB8-E1A4-40CA-B613-30A06A75622B} = {810490B7-31E5-49AE-8455-CAF99A9658B6}\r
+               {2ABD6A2E-BEA7-4C8C-982B-A609F83D2DCB} = {810490B7-31E5-49AE-8455-CAF99A9658B6}\r
+               {FA22E700-1AE5-4D7B-B9F1-0A919FF7FF06} = {810490B7-31E5-49AE-8455-CAF99A9658B6}\r
+               {0D83E8C7-97D1-4BA1-928A-6846E7089652} = {10E1FAF2-904D-405E-8AB5-6878A1B03346}\r
+               {8202D428-1E08-4744-B372-6B2E83A9928E} = {0D83E8C7-97D1-4BA1-928A-6846E7089652}\r
+               {D968B0F5-52BD-40C1-B230-28104567CE97} = {0D83E8C7-97D1-4BA1-928A-6846E7089652}\r
+               {133D1AEE-3BAF-42D1-B1AB-93D5239F4926} = {0D83E8C7-97D1-4BA1-928A-6846E7089652}\r
+               {EE7A269E-83E4-402B-9C79-85058826E81E} = {0D83E8C7-97D1-4BA1-928A-6846E7089652}\r
+               {937D82C6-92AB-4C58-ACE8-F88E7063BFA9} = {0D83E8C7-97D1-4BA1-928A-6846E7089652}\r
+               {7D3EE35B-185D-40B5-88C2-7F9933426978} = {10E1FAF2-904D-405E-8AB5-6878A1B03346}\r
+               {2C41747C-6CC6-4AE8-9EB8-EB8B954BBDB4} = {7D3EE35B-185D-40B5-88C2-7F9933426978}\r
+               {DD432BE7-0CA8-47C6-B861-943A036C18EF} = {7D3EE35B-185D-40B5-88C2-7F9933426978}\r
+               {3F36B97B-8028-4335-ADDD-20B6B81F87AF} = {7D3EE35B-185D-40B5-88C2-7F9933426978}\r
+               {C127CD80-E8A7-47E4-B7EC-1709D2188982} = {7D3EE35B-185D-40B5-88C2-7F9933426978}\r
+               {34FA4110-F17B-4AD0-A4C9-C91B92AD06E4} = {7D3EE35B-185D-40B5-88C2-7F9933426978}\r
+               {46649F79-2919-4B4C-B243-08C724901F58} = {7D3EE35B-185D-40B5-88C2-7F9933426978}\r
+               {2D0E651D-058D-4D69-9A44-12149E6CA5BE} = {7D3EE35B-185D-40B5-88C2-7F9933426978}\r
+               {50387CA5-F5B2-4C40-ACFD-FC3C9EE2CD6B} = {7D3EE35B-185D-40B5-88C2-7F9933426978}\r
+               {1BB746AC-7856-4E59-9430-51177621DC35} = {7D3EE35B-185D-40B5-88C2-7F9933426978}\r
+               {24DF3B87-387E-4EFC-BDE0-8DAD279FE19A} = {7D3EE35B-185D-40B5-88C2-7F9933426978}\r
        EndGlobalSection\r
        GlobalSection(DPCodeReviewSolutionGUID) = preSolution\r
                DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000}\r
index e9a7e7cbbc56e523379a8cd4378efb8eca54fd89..2a78696d82fdd8cedf491dae80df8d70a1497870 100644 (file)
@@ -1,14 +1,6 @@
 ï»¿<?xml version="1.0" encoding="utf-8"?>\r
 <Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
   <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
     <ProjectConfiguration Include="DebugVLD|Win32">\r
       <Configuration>DebugVLD</Configuration>\r
       <Platform>Win32</Platform>\r
       <Configuration>Debug</Configuration>\r
       <Platform>x64</Platform>\r
     </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
     <ProjectConfiguration Include="Release|Win32">\r
       <Configuration>Release</Configuration>\r
       <Platform>Win32</Platform>\r
     <WholeProgramOptimization>true</WholeProgramOptimization>\r
     <PlatformToolset>v140</PlatformToolset>\r
   </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v140</PlatformToolset>\r
   </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <WholeProgramOptimization>true</WholeProgramOptimization>\r
     <PlatformToolset>v140</PlatformToolset>\r
   </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v140</PlatformToolset>\r
   </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
   </ImportGroup>\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
     <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
   </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
-  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
     <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
   </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
-  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
     <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
     <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
   </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
-  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
     <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
   </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />\r
-  </ImportGroup>\r
   <PropertyGroup Label="UserMacros" />\r
   <PropertyGroup>\r
     <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">true</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">true</LinkIncremental>\r
     <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</GenerateManifest>\r
-    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">true</GenerateManifest>\r
-    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">true</GenerateManifest>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">true</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">true</LinkIncremental>\r
     <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</GenerateManifest>\r
-    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">true</GenerateManifest>\r
-    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">true</GenerateManifest>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
     <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</GenerateManifest>\r
-    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">true</GenerateManifest>\r
     <PostBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</PostBuildEventUseInBuild>\r
-    <PostBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</PostBuildEventUseInBuild>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
     <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</GenerateManifest>\r
-    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">true</GenerateManifest>\r
     <PostBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</PostBuildEventUseInBuild>\r
-    <PostBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</PostBuildEventUseInBuild>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">true</LinkIncremental>\r
     <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
     <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
     <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
     <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
     <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
     <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
     <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
     <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
     <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
     <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
     <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
     <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
     <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
     <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">libcds-x86-vc$(PlatformToolset)_debug</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">libcds-x86-vc$(PlatformToolset)_debug</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">libcds-x86-icl_debug</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">libcds-x86-vc$(PlatformToolset)_debug</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">libcds-x86-vc$(PlatformToolset)</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">libcds-x86-icl</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">libcds-amd64-vc$(PlatformToolset)_debug</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">libcds-amd64-vc$(PlatformToolset)_debug</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">libcds-amd64-icl_debug</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">libcds-amd64-vc$(PlatformToolset)_debug</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">libcds-amd64-vc$(PlatformToolset)</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">libcds-amd64-icl</TargetName>\r
   </PropertyGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
     <ClCompile>\r
       <AdditionalOptions>/wd4512 /wd4127 /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
   </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/wd4512 /wd4127 /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>\r
-      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/wd4512 /wd4127 %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>\r
-      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
     <Midl>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <AdditionalOptions>/wd4512 /wd4127 /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
-      <WarningLevel>Level4</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>\r
-      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <AdditionalDependencies>\r
-      </AdditionalDependencies>\r
-      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/wd4512 /wd4127 /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
       <CallingConvention>Cdecl</CallingConvention>\r
       <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-      <ExceptionHandling>Sync</ExceptionHandling>\r
-    </ClCompile>\r
-    <Link>\r
-      <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>\r
-      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <AdditionalDependencies>\r
-      </AdditionalDependencies>\r
-      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/wd4512 /wd4127 %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
-      <WarningLevel>Level4</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
     </ClCompile>\r
     <Link>\r
       <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>\r
       <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>\r
       <WholeProgramOptimization>false</WholeProgramOptimization>\r
       <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
       </Command>\r
     </PostBuildEvent>\r
   </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/wd4512 /wd4127 %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>\r
-      <WholeProgramOptimization>false</WholeProgramOptimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>\r
-      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <SubSystem>NotSet</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>\r
-      </LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <AdditionalDependencies>\r
-      </AdditionalDependencies>\r
-    </Link>\r
-    <PostBuildEvent>\r
-      <Message>\r
-      </Message>\r
-      <Command>\r
-      </Command>\r
-    </PostBuildEvent>\r
-  </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
     <Midl>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <EnableFiberSafeOptimizations>false</EnableFiberSafeOptimizations>\r
       <WholeProgramOptimization>false</WholeProgramOptimization>\r
       <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
       <WarningLevel>Level3</WarningLevel>\r
       </Command>\r
     </PostBuildEvent>\r
   </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/wd4512 /wd4127 %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <EnableFiberSafeOptimizations>false</EnableFiberSafeOptimizations>\r
-      <WholeProgramOptimization>false</WholeProgramOptimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <EmitDiagnosticsToFile>false</EmitDiagnosticsToFile>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>\r
-      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <SubSystem>NotSet</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>\r
-      </LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>false</Profile>\r
-      <AdditionalDependencies>\r
-      </AdditionalDependencies>\r
-      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>\r
-      <SuppressStartupBanner>false</SuppressStartupBanner>\r
-    </Link>\r
-    <PostBuildEvent>\r
-      <Message>\r
-      </Message>\r
-      <Command>\r
-      </Command>\r
-    </PostBuildEvent>\r
-  </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
     <ClCompile>\r
       <AdditionalOptions>/wd4512 /wd4127 /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <AdditionalOptions>/wd4512 /wd4127 /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>$(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
     <ClInclude Include="..\..\..\cds\intrusive\ellen_bintree_dhp.h" />\r
     <ClInclude Include="..\..\..\cds\intrusive\ellen_bintree_hp.h" />\r
     <ClInclude Include="..\..\..\cds\intrusive\ellen_bintree_rcu.h" />\r
+    <ClInclude Include="..\..\..\cds\intrusive\free_list.h" />\r
+    <ClInclude Include="..\..\..\cds\intrusive\free_list_tagged.h" />\r
     <ClInclude Include="..\..\..\cds\intrusive\impl\ellen_bintree.h" />\r
     <ClInclude Include="..\..\..\cds\intrusive\impl\lazy_list.h" />\r
     <ClInclude Include="..\..\..\cds\intrusive\impl\michael_list.h" />\r
index f1b37296fa30d6c827ac2648c0582372517db8fb..3e4963d997aaf7cdbe34b26b0a4b7f45afcbeb58 100644 (file)
     <ClInclude Include="..\..\..\cds\container\feldman_hashmap_rcu.h">\r
       <Filter>Header Files\cds\container</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\cds\intrusive\free_list.h">\r
+      <Filter>Header Files\cds\intrusive</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\cds\intrusive\free_list_tagged.h">\r
+      <Filter>Header Files\cds\intrusive</Filter>\r
+    </ClInclude>\r
   </ItemGroup>\r
 </Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-deque.vcxproj b/projects/Win/vc14/gtest-deque.vcxproj
new file mode 100644 (file)
index 0000000..d946f5f
--- /dev/null
@@ -0,0 +1,237 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="DebugVLD|Win32">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DebugVLD|x64">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\unit\deque\fcdeque.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\main.cpp" />\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{EA5D825A-83A4-4A36-83C1-3D048D21D55B}</ProjectGuid>\r
+    <Keyword>Win32Proj</Keyword>\r
+    <RootNamespace>stack</RootNamespace>\r
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Label="Shared">\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-deque.vcxproj.filters b/projects/Win/vc14/gtest-deque.vcxproj.filters
new file mode 100644 (file)
index 0000000..f8df4a7
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup>\r
+    <Filter Include="Source Files">\r
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r
+    </Filter>\r
+    <Filter Include="Header Files">\r
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\r
+    </Filter>\r
+    <Filter Include="Resource Files">\r
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r
+    </Filter>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\unit\main.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\deque\fcdeque.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-intrusive-set.vcxproj b/projects/Win/vc14/gtest-intrusive-set.vcxproj
new file mode 100644 (file)
index 0000000..72ddedd
--- /dev/null
@@ -0,0 +1,417 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="DebugVLD|Win32">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DebugVLD|x64">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\unit\main.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_feldman_hashset_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_feldman_hashset_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_feldman_hashset_rcu_gpb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_feldman_hashset_rcu_gpi.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_feldman_hashset_rcu_gpt.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_feldman_hashset_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_feldman_hashset_rcu_sht.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_lazy_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_lazy_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_lazy_nogc.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_lazy_rcu_gpb.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_lazy_rcu_gpi.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_lazy_rcu_gpt.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_lazy_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_lazy_rcu_sht.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_michael_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_michael_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_michael_nogc.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_michael_rcu_gpb.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_michael_rcu_gpi.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_michael_rcu_gpt.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_michael_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_michael_rcu_sht.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_skiplist_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_skiplist_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_skiplist_nogc.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_skiplist_rcu_gpb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_skiplist_rcu_gpi.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_skiplist_rcu_gpt.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_skiplist_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_skiplist_rcu_sht.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_lazy_dhp.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_lazy_hp.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_lazy_nogc.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_lazy_rcu_gpb.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_lazy_rcu_gpi.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_lazy_rcu_gpt.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_lazy_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_lazy_rcu_sht.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_michael_dhp.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_michael_hp.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_michael_nogc.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_michael_rcu_gpb.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_michael_rcu_gpi.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_michael_rcu_gpt.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_michael_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_michael_rcu_sht.cpp" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_feldman_hashset.h" />\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_feldman_hashset_hp.h" />\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_feldman_hashset_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_michael_lazy_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_michael_michael_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_set.h" />\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_set_hp.h" />\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_set_nogc.h" />\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_set_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_skiplist_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_split_lazy_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_split_michael_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_michael_michael_rcu.h" />\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{EC1EF263-7E34-4867-9ED9-77AA7963CD4A}</ProjectGuid>\r
+    <Keyword>Win32Proj</Keyword>\r
+    <RootNamespace>intrusive_set</RootNamespace>\r
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Label="Shared">\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-intrusive-set.vcxproj.filters b/projects/Win/vc14/gtest-intrusive-set.vcxproj.filters
new file mode 100644 (file)
index 0000000..b1946ec
--- /dev/null
@@ -0,0 +1,216 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup>\r
+    <Filter Include="Source Files">\r
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r
+    </Filter>\r
+    <Filter Include="Header Files">\r
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\r
+    </Filter>\r
+    <Filter Include="Resource Files">\r
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r
+    </Filter>\r
+    <Filter Include="Source Files\MichaelSet">\r
+      <UniqueIdentifier>{9f3cc5d8-7142-4a8e-a520-512911312b13}</UniqueIdentifier>\r
+    </Filter>\r
+    <Filter Include="Source Files\SkipList">\r
+      <UniqueIdentifier>{9c07e86e-bd5b-4ae1-a730-c768234ba9f0}</UniqueIdentifier>\r
+    </Filter>\r
+    <Filter Include="Source Files\FeldmanHashSet">\r
+      <UniqueIdentifier>{852d2603-551b-460b-b17f-f370d91f79e7}</UniqueIdentifier>\r
+    </Filter>\r
+    <Filter Include="Source Files\SplitList">\r
+      <UniqueIdentifier>{619a4db2-c9a0-44eb-bbcf-842ed42d4172}</UniqueIdentifier>\r
+    </Filter>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\unit\main.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_lazy_dhp.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_lazy_hp.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_lazy_nogc.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_lazy_rcu_gpb.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_lazy_rcu_gpi.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_lazy_rcu_gpt.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_lazy_rcu_shb.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_lazy_rcu_sht.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_michael_dhp.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_michael_hp.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_michael_nogc.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_michael_rcu_gpb.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_michael_rcu_gpi.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_michael_rcu_gpt.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_michael_rcu_shb.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_michael_michael_rcu_sht.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_lazy_hp.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_michael_dhp.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_michael_hp.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_lazy_dhp.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_michael_nogc.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_lazy_nogc.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_michael_rcu_gpb.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_michael_rcu_gpi.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_michael_rcu_gpt.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_michael_rcu_shb.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_michael_rcu_sht.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_lazy_rcu_gpb.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_lazy_rcu_gpi.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_lazy_rcu_gpt.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_lazy_rcu_shb.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_split_lazy_rcu_sht.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_skiplist_hp.cpp">\r
+      <Filter>Source Files\SkipList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_skiplist_dhp.cpp">\r
+      <Filter>Source Files\SkipList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_skiplist_rcu_gpb.cpp">\r
+      <Filter>Source Files\SkipList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_skiplist_rcu_gpi.cpp">\r
+      <Filter>Source Files\SkipList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_skiplist_rcu_gpt.cpp">\r
+      <Filter>Source Files\SkipList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_skiplist_rcu_shb.cpp">\r
+      <Filter>Source Files\SkipList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_skiplist_rcu_sht.cpp">\r
+      <Filter>Source Files\SkipList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_skiplist_nogc.cpp">\r
+      <Filter>Source Files\SkipList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_feldman_hashset_hp.cpp">\r
+      <Filter>Source Files\FeldmanHashSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_feldman_hashset_dhp.cpp">\r
+      <Filter>Source Files\FeldmanHashSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_feldman_hashset_rcu_gpb.cpp">\r
+      <Filter>Source Files\FeldmanHashSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_feldman_hashset_rcu_gpi.cpp">\r
+      <Filter>Source Files\FeldmanHashSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_feldman_hashset_rcu_gpt.cpp">\r
+      <Filter>Source Files\FeldmanHashSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_feldman_hashset_rcu_shb.cpp">\r
+      <Filter>Source Files\FeldmanHashSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\intrusive-set\intrusive_feldman_hashset_rcu_sht.cpp">\r
+      <Filter>Source Files\FeldmanHashSet</Filter>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_set.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_set_hp.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_set_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_michael_michael_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_michael_lazy_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_set_nogc.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_split_michael_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_split_lazy_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_skiplist_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_feldman_hashset.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_feldman_hashset_hp.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_intrusive_feldman_hashset_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\intrusive-set\test_michael_michael_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+  </ItemGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-list.vcxproj b/projects/Win/vc14/gtest-list.vcxproj
new file mode 100644 (file)
index 0000000..767fc12
--- /dev/null
@@ -0,0 +1,374 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="DebugVLD|Win32">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DebugVLD|x64">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\unit\list\test_intrusive_lazy_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\list\test_intrusive_list.h" />\r
+    <ClInclude Include="..\..\..\test\unit\list\test_intrusive_list_hp.h" />\r
+    <ClInclude Include="..\..\..\test\unit\list\test_intrusive_list_nogc.h" />\r
+    <ClInclude Include="..\..\..\test\unit\list\test_intrusive_list_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\list\test_intrusive_michael_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\list\test_kv_lazy_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\list\test_kv_list.h" />\r
+    <ClInclude Include="..\..\..\test\unit\list\test_kv_list_hp.h" />\r
+    <ClInclude Include="..\..\..\test\unit\list\test_kv_list_nogc.h" />\r
+    <ClInclude Include="..\..\..\test\unit\list\test_kv_list_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\list\test_kv_michael_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\list\test_lazy_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\list\test_list.h" />\r
+    <ClInclude Include="..\..\..\test\unit\list\test_list_hp.h" />\r
+    <ClInclude Include="..\..\..\test\unit\list\test_list_nogc.h" />\r
+    <ClInclude Include="..\..\..\test\unit\list\test_list_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\list\test_michael_rcu.h" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_lazy_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_lazy_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_lazy_nogc.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_lazy_rcu_gpb.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_lazy_rcu_gpi.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_lazy_rcu_gpt.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_lazy_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_lazy_rcu_sht.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_michael_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_michael_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_michael_rcu_gpb.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_michael_rcu_gpi.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_michael_rcu_gpt.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_michael_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_michael_rcu_sht.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_michael_nogc.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_lazy_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_lazy_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_lazy_nogc.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_lazy_rcu_gpb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_lazy_rcu_gpi.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_lazy_rcu_gpt.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_lazy_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_lazy_rcu_sht.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_michael_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_michael_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_michael_nogc.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_michael_rcu_gpb.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_michael_rcu_gpi.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_michael_rcu_gpt.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_michael_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_michael_rcu_sht.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\lazy_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\lazy_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\lazy_nogc.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\lazy_rcu_gpb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\lazy_rcu_gpi.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\lazy_rcu_gpt.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\lazy_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\lazy_rcu_sht.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\michael_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\michael_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\michael_nogc.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\michael_rcu_gpb.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\michael_rcu_gpi.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\michael_rcu_gpt.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\michael_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\list\michael_rcu_sht.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\main.cpp" />\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{83FC591C-2CA2-4631-AD13-218FF4C27692}</ProjectGuid>\r
+    <Keyword>Win32Proj</Keyword>\r
+    <RootNamespace>list</RootNamespace>\r
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Label="Shared">\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-list.vcxproj.filters b/projects/Win/vc14/gtest-list.vcxproj.filters
new file mode 100644 (file)
index 0000000..2fe3b71
--- /dev/null
@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup>\r
+    <Filter Include="Source Files">\r
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r
+    </Filter>\r
+    <Filter Include="Header Files">\r
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\r
+    </Filter>\r
+    <Filter Include="Resource Files">\r
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r
+    </Filter>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\unit\list\test_intrusive_list.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\list\test_intrusive_list_hp.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\list\test_intrusive_list_nogc.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\list\test_intrusive_list_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\list\test_intrusive_michael_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\list\test_intrusive_lazy_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\list\test_list.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\list\test_list_hp.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\list\test_list_nogc.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\list\test_list_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\list\test_michael_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\list\test_lazy_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\list\test_kv_list.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\list\test_kv_list_hp.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\list\test_kv_list_nogc.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\list\test_kv_list_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\list\test_kv_michael_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\list\test_kv_lazy_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_michael_hp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\main.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_michael_dhp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_lazy_hp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_lazy_dhp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_lazy_nogc.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_michael_nogc.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_michael_rcu_gpb.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_michael_rcu_gpi.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_michael_rcu_gpt.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_michael_rcu_shb.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_michael_rcu_sht.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_lazy_rcu_gpb.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_lazy_rcu_gpi.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_lazy_rcu_gpt.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_lazy_rcu_shb.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\intrusive_lazy_rcu_sht.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\michael_hp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\michael_dhp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\lazy_hp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\lazy_dhp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\michael_nogc.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\lazy_nogc.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\michael_rcu_gpb.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\michael_rcu_gpi.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\michael_rcu_gpt.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\michael_rcu_shb.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\michael_rcu_sht.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\lazy_rcu_gpb.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\lazy_rcu_gpi.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\lazy_rcu_gpt.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\lazy_rcu_shb.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\lazy_rcu_sht.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_michael_hp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_michael_dhp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_lazy_hp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_lazy_dhp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_michael_nogc.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_lazy_nogc.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_michael_rcu_gpb.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_michael_rcu_gpi.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_michael_rcu_gpt.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_michael_rcu_shb.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_michael_rcu_sht.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_lazy_rcu_gpb.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_lazy_rcu_gpi.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_lazy_rcu_gpt.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_lazy_rcu_shb.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\list\kv_lazy_rcu_sht.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-map.vcxproj b/projects/Win/vc14/gtest-map.vcxproj
new file mode 100644 (file)
index 0000000..f88b5b4
--- /dev/null
@@ -0,0 +1,418 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="DebugVLD|Win32">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DebugVLD|x64">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\unit\main.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\feldman_hashmap_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\feldman_hashmap_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\feldman_hashset_rcu_gpb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\feldman_hashset_rcu_gpi.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\feldman_hashset_rcu_gpt.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\feldman_hashset_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\feldman_hashset_rcu_sht.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_lazy_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_lazy_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_lazy_nogc.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_lazy_rcu_gpb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_lazy_rcu_gpi.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_lazy_rcu_gpt.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_lazy_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_lazy_rcu_sht.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_michael_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_michael_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_michael_nogc.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_michael_rcu_gpb.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_michael_rcu_gpi.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_michael_rcu_gpt.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_michael_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_michael_rcu_sht.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\skiplist_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\skiplist_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\skiplist_nogc.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\skiplist_rcu_gpb.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\skiplist_rcu_gpi.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\skiplist_rcu_gpt.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\skiplist_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\skiplist_rcu_sht.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\split_lazy_dhp.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_lazy_hp.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_lazy_nogc.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_lazy_rcu_gpb.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_lazy_rcu_gpi.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_lazy_rcu_gpt.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_lazy_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\split_lazy_rcu_sht.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\split_michael_dhp.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_michael_hp.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_michael_nogc.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_michael_rcu_gpb.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_michael_rcu_gpi.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_michael_rcu_gpt.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_michael_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\map\split_michael_rcu_sht.cpp" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\unit\map\test_feldman_hashmap.h" />\r
+    <ClInclude Include="..\..\..\test\unit\map\test_feldman_hashmap_hp.h" />\r
+    <ClInclude Include="..\..\..\test\unit\map\test_feldman_hashmap_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\map\test_map.h" />\r
+    <ClInclude Include="..\..\..\test\unit\map\test_map_data.h" />\r
+    <ClInclude Include="..\..\..\test\unit\map\test_map_hp.h" />\r
+    <ClInclude Include="..\..\..\test\unit\map\test_map_nogc.h" />\r
+    <ClInclude Include="..\..\..\test\unit\map\test_map_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\map\test_michael_lazy_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\map\test_michael_michael_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\map\test_skiplist_hp.h" />\r
+    <ClInclude Include="..\..\..\test\unit\map\test_skiplist_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\map\test_split_lazy_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\map\test_split_michael_rcu.h" />\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{42B7E892-DDDA-4D00-9AB7-378E0E7E9433}</ProjectGuid>\r
+    <Keyword>Win32Proj</Keyword>\r
+    <RootNamespace>map</RootNamespace>\r
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Label="Shared">\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-map.vcxproj.filters b/projects/Win/vc14/gtest-map.vcxproj.filters
new file mode 100644 (file)
index 0000000..46d394f
--- /dev/null
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup>\r
+    <Filter Include="Source Files">\r
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r
+    </Filter>\r
+    <Filter Include="Header Files">\r
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\r
+    </Filter>\r
+    <Filter Include="Resource Files">\r
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r
+    </Filter>\r
+    <Filter Include="Source Files\MichaelMap">\r
+      <UniqueIdentifier>{12baf500-5c1c-44a7-9bac-e0554eb93b1a}</UniqueIdentifier>\r
+    </Filter>\r
+    <Filter Include="Source Files\SplitListMap">\r
+      <UniqueIdentifier>{3f37c15c-de68-4230-9c59-bc3a2e059950}</UniqueIdentifier>\r
+    </Filter>\r
+    <Filter Include="Source Files\SkipListMap">\r
+      <UniqueIdentifier>{1e70af02-0389-402a-bb6e-e1a399628288}</UniqueIdentifier>\r
+    </Filter>\r
+    <Filter Include="Source Files\FeldmanHashMap">\r
+      <UniqueIdentifier>{d953f61d-84a0-4056-b0b1-9191f256b27b}</UniqueIdentifier>\r
+    </Filter>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\unit\main.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_michael_hp.cpp">\r
+      <Filter>Source Files\MichaelMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_michael_dhp.cpp">\r
+      <Filter>Source Files\MichaelMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_lazy_hp.cpp">\r
+      <Filter>Source Files\MichaelMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_lazy_dhp.cpp">\r
+      <Filter>Source Files\MichaelMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_michael_rcu_gpb.cpp">\r
+      <Filter>Source Files\MichaelMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_michael_rcu_gpi.cpp">\r
+      <Filter>Source Files\MichaelMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_michael_rcu_gpt.cpp">\r
+      <Filter>Source Files\MichaelMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_michael_rcu_shb.cpp">\r
+      <Filter>Source Files\MichaelMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_michael_rcu_sht.cpp">\r
+      <Filter>Source Files\MichaelMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_lazy_rcu_gpb.cpp">\r
+      <Filter>Source Files\MichaelMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_lazy_rcu_gpi.cpp">\r
+      <Filter>Source Files\MichaelMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_lazy_rcu_gpt.cpp">\r
+      <Filter>Source Files\MichaelMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_lazy_rcu_shb.cpp">\r
+      <Filter>Source Files\MichaelMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_lazy_rcu_sht.cpp">\r
+      <Filter>Source Files\MichaelMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_michael_nogc.cpp">\r
+      <Filter>Source Files\MichaelMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\michael_lazy_nogc.cpp">\r
+      <Filter>Source Files\MichaelMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_michael_hp.cpp">\r
+      <Filter>Source Files\SplitListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_michael_dhp.cpp">\r
+      <Filter>Source Files\SplitListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_michael_nogc.cpp">\r
+      <Filter>Source Files\SplitListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_michael_rcu_gpb.cpp">\r
+      <Filter>Source Files\SplitListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_michael_rcu_gpi.cpp">\r
+      <Filter>Source Files\SplitListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_michael_rcu_gpt.cpp">\r
+      <Filter>Source Files\SplitListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_michael_rcu_shb.cpp">\r
+      <Filter>Source Files\SplitListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_michael_rcu_sht.cpp">\r
+      <Filter>Source Files\SplitListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_lazy_hp.cpp">\r
+      <Filter>Source Files\SplitListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_lazy_dhp.cpp">\r
+      <Filter>Source Files\SplitListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_lazy_nogc.cpp">\r
+      <Filter>Source Files\SplitListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_lazy_rcu_gpb.cpp">\r
+      <Filter>Source Files\SplitListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_lazy_rcu_gpi.cpp">\r
+      <Filter>Source Files\SplitListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_lazy_rcu_gpt.cpp">\r
+      <Filter>Source Files\SplitListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_lazy_rcu_shb.cpp">\r
+      <Filter>Source Files\SplitListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\split_lazy_rcu_sht.cpp">\r
+      <Filter>Source Files\SplitListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\skiplist_hp.cpp">\r
+      <Filter>Source Files\SkipListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\skiplist_dhp.cpp">\r
+      <Filter>Source Files\SkipListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\skiplist_nogc.cpp">\r
+      <Filter>Source Files\SkipListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\skiplist_rcu_gpb.cpp">\r
+      <Filter>Source Files\SkipListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\skiplist_rcu_gpi.cpp">\r
+      <Filter>Source Files\SkipListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\skiplist_rcu_gpt.cpp">\r
+      <Filter>Source Files\SkipListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\skiplist_rcu_shb.cpp">\r
+      <Filter>Source Files\SkipListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\skiplist_rcu_sht.cpp">\r
+      <Filter>Source Files\SkipListMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\feldman_hashmap_hp.cpp">\r
+      <Filter>Source Files\FeldmanHashMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\feldman_hashmap_dhp.cpp">\r
+      <Filter>Source Files\FeldmanHashMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\feldman_hashset_rcu_gpb.cpp">\r
+      <Filter>Source Files\FeldmanHashMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\feldman_hashset_rcu_gpi.cpp">\r
+      <Filter>Source Files\FeldmanHashMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\feldman_hashset_rcu_gpt.cpp">\r
+      <Filter>Source Files\FeldmanHashMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\feldman_hashset_rcu_shb.cpp">\r
+      <Filter>Source Files\FeldmanHashMap</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\map\feldman_hashset_rcu_sht.cpp">\r
+      <Filter>Source Files\FeldmanHashMap</Filter>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\unit\map\test_map.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\map\test_map_hp.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\map\test_map_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\map\test_michael_michael_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\map\test_michael_lazy_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\map\test_map_nogc.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\map\test_split_michael_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\map\test_split_lazy_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\map\test_skiplist_hp.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\map\test_skiplist_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\map\test_map_data.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\map\test_feldman_hashmap.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\map\test_feldman_hashmap_hp.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\map\test_feldman_hashmap_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+  </ItemGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-misc.vcxproj b/projects/Win/vc14/gtest-misc.vcxproj
new file mode 100644 (file)
index 0000000..7857f8c
--- /dev/null
@@ -0,0 +1,246 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DebugVLD|Win32">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DebugVLD|x64">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\unit\main.cpp" />
+    <ClCompile Include="..\..\..\test\unit\misc\bitop.cpp" />
+    <ClCompile Include="..\..\..\test\unit\misc\cxx11_atomic_class.cpp" />
+    <ClCompile Include="..\..\..\test\unit\misc\cxx11_atomic_func.cpp" />
+    <ClCompile Include="..\..\..\test\unit\misc\find_option.cpp" />
+    <ClCompile Include="..\..\..\test\unit\misc\hash_tuple.cpp" />
+    <ClCompile Include="..\..\..\test\unit\misc\permutation_generator.cpp" />
+    <ClCompile Include="..\..\..\test\unit\misc\split_bitstring.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\unit\misc\cxx11_convert_memory_order.h" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{FA22E700-1AE5-4d7b-B9F1-0A919FF7FF06}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>misc</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-misc.vcxproj.filters b/projects/Win/vc14/gtest-misc.vcxproj.filters
new file mode 100644 (file)
index 0000000..37266bf
--- /dev/null
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\unit\main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\misc\bitop.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\misc\cxx11_atomic_class.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\misc\cxx11_atomic_func.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\misc\find_option.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\misc\hash_tuple.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\misc\permutation_generator.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\misc\split_bitstring.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\unit\misc\cxx11_convert_memory_order.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-pqueue.vcxproj b/projects/Win/vc14/gtest-pqueue.vcxproj
new file mode 100644 (file)
index 0000000..8873d70
--- /dev/null
@@ -0,0 +1,245 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="DebugVLD|Win32">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DebugVLD|x64">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\unit\main.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\pqueue\fcpqueue_boost_stable_vector.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\pqueue\fcpqueue_deque.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\pqueue\fcpqueue_vector.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\pqueue\intrusive_mspqueue.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\pqueue\mspqueue.cpp" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\unit\pqueue\test_data.h" />\r
+    <ClInclude Include="..\..\..\test\unit\pqueue\test_fcpqueue.h" />\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{ED94B1D1-2442-43C2-A71C-A757122408A6}</ProjectGuid>\r
+    <Keyword>Win32Proj</Keyword>\r
+    <RootNamespace>stack</RootNamespace>\r
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Label="Shared">\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-pqueue.vcxproj.filters b/projects/Win/vc14/gtest-pqueue.vcxproj.filters
new file mode 100644 (file)
index 0000000..d7dd058
--- /dev/null
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup>\r
+    <Filter Include="Source Files">\r
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r
+    </Filter>\r
+    <Filter Include="Header Files">\r
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\r
+    </Filter>\r
+    <Filter Include="Resource Files">\r
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r
+    </Filter>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\unit\pqueue\fcpqueue_vector.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\pqueue\fcpqueue_deque.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\pqueue\fcpqueue_boost_stable_vector.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\pqueue\mspqueue.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\pqueue\intrusive_mspqueue.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\main.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\unit\pqueue\test_fcpqueue.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\pqueue\test_data.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+  </ItemGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-queue.vcxproj b/projects/Win/vc14/gtest-queue.vcxproj
new file mode 100644 (file)
index 0000000..471f4b1
--- /dev/null
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="DebugVLD|Win32">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DebugVLD|x64">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\unit\main.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\basket_queue_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\basket_queue_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\fcqueue.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_basket_queue_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_basket_queue_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_fcqueue.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_moirqueue_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_moirqueue_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_msqueue_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_msqueue_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_optqueue_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_optqueue_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_segmented_queue_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_segmented_queue_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_tsigas_queue.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_vyukov_queue.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\moirqueue_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\moirqueue_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\msqueue_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\msqueue_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\optimistic_queue_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\optimistic_queue_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\rwqueue.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\segmented_queue_dhp.cpp">\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\segmented_queue_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\tsigas_queue.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\queue\vyukov_mpmc_queue.cpp" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\unit\queue\test_bounded_queue.h" />\r
+    <ClInclude Include="..\..\..\test\unit\queue\test_generic_queue.h" />\r
+    <ClInclude Include="..\..\..\test\unit\queue\test_intrusive_bounded_queue.h" />\r
+    <ClInclude Include="..\..\..\test\unit\queue\test_intrusive_msqueue.h" />\r
+    <ClInclude Include="..\..\..\test\unit\queue\test_intrusive_segmented_queue.h" />\r
+    <ClInclude Include="..\..\..\test\unit\queue\test_segmented_queue.h" />\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{9EB8FAB6-78E8-48B6-9589-85985CE8D33D}</ProjectGuid>\r
+    <Keyword>Win32Proj</Keyword>\r
+    <RootNamespace>stack</RootNamespace>\r
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Label="Shared">\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-queue.vcxproj.filters b/projects/Win/vc14/gtest-queue.vcxproj.filters
new file mode 100644 (file)
index 0000000..133fc42
--- /dev/null
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup>\r
+    <Filter Include="Source Files">\r
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r
+    </Filter>\r
+    <Filter Include="Header Files">\r
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\r
+    </Filter>\r
+    <Filter Include="Resource Files">\r
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r
+    </Filter>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\unit\main.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\fcqueue.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\msqueue_hp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\msqueue_dhp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\moirqueue_hp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\moirqueue_dhp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\basket_queue_hp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\basket_queue_dhp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\optimistic_queue_hp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\optimistic_queue_dhp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\rwqueue.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\segmented_queue_hp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\segmented_queue_dhp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\vyukov_mpmc_queue.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\tsigas_queue.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_msqueue_hp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_msqueue_dhp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_moirqueue_dhp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_moirqueue_hp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_basket_queue_dhp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_basket_queue_hp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_optqueue_dhp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_optqueue_hp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_fcqueue.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_segmented_queue_hp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_segmented_queue_dhp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_vyukov_queue.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\queue\intrusive_tsigas_queue.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\unit\queue\test_generic_queue.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\queue\test_segmented_queue.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\queue\test_bounded_queue.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\queue\test_intrusive_msqueue.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\queue\test_intrusive_segmented_queue.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\queue\test_intrusive_bounded_queue.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+  </ItemGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-set.vcxproj b/projects/Win/vc14/gtest-set.vcxproj
new file mode 100644 (file)
index 0000000..6eeaea4
--- /dev/null
@@ -0,0 +1,424 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="DebugVLD|Win32">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DebugVLD|x64">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\unit\main.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\feldman_hashset_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\feldman_hashset_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\feldman_hashset_rcu_gpb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\feldman_hashset_rcu_gpi.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\feldman_hashset_rcu_gpt.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\feldman_hashset_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\feldman_hashset_rcu_sht.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_lazy_dhp.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_lazy_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_lazy_nogc.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_lazy_rcu_gpb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_lazy_rcu_gpi.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_lazy_rcu_gpt.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_lazy_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_lazy_rcu_sht.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_michael_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_michael_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_michael_nogc.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_michael_rcu_gpb.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_michael_rcu_gpi.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_michael_rcu_gpt.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_michael_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_michael_rcu_sht.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\skiplist_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\skiplist_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\skiplist_nogc.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\skiplist_rcu_gpb.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\skiplist_rcu_gpi.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\skiplist_rcu_gpt.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\skiplist_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\skiplist_rcu_sht.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\split_lazy_dhp.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_lazy_hp.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_lazy_nogc.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_lazy_rcu_gpb.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_lazy_rcu_gpi.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_lazy_rcu_gpt.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_lazy_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\split_lazy_rcu_sht.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\split_michael_dhp.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_michael_hp.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_michael_nogc.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_michael_rcu_gpb.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_michael_rcu_gpi.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_michael_rcu_gpt.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_michael_rcu_shb.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\set\split_michael_rcu_sht.cpp" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\unit\set\test_feldman_hashset.h" />\r
+    <ClInclude Include="..\..\..\test\unit\set\test_feldman_hashset_hp.h" />\r
+    <ClInclude Include="..\..\..\test\unit\set\test_feldman_hashset_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\set\test_michael_lazy_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\set\test_michael_michael_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\set\test_ordered_set_hp.h" />\r
+    <ClInclude Include="..\..\..\test\unit\set\test_set.h" />\r
+    <ClInclude Include="..\..\..\test\unit\set\test_set_hp.h" />\r
+    <ClInclude Include="..\..\..\test\unit\set\test_set_nogc.h" />\r
+    <ClInclude Include="..\..\..\test\unit\set\test_set_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\set\test_skiplist_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\set\test_split_lazy_rcu.h" />\r
+    <ClInclude Include="..\..\..\test\unit\set\test_split_michael_rcu.h" />\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{A589D3F1-A749-4268-ADEC-D0CE13D1E359}</ProjectGuid>\r
+    <Keyword>Win32Proj</Keyword>\r
+    <RootNamespace>set</RootNamespace>\r
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Label="Shared">\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-set.vcxproj.filters b/projects/Win/vc14/gtest-set.vcxproj.filters
new file mode 100644 (file)
index 0000000..80a2f7e
--- /dev/null
@@ -0,0 +1,216 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup>\r
+    <Filter Include="Source Files">\r
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r
+    </Filter>\r
+    <Filter Include="Header Files">\r
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\r
+    </Filter>\r
+    <Filter Include="Resource Files">\r
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r
+    </Filter>\r
+    <Filter Include="Source Files\MichaelSet">\r
+      <UniqueIdentifier>{4c75be9d-6104-435d-b08f-09fa33b2bfcc}</UniqueIdentifier>\r
+    </Filter>\r
+    <Filter Include="Source Files\SplitList">\r
+      <UniqueIdentifier>{6cf522b0-3039-424a-80f6-12e9ca592630}</UniqueIdentifier>\r
+    </Filter>\r
+    <Filter Include="Source Files\SkipList">\r
+      <UniqueIdentifier>{5c30de7f-5e68-4ef5-b9a5-63a1ec626010}</UniqueIdentifier>\r
+    </Filter>\r
+    <Filter Include="Source Files\FeldmanHashSet">\r
+      <UniqueIdentifier>{0f6f4b41-97bc-411f-b24e-790ff162e314}</UniqueIdentifier>\r
+    </Filter>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\unit\main.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_michael_hp.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_michael_dhp.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_michael_rcu_gpb.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_michael_rcu_gpi.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_michael_rcu_gpt.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_michael_rcu_shb.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_michael_rcu_sht.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_michael_nogc.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_lazy_hp.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_lazy_dhp.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_lazy_rcu_gpb.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_lazy_rcu_gpi.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_lazy_rcu_gpt.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_lazy_rcu_shb.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_lazy_rcu_sht.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\michael_lazy_nogc.cpp">\r
+      <Filter>Source Files\MichaelSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_michael_hp.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_michael_dhp.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_lazy_hp.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_lazy_dhp.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_michael_rcu_gpb.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_michael_rcu_gpi.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_michael_rcu_gpt.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_michael_rcu_shb.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_michael_rcu_sht.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_lazy_rcu_gpb.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_lazy_rcu_gpi.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_lazy_rcu_gpt.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_lazy_rcu_shb.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_lazy_rcu_sht.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_michael_nogc.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\split_lazy_nogc.cpp">\r
+      <Filter>Source Files\SplitList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\skiplist_hp.cpp">\r
+      <Filter>Source Files\SkipList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\skiplist_dhp.cpp">\r
+      <Filter>Source Files\SkipList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\skiplist_nogc.cpp">\r
+      <Filter>Source Files\SkipList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\skiplist_rcu_gpb.cpp">\r
+      <Filter>Source Files\SkipList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\skiplist_rcu_gpi.cpp">\r
+      <Filter>Source Files\SkipList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\skiplist_rcu_gpt.cpp">\r
+      <Filter>Source Files\SkipList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\skiplist_rcu_shb.cpp">\r
+      <Filter>Source Files\SkipList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\skiplist_rcu_sht.cpp">\r
+      <Filter>Source Files\SkipList</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\feldman_hashset_hp.cpp">\r
+      <Filter>Source Files\FeldmanHashSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\feldman_hashset_dhp.cpp">\r
+      <Filter>Source Files\FeldmanHashSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\feldman_hashset_rcu_gpb.cpp">\r
+      <Filter>Source Files\FeldmanHashSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\feldman_hashset_rcu_gpi.cpp">\r
+      <Filter>Source Files\FeldmanHashSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\feldman_hashset_rcu_gpt.cpp">\r
+      <Filter>Source Files\FeldmanHashSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\feldman_hashset_rcu_shb.cpp">\r
+      <Filter>Source Files\FeldmanHashSet</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\set\feldman_hashset_rcu_sht.cpp">\r
+      <Filter>Source Files\FeldmanHashSet</Filter>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\unit\set\test_set.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\set\test_set_hp.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\set\test_set_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\set\test_set_nogc.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\set\test_michael_lazy_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\set\test_michael_michael_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\set\test_split_michael_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\set\test_split_lazy_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\set\test_skiplist_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\set\test_feldman_hashset.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\set\test_feldman_hashset_hp.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\set\test_feldman_hashset_rcu.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\set\test_ordered_set_hp.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+  </ItemGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-stack.vcxproj b/projects/Win/vc14/gtest-stack.vcxproj
new file mode 100644 (file)
index 0000000..24c9cca
--- /dev/null
@@ -0,0 +1,246 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="DebugVLD|Win32">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DebugVLD|x64">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\unit\main.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\stack\fcstack.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\stack\intrusive_fcstack.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\stack\intrusive_treiber_stack_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\stack\intrusive_treiber_stack_hp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\stack\treiber_stack_dhp.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\stack\treiber_stack_hp.cpp" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\unit\stack\test_intrusive_treiber_stack.h" />\r
+    <ClInclude Include="..\..\..\test\unit\stack\test_treiber_stack.h" />\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{5407E9D2-67D9-4266-976E-7A90BDE2541D}</ProjectGuid>\r
+    <Keyword>Win32Proj</Keyword>\r
+    <RootNamespace>stack</RootNamespace>\r
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Label="Shared">\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-stack.vcxproj.filters b/projects/Win/vc14/gtest-stack.vcxproj.filters
new file mode 100644 (file)
index 0000000..86b7995
--- /dev/null
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup>\r
+    <Filter Include="Source Files">\r
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r
+    </Filter>\r
+    <Filter Include="Header Files">\r
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\r
+    </Filter>\r
+    <Filter Include="Resource Files">\r
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r
+    </Filter>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\unit\stack\fcstack.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\stack\intrusive_fcstack.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\stack\intrusive_treiber_stack_hp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\stack\intrusive_treiber_stack_dhp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\stack\treiber_stack_hp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\stack\treiber_stack_dhp.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\main.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\unit\stack\test_intrusive_treiber_stack.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\stack\test_treiber_stack.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+  </ItemGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-striped-map.vcxproj b/projects/Win/vc14/gtest-striped-map.vcxproj
new file mode 100644 (file)
index 0000000..d0b7226
--- /dev/null
@@ -0,0 +1,269 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DebugVLD|Win32">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DebugVLD|x64">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\unit\main.cpp" />
+    <ClCompile Include="..\..\..\test\unit\striped-map\cuckoo_map.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">CDSUNIT_ENABLE_BOOST_CONTAINER;_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">CDSUNIT_ENABLE_BOOST_CONTAINER;_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CDSUNIT_ENABLE_BOOST_CONTAINER;_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">CDSUNIT_ENABLE_BOOST_CONTAINER;_SCL_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">CDSUNIT_ENABLE_BOOST_CONTAINER;_SCL_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">CDSUNIT_ENABLE_BOOST_CONTAINER;_SCL_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\striped-map\map_boost_flat_map.cpp" />
+    <ClCompile Include="..\..\..\test\unit\striped-map\map_boost_list.cpp" />
+    <ClCompile Include="..\..\..\test\unit\striped-map\map_boost_map.cpp" />
+    <ClCompile Include="..\..\..\test\unit\striped-map\map_boost_slist.cpp" />
+    <ClCompile Include="..\..\..\test\unit\striped-map\map_boost_unordered_map.cpp" />
+    <ClCompile Include="..\..\..\test\unit\striped-map\map_std_list.cpp" />
+    <ClCompile Include="..\..\..\test\unit\striped-map\map_std_map.cpp" />
+    <ClCompile Include="..\..\..\test\unit\striped-map\map_std_unordered_map.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\unit\striped-map\test_map.h" />
+    <ClInclude Include="..\..\..\test\unit\striped-map\test_map_data.h" />
+    <ClInclude Include="..\..\..\test\unit\striped-map\test_striped_map.h" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{00FD5CB8-E1A4-40CA-B613-30A06A75622B}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>striped-map</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_ENABLE_BOOST_CONTAINER;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_ENABLE_BOOST_CONTAINER;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_ENABLE_BOOST_CONTAINER;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_ENABLE_BOOST_CONTAINER;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_ENABLE_BOOST_CONTAINER;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_ENABLE_BOOST_CONTAINER;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-striped-map.vcxproj.filters b/projects/Win/vc14/gtest-striped-map.vcxproj.filters
new file mode 100644 (file)
index 0000000..97797d1
--- /dev/null
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\unit\main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\striped-map\cuckoo_map.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\striped-map\map_std_list.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\striped-map\map_std_map.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\striped-map\map_std_unordered_map.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\striped-map\map_boost_slist.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\striped-map\map_boost_list.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\striped-map\map_boost_map.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\striped-map\map_boost_flat_map.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\striped-map\map_boost_unordered_map.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\unit\striped-map\test_map_data.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\test\unit\striped-map\test_map.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\test\unit\striped-map\test_striped_map.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-striped-set.vcxproj b/projects/Win/vc14/gtest-striped-set.vcxproj
new file mode 100644 (file)
index 0000000..d758bc3
--- /dev/null
@@ -0,0 +1,289 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="DebugVLD|Win32">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DebugVLD|x64">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\unit\main.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\cuckoo_set.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_SCL_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">_SCL_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_SCL_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\intrusive_boost_avl_set.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\intrusive_boost_list.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\intrusive_boost_set.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\intrusive_boost_sg_set.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\intrusive_boost_slist.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\intrusive_boost_splay_set.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\intrusive_boost_treap_set.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\intrusive_cuckoo_set.cpp">\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\intrusive_boost_unordered_set.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\set_boost_flatset.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\set_boost_list.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\set_boost_set.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\set_boost_slist.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\set_boost_stable_vector.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\set_boost_unordered_set.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\set_boost_vector.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\set_std_list.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\set_std_set.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\set_std_unordered_set.cpp" />\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\set_std_vector.cpp" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\unit\striped-set\test_intrusive_striped_set.h" />\r
+    <ClInclude Include="..\..\..\test\unit\striped-set\test_intrusive_set.h" />\r
+    <ClInclude Include="..\..\..\test\unit\striped-set\test_set.h" />\r
+    <ClInclude Include="..\..\..\test\unit\striped-set\test_striped_set.h" />\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{648021D3-6E18-4B94-88B8-F6A59609E210}</ProjectGuid>\r
+    <Keyword>Win32Proj</Keyword>\r
+    <RootNamespace>striped-set</RootNamespace>\r
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Label="Shared">\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_ENABLE_BOOST_CONTAINER;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_ENABLE_BOOST_CONTAINER;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_ENABLE_BOOST_CONTAINER;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_ENABLE_BOOST_CONTAINER;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_ENABLE_BOOST_CONTAINER;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_ENABLE_BOOST_CONTAINER;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-striped-set.vcxproj.filters b/projects/Win/vc14/gtest-striped-set.vcxproj.filters
new file mode 100644 (file)
index 0000000..e0f5f7e
--- /dev/null
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup>\r
+    <Filter Include="Source Files">\r
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r
+    </Filter>\r
+    <Filter Include="Header Files">\r
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\r
+    </Filter>\r
+    <Filter Include="Resource Files">\r
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r
+    </Filter>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\unit\main.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\intrusive_cuckoo_set.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\intrusive_boost_slist.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\intrusive_boost_list.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\intrusive_boost_set.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\intrusive_boost_avl_set.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\intrusive_boost_sg_set.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\intrusive_boost_splay_set.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\intrusive_boost_treap_set.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\intrusive_boost_unordered_set.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\cuckoo_set.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\set_std_list.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\set_boost_list.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\set_boost_flatset.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\set_boost_set.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\set_boost_stable_vector.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\set_boost_unordered_set.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\set_boost_vector.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\set_std_unordered_set.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\set_std_set.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\set_boost_slist.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\unit\striped-set\set_std_vector.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\unit\striped-set\test_intrusive_set.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\striped-set\test_intrusive_striped_set.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\striped-set\test_set.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\unit\striped-set\test_striped_set.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+  </ItemGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-tree.vcxproj b/projects/Win/vc14/gtest-tree.vcxproj
new file mode 100644 (file)
index 0000000..89aa722
--- /dev/null
@@ -0,0 +1,355 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DebugVLD|Win32">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DebugVLD|x64">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\unit\main.cpp" />
+    <ClCompile Include="..\..\..\test\unit\tree\bronson_avltree_map_ptr_rcu_gpb.cpp" />
+    <ClCompile Include="..\..\..\test\unit\tree\bronson_avltree_map_ptr_rcu_gpi.cpp" />
+    <ClCompile Include="..\..\..\test\unit\tree\bronson_avltree_map_ptr_rcu_gpt.cpp" />
+    <ClCompile Include="..\..\..\test\unit\tree\bronson_avltree_map_ptr_rcu_shb.cpp" />
+    <ClCompile Include="..\..\..\test\unit\tree\bronson_avltree_map_ptr_rcu_sht.cpp" />
+    <ClCompile Include="..\..\..\test\unit\tree\bronson_avltree_map_rcu_gpb.cpp" />
+    <ClCompile Include="..\..\..\test\unit\tree\bronson_avltree_map_rcu_gpi.cpp" />
+    <ClCompile Include="..\..\..\test\unit\tree\bronson_avltree_map_rcu_gpt.cpp" />
+    <ClCompile Include="..\..\..\test\unit\tree\bronson_avltree_map_rcu_shb.cpp" />
+    <ClCompile Include="..\..\..\test\unit\tree\bronson_avltree_map_rcu_sht.cpp" />
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_map_dhp.cpp" />
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_map_hp.cpp" />
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_map_rcu_gpb.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_map_rcu_gpi.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_map_rcu_gpt.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_map_rcu_shb.cpp" />
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_map_rcu_sht.cpp" />
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_set_dhp.cpp" />
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_set_hp.cpp" />
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_set_rcu_gpb.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_set_rcu_gpi.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_set_rcu_gpt.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_set_rcu_shb.cpp" />
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_set_rcu_sht.cpp" />
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_update_desc_pool.cpp" />
+    <ClCompile Include="..\..\..\test\unit\tree\intrusive_ellenbintree_dhp.cpp" />
+    <ClCompile Include="..\..\..\test\unit\tree\intrusive_ellenbintree_hp.cpp" />
+    <ClCompile Include="..\..\..\test\unit\tree\intrusive_ellenbintree_rcu_gpb.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\intrusive_ellenbintree_rcu_gpi.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\intrusive_ellenbintree_rcu_gpt.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\intrusive_ellenbintree_rcu_shb.cpp" />
+    <ClCompile Include="..\..\..\test\unit\tree\intrusive_ellenbintree_rcu_sht.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\unit\tree\test_bronson_avltree_map.h" />
+    <ClInclude Include="..\..\..\test\unit\tree\test_bronson_avltree_map_ptr.h" />
+    <ClInclude Include="..\..\..\test\unit\tree\test_ellen_bintree_map_rcu.h" />
+    <ClInclude Include="..\..\..\test\unit\tree\test_ellen_bintree_set_rcu.h" />
+    <ClInclude Include="..\..\..\test\unit\tree\test_ellen_bintree_update_desc_pool.h" />
+    <ClInclude Include="..\..\..\test\unit\tree\test_intrusive_ellen_bintree_rcu.h" />
+    <ClInclude Include="..\..\..\test\unit\tree\test_intrusive_tree.h" />
+    <ClInclude Include="..\..\..\test\unit\tree\test_intrusive_tree_hp.h" />
+    <ClInclude Include="..\..\..\test\unit\tree\test_intrusive_tree_rcu.h" />
+    <ClInclude Include="..\..\..\test\unit\tree\test_tree_map.h" />
+    <ClInclude Include="..\..\..\test\unit\tree\test_tree_map_data.h" />
+    <ClInclude Include="..\..\..\test\unit\tree\test_tree_map_hp.h" />
+    <ClInclude Include="..\..\..\test\unit\tree\test_tree_map_rcu.h" />
+    <ClInclude Include="..\..\..\test\unit\tree\test_tree_set.h" />
+    <ClInclude Include="..\..\..\test\unit\tree\test_tree_set_hp.h" />
+    <ClInclude Include="..\..\..\test\unit\tree\test_tree_set_rcu.h" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{2ABD6A2E-BEA7-4c8c-982B-A609F83D2DCB}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>tree</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/gtest-tree.vcxproj.filters b/projects/Win/vc14/gtest-tree.vcxproj.filters
new file mode 100644 (file)
index 0000000..fabcd1c
--- /dev/null
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+    <Filter Include="Source Files\intrusive.EllenBinTree">
+      <UniqueIdentifier>{5e28703f-0f92-4c6c-b3a6-3bd837deb8f6}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\EllenBinTreeSet">
+      <UniqueIdentifier>{9fc83943-2620-4528-a704-d3765f52522b}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\EllenBinTreeMap">
+      <UniqueIdentifier>{5e8e3c4d-563e-41fd-91ed-52f61f4b7d24}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\BronsonAVLTree">
+      <UniqueIdentifier>{431d0150-603d-4108-810d-de9ac3be3534}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\unit\tree\intrusive_ellenbintree_dhp.cpp">
+      <Filter>Source Files\intrusive.EllenBinTree</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\intrusive_ellenbintree_hp.cpp">
+      <Filter>Source Files\intrusive.EllenBinTree</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\intrusive_ellenbintree_rcu_gpb.cpp">
+      <Filter>Source Files\intrusive.EllenBinTree</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\intrusive_ellenbintree_rcu_gpi.cpp">
+      <Filter>Source Files\intrusive.EllenBinTree</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\intrusive_ellenbintree_rcu_gpt.cpp">
+      <Filter>Source Files\intrusive.EllenBinTree</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\intrusive_ellenbintree_rcu_shb.cpp">
+      <Filter>Source Files\intrusive.EllenBinTree</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\intrusive_ellenbintree_rcu_sht.cpp">
+      <Filter>Source Files\intrusive.EllenBinTree</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_update_desc_pool.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_set_rcu_gpb.cpp">
+      <Filter>Source Files\EllenBinTreeSet</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_set_rcu_gpi.cpp">
+      <Filter>Source Files\EllenBinTreeSet</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_set_rcu_gpt.cpp">
+      <Filter>Source Files\EllenBinTreeSet</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_set_rcu_shb.cpp">
+      <Filter>Source Files\EllenBinTreeSet</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_set_rcu_sht.cpp">
+      <Filter>Source Files\EllenBinTreeSet</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_set_dhp.cpp">
+      <Filter>Source Files\EllenBinTreeSet</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_set_hp.cpp">
+      <Filter>Source Files\EllenBinTreeSet</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_map_hp.cpp">
+      <Filter>Source Files\EllenBinTreeMap</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_map_dhp.cpp">
+      <Filter>Source Files\EllenBinTreeMap</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_map_rcu_gpb.cpp">
+      <Filter>Source Files\EllenBinTreeMap</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_map_rcu_gpi.cpp">
+      <Filter>Source Files\EllenBinTreeMap</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_map_rcu_gpt.cpp">
+      <Filter>Source Files\EllenBinTreeMap</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_map_rcu_shb.cpp">
+      <Filter>Source Files\EllenBinTreeMap</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\ellen_bintree_map_rcu_sht.cpp">
+      <Filter>Source Files\EllenBinTreeMap</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\bronson_avltree_map_ptr_rcu_gpb.cpp">
+      <Filter>Source Files\BronsonAVLTree</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\bronson_avltree_map_ptr_rcu_gpi.cpp">
+      <Filter>Source Files\BronsonAVLTree</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\bronson_avltree_map_ptr_rcu_gpt.cpp">
+      <Filter>Source Files\BronsonAVLTree</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\bronson_avltree_map_ptr_rcu_shb.cpp">
+      <Filter>Source Files\BronsonAVLTree</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\bronson_avltree_map_ptr_rcu_sht.cpp">
+      <Filter>Source Files\BronsonAVLTree</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\bronson_avltree_map_rcu_gpb.cpp">
+      <Filter>Source Files\BronsonAVLTree</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\bronson_avltree_map_rcu_gpi.cpp">
+      <Filter>Source Files\BronsonAVLTree</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\bronson_avltree_map_rcu_gpt.cpp">
+      <Filter>Source Files\BronsonAVLTree</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\bronson_avltree_map_rcu_shb.cpp">
+      <Filter>Source Files\BronsonAVLTree</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\unit\tree\bronson_avltree_map_rcu_sht.cpp">
+      <Filter>Source Files\BronsonAVLTree</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\unit\tree\test_intrusive_tree.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\test\unit\tree\test_intrusive_tree_hp.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\test\unit\tree\test_intrusive_tree_rcu.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\test\unit\tree\test_intrusive_ellen_bintree_rcu.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\test\unit\tree\test_tree_set.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\test\unit\tree\test_tree_set_hp.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\test\unit\tree\test_ellen_bintree_update_desc_pool.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\test\unit\tree\test_tree_set_rcu.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\test\unit\tree\test_ellen_bintree_set_rcu.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\test\unit\tree\test_tree_map.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\test\unit\tree\test_tree_map_data.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\test\unit\tree\test_tree_map_hp.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\test\unit\tree\test_tree_map_rcu.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\test\unit\tree\test_ellen_bintree_map_rcu.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\test\unit\tree\test_bronson_avltree_map_ptr.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\test\unit\tree\test_bronson_avltree_map.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/hdr-test-deque.vcxproj b/projects/Win/vc14/hdr-test-deque.vcxproj
deleted file mode 100644 (file)
index 856f4d4..0000000
+++ /dev/null
@@ -1,659 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{CD0BC7FC-9BFF-40B0-8E66-99D244A8A026}</ProjectGuid>\r
-    <RootNamespace>hdrtestdeque</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <RecognizeRestrictKeyword>false</RecognizeRestrictKeyword>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <RecognizeRestrictKeyword>false</RecognizeRestrictKeyword>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <RecognizeRestrictKeyword>false</RecognizeRestrictKeyword>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <RecognizeRestrictKeyword>false</RecognizeRestrictKeyword>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\deque\hdr_fcdeque.cpp" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/hdr-test-list.vcxproj b/projects/Win/vc14/hdr-test-list.vcxproj
deleted file mode 100644 (file)
index 944cc7a..0000000
+++ /dev/null
@@ -1,707 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_lazy.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_michael.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_michael_kv.h" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_nogc_unord.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_list_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_list_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_list_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_list_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_list_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_nogc_unord.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_nogc_unord.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_rcu_sht.cpp" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{EFCBBADE-2CF4-4E2B-ADB2-98C8D139E805}</ProjectGuid>\r
-    <RootNamespace>hdrtestordlist</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <ProjectName>hdr-test-list</ProjectName>\r
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/hdr-test-list.vcxproj.filters b/projects/Win/vc14/hdr-test-list.vcxproj.filters
deleted file mode 100644 (file)
index 24f6289..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <Filter Include="intrusive">\r
-      <UniqueIdentifier>{fff45fc3-9c35-4f00-94ac-a2403b1caed6}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container">\r
-      <UniqueIdentifier>{b0d8933f-3fbc-49c2-ad77-89bd74461395}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy.h">\r
-      <Filter>intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael.h">\r
-      <Filter>intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_lazy.h">\r
-      <Filter>container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv.h">\r
-      <Filter>container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_michael.h">\r
-      <Filter>container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\list\hdr_michael_kv.h">\r
-      <Filter>container</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_dhp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_hp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_nogc.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_rcu_gpb.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_rcu_gpi.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_rcu_gpt.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_rcu_shb.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_rcu_sht.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_dhp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_hp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_list_rcu_gpb.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_list_rcu_gpi.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_list_rcu_gpt.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_list_rcu_shb.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_list_rcu_sht.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_michael_nogc.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_dhp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_hp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_dhp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_hp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_nogc.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_rcu_gpb.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_rcu_gpi.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_rcu_gpt.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_rcu_shb.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_rcu_sht.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_nogc.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_rcu_gpb.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_rcu_gpi.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_rcu_gpt.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_rcu_shb.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_rcu_sht.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_dhp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_hp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_dhp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_hp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_nogc.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_rcu_gpb.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_rcu_gpi.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_rcu_gpt.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_rcu_shb.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_kv_rcu_sht.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_nogc.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_rcu_gpb.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_rcu_gpi.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_rcu_gpt.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_rcu_shb.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_michael_rcu_sht.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_intrusive_lazy_nogc_unord.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_nogc_unord.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\list\hdr_lazy_kv_nogc_unord.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/hdr-test-map.vcxproj b/projects/Win/vc14/hdr-test-map.vcxproj
deleted file mode 100644 (file)
index af14a7b..0000000
+++ /dev/null
@@ -1,721 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{282E9A9A-386A-40FB-A483-994BACE24830}</ProjectGuid>\r
-    <RootNamespace>hdrtestmap</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_cuckoo_map.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_map.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_striped_map.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\print_skiplist_stat.h" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_cuckoo_map.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_boost_flat_map.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_boost_list.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_boost_map.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_boost_unordered_map.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_hashmap_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_list.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_map.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_slist.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_boost_flat_map.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_boost_list.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_boost_map.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_boost_unordered_map.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_hashmap_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_list.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_map.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_slist.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_map_reg.cpp" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/hdr-test-map.vcxproj.filters b/projects/Win/vc14/hdr-test-map.vcxproj.filters
deleted file mode 100644 (file)
index 2fe1b48..0000000
+++ /dev/null
@@ -1,239 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_cuckoo_map.cpp">\r
-      <Filter>cuckoo</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_hp.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_hp.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_nogc.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_nogc.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_boost_flat_map.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_boost_list.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_boost_map.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_boost_unordered_map.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_hashmap_std.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_list.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_map.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_refinable_hashmap_slist.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_hp.cpp">\r
-      <Filter>skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_hp.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_hp.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_nogc.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_nogc.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_boost_flat_map.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_boost_list.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_boost_map.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_boost_unordered_map.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_hashmap_std.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_list.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_map.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_hashmap_slist.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_rcu_gpb.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_rcu_gpi.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_rcu_gpt.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_rcu_gpb.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_rcu_gpi.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_rcu_gpt.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_rcu_gpb.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_rcu_gpi.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_rcu_gpt.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_rcu_gpb.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_rcu_gpi.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_rcu_gpt.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu_gpb.cpp">\r
-      <Filter>skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu_gpi.cpp">\r
-      <Filter>skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu_gpt.cpp">\r
-      <Filter>skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_nogc.cpp">\r
-      <Filter>skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_striped_map_reg.cpp">\r
-      <Filter>striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_rcu_shb.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_rcu_sht.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_rcu_shb.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_rcu_sht.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu_shb.cpp">\r
-      <Filter>skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu_sht.cpp">\r
-      <Filter>skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_rcu_shb.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_rcu_sht.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_rcu_shb.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_rcu_sht.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_dhp.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_michael_map_lazy_dhp.cpp">\r
-      <Filter>michael</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_dhp.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_splitlist_map_lazy_dhp.cpp">\r
-      <Filter>split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_dhp.cpp">\r
-      <Filter>skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_hp.cpp">\r
-      <Filter>multilvel_hashmap</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_dhp.cpp">\r
-      <Filter>multilvel_hashmap</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_rcu_gpb.cpp">\r
-      <Filter>multilvel_hashmap</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_rcu_gpi.cpp">\r
-      <Filter>multilvel_hashmap</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_rcu_gpt.cpp">\r
-      <Filter>multilvel_hashmap</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_rcu_shb.cpp">\r
-      <Filter>multilvel_hashmap</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap_rcu_sht.cpp">\r
-      <Filter>multilvel_hashmap</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_map.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\print_skiplist_stat.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map.h">\r
-      <Filter>skip_list</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_skiplist_map_rcu.h">\r
-      <Filter>skip_list</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_striped_map.h">\r
-      <Filter>striped</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_cuckoo_map.h">\r
-      <Filter>cuckoo</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\map\hdr_feldman_hashmap.h">\r
-      <Filter>multilvel_hashmap</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <Filter Include="cuckoo">\r
-      <UniqueIdentifier>{9cc8e982-b321-4a7d-8362-7f1491ad445d}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="michael">\r
-      <UniqueIdentifier>{c524c47b-2087-42eb-b3b2-f70ed379e373}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="striped">\r
-      <UniqueIdentifier>{33452d52-b86d-4143-9f87-bf154d53f890}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="skip_list">\r
-      <UniqueIdentifier>{1f7bd2f3-a377-47a5-aaae-aaddd60cbedc}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="split_list">\r
-      <UniqueIdentifier>{9318c3c0-92a3-4a5a-be2b-a47411a3e4c4}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="multilvel_hashmap">\r
-      <UniqueIdentifier>{cf81877d-3069-48a6-a143-2281963e9c4f}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/hdr-test-misc.vcxproj b/projects/Win/vc14/hdr-test-misc.vcxproj
deleted file mode 100644 (file)
index 722e136..0000000
+++ /dev/null
@@ -1,661 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{C5E76975-B87B-4B9E-8596-B01DDA683FCA}</ProjectGuid>\r
-    <RootNamespace>hdrtestmisc</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\misc\allocator_test.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\misc\bitop_st.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\misc\cxx11_atomic_class.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\misc\cxx11_atomic_func.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\misc\find_option.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\misc\hash_tuple.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\misc\michael_allocator.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\misc\split_bitstring.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\misc\thread_init_fini.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\misc\permutation_generator.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\misc\cxx11_convert_memory_order.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\misc\michael_allocator.h" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/hdr-test-priority_queue.vcxproj b/projects/Win/vc14/hdr-test-priority_queue.vcxproj
deleted file mode 100644 (file)
index c75d283..0000000
+++ /dev/null
@@ -1,659 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_fcpqueue_boost_stable_vector.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_fcpqueue_deque.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_fcpqueue_vector.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_intrusive_mspqueue_dyn.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_intrusive_mspqueue_static.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_mspqueue_dyn.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_mspqueue_static.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_priority_queue_reg.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\priority_queue\hdr_intrusive_pqueue.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\priority_queue\hdr_pqueue.h" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{90192F7D-5850-41dd-AE89-62D26B387162}</ProjectGuid>\r
-    <RootNamespace>hdrtestpriority_queue</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/hdr-test-priority_queue.vcxproj.filters b/projects/Win/vc14/hdr-test-priority_queue.vcxproj.filters
deleted file mode 100644 (file)
index 3a2eb19..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <Filter Include="intrusive">\r
-      <UniqueIdentifier>{2e5ccb52-5287-4912-8d3f-aeaf257134cd}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container">\r
-      <UniqueIdentifier>{d864adcf-d418-48b8-85be-6f4d39ac6941}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_priority_queue_reg.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_intrusive_mspqueue_dyn.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_intrusive_mspqueue_static.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_mspqueue_dyn.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_mspqueue_static.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_fcpqueue_boost_stable_vector.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_fcpqueue_deque.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\priority_queue\hdr_fcpqueue_vector.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\priority_queue\hdr_intrusive_pqueue.h">\r
-      <Filter>intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\priority_queue\hdr_pqueue.h">\r
-      <Filter>container</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/hdr-test-queue.vcxproj b/projects/Win/vc14/hdr-test-queue.vcxproj
deleted file mode 100644 (file)
index c13bb26..0000000
+++ /dev/null
@@ -1,682 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{33664E63-8D24-4FF4-A744-9782EB711509}</ProjectGuid>\r
-    <RootNamespace>hdrtestqueue</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_basketqueue_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_basketqueue_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_fcqueue.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_basketqueue_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_fcqueue.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_basketqueue_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_moirqueue_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_moirqueue_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_msqueue_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_msqueue_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_optimisticqueue_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_optimisticqueue_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_segmented_queue_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_segmented_queue_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_tsigas_cycle_queue.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_vyukovmpmc_cycle_queue.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_moirqueue_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_moirqueue_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_msqueue_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_msqueue_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_optimistic_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_optimistic_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_queue_register.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_rwqueue.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_segmented_queue_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_segmented_queue_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_tsigas_cycle_queue.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_vyukov_mpmc_cyclic.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_fcqueue.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_msqueue.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_segmented_queue.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_queue.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_segmented_queue.h" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/hdr-test-queue.vcxproj.filters b/projects/Win/vc14/hdr-test-queue.vcxproj.filters
deleted file mode 100644 (file)
index d75ac5e..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_fcqueue.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_basketqueue_hp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_fcqueue.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_moirqueue_hp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_msqueue_hp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_optimisticqueue_hp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_segmented_queue_hp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_tsigas_cycle_queue.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_vyukovmpmc_cycle_queue.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_rwqueue.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_segmented_queue_hp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_vyukov_mpmc_cyclic.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_moirqueue_dhp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_msqueue_dhp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_moirqueue_dhp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_moirqueue_hp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_msqueue_dhp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_msqueue_hp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_queue_register.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_basketqueue_dhp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_basketqueue_dhp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_basketqueue_hp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_optimisticqueue_dhp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_optimistic_dhp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_optimistic_hp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_segmented_queue_dhp.cpp">\r
-      <Filter>intrusive</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_segmented_queue_dhp.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_tsigas_cycle_queue.cpp">\r
-      <Filter>container</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_msqueue.h">\r
-      <Filter>intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_segmented_queue.h">\r
-      <Filter>intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_segmented_queue.h">\r
-      <Filter>container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_fcqueue.h">\r
-      <Filter>container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_queue.h">\r
-      <Filter>container</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <Filter Include="intrusive">\r
-      <UniqueIdentifier>{68aaf08b-6544-4d6a-b912-0935954efdf2}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container">\r
-      <UniqueIdentifier>{a466b6f6-2b88-4c6e-84df-1f9d53122909}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/hdr-test-set.vcxproj b/projects/Win/vc14/hdr-test-set.vcxproj
deleted file mode 100644 (file)
index da52746..0000000
+++ /dev/null
@@ -1,759 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}</ProjectGuid>\r
-    <RootNamespace>hdrtestset</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_set.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_set.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_set_rcu.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_set.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu.h" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_dhp_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_hp_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_nogc_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpb_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpi_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpt_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_shb_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_sht_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_dhp_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_hp_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_nogc_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpb_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpi_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpt_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_shb_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_sht_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_dhp_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_hp_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_nogc_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpb_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpi_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpt_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_shb_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_sht_lazy.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_nogc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_rcu_sht.cpp" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/hdr-test-set.vcxproj.filters b/projects/Win/vc14/hdr-test-set.vcxproj.filters
deleted file mode 100644 (file)
index 4b6cd72..0000000
+++ /dev/null
@@ -1,369 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_set.h">\r
-      <Filter>intrusive</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_set.h">\r
-      <Filter>container</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_set.h">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_set_rcu.h">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set.h">\r
-      <Filter>container\skip_list</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu.h">\r
-      <Filter>container\skip_list</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset.h">\r
-      <Filter>intrusive\feldman_hashset</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset.h">\r
-      <Filter>container\feldman_hashset</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <Filter Include="intrusive">\r
-      <UniqueIdentifier>{83622d26-addb-4c52-98b3-eaa62a1047b6}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container">\r
-      <UniqueIdentifier>{c0375a89-d67a-480a-83d2-d1cdd8d467e9}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="intrusive\michael_set">\r
-      <UniqueIdentifier>{4719fe70-337c-4740-931e-548d21a39466}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="intrusive\split_list">\r
-      <UniqueIdentifier>{7786d807-8092-4310-9109-945854d26048}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="intrusive\skip_list">\r
-      <UniqueIdentifier>{5b8a3b8a-27ad-49e7-9714-1859a842fd7f}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container\michael_set">\r
-      <UniqueIdentifier>{dc053424-ec8d-46a7-9236-6a75f4dc0ad5}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container\skip_list">\r
-      <UniqueIdentifier>{c1d0709e-ede1-4125-b4b8-eb3177ce05d2}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container\split_list">\r
-      <UniqueIdentifier>{61f94a40-c964-4233-af67-66a1be1e0aab}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="intrusive\feldman_hashset">\r
-      <UniqueIdentifier>{a878aed0-83c9-4ca7-95bb-74f10aad8bde}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container\feldman_hashset">\r
-      <UniqueIdentifier>{5268f225-1474-413e-a1cb-5f00b8df5e1e}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_hp.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_hp_lazy.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_nogc.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_nogc_lazy.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpb.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpb_lazy.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpi.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpi_lazy.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpt.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_gpt_lazy.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_hp.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_hp_member.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_hp.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_hp_lazy.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_nogc.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_nogc_lazy.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpb.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpb_lazy.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpi.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpi_lazy.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpt.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_gpt_lazy.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_hp.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_hp.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_nogc.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_rcu_gpi.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_rcu_gpt.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_nogc.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_rcu_gpb.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_rcu_gpi.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_rcu_gpt.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_hp.cpp">\r
-      <Filter>container\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_hp.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_hp.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_nogc.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_nogc.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpb.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpb_member.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpi.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpi_member.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpt.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_gpt_member.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu_gpb.cpp">\r
-      <Filter>container\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu_gpi.cpp">\r
-      <Filter>container\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu_gpt.cpp">\r
-      <Filter>container\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_nogc.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_nogc_member.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_nogc.cpp">\r
-      <Filter>container\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_shb.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_shb_lazy.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_sht.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_rcu_sht_lazy.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_shb.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_shb_member.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_sht.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_rcu_sht_member.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_shb.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_shb_lazy.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_sht.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_rcu_sht_lazy.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_rcu_shb.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_rcu_sht.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_rcu_shb.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_rcu_sht.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu_shb.cpp">\r
-      <Filter>container\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_rcu_sht.cpp">\r
-      <Filter>container\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_rcu_shb.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_rcu_sht.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_rcu_shb.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_rcu_sht.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_dhp.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_michael_set_dhp_lazy.cpp">\r
-      <Filter>intrusive\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_dhp.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_dhp.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_michael_set_lazy_rcu_gpb.cpp">\r
-      <Filter>container\michael_set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_dhp.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_dhp.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_dhp.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_splitlist_set_dhp_lazy.cpp">\r
-      <Filter>intrusive\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_rcu_gpb.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_rcu_gpi.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_lazy_rcu_gpt.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_rcu_gpb.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_rcu_gpi.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_splitlist_set_rcu_gpt.cpp">\r
-      <Filter>container\split_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_dhp.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_skiplist_dhp_member.cpp">\r
-      <Filter>intrusive\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_skiplist_set_dhp.cpp">\r
-      <Filter>container\skip_list</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_hp.cpp">\r
-      <Filter>intrusive\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_dhp.cpp">\r
-      <Filter>intrusive\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_hp.cpp">\r
-      <Filter>container\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_dhp.cpp">\r
-      <Filter>container\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_rcu_gpi.cpp">\r
-      <Filter>intrusive\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_rcu_gpb.cpp">\r
-      <Filter>intrusive\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_rcu_gpt.cpp">\r
-      <Filter>intrusive\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_rcu_shb.cpp">\r
-      <Filter>intrusive\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_feldman_hashset_rcu_sht.cpp">\r
-      <Filter>intrusive\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_rcu_gpi.cpp">\r
-      <Filter>container\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_rcu_gpb.cpp">\r
-      <Filter>container\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_rcu_gpt.cpp">\r
-      <Filter>container\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_rcu_shb.cpp">\r
-      <Filter>container\feldman_hashset</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_feldman_hashset_rcu_sht.cpp">\r
-      <Filter>container\feldman_hashset</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/hdr-test-stack.vcxproj b/projects/Win/vc14/hdr-test-stack.vcxproj
deleted file mode 100644 (file)
index fe9ef08..0000000
+++ /dev/null
@@ -1,661 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{E3F2927A-6ED6-4B18-BDE6-B3B760E1AF18}</ProjectGuid>\r
-    <RootNamespace>hdrteststack</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_treiber_stack.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\stack\hdr_treiber_stack.h" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_elimination_stack_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_elimination_stack_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_fcstack.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_elimination_stack_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_elimination_stack_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_fcstack.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_treiber_stack_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_intrusive_treiber_stack_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_treiber_stack_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\stack\hdr_treiber_stack_hp.cpp" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/hdr-test-striped-set.vcxproj b/projects/Win/vc14/hdr-test-striped-set.vcxproj
deleted file mode 100644 (file)
index f6fd97d..0000000
+++ /dev/null
@@ -1,696 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_cuckoo_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_cuckoo_refinable_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_cuckoo_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_avlset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_list.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_sgset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_slist.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_splayset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_treapset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_uset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_avlset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_list.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_sgset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_slist.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_splayset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_treapset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_uset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_flat_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_list.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_stable_vector.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_unordered_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_vector.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_hashset_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_list.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_slist.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_vector.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_flat_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_list.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_stable_vector.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_unordered_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_vector.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_hashset_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_list.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_set.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_slist.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_vector.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_cuckoo_set.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_cuckoo_set.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_set.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_striped_set.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\intrusive_cuckoo_set_common.h" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{A38E5597-6916-4480-A343-C9846EF544E4}</ProjectGuid>\r
-    <RootNamespace>hdrteststripedset</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/hdr-test-striped-set.vcxproj.filters b/projects/Win/vc14/hdr-test-striped-set.vcxproj.filters
deleted file mode 100644 (file)
index 80351d3..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <Filter Include="container">\r
-      <UniqueIdentifier>{4061d7f1-7ab8-4624-adb0-b4533e05a932}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="intrusive">\r
-      <UniqueIdentifier>{718f3de0-3b1c-4245-944c-0a56f288c6f7}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="intrusive\cuckoo">\r
-      <UniqueIdentifier>{db3df5e9-9ef5-407f-821d-e25b9cc70082}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="intrusive\striped">\r
-      <UniqueIdentifier>{0147ba57-0ecc-4674-8d7b-7492054d3a48}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container\cuckoo">\r
-      <UniqueIdentifier>{ee3a372b-70df-47e6-bade-e7c4d1de7ec3}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container\striped">\r
-      <UniqueIdentifier>{4c811e47-74dd-436d-93f7-686f35980069}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_cuckoo_refinable_set.cpp">\r
-      <Filter>intrusive\cuckoo</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_cuckoo_set.cpp">\r
-      <Filter>intrusive\cuckoo</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_avlset.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_list.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_set.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_sgset.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_slist.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_splayset.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_treapset.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_refinable_hashset_uset.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_avlset.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_list.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_set.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_sgset.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_slist.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_splayset.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_treapset.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_hashset_uset.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_set.cpp">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_cuckoo_set.cpp">\r
-      <Filter>container\cuckoo</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_flat_set.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_list.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_set.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_stable_vector.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_unordered_set.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_boost_vector.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_hashset_std.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_list.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_set.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_slist.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_refinable_hashset_vector.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_flat_set.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_list.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_set.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_stable_vector.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_unordered_set.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_boost_vector.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_hashset_std.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_list.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_set.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_slist.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\set\hdr_striped_hashset_vector.cpp">\r
-      <Filter>container\striped</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_cuckoo_set.h">\r
-      <Filter>intrusive\cuckoo</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\intrusive_cuckoo_set_common.h">\r
-      <Filter>intrusive\cuckoo</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_intrusive_striped_set.h">\r
-      <Filter>intrusive\striped</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_cuckoo_set.h">\r
-      <Filter>container\cuckoo</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\set\hdr_striped_set.h">\r
-      <Filter>container\striped</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/hdr-test-tree.vcxproj b/projects/Win/vc14/hdr-test-tree.vcxproj
deleted file mode 100644 (file)
index 079fca4..0000000
+++ /dev/null
@@ -1,695 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{6F834EAD-7B94-4979-A0F1-A662E3D30145}</ProjectGuid>\r
-    <RootNamespace>hdrtesttree</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;NOMINMAX;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;NOMINMAX;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Full</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <OmitFramePointers>false</OmitFramePointers>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <EnablePREfast>false</EnablePREfast>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <Profile>true</Profile>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <CallingConvention>Cdecl</CallingConvention>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_bintree.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_pool_dhp.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_pool_hp.h" />\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_pool_rcu.h" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpb_pool_monitor.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpi_pool_monitor.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpt_pool_monitor.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_shb_pool_monitor.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_sht_pool_monitor.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_dhp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_dhp_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_hp.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_hp_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpb_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpi.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpi_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpt.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpt_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_shb.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_shb_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_sht.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_sht_member.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_tree_reg.cpp" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/hdr-test-tree.vcxproj.filters b/projects/Win/vc14/hdr-test-tree.vcxproj.filters
deleted file mode 100644 (file)
index eab1bba..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <Filter Include="container">\r
-      <UniqueIdentifier>{dec34594-a06a-4ed8-9792-fbc6b2a251f5}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="intrusive">\r
-      <UniqueIdentifier>{a13910ed-6cb1-46bc-a137-7da531e65e3a}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container\ellen-bintree-set">\r
-      <UniqueIdentifier>{e2f66f2f-4770-4533-86f0-75fe68a263ab}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container\bronson-avltree-map">\r
-      <UniqueIdentifier>{36cb9dc5-7022-42bd-a68d-db247368092f}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="container\ellen-bintree-map">\r
-      <UniqueIdentifier>{c47142c5-b407-4938-94f6-49f43f192890}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="intrusive\ellen-bintree-set">\r
-      <UniqueIdentifier>{af39cad7-51ab-4d41-ae94-d02f650314da}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map.h">\r
-      <Filter>container\bronson-avltree-map</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set.h">\r
-      <Filter>container\ellen-bintree-set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map.h">\r
-      <Filter>container\ellen-bintree-map</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_bintree.h">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_pool_dhp.h">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_pool_hp.h">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_pool_rcu.h">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_tree_reg.cpp" />\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpb.cpp">\r
-      <Filter>container\bronson-avltree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpb_pool_monitor.cpp">\r
-      <Filter>container\bronson-avltree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpi.cpp">\r
-      <Filter>container\bronson-avltree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpi_pool_monitor.cpp">\r
-      <Filter>container\bronson-avltree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpt.cpp">\r
-      <Filter>container\bronson-avltree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_gpt_pool_monitor.cpp">\r
-      <Filter>container\bronson-avltree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_shb.cpp">\r
-      <Filter>container\bronson-avltree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_shb_pool_monitor.cpp">\r
-      <Filter>container\bronson-avltree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_sht.cpp">\r
-      <Filter>container\bronson-avltree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_bronson_avltree_map_rcu_sht_pool_monitor.cpp">\r
-      <Filter>container\bronson-avltree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_dhp.cpp">\r
-      <Filter>container\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_hp.cpp">\r
-      <Filter>container\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_rcu_gpb.cpp">\r
-      <Filter>container\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_rcu_gpi.cpp">\r
-      <Filter>container\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_rcu_gpt.cpp">\r
-      <Filter>container\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_rcu_shb.cpp">\r
-      <Filter>container\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_set_rcu_sht.cpp">\r
-      <Filter>container\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_dhp.cpp">\r
-      <Filter>container\ellen-bintree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_hp.cpp">\r
-      <Filter>container\ellen-bintree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_rcu_gpb.cpp">\r
-      <Filter>container\ellen-bintree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_rcu_gpi.cpp">\r
-      <Filter>container\ellen-bintree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_rcu_gpt.cpp">\r
-      <Filter>container\ellen-bintree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_rcu_shb.cpp">\r
-      <Filter>container\ellen-bintree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_ellenbintree_map_rcu_sht.cpp">\r
-      <Filter>container\ellen-bintree-map</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_dhp.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_dhp_member.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_hp.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_hp_member.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpb.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpb_member.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpi.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpi_member.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpt.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_gpt_member.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_shb.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_shb_member.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_sht.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\test-hdr\tree\hdr_intrusive_ellen_bintree_rcu_sht_member.cpp">\r
-      <Filter>intrusive\ellen-bintree-set</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-framework.vcxproj b/projects/Win/vc14/stress-framework.vcxproj
new file mode 100644 (file)
index 0000000..f4de7a0
--- /dev/null
@@ -0,0 +1,274 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="DebugVLD|Win32">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DebugVLD|x64">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\include\cds_test\stress_test.h" />\r
+    <ClInclude Include="..\..\..\test\stress\framework\ellen_bintree_update_desc_pool.h" />\r
+    <ClInclude Include="..\..\..\test\stress\framework\michael_alloc.h" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\stress\framework\city.cpp">\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4267</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4267</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4267</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4267</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4267</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4267</DisableSpecificWarnings>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\stress\framework\config.cpp" />\r
+    <ClCompile Include="..\..\..\test\stress\framework\ellen_bintree_update_desc_pool.cpp" />\r
+    <ClCompile Include="..\..\..\test\stress\framework\michael_alloc.cpp" />\r
+    <ClCompile Include="..\..\..\test\stress\framework\stress_test.cpp" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <CustomBuild Include="..\..\..\test\stress\data\text.txt">\r
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
+      <Command Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
+      <Command Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Build text dictionary</Message>\r
+      <Message Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">Build text dictionary</Message>\r
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Build text dictionary</Message>\r
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Build text dictionary</Message>\r
+      <Message Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">Build text dictionary</Message>\r
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Build text dictionary</Message>\r
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
+    </CustomBuild>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{A34CED07-A442-4FA1-81C4-F8B9CD3C832B}</ProjectGuid>\r
+    <Keyword>Win32Proj</Keyword>\r
+    <RootNamespace>stack</RootNamespace>\r
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Label="Shared">\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-framework.vcxproj.filters b/projects/Win/vc14/stress-framework.vcxproj.filters
new file mode 100644 (file)
index 0000000..a757333
--- /dev/null
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup>\r
+    <Filter Include="Source Files">\r
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r
+    </Filter>\r
+    <Filter Include="Header Files">\r
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\r
+    </Filter>\r
+    <Filter Include="Resource Files">\r
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r
+    </Filter>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\include\cds_test\stress_test.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\stress\framework\michael_alloc.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\stress\framework\ellen_bintree_update_desc_pool.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\stress\framework\config.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\stress\framework\city.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\stress\framework\stress_test.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\stress\framework\michael_alloc.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\stress\framework\ellen_bintree_update_desc_pool.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <CustomBuild Include="..\..\..\test\stress\data\text.txt" />\r
+  </ItemGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-map-delodd.vcxproj b/projects/Win/vc14/stress-map-delodd.vcxproj
new file mode 100644 (file)
index 0000000..3a92549
--- /dev/null
@@ -0,0 +1,271 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DebugVLD|Win32">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DebugVLD|x64">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\delodd\map_delodd.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\delodd\map_delodd_bronsonavltree.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\delodd\map_delodd_cuckoo.cpp">
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\delodd\map_delodd_ellentree.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\delodd\map_delodd_feldman_hashset.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\delodd\map_delodd_michael.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\delodd\map_delodd_skip.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\delodd\map_delodd_split.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\map\delodd\map_delodd.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\map\delodd\CMakeLists.txt" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{DD432BE7-0CA8-47C6-B861-943A036C18EF}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>stress_map_delodd</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+    <ProjectName>stress-map-delodd</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-map-delodd.vcxproj.filters b/projects/Win/vc14/stress-map-delodd.vcxproj.filters
new file mode 100644 (file)
index 0000000..19954da
--- /dev/null
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\delodd\map_delodd.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\delodd\map_delodd_michael.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\delodd\map_delodd_cuckoo.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\delodd\map_delodd_ellentree.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\delodd\map_delodd_bronsonavltree.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\delodd\map_delodd_feldman_hashset.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\delodd\map_delodd_skip.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\delodd\map_delodd_split.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\map\delodd\map_delodd.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\map\delodd\CMakeLists.txt" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-map-find_int.vcxproj b/projects/Win/vc14/stress-map-find_int.vcxproj
new file mode 100644 (file)
index 0000000..65d0f60
--- /dev/null
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DebugVLD|Win32">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DebugVLD|x64">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\find_int\map_find_int.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\find_int\map_find_int_bronsonavltree.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\find_int\map_find_int_cuckoo.cpp">
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_int\map_find_int_ellentree.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\find_int\map_find_int_feldman_hashset.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\find_int\map_find_int_michael.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\find_int\map_find_int_skip.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\find_int\map_find_int_split.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_int\map_find_int_std.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\find_int\map_find_int_striped.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\map\find_int\map_find_int.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\map\find_int\CMakeLists.txt" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{3F36B97B-8028-4335-ADDD-20B6B81F87AF}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>stress_map_find_int</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+    <ProjectName>stress-map-find_int</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-map-find_int.vcxproj.filters b/projects/Win/vc14/stress-map-find_int.vcxproj.filters
new file mode 100644 (file)
index 0000000..86d671d
--- /dev/null
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_int\map_find_int.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_int\map_find_int_bronsonavltree.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_int\map_find_int_cuckoo.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_int\map_find_int_ellentree.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_int\map_find_int_feldman_hashset.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_int\map_find_int_michael.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_int\map_find_int_skip.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_int\map_find_int_split.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_int\map_find_int_std.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_int\map_find_int_striped.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\map\find_int\map_find_int.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\map\find_int\CMakeLists.txt" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-map-find_string.vcxproj b/projects/Win/vc14/stress-map-find_string.vcxproj
new file mode 100644 (file)
index 0000000..35c6318
--- /dev/null
@@ -0,0 +1,287 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DebugVLD|Win32">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DebugVLD|x64">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\find_string\map_find_string.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\find_string\map_find_string_bronsonavltree.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\find_string\map_find_string_cuckoo.cpp">
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_string\map_find_string_ellentree.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_string\map_find_string_feldman_hashset.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\find_string\map_find_string_michael.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\find_string\map_find_string_skip.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\find_string\map_find_string_split.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_string\map_find_string_std.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\find_string\map_find_string_striped.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\map\find_string\CMakeLists.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\map\find_string\map_find_string.h" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{C127CD80-E8A7-47E4-B7EC-1709D2188982}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>stress_map_find_string</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+    <ProjectName>stress-map-find_string</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-map-find_string.vcxproj.filters b/projects/Win/vc14/stress-map-find_string.vcxproj.filters
new file mode 100644 (file)
index 0000000..4d4f2b6
--- /dev/null
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_string\map_find_string.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_string\map_find_string_bronsonavltree.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_string\map_find_string_cuckoo.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_string\map_find_string_ellentree.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_string\map_find_string_feldman_hashset.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_string\map_find_string_michael.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_string\map_find_string_skip.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_string\map_find_string_split.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_string\map_find_string_std.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\find_string\map_find_string_striped.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\map\find_string\CMakeLists.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\map\find_string\map_find_string.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-map-insdel-func.vcxproj b/projects/Win/vc14/stress-map-insdel-func.vcxproj
new file mode 100644 (file)
index 0000000..cc82ac0
--- /dev/null
@@ -0,0 +1,272 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DebugVLD|Win32">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DebugVLD|x64">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_func\map_insdel_func.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_func\map_insdel_func_bronsonavltree.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_func\map_insdel_func_cuckoo.cpp">
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_func\map_insdel_func_ellentree.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_func\map_insdel_func_feldman_hashset.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_func\map_insdel_func_michael.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_func\map_insdel_func_skip.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_func\map_insdel_func_split.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_func\map_insdel_func_striped.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\map\insdel_func\map_insdel_func.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\map\insdel_func\CMakeLists.txt" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{34FA4110-F17B-4AD0-A4C9-C91B92AD06E4}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>stress_map_insdel_func</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+    <ProjectName>stress-map-insdel-func</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-map-insdel-func.vcxproj.filters b/projects/Win/vc14/stress-map-insdel-func.vcxproj.filters
new file mode 100644 (file)
index 0000000..05f8564
--- /dev/null
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_func\map_insdel_func.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_func\map_insdel_func_bronsonavltree.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_func\map_insdel_func_cuckoo.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_func\map_insdel_func_ellentree.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_func\map_insdel_func_feldman_hashset.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_func\map_insdel_func_michael.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_func\map_insdel_func_skip.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_func\map_insdel_func_split.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_func\map_insdel_func_striped.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\map\insdel_func\map_insdel_func.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\map\insdel_func\CMakeLists.txt" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-map-insdel-int.vcxproj b/projects/Win/vc14/stress-map-insdel-int.vcxproj
new file mode 100644 (file)
index 0000000..722dd33
--- /dev/null
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DebugVLD|Win32">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DebugVLD|x64">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_int\map_insdel_int.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_int\map_insdel_int_bronsonavltree.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_int\map_insdel_int_cuckoo.cpp">
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_int\map_insdel_int_ellentree.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_int\map_insdel_int_feldman_hashset.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_int\map_insdel_int_michael.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_int\map_insdel_int_skip.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_int\map_insdel_int_split.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_int\map_insdel_int_std.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_int\map_insdel_int_striped.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\map\insdel_int\map_insdel_int.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\map\insdel_int\CMakeLists.txt" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{46649F79-2919-4B4C-B243-08C724901F58}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>stress_map_insdel_int</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+    <ProjectName>stress-map-insdel-int</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-map-insdel-int.vcxproj.filters b/projects/Win/vc14/stress-map-insdel-int.vcxproj.filters
new file mode 100644 (file)
index 0000000..6d2e302
--- /dev/null
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_int\map_insdel_int.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_int\map_insdel_int_bronsonavltree.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_int\map_insdel_int_cuckoo.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_int\map_insdel_int_ellentree.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_int\map_insdel_int_feldman_hashset.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_int\map_insdel_int_michael.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_int\map_insdel_int_skip.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_int\map_insdel_int_split.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_int\map_insdel_int_striped.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_int\map_insdel_int_std.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\map\insdel_int\map_insdel_int.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\map\insdel_int\CMakeLists.txt" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-map-insdel-item-int.vcxproj b/projects/Win/vc14/stress-map-insdel-item-int.vcxproj
new file mode 100644 (file)
index 0000000..51ced9e
--- /dev/null
@@ -0,0 +1,272 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DebugVLD|Win32">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DebugVLD|x64">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_item_int\map_insdel_item_int.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_item_int\map_insdel_item_int_bronsonavltree.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_item_int\map_insdel_item_int_cuckoo.cpp">
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_item_int\map_insdel_item_int_ellentree.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_item_int\map_insdel_item_int_feldman_hashset.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_item_int\map_insdel_item_int_michael.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_item_int\map_insdel_item_int_skip.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_item_int\map_insdel_item_int_split.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_item_int\map_insdel_item_int_striped.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\map\insdel_item_int\map_insdel_item_int.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\map\insdel_item_int\CMakeLists.txt" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{50387CA5-F5B2-4C40-ACFD-FC3C9EE2CD6B}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>stress_map_insdel_item_int</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+    <ProjectName>stress-map-insdel-item-int</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-map-insdel-item-int.vcxproj.filters b/projects/Win/vc14/stress-map-insdel-item-int.vcxproj.filters
new file mode 100644 (file)
index 0000000..76b18d0
--- /dev/null
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_item_int\map_insdel_item_int.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_item_int\map_insdel_item_int_bronsonavltree.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_item_int\map_insdel_item_int_cuckoo.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_item_int\map_insdel_item_int_ellentree.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_item_int\map_insdel_item_int_feldman_hashset.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_item_int\map_insdel_item_int_michael.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_item_int\map_insdel_item_int_skip.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_item_int\map_insdel_item_int_split.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_item_int\map_insdel_item_int_striped.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\map\insdel_item_int\map_insdel_item_int.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\map\insdel_item_int\CMakeLists.txt" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-map-insdel-string.vcxproj b/projects/Win/vc14/stress-map-insdel-string.vcxproj
new file mode 100644 (file)
index 0000000..0fd8dbb
--- /dev/null
@@ -0,0 +1,280 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DebugVLD|Win32">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DebugVLD|x64">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_string\map_insdel_string.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_string\map_insdel_string_bronsonavltree.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_string\map_insdel_string_cuckoo.cpp">
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_string\map_insdel_string_ellentree.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_string\map_insdel_string_feldman_hashset.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_string\map_insdel_string_michael.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_string\map_insdel_string_skip.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_string\map_insdel_string_split.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_string\map_insdel_string_std.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdel_string\map_insdel_string_striped.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\map\insdel_string\map_insdel_string.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\map\insdel_string\CMakeLists.txt" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{2D0E651D-058D-4D69-9A44-12149E6CA5BE}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>stress_map_insdel_string</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+    <ProjectName>stress-map-insdel-string</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-map-insdel-string.vcxproj.filters b/projects/Win/vc14/stress-map-insdel-string.vcxproj.filters
new file mode 100644 (file)
index 0000000..b2a3f67
--- /dev/null
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_string\map_insdel_string.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_string\map_insdel_string_bronsonavltree.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_string\map_insdel_string_cuckoo.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_string\map_insdel_string_ellentree.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_string\map_insdel_string_feldman_hashset.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_string\map_insdel_string_michael.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_string\map_insdel_string_skip.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_string\map_insdel_string_split.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_string\map_insdel_string_std.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdel_string\map_insdel_string_striped.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\map\insdel_string\map_insdel_string.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\map\insdel_string\CMakeLists.txt" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-map-insdelfind.vcxproj b/projects/Win/vc14/stress-map-insdelfind.vcxproj
new file mode 100644 (file)
index 0000000..6f7fb2b
--- /dev/null
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DebugVLD|Win32">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DebugVLD|x64">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdelfind\map_insdelfind.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdelfind\map_insdelfind_bronsonavltree.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdelfind\map_insdelfind_cuckoo.cpp">
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdelfind\map_insdelfind_ellentree.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdelfind\map_insdelfind_feldman_hashset.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdelfind\map_insdelfind_michael.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdelfind\map_insdelfind_skip.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdelfind\map_insdelfind_split.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdelfind\map_insdelfind_std.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insdelfind\map_insdelfind_striped.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\map\insdelfind\map_insdelfind.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\map\insdelfind\CMakeLists.txt" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{1BB746AC-7856-4E59-9430-51177621DC35}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>stress_map_insdelfind</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+    <ProjectName>stress-map-insdelfind</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-map-insdelfind.vcxproj.filters b/projects/Win/vc14/stress-map-insdelfind.vcxproj.filters
new file mode 100644 (file)
index 0000000..7ad17bf
--- /dev/null
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdelfind\map_insdelfind_bronsonavltree.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdelfind\map_insdelfind_cuckoo.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdelfind\map_insdelfind_ellentree.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdelfind\map_insdelfind_feldman_hashset.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdelfind\map_insdelfind_michael.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdelfind\map_insdelfind_skip.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdelfind\map_insdelfind_split.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdelfind\map_insdelfind_std.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdelfind\map_insdelfind_striped.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insdelfind\map_insdelfind.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\map\insdelfind\map_insdelfind.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\map\insdelfind\CMakeLists.txt" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-map-insfind-int.vcxproj b/projects/Win/vc14/stress-map-insfind-int.vcxproj
new file mode 100644 (file)
index 0000000..0867818
--- /dev/null
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DebugVLD|Win32">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DebugVLD|x64">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insfind_int\map_insfind.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insfind_int\map_insfind_bronsonavltree.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insfind_int\map_insfind_cuckoo.cpp">
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insfind_int\map_insfind_ellentree.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insfind_int\map_insfind_feldman_hashset.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insfind_int\map_insfind_michael.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insfind_int\map_insfind_skip.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insfind_int\map_insfind_split.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insfind_int\map_insfind_std.cpp" />
+    <ClCompile Include="..\..\..\test\stress\map\insfind_int\map_insfind_striped.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\map\insfind_int\map_insfind_int.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\map\insfind_int\CMakeLists.txt" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{24DF3B87-387E-4EFC-BDE0-8DAD279FE19A}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>stress_map_insfind_int</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+    <ProjectName>stress-map-insfind-int</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-map-insfind-int.vcxproj.filters b/projects/Win/vc14/stress-map-insfind-int.vcxproj.filters
new file mode 100644 (file)
index 0000000..4cf6393
--- /dev/null
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insfind_int\map_insfind.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insfind_int\map_insfind_bronsonavltree.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insfind_int\map_insfind_cuckoo.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insfind_int\map_insfind_ellentree.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insfind_int\map_insfind_feldman_hashset.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insfind_int\map_insfind_michael.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insfind_int\map_insfind_skip.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insfind_int\map_insfind_split.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insfind_int\map_insfind_std.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\map\insfind_int\map_insfind_striped.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\map\insfind_int\map_insfind_int.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\map\insfind_int\CMakeLists.txt" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-pqueue.vcxproj b/projects/Win/vc14/stress-pqueue.vcxproj
new file mode 100644 (file)
index 0000000..3c32f12
--- /dev/null
@@ -0,0 +1,251 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="DebugVLD|Win32">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DebugVLD|x64">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\stress\pqueue\item.h" />\r
+    <ClInclude Include="..\..\..\test\stress\pqueue\pqueue_type.h" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\stress\main.cpp">\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">CDSUNIT_USE_URCU;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">CDSUNIT_USE_URCU;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CDSUNIT_USE_URCU;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">CDSUNIT_USE_URCU;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">CDSUNIT_USE_URCU;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">CDSUNIT_USE_URCU;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\stress\pqueue\pop.cpp" />\r
+    <ClCompile Include="..\..\..\test\stress\pqueue\push.cpp" />\r
+    <ClCompile Include="..\..\..\test\stress\pqueue\push_pop.cpp" />\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{51AC349E-B365-4FCF-8778-17A1534E4584}</ProjectGuid>\r
+    <Keyword>Win32Proj</Keyword>\r
+    <RootNamespace>stress_pqueue</RootNamespace>\r
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
+    <ProjectName>stress-pqueue</ProjectName>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Label="Shared">\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-pqueue.vcxproj.filters b/projects/Win/vc14/stress-pqueue.vcxproj.filters
new file mode 100644 (file)
index 0000000..aa96454
--- /dev/null
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup>\r
+    <Filter Include="Source Files">\r
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r
+    </Filter>\r
+    <Filter Include="Header Files">\r
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\r
+    </Filter>\r
+    <Filter Include="Resource Files">\r
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r
+    </Filter>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\stress\pqueue\pqueue_type.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\stress\pqueue\item.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\stress\main.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\stress\pqueue\pop.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\stress\pqueue\push.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\stress\pqueue\push_pop.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-queue.vcxproj b/projects/Win/vc14/stress-queue.vcxproj
new file mode 100644 (file)
index 0000000..5dc0300
--- /dev/null
@@ -0,0 +1,256 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="DebugVLD|Win32">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DebugVLD|x64">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\stress\main.cpp" />\r
+    <ClCompile Include="..\..\..\test\stress\queue\bounded_queue_fulness.cpp" />\r
+    <ClCompile Include="..\..\..\test\stress\queue\intrusive_push_pop.cpp" />\r
+    <ClCompile Include="..\..\..\test\stress\queue\pop.cpp" />\r
+    <ClCompile Include="..\..\..\test\stress\queue\push.cpp" />\r
+    <ClCompile Include="..\..\..\test\stress\queue\push_pop.cpp">\r
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>\r
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>\r
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>\r
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>\r
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>\r
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\stress\queue\random.cpp" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\stress\queue\intrusive_queue_type.h" />\r
+    <ClInclude Include="..\..\..\test\stress\queue\print_stat.h" />\r
+    <ClInclude Include="..\..\..\test\stress\queue\queue_type.h" />\r
+    <ClInclude Include="..\..\..\test\stress\queue\std_queue.h" />\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{50B2EC4B-A118-4E7B-ABC7-2EA8B685A58C}</ProjectGuid>\r
+    <Keyword>Win32Proj</Keyword>\r
+    <RootNamespace>stress_queue</RootNamespace>\r
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
+    <ProjectName>stress-queue</ProjectName>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Label="Shared">\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-queue.vcxproj.filters b/projects/Win/vc14/stress-queue.vcxproj.filters
new file mode 100644 (file)
index 0000000..f65383d
--- /dev/null
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup>\r
+    <Filter Include="Source Files">\r
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r
+    </Filter>\r
+    <Filter Include="Header Files">\r
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\r
+    </Filter>\r
+    <Filter Include="Resource Files">\r
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r
+    </Filter>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\stress\main.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\stress\queue\push.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\stress\queue\pop.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\stress\queue\push_pop.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\stress\queue\random.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\stress\queue\bounded_queue_fulness.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\stress\queue\intrusive_push_pop.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\stress\queue\queue_type.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\stress\queue\std_queue.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\stress\queue\intrusive_queue_type.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\stress\queue\print_stat.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+  </ItemGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-set-delodd.vcxproj b/projects/Win/vc14/stress-set-delodd.vcxproj
new file mode 100644 (file)
index 0000000..f1b71ec
--- /dev/null
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DebugVLD|Win32">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DebugVLD|x64">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\delodd\set_delodd.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\delodd\set_delodd_cuckoo.cpp">
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\delodd\set_delodd_ellentree.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\delodd\set_delodd_feldman_hashset.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\delodd\set_delodd_michael.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\delodd\set_delodd_skip.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\delodd\set_delodd_split.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\set\delodd\set_delodd.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\set\delodd\CMakeLists.txt" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{8202D428-1E08-4744-B372-6B2E83A9928E}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>stress_set_delodd</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+    <ProjectName>stress-set-delodd</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-set-delodd.vcxproj.filters b/projects/Win/vc14/stress-set-delodd.vcxproj.filters
new file mode 100644 (file)
index 0000000..ddeafeb
--- /dev/null
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\delodd\set_delodd.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\delodd\set_delodd_michael.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\delodd\set_delodd_split.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\delodd\set_delodd_skip.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\delodd\set_delodd_ellentree.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\delodd\set_delodd_feldman_hashset.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\delodd\set_delodd_cuckoo.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\set\delodd\set_delodd.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\set\delodd\CMakeLists.txt" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-set-insdel_func.vcxproj b/projects/Win/vc14/stress-set-insdel_func.vcxproj
new file mode 100644 (file)
index 0000000..0aced87
--- /dev/null
@@ -0,0 +1,271 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DebugVLD|Win32">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DebugVLD|x64">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\insdel_func\set_insdel_func.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\insdel_func\set_insdel_func_cuckoo.cpp">
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_func\set_insdel_func_ellentree.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\insdel_func\set_insdel_func_feldman_hashset.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\insdel_func\set_insdel_func_michael.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\insdel_func\set_insdel_func_skip.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\insdel_func\set_insdel_func_split.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_func\set_insdel_func_striped.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\set\insdel_func\set_insdel_func.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\set\insdel_func\CMakeLists.txt" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{EE7A269E-83E4-402B-9C79-85058826E81E}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>stress_set_insdel_func</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+    <ProjectName>stress-set-insdel-func</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-set-insdel_func.vcxproj.filters b/projects/Win/vc14/stress-set-insdel_func.vcxproj.filters
new file mode 100644 (file)
index 0000000..39278ed
--- /dev/null
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_func\set_insdel_func.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_func\set_insdel_func_cuckoo.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_func\set_insdel_func_ellentree.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_func\set_insdel_func_feldman_hashset.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_func\set_insdel_func_michael.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_func\set_insdel_func_skip.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_func\set_insdel_func_split.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_func\set_insdel_func_striped.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\set\insdel_func\set_insdel_func.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\set\insdel_func\CMakeLists.txt" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-set-insdel_string.vcxproj b/projects/Win/vc14/stress-set-insdel_string.vcxproj
new file mode 100644 (file)
index 0000000..4c22fc7
--- /dev/null
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DebugVLD|Win32">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DebugVLD|x64">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\insdel_string\set_insdel_string.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\insdel_string\set_insdel_string_cuckoo.cpp">
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_string\set_insdel_string_ellentree.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_string\set_insdel_string_feldman_hashset.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\insdel_string\set_insdel_string_michael.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\insdel_string\set_insdel_string_skip.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\insdel_string\set_insdel_string_split.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_string\set_insdel_string_std.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\insdel_string\set_insdel_string_striped.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\set\insdel_string\set_insdel_string.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\set\insdel_string\CMakeLists.txt" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{937D82C6-92AB-4C58-ACE8-F88E7063BFA9}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>stress_set_insdel_string</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+    <ProjectName>stress-set-insdel-string</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-set-insdel_string.vcxproj.filters b/projects/Win/vc14/stress-set-insdel_string.vcxproj.filters
new file mode 100644 (file)
index 0000000..9e1bf0e
--- /dev/null
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_string\set_insdel_string.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_string\set_insdel_string_michael.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_string\set_insdel_string_cuckoo.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_string\set_insdel_string_ellentree.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_string\set_insdel_string_feldman_hashset.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_string\set_insdel_string_skip.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_string\set_insdel_string_split.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_string\set_insdel_string_striped.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_string\set_insdel_string_std.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\set\insdel_string\set_insdel_string.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\set\insdel_string\CMakeLists.txt" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-set-insdelfind.vcxproj b/projects/Win/vc14/stress-set-insdelfind.vcxproj
new file mode 100644 (file)
index 0000000..c760a82
--- /dev/null
@@ -0,0 +1,268 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DebugVLD|Win32">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DebugVLD|x64">
+      <Configuration>DebugVLD</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\insdel_find\set_insdelfind.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\insdel_find\set_insdelfind_cuckoo.cpp">
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_find\set_insdelfind_ellentree.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\insdel_find\set_insdelfind_feldman_hashset.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\insdel_find\set_insdelfind_michael.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\insdel_find\set_insdelfind_skip.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\insdel_find\set_insdelfind_split.cpp">
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">4503</DisableSpecificWarnings>
+      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4503</DisableSpecificWarnings>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_find\set_insdelfind_std.cpp" />
+    <ClCompile Include="..\..\..\test\stress\set\insdel_find\set_insdelfind_striped.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\set\insdel_find\set_insdelfind.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\set\insdel_find\CMakeLists.txt" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{133D1AEE-3BAF-42D1-B1AB-93D5239F4926}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>stress_set_insdelfind</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+    <ProjectName>stress-set-insdelfind</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)_d</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-set-insdelfind.vcxproj.filters b/projects/Win/vc14/stress-set-insdelfind.vcxproj.filters
new file mode 100644 (file)
index 0000000..80525d7
--- /dev/null
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\test\stress\main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_find\set_insdelfind.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_find\set_insdelfind_michael.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_find\set_insdelfind_split.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_find\set_insdelfind_skip.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_find\set_insdelfind_feldman_hashset.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_find\set_insdelfind_ellentree.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_find\set_insdelfind_cuckoo.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_find\set_insdelfind_std.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\test\stress\set\insdel_find\set_insdelfind_striped.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\test\stress\set\insdel_find\set_insdelfind.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\..\test\stress\set\insdel_find\CMakeLists.txt" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-stack.vcxproj b/projects/Win/vc14/stress-stack.vcxproj
new file mode 100644 (file)
index 0000000..4e936da
--- /dev/null
@@ -0,0 +1,246 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="DebugVLD|Win32">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DebugVLD|x64">\r
+      <Configuration>DebugVLD</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\stress\main.cpp" />\r
+    <ClCompile Include="..\..\..\test\stress\stack\intrusive_push_pop.cpp" />\r
+    <ClCompile Include="..\..\..\test\stress\stack\intrusive_push_pop_fcstack.cpp" />\r
+    <ClCompile Include="..\..\..\test\stress\stack\push.cpp" />\r
+    <ClCompile Include="..\..\..\test\stress\stack\push_pop.cpp" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\stress\stack\intrusive_stack_push_pop.h" />\r
+    <ClInclude Include="..\..\..\test\stress\stack\intrusive_stack_type.h" />\r
+    <ClInclude Include="..\..\..\test\stress\stack\stack_type.h" />\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{5E1C3684-9463-4A98-BAFC-9BD51F179BB6}</ProjectGuid>\r
+    <Keyword>Win32Proj</Keyword>\r
+    <RootNamespace>stress_stack_pushpop</RootNamespace>\r
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
+    <ProjectName>stress-stack</ProjectName>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Label="Shared">\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+    <TargetName>$(ProjectName)_d</TargetName>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <LinkIncremental>false</LinkIncremental>\r
+    <OutDir>$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
+    <IntDir>$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtestd.lib;stress-framework_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB32);$(GTEST_ROOT)/lib/x86;$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <PreprocessorDefinitions>_ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Console</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalLibraryDirectories>$(GTEST_LIB64);$(GTEST_ROOT)/lib/x64;$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;%(AdditionalLibraryDirectories);$(OutDir)</AdditionalLibraryDirectories>\r
+      <AdditionalDependencies>gtest.lib;stress-framework.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/stress-stack.vcxproj.filters b/projects/Win/vc14/stress-stack.vcxproj.filters
new file mode 100644 (file)
index 0000000..9cae1e9
--- /dev/null
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup>\r
+    <Filter Include="Source Files">\r
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r
+    </Filter>\r
+    <Filter Include="Header Files">\r
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\r
+    </Filter>\r
+    <Filter Include="Resource Files">\r
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r
+    </Filter>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\test\stress\main.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\stress\stack\push_pop.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\stress\stack\push.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\stress\stack\intrusive_push_pop.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\..\test\stress\stack\intrusive_push_pop_fcstack.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\test\stress\stack\stack_type.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\stress\stack\intrusive_stack_type.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\..\test\stress\stack\intrusive_stack_push_pop.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+  </ItemGroup>\r
+</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/unit-map-delodd.vcxproj b/projects/Win/vc14/unit-map-delodd.vcxproj
deleted file mode 100644 (file)
index cfe4749..0000000
+++ /dev/null
@@ -1,611 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_delodd.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_delodd_bronsonavltree.cpp">\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</ExcludedFromBuild>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_delodd_cuckoo.cpp">\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</ExcludedFromBuild>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_delodd_ellentree.cpp">\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</ExcludedFromBuild>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_delodd_michael.cpp">\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</ExcludedFromBuild>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_delodd_feldmanhashmap.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_delodd_skip.cpp">\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</ExcludedFromBuild>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_delodd_split.cpp">\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</ExcludedFromBuild>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_delodd.h" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{3C598F96-FB84-4d42-9B43-F697F53B0221}</ProjectGuid>\r
-    <RootNamespace>unitmap</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/unit-map-find.vcxproj b/projects/Win/vc14/unit-map-find.vcxproj
deleted file mode 100644 (file)
index 92584b0..0000000
+++ /dev/null
@@ -1,627 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_bronsonavltree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_feldmanhashmap.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_striped.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_bronsonavltree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_feldmanhashmap.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_striped.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_bronsonavltree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_feldmanhashmap.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_striped.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_find_int.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_find_string.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insfind_int.h" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{BA2A9239-0299-4069-BB0E-16DACE87ADE0}</ProjectGuid>\r
-    <RootNamespace>unitmap</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/unit-map-find.vcxproj.filters b/projects/Win/vc14/unit-map-find.vcxproj.filters
deleted file mode 100644 (file)
index bb9c849..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int.cpp">\r
-      <Filter>map_find_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_bronsonavltree.cpp">\r
-      <Filter>map_find_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_cuckoo.cpp">\r
-      <Filter>map_find_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_ellentree.cpp">\r
-      <Filter>map_find_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_michael.cpp">\r
-      <Filter>map_find_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_skip.cpp">\r
-      <Filter>map_find_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_split.cpp">\r
-      <Filter>map_find_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_std.cpp">\r
-      <Filter>map_find_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_striped.cpp">\r
-      <Filter>map_find_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string.cpp">\r
-      <Filter>map_find_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_bronsonavltree.cpp">\r
-      <Filter>map_find_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_cuckoo.cpp">\r
-      <Filter>map_find_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_ellentree.cpp">\r
-      <Filter>map_find_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_michael.cpp">\r
-      <Filter>map_find_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_skip.cpp">\r
-      <Filter>map_find_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_split.cpp">\r
-      <Filter>map_find_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_std.cpp">\r
-      <Filter>map_find_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_striped.cpp">\r
-      <Filter>map_find_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int.cpp">\r
-      <Filter>map_insfind_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_bronsonavltree.cpp">\r
-      <Filter>map_insfind_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_cuckoo.cpp">\r
-      <Filter>map_insfind_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_ellentree.cpp">\r
-      <Filter>map_insfind_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_michael.cpp">\r
-      <Filter>map_insfind_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_skip.cpp">\r
-      <Filter>map_insfind_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_split.cpp">\r
-      <Filter>map_insfind_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_std.cpp">\r
-      <Filter>map_insfind_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_striped.cpp">\r
-      <Filter>map_insfind_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_int_feldmanhashmap.cpp">\r
-      <Filter>map_find_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_find_string_feldmanhashmap.cpp">\r
-      <Filter>map_find_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insfind_int_feldmanhashmap.cpp">\r
-      <Filter>map_insfind_int</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_find_int.h">\r
-      <Filter>map_find_int</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_find_string.h">\r
-      <Filter>map_find_string</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insfind_int.h">\r
-      <Filter>map_insfind_int</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <Filter Include="map_find_int">\r
-      <UniqueIdentifier>{05793356-5544-4e12-893f-5761dea6536e}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="map_find_string">\r
-      <UniqueIdentifier>{c6ad8146-72e2-473c-aa04-3db455858146}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="map_insfind_int">\r
-      <UniqueIdentifier>{ba26fa2b-d618-4dd8-97d6-7dc874d9acf4}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/unit-map-insdel-item.vcxproj b/projects/Win/vc14/unit-map-insdel-item.vcxproj
deleted file mode 100644 (file)
index 55606ac..0000000
+++ /dev/null
@@ -1,614 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_bronsonavltree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_feldmanhashmap.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_striped.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_bronsonavltree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_feldmanhashmap.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_striped.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insdel_item_int.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insdel_item_string.h" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{7521DD92-56FF-4ECA-93E5-CCE50862354B}</ProjectGuid>\r
-    <RootNamespace>unitmap</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520;4503</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520;4503</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4520;4503</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520;4503</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520;4503</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520;4503</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4520;4503</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520;4503</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520;4503</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4520;4503</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520;4503</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4520;4503</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/unit-map-insdel-item.vcxproj.filters b/projects/Win/vc14/unit-map-insdel-item.vcxproj.filters
deleted file mode 100644 (file)
index 8c0b268..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <Filter Include="map_insdel_item_int">\r
-      <UniqueIdentifier>{3db58209-d436-470d-8e7b-716a4c54b7d2}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="map_insdel_item_string">\r
-      <UniqueIdentifier>{bd71af30-f7c6-4e9c-810f-dd0d5a6e64b0}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int.cpp">\r
-      <Filter>map_insdel_item_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_bronsonavltree.cpp">\r
-      <Filter>map_insdel_item_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_cuckoo.cpp">\r
-      <Filter>map_insdel_item_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_ellentree.cpp">\r
-      <Filter>map_insdel_item_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_michael.cpp">\r
-      <Filter>map_insdel_item_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_skip.cpp">\r
-      <Filter>map_insdel_item_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_split.cpp">\r
-      <Filter>map_insdel_item_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_striped.cpp">\r
-      <Filter>map_insdel_item_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string.cpp">\r
-      <Filter>map_insdel_item_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_bronsonavltree.cpp">\r
-      <Filter>map_insdel_item_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_cuckoo.cpp">\r
-      <Filter>map_insdel_item_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_ellentree.cpp">\r
-      <Filter>map_insdel_item_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_michael.cpp">\r
-      <Filter>map_insdel_item_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_skip.cpp">\r
-      <Filter>map_insdel_item_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_split.cpp">\r
-      <Filter>map_insdel_item_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_striped.cpp">\r
-      <Filter>map_insdel_item_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_int_feldmanhashmap.cpp">\r
-      <Filter>map_insdel_item_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_item_string_feldmanhashmap.cpp">\r
-      <Filter>map_insdel_item_string</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insdel_item_int.h">\r
-      <Filter>map_insdel_item_int</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insdel_item_string.h">\r
-      <Filter>map_insdel_item_string</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/unit-map-insdel.vcxproj b/projects/Win/vc14/unit-map-insdel.vcxproj
deleted file mode 100644 (file)
index 59736ca..0000000
+++ /dev/null
@@ -1,630 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_bronsonavltree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_feldmanhashmap.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_striped.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_bronsonavltree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_feldmanhashmap.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_striped.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_bronsonavltree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_feldmanhashmap.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_striped.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insdel_func.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insdel_int.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insdel_string.h" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{CA25BDBF-B354-4597-B6D2-220ABBB0D2F4}</ProjectGuid>\r
-    <RootNamespace>unitmap</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <RunCodeAnalysis>false</RunCodeAnalysis>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-      <EnablePREfast>false</EnablePREfast>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/unit-map-insdel.vcxproj.filters b/projects/Win/vc14/unit-map-insdel.vcxproj.filters
deleted file mode 100644 (file)
index ef09d09..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func.cpp">\r
-      <Filter>map_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_bronsonavltree.cpp">\r
-      <Filter>map_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_cuckoo.cpp">\r
-      <Filter>map_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_ellentree.cpp">\r
-      <Filter>map_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_michael.cpp">\r
-      <Filter>map_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_skip.cpp">\r
-      <Filter>map_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_split.cpp">\r
-      <Filter>map_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_striped.cpp">\r
-      <Filter>map_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int.cpp">\r
-      <Filter>map_insdel_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_bronsonavltree.cpp">\r
-      <Filter>map_insdel_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_cuckoo.cpp">\r
-      <Filter>map_insdel_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_ellentree.cpp">\r
-      <Filter>map_insdel_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_michael.cpp">\r
-      <Filter>map_insdel_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_skip.cpp">\r
-      <Filter>map_insdel_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_split.cpp">\r
-      <Filter>map_insdel_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_striped.cpp">\r
-      <Filter>map_insdel_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string.cpp">\r
-      <Filter>map_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_bronsonavltree.cpp">\r
-      <Filter>map_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_cuckoo.cpp">\r
-      <Filter>map_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_ellentree.cpp">\r
-      <Filter>map_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_michael.cpp">\r
-      <Filter>map_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_skip.cpp">\r
-      <Filter>map_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_split.cpp">\r
-      <Filter>map_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_std.cpp">\r
-      <Filter>map_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_striped.cpp">\r
-      <Filter>map_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_feldmanhashmap.cpp">\r
-      <Filter>map_insdel_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_int_std.cpp">\r
-      <Filter>map_insdel_int</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_func_feldmanhashmap.cpp">\r
-      <Filter>map_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdel_string_feldmanhashmap.cpp">\r
-      <Filter>map_insdel_string</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <Filter Include="map_insdel_func">\r
-      <UniqueIdentifier>{7cb9e730-e4e0-4648-96f1-e1dbf119756e}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="map_insdel_int">\r
-      <UniqueIdentifier>{55aed984-fed9-4007-9ad3-59bec69befe8}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="map_insdel_string">\r
-      <UniqueIdentifier>{f613f4ac-8b0f-4a85-81be-d243141b3ce3}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insdel_func.h">\r
-      <Filter>map_insdel_func</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insdel_int.h">\r
-      <Filter>map_insdel_int</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insdel_string.h">\r
-      <Filter>map_insdel_string</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/unit-map-insdelfind.vcxproj b/projects/Win/vc14/unit-map-insdelfind.vcxproj
deleted file mode 100644 (file)
index 96b9149..0000000
+++ /dev/null
@@ -1,605 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdelfind.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdelfind_bronsonavltree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdelfind_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdelfind_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdelfind_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdelfind_feldmanhashmap.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdelfind_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdelfind_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdelfind_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\map2\map_insdelfind_striped.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\map2\map_insdelfind.h" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{CA6F0834-0628-4CD7-8800-AEABCD636360}</ProjectGuid>\r
-    <RootNamespace>unitmap</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;NOMINMAX;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NOMINMAX;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4503;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/unit-misc.vcxproj b/projects/Win/vc14/unit-misc.vcxproj
deleted file mode 100644 (file)
index 76c1aa1..0000000
+++ /dev/null
@@ -1,600 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{77350FDC-9E51-438B-9A8F-D2FEA11D46B2}</ProjectGuid>\r
-    <RootNamespace>unitmisc</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\alloc\hoard_threadtest.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\alloc\larson.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\alloc\linux_scale.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\alloc\michael_allocator.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\alloc\random.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\lock\spinlock.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\alloc\michael_allocator.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\alloc\random_gen.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\lock\nolock.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\lock\win32_lock.h" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/unit-misc.vcxproj.filters b/projects/Win/vc14/unit-misc.vcxproj.filters
deleted file mode 100644 (file)
index 39108a6..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\alloc\hoard_threadtest.cpp">\r
-      <Filter>alloc</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\alloc\larson.cpp">\r
-      <Filter>alloc</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\alloc\linux_scale.cpp">\r
-      <Filter>alloc</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\alloc\michael_allocator.cpp">\r
-      <Filter>alloc</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\alloc\random.cpp">\r
-      <Filter>alloc</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\lock\spinlock.cpp">\r
-      <Filter>lock</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\alloc\random_gen.h">\r
-      <Filter>alloc</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\unit\alloc\michael_allocator.h">\r
-      <Filter>alloc</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\unit\lock\win32_lock.h">\r
-      <Filter>lock</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\unit\lock\nolock.h">\r
-      <Filter>lock</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <Filter Include="alloc">\r
-      <UniqueIdentifier>{03866e2b-6bdb-47ed-a165-3c7f19927d0e}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="lock">\r
-      <UniqueIdentifier>{6952493f-7eee-4643-a7c4-b2fefbb583d2}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/unit-pqueue.vcxproj b/projects/Win/vc14/unit-pqueue.vcxproj
deleted file mode 100644 (file)
index d4afbfd..0000000
+++ /dev/null
@@ -1,599 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\pqueue\ellen_bintree_pqueue.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\pqueue\pqueue_defs.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\pqueue\pqueue_item.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\pqueue\pqueue_type.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\pqueue\skiplist_pqueue.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\pqueue\std_pqueue.h" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\pqueue\pop.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\pqueue\push.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\pqueue\push_pop.cpp" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{20B6C380-E96A-4cff-BC17-D88AAE581919}</ProjectGuid>\r
-    <RootNamespace>unitpqueue</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/unit-prerequisites.vcxproj b/projects/Win/vc14/unit-prerequisites.vcxproj
deleted file mode 100644 (file)
index 155731c..0000000
+++ /dev/null
@@ -1,692 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{61179F2F-07E1-490D-B64D-D85A90B6EF81}</ProjectGuid>\r
-    <RootNamespace>unitprerequisites</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>BOOST_ERROR_CODE_HEADER_ONLY;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Lib>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-    </Lib>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>BOOST_ERROR_CODE_HEADER_ONLY;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Lib>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-    </Lib>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>BOOST_ERROR_CODE_HEADER_ONLY;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Lib>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-    </Lib>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>BOOST_ERROR_CODE_HEADER_ONLY;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Lib>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-    </Lib>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>BOOST_ERROR_CODE_HEADER_ONLY;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Lib>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-    </Lib>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>BOOST_ERROR_CODE_HEADER_ONLY;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Lib>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-    </Lib>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>BOOST_ERROR_CODE_HEADER_ONLY;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Lib>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-    </Lib>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>BOOST_ERROR_CODE_HEADER_ONLY;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Lib>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-    </Lib>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>BOOST_ERROR_CODE_HEADER_ONLY;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Lib>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-    </Lib>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>BOOST_ERROR_CODE_HEADER_ONLY;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Lib>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-    </Lib>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>BOOST_ERROR_CODE_HEADER_ONLY;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Lib>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-    </Lib>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>BOOST_ERROR_CODE_HEADER_ONLY;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Lib>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-    </Lib>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\cppunit\cppunit_mini.h" />\r
-    <ClInclude Include="..\..\..\tests\cppunit\cppunit_proxy.h" />\r
-    <ClInclude Include="..\..\..\tests\cppunit\file_reporter.h" />\r
-    <ClInclude Include="..\..\..\tests\hashing\city.h" />\r
-    <ClInclude Include="..\..\..\tests\hashing\hash_func.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\ellen_bintree_update_desc_pool.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\michael_alloc.h" />\r
-    <ClInclude Include="..\..\..\tests\cppunit\test_beans.h" />\r
-    <ClInclude Include="..\..\..\tests\cppunit\thread.h" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\hashing\city.cpp">\r
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level2</WarningLevel>\r
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">Level2</WarningLevel>\r
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">Level2</WarningLevel>\r
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">Level2</WarningLevel>\r
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">Level2</WarningLevel>\r
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level2</WarningLevel>\r
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level2</WarningLevel>\r
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">Level2</WarningLevel>\r
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">Level2</WarningLevel>\r
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">Level2</WarningLevel>\r
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">Level2</WarningLevel>\r
-      <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level2</WarningLevel>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\ellen_bintree_update_desc_pool.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\michael_alloc.cpp" />\r
-    <ClCompile Include="..\..\..\tests\cppunit\test_main.cpp">\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\cppunit\thread.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <CustomBuild Include="..\..\..\tests\data\test-debug.conf">\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TargetDir)\test-debug.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(TargetDir)\test-debug.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(TargetDir)\test-debug.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(TargetDir)\test-debug.conf;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TargetDir)\test-debug.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(TargetDir)\test-debug.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(TargetDir)\test-debug.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(TargetDir)\test-debug.conf;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TargetDir)\test-debug.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(TargetDir)\test-debug.conf;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TargetDir)\test-debug.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(TargetDir)\test-debug.conf;%(Outputs)</Outputs>\r
-    </CustomBuild>\r
-    <CustomBuild Include="..\..\..\tests\data\test-express.conf">\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TargetDir)\test-express.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(TargetDir)\test-express.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(TargetDir)\test-express.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(TargetDir)\test-express.conf;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TargetDir)\test-express.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(TargetDir)\test-express.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(TargetDir)\test-express.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(TargetDir)\test-express.conf;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TargetDir)\test-express.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(TargetDir)\test-express.conf;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TargetDir)\test-express.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(TargetDir)\test-express.conf;%(Outputs)</Outputs>\r
-    </CustomBuild>\r
-    <CustomBuild Include="..\..\..\tests\data\test.conf">\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TargetDir)\test.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(TargetDir)\test.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(TargetDir)\test.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(TargetDir)\test.conf;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TargetDir)\test.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(TargetDir)\test.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(TargetDir)\test.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(TargetDir)\test.conf;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TargetDir)\test.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(TargetDir)\test.conf;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copy test configurations</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">Copy test configurations</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">copy %(FullPath) $(TargetDir)\*.*</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TargetDir)\test.conf;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(TargetDir)\test.conf;%(Outputs)</Outputs>\r
-    </CustomBuild>\r
-    <CustomBuild Include="..\..\..\tests\data\text.txt">\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Build text dictionary</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">Build text dictionary</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">Build text dictionary</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">Build text dictionary</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Build text dictionary</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">Build text dictionary</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">Build text dictionary</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">Build text dictionary</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Build text dictionary</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">Build text dictionary</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Build text dictionary</Message>\r
-      <Message Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">Build text dictionary</Message>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">cd %(RootDir)%(Directory) &amp;&amp; perl -X split.pl  &amp;&amp; copy %(RootDir)%(Directory)\dictionary.txt $(TargetDir)\dictionary.txt</Command>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(TargetDir)\dictionary.txt;%(Outputs)</Outputs>\r
-    </CustomBuild>\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/unit-queue.vcxproj b/projects/Win/vc14/unit-queue.vcxproj
deleted file mode 100644 (file)
index 03b1a22..0000000
+++ /dev/null
@@ -1,601 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{6C15AF8A-4A99-49F9-BCF0-1BF36771099A}</ProjectGuid>\r
-    <RootNamespace>unitqueue</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\queue\bounded_queue_fulness.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\queue\intrusive_queue_reader_writer.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\queue\queue_pop.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\queue\queue_push.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\queue\queue_random.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\queue\queue_reader_writer.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\queue\intrusive_queue_defs.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\queue\intrusive_queue_type.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\queue\queue_defs.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\queue\queue_type.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\queue\std_queue.h" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/unit-set-delodd.vcxproj b/projects/Win/vc14/unit-set-delodd.vcxproj
deleted file mode 100644 (file)
index fde705f..0000000
+++ /dev/null
@@ -1,598 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_delodd.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_delodd_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_delodd_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_delodd_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_delodd_feldmanhashset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_delodd_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_delodd_split.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\set2\set_delodd.h" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{AF7B2253-2E6D-4992-94D9-4B3699C54929}</ProjectGuid>\r
-    <RootNamespace>unitset</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/unit-set-insdel.vcxproj b/projects/Win/vc14/unit-set-insdel.vcxproj
deleted file mode 100644 (file)
index 0479a76..0000000
+++ /dev/null
@@ -1,613 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_feldmanhashset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_striped.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_feldmanhashset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_striped.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\set2\set_insdel_func.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\set2\set_insdel_string.h" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}</ProjectGuid>\r
-    <RootNamespace>unitset</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/unit-set-insdel.vcxproj.filters b/projects/Win/vc14/unit-set-insdel.vcxproj.filters
deleted file mode 100644 (file)
index 643f585..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func.cpp">\r
-      <Filter>set_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_cuckoo.cpp">\r
-      <Filter>set_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_ellentree.cpp">\r
-      <Filter>set_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_skip.cpp">\r
-      <Filter>set_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_split.cpp">\r
-      <Filter>set_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_striped.cpp">\r
-      <Filter>set_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string.cpp">\r
-      <Filter>set_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_cuckoo.cpp">\r
-      <Filter>set_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_ellentree.cpp">\r
-      <Filter>set_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_michael.cpp">\r
-      <Filter>set_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_skip.cpp">\r
-      <Filter>set_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_split.cpp">\r
-      <Filter>set_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_std.cpp">\r
-      <Filter>set_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_striped.cpp">\r
-      <Filter>set_insdel_string</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_michael.cpp">\r
-      <Filter>set_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_func_feldmanhashset.cpp">\r
-      <Filter>set_insdel_func</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdel_string_feldmanhashset.cpp">\r
-      <Filter>set_insdel_string</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <Filter Include="set_insdel_func">\r
-      <UniqueIdentifier>{cbe5ede5-77ea-49bb-be6a-16d30d8416f7}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="set_insdel_string">\r
-      <UniqueIdentifier>{8a51ae1e-c41c-4394-bf84-3de8c45ea8bb}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\set2\set_insdel_func.h">\r
-      <Filter>set_insdel_func</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\tests\unit\set2\set_insdel_string.h">\r
-      <Filter>set_insdel_string</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/unit-set-insdelfind.vcxproj b/projects/Win/vc14/unit-set-insdelfind.vcxproj
deleted file mode 100644 (file)
index 843932e..0000000
+++ /dev/null
@@ -1,604 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdelfind.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdelfind_cuckoo.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdelfind_ellentree.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdelfind_michael.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdelfind_feldmanhashset.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdelfind_skip.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdelfind_split.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdelfind_std.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\set2\set_insdelfind_striped.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\set2\set_insdelfind.h" />\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{DE256E91-EE96-412E-82EE-DD7BD1A1130D}</ProjectGuid>\r
-    <RootNamespace>unitset</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-      <DisableSpecificWarnings>4503;4520;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/Win/vc14/unit-stack.vcxproj b/projects/Win/vc14/unit-stack.vcxproj
deleted file mode 100644 (file)
index e16e8b4..0000000
+++ /dev/null
@@ -1,597 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug-clang-3.7|Win32">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug-clang-3.7|x64">\r
-      <Configuration>Debug-clang-3.7</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|Win32">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="DebugVLD|x64">\r
-      <Configuration>DebugVLD</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|Win32">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Debug|x64">\r
-      <Configuration>ICL-Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|Win32">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="ICL-Release|x64">\r
-      <Configuration>ICL-Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{E29DE1F7-AE8D-4AE6-98B1-147E5103D974}</ProjectGuid>\r
-    <RootNamespace>unitstack</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>LLVM-vs2014</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>Intel C++ Compiler XE 13.0</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">false</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)-icl\$(Platform)\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)-icl\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'" />\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'" />\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">$(ProjectName)_d</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-clang-3.7|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ICL-Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\unit;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
-      <Cpp0xSupport>true</Cpp0xSupport>\r
-      <UseProcessorExtensions>HOST</UseProcessorExtensions>\r
-    </ClCompile>\r
-    <Link>\r
-      <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <SubSystem>Console</SubSystem>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <TargetMachine>MachineX64</TargetMachine>\r
-      <OutputFile>$(TargetPath)</OutputFile>\r
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\tests\unit\stack\stack_intrusive_pushpop.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\stack\stack_push.cpp" />\r
-    <ClCompile Include="..\..\..\tests\unit\stack\stack_pushpop.cpp" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\tests\unit\stack\intrusive_stack_type.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\stack\intrusive_stack_defs.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\stack\stack_type.h" />\r
-    <ClInclude Include="..\..\..\tests\unit\stack\stack_defs.h" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/projects/android/jni/Android.mk b/projects/android/jni/Android.mk
deleted file mode 100644 (file)
index 99f2eff..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-\r
-    CDS_LIBRARY_VERSION := 2.1.0\r
-    LOCAL_PATH := $(call my-dir)\r
-    CDS_ROOT_DIR = $(LOCAL_PATH)/../../..\r
-\r
-    BOOST_LIBS := -lboost_thread -lboost_system\r
-    BOOST_LIB_PATH := $(BOOST_ROOT)/stage32-android/lib\r
-\r
-    CDS_TESTHDR_INCLUDE := $(LOCAL_PATH)/../../.. \\r
-                        $(LOCAL_PATH)/../../../tests \\r
-                        $(LOCAL_PATH)/../../../tests/test-hdr \\r
-                        $(BOOST_ROOT)\r
-# libcds\r
-    include $(CLEAR_VARS)\r
-\r
-    LOCAL_MODULE    := cds\r
-    LOCAL_MODULE_FILENAME = libcds-$(CDS_LIBRARY_VERSION)\r
-    include $(CDS_ROOT_DIR)/projects/source.libcds.mk\r
-    LOCAL_SRC_FILES := $(CDS_SOURCES:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../.. $(BOOST_ROOT)\r
-    LOCAL_CPP_FEATURES := exceptions\r
-\r
-    include $(BUILD_SHARED_LIBRARY)\r
-\r
-#test-hdr-map\r
-    include $(CLEAR_VARS)\r
-\r
-    LOCAL_MODULE    := test-hdr-map\r
-    include $(CDS_ROOT_DIR)/projects/source.test-common.mk\r
-    include $(CDS_ROOT_DIR)/projects/source.test-hdr.mk\r
-    include $(CDS_ROOT_DIR)/projects/source.test-hdr.offsetof.mk\r
-    LOCAL_SRC_FILES := $(CDS_TESTCOMMON_SOURCES:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_SRC_FILES += $(CDS_TESTHDR_MAP:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_SRC_FILES += $(CDS_TESTHDR_OFFSETOF_MAP:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_C_INCLUDES := $(CDS_TESTHDR_INCLUDE)\r
-    LOCAL_SHARED_LIBRARIES := cds\r
-    LOCAL_CPP_FEATURES := exceptions\r
-    LOCAL_CPPFLAGS := -Wno-invalid-offsetof -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS\r
-    LOCAL_LDLIBS   := $(BOOST_LIBS)\r
-    LOCAL_LDFLAGS  := -L$(BOOST_LIB_PATH)\r
-    include $(BUILD_EXECUTABLE)\r
-\r
-#test-hdr-deque\r
-    include $(CLEAR_VARS)\r
-\r
-    LOCAL_MODULE    := test-hdr-deque\r
-    include $(CDS_ROOT_DIR)/projects/source.test-common.mk\r
-    include $(CDS_ROOT_DIR)/projects/source.test-hdr.mk\r
-    include $(CDS_ROOT_DIR)/projects/source.test-hdr.offsetof.mk\r
-    LOCAL_SRC_FILES := $(CDS_TESTCOMMON_SOURCES:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_SRC_FILES += $(CDS_TESTHDR_DEQUE:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_SRC_FILES += $(CDS_TESTHDR_OFFSETOF_DEQUE:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_C_INCLUDES := $(CDS_TESTHDR_INCLUDE)\r
-    LOCAL_SHARED_LIBRARIES := cds\r
-    LOCAL_CPP_FEATURES := exceptions\r
-    LOCAL_CPPFLAGS := -Wno-invalid-offsetof -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS\r
-    LOCAL_LDLIBS   := $(BOOST_LIBS)\r
-    LOCAL_LDFLAGS  := -L$(BOOST_LIB_PATH)\r
-    include $(BUILD_EXECUTABLE)\r
-\r
-#test-hdr-ordlist\r
-    include $(CLEAR_VARS)\r
-\r
-    LOCAL_MODULE    := test-hdr-ordlist\r
-    include $(CDS_ROOT_DIR)/projects/source.test-common.mk\r
-    include $(CDS_ROOT_DIR)/projects/source.test-hdr.mk\r
-    include $(CDS_ROOT_DIR)/projects/source.test-hdr.offsetof.mk\r
-    LOCAL_SRC_FILES := $(CDS_TESTCOMMON_SOURCES:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_SRC_FILES += $(CDS_TESTHDR_ORDLIST:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_SRC_FILES += $(CDS_TESTHDR_OFFSETOF_ORDLIST:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_C_INCLUDES := $(CDS_TESTHDR_INCLUDE)\r
-    LOCAL_SHARED_LIBRARIES := cds\r
-    LOCAL_CPP_FEATURES := exceptions\r
-    LOCAL_CPPFLAGS := -Wno-invalid-offsetof -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS\r
-    LOCAL_LDLIBS   := $(BOOST_LIBS)\r
-    LOCAL_LDFLAGS  := -L$(BOOST_LIB_PATH)\r
-    include $(BUILD_EXECUTABLE)\r
-\r
-#test-hdr-pqueue\r
-    include $(CLEAR_VARS)\r
-\r
-    LOCAL_MODULE    := test-hdr-pqueue\r
-    include $(CDS_ROOT_DIR)/projects/source.test-common.mk\r
-    include $(CDS_ROOT_DIR)/projects/source.test-hdr.mk\r
-    include $(CDS_ROOT_DIR)/projects/source.test-hdr.offsetof.mk\r
-    LOCAL_SRC_FILES := $(CDS_TESTCOMMON_SOURCES:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_SRC_FILES += $(CDS_TESTHDR_PQUEUE:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-#    LOCAL_SRC_FILES += $(CDS_TESTHDR_OFFSETOF_PQUEUE:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_C_INCLUDES := $(CDS_TESTHDR_INCLUDE)\r
-    LOCAL_SHARED_LIBRARIES := cds\r
-    LOCAL_CPP_FEATURES := exceptions\r
-    LOCAL_CPPFLAGS := -Wno-invalid-offsetof -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS\r
-    LOCAL_LDLIBS   := $(BOOST_LIBS)\r
-    LOCAL_LDFLAGS  := -L$(BOOST_LIB_PATH)\r
-    include $(BUILD_EXECUTABLE)\r
-\r
-#test-hdr-queue\r
-    include $(CLEAR_VARS)\r
-\r
-    LOCAL_MODULE    := test-hdr-queue\r
-    include $(CDS_ROOT_DIR)/projects/source.test-common.mk\r
-    include $(CDS_ROOT_DIR)/projects/source.test-hdr.mk\r
-    include $(CDS_ROOT_DIR)/projects/source.test-hdr.offsetof.mk\r
-    LOCAL_SRC_FILES := $(CDS_TESTCOMMON_SOURCES:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_SRC_FILES += $(CDS_TESTHDR_QUEUE:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_SRC_FILES += $(CDS_TESTHDR_OFFSETOF_QUEUE:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_C_INCLUDES := $(CDS_TESTHDR_INCLUDE)\r
-    LOCAL_SHARED_LIBRARIES := cds\r
-    LOCAL_CPP_FEATURES := exceptions\r
-    LOCAL_CPPFLAGS := -Wno-invalid-offsetof -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS\r
-    LOCAL_LDLIBS   := $(BOOST_LIBS)\r
-    LOCAL_LDFLAGS  := -L$(BOOST_LIB_PATH)\r
-    include $(BUILD_EXECUTABLE)\r
-\r
-#test-hdr-set\r
-    include $(CLEAR_VARS)\r
-\r
-    LOCAL_MODULE    := test-hdr-set\r
-    include $(CDS_ROOT_DIR)/projects/source.test-common.mk\r
-    include $(CDS_ROOT_DIR)/projects/source.test-hdr.mk\r
-    include $(CDS_ROOT_DIR)/projects/source.test-hdr.offsetof.mk\r
-    LOCAL_SRC_FILES := $(CDS_TESTCOMMON_SOURCES:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_SRC_FILES += $(CDS_TESTHDR_SET:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_SRC_FILES += $(CDS_TESTHDR_OFFSETOF_SET:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_C_INCLUDES := $(CDS_TESTHDR_INCLUDE)\r
-    LOCAL_SHARED_LIBRARIES := cds\r
-    LOCAL_CPP_FEATURES := exceptions\r
-    LOCAL_CPPFLAGS := -Wno-invalid-offsetof -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS\r
-    LOCAL_LDLIBS   := $(BOOST_LIBS)\r
-    LOCAL_LDFLAGS  := -L$(BOOST_LIB_PATH)\r
-    include $(BUILD_EXECUTABLE)\r
-\r
-#test-hdr-stack\r
-    include $(CLEAR_VARS)\r
-\r
-    LOCAL_MODULE    := test-hdr-stack\r
-    include $(CDS_ROOT_DIR)/projects/source.test-common.mk\r
-    include $(CDS_ROOT_DIR)/projects/source.test-hdr.mk\r
-    include $(CDS_ROOT_DIR)/projects/source.test-hdr.offsetof.mk\r
-    LOCAL_SRC_FILES := $(CDS_TESTCOMMON_SOURCES:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_SRC_FILES += $(CDS_TESTHDR_STACK:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_SRC_FILES += $(CDS_TESTHDR_OFFSETOF_STACK:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_C_INCLUDES := $(CDS_TESTHDR_INCLUDE)\r
-    LOCAL_SHARED_LIBRARIES := cds\r
-    LOCAL_CPP_FEATURES := exceptions\r
-    LOCAL_CPPFLAGS := -Wno-invalid-offsetof -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS\r
-    LOCAL_LDLIBS   := $(BOOST_LIBS)\r
-    LOCAL_LDFLAGS  := -L$(BOOST_LIB_PATH)\r
-    include $(BUILD_EXECUTABLE)\r
-\r
-#test-hdr-tree\r
-    include $(CLEAR_VARS)\r
-\r
-    LOCAL_MODULE    := test-hdr-tree\r
-    include $(CDS_ROOT_DIR)/projects/source.test-common.mk\r
-    include $(CDS_ROOT_DIR)/projects/source.test-hdr.mk\r
-    include $(CDS_ROOT_DIR)/projects/source.test-hdr.offsetof.mk\r
-    LOCAL_SRC_FILES := $(CDS_TESTCOMMON_SOURCES:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_SRC_FILES += $(CDS_TESTHDR_TREE:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_SRC_FILES += $(CDS_TESTHDR_OFFSETOF_TREE:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_C_INCLUDES := $(CDS_TESTHDR_INCLUDE)\r
-    LOCAL_SHARED_LIBRARIES := cds\r
-    LOCAL_CPP_FEATURES := exceptions\r
-    LOCAL_CPPFLAGS := -Wno-invalid-offsetof -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS\r
-    LOCAL_LDLIBS   := $(BOOST_LIBS)\r
-    LOCAL_LDFLAGS  := -L$(BOOST_LIB_PATH)\r
-    include $(BUILD_EXECUTABLE)\r
-\r
-#test-hdr-misc\r
-    include $(CLEAR_VARS)\r
-\r
-    LOCAL_MODULE    := test-hdr-misc\r
-    include $(CDS_ROOT_DIR)/projects/source.test-common.mk\r
-    include $(CDS_ROOT_DIR)/projects/source.test-hdr.mk\r
-    include $(CDS_ROOT_DIR)/projects/source.test-hdr.offsetof.mk\r
-    LOCAL_SRC_FILES := $(CDS_TESTCOMMON_SOURCES:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_SRC_FILES += $(CDS_TESTHDR_MISC:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-#    LOCAL_SRC_FILES += $(CDS_TESTHDR_OFFSETOF_MISC:%.cpp=$(CDS_ROOT_DIR)/%.cpp)\r
-    LOCAL_C_INCLUDES := $(CDS_TESTHDR_INCLUDE)\r
-    LOCAL_SHARED_LIBRARIES := cds\r
-    LOCAL_CPP_FEATURES := exceptions\r
-    LOCAL_CPPFLAGS := -Wno-invalid-offsetof -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS\r
-    LOCAL_LDLIBS   := $(BOOST_LIBS)\r
-    LOCAL_LDFLAGS  := -L$(BOOST_LIB_PATH)\r
-    include $(BUILD_EXECUTABLE)\r
diff --git a/projects/android/jni/Application.mk b/projects/android/jni/Application.mk
deleted file mode 100644 (file)
index ad5a1e2..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-APP_MODULES := cds test-hdr-map test-hdr-deque test-hdr-ordlist test_hdr_pqueue 
-APP_MODULES += test-hdr-queue test-hdr-set test-hdr-stack test-hdr-tree test-hdr-misc
-APP_ABI := armeabi-v7a
-APP_OPTIM := debug
-APP_STL := gnustl_shared
-APP_CPPFLAGS := -std=c++0x -frtti -pedantic -Wall -Wno-unused-local-typedefs
-#APP_LDFLAGS :=
-APP_GNUSTL_FORCE_CPP_FEATURES := exceptions
-NDK_TOOLCHAIN_VERSION := 4.8
diff --git a/projects/android/jni/build.sh b/projects/android/jni/build.sh
deleted file mode 100644 (file)
index dfb8f67..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-BOOST_ROOT=~/works/libs/boost_1_53_0 $NDK/ndk-build -j 1 2>&1 |tee arm-build.log
diff --git a/projects/source.libcds.mk b/projects/source.libcds.mk
deleted file mode 100644 (file)
index ba2b1b1..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-CDS_SOURCES= \\r
-         src/hp_gc.cpp \\r
-         src/init.cpp \\r
-         src/dhp_gc.cpp \\r
-         src/urcu_gp.cpp \\r
-         src/urcu_sh.cpp \\r
-         src/michael_heap.cpp \\r
-         src/topology_hpux.cpp \\r
-         src/topology_linux.cpp \\r
-         src/topology_osx.cpp \\r
-         src/dllmain.cpp\r
diff --git a/projects/source.test-common.mk b/projects/source.test-common.mk
deleted file mode 100644 (file)
index 5b845ae..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-
-CDS_TESTCOMMON_SOURCES := \
-    tests/cppunit/test_main.cpp \
-    tests/cppunit/thread.cpp \
-    tests/unit/michael_alloc.cpp \
-    tests/unit/ellen_bintree_update_desc_pool.cpp \
-    tests/hashing/city.cpp
-
-
diff --git a/projects/source.test-hdr.mk b/projects/source.test-hdr.mk
deleted file mode 100644 (file)
index 7ae0cf0..0000000
+++ /dev/null
@@ -1,306 +0,0 @@
-CDS_TESTHDR_MAP := \
-    tests/test-hdr/map/hdr_michael_map_hp.cpp \
-    tests/test-hdr/map/hdr_michael_map_dhp.cpp \
-    tests/test-hdr/map/hdr_michael_map_rcu_gpi.cpp \
-    tests/test-hdr/map/hdr_michael_map_rcu_gpb.cpp \
-    tests/test-hdr/map/hdr_michael_map_rcu_gpt.cpp \
-    tests/test-hdr/map/hdr_michael_map_rcu_shb.cpp \
-    tests/test-hdr/map/hdr_michael_map_rcu_sht.cpp \
-    tests/test-hdr/map/hdr_michael_map_nogc.cpp \
-    tests/test-hdr/map/hdr_michael_map_lazy_hp.cpp \
-    tests/test-hdr/map/hdr_michael_map_lazy_dhp.cpp \
-    tests/test-hdr/map/hdr_michael_map_lazy_rcu_gpi.cpp \
-    tests/test-hdr/map/hdr_michael_map_lazy_rcu_gpb.cpp \
-    tests/test-hdr/map/hdr_michael_map_lazy_rcu_gpt.cpp \
-    tests/test-hdr/map/hdr_michael_map_lazy_rcu_shb.cpp \
-    tests/test-hdr/map/hdr_michael_map_lazy_rcu_sht.cpp \
-    tests/test-hdr/map/hdr_michael_map_lazy_nogc.cpp \
-    tests/test-hdr/map/hdr_feldman_hashmap_hp.cpp \
-    tests/test-hdr/map/hdr_feldman_hashmap_dhp.cpp \
-    tests/test-hdr/map/hdr_feldman_hashmap_rcu_gpb.cpp \
-    tests/test-hdr/map/hdr_feldman_hashmap_rcu_gpi.cpp \
-    tests/test-hdr/map/hdr_feldman_hashmap_rcu_gpt.cpp \
-    tests/test-hdr/map/hdr_feldman_hashmap_rcu_shb.cpp \
-    tests/test-hdr/map/hdr_feldman_hashmap_rcu_sht.cpp \
-    tests/test-hdr/map/hdr_refinable_hashmap_hashmap_std.cpp \
-    tests/test-hdr/map/hdr_refinable_hashmap_boost_list.cpp \
-    tests/test-hdr/map/hdr_refinable_hashmap_list.cpp \
-    tests/test-hdr/map/hdr_refinable_hashmap_map.cpp \
-    tests/test-hdr/map/hdr_refinable_hashmap_boost_map.cpp \
-    tests/test-hdr/map/hdr_refinable_hashmap_boost_flat_map.cpp \
-    tests/test-hdr/map/hdr_refinable_hashmap_boost_unordered_map.cpp \
-    tests/test-hdr/map/hdr_refinable_hashmap_slist.cpp \
-    tests/test-hdr/map/hdr_skiplist_map_hp.cpp \
-    tests/test-hdr/map/hdr_skiplist_map_dhp.cpp \
-    tests/test-hdr/map/hdr_skiplist_map_rcu_gpi.cpp \
-    tests/test-hdr/map/hdr_skiplist_map_rcu_gpb.cpp \
-    tests/test-hdr/map/hdr_skiplist_map_rcu_gpt.cpp \
-    tests/test-hdr/map/hdr_skiplist_map_rcu_shb.cpp \
-    tests/test-hdr/map/hdr_skiplist_map_rcu_sht.cpp \
-    tests/test-hdr/map/hdr_skiplist_map_nogc.cpp \
-    tests/test-hdr/map/hdr_splitlist_map_hp.cpp \
-    tests/test-hdr/map/hdr_splitlist_map_dhp.cpp \
-    tests/test-hdr/map/hdr_splitlist_map_nogc.cpp \
-    tests/test-hdr/map/hdr_splitlist_map_rcu_gpi.cpp \
-    tests/test-hdr/map/hdr_splitlist_map_rcu_gpb.cpp \
-    tests/test-hdr/map/hdr_splitlist_map_rcu_gpt.cpp \
-    tests/test-hdr/map/hdr_splitlist_map_rcu_shb.cpp \
-    tests/test-hdr/map/hdr_splitlist_map_rcu_sht.cpp \
-    tests/test-hdr/map/hdr_splitlist_map_lazy_hp.cpp \
-    tests/test-hdr/map/hdr_splitlist_map_lazy_dhp.cpp \
-    tests/test-hdr/map/hdr_splitlist_map_lazy_nogc.cpp \
-    tests/test-hdr/map/hdr_splitlist_map_lazy_rcu_gpi.cpp \
-    tests/test-hdr/map/hdr_splitlist_map_lazy_rcu_gpb.cpp \
-    tests/test-hdr/map/hdr_splitlist_map_lazy_rcu_gpt.cpp \
-    tests/test-hdr/map/hdr_splitlist_map_lazy_rcu_sht.cpp \
-    tests/test-hdr/map/hdr_splitlist_map_lazy_rcu_shb.cpp \
-    tests/test-hdr/map/hdr_striped_hashmap_hashmap_std.cpp \
-    tests/test-hdr/map/hdr_striped_hashmap_boost_list.cpp \
-    tests/test-hdr/map/hdr_striped_hashmap_list.cpp \
-    tests/test-hdr/map/hdr_striped_hashmap_map.cpp \
-    tests/test-hdr/map/hdr_striped_hashmap_boost_map.cpp \
-    tests/test-hdr/map/hdr_striped_hashmap_boost_flat_map.cpp \
-    tests/test-hdr/map/hdr_striped_hashmap_boost_unordered_map.cpp \
-    tests/test-hdr/map/hdr_striped_hashmap_slist.cpp \
-    tests/test-hdr/map/hdr_striped_map_reg.cpp
-
-CDS_TESTHDR_DEQUE := \
-    tests/test-hdr/deque/hdr_fcdeque.cpp
-
-CDS_TESTHDR_LIST := \
-    tests/test-hdr/list/hdr_lazy_dhp.cpp \
-    tests/test-hdr/list/hdr_lazy_hp.cpp \
-    tests/test-hdr/list/hdr_lazy_nogc.cpp \
-    tests/test-hdr/list/hdr_lazy_nogc_unord.cpp \
-    tests/test-hdr/list/hdr_lazy_rcu_gpi.cpp \
-    tests/test-hdr/list/hdr_lazy_rcu_gpb.cpp \
-    tests/test-hdr/list/hdr_lazy_rcu_gpt.cpp \
-    tests/test-hdr/list/hdr_lazy_rcu_shb.cpp \
-    tests/test-hdr/list/hdr_lazy_rcu_sht.cpp \
-    tests/test-hdr/list/hdr_lazy_kv_dhp.cpp \
-    tests/test-hdr/list/hdr_lazy_kv_hp.cpp \
-    tests/test-hdr/list/hdr_lazy_kv_nogc.cpp \
-    tests/test-hdr/list/hdr_lazy_kv_nogc_unord.cpp \
-    tests/test-hdr/list/hdr_lazy_kv_rcu_gpb.cpp \
-    tests/test-hdr/list/hdr_lazy_kv_rcu_gpi.cpp \
-    tests/test-hdr/list/hdr_lazy_kv_rcu_gpt.cpp \
-    tests/test-hdr/list/hdr_lazy_kv_rcu_shb.cpp \
-    tests/test-hdr/list/hdr_lazy_kv_rcu_sht.cpp \
-    tests/test-hdr/list/hdr_michael_dhp.cpp \
-    tests/test-hdr/list/hdr_michael_hp.cpp \
-    tests/test-hdr/list/hdr_michael_nogc.cpp \
-    tests/test-hdr/list/hdr_michael_rcu_gpi.cpp \
-    tests/test-hdr/list/hdr_michael_rcu_gpb.cpp \
-    tests/test-hdr/list/hdr_michael_rcu_gpt.cpp \
-    tests/test-hdr/list/hdr_michael_rcu_shb.cpp \
-    tests/test-hdr/list/hdr_michael_rcu_sht.cpp \
-    tests/test-hdr/list/hdr_michael_kv_dhp.cpp \
-    tests/test-hdr/list/hdr_michael_kv_hp.cpp \
-    tests/test-hdr/list/hdr_michael_kv_nogc.cpp \
-    tests/test-hdr/list/hdr_michael_kv_rcu_gpi.cpp \
-    tests/test-hdr/list/hdr_michael_kv_rcu_gpb.cpp \
-    tests/test-hdr/list/hdr_michael_kv_rcu_gpt.cpp \
-    tests/test-hdr/list/hdr_michael_kv_rcu_shb.cpp \
-    tests/test-hdr/list/hdr_michael_kv_rcu_sht.cpp
-
-CDS_TESTHDR_PQUEUE := \
-    tests/test-hdr/priority_queue/hdr_intrusive_mspqueue_dyn.cpp \
-    tests/test-hdr/priority_queue/hdr_intrusive_mspqueue_static.cpp \
-    tests/test-hdr/priority_queue/hdr_mspqueue_dyn.cpp \
-    tests/test-hdr/priority_queue/hdr_mspqueue_static.cpp \
-    tests/test-hdr/priority_queue/hdr_fcpqueue_boost_stable_vector.cpp \
-    tests/test-hdr/priority_queue/hdr_fcpqueue_deque.cpp \
-    tests/test-hdr/priority_queue/hdr_fcpqueue_vector.cpp \
-    tests/test-hdr/priority_queue/hdr_priority_queue_reg.cpp
-
-CDS_TESTHDR_QUEUE := \
-    tests/test-hdr/queue/hdr_queue_register.cpp \
-    tests/test-hdr/queue/hdr_intrusive_fcqueue.cpp \
-    tests/test-hdr/queue/hdr_intrusive_segmented_queue_hp.cpp \
-    tests/test-hdr/queue/hdr_intrusive_segmented_queue_dhp.cpp \
-    tests/test-hdr/queue/hdr_intrusive_tsigas_cycle_queue.cpp \
-    tests/test-hdr/queue/hdr_intrusive_vyukovmpmc_cycle_queue.cpp \
-    tests/test-hdr/queue/hdr_basketqueue_hp.cpp \
-    tests/test-hdr/queue/hdr_basketqueue_dhp.cpp \
-    tests/test-hdr/queue/hdr_fcqueue.cpp \
-    tests/test-hdr/queue/hdr_moirqueue_hp.cpp \
-    tests/test-hdr/queue/hdr_moirqueue_dhp.cpp \
-    tests/test-hdr/queue/hdr_msqueue_hp.cpp \
-    tests/test-hdr/queue/hdr_msqueue_dhp.cpp \
-    tests/test-hdr/queue/hdr_optimistic_hp.cpp \
-    tests/test-hdr/queue/hdr_optimistic_dhp.cpp \
-    tests/test-hdr/queue/hdr_rwqueue.cpp \
-    tests/test-hdr/queue/hdr_segmented_queue_hp.cpp \
-    tests/test-hdr/queue/hdr_segmented_queue_dhp.cpp \
-    tests/test-hdr/queue/hdr_tsigas_cycle_queue.cpp \
-    tests/test-hdr/queue/hdr_vyukov_mpmc_cyclic.cpp
-
-CDS_TESTHDR_SET := \
-    tests/test-hdr/set/hdr_intrusive_feldman_hashset_hp.cpp \
-    tests/test-hdr/set/hdr_intrusive_feldman_hashset_dhp.cpp \
-    tests/test-hdr/set/hdr_intrusive_feldman_hashset_rcu_gpi.cpp \
-    tests/test-hdr/set/hdr_intrusive_feldman_hashset_rcu_gpb.cpp \
-    tests/test-hdr/set/hdr_intrusive_feldman_hashset_rcu_gpt.cpp \
-    tests/test-hdr/set/hdr_intrusive_feldman_hashset_rcu_shb.cpp \
-    tests/test-hdr/set/hdr_intrusive_feldman_hashset_rcu_sht.cpp \
-    tests/test-hdr/set/hdr_intrusive_refinable_hashset_avlset.cpp \
-    tests/test-hdr/set/hdr_intrusive_refinable_hashset_list.cpp \
-    tests/test-hdr/set/hdr_intrusive_refinable_hashset_set.cpp \
-    tests/test-hdr/set/hdr_intrusive_refinable_hashset_sgset.cpp \
-    tests/test-hdr/set/hdr_intrusive_refinable_hashset_slist.cpp \
-    tests/test-hdr/set/hdr_intrusive_refinable_hashset_splayset.cpp \
-    tests/test-hdr/set/hdr_intrusive_refinable_hashset_treapset.cpp \
-    tests/test-hdr/set/hdr_intrusive_refinable_hashset_uset.cpp \
-    tests/test-hdr/set/hdr_intrusive_skiplist_hp.cpp \
-    tests/test-hdr/set/hdr_intrusive_skiplist_dhp.cpp \
-    tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpb.cpp \
-    tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpi.cpp \
-    tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpt.cpp \
-    tests/test-hdr/set/hdr_intrusive_skiplist_rcu_shb.cpp \
-    tests/test-hdr/set/hdr_intrusive_skiplist_rcu_sht.cpp \
-    tests/test-hdr/set/hdr_intrusive_skiplist_nogc.cpp \
-    tests/test-hdr/set/hdr_intrusive_striped_hashset_avlset.cpp \
-    tests/test-hdr/set/hdr_intrusive_striped_hashset_list.cpp \
-    tests/test-hdr/set/hdr_intrusive_striped_hashset_set.cpp \
-    tests/test-hdr/set/hdr_intrusive_striped_hashset_sgset.cpp \
-    tests/test-hdr/set/hdr_intrusive_striped_hashset_slist.cpp \
-    tests/test-hdr/set/hdr_intrusive_striped_hashset_splayset.cpp \
-    tests/test-hdr/set/hdr_intrusive_striped_hashset_treapset.cpp \
-    tests/test-hdr/set/hdr_intrusive_striped_hashset_uset.cpp \
-    tests/test-hdr/set/hdr_intrusive_striped_set.cpp \
-    tests/test-hdr/set/hdr_michael_set_hp.cpp \
-    tests/test-hdr/set/hdr_michael_set_dhp.cpp \
-    tests/test-hdr/set/hdr_michael_set_rcu_gpi.cpp \
-    tests/test-hdr/set/hdr_michael_set_rcu_gpb.cpp \
-    tests/test-hdr/set/hdr_michael_set_rcu_gpt.cpp \
-    tests/test-hdr/set/hdr_michael_set_rcu_shb.cpp \
-    tests/test-hdr/set/hdr_michael_set_rcu_sht.cpp \
-    tests/test-hdr/set/hdr_michael_set_nogc.cpp \
-    tests/test-hdr/set/hdr_michael_set_lazy_hp.cpp \
-    tests/test-hdr/set/hdr_michael_set_lazy_dhp.cpp \
-    tests/test-hdr/set/hdr_michael_set_lazy_rcu_gpi.cpp \
-    tests/test-hdr/set/hdr_michael_set_lazy_rcu_gpb.cpp \
-    tests/test-hdr/set/hdr_michael_set_lazy_rcu_gpt.cpp \
-    tests/test-hdr/set/hdr_michael_set_lazy_rcu_shb.cpp \
-    tests/test-hdr/set/hdr_michael_set_lazy_rcu_sht.cpp \
-    tests/test-hdr/set/hdr_michael_set_lazy_nogc.cpp \
-    tests/test-hdr/set/hdr_feldman_hashset_hp.cpp \
-    tests/test-hdr/set/hdr_feldman_hashset_dhp.cpp \
-    tests/test-hdr/set/hdr_feldman_hashset_rcu_gpb.cpp \
-    tests/test-hdr/set/hdr_feldman_hashset_rcu_gpi.cpp \
-    tests/test-hdr/set/hdr_feldman_hashset_rcu_gpt.cpp \
-    tests/test-hdr/set/hdr_feldman_hashset_rcu_shb.cpp \
-    tests/test-hdr/set/hdr_feldman_hashset_rcu_sht.cpp \
-    tests/test-hdr/set/hdr_refinable_hashset_hashset_std.cpp \
-    tests/test-hdr/set/hdr_refinable_hashset_boost_flat_set.cpp \
-    tests/test-hdr/set/hdr_refinable_hashset_boost_list.cpp \
-    tests/test-hdr/set/hdr_refinable_hashset_boost_set.cpp \
-    tests/test-hdr/set/hdr_refinable_hashset_boost_stable_vector.cpp \
-    tests/test-hdr/set/hdr_refinable_hashset_boost_unordered_set.cpp \
-    tests/test-hdr/set/hdr_refinable_hashset_boost_vector.cpp \
-    tests/test-hdr/set/hdr_refinable_hashset_list.cpp \
-    tests/test-hdr/set/hdr_refinable_hashset_set.cpp \
-    tests/test-hdr/set/hdr_refinable_hashset_slist.cpp \
-    tests/test-hdr/set/hdr_refinable_hashset_vector.cpp \
-    tests/test-hdr/set/hdr_skiplist_set_hp.cpp \
-    tests/test-hdr/set/hdr_skiplist_set_dhp.cpp \
-    tests/test-hdr/set/hdr_skiplist_set_rcu_gpi.cpp \
-    tests/test-hdr/set/hdr_skiplist_set_rcu_gpb.cpp \
-    tests/test-hdr/set/hdr_skiplist_set_rcu_gpt.cpp \
-    tests/test-hdr/set/hdr_skiplist_set_rcu_shb.cpp \
-    tests/test-hdr/set/hdr_skiplist_set_rcu_sht.cpp \
-    tests/test-hdr/set/hdr_skiplist_set_nogc.cpp \
-    tests/test-hdr/set/hdr_splitlist_set_hp.cpp \
-    tests/test-hdr/set/hdr_splitlist_set_nogc.cpp \
-    tests/test-hdr/set/hdr_splitlist_set_dhp.cpp \
-    tests/test-hdr/set/hdr_splitlist_set_rcu_gpi.cpp \
-    tests/test-hdr/set/hdr_splitlist_set_rcu_gpb.cpp \
-    tests/test-hdr/set/hdr_splitlist_set_rcu_gpt.cpp \
-    tests/test-hdr/set/hdr_splitlist_set_rcu_shb.cpp \
-    tests/test-hdr/set/hdr_splitlist_set_rcu_sht.cpp \
-    tests/test-hdr/set/hdr_splitlist_set_lazy_hp.cpp \
-    tests/test-hdr/set/hdr_splitlist_set_lazy_nogc.cpp \
-    tests/test-hdr/set/hdr_splitlist_set_lazy_dhp.cpp \
-    tests/test-hdr/set/hdr_splitlist_set_lazy_rcu_gpi.cpp \
-    tests/test-hdr/set/hdr_splitlist_set_lazy_rcu_gpb.cpp \
-    tests/test-hdr/set/hdr_splitlist_set_lazy_rcu_gpt.cpp \
-    tests/test-hdr/set/hdr_splitlist_set_lazy_rcu_shb.cpp \
-    tests/test-hdr/set/hdr_splitlist_set_lazy_rcu_sht.cpp \
-    tests/test-hdr/set/hdr_striped_hashset_hashset_std.cpp \
-    tests/test-hdr/set/hdr_striped_hashset_boost_flat_set.cpp \
-    tests/test-hdr/set/hdr_striped_hashset_boost_list.cpp \
-    tests/test-hdr/set/hdr_striped_hashset_boost_set.cpp \
-    tests/test-hdr/set/hdr_striped_hashset_boost_stable_vector.cpp \
-    tests/test-hdr/set/hdr_striped_hashset_boost_unordered_set.cpp \
-    tests/test-hdr/set/hdr_striped_hashset_boost_vector.cpp \
-    tests/test-hdr/set/hdr_striped_hashset_list.cpp \
-    tests/test-hdr/set/hdr_striped_hashset_set.cpp \
-    tests/test-hdr/set/hdr_striped_hashset_slist.cpp \
-    tests/test-hdr/set/hdr_striped_hashset_vector.cpp 
-
-CDS_TESTHDR_STACK := \
-    tests/test-hdr/stack/hdr_intrusive_fcstack.cpp \
-    tests/test-hdr/stack/hdr_treiber_stack_hp.cpp \
-    tests/test-hdr/stack/hdr_treiber_stack_dhp.cpp \
-    tests/test-hdr/stack/hdr_elimination_stack_hp.cpp \
-    tests/test-hdr/stack/hdr_elimination_stack_dhp.cpp \
-    tests/test-hdr/stack/hdr_fcstack.cpp
-
-CDS_TESTHDR_TREE := \
-    tests/test-hdr/tree/hdr_tree_reg.cpp \
-    tests/test-hdr/tree/hdr_intrusive_ellen_bintree_hp.cpp \
-    tests/test-hdr/tree/hdr_intrusive_ellen_bintree_dhp.cpp \
-    tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpb.cpp \
-    tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpi.cpp \
-    tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpt.cpp \
-    tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_shb.cpp \
-    tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_sht.cpp \
-    tests/test-hdr/tree/hdr_ellenbintree_map_hp.cpp \
-    tests/test-hdr/tree/hdr_ellenbintree_map_dhp.cpp \
-    tests/test-hdr/tree/hdr_ellenbintree_map_rcu_gpb.cpp \
-    tests/test-hdr/tree/hdr_ellenbintree_map_rcu_gpi.cpp \
-    tests/test-hdr/tree/hdr_ellenbintree_map_rcu_gpt.cpp \
-    tests/test-hdr/tree/hdr_ellenbintree_map_rcu_shb.cpp \
-    tests/test-hdr/tree/hdr_ellenbintree_map_rcu_sht.cpp \
-    tests/test-hdr/tree/hdr_ellenbintree_set_hp.cpp \
-    tests/test-hdr/tree/hdr_ellenbintree_set_dhp.cpp \
-    tests/test-hdr/tree/hdr_ellenbintree_set_rcu_gpb.cpp \
-    tests/test-hdr/tree/hdr_ellenbintree_set_rcu_gpi.cpp \
-    tests/test-hdr/tree/hdr_ellenbintree_set_rcu_gpt.cpp \
-    tests/test-hdr/tree/hdr_ellenbintree_set_rcu_shb.cpp \
-    tests/test-hdr/tree/hdr_ellenbintree_set_rcu_sht.cpp \
-    tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpb.cpp \
-    tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpb_pool_monitor.cpp \
-    tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpi.cpp \
-    tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpi_pool_monitor.cpp \
-    tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpt.cpp \
-    tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpt_pool_monitor.cpp \
-    tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_shb.cpp \
-    tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_shb_pool_monitor.cpp \
-    tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_sht.cpp \
-    tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_sht_pool_monitor.cpp \
-    
-
-CDS_TESTHDR_MISC := \
-    tests/test-hdr/misc/cxx11_atomic_class.cpp \
-    tests/test-hdr/misc/cxx11_atomic_func.cpp \
-    tests/test-hdr/misc/find_option.cpp \
-    tests/test-hdr/misc/allocator_test.cpp \
-    tests/test-hdr/misc/michael_allocator.cpp \
-    tests/test-hdr/misc/hash_tuple.cpp \
-    tests/test-hdr/misc/bitop_st.cpp \
-    tests/test-hdr/misc/split_bitstring.cpp \
-    tests/test-hdr/misc/permutation_generator.cpp \
-    tests/test-hdr/misc/thread_init_fini.cpp
-
-CDS_TESTHDR_SOURCES := \
-    $(CDS_TESTHDR_QUEUE) \
-    $(CDS_TESTHDR_PQUEUE) \
-    $(CDS_TESTHDR_STACK) \
-    $(CDS_TESTHDR_MAP) \
-    $(CDS_TESTHDR_DEQUE) \
-    $(CDS_TESTHDR_LIST) \
-    $(CDS_TESTHDR_SET) \
-    $(CDS_TESTHDR_TREE) \
-    $(CDS_TESTHDR_MISC)
-    
diff --git a/projects/source.test-hdr.offsetof.mk b/projects/source.test-hdr.offsetof.mk
deleted file mode 100644 (file)
index 2a6eb52..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-CDS_TESTHDR_OFFSETOF_DEQUE := \
-
-CDS_TESTHDR_OFFSETOF_MAP := \
-    tests/test-hdr/map/hdr_cuckoo_map.cpp 
-
-CDS_TESTHDR_OFFSETOF_SET := \
-    tests/test-hdr/set/hdr_cuckoo_set.cpp \
-    tests/test-hdr/set/hdr_intrusive_cuckoo_set.cpp \
-    tests/test-hdr/set/hdr_intrusive_cuckoo_refinable_set.cpp \
-    tests/test-hdr/set/hdr_intrusive_michael_set_hp.cpp \
-    tests/test-hdr/set/hdr_intrusive_michael_set_dhp.cpp \
-    tests/test-hdr/set/hdr_intrusive_michael_set_nogc.cpp \
-    tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpi.cpp \
-    tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpb.cpp \
-    tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpt.cpp \
-    tests/test-hdr/set/hdr_intrusive_michael_set_rcu_shb.cpp \
-    tests/test-hdr/set/hdr_intrusive_michael_set_rcu_sht.cpp \
-    tests/test-hdr/set/hdr_intrusive_michael_set_hp_lazy.cpp \
-    tests/test-hdr/set/hdr_intrusive_michael_set_dhp_lazy.cpp \
-    tests/test-hdr/set/hdr_intrusive_michael_set_nogc_lazy.cpp \
-    tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpi_lazy.cpp \
-    tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpb_lazy.cpp \
-    tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpt_lazy.cpp \
-    tests/test-hdr/set/hdr_intrusive_michael_set_rcu_shb_lazy.cpp \
-    tests/test-hdr/set/hdr_intrusive_michael_set_rcu_sht_lazy.cpp \
-    tests/test-hdr/set/hdr_intrusive_skiplist_hp_member.cpp \
-    tests/test-hdr/set/hdr_intrusive_skiplist_dhp_member.cpp \
-    tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpi_member.cpp \
-    tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpb_member.cpp \
-    tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpt_member.cpp \
-    tests/test-hdr/set/hdr_intrusive_skiplist_rcu_shb_member.cpp \
-    tests/test-hdr/set/hdr_intrusive_skiplist_rcu_sht_member.cpp \
-    tests/test-hdr/set/hdr_intrusive_skiplist_nogc_member.cpp \
-    tests/test-hdr/set/hdr_intrusive_splitlist_set_hp.cpp \
-    tests/test-hdr/set/hdr_intrusive_splitlist_set_nogc.cpp \
-    tests/test-hdr/set/hdr_intrusive_splitlist_set_dhp.cpp \
-    tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpb.cpp \
-    tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpi.cpp \
-    tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpt.cpp \
-    tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_shb.cpp \
-    tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_sht.cpp \
-    tests/test-hdr/set/hdr_intrusive_splitlist_set_hp_lazy.cpp \
-    tests/test-hdr/set/hdr_intrusive_splitlist_set_nogc_lazy.cpp \
-    tests/test-hdr/set/hdr_intrusive_splitlist_set_dhp_lazy.cpp \
-    tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpb_lazy.cpp \
-    tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpi_lazy.cpp \
-    tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpt_lazy.cpp \
-    tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_shb_lazy.cpp \
-    tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_sht_lazy.cpp 
-
-CDS_TESTHDR_OFFSETOF_LIST := \
-    tests/test-hdr/list/hdr_intrusive_lazy_dhp.cpp \
-    tests/test-hdr/list/hdr_intrusive_lazy_hp.cpp \
-    tests/test-hdr/list/hdr_intrusive_lazy_nogc.cpp \
-    tests/test-hdr/list/hdr_intrusive_lazy_nogc_unord.cpp \
-    tests/test-hdr/list/hdr_intrusive_lazy_rcu_gpb.cpp \
-    tests/test-hdr/list/hdr_intrusive_lazy_rcu_gpi.cpp \
-    tests/test-hdr/list/hdr_intrusive_lazy_rcu_gpt.cpp \
-    tests/test-hdr/list/hdr_intrusive_lazy_rcu_shb.cpp \
-    tests/test-hdr/list/hdr_intrusive_lazy_rcu_sht.cpp \
-    tests/test-hdr/list/hdr_intrusive_michael_dhp.cpp \
-    tests/test-hdr/list/hdr_intrusive_michael_hp.cpp \
-    tests/test-hdr/list/hdr_intrusive_michael_nogc.cpp \
-    tests/test-hdr/list/hdr_intrusive_michael_list_rcu_gpb.cpp \
-    tests/test-hdr/list/hdr_intrusive_michael_list_rcu_gpi.cpp \
-    tests/test-hdr/list/hdr_intrusive_michael_list_rcu_gpt.cpp \
-    tests/test-hdr/list/hdr_intrusive_michael_list_rcu_shb.cpp \
-    tests/test-hdr/list/hdr_intrusive_michael_list_rcu_sht.cpp
-
-CDS_TESTHDR_OFFSETOF_QUEUE := \
-    tests/test-hdr/queue/hdr_intrusive_basketqueue_hp.cpp \
-    tests/test-hdr/queue/hdr_intrusive_basketqueue_dhp.cpp \
-    tests/test-hdr/queue/hdr_intrusive_moirqueue_hp.cpp \
-    tests/test-hdr/queue/hdr_intrusive_moirqueue_dhp.cpp \
-    tests/test-hdr/queue/hdr_intrusive_msqueue_hp.cpp \
-    tests/test-hdr/queue/hdr_intrusive_msqueue_dhp.cpp \
-    tests/test-hdr/queue/hdr_intrusive_optimisticqueue_hp.cpp \
-    tests/test-hdr/queue/hdr_intrusive_optimisticqueue_dhp.cpp
-
-CDS_TESTHDR_OFFSETOF_STACK := \
-    tests/test-hdr/stack/hdr_intrusive_treiber_stack_hp.cpp \
-    tests/test-hdr/stack/hdr_intrusive_treiber_stack_dhp.cpp \
-    tests/test-hdr/stack/hdr_intrusive_elimination_stack_hp.cpp \
-    tests/test-hdr/stack/hdr_intrusive_elimination_stack_dhp.cpp 
-
-CDS_TESTHDR_OFFSETOF_TREE := \
-    tests/test-hdr/tree/hdr_intrusive_ellen_bintree_hp_member.cpp \
-    tests/test-hdr/tree/hdr_intrusive_ellen_bintree_dhp_member.cpp \
-    tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpb_member.cpp \
-    tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpi_member.cpp \
-    tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpt_member.cpp \
-    tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_shb_member.cpp \
-    tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_sht_member.cpp
-
-CDS_TESTHDR_OFFSETOF_SOURCES := \
-       $(CDS_TESTHDR_OFFSETOF_QUEUE) \
-       $(CDS_TESTHDR_OFFSETOF_STACK) \
-       $(CDS_TESTHDR_OFFSETOF_DEQUE) \
-       $(CDS_TESTHDR_OFFSETOF_MAP) \
-       $(CDS_TESTHDR_OFFSETOF_SET) \
-       $(CDS_TESTHDR_OFFSETOF_LIST) \
-       $(CDS_TESTHDR_OFFSETOF_TREE)
diff --git a/projects/source.unit.map.mk b/projects/source.unit.map.mk
deleted file mode 100644 (file)
index 1db4e0e..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-
-CDSUNIT_MAP_SOURCES := \
-    tests/unit/map2/map_find_int.cpp \
-    tests/unit/map2/map_find_int_bronsonavltree.cpp \
-    tests/unit/map2/map_find_int_cuckoo.cpp \
-    tests/unit/map2/map_find_int_ellentree.cpp \
-    tests/unit/map2/map_find_int_michael.cpp \
-    tests/unit/map2/map_find_int_feldmanhashmap.cpp \
-    tests/unit/map2/map_find_int_skip.cpp \
-    tests/unit/map2/map_find_int_split.cpp \
-    tests/unit/map2/map_find_int_striped.cpp \
-    tests/unit/map2/map_find_int_std.cpp \
-    tests/unit/map2/map_find_string.cpp \
-    tests/unit/map2/map_find_string_bronsonavltree.cpp \
-    tests/unit/map2/map_find_string_cuckoo.cpp \
-    tests/unit/map2/map_find_string_ellentree.cpp \
-    tests/unit/map2/map_find_string_michael.cpp \
-    tests/unit/map2/map_find_string_feldmanhashmap.cpp \
-    tests/unit/map2/map_find_string_skip.cpp \
-    tests/unit/map2/map_find_string_split.cpp \
-    tests/unit/map2/map_find_string_striped.cpp \
-    tests/unit/map2/map_find_string_std.cpp \
-    tests/unit/map2/map_insfind_int.cpp \
-    tests/unit/map2/map_insfind_int_bronsonavltree.cpp \
-    tests/unit/map2/map_insfind_int_cuckoo.cpp \
-    tests/unit/map2/map_insfind_int_ellentree.cpp \
-    tests/unit/map2/map_insfind_int_michael.cpp \
-    tests/unit/map2/map_insfind_int_feldmanhashmap.cpp \
-    tests/unit/map2/map_insfind_int_skip.cpp \
-    tests/unit/map2/map_insfind_int_split.cpp \
-    tests/unit/map2/map_insfind_int_striped.cpp \
-    tests/unit/map2/map_insfind_int_std.cpp \
-    tests/unit/map2/map_insdel_func.cpp \
-    tests/unit/map2/map_insdel_func_bronsonavltree.cpp \
-    tests/unit/map2/map_insdel_func_cuckoo.cpp \
-    tests/unit/map2/map_insdel_func_ellentree.cpp \
-    tests/unit/map2/map_insdel_func_michael.cpp \
-    tests/unit/map2/map_insdel_func_feldmanhashmap.cpp \
-    tests/unit/map2/map_insdel_func_skip.cpp \
-    tests/unit/map2/map_insdel_func_split.cpp \
-    tests/unit/map2/map_insdel_func_striped.cpp \
-    tests/unit/map2/map_insdel_int.cpp \
-    tests/unit/map2/map_insdel_int_bronsonavltree.cpp \
-    tests/unit/map2/map_insdel_int_cuckoo.cpp \
-    tests/unit/map2/map_insdel_int_ellentree.cpp \
-    tests/unit/map2/map_insdel_int_michael.cpp \
-    tests/unit/map2/map_insdel_int_feldmanhashmap.cpp \
-    tests/unit/map2/map_insdel_int_skip.cpp \
-    tests/unit/map2/map_insdel_int_split.cpp \
-    tests/unit/map2/map_insdel_int_striped.cpp \
-    tests/unit/map2/map_insdel_int_std.cpp \
-    tests/unit/map2/map_insdel_item_int.cpp \
-    tests/unit/map2/map_insdel_item_int_bronsonavltree.cpp \
-    tests/unit/map2/map_insdel_item_int_cuckoo.cpp \
-    tests/unit/map2/map_insdel_item_int_ellentree.cpp \
-    tests/unit/map2/map_insdel_item_int_michael.cpp \
-    tests/unit/map2/map_insdel_item_int_feldmanhashmap.cpp \
-    tests/unit/map2/map_insdel_item_int_skip.cpp \
-    tests/unit/map2/map_insdel_item_int_split.cpp \
-    tests/unit/map2/map_insdel_item_int_striped.cpp \
-    tests/unit/map2/map_insdel_item_string.cpp \
-    tests/unit/map2/map_insdel_item_string_bronsonavltree.cpp \
-    tests/unit/map2/map_insdel_item_string_cuckoo.cpp \
-    tests/unit/map2/map_insdel_item_string_ellentree.cpp \
-    tests/unit/map2/map_insdel_item_string_michael.cpp \
-    tests/unit/map2/map_insdel_item_string_feldmanhashmap.cpp \
-    tests/unit/map2/map_insdel_item_string_skip.cpp \
-    tests/unit/map2/map_insdel_item_string_split.cpp \
-    tests/unit/map2/map_insdel_item_string_striped.cpp \
-    tests/unit/map2/map_insdel_string.cpp \
-    tests/unit/map2/map_insdel_string_bronsonavltree.cpp \
-    tests/unit/map2/map_insdel_string_cuckoo.cpp \
-    tests/unit/map2/map_insdel_string_ellentree.cpp \
-    tests/unit/map2/map_insdel_string_michael.cpp \
-    tests/unit/map2/map_insdel_string_feldmanhashmap.cpp \
-    tests/unit/map2/map_insdel_string_skip.cpp \
-    tests/unit/map2/map_insdel_string_split.cpp \
-    tests/unit/map2/map_insdel_string_striped.cpp \
-    tests/unit/map2/map_insdel_string_std.cpp \
-    tests/unit/map2/map_insdelfind.cpp \
-    tests/unit/map2/map_insdelfind_bronsonavltree.cpp \
-    tests/unit/map2/map_insdelfind_cuckoo.cpp \
-    tests/unit/map2/map_insdelfind_ellentree.cpp \
-    tests/unit/map2/map_insdelfind_michael.cpp \
-    tests/unit/map2/map_insdelfind_feldmanhashmap.cpp \
-    tests/unit/map2/map_insdelfind_skip.cpp \
-    tests/unit/map2/map_insdelfind_split.cpp \
-    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_bronsonavltree.cpp \
-    tests/unit/map2/map_delodd_cuckoo.cpp \
-    tests/unit/map2/map_delodd_ellentree.cpp \
-    tests/unit/map2/map_delodd_michael.cpp \
-    tests/unit/map2/map_delodd_feldmanhashmap.cpp \
-    tests/unit/map2/map_delodd_skip.cpp \
-    tests/unit/map2/map_delodd_split.cpp \
diff --git a/projects/source.unit.misc.mk b/projects/source.unit.misc.mk
deleted file mode 100644 (file)
index 7a1508f..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-
-CDSUNIT_MISC_SOURCES := \
-    tests/unit/alloc/hoard_threadtest.cpp \
-    tests/unit/alloc/larson.cpp \
-    tests/unit/alloc/linux_scale.cpp \
-    tests/unit/alloc/michael_allocator.cpp \
-    tests/unit/alloc/random.cpp \
-    tests/unit/lock/spinlock.cpp
diff --git a/projects/source.unit.pqueue.mk b/projects/source.unit.pqueue.mk
deleted file mode 100644 (file)
index 8eddfbb..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-
-CDSUNIT_PQUEUE_SOURCES= \
-    tests/unit/pqueue/pop.cpp \
-    tests/unit/pqueue/push.cpp \
-    tests/unit/pqueue/push_pop.cpp
diff --git a/projects/source.unit.queue.mk b/projects/source.unit.queue.mk
deleted file mode 100644 (file)
index 0c80d48..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-
-CDSUNIT_QUEUE_SOURCES := \
-    tests/unit/queue/bounded_queue_fulness.cpp \
-    tests/unit/queue/queue_pop.cpp \
-    tests/unit/queue/queue_push.cpp \
-    tests/unit/queue/queue_random.cpp \
-    tests/unit/queue/queue_reader_writer.cpp \
-    tests/unit/queue/intrusive_queue_reader_writer.cpp
diff --git a/projects/source.unit.set.mk b/projects/source.unit.set.mk
deleted file mode 100644 (file)
index 46178fd..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-
-CDSUNIT_SET_SOURCES := \
-       tests/unit/set2/set_insdel_func.cpp \
-       tests/unit/set2/set_insdel_func_cuckoo.cpp \
-       tests/unit/set2/set_insdel_func_ellentree.cpp \
-       tests/unit/set2/set_insdel_func_michael.cpp \
-    tests/unit/set2/set_insdel_func_feldmanhashset.cpp \
-       tests/unit/set2/set_insdel_func_skip.cpp \
-       tests/unit/set2/set_insdel_func_split.cpp \
-       tests/unit/set2/set_insdel_func_striped.cpp \
-       tests/unit/set2/set_insdel_string.cpp \
-       tests/unit/set2/set_insdel_string_cuckoo.cpp \
-       tests/unit/set2/set_insdel_string_ellentree.cpp \
-       tests/unit/set2/set_insdel_string_michael.cpp \
-    tests/unit/set2/set_insdel_string_feldmanhashset.cpp \
-       tests/unit/set2/set_insdel_string_skip.cpp \
-       tests/unit/set2/set_insdel_string_split.cpp \
-       tests/unit/set2/set_insdel_string_striped.cpp \
-    tests/unit/set2/set_insdel_string_std.cpp \
-       tests/unit/set2/set_insdelfind.cpp \
-       tests/unit/set2/set_insdelfind_cuckoo.cpp \
-       tests/unit/set2/set_insdelfind_ellentree.cpp \
-    tests/unit/set2/set_insdelfind_michael.cpp \
-    tests/unit/set2/set_insdelfind_feldmanhashset.cpp \
-       tests/unit/set2/set_insdelfind_skip.cpp \
-       tests/unit/set2/set_insdelfind_split.cpp \
-       tests/unit/set2/set_insdelfind_striped.cpp \
-    tests/unit/set2/set_insdelfind_std.cpp \
-       tests/unit/set2/set_delodd.cpp \
-       tests/unit/set2/set_delodd_cuckoo.cpp \
-       tests/unit/set2/set_delodd_ellentree.cpp \
-       tests/unit/set2/set_delodd_michael.cpp \
-       tests/unit/set2/set_delodd_feldmanhashset.cpp \
-       tests/unit/set2/set_delodd_skip.cpp \
-       tests/unit/set2/set_delodd_split.cpp \
diff --git a/projects/source.unit.stack.mk b/projects/source.unit.stack.mk
deleted file mode 100644 (file)
index a78ba9d..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-
-CDSUNIT_STACK_SOURCES := \
-    tests/unit/stack/stack_push.cpp \
-    tests/unit/stack/stack_pushpop.cpp \
-    tests/unit/stack/stack_intrusive_pushpop.cpp
-
index afd1ff9739181d8ac30a383eb96aad1870bf8968..19c5c484a454409d7a29fb79bf2846451e094bf3 100644 (file)
--- a/readme.md
+++ b/readme.md
@@ -40,6 +40,10 @@ Download the latest release from http://sourceforge.net/projects/libcds/files/
 \r
 See online doxygen-generated doc here: http://libcds.sourceforge.net/doc/cds-api/index.html\r
 \r
+**How to build**\r
+   - *nix: [use CMake](build/cmake/readme.md)\r
+   - Windows: use MS Visual C++ 2015 project\r
+\r
 **Pull request requirements**\r
 - Pull-request to *master* branch will be unconditionally rejected\r
 - *integration* branch is intended for pull-request. Usually, *integration* branch is the same as *master*\r
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
new file mode 100644 (file)
index 0000000..730a307
--- /dev/null
@@ -0,0 +1,12 @@
+
+find_package(GTest REQUIRED) 
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}/include
+    ${GTEST_INCLUDE_DIRS}
+)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGTEST_LANG_CXX11") 
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/unit)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/stress)
diff --git a/test/include/cds_test/check_size.h b/test/include/cds_test/check_size.h
new file mode 100644 (file)
index 0000000..34a3b99
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSTEST_CHECK_SIZE_H
+#define CDSTEST_CHECK_SIZE_H
+
+#include <gtest/gtest.h>
+#include <cds/algo/atomic.h>
+
+namespace cds_test {
+
+    template <typename ItemCounter>
+    struct size_checker {
+        template <typename Container>
+        bool operator()( Container const& c, size_t nSize ) const
+        {
+            return c.size() == nSize;
+        }
+    };
+
+    template<>
+    struct size_checker< cds::atomicity::empty_item_counter > {
+        template <typename Container>
+        bool operator()( Container const& /*c*/, size_t /*nSize*/ ) const
+        {
+            return true;
+        }
+    };
+
+    template <class Container>
+    static inline bool check_size( Container const& cont, size_t nSize )
+    {
+        return size_checker<typename Container::item_counter>()( cont, nSize );
+    }
+
+} // namespace cds_test
+
+#define ASSERT_CONTAINER_SIZE( container, expected ) \
+    ASSERT_TRUE( cds_test::check_size(container, expected)) << "container size=" << container.size() << ", expected=" << expected
+
+#define EXPECT_CONTAINER_SIZE( container, expected ) \
+    EXPECT_TRUE( cds_test::check_size(container, expected)) << "container size=" << container.size() << ", expected=" << expected
+
+#endif // #ifndef CDSTEST_CHECK_SIZE_H
diff --git a/test/include/cds_test/city.h b/test/include/cds_test/city.h
new file mode 100644 (file)
index 0000000..5987470
--- /dev/null
@@ -0,0 +1,116 @@
+// Copyright (c) 2011 Google, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
+// CityHash, by Geoff Pike and Jyrki Alakuijala
+//
+// http://code.google.com/p/cityhash/
+//
+// This file provides a few functions for hashing strings.  All of them are
+// high-quality functions in the sense that they pass standard tests such
+// as Austin Appleby's SMHasher.  They are also fast.
+//
+// For 64-bit x86 code, on short strings, we don't know of anything faster than
+// CityHash64 that is of comparable quality.  We believe our nearest competitor
+// is Murmur3.  For 64-bit x86 code, CityHash64 is an excellent choice for hash
+// tables and most other hashing (excluding cryptography).
+//
+// For 64-bit x86 code, on long strings, the picture is more complicated.
+// On many recent Intel CPUs, such as Nehalem, Westmere, Sandy Bridge, etc.,
+// CityHashCrc128 appears to be faster than all competitors of comparable
+// quality.  CityHash128 is also good but not quite as fast.  We believe our
+// nearest competitor is Bob Jenkins' Spooky.  We don't have great data for
+// other 64-bit CPUs, but for long strings we know that Spooky is slightly
+// faster than CityHash on some relatively recent AMD x86-64 CPUs, for example.
+// Note that CityHashCrc128 is declared in citycrc.h.
+//
+// For 32-bit x86 code, we don't know of anything faster than CityHash32 that
+// is of comparable quality.  We believe our nearest competitor is Murmur3A.
+// (On 64-bit CPUs, it is typically faster to use the other CityHash variants.)
+//
+// Functions in the CityHash family are not suitable for cryptography.
+//
+// Please see CityHash's README file for more details on our performance
+// measurements and so on.
+//
+// WARNING: This code has been only lightly tested on big-endian platforms!
+// It is known to work well on little-endian platforms that have a small penalty
+// for unaligned reads, such as current Intel and AMD moderate-to-high-end CPUs.
+// It should work on all 32-bit and 64-bit platforms that allow unaligned reads;
+// bug reports are welcome.
+//
+// By the way, for some hash functions, given strings a and b, the hash
+// of a+b is easily derived from the hashes of a and b.  This property
+// doesn't hold for any hash functions in this file.
+
+#ifndef CITY_HASH_H_
+#define CITY_HASH_H_
+
+#include <cds/details/defs.h>
+#if CDS_BUILD_BITS == 64
+
+#include <stdlib.h>  // for size_t.
+#include <stdint.h>
+#include <utility>
+
+typedef uint8_t uint8;
+typedef uint32_t uint32;
+typedef uint64_t uint64;
+typedef std::pair<uint64, uint64> uint128;
+
+inline uint64 Uint128Low64(const uint128& x) { return x.first; }
+inline uint64 Uint128High64(const uint128& x) { return x.second; }
+
+// Hash function for a byte array.
+uint64 CityHash64(const char *buf, size_t len);
+
+// Hash function for a byte array.  For convenience, a 64-bit seed is also
+// hashed into the result.
+uint64 CityHash64WithSeed(const char *buf, size_t len, uint64 seed);
+
+// Hash function for a byte array.  For convenience, two seeds are also
+// hashed into the result.
+uint64 CityHash64WithSeeds(const char *buf, size_t len,
+                           uint64 seed0, uint64 seed1);
+
+// Hash function for a byte array.
+uint128 CityHash128(const char *s, size_t len);
+
+// Hash function for a byte array.  For convenience, a 128-bit seed is also
+// hashed into the result.
+uint128 CityHash128WithSeed(const char *s, size_t len, uint128 seed);
+
+// Hash function for a byte array.  Most useful in 32-bit binaries.
+uint32 CityHash32(const char *buf, size_t len);
+
+// Hash 128 input bits down to 64 bits of output.
+// This is intended to be a reasonably good hash function.
+inline uint64 Hash128to64(const uint128& x) {
+  // Murmur-inspired hashing.
+  const uint64 kMul = 0x9ddfea08eb382d69ULL;
+  uint64 a = (Uint128Low64(x) ^ Uint128High64(x)) * kMul;
+  a ^= (a >> 47);
+  uint64 b = (Uint128High64(x) ^ a) * kMul;
+  b ^= (b >> 47);
+  b *= kMul;
+  return b;
+}
+
+#endif // #if CDS_BUILD_BITS == 64
+#endif  // CITY_HASH_H_
diff --git a/test/include/cds_test/citycrc.h b/test/include/cds_test/citycrc.h
new file mode 100644 (file)
index 0000000..054d188
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright (c) 2011 Google, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
+// CityHash, by Geoff Pike and Jyrki Alakuijala
+//
+// This file declares the subset of the CityHash functions that require
+// _mm_crc32_u64().  See the CityHash README for details.
+//
+// Functions in the CityHash family are not suitable for cryptography.
+
+#ifndef CITY_HASH_CRC_H_
+#define CITY_HASH_CRC_H_
+
+#include "city.h"
+
+// Hash function for a byte array.
+uint128 CityHashCrc128(const char *s, size_t len);
+
+// Hash function for a byte array.  For convenience, a 128-bit seed is also
+// hashed into the result.
+uint128 CityHashCrc128WithSeed(const char *s, size_t len, uint128 seed);
+
+// Hash function for a byte array.  Sets result[0] ... result[3].
+void CityHashCrc256(const char *s, size_t len, uint64 *result);
+
+#endif  // CITY_HASH_CRC_H_
diff --git a/test/include/cds_test/fixture.h b/test/include/cds_test/fixture.h
new file mode 100644 (file)
index 0000000..ec56e32
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef CDSTEST_FIXTURE_H
+#define CDSTEST_FIXTURE_H
+
+#include <gtest/gtest.h>
+#include <algorithm>
+#include <random>
+
+// earlier version of gtest do not support 4th parameter in INSTANTIATE_TEST_CASE_P macro
+//TODO: how to known gtest version?..
+//#define CDSTEST_GTEST_INSTANTIATE_TEST_CASE_P_HAS_4TH_ARG
+
+namespace cds_test {
+
+    class fixture : public ::testing::Test
+    {
+    protected:
+        template <typename RandomIt>
+        static void shuffle( RandomIt first, RandomIt last )
+        {
+            static std::random_device random_dev;
+            static std::mt19937       random_gen( random_dev() );
+
+            std::shuffle( first, last, random_gen );
+        }
+
+        static inline unsigned int rand( unsigned int nMax )
+        {
+            double rnd = double( std::rand() ) / double( RAND_MAX );
+            unsigned int n = (unsigned int)(rnd * nMax);
+            return n < nMax ? n : (n - 1);
+        }
+    };
+
+} // namespace cds_test
+
+#endif // CDSTEST_FIXTURE_H
diff --git a/test/include/cds_test/hash_func.h b/test/include/cds_test/hash_func.h
new file mode 100644 (file)
index 0000000..9f1b951
--- /dev/null
@@ -0,0 +1,111 @@
+//$$CDS-header$$
+
+#ifndef CDSUNIT_HASH_FUNC_H
+#define CDSUNIT_HASH_FUNC_H
+
+#include <cds/details/defs.h>
+
+#if CDS_BUILD_BITS == 64
+#   include <cds_test/city.h>
+#endif
+
+namespace cds_test {
+
+#if CDS_BUILD_BITS == 64
+    class city32 {
+    public:
+        typedef uint32_t hash_type;
+        typedef hash_type result_type;
+
+        hash_type operator()( void const * pBuf, size_t len ) const
+        {
+            return CityHash32( reinterpret_cast<char const *>( pBuf ), len );
+        }
+
+        hash_type operator()( std::string const& s ) const
+        {
+            return CityHash32( s.c_str(), s.length() );
+        }
+
+        template <typename T>
+        hash_type operator()( T const& s ) const
+        {
+            return CityHash32( reinterpret_cast<char const *>( &s ), sizeof(s));
+        }
+
+        struct less
+        {
+            bool operator()( hash_type lhs, hash_type rhs ) const
+            {
+                return lhs < rhs;
+            }
+        };
+    };
+
+    class city64 {
+    public:
+        typedef uint64_t hash_type;
+        typedef hash_type result_type;
+
+        hash_type operator()( void const * pBuf, size_t len ) const
+        {
+            return CityHash64( reinterpret_cast<char const *>( pBuf ), len );
+        }
+
+        hash_type operator()( std::string const& s ) const
+        {
+            return CityHash64( s.c_str(), s.length() );
+        }
+
+        template <typename T>
+        hash_type operator()( T const& s ) const
+        {
+            return CityHash64( reinterpret_cast<char const *>( &s ), sizeof(s));
+        }
+
+        struct less
+        {
+            bool operator()( hash_type lhs, hash_type rhs ) const
+            {
+                return lhs < rhs;
+            }
+        };
+    };
+
+    class city128 {
+    public:
+        typedef uint128 hash_type;
+        typedef hash_type result_type;
+
+        hash_type operator()( void const * pBuf, size_t len ) const
+        {
+            return CityHash128( reinterpret_cast<char const *>( pBuf ), len );
+        }
+
+        hash_type operator()( std::string const& s ) const
+        {
+            return CityHash128( s.c_str(), s.length() );
+        }
+
+        template <typename T>
+        hash_type operator()( T const& s ) const
+        {
+            return CityHash128( reinterpret_cast<char const *>( &s ), sizeof(s));
+        }
+
+        struct less
+        {
+            bool operator()( hash_type const& lhs, hash_type const& rhs ) const
+            {
+                if ( lhs.first != rhs.first )
+                    return lhs.second < rhs.second;
+                return lhs.first < rhs.first;
+            }
+        };
+    };
+#endif // #if CDS_BUILD_BITS == 64
+
+
+} // namespace cds_test
+
+#endif // #ifndef CDSUNIT_HASH_FUNC_H
diff --git a/test/include/cds_test/stat_bronson_avltree_out.h b/test/include/cds_test/stat_bronson_avltree_out.h
new file mode 100644 (file)
index 0000000..1f98e19
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSTEST_STAT_BRONSONAVLTREE_OUT_H
+#define CDSTEST_STAT_BRONSONAVLTREE_OUT_H
+
+#include <cds_test/stress_test.h>
+#include <cds/container/details/bronson_avltree_base.h>
+
+namespace cds_test {
+
+    static inline property_stream& operator <<( property_stream& o, cds::container::bronson_avltree::empty_stat const& /*s*/ )
+    {
+        return o;
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::container::bronson_avltree::stat<> const& s )
+    {
+        return o
+            << CDSSTRESS_STAT_OUT( s, m_nFindSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nFindFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nFindRetry )
+            << CDSSTRESS_STAT_OUT( s, m_nFindWaitShrinking )
+            << CDSSTRESS_STAT_OUT( s, m_nInsertSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nInsertFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nRelaxedInsertFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nInsertRetry )
+            << CDSSTRESS_STAT_OUT( s, m_nUpdateWaitShrinking )
+            << CDSSTRESS_STAT_OUT( s, m_nUpdateRetry )
+            << CDSSTRESS_STAT_OUT( s, m_nUpdateRootWaitShrinking )
+            << CDSSTRESS_STAT_OUT( s, m_nUpdateSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nUpdateUnlinked )
+            << CDSSTRESS_STAT_OUT( s, m_nRemoveSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nRemoveFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nRemoveRetry )
+            << CDSSTRESS_STAT_OUT( s, m_nExtractSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nExtractFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nRemoveWaitShrinking )
+            << CDSSTRESS_STAT_OUT( s, m_nRemoveRootWaitShrinking )
+            << CDSSTRESS_STAT_OUT( s, m_nMakeRoutingNode )
+            << CDSSTRESS_STAT_OUT( s, m_nDisposedValue )
+            << CDSSTRESS_STAT_OUT( s, m_nDisposedNode )
+            << CDSSTRESS_STAT_OUT( s, m_nExtractedValue )
+            << CDSSTRESS_STAT_OUT( s, m_nRightRotation )
+            << CDSSTRESS_STAT_OUT( s, m_nLeftRotation )
+            << CDSSTRESS_STAT_OUT( s, m_nLeftRightRotation )
+            << CDSSTRESS_STAT_OUT( s, m_nRightLeftRotation )
+            << CDSSTRESS_STAT_OUT( s, m_nInsertRebalanceReq )
+            << CDSSTRESS_STAT_OUT( s, m_nRemoveRebalanceReq )
+            << CDSSTRESS_STAT_OUT( s, m_nRotateAfterRightRotation )
+            << CDSSTRESS_STAT_OUT( s, m_nRemoveAfterRightRotation )
+            << CDSSTRESS_STAT_OUT( s, m_nDamageAfterRightRotation )
+            << CDSSTRESS_STAT_OUT( s, m_nRotateAfterLeftRotation )
+            << CDSSTRESS_STAT_OUT( s, m_nRemoveAfterLeftRotation )
+            << CDSSTRESS_STAT_OUT( s, m_nDamageAfterLeftRotation )
+            << CDSSTRESS_STAT_OUT( s, m_nRotateAfterRLRotation )
+            << CDSSTRESS_STAT_OUT( s, m_nRemoveAfterRLRotation )
+            << CDSSTRESS_STAT_OUT( s, m_nRotateAfterLRRotation )
+            << CDSSTRESS_STAT_OUT( s, m_nRemoveAfterLRRotation );
+    }
+} //namespace cds_test
+
+#endif // #ifndef CDSTEST_STAT_BRONSONAVLTREE_OUT_H
diff --git a/test/include/cds_test/stat_cuckoo_out.h b/test/include/cds_test/stat_cuckoo_out.h
new file mode 100644 (file)
index 0000000..25c198f
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSTEST_STAT_CUCKOO_OUT_H
+#define CDSTEST_STAT_CUCKOO_OUT_H
+
+#include <cds/intrusive/cuckoo_set.h>
+
+namespace cds_test {
+
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::cuckoo::striping_stat const& s )
+    {
+        return o
+            << CDSSTRESS_STAT_OUT( s, m_nCellLockCount )
+            << CDSSTRESS_STAT_OUT( s, m_nCellLockCount )
+            << CDSSTRESS_STAT_OUT( s, m_nCellTryLockCount )
+            << CDSSTRESS_STAT_OUT( s, m_nFullLockCount )
+            << CDSSTRESS_STAT_OUT( s, m_nResizeLockCount )
+            << CDSSTRESS_STAT_OUT( s, m_nResizeCount );
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::cuckoo::empty_striping_stat const& /*s*/ )
+    {
+        return o;
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::cuckoo::refinable_stat const& s )
+    {
+        return o
+            << CDSSTRESS_STAT_OUT( s, m_nCellLockCount )
+            << CDSSTRESS_STAT_OUT( s, m_nCellLockWaitResizing )
+            << CDSSTRESS_STAT_OUT( s, m_nCellLockArrayChanged )
+            << CDSSTRESS_STAT_OUT( s, m_nCellLockFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nSecondCellLockCount )
+            << CDSSTRESS_STAT_OUT( s, m_nSecondCellLockFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nFullLockCount )
+            << CDSSTRESS_STAT_OUT( s, m_nFullLockIter )
+            << CDSSTRESS_STAT_OUT( s, m_nResizeLockCount )
+            << CDSSTRESS_STAT_OUT( s, m_nResizeLockIter )
+            << CDSSTRESS_STAT_OUT( s, m_nResizeLockArrayChanged )
+            << CDSSTRESS_STAT_OUT( s, m_nResizeCount );
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::cuckoo::empty_refinable_stat const& /*s*/ )
+    {
+        return o;
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::cuckoo::stat const& s )
+    {
+        return o
+            << CDSSTRESS_STAT_OUT( s, m_nRelocateCallCount )
+            << CDSSTRESS_STAT_OUT( s, m_nRelocateRoundCount )
+            << CDSSTRESS_STAT_OUT( s, m_nFalseRelocateCount )
+            << CDSSTRESS_STAT_OUT( s, m_nSuccessRelocateCount )
+            << CDSSTRESS_STAT_OUT( s, m_nRelocateAboveThresholdCount )
+            << CDSSTRESS_STAT_OUT( s, m_nFailedRelocateCount )
+            << CDSSTRESS_STAT_OUT( s, m_nResizeCallCount )
+            << CDSSTRESS_STAT_OUT( s, m_nFalseResizeCount )
+            << CDSSTRESS_STAT_OUT( s, m_nResizeSuccessNodeMove )
+            << CDSSTRESS_STAT_OUT( s, m_nResizeRelocateCall )
+            << CDSSTRESS_STAT_OUT( s, m_nInsertSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nInsertFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nInsertResizeCount )
+            << CDSSTRESS_STAT_OUT( s, m_nInsertRelocateCount )
+            << CDSSTRESS_STAT_OUT( s, m_nInsertRelocateFault )
+            << CDSSTRESS_STAT_OUT( s, m_nUpdateExistCount )
+            << CDSSTRESS_STAT_OUT( s, m_nUpdateSuccessCount )
+            << CDSSTRESS_STAT_OUT( s, m_nUpdateResizeCount )
+            << CDSSTRESS_STAT_OUT( s, m_nUpdateRelocateCount )
+            << CDSSTRESS_STAT_OUT( s, m_nUpdateRelocateFault )
+            << CDSSTRESS_STAT_OUT( s, m_nUnlinkSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nUnlinkFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nEraseSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nEraseFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nFindSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nFindFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nFindWithSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nFindWithFailed );
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::cuckoo::empty_stat const& /*s*/ )
+    {
+        return o;
+    }
+
+} // namespace cds_test
+
+#endif // #ifndef CDSTEST_STAT_CUCKOO_OUT_H
diff --git a/test/include/cds_test/stat_ellenbintree_out.h b/test/include/cds_test/stat_ellenbintree_out.h
new file mode 100644 (file)
index 0000000..5d74b43
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSTEST_STAT_ELLENBINTREE_OUT_H
+#define CDSTEST_STAT_ELLENBINTREE_OUT_H
+
+//#include "ellen_bintree_update_desc_pool.h"
+#include <cds_test/stress_test.h>
+#include <cds/intrusive/details/ellen_bintree_base.h>
+
+namespace cds_test {
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::ellen_bintree::empty_stat const& /*s*/ )
+    {
+        return o;
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::ellen_bintree::stat<> const& s )
+    {
+        return o
+            //<< "\t\t   Internal node allocated: " << ellen_bintree_pool::internal_node_counter::m_nAlloc.get() << "\n"
+            //<< "\t\t       Internal node freed: " << ellen_bintree_pool::internal_node_counter::m_nFree.get() << "\n"
+            << CDSSTRESS_STAT_OUT( s, m_nInternalNodeCreated )
+            << CDSSTRESS_STAT_OUT( s, m_nInternalNodeDeleted )
+            << CDSSTRESS_STAT_OUT( s, m_nUpdateDescCreated )
+            << CDSSTRESS_STAT_OUT( s, m_nUpdateDescDeleted )
+            << CDSSTRESS_STAT_OUT( s, m_nInsertSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nInsertFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nInsertRetries )
+            << CDSSTRESS_STAT_OUT( s, m_nUpdateExist )
+            << CDSSTRESS_STAT_OUT( s, m_nUpdateNew )
+            << CDSSTRESS_STAT_OUT( s, m_nUpdateRetries )
+            << CDSSTRESS_STAT_OUT( s, m_nEraseSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nEraseFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nEraseRetries )
+            << CDSSTRESS_STAT_OUT( s, m_nFindSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nFindFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nExtractMinSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nExtractMinFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nExtractMinRetries )
+            << CDSSTRESS_STAT_OUT( s, m_nExtractMaxSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nExtractMaxFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nExtractMaxRetries )
+            << CDSSTRESS_STAT_OUT( s, m_nSearchRetry )
+            << CDSSTRESS_STAT_OUT( s, m_nHelpInsert )
+            << CDSSTRESS_STAT_OUT( s, m_nHelpDelete )
+            << CDSSTRESS_STAT_OUT( s, m_nHelpMark )
+            << CDSSTRESS_STAT_OUT( s, m_nHelpGuardSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nHelpGuardFailed );
+    }
+} // namespace cds_test
+
+#endif // #ifndef CDSTEST_STAT_ELLENBINTREE_OUT_H
diff --git a/test/include/cds_test/stat_feldman_hashset_out.h b/test/include/cds_test/stat_feldman_hashset_out.h
new file mode 100644 (file)
index 0000000..7b3c540
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSTEST_STAT_FELDMAN_HASHSET_OUT_H
+#define CDSTEST_STAT_FELDMAN_HASHSET_OUT_H
+
+#include <cds_test/stress_test.h>
+#include <cds/intrusive/details/feldman_hashset_base.h>
+
+namespace cds_test {
+
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::feldman_hashset::empty_stat const& /*s*/ )
+    {
+        return o;
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::feldman_hashset::stat<> const& s )
+    {
+        return o
+            << CDSSTRESS_STAT_OUT( s, m_nInsertSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nInsertFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nInsertRetry )
+            << CDSSTRESS_STAT_OUT( s, m_nUpdateNew )
+            << CDSSTRESS_STAT_OUT( s, m_nUpdateExisting )
+            << CDSSTRESS_STAT_OUT( s, m_nUpdateFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nUpdateRetry )
+            << CDSSTRESS_STAT_OUT( s, m_nEraseSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nEraseFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nEraseRetry )
+            << CDSSTRESS_STAT_OUT( s, m_nFindSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nFindFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nExpandNodeSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nExpandNodeFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nSlotChanged )
+            << CDSSTRESS_STAT_OUT( s, m_nSlotConverting )
+            << CDSSTRESS_STAT_OUT( s, m_nArrayNodeCount )
+            << CDSSTRESS_STAT_OUT( s, m_nHeight );
+    }
+
+    static inline property_stream& operator<<( property_stream& o, std::vector< cds::intrusive::feldman_hashset::level_statistics > const& level_stat )
+    {
+#       define CDSSTRESS_LEVELSTAT_OUT( level, field ) \
+            CDSSTRESS_STAT_OUT_( "level_stat." + std::to_string(level) + "." + #field, it->field )
+        
+        o << CDSSTRESS_STAT_OUT_( "stat.level_count", level_stat.size() );
+        size_t i = 0;
+        for ( auto it = level_stat.begin(); it != level_stat.end(); ++it, ++i ) {
+            o << CDSSTRESS_LEVELSTAT_OUT( i, array_node_count )
+              << CDSSTRESS_LEVELSTAT_OUT( i, node_capacity )
+              << CDSSTRESS_LEVELSTAT_OUT( i, data_cell_count )
+              << CDSSTRESS_LEVELSTAT_OUT( i, array_cell_count )
+              << CDSSTRESS_LEVELSTAT_OUT( i, empty_cell_count );
+        }
+        return o;
+#       undef CDSSTRESS_LEVELSTAT_OUT
+    }
+
+} // namespace std
+
+#endif // #ifndef CDSTEST_STAT_FELDMAN_HASHSET_OUT_H
diff --git a/test/include/cds_test/stat_skiplist_out.h b/test/include/cds_test/stat_skiplist_out.h
new file mode 100644 (file)
index 0000000..6927351
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSTEST_STAT_SKIPLIST_OUT_H
+#define CDSTEST_STAT_SKIPLIST_OUT_H
+
+#include <cds/intrusive/details/skip_list_base.h>
+
+namespace cds_test {
+
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::skip_list::empty_stat const& /*s*/ )
+    {
+        return o;
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::skip_list::stat<> const& s )
+    {
+        {
+            std::stringstream stm;
+            for ( unsigned int i = 0; i < sizeof( s.m_nNodeHeightAdd ) / sizeof( s.m_nNodeHeightAdd[0] ); ++i )
+                stm << " +" << s.m_nNodeHeightAdd[i].get() << "/-" << s.m_nNodeHeightDel[i].get();
+            o << CDSSTRESS_STAT_OUT_( "stat.level_ins_del", stm.str().substr( 1 ).c_str());
+        }
+
+        return o
+            << CDSSTRESS_STAT_OUT( s, m_nInsertSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nInsertFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nInsertRetries )
+            << CDSSTRESS_STAT_OUT( s, m_nUpdateExist )
+            << CDSSTRESS_STAT_OUT( s, m_nUpdateNew )
+            << CDSSTRESS_STAT_OUT( s, m_nUnlinkSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nUnlinkFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nExtractSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nExtractFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nExtractRetries )
+            << CDSSTRESS_STAT_OUT( s, m_nExtractMinSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nExtractMinFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nExtractMinRetries )
+            << CDSSTRESS_STAT_OUT( s, m_nExtractMaxSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nExtractMaxFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nExtractMaxRetries )
+            << CDSSTRESS_STAT_OUT( s, m_nEraseSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nEraseFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nEraseRetry )
+            << CDSSTRESS_STAT_OUT( s, m_nFindFastSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nFindFastFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nFindSlowSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nFindSlowFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nRenewInsertPosition )
+            << CDSSTRESS_STAT_OUT( s, m_nLogicDeleteWhileInsert )
+            << CDSSTRESS_STAT_OUT( s, m_nNotFoundWhileInsert )
+            << CDSSTRESS_STAT_OUT( s, m_nFastErase )
+            << CDSSTRESS_STAT_OUT( s, m_nSlowErase )
+            << CDSSTRESS_STAT_OUT( s, m_nFastExtract )
+            << CDSSTRESS_STAT_OUT( s, m_nSlowExtract )
+            << CDSSTRESS_STAT_OUT( s, m_nEraseWhileFind )
+            << CDSSTRESS_STAT_OUT( s, m_nExtractWhileFind );
+    }
+
+} // namespace cds_test
+
+#endif // #ifndef CDSTEST_STAT_SKIPLIST_OUT_H
diff --git a/test/include/cds_test/stat_splitlist_out.h b/test/include/cds_test/stat_splitlist_out.h
new file mode 100644 (file)
index 0000000..9034349
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSTEST_STAT_SPLITLIST_OUT_H
+#define CDSTEST_STAT_SPLITLIST_OUT_H
+
+#include <cds/intrusive/details/split_list_base.h>
+
+namespace cds_test {
+
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::split_list::empty_stat const& /*s*/ )
+    {
+        return o;
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::split_list::stat<> const& s )
+    {
+        return o
+            << CDSSTRESS_STAT_OUT( s, m_nInsertSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nInsertFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nUpdateExist )
+            << CDSSTRESS_STAT_OUT( s, m_nUpdateNew )
+            << CDSSTRESS_STAT_OUT( s, m_nExtractSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nExtractFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nEraseSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nEraseFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nFindSuccess )
+            << CDSSTRESS_STAT_OUT( s, m_nFindFailed )
+            << CDSSTRESS_STAT_OUT( s, m_nHeadNodeAllocated )
+            << CDSSTRESS_STAT_OUT( s, m_nHeadNodeFreed )
+            << CDSSTRESS_STAT_OUT( s, m_nBucketCount )
+            << CDSSTRESS_STAT_OUT( s, m_nInitBucketRecursive )
+            << CDSSTRESS_STAT_OUT( s, m_nInitBucketContention )
+            << CDSSTRESS_STAT_OUT( s, m_nBusyWaitBucketInit );
+    }
+
+} // namespace cds_test
+
+#endif // #ifndef CDSTEST_STAT_SPLITLIST_OUT_H
diff --git a/test/include/cds_test/stat_sync_monitor_out.h b/test/include/cds_test/stat_sync_monitor_out.h
new file mode 100644 (file)
index 0000000..9c39811
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#if defined(CDSLIB_SYNC_INJECTING_MONITOR_H) && !defined(CDSUNIT_PRINT_INJECTING_MONITOR_STAT_H)
+#define CDSUNIT_PRINT_INJECTING_MONITOR_STAT_H
+
+#include <cds_test/stress_test.h>
+
+namespace cds_test {
+    static inline property_stream& operator <<( property_stream& o, cds::sync::injecting_monitor_traits::empty_stat const& /*s*/ )
+    {
+        return o;
+    }
+} // namespace cds_test
+#endif
+
+#if defined(CDSLIB_SYNC_POOL_MONITOR_H) && !defined(CDSUNIT_PRINT_POOL_MONITOR_STAT_H)
+#define CDSUNIT_PRINT_POOL_MONITOR_STAT_H
+
+#include <cds_test/stress_test.h>
+
+namespace cds_test {
+    static inline property_stream& operator <<( property_stream& o, cds::sync::pool_monitor_traits::empty_stat const& /*s*/ )
+    {
+        return o;
+    }
+
+#   define CDSSTRESS_POOLMONITOR_STAT_OUT( s, field ) CDSSTRESS_STAT_OUT_( "pool_monitor." #field, s.field.get() )
+
+    static inline property_stream& operator <<( property_stream& o, cds::sync::pool_monitor_traits::stat<> const& s )
+    {
+        return o
+            << CDSSTRESS_POOLMONITOR_STAT_OUT( s, m_nLockCount )
+            << CDSSTRESS_POOLMONITOR_STAT_OUT( s, m_nUnlockCount )
+            << CDSSTRESS_POOLMONITOR_STAT_OUT( s, m_nMaxLocked )
+            << CDSSTRESS_POOLMONITOR_STAT_OUT( s, m_nLockContention )
+            << CDSSTRESS_POOLMONITOR_STAT_OUT( s, m_nUnlockContention )
+            << CDSSTRESS_POOLMONITOR_STAT_OUT( s, m_nLockAllocation )
+            << CDSSTRESS_POOLMONITOR_STAT_OUT( s, m_nLockDeallocation )
+            << CDSSTRESS_POOLMONITOR_STAT_OUT( s, m_nMaxAllocated );
+    }
+
+#   undef CDSSTRESS_POOLMONITOR_STAT_OUT
+
+} // namespace cds_test
+#endif
diff --git a/test/include/cds_test/stress_test.h b/test/include/cds_test/stress_test.h
new file mode 100644 (file)
index 0000000..60fe06c
--- /dev/null
@@ -0,0 +1,182 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef CDSTEST_STRESS_TEST_H
+#define CDSTEST_STRESS_TEST_H
+
+#include <map>
+#include <cds_test/fixture.h>
+#include <cds_test/thread.h>
+
+namespace cds_test {
+
+    // Test configuration
+    class config
+    {
+    public:
+        std::string get( const char * pszParamName, const char * pszDefVal = NULL ) const
+        {
+            std::string strParamName( pszParamName );
+            auto it = m_Cfg.find( strParamName );
+            if ( it == m_Cfg.end() )
+                return std::string( pszDefVal ); // param not found -> returns default value
+            return it->second;
+        }
+
+        int get_int( const char * pszParamName, int defVal = 0 ) const
+        {
+            std::string strParamName( pszParamName );
+            cfg_map::const_iterator it = m_Cfg.find( strParamName );
+            if ( it == m_Cfg.end() )
+                return defVal; // param not found -> returns default value
+            return atoi( it->second.c_str());
+        }
+
+        unsigned int get_uint( const char * pszParamName, unsigned int defVal = 0 ) const
+        {
+            std::string strParamName( pszParamName );
+            cfg_map::const_iterator it = m_Cfg.find( strParamName );
+            if ( it == m_Cfg.end() )
+                return defVal; // param not found -> returns default value
+            return static_cast<unsigned int>( strtoul( it->second.c_str(), NULL, 10 ));
+        }
+
+        long get_long( const char * pszParamName, long defVal = 0 ) const
+        {
+            std::string strParamName( pszParamName );
+            cfg_map::const_iterator it = m_Cfg.find( strParamName );
+            if ( it == m_Cfg.end() )
+                return defVal; // param not found -> returns default value
+            return strtol( it->second.c_str(), NULL, 10 );
+        }
+
+        unsigned long get_ulong( const char * pszParamName, unsigned long defVal = 0 ) const
+        {
+            std::string strParamName( pszParamName );
+            cfg_map::const_iterator it = m_Cfg.find( strParamName );
+            if ( it == m_Cfg.end() )
+                return defVal; // param not found -> returns default value
+            return strtoul( it->second.c_str(), NULL, 10 );
+        }
+
+        size_t get_size_t( const char * pszParamName, size_t defVal = 0 ) const
+        {
+            std::string strParamName( pszParamName );
+            cfg_map::const_iterator it = m_Cfg.find( strParamName );
+            if ( it == m_Cfg.end() )
+                return defVal; // param not found -> returns default value
+            return static_cast<size_t>( strtoul( it->second.c_str(), NULL, 10 ));
+        }
+
+        bool get_bool( const char * pszParamName, bool defVal = false ) const
+        {
+            std::string strParamName( pszParamName );
+            cfg_map::const_iterator it = m_Cfg.find( strParamName );
+            if ( it == m_Cfg.end() )
+                return defVal; // param not found -> returns default value
+            return !( it->second.empty() 
+                   || it->second == "0" 
+                   || it->second == "false"
+                   || it->second == "no"
+                   );
+        }
+
+    private:
+        typedef std::map< std::string, std::string >  cfg_map;
+        cfg_map m_Cfg; // map param_name => value
+
+        friend class config_file;
+    };
+
+    struct property_stream;
+
+    template <typename T>
+    static inline property_stream& operator <<( property_stream& s, std::pair<char const *, T > prop )
+    {
+        std::stringstream ss;
+        ss << prop.second;
+        ::testing::Test::RecordProperty( prop.first, ss.str().c_str());
+        return s;
+    }
+
+    template <typename T>
+    static inline property_stream& operator <<( property_stream& s, std::pair<std::string, T > prop )
+    {
+        std::stringstream ss;
+        ss << prop.second;
+        ::testing::Test::RecordProperty( prop.first.c_str(), ss.str().c_str() );
+        return s;
+    }
+
+    static inline property_stream& operator <<( property_stream& s, std::pair<char const *, std::chrono::milliseconds > prop )
+    {
+        std::stringstream ss;
+        ss << prop.second.count();
+        ::testing::Test::RecordProperty( prop.first, ss.str().c_str() );
+        return s;
+    }
+
+#define CDSSTRESS_STAT_OUT_( name, val ) std::make_pair( name, val )
+#define CDSSTRESS_STAT_OUT( s, field ) CDSSTRESS_STAT_OUT_( "stat." #field, s.field.get())
+
+    class stress_fixture : public fixture
+    {
+    protected:
+        stress_fixture()
+            : m_thread_pool( *this )
+        {}
+
+        //static void SetUpTestCase();\r
+        //static void TearDownTestCase();\r
+\r
+        thread_pool& get_pool()\r
+        {\r
+            return m_thread_pool;\r
+        }\r
+\r
+        static property_stream& propout();\r
+\r
+    public:\r
+        static config const& get_config( char const * slot );\r
+        static config const& get_config( std::string const& slot );\r
+\r
+        static std::vector<std::string> load_dictionary();\r
+\r
+    private:\r
+        thread_pool     m_thread_pool;\r
+    };
+
+
+    // Internal functions
+    void init_config( int argc, char **argv );
+
+} // namespace cds_test
+
+#endif // CDSTEST_FIXTURE_H
diff --git a/test/include/cds_test/thread.h b/test/include/cds_test/thread.h
new file mode 100644 (file)
index 0000000..8d2f55a
--- /dev/null
@@ -0,0 +1,285 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef CDSTEST_THREAD_H
+#define CDSTEST_THREAD_H
+
+#include <gtest/gtest.h>
+#include <vector>
+#include <thread>
+#include <condition_variable>
+#include <mutex>
+#include <chrono>
+#include <cds/threading/model.h>
+
+namespace cds_test {
+
+    // Forwards
+    class thread;
+    class thread_pool;
+
+    // Test thread
+    class thread
+    {
+        void run();
+
+    protected: // thread_pool interface
+        thread( thread const& sample );
+
+        virtual ~thread()
+        {}
+
+        void join()
+        {
+            m_impl.join();
+        }
+
+    protected:
+        virtual thread * clone() = 0;
+        virtual void test() = 0;
+
+        virtual void SetUp()
+        {
+            cds::threading::Manager::attachThread();
+        }
+
+        virtual void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+        }
+
+    public:
+        explicit thread( thread_pool& master, int type = 0 );
+        
+        thread_pool& pool() { return m_pool; }
+        int type() const { return m_type; }
+        size_t id() const { return m_id;  }
+        bool time_elapsed() const;
+
+    private:
+        friend class thread_pool;
+
+        thread_pool&    m_pool;
+        int             m_type;
+        size_t          m_id;
+        std::thread     m_impl;
+    };
+
+    // Pool of test threads
+    class thread_pool
+    {
+    public:
+        explicit thread_pool( ::testing::Test& fixture )
+            : m_fixture( fixture )
+            , m_bRunning( false )
+            , m_bStopped( false )
+            , m_doneCount( 0 )
+            , m_bTimeElapsed( false )
+            , m_readyCount( 0 )
+        {}
+
+        ~thread_pool()
+        {
+            clear();
+        }
+
+        void add( thread * what )
+        {
+            m_threads.push_back( what );
+        }
+
+        void add( thread * what, size_t count )
+        {
+            add( what );
+            for ( size_t i = 1; i < count; ++i ) {
+                thread * p = what->clone();
+                add( p );
+            }
+        }
+
+        std::chrono::milliseconds run()
+        {
+            return run( std::chrono::seconds::zero() );
+        }
+
+        std::chrono::milliseconds run( std::chrono::seconds duration )
+        {
+            m_bStopped = false;
+            m_doneCount = 0;
+
+            while ( m_readyCount.load() != m_threads.size() )
+                std::this_thread::yield();
+
+            m_bTimeElapsed.store( false, std::memory_order_release );
+
+            auto native_duration = std::chrono::duration_cast<std::chrono::steady_clock::duration>(duration);
+            auto time_start = std::chrono::steady_clock::now();
+            auto const expected_end = time_start + native_duration;
+
+            {
+                scoped_lock l( m_cvMutex );
+                m_bRunning = true;
+                m_cvStart.notify_all();
+            }
+
+            if ( duration != std::chrono::seconds::zero() ) {
+                for ( ;; ) {
+                    std::this_thread::sleep_for( native_duration );
+                    auto time_now = std::chrono::steady_clock::now();
+                    if ( time_now >= expected_end )
+                        break;
+                    native_duration = expected_end - time_now;
+                } 
+            }
+            m_bTimeElapsed.store( true, std::memory_order_release );
+
+            {
+                scoped_lock l( m_cvMutex );
+                while ( m_doneCount != m_threads.size() )
+                    m_cvDone.wait( l );
+                m_bStopped = true;
+            }
+            auto time_end = std::chrono::steady_clock::now();
+
+            m_cvStop.notify_all();
+
+            for ( auto t : m_threads )
+                t->join();
+
+            return m_testDuration = std::chrono::duration_cast<std::chrono::milliseconds>(time_end - time_start);
+        }
+
+        size_t size() const             { return m_threads.size(); }
+        thread& get( size_t idx ) const { return *m_threads.at( idx ); }
+
+        template <typename Fixture>
+        Fixture& fixture()
+        {
+            return static_cast<Fixture&>(m_fixture);
+        }
+
+        std::chrono::milliseconds duration() const { return m_testDuration; }
+
+        void clear()
+        {
+            for ( auto t : m_threads )
+                delete t;
+            m_threads.clear();
+            m_bRunning = false;
+            m_bStopped = false;
+            m_doneCount = 0;
+        }
+
+    protected: // thread interface
+        size_t get_next_id()
+        {
+            return m_threads.size();
+        }
+
+        void    ready_to_start( thread& /*who*/ )
+        {
+            // Called from test thread
+
+            // Wait for all thread created
+            scoped_lock l( m_cvMutex );
+            m_readyCount.fetch_add( 1 );
+            while ( !m_bRunning )
+                m_cvStart.wait( l );
+        }
+
+        void    thread_done( thread& /*who*/ )
+        {
+            // Called from test thread
+
+            {
+                scoped_lock l( m_cvMutex );
+                ++m_doneCount;
+
+                // Tell pool that the thread is done
+                m_cvDone.notify_all();
+
+                // Wait for all thread done
+                while ( !m_bStopped )
+                    m_cvStop.wait( l );
+            }
+        }
+
+    private:
+        friend class thread;
+
+        ::testing::Test&        m_fixture;
+        std::vector<thread *>   m_threads;
+
+        typedef std::unique_lock<std::mutex> scoped_lock;
+        std::mutex              m_cvMutex;
+        std::condition_variable m_cvStart;
+        std::condition_variable m_cvStop;
+        std::condition_variable m_cvDone;
+
+        volatile bool   m_bRunning;
+        volatile bool   m_bStopped;
+        volatile size_t m_doneCount;
+        std::atomic<bool> m_bTimeElapsed;
+        std::atomic<size_t> m_readyCount;
+
+        std::chrono::milliseconds m_testDuration;
+    };
+
+    inline thread::thread( thread_pool& master, int type /*= 0*/ )
+        : m_pool( master )
+        , m_type( type )
+        , m_id( master.get_next_id())
+        , m_impl( &thread::run, this )
+    {}
+
+    inline thread::thread( thread const& sample )
+        : m_pool( sample.m_pool )
+        , m_type( sample.m_type )
+        , m_id( m_pool.get_next_id() )
+        , m_impl( &thread::run, this )
+    {}
+
+    inline void thread::run()
+    {
+        SetUp();
+        m_pool.ready_to_start( *this );
+        test();
+        m_pool.thread_done( *this );
+        TearDown();
+    }
+
+    inline bool thread::time_elapsed() const
+    {
+        return m_pool.m_bTimeElapsed.load( std::memory_order_acquire );
+    }
+
+} // namespace cds_test
+
+#endif // CDSTEST_THREAD_H
diff --git a/test/stress/CMakeLists.txt b/test/stress/CMakeLists.txt
new file mode 100644 (file)
index 0000000..6b576d4
--- /dev/null
@@ -0,0 +1,33 @@
+set(CDSSTRESS_FRAMEWORK_LIBRARY stress-framework)
+
+set(CDSSTRESS_FRAMEWORK_SOURCES
+    framework/city.cpp
+    framework/config.cpp
+    framework/ellen_bintree_update_desc_pool.cpp
+    framework/michael_alloc.cpp
+    framework/stress_test.cpp
+)
+
+add_library(${CDSSTRESS_FRAMEWORK_LIBRARY} OBJECT ${CDSSTRESS_FRAMEWORK_SOURCES}) 
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/map)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/pqueue)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/queue)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/set)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/stack)
+
+add_custom_target( stress-all
+    DEPENDS
+        stress-map
+        stress-pqueue
+        stress-queue
+        stress-stack
+        stress-set
+)
+
+file(GLOB CONF_FILES ${PROJECT_SOURCE_DIR}/test/stress/data/*.conf)
+file(COPY ${CONF_FILES} DESTINATION ${EXECUTABLE_OUTPUT_PATH})
diff --git a/test/stress/data/split.pl b/test/stress/data/split.pl
new file mode 100644 (file)
index 0000000..3d0f4c7
--- /dev/null
@@ -0,0 +1,39 @@
+#!/bin/perl\r
+\r
+my %words ;\r
+\r
+open( my $f, "text.txt" ) ;\r
+binmode $f ;\r
+\r
+my $text = ''  ;\r
+$text .= $_ while (<$f>) ;\r
+close $f ;\r
+\r
+my @a = split /[^\w'-]/, $text ;\r
+foreach my $w (@a) {\r
+       $words{$w} += 1 if $w ;\r
+}\r
+for (my $j = 1; $j < 30; ++$j ) {\r
+       for ( my $i = 0; $i + $j - 1 < @a; $i += 1 ) {\r
+               my $s = '';\r
+               for ( my $k = 0; $k < $j; ++$k ) {\r
+                       $s .= ' '.$a[$i+$k];\r
+               }\r
+               $s =~ /\s*(\S.+\S)\s*/;\r
+               $s = $1 ;\r
+               $s =~ s/\s\s+/ /g ;\r
+               $words{$s} += 1 ;\r
+       }\r
+}\r
+\r
+open (my $dst, ">dictionary.txt") ;\r
+binmode $dst ;\r
+\r
+my $nCount = 0 ;\r
+$nCount++ foreach (keys %words) ;\r
+print $dst $nCount, "\n" ;\r
+\r
+print "Generate test dictionary...\n" ;\r
+print $dst $_, "\n" foreach (keys %words)      ;\r
+\r
+close $dst  ;\r
diff --git a/test/stress/data/test-debug.conf b/test/stress/data/test-debug.conf
new file mode 100644 (file)
index 0000000..3ee90f1
--- /dev/null
@@ -0,0 +1,321 @@
+[General]\r
+# HZP scan strategy, possible values are "classic", "inplace". Default is "classic"\r
+HZP_scan_strategy=inplace\r
+hazard_pointer_count=72\r
+\r
+# cds::gc::DHP initialization parameters\r
+dhp_liberate_threshold=1024\r
+dhp_init_guard_count=8\r
+dhp_epoch_count=16\r
+\r
+# cds::urcu::gc initialization parameters\r
+rcu_buffer_size=256\r
+\r
+[Atomic_ST]\r
+iterCount=10000\r
+\r
+[thread_init_fini]\r
+ThreadCount=4\r
+PassCount=100000\r
+\r
+[Allocator_ST]\r
+PassCount=10\r
+# Total allocation per pass, Megabytes\r
+AllocPerPass=1024\r
+\r
+[Linux_Scale]\r
+# Allocation count per test\r
+PassCount=1000000\r
+# Max allocated block size in bytes\r
+MaxBlockSize=65000\r
+# Max thread count. 0 is processor_count * 2\r
+MaxThreadCount=0\r
+\r
+[Hoard_ThreadTest]\r
+MinBlockSize=16\r
+MaxBlockSize=64\r
+BlockCount=5000\r
+PassCount=25\r
+# Max thread count. 0 is processor_count * 2\r
+MaxThreadCount=0\r
+\r
+[Larson]\r
+MinBlockSize=8\r
+MaxBlockSize=1024\r
+PassCount=100000\r
+# Max thread count. 0 is processor_count * 2\r
+MaxThreadCount=0\r
+\r
+[Random_Alloc]\r
+DataSize=1000\r
+MinBlockSize=8\r
+MaxBlockSize=100000\r
+PassCount=100000\r
+# Max thread count. 0 is processor_count * 2\r
+MaxThreadCount=0\r
+\r
+\r
+[Spinlock_MT]\r
+ThreadCount=4\r
+LoopCount=100000\r
+\r
+[Stack_Push]\r
+ThreadCount=8\r
+StackSize=100000\r
+EliminationSize=4\r
+\r
+[Stack_PushPop]\r
+PushThreadCount=16\r
+PopThreadCount=16\r
+StackSize=1600000\r
+EliminationSize=4\r
+\r
+[IntrusiveStack_PushPop]\r
+PushThreadCount=16\r
+PopThreadCount=16\r
+StackSize=1600000\r
+EliminationSize=4\r
+# Flat combining stack parameters\r
+# FCIterate=1 - the test will be run iteratively\r
+#   for combine pass count from 1 to FCCombinePassCount\r
+#   and compact factor from 1 to FCCompactFactor\r
+# FCIterate=0 - the test runs only once for giving\r
+#   FCCombinePassCount and FCCompactFactor\r
+FCIterate=0\r
+FCCombinePassCount=4\r
+FCCompactFactor=64\r
+\r
+[queue_push]\r
+ThreadCount=4\r
+QueueSize=100000\r
+# SegmentedQueue parameters:\r
+# SegmentedQueue_Iterate: \r
+#    1 - run test iteratively for segment size from 4 up to SegmentedQueue_SegmentSize\r
+#    0 - run test for segment size equal to SegmentedQueue_SegmentSize\r
+SegmentedQueue_Iterate=0\r
+SegmentedQueue_SegmentSize=64\r
+\r
+[queue_pop]\r
+ThreadCount=8\r
+QueueSize=100000\r
+# SegmentedQueue parameters:\r
+# SegmentedQueue_Iterate: \r
+#    1 - run test iteratively for segment size from 4 up to SegmentedQueue_SegmentSize\r
+#    0 - run test for segment size equal to SegmentedQueue_SegmentSize\r
+SegmentedQueue_Iterate=0\r
+SegmentedQueue_SegmentSize=64\r
+\r
+[queue_push_pop]\r
+ProducerCount=3\r
+ConsumerCount=3\r
+QueueSize=100000\r
+# SegmentedQueue parameters:\r
+# SegmentedQueue_Iterate: \r
+#    1 - run test iteratively for segment size from 4 up to SegmentedQueue_SegmentSize\r
+#    0 - run test for segment size equal to SegmentedQueue_SegmentSize\r
+SegmentedQueue_Iterate=0\r
+SegmentedQueue_SegmentSize=64\r
+\r
+[queue_random]\r
+ThreadCount=4\r
+QueueSize=500000\r
+# SegmentedQueue parameters:\r
+# SegmentedQueue_Iterate: \r
+#    1 - run test iteratively for segment size from 4 up to SegmentedQueue_SegmentSize\r
+#    0 - run test for segment size equal to SegmentedQueue_SegmentSize\r
+SegmentedQueue_Iterate=0\r
+SegmentedQueue_SegmentSize=64\r
+\r
+[intrusive_queue_push_pop]\r
+ReaderCount=3\r
+WriterCount=3\r
+QueueSize=100000\r
+# Flat combining queue parameters\r
+FCCompactFactor=64\r
+FCPassCount=8\r
+# SegmentedQueue parameters:\r
+# SegmentedQueue_Iterate: \r
+#    1 - run test iteratively for segment size from 4 up to SegmentedQueue_SegmentSize\r
+#    0 - run test for segment size equal to SegmentedQueue_SegmentSize\r
+SegmentedQueue_Iterate=0\r
+SegmentedQueue_SegmentSize=64\r
+\r
+[bounded_queue_fulness]\r
+ThreadCount=4\r
+QueueSize=1024\r
+PassCount=100000\r
+\r
+[pqueue_pop]\r
+ThreadCount=4\r
+QueueSize=10000\r
+\r
+[pqueue_push]\r
+ThreadCount=4\r
+QueueSize=10000\r
+\r
+[pqueue_push_pop]\r
+PushThreadCount=4\r
+PopThreadCount=4\r
+QueueSize=10000\r
+\r
+[Map_Nonconcurrent_iterator]\r
+MapSize=1000000\r
+\r
+[Map_Nonconcurrent_iterator_MT]\r
+ThreadCount=4\r
+MapSize=1000000\r
+\r
+[map_find_int]\r
+ThreadCount=2\r
+MapSize=10000\r
+PercentExists=50\r
+PassCount=2\r
+MaxLoadFactor=4\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=256\r
+CuckooProbesetSize=8\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=8\r
+FeldmanMapArrayBits=4\r
+\r
+[map_find_string]\r
+ThreadCount=2\r
+MapSize=10000\r
+PercentExists=50\r
+PassCount=2\r
+MaxLoadFactor=4\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=256\r
+CuckooProbesetSize=8\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=8\r
+FeldmanMapArrayBits=4\r
+\r
+[map_insdel_int]\r
+InsertThreadCount=4\r
+DeleteThreadCount=4\r
+ThreadPassCount=3\r
+MapSize=30000\r
+MaxLoadFactor=4\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=256\r
+CuckooProbesetSize=8\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=8\r
+FeldmanMapArrayBits=4\r
+\r
+[map_insdel_func]\r
+InsertThreadCount=4\r
+DeleteThreadCount=4\r
+UpdateThreadCount=4\r
+ThreadPassCount=8\r
+MapSize=10000\r
+MaxLoadFactor=4\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=256\r
+CuckooProbesetSize=8\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=8\r
+FeldmanMapArrayBits=4\r
+\r
+[map_insdel_item_int]\r
+InsertThreadCount=4\r
+DeleteThreadCount=4\r
+MapSize=5000\r
+GoalItem=2500\r
+AttemptCount=200\r
+MaxLoadFactor=4\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=256\r
+CuckooProbesetSize=8\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=8\r
+FeldmanMapArrayBits=4\r
+\r
+[map_insdel_string]\r
+InsertThreadCount=4\r
+DeleteThreadCount=4\r
+ThreadPassCount=4\r
+MapSize=20000\r
+MaxLoadFactor=4\r
+PrintGCStateFlag=1\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=256\r
+CuckooProbesetSize=8\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=8\r
+FeldmanMapArrayBits=4\r
+\r
+[map_insfind_int]\r
+ThreadCount=0\r
+MapSize=2000\r
+MaxLoadFactor=4\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=256\r
+CuckooProbesetSize=8\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=8\r
+FeldmanMapArrayBits=4\r
+\r
+[map_insdelfind]\r
+InitialMapSize=50000\r
+ThreadCount=4\r
+MaxLoadFactor=8\r
+InsertPercentage=10\r
+DeletePercentage=10\r
+Duration=5\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=256\r
+CuckooProbesetSize=8\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=8\r
+FeldmanMapArrayBits=4\r
+\r
+[map_delodd]\r
+MapSize=50000\r
+InsThreadCount=2\r
+DelThreadCount=2\r
+ExtractThreadCount=2\r
+MaxLoadFactor=4\r
+\r
+#Cuckoo map properties\r
+CuckooInitialSize=256\r
+CuckooProbesetSize=8\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=8\r
+FeldmanMapArrayBits=4\r
diff --git a/test/stress/data/test-express.conf b/test/stress/data/test-express.conf
new file mode 100644 (file)
index 0000000..db39a26
--- /dev/null
@@ -0,0 +1,315 @@
+[General]\r
+# HZP scan strategy, possible values are "classic", "inplace". Default is "classic"\r
+HZP_scan_strategy=inplace\r
+# Hazard pointer count per thread, for gc::HP\r
+hazard_pointer_count=72\r
+\r
+# cds::gc::DHP initialization parameters\r
+dhp_liberate_threshold=1024\r
+dhp_init_guard_count=16\r
+dhp_epoch_count=16\r
+\r
+# cds::urcu::gc initialization parameters\r
+rcu_buffer_size=256\r
+\r
+[Atomic_ST]\r
+iterCount=1000000\r
+\r
+[thread_init_fini]\r
+ThreadCount=8\r
+PassCount=100000\r
+\r
+[Allocator_ST]\r
+PassCount=5\r
+# Total allocation per pass, Megabytes\r
+AllocPerPass=256\r
+\r
+[Linux_Scale]\r
+# Allocation count per test\r
+PassCount=100000\r
+# Max allocated block size in bytes\r
+MaxBlockSize=10000\r
+# Max thread count. 0 is processor_count * 2\r
+MaxThreadCount=4\r
+\r
+[Hoard_ThreadTest]\r
+MinBlockSize=16\r
+MaxBlockSize=64\r
+BlockCount=10000\r
+PassCount=10\r
+# Max thread count. 0 is processor_count * 2\r
+MaxThreadCount=4\r
+\r
+[Larson]\r
+MinBlockSize=8\r
+MaxBlockSize=1024\r
+BlocksPerThread=1000\r
+PassCount=1000000\r
+# Max thread count. 0 is processor_count * 2\r
+MaxThreadCount=4\r
+\r
+[Random_Alloc]\r
+DataSize=1000\r
+MinBlockSize=8\r
+MaxBlockSize=65000\r
+PassCount=100000\r
+# Max thread count. 0 is processor_count * 2\r
+MaxThreadCount=4\r
+\r
+[Spinlock_MT]\r
+ThreadCount=8\r
+LoopCount=1000000\r
+\r
+[Stack_Push]\r
+ThreadCount=8\r
+StackSize=500000\r
+EliminationSize=4\r
+\r
+[Stack_PushPop]\r
+PushThreadCount=4\r
+PopThreadCount=4\r
+StackSize=4000000\r
+EliminationSize=4\r
+\r
+[IntrusiveStack_PushPop]\r
+PushThreadCount=4\r
+PopThreadCount=4\r
+StackSize=4000000\r
+EliminationSize=4\r
+# Flat combining stack parameters\r
+# FCIterate=1 - the test will be run iteratively\r
+#   for combine pass count from 1 to FCCombinePassCount\r
+#   and compact factor from 1 to FCCompactFactor\r
+# FCIterate=0 - the test runs only once for giving\r
+#   FCCombinePassCount and FCCompactFactor\r
+FCIterate=0\r
+FCCombinePassCount=4\r
+FCCompactFactor=64\r
+\r
+[queue_push]\r
+ThreadCount=8\r
+QueueSize=500000\r
+# SegmentedQueue parameters:\r
+# SegmentedQueue_Iterate: \r
+#    1 - run test iteratively for segment size from 4 up to SegmentedQueue_SegmentSize\r
+#    0 - run test for segment size equal to SegmentedQueue_SegmentSize\r
+SegmentedQueue_Iterate=0\r
+SegmentedQueue_SegmentSize=64\r
+\r
+[queue_pop]\r
+ThreadCount=8\r
+QueueSize=500000\r
+# SegmentedQueue parameters:\r
+# SegmentedQueue_Iterate: \r
+#    1 - run test iteratively for segment size from 4 up to SegmentedQueue_SegmentSize\r
+#    0 - run test for segment size equal to SegmentedQueue_SegmentSize\r
+SegmentedQueue_Iterate=0\r
+SegmentedQueue_SegmentSize=64\r
+\r
+[queue_push_pop]\r
+ConsumerCount=4\r
+ProducerCount=4\r
+QueueSize=500000\r
+# SegmentedQueue parameters:\r
+# SegmentedQueue_Iterate: \r
+#    1 - run test iteratively for segment size from 4 up to SegmentedQueue_SegmentSize\r
+#    0 - run test for segment size equal to SegmentedQueue_SegmentSize\r
+SegmentedQueue_Iterate=0\r
+SegmentedQueue_SegmentSize=64\r
+\r
+[queue_random]\r
+ThreadCount=8\r
+QueueSize=500000\r
+# SegmentedQueue parameters:\r
+# SegmentedQueue_Iterate: \r
+#    1 - run test iteratively for segment size from 4 up to SegmentedQueue_SegmentSize\r
+#    0 - run test for segment size equal to SegmentedQueue_SegmentSize\r
+SegmentedQueue_Iterate=0\r
+SegmentedQueue_SegmentSize=64\r
+\r
+[intrusive_queue_push_pop]\r
+ReaderCount=4\r
+WriterCount=4\r
+QueueSize=500000\r
+# Flat combining queue parameters\r
+FCCompactFactor=64\r
+FCPassCount=8\r
+# SegmentedQueue parameters:\r
+# SegmentedQueue_Iterate: \r
+#    1 - run test iteratively for segment size from 4 up to SegmentedQueue_SegmentSize\r
+#    0 - run test for segment size equal to SegmentedQueue_SegmentSize\r
+SegmentedQueue_Iterate=0\r
+SegmentedQueue_SegmentSize=64\r
+\r
+[bounded_queue_fulness]\r
+ThreadCount=4\r
+QueueSize=1024\r
+PassCount=100000\r
+\r
+[pqueue_pop]\r
+ThreadCount=8\r
+QueueSize=1000000\r
+\r
+[pqueue_push]\r
+ThreadCount=8\r
+QueueSize=1000000\r
+\r
+[pqueue_push_pop]\r
+PushThreadCount=4\r
+PopThreadCount=4\r
+QueueSize=500000\r
+\r
+[map_find_int]\r
+ThreadCount=8\r
+MapSize=100000\r
+PercentExists=50\r
+PassCount=2\r
+MaxLoadFactor=4\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=1024\r
+CuckooProbesetSize=16\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=8\r
+FeldmanMapArrayBits=4\r
+\r
+[map_find_string]\r
+ThreadCount=8\r
+MapSize=100000\r
+PercentExists=50\r
+PassCount=2\r
+MaxLoadFactor=4\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=1024\r
+CuckooProbesetSize=16\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=8\r
+FeldmanMapArrayBits=4\r
+\r
+[map_insdel_int]\r
+InsertThreadCount=4\r
+DeleteThreadCount=4\r
+ThreadPassCount=4\r
+MapSize=50000\r
+MaxLoadFactor=4\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=1024\r
+CuckooProbesetSize=16\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=8\r
+FeldmanMapArrayBits=4\r
+\r
+[map_insdel_func]\r
+InsertThreadCount=4\r
+DeleteThreadCount=4\r
+UpdateThreadCount=4\r
+ThreadPassCount=4\r
+MapSize=50000\r
+MaxLoadFactor=4\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=1024\r
+CuckooProbesetSize=16\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=8\r
+FeldmanMapArrayBits=4\r
+\r
+[map_insdel_item_int]\r
+InsertThreadCount=4\r
+DeleteThreadCount=4\r
+MapSize=10000\r
+GoalItem=5000\r
+AttemptCount=100\r
+MaxLoadFactor=4\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=1024\r
+CuckooProbesetSize=16\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=8\r
+FeldmanMapArrayBits=4\r
+\r
+[map_insdel_string]\r
+InsertThreadCount=4\r
+DeleteThreadCount=4\r
+ThreadPassCount=3\r
+MapSize=30000\r
+MaxLoadFactor=4\r
+PrintGCStateFlag=1\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=1024\r
+CuckooProbesetSize=16\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=8\r
+FeldmanMapArrayBits=4\r
+\r
+[map_insfind_int]\r
+ThreadCount=0\r
+MapSize=1000\r
+MaxLoadFactor=4\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=1024\r
+CuckooProbesetSize=16\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=8\r
+FeldmanMapArrayBits=4\r
+\r
+[map_insdelfind]\r
+InitialMapSize=500000\r
+ThreadCount=8\r
+MaxLoadFactor=4\r
+InsertPercentage=10\r
+DeletePercentage=10\r
+Duration=5\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=1024\r
+CuckooProbesetSize=16\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=8\r
+FeldmanMapArrayBits=4\r
+\r
+[map_delodd]\r
+MapSize=500000\r
+InsThreadCount=4\r
+DelThreadCount=3\r
+ExtractThreadCount=3\r
+MaxLoadFactor=4\r
+\r
+#Cuckoo map properties\r
+CuckooInitialSize=1024\r
+CuckooProbesetSize=16\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=8\r
+FeldmanMapArrayBits=4\r
diff --git a/test/stress/data/test.conf b/test/stress/data/test.conf
new file mode 100644 (file)
index 0000000..b003909
--- /dev/null
@@ -0,0 +1,313 @@
+[General]\r
+# HZP scan strategy, possible values are "classic", "inplace". Default is "classic"\r
+HZP_scan_strategy=inplace\r
+hazard_pointer_count=72\r
+\r
+# cds::gc::DHP initialization parameters\r
+dhp_liberate_threshold=1024\r
+dhp_init_guard_count=16\r
+dhp_epoch_count=16\r
+\r
+# cds::urcu::gc initialization parameters\r
+rcu_buffer_size=256\r
+\r
+[Atomic_ST]\r
+iterCount=1000000\r
+\r
+[thread_init_fini]\r
+ThreadCount=8\r
+PassCount=100000\r
+\r
+[Allocator_ST]\r
+PassCount=10\r
+# Total allocation per pass, Megabytes\r
+AllocPerPass=1024\r
+\r
+[Linux_Scale]\r
+# Allocation count per test\r
+PassCount=10000000\r
+# Max allocated block size in bytes\r
+MaxBlockSize=66000\r
+# Max thread count. 0 is processor_count * 2\r
+MaxThreadCount=0\r
+\r
+[Hoard_ThreadTest]\r
+MinBlockSize=16\r
+MaxBlockSize=1024\r
+BlockCount=10000\r
+PassCount=500\r
+# Max thread count. 0 is processor_count * 2\r
+MaxThreadCount=0\r
+\r
+[Larson]\r
+MinBlockSize=8\r
+MaxBlockSize=1024\r
+BlocksPerThread=1000\r
+PassCount=5000000\r
+# Max thread count. 0 is processor_count * 2\r
+MaxThreadCount=0\r
+\r
+[Random_Alloc]\r
+DataSize=1000\r
+MinBlockSize=8\r
+MaxBlockSize=100000\r
+PassCount=500000\r
+# Max thread count. 0 is processor_count * 2\r
+MaxThreadCount=0\r
+\r
+[Spinlock_MT]\r
+ThreadCount=8\r
+LoopCount=1000000\r
+\r
+[Stack_Push]\r
+ThreadCount=8\r
+StackSize=2000000\r
+EliminationSize=4\r
+\r
+[Stack_PushPop]\r
+PushThreadCount=16\r
+PopThreadCount=16\r
+StackSize=16000000\r
+EliminationSize=4\r
+\r
+[IntrusiveStack_PushPop]\r
+PushThreadCount=16\r
+PopThreadCount=16\r
+StackSize=32000000\r
+EliminationSize=4\r
+# Flat combining stack parameters\r
+# FCIterate=1 - the test will be run iteratively\r
+#   for combine pass count from 1 to FCCombinePassCount\r
+#   and compact factor from 1 to FCCompactFactor\r
+# FCIterate=0 - the test runs only once for giving\r
+#   FCCombinePassCount and FCCompactFactor\r
+FCIterate=0\r
+FCCombinePassCount=8\r
+FCCompactFactor=64\r
+\r
+[queue_push]\r
+ThreadCount=8\r
+QueueSize=5000000\r
+# SegmentedQueue parameters:\r
+# SegmentedQueue_Iterate: \r
+#    1 - run test iteratively for segment size from 4 up to SegmentedQueue_SegmentSize\r
+#    0 - run test for segment size equal to SegmentedQueue_SegmentSize\r
+SegmentedQueue_Iterate=0\r
+SegmentedQueue_SegmentSize=256\r
+\r
+[queue_pop]\r
+ThreadCount=8\r
+QueueSize=5000000\r
+# SegmentedQueue parameters:\r
+# SegmentedQueue_Iterate: \r
+#    1 - run test iteratively for segment size from 4 up to SegmentedQueue_SegmentSize\r
+#    0 - run test for segment size equal to SegmentedQueue_SegmentSize\r
+SegmentedQueue_Iterate=0\r
+SegmentedQueue_SegmentSize=256\r
+\r
+[queue_push_pop]\r
+ConsumerCount=4\r
+ProducerCount=4\r
+QueueSize=5000000\r
+# SegmentedQueue parameters:\r
+# SegmentedQueue_Iterate: \r
+#    1 - run test iteratively for segment size from 4 up to SegmentedQueue_SegmentSize\r
+#    0 - run test for segment size equal to SegmentedQueue_SegmentSize\r
+SegmentedQueue_Iterate=0\r
+SegmentedQueue_SegmentSize=256\r
+\r
+[queue_random]\r
+ThreadCount=8\r
+QueueSize=5000000\r
+# SegmentedQueue parameters:\r
+# SegmentedQueue_Iterate: \r
+#    1 - run test iteratively for segment size from 4 up to SegmentedQueue_SegmentSize\r
+#    0 - run test for segment size equal to SegmentedQueue_SegmentSize\r
+SegmentedQueue_Iterate=0\r
+SegmentedQueue_SegmentSize=256\r
+\r
+[intrusive_queue_push_pop]\r
+ReaderCount=4\r
+WriterCount=4\r
+QueueSize=5000000\r
+# Flat combining queue parameters\r
+FCCompactFactor=64\r
+FCPassCount=8\r
+# SegmentedQueue parameters:\r
+# SegmentedQueue_Iterate: \r
+#    1 - run test iteratively for segment size from 4 up to SegmentedQueue_SegmentSize\r
+#    0 - run test for segment size equal to SegmentedQueue_SegmentSize\r
+SegmentedQueue_Iterate=0\r
+SegmentedQueue_SegmentSize=256\r
+\r
+[bounded_queue_fulness]\r
+ThreadCount=8\r
+QueueSize=1024\r
+PassCount=1000000\r
+\r
+[pqueue_pop]\r
+ThreadCount=8\r
+QueueSize=10000000\r
+\r
+[pqueue_push]\r
+ThreadCount=8\r
+QueueSize=10000000\r
+\r
+[pqueue_push_pop]\r
+PushThreadCount=4\r
+PopThreadCount=4\r
+QueueSize=10000000\r
+\r
+[map_find_int]\r
+ThreadCount=8\r
+MapSize=2000000\r
+PercentExists=50\r
+PassCount=1\r
+MaxLoadFactor=4\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=1024\r
+CuckooProbesetSize=16\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=10\r
+FeldmanMapArrayBits=4\r
+\r
+[map_find_string]\r
+ThreadCount=8\r
+MapSize=2000000\r
+PercentExists=50\r
+PassCount=2\r
+MaxLoadFactor=4\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=1024\r
+CuckooProbesetSize=16\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=10\r
+FeldmanMapArrayBits=4\r
+\r
+[map_insdel_int]\r
+InsertThreadCount=4\r
+DeleteThreadCount=4\r
+ThreadPassCount=5\r
+MapSize=50000\r
+MaxLoadFactor=4\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=1024\r
+CuckooProbesetSize=16\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=10\r
+FeldmanMapArrayBits=4\r
+\r
+[map_insdel_func]\r
+InsertThreadCount=4\r
+DeleteThreadCount=4\r
+UpdateThreadCount=4\r
+ThreadPassCount=10\r
+MapSize=100000\r
+MaxLoadFactor=4\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=1024\r
+CuckooProbesetSize=16\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=10\r
+FeldmanMapArrayBits=4\r
+\r
+[map_insdel_item_int]\r
+InsertThreadCount=4\r
+DeleteThreadCount=4\r
+MapSize=10000\r
+GoalItem=5000\r
+AttemptCount=1000\r
+MaxLoadFactor=4\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=1024\r
+CuckooProbesetSize=16\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=10\r
+FeldmanMapArrayBits=4\r
+\r
+[map_insdel_string]\r
+InsertThreadCount=4\r
+DeleteThreadCount=4\r
+ThreadPassCount=5\r
+MapSize=50000\r
+MaxLoadFactor=4\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=1024\r
+CuckooProbesetSize=16\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=10\r
+FeldmanMapArrayBits=4\r
+\r
+[map_insfind_int]\r
+ThreadCount=0\r
+MapSize=5000\r
+MaxLoadFactor=4\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=1024\r
+CuckooProbesetSize=16\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=10\r
+FeldmanMapArrayBits=4\r
+\r
+[map_insdelfind]\r
+InitialMapSize=500000\r
+ThreadCount=8\r
+MaxLoadFactor=4\r
+InsertPercentage=20\r
+DeletePercentage=20\r
+Duration=15\r
+\r
+# *** Cuckoo map properties\r
+CuckooInitialSize=1024\r
+CuckooProbesetSize=16\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=10\r
+FeldmanMapArrayBits=4\r
+\r
+\r
+[map_delodd]\r
+MapSize=1000000\r
+InsThreadCount=4\r
+DelThreadCount=3\r
+ExtractThreadCount=3\r
+MaxLoadFactor=4\r
+\r
+#Cuckoo map properties\r
+CuckooInitialSize=1024\r
+CuckooProbesetSize=16\r
+# 0 - use default\r
+CuckooProbesetThreshold=0\r
+\r
+# *** FeldmanHashMap properties\r
+FeldmanMapHeadBits=10\r
+FeldmanMapArrayBits=4\r
diff --git a/test/stress/data/text.txt b/test/stress/data/text.txt
new file mode 100644 (file)
index 0000000..8b800cf
--- /dev/null
@@ -0,0 +1,6611 @@
+
+                    <i>There  is  but one problem --
+                    the only one in the world --
+                    to restore to men a spiritual
+                    content, spiritual concerns....</i>
+                              <b>-- A de St. Exupery</b>
+
+
+     The customs  inspector  had  a  round  smooth  face  which
+registered   the   most   benevolent   of   attitudes.  He  was
+respectfully cordial and solicitous.
+     "Welcome," he murmured. "How do you like our sunshine?" He
+glanced at the passport in my hand. "Beautiful  morning,  isn't
+it?"
+     I  proffered him my passport and stood the suitcase on the
+white counter. The inspector rapidly leafed through it with his
+long careful fingers. He was dressed in a  white  uniform  with
+silver  buttons  and silver braid on the shoulders. He laid the
+passport aside and touched the suitcase with the  tips  of  his
+fingers.
+     "Curious,"  he  said.  "The  case has not yet dried. It is
+difficult to imagine that somewhere the weather can be bad."
+     "Yes," I said with a sigh, "we are already well  into  the
+autumn," and opened the suitcase.
+     The  inspector  smiled  sympathetically  and glanced at it
+absent-mindedly.  "It's  impossible  amid   our   sunshine   to
+visualize  an  autumn.  Thank  you,  that  will  be  quite  all
+right.... Rain, wet roofs, wind...
+     "And what if I have something hidden under the  linen?"  I
+asked -- I don't appreciate conversations about the weather. He
+laughed heartily.
+     "Just   an   empty  formality,"  he  said.  "Tradition.  A
+conditioned reflex of all customs inspectors, if you will."  He
+handed  me  a  sheet  of  heavy  paper.  "And  here  is another
+conditioned reflex. Please read it -- it's rather unusual.  And
+sign it if you don't mind."
+     I  read.  It  was a law concerning immigration, printed in
+elegant type on heavy paper and in four languages.  Immigration
+was absolutely forbidden. The customs man regarded me steadily.
+     "Curious, isn't it?" he asked.
+     "In  any  case  it's  intriguing,"  I  replied, drawing my
+fountain pen. "Where do I sign?"
+     "Where and how you please," said the  customs  man.  "Just
+across will do."
+     I signed under the Russian text over the line "I have been
+informed on the immigration laws."
+     'Thank  you,"  said the customs man, filing the paper away
+in his desk, 'Now you know practically all our laws. And during
+your entire stay -- How long will you be staying with us?"
+     I shrugged my shoulders.
+     "It's difficult to say in advance. Depends on how the work
+will go."
+     "Shall we say a month?"
+     'That would be about it. Let's say a month."
+     "And during this whole month," he bent over  the  passport
+making  some notation, "during this entire month you won't need
+any other laws." He handed me my passport.  "I  shouldn't  even
+have  to  mention that you can prolong your stay with us to any
+reasonable extent. But in the meantime, let it be thirty  days.
+If  you  find  it  desirable  to  stay longer, visit the police
+station on the 16th of May  and  pay  one  dollar...  You  have
+dollars?"
+     "Yes."
+     "That's  fine.  By  the way, it is not at all necessary to
+have exclusively a dollar.  We  accept  any  currency.  Rubles,
+pounds, cruzeiros."
+     "I  don't  have  cruzeiros," I said. 'I have only dollars,
+rubles, and some English pounds. Will that suit you?"
+     "Undoubtedly. By the way, so as not to forget,  would  you
+please deposit ninety dollars and seventy-two cents."
+     "With pleasure," I said, "but why?"
+     "It's  customary.  To guarantee the minimum needs. We have
+never had anyone with us who did not have some needs."
+     I counted out  ninety-one  dollars,  and  without  sitting
+down,  he  proceeded  to write out a receipt. His neck grew red
+from the awkward position. I looked around. The  white  counter
+stretched  along  the entire pavilion. On the other side of the
+barrier, customs inspectors in white smiled cordially, laughed,
+explained things  in  a  confidential  manner.  On  this  side,
+brightly  clad  tourists shuffled impatiently, snapped suitcase
+locks, and gaped excitedly. While they waited  they  feverishly
+thumbed through advertising brochures, loudly devised all kinds
+of plans, secretly and openly anticipated happy days ahead, and
+now  thirsted  to  surmount  the  white  counter  as quickly as
+possible.  Sedate  London  clerks  and  their  athletic-looking
+brides, pushy Oklahoma farmers in bright shirts hanging outside
+Bermuda  shorts  and sandals over bare feet, Turin workers with
+their  well-rouged  wives  and  numerous  children,  small-time
+Catholic  bosses from Spain, Finnish lumbermen with their pipes
+considerately banked,  Hungarian  basketball  players,  Iranian
+students, union organizers from Zambia...
+     The  customs  man  gave  me  my  receipt  and  counted out
+twenty-eight cents change.
+     "Well -- there is all the  formality.  I  hope  I  haven't
+detained you too long. May I wish you a pleasant stay!"
+     "Thank you," I said and took my suitcase.
+     He  regarded  me  with  his  head  slightly bent sideways,
+smiling out of his bland, smooth face.
+     "Through this turnstile, please. <i>Au revoir.</i>  May  I
+once more wish you the best."
+     I  went  out  on  the plaza following an Italian pair with
+four kids and two robot redcaps.
+     The sun stood high over mauve mountains. Everything in the
+plaza was bright and shiny and colorful. A bit too  bright  and
+colorful,   as   it   usually  is  in  resort  towns.  Gleaming
+orange-and-red buses surrounded by tourist  crowds,  shiny  and
+polished  green  of  the  vegetation in the squares with white,
+blue, yellow, and gold pavilions, kiosks, and tents. Mirrorlike
+surfaces, vertical, horizontal, and inclined, which flared with
+sunbursts. Smooth matte hexagons underfoot and under the wheels
+-- red, black, and gray, just slightly springy  and  smothering
+the  sound  of  footsteps.  I  put down the suitcase and donned
+sunglasses.
+     Out of all the sunny towns it has been my luck  to  visit,
+this  was without a doubt the sunniest. And that was all wrong.
+It would have been much easier if the day  had  been  gray,  if
+there had been dirt and mud, if the pavilion had also been gray
+with  concrete walls, and if on that wet concrete was scratched
+something obscene, tired, and pointless, born of boredom.  Then
+I  would  probably  feel like working at once. I am positive of
+this because such things are irritating and demand action. It's
+still hard to get used to the idea that poverty can be wealthy.
+And so the urge is lacking and there  is  no  desire  to  begin
+immediately,  but  rather  to take one of these buses, like the
+red-and-blue one, and take off to the beach, do a little  scuba
+diving, get a tan, play some ball, or find Peck, stretch out on
+the floor in some cool room and reminisce on all the good stuff
+so  that  he  could  ask  about  Bykov,  about  the Trans-Pluto
+expedition, about the new ships on which I too  am  behind  the
+times,  but  still  know  better  than he, and so that he could
+recollect the uprising and boast of  his  scars  and  his  high
+social  position....  It  would  be most convenient if Peck did
+have a high social position. It would be well if he  were,  for
+example, a mayor....
+     A  small  darkish  rotund individual in a white suit and a
+round white hat set at a rakish angle approached  deliberately,
+wiping  his  lips  with  a  dainty  handkerchief.  The  hat was
+equipped with a transparent green shade and a green  ribbon  on
+which  was  stamped "Welcome." On his right earlobe glistened a
+pendant radio.
+     "Welcome aboard," said the man.
+     "Hello," said I.
+     "A pleasure to have you with us. My name is Ahmad."
+     "And my name is Ivan,"  said  I.  "Pleased  to  make  your
+acquaintance."
+     We nodded to each other and regarded the tourists entering
+the buses.  They  were  happily  noisy and the warm wind rolled
+their discarded butts and crumpled  candy  wrappers  along  the
+square. Ahmad's face bore a green tint from the light filtering
+through his cap visor.
+     "Vacationers,"  he said. "Carefree and loud. Now they will
+be taken to their hotels and will immediately rush off  to  the
+beaches."
+     "I wouldn't mind a run on water skis," I observed.
+     "Really?  I  never would have guessed. There's nothing you
+look less like than a vacationer."
+     "So be it," I said. "In fact I did come to work"
+     "To work? Well, that happens too, some  do  come  to  work
+here.  Two  years  back  Jonathan  Kreis  came  here to paint a
+picture." He laughed. "Later there was  an  assault-and-battery
+case  in  Rome,  some papal nuncio was involved, can't remember
+his name."
+     "Because of the picture?"
+     "No, hardly. He didn't paint a thing here. The casino  was
+where  you  could  find  him  day  or night. Shall we go have a
+drink?"
+     "Let's. You can give me a few pointers."
+     "It's my pleasurable duty -- to give advice," said Ahmad.
+     We bent down simultaneously and both of us  took  hold  of
+the suitcase handle.
+     "It's okay -- I'll manage."
+     "No,"  countered Ahmad, "you are the guest and I the host.
+Let's go to yonder bar. It's quiet there at this time."
+     We went in under a blue  awning.  Ahmad  seated  me  at  a
+table,  put  my  suitcase  on  a  vacant chair, and went to the
+counter. It was cool and  an  air  conditioner  sighed  in  the
+background. Ahmad returned with a tray. There were tall glasses
+and flat plates with butter-gold tidbits.
+     "Not very strong," said Ahmad, "but really cold to make up
+for that."
+     "I don't like it strong in the morning either," I said.
+     I quaffed the glass. The stuff was good.
+     "A  swallow  --  a  bite,"  counseled Ahmad, "Like this: a
+swallow, a bite."
+     The tidbits crunched and melted in the mouth. In my  view,
+they  were  unnecessary. We were silent for some time, watching
+the square from under the marquee. gently  purring,  the  buses
+pulled  out  one after another into their respective tree-lined
+avenues. They looked ponderous yet strangely elegant  in  their
+clumsiness.
+     "It would be too noisy there," said Ahmad. "Fine cottages,
+lots of  women  -- to suit any taste -- and right on the water,
+but no privacy. I don't think it's for you."
+     "Yes," I agreed. "The noise would  bother  me.  Anyway,  I
+don't  like vacationers, Ahmad. Can't stand it when people work
+at having fun."
+     Ahmad nodded and carefully placed the next tidbit  in  his
+mouth. I watched him chew. There was something professional and
+concentrated   in   the  movement  of  his  lower  jaw.  Having
+swallowed, he said, "No, the synthetic will never compare  with
+the natural product. Not the same bouquet." He flexed his lips,
+smacked  them  gently,  and continued, "There are two excellent
+hotels in the center of town, but, in my view..."
+     "Yes, that won't do  either,"  I  said.  "A  hotel  places
+certain  obligations  on  you.  I  never  heard  that  anything
+worthwhile has ever been written in a hotel."
+     "Well, that's not quite true," retorted Ahmad,  critically
+studying  the last tidbit. "I read one book and in it they said
+that it was in fact written in a hotel -- the Hotel Florida."
+     "Aah," I said, "you are correct. But then your city is not
+being shelled by cannons."
+     "Cannons? Of course not. Not as a rule, anyway."
+     "Just as I thought. But, as a matter of fact, it has  been
+noted  that something worthwhile can be written only in a hotel
+which is under bombardment."
+     Ahmad took the last tidbit after all.
+     'That would be difficult to arrange,"  he  said.  "In  our
+times  it's  hard  to  obtain  a  cannon.  Besides,  it's  very
+expensive; the hotel could lose its clientele."
+     "Hotel  Florida  also  lost  its  clients  in  its   time.
+Hemingway lived in it alone."
+     "Who?"
+     "Hemingway."
+     "Ah... but that was so long ago, in the fascist times. But
+times have changed, Ivan."
+     "Yes,"  said  I,  "and  therefore in our times there is no
+point in writing in hotels."
+     "To blazes with hotels then," said Ahmad. "I know what you
+need. You need a boarding  house."  He  took  out  a  notebook.
+"State your requirements and we'll try to match them up."
+     "Boarding house," I said. "I don't know. I don't think so,
+Ahmad.  Do  understand  that I don't want to meet people whom I
+don't want to know. That's to begin with.  And  in  the  second
+place,  who  lives  in  private  boarding  houses?  These  same
+vacationers who don't have enough money for a cottage. They too
+work hard at having fun. They concoct picnics, meets, and  song
+fests.  At night they play the banjo. On top of which they grab
+anyone they can get  hold  of  and  make  them  participate  in
+contests  for the longest uninterrupted kiss. Most important of
+all, they are all transients.  But  I  am  interested  in  your
+country, Ahmad. In your townspeople. I'll tell you what I need:
+I  need a quiet house with a garden. Not too far from downtown.
+A relaxed family, with a respectable housewife.  An  attractive
+young daughter. You get the picture, Ahmad?"
+     Ahmad  took  the  empty glasses, went over to the counter,
+and returned with full ones. Now  they  contained  a  colorless
+transparent  liquid and the small plates were stacked with tiny
+multistoried sandwiches.
+     "I know of such a cozy house," declared Ahmad. "The  widow
+is forty-five and the daughter twenty. The son is eleven. Let's
+finish  the drinks and we'll be on our way. I think you'll like
+it. The rent is standard, but of course it's  more  than  in  a
+hoarding house. You have come to stay for a long time?"
+     "For a month."
+     "Good Lord! Just a month?"
+     "I  don't know how my affairs will go. Perhaps I may tarry
+awhile."
+     "By all means, you will," said Ahmad. "I can see that  you
+have  totally  failed to grasp just where you have arrived. You
+simply don't understand what a good time you can have here  and
+how you don't have to think about a thing."
+     We finished our drinks, got up, and went across the square
+under  the  hot  sun  to  the parking area. Ahmad walked with a
+rapid, slightly rolling gait, with the green visor of  his  cap
+set  low  over  his  eyes,  swinging the suitcase in a debonair
+manner.  The  next  batch  of  tourists  was  being  discharged
+broadcast from the customs house.
+     "Would you like me to... Frankly?" said Ahmad suddenly.
+     "Yes, I would like you to," said I. What else could I say?
+Forty years I have lived in this world and have yet to learn to
+deflect this unpleasant question.
+     "You  won't  write a thing here," said Ahmad. "It's mighty
+hard to write in our town."
+     "It's always hard to write anything. However,  fortunately
+I am not a writer."
+     "I  accept  this  gladly. But in that case, it is slightly
+impossible here. At least for a transient."
+     "You frighten me."
+     "It's not a case of being  frightened.  You  simply  won't
+want  to  work.  You  won't  be able to stay at the typewriter.
+You'll feel annoyed by the typewriter. Do you know what the joy
+of living is?"
+     "How shall I say?"
+     "You don't know anything, Ivan. So  far  you  still  don't
+know  anything  about  it. You are bound to traverse the twelve
+circles of paradise. It's funny, of course, but I envy you."
+     We stopped by a long open car. Ahmad  threw  the  suitcase
+into the back seat and flung the door open for me.
+     "Please," he said.
+     "Presumably  you  have  already  passed  through  them?" I
+asked, sliding into the seat.
+     He got in behind the wheel and started the engine.
+     "What exactly do you mean?"
+     "The twelve circles of paradise."
+     "As for me, Ivan, a long time ago I selected  my  favorite
+circle,"  said Ahmad. The car began to roll noiselessly through
+the square. "The others haven't existed  for  me  for  quite  a
+while.   Unfortunately.   It's  like  old  age,  with  all  its
+privileges and deficiencies."
+     The car rushed through a park and  sped  along  a  shaded,
+straight   thoroughfare.  I  kept  looking  around  with  great
+interest but couldn't recognize  a  thing.  It  was  stupid  to
+expect  to.  We had been landed at night, in a torrential rain;
+seven thousand exhausted tourists stood on the pier looking  at
+the  burning liner. We hadn't seen the city -- in its place was
+a black, wet emptiness dotted with red flashes. It had rattled,
+boomed, and screeched as though being rent asunder.  "We'll  be
+slaughtered  in the dark, like rabbits," Robert had said, and I
+immediately had sent him  back  to  the  barge  to  unload  the
+armored  car.  The gangway had collapsed and the car had fallen
+into the water, and when Peck had pulled Robert out,  all  blue
+from  the  cold,  he  had  come  over  to  me  and said through
+chattering teeth, "Didn't I tell you it was dark?"
+     Ahmad said suddenly, "When I was a boy, we lived near  the
+port  and we used to come out here to beat up the factory kids.
+Many of them had brass knuckles, and that got me a broken nose.
+Half of my life I put up with a crooked nose  until  I  had  it
+fixed last year. I sure loved to scrap when I was young. I used
+to  have a hunk of lead pipe, and once I had to sit in jail for
+six months, but that didn't help."
+     He stopped, grinning. I waited  awhile,  then  said,  "You
+can't  find  a good lead pipe these days. Now rubber truncheons
+are in fashion: you buy them used from the police."
+     "Exactly," said Ahmad. "Or else you buy  a  dumbbell,  cut
+off  one  ball and there you are, ready to go. But the guys are
+not what they used to be. Now you get deported for such stuff."
+     "Yes. And what else did you occupy yourself with  in  your
+youth?"
+     "And you?"
+     "I planned on joining the interplanetary force and trained
+to withstand  overstress.  We also played at who could dive the
+deepest."
+     "We too,"  said  Ahmad.  "We  went  down  ten  meters  for
+automatics  and  whiskey.  Over  by  the  piers they lay on the
+seabed by the case. I used to get nosebleeds. But when the fire
+fights started, we began to find corpses  with  weights  around
+their necks, so we quit that game."
+     "It's  a  very  unpleasant  sight, a corpse under water --
+especially if there is a current," said I.
+     Ahmad chuckled "I've seen worse. I had  occasion  to  work
+with the police."
+     "This was after the fracas?"
+     "Much later. When the anti-gangster laws were passed."
+     'They were called gangsters here too?"
+     "What  else  would you call them? Not brigands, certainly.
+'A group of brigands, armed with flame throwers and gas  bombs,
+have  laid  siege  to the municipal buildings,' " he pronounced
+expressively. "It doesn't sound right, you  can  feel  that.  A
+brigand  is  an  ax,  a  bludgeon, a mustache up to the ears, a
+cleaver --"
+     "A lead pipe," I offered.
+     Ahmad gurgled.
+     "What are you doing tonight?" he asked.
+     "Going for a walk."
+     "You have friends here?"
+     "Yes. Why?"
+     "Well... then it's different."
+     "How come?"
+     "Well, I was going to suggest something to you, but  since
+you have friends..."
+     "By the way, " I said, "who is your mayor?"
+     "Mayor?  The  devil  knows, I don't remember. Somebody was
+elected."
+     "Not Peck Xenai, by any chance?"
+     "I don't know." He sounded regretful. "I wouldn't want  to
+mislead you."
+     "Would you know the man anyway?"
+     "Xenai...  Peck  Xenai...  No,  I  don't knew him; haven't
+heard of him. What is he to you -- a friend?"
+     "Yes, an old friend. I have some others here, but they are
+all visitors."
+     "Well," said Ahmad, "if you should get bored and all kinds
+of thoughts begin to enter your head, come on over for a visit.
+Every single day from  seven  o'clock  on  I  am  at  the  Chez
+Gourmet. Do you like good eating?"
+     "Quite," said I.
+     "Stomach in good shape?"
+     "Like an ostrich's."
+     "Well,  then,  why  don't  you  come by? We'll have a fine
+time, and it won't be necessary to think about a thing."
+     Ahmad braked and turned cautiously into a driveway with an
+iron gate, which silently swung open before us. The car  rolled
+into the yard.
+     "We have arrived," announced Ahmad. "Here is your home."
+     The  house  was  two-storied,  white  with  blue trim. The
+windows were draped on the inside. A clean, deserted patio with
+multi-colored flagstones was surrounded by a fruit-tree garden,
+with apple branches touching the walls.
+     "And where is the widow?" I said.
+     "Let's go inside," said Ahmad.
+     He went up the steps, leafing through his notebook  I  was
+following  him  while looking around. I liked the mini-orchard.
+Ahmad found the right page and set up the  combination  on  the
+small  disc  by  the doorbell. The door opened. Cool, fresh air
+flowed out of the house. It was dark inside, but as soon as  we
+stepped  into  the hall, it lit up with concealed illumination.
+Putting away his notebook, Ahmad said, "To  the  right  is  the
+landlord's  half, to the left is yours. Please come in. Here is
+the living room, and there is the bar. In a minute we'll have a
+drink. And now here is your study. Do you have a phonor?"
+     "No."
+     "It's just as well. You have  everything  you  need  right
+here.  Come  on  over  here.  This is the bedroom. There is the
+control board for acoustic defense. You know how to use it?"
+     "I'll figure it out."
+     "Good. The defense is triple, you can have it quiet  as  a
+tomb  or  turn  the place into a bordello, whatever you like...
+Here's the air-conditioning control,  which,  incidentally,  is
+not  too  convenient,  as  you  can  only  operate  it from the
+bedroom."
+     "I'll manage," I said.
+     "What? Well, okay. Here is the bathroom and powder room."
+     "I  am  interested  in  the  widow,"  I  said,  "and   the
+daughter."
+     "All in good time. Shall I open the drapes?"
+     "What for?"
+     "Right you are, for no reason. Let's go have a drink."
+     We returned to the living room and Ahmad disappeared up to
+his waist in the bar.
+     "You want it on the strong side?" he asked.
+     "You have it backwards."
+     "Would you like an omelette? Sandwiches?"
+     "How about nothing?"
+     "No,"  said  Ahmad,  "an  omelette  it  shall  be  -- with
+tomatoes." He rummaged in the bar. "I don't know what does  it,
+but  this  autocooker  makes  an  altogether astonishingly good
+omelette with tomatoes. While we are at it, I will also have  a
+bite."
+     He  extracted  a  tray from the bar and placed it on a low
+table by a semicircular couch. We sat down.
+     "Now about the widow," I reminded him. "I would like to  .
+present myself."
+     "You like the rooms?"
+     "They'll do."
+     "Well, the widow is quite all right, too. And the daughter
+is not bad either."
+     He  extracted  a  flat  case from an inside pocket. Like a
+cartridge clip it was stacked with a  row  of  ampoules  filled
+with  colored  liquids.  Ahmad  ran his index finger over them,
+smelled the omelette, hesitated, and finally selected one  with
+a  green  fluid, broke it carefully, and dripped a few drops on
+the tomatoes. An aroma pervaded the room.  The  smell  was  not
+unpleasant,  but,  to  my taste, bore no particular relation to
+the food.
+     "Right now," continued Ahmad, "they are still asleep." His
+gaze turned abstracted. "They sleep and see dreams."
+     I looked at my watch.
+     "Well, well!"
+     Ahmad was enjoying his food.
+     "Ten-thirty!" I said.
+     Ahmad was enjoying his food. His cap was  pushed  back  on
+his  head,  and  the  green  visor stuck up vertically like the
+crest of an aroused mimicrodon. His eyes  were  half-closed.  I
+regarded him with interest.
+     Having  swallowed  the  last bit of tomato, he broke off a
+piece of the crust of white bread and carefully wiped  the  pan
+with it. His gaze cleared.
+     "What  were  you  saying?" he asked. "Ten-thirty? Tomorrow
+you too will get up at ten-thirty or maybe even at  twelve.  I,
+for one, will get up at twelve."
+     He got up and stretched luxuriously, cracking his joints.
+     "Well," he said, "it's time to go home, finally. Here's my
+card,  Ivan.  Put it in your desk, and don't throw it out until
+your very last day here." He went over  to  the  flat  box  and
+inserted another card into its slot. There was a loud click.
+     "Now  this  one,"  he said, examining the card against the
+light.  "Please  pass  on  to  the  widow  with  my  very  best
+compliments."
+     "And then what will happen?" said I.
+     "Money  will  happen.  I  trust  you  are not a devotee of
+haggling, Ivan? The widow will name a  figure,  Ivan,  and  you
+shouldn't haggle over it. It's not done."
+     "I  will try not to haggle," I said, "although it would be
+amusing to try it."
+     Ahmad raised his eyebrows.
+     "Well, if you really want to so much, then why not try it?
+Always do what you want to do. Then  you  will  have  excellent
+digestion. I will get your suitcase now."
+     "I  need  prospects,"  I  said. "I need guidebooks. I am a
+writer,  Ahmad.  I  will  require  brochures  on  the  economic
+situation  of  the  masses, statistical references. Where can I
+get all that? And when?"
+     "I will  give  you  a  guidebook,"  said  Ahmad.  "It  has
+statistics,  addresses, telephone numbers, and so on. As far as
+the masses are concerned, I don't think  we  publish  any  such
+nonsense.  Of  course,  you  can send an inquiry to UNESCO, but
+what  would  you  want  with  it?  You'll  see  everything  for
+yourself.  Just hold on a minute. I'll get the suitcase and the
+guidebook."
+     He went out and quickly returned with my suitcase  in  one
+hand and a fat bluish-looking little tome in the other.
+     I stood up.
+     "Judging by the look on your face," he announced, smiling,
+"you are debating whether it's proper to tip me or not."
+     "I confess," I said.
+     "Well then, would you like to do it or not?"
+     "No, I must admit."
+     "You  have  a  healthy, strong character," Ahmad approved.
+"Don't do it. Don't tip anybody. You could collect one  in  the
+face,  especially from the girls. But, on the other hand, don't
+haggle either. You could walk into one that  way  too.  Anyway,
+that's  all  a  lot of rot. For all I know you may like to have
+your face slapped, like that Jonathan  Kreis.  Farewell,  Ivan,
+have  fun,  and come to Chez Gourmet. Any evening at seven. But
+most important of all, don't think about a thing."
+     He waved his hand and left. I picked up the mixture in the
+dewy glass and sat down with the guidebook.
+
+
+<ul><a name=2></a><h2>Chapter TWO</h2></ul>
+
+     The guidebook was printed on bond paper with a gilt  edge.
+Interspersed  with  gorgeous  photographs,  it  contained  some
+curious information. In the  city  there  were  fifty  thousand
+people,  fifteen hundred cats, twenty thousand pigeons, and two
+thousand dogs (including seven hundred winners of medals).  The
+city  had fifteen thousand passenger cars, five thousand helis,
+a thousand taxis (with and without  chauffeurs),  nine  hundred
+automatic  garbage  collectors,  four  hundred  permanent bars,
+cafes, and snack bars, eleven restaurants, and four first-class
+hotels, and was a tourist establishment which served  over  one
+hundred  thousand  visitors  every  year.  The  city  had sixty
+thousand TV sets, fifty movie theaters, eight amusement  parks,
+two Happy Mood salons, sixteen beauty parlors, forty libraries,
+and  one  hundred  and  eighty  automated  barber shops. Eighty
+percent of the population were engaged  in  services,  and  the
+rest worked in two syntho-bakeries and one government shipyard.
+There  were  six  schools  and  one university housed in an old
+castle once the home of crusader Ulrich da Casa.  In  the  city
+there were also eight active civilian societies, among them the
+Society  of  Diligent  Tasters, the Society of Connoisseurs and
+Appraisers, and the Society for the Good  Old  Country  Against
+Evil  Influences.  In  addition,  fifteen hundred citizens were
+members of seven  hundred  and  one  groups  where  they  sang,
+learned  to  act,  to arrange furniture, to breast-feed, and to
+medicate  cats.  As  to  per-capita  consumption  of  alcoholic
+beverages, natural meat, and liquid oxygen, the city was sixth,
+twelfth,  and  thirteenth  highest  in Europe respectively. The
+city had seven men's clubs and five women's clubs, as  well  as
+sport  clubs  named  the  Bulls  and  Rhinos.  By a majority of
+forty-six votes, someone by the  name  of  Flim  Gao  had  been
+elected mayor. Peck was not among the municipal officials.
+     I  put the guidebook aside, took off my jacket, and made a
+thorough examination of my domain. I  approved  of  the  living
+room.  It  was done in blue, and I like that color. The bar was
+full of bottled and refrigerated victuals so that I could at  a
+moment's notice entertain a dozen starving guests.
+     I went into the study. There was a large table in front of
+the window  and  a comfortable chair. The walls were lined with
+shelves tightly filled with collected works. The  clean  bright
+bindings  were  arranged with great skill so that they formed a
+colorful and appealing layout. The top shelf  was  occupied  by
+the  fifty-volume  encyclopedia  of  UNESCO. Lower shelves were
+kaleidoscopic with the shiny wrappers of detective novels.
+     As soon as I saw the telephone  on  the  table,  I  dialed
+Rimeyer's  number,  perching  on  the  chair  arm. The receiver
+sounded with prolonged honkings and I waited, twirling a  small
+dictaphone which someone had left on the table. Rimeyer did not
+answer.  I  hung  up and inspected the dictaphone. The tape was
+half-used-up, and  after  rewinding,  I  punched  the  playback
+button.
+     "Greetings  and  more greetings," said a merry male voice.
+"I clasp your hand heartily or kiss you on the cheek, depending
+on your sex and age. I have lived  here  two  months  and  bear
+witness  that  it  was most enjoyable. Allow me a few points of
+advice. The best institution in town is the Hoity Toity in  the
+Park  of  Dreams. The best girl in town is Basi in the House of
+Models. The best guy in town is me, but I have already left. On
+television just watch Program Nine; everything else  is  chaff.
+Don't  get  involved  with  Intels,  and give the Rhinos a wide
+berth. Don't buy anything on credit -- there'll be  no  end  to
+the  runaround. The widow is a good woman but loves to talk and
+in general... As for Vousi, I didn't get to meet  her,  as  she
+had  left  the  country to visit her grandmother. In my opinion
+she is sweet, and there was a photograph of her in the  widow's
+album,  but I took it. There's more: I expect to come back next
+March, so be a pal, if you decide to return, pick another time.
+Have a --"
+     Music followed abruptly. I listened awhile and turned  off
+the machine.
+     There  wasn't  a  single  tome  I  could  extract from the
+shelves, so well were they stuck in, or maybe  even  glued  on,
+and  as there was nothing else of interest in the study, I went
+into the bedroom.
+     Here it was especially cool and cozy. I have always wanted
+just such a bedroom, but somehow never  had  the  time  to  get
+around to setting one up. The bed was big and low. On the night
+table stood an elegant phonor and a tiny remote-control box for
+the  TV.  The screen stood at the foot of the bed, while at the
+head the widow had hung a very natural-looking picture of field
+flowers in  a  crystal  vase.  The  picture  was  painted  with
+luminous  paints  and  the  dewdrops  glistened in the darkened
+room.
+     I punched the TV control at random and  stretched  out  on
+the bed. It was soft yet somehow firm. The TV roared loudly. An
+inebriated-looking  man  launched  himself  out  of the screen,
+crashed through some sort of railing, and  fell  from  a  great
+height  into a colossal fuming vat. There was a loud splash and
+the phonor exuded a smell. The man disappeared in the  bubbling
+liquid  and  then  reappeared,  holding  in his teeth something
+reminiscent of a well-boiled boot. The  unseen  audience  broke
+out in a storm of horse laughs. Fade out... soft lyrical music.
+A white horse pulling a phaeton appeared out of green woods and
+advanced  toward me. A pretty girl in a bathing suit sat in the
+carriage. I turned off the TV, got up, and went to look at  the
+bathroom.
+     There was a piny smell and flickering of germicidal lamps.
+I undressed,  threw  the underwear into the hopper, and climbed
+into the shower. Taking my time, I  dressed  in  front  of  the
+mirror,  combed  my  hair,  and shaved. The shelves were loaded
+with rows of vials, hygienic devices,  antiseptics,  and  tubes
+with  pastes  and greases. At the edge of one shelf there was a
+pile of flat colorful boxes with the logo "Devon."  I  switched
+off  the  razor  and  took  one of the boxes. A germicidal lamp
+flickered in the mirror, just as it did  that  day  in  Vienna,
+when  I  stood  just like this studiously regarding just such a
+little box, because I did not want to go out  to  the  bedroom,
+where  Raffy  Reisman  loudly  argued  about something with the
+doctor; while the green oily liquid  still  oscillated  in  the
+bath,  over  which hung the steamy vapor and a screeching radio
+receiver, attached to a  porcelain  hook  for  towels,  howled,
+hooted,  and  snorted  until Raffy turned it off in irritation.
+That was in Vienna, and just as here, it was  very  strange  to
+see  in  a bathroom a box of Devon -- a popular repellent which
+did an excellent job of chasing  mosquitoes,  chiggers,  gnats,
+and  other  bloodsucking  insects  which were long forgotten in
+Vienna and here in a seaside resort town. Only in Vienna  there
+had been an overlay of fear.
+     The  box  which  I  held in my hand was almost empty, with
+only one tablet remaining. The rest of  the  boxes  were  still
+scaled.  I finished shaving and returned to the bedroom. I felt
+like calling Rimeyer again, but  abruptly  the  house  came  to
+life.  The  pleated  drapes  flew  open  with a soft whine, the
+windowpanes slid away in their  frames,  and  the  bedroom  was
+flooded  with warm air, laden with the scent of apples. Someone
+was talking somewhere, light footsteps sounded overhead, and  a
+severe-sounding  female voice said, "Vousi -- at least eat some
+cake, do you hear?"
+     Thereupon I imparted a  certain  air  of  disorder  to  my
+clothes  (in  accordance  with  the current style), smoothed my
+temples, and went into the hall, taking one  of  Ahmad's  cards
+from the living room.
+     The  widow  turned  out  to  be  a  youthful  plump woman,
+somewhat languid, with a pleasant fresh face.
+     "How nice!" she said, seeing  me.  "You  are  up  already?
+Hello, my name is Vaina Tuur, but you can call me Vaina."
+     "My pleasure," I said, shuddering fashionably. "My name is
+Ivan."
+     "How   nice,"   said   Aunt   Vaina.   "What  an  original
+soft-sounding name! Have you had breakfast, Ivan?"
+     "With your permission, I intended  to  have  breakfast  in
+town," I said, and proffered her the card.
+     "Ah,"  said  Aunt  Vaina,  looking through the card at the
+light.  "That  nice  Ahmad,  if  you  only  knew  what  a  nice
+responsible fellow he is. But I see you did not have breakfast.
+Lunch you can have in town, but now I will treat you to some of
+my croutons. The major general always said that nowhere else in
+the world could you have such wonderful croutons."
+     "With pleasure," said I, shuddering for the second time.
+     The  door  behind  Aunt  Vaina  was  flung open and a very
+pretty young girl in a short  blue  skirt  and  an  open  white
+blouse  flew  in on clicking high heels. In her hand she held a
+piece of cake, which she  munched  while  humming  a  currently
+popular  song.  Seeing me, she stopped, flung her pocketbook on
+its long strap over her shoulder with a show  of  abandon,  and
+swallowed, bending down her head.
+     "Vousi!"  said  Aunt  Vaina, compressing her lips. "Vousi,
+this is Ivan."
+     "Not bad!" said Vousi. "Greetings."
+     "Vousi," reproached Aunt Vaina.
+     "You came with your wife?" said Vousi, extending her hand.
+     "No," said I. Her  fingers  were  soft  and  cool.  "I  am
+alone."
+     In  that  case,  I'll  show  you all there is to see," she
+said. "Till tonight. I must run now,  but  we'll  go  out  this
+evening."
+     "Vousi!" reproached Aunt Vaina.
+     Vousi  pushed  the rest of the cake into her mouth, bussed
+her mother on the cheek, and  ran  toward  the  door.  She  had
+smooth  sunburned  legs,  long and slender, and a close-cropped
+back of the head.
+     "Ach, Ivan," said Aunt Vaina, who was also looking at  the
+retreating  girl, "in our times it is so difficult to deal with
+young girls. They develop so early and leave us so  soon.  Ever
+since she started working in that salon..."
+     "She is a dressmaker?" I inquired.
+     "Oh  no!  She  works  in  the Happy Mood Salon, in the old
+ladies' department. And do you know, they value her highly. But
+last year she was late once and now she has to be very careful.
+As you can see she could not even have  a  decent  conversation
+with  you,  but it's possible that a client is even now waiting
+for her. You might not believe this,  but  she  already  has  a
+permanent  clientele.  Anyway,  why  are  we standing here? The
+croutons will get cold."
+     We entered the landlord's side. I tried with all my  might
+to  conduct  myself correctly, although I was a bit foggy as to
+what exactly was correct. Aunt Vaina sat me down  at  a  table,
+excused  herself,  and  left.  I looked around. The room was an
+exact copy of mine, except that the walls were rose instead  of
+blue,  and  beyond  the window, in place of the sea was a small
+yard with a low fence dividing it from the street.  Aunt  Vaina
+came  back  with  a  tray  bearing  boiled cream and a plate of
+croutons..
+     "You know," she said, "I think I will have some  breakfast
+too.  My  doctor  does not recommend breakfast, especially with
+boiled cream.  But  we  became  so  accustomed...  it  was  the
+general's  favorite  breakfast. Do you know, I try to have only
+men boarders. That nice Ahmad  understands  me  very  well.  He
+understands  how  much  I  need  to sit just like this, now and
+then, just as we are sitting, and have a cup of boiled cream."
+     "Your cream is wonderfully good," said I, not insincerely.
+     "Ach, Ivan." Aunt Vaina put down her cup and fluttered her
+hands. "But  you  said  that  almost  exactly  like  the  major
+general...  Strange,  you  even  look like him. Except that his
+face was a bit narrower and he  always  had  breakfast  in  his
+uniform."
+     "Yes," I said with regret, "I don't have a uniform."
+     "But there was one once," said she coyly, shaking a finger
+at me.  "Of  course!  I  can  see it. It's so senseless! People
+nowadays have to be ashamed of their military past. Isn't  that
+silly? But they are always betrayed by their bearing, that very
+special manly carriage. You cannot hide it, Ivan!"
+     I  made  a very elaborate non-committal gesture, said, "Mm
+-- yes," and took another crouton.
+     "It's all so out of place, isn't  that  right?"  continued
+Aunt  Vaina with great animation. "How can you confuse such two
+opposite concepts -- war and the army? We all detest  war.  War
+is  awful.  My  mother described it to me, she was only a girl,
+but she remembers everything. Suddenly, without warning,  there
+they  are  --  the  soldiers,  crude, alien, speaking a foreign
+tongue,  belching;  and  the  officers,  without  any  manners,
+laughing  loudly,  annoying  the  chambermaids, and smelling --
+forgive me; and that senseless commander's meeting hour... that
+is war and it deserves every condemnation! But the army! That's
+an altogether different affair! Surely you remember, Ivan,  the
+troops  lined  up by battalion, the perfection of the line, the
+manliness of the faces under the helmets, shiny arms, sparkling
+decorations, and  then  the  commanding  officer  riding  in  a
+special  staff car and addressing the battalions, which respond
+willingly and briefly like one man."
+     "No doubt," said I, "this has impressed many people."
+     "Yes! Very much indeed. We have always  said  that  it  is
+necessary  to  disarm,  but  did  we really need to destroy the
+army? It  is  the  last  refuge  of  manhood  in  our  time  of
+widespread  moral  collapse.  It's  weird  and  ridiculous -- a
+government without an army...."
+     "It is funny," I agreed. "You may not believe  it,  but  I
+have been smiling ever since they signed the Pact."
+     "Yes,  I can understand that," said Aunt Vaina. "There was
+nothing else for us to do,  but  to  smile  sarcastically.  The
+Major General Tuur" -- she extricated a handkerchief -- "passed
+away with just such a sarcastic smile on his face." She applied
+the  handkerchief  to  her eyes. "He said to us: 'My friends, I
+still hope to live to the day when everything will fall apart.'
+A broken man, who has lost the meaning of life... he could  not
+stand  the  emptiness  in  his  heart." Suddenly she perked up.
+"Here, let me show you, Ivan."
+     She bustled into the next room and returned with  a  heavy
+old-fashioned photo album.
+     I  looked at my watch at once, but Aunt Vaina did not take
+any notice, and sitting herself down at  my  side,  opened  the
+album at the very first page.
+     "Here is the major general."
+     The  major general looked quite the eagle. He had a narrow
+bony face and translucent eyes. His long body was spangled with
+medals. The biggest, a  multi-pointed  starburst  framed  in  a
+laurel  wreath,  sparkled in the region of the appendix. In his
+left hand the general tightly pressed a pair of gloves, and his
+right hand rested on the hilt of a ceremonial poniard.  A  high
+collar with gold embroidery propped up his lower jaw.
+     "And here is the major general on maneuvers."
+     Here  again  the  general looked the eagle. He was issuing
+instructions to his officers, who were bent over a  map  spread
+on  the  frontal  armor of a gigantic tank. By the shape of the
+treads  and  the  streamlined  appearance  of  the  turret,   I
+recognized it as one of the Mammoth heavy storm vehicles, which
+were  designed for pushing through nuclear strike zones and now
+are successfully employed by deep-sea exploration teams.
+     "And here is the general on his fiftieth birthday."
+     Here too, the general looked the  eagle.  He  stood  by  a
+well-set  table  with  a  wineglass in his hand, listening to a
+toast in his honor. The lower left corner  was  occupied  by  a
+halo  of light from a shiny pate; and to his side, gazing up at
+him with admiration, sat a very  young  and  very  pretty  Aunt
+Vaina.  I  tried  surreptitiously to gauge the thickness of the
+album by feel.
+     "Ah, here is the general on vacation."
+     Even on vacation, the general remained an eagle. With  his
+feet  planted  well  apart,  he  stood  an  the  beach sporting
+tiger-stripe trunks, as he scanned the misty horizon through  a
+pair  of  binoculars.  At his feet a child of three or four was
+digging in  the  sand.  The  general  was  wiry  and  muscular.
+Croutons  and cream did not spoil his figure. I started to wind
+my watch noisily.
+     "And here..." began Aunt Vaina, turning the page,  but  at
+this  point,  a  short  portly  man  entered  the  room without
+knocking. His face and in particular his dress seemed strangely
+familiar.
+     "Good morning," he enunciated, bending his smooth  smiling
+face slightly sideways.
+     It  was  my erstwhile customs man, still in the same white
+uniform with the silver buttons and the  silver  braid  on  the
+shoulders.
+     "Ah!  Pete!"  said  Aunt  Vaina.  "Here  you  are already.
+Please, let me introduce you. Ivan, this is Pete, a  friend  of
+the family."
+     The  customs  man  turned  toward  me without recognition,
+briefly inclined his head, and clicked his  heels.  Aunt  Vaina
+laid the album in my lap and got up.
+     "Have a seat, Pete," she said. "I will bring some cream."
+     Pete clicked his heels once more and sat down by me.
+     "This should interest you," I said, transferring the album
+to his  lap.  "Here is Major General Tuur. In mufti." A strange
+expression appeared on the face of the customs man.  "And  here
+is the major general on maneuvers. You see? And here --"
+     "Thank  you,"  said the customs man raggedly. "Don't exert
+yourself, because --"
+     Aunt Vaina returned with cream and croutons. From  as  far
+back  as  the  doorway,  she  said,  "How  nice to see a man in
+uniform! Isn't that right, Ivan?"
+     The cream for Pete was in a special cup with the  monogram
+"T" surrounded by four stars.
+     "It  rained  last  night,  so  it must have been cloudy. I
+know, because I woke up, and now there is not a  cloud  in  the
+sky. Another cup, Ivan?"
+     I got up.
+     'Thank  you,  I'm  quite full. If you'll excuse me, I must
+take my leave. I have a business appointment,"
+     Carefully closing the door behind me, I  heard  the  widow
+say,  "Don't  you find an extraordinary resemblance between him
+and Staff Major Polom?"
+     In the bedroom, I unpacked the  suitcase  and  transferred
+the  clothing to the wall closet, and again rang Rimeyer. Again
+no one answered. So I sat down at the desk and set to exploring
+the drawers. One contained a portable typewriter, another a set
+of writing paper and an empty bottle of grease  for  arrhythmic
+motors.  The  rest  was  empty,  if you didn't count bundles of
+crumpled receipts, a broken  fountain  pen,  and  a  carelessly
+folded sheet of paper, decorated with doodled faces. I unfolded
+the sheet. Apparently it was the draft of a telegram.
+     "Green  died  while  with  the Fishers receive body Sunday
+with condolences Hugger Martha boys." I read the writing twice,
+turned the sheet over and studied the faces, and read  for  the
+third  time. Obviously Hugger and Martha were not informed that
+normal people notifying of death first of all tell how and  why
+a  person  died  and not whom he was with when he died. I would
+have written, "Green drowned  while  fishing."  Probably  in  a
+drunken stupor. By the way, what address did I have now?
+     I  returned  to  the  hall.  A  small  boy  in short pants
+squatted in the doorway to the landlord's half. Clamping a long
+silvery tube under an armpit, he was panting and  wheezing  and
+hurriedly  unwinding  a  tangle of string. I went up to him and
+said, "Hi."
+     My reflexes are not what they used  to  be,  but  still  I
+managed to duck a long black stream which whizzed by my ear and
+splashed against the wall. I regarded the boy with astonishment
+while  he  stared at me, lying on his side and holding the tube
+in front of him. His face was damp and his  mouth  twisted  and
+open.  I turned to look at the wall. The stuff was oozing down.
+I looked at the boy again. He was getting  up  slowly,  without
+lowering the tube.
+     "Well, well, brother, you are nervous!" said I.
+     "Stand  where you are," said the boy in a hoarse voice." I
+did not say your name."
+     "To say the least," said I.  "You  did  not  even  mention
+yours, and you fire at me like I was a dummy."
+     "Stand where you are," repeated the boy, "and don't move."
+He backed  and  suddenly  blurted in rapid fire, "Hence from my
+hair, hence from my bones, hence from my flesh."
+     "I cannot," I said.  I  was  still  trying  to  understand
+whether he was playing or was really afraid of me.
+     "Why not?" said the boy. "I am saying everything right."
+     "I  can't go without moving," I said. "I am standing where
+I am."
+     His mouth fell open again.
+     "Hugger: I say to  you  --  Hugger  --  begone!"  he  said
+uncertainly.
+     "Why  Hugger?"  I  said.  "My name is Ivan; you confuse me
+with somebody else."
+     The boy closed his eyes and advanced upon me, holding  the
+tube in front of him.
+     "I surrender," I warned. "Be careful not to fire."
+     When  the  tube dented my midriff he stopped and, dropping
+it, suddenly went limp, letting his hands fall. I bent over and
+looked him in the face. Now he was brick-red. I picked  up  the
+tube.  It  was  something  like  a toy rifle, with a convenient
+checkered grip and a flat rectangular flask which was  inserted
+from below, like a clip.
+     "What kind of gadget is this?" I asked.
+     "A splotcher," he said gloomily. "Give it back."
+     I gave him back the toy.
+     "A  splotcher,"  I said, "with which you splotch. And what
+if you had hit me?" I looked at the wall. "Fine thing. Now  you
+won't  get it off inside of a year. You'll have to get the wall
+changed."
+     The boy looked up at me suspiciously. "But it's Splotchy,"
+he said.
+     "Really -- and I thought it was lemonade."
+     His face finally acquired a normal hue and demonstrated an
+obvious resemblance to the  manly  features  of  Major  General
+Tuur.
+     "No, no, it's Splotchy."
+     "So?"
+     "It will dry up."
+     "And then it's really hopeless?"
+     "Of course not. There will simply be nothing left."
+     "Hmm,"  said I, with reservation. "However, you know best.
+Let us hope so. But I am still glad that there will be  nothing
+left on the wall instead of on my face. What's your name?"
+     "Siegfried."
+     "And after you give it some thought?"
+     He gave me a long look.
+     "Lucifer."
+     "What?"
+     "Lucifer."
+     "Lucifer,"   said  I.  "Belial,  Ahriman,  Beelzebub,  and
+Azrael.  How  about  something  a  little  shorter?  It's  very
+inconvenient  to  call  for  help  to  someone with a name like
+Lucifer."
+     "But the doors are closed," he said and backed  one  step.
+His face paled again.
+     "So what?"
+     He  did not respond but continued to back until he reached
+the wall and began to sidle along it without  taking  his  eyes
+off  me. It finally dawned on me that he took me for a murderer
+or a thief and. that he wanted to escape. But for  some  reason
+he  did  not  call  for  help  and  went  by his mother's door,
+continuing toward the house exit.
+     "Siegfried,"  said  I,  "Siegfried,  Lucifer,  you  are  a
+terrible coward. Who do you think I am?" I didn't move but only
+Turned  to keep facing him. "I am your new boarder; your mother
+has just fed me croutons and cream and you go and  fire  at  me
+and  almost splotched me, and now you are afraid of me. It is I
+who should be afraid of you."
+     All this was very much  reminiscent  of  a  scene  in  the
+boarding  school  in Anyudinsk, when they brought me a boy just
+like this one, the son of a sect member.  Hell's  bells,  do  I
+really look so much the gangster?
+     "You  remind  me  of Chuchundra the Muskrat," I said, "who
+spent his life crying because he could not come  out  into  the
+middle  of the room. Your nose is blue from fear, your ears are
+freezing, and your pants are wet so that  you  are  trailing  a
+small stream...."
+     In  such  cases  it makes absolutely no difference what is
+said. It is important to speak calmly and not  to  make  sudden
+movements.  The expression on his face did not change, but when
+I spoke about the stream, he moved his eyes momentarily to take
+a look. But only for a second. Then he jumped toward the  door,
+fluttering  for  a second at the latch, and flew outside, dirty
+bottoms of his sandals flying. I went out after him.
+     He stood in the lilac bush, so that all I  could  see  was
+his  pale face. Like a fleeing cat looking momentarily over its
+shoulder.
+     "Okay, okay," said I. "Would you please explain to me what
+I must do? I have to send home my new address. The  address  of
+this  house  where I am now living." He regarded me in silence.
+"I don't feel right going to your mother -- in the first place,
+she has guests, and in the second--"
+     "Seventy-eight, Second Waterway," he said.
+     Slowly I sat down on the steps. There was  a  distance  of
+some ten meters between us.
+     'That's  quite  a  voice you have," I said confidentially.
+"Just like my friend the barman's at Mirza-Charles."
+     "When did you arrive?" said he.
+     "Well, let's see." I looked at my watch,  "About  an  hour
+and a half ago."
+     "Before  you  there  was  another  one,"  he said, looking
+sideways. "He was a  rat-fink.  He  gave  me  striped  swimming
+trunks, and when I went in the water, they melted away."
+     "Ouch!" I said. "That is really a monster of some sort and
+not a human -- he should have been drowned in Splotchy."
+     "Didn't have time -- I was going to, but he went away."
+     "Was it that same Hugger with Martha and the boys?"
+     "No -- where did you get that idea? Hugger came later."
+     "Also a rat-fink?"
+     He  didn't  answer.  I  leaned  back  against the wall and
+contemplated the street.  A  car  jerkily  backed  out  of  the
+opposite   driveway,   back   and   forthed,  and  roared  off.
+Immediately it was followed by another just such a  car.  There
+was the pungent smell of gasoline. Then cars followed one after
+another,  until  my eyes blurred. Several helis appeared in the
+sky. They were  the  so-called  silent  helis,  but  they  flew
+relatively  low, and while they flew, it was difficult to talk.
+In any case, the boy was apparently not going to talk.  But  he
+wasn't  going to leave, either. He was doing something with his
+splotcher in the bushes and was glancing at me now and then.  I
+was  hoping he wasn't going to splotch me again. The helis kept
+going and going, and the cars kept swishing  and  swishing,  as
+though all the fifteen thousand cars were speeding by on Second
+Waterway,  and all the five hundred helis were hung over Number
+78. The whole thing lasted  about  ten  minutes,  and  the  boy
+seemed to cease paying attention to me while I sat and wondered
+what  questions  I  should  ask  of  Rimeyer.  Then  everything
+returned to its previous state, the smell of exhaust was  gone,
+the sky was cleared.
+     "Where are they all going -- all at once?" I asked.
+     "Don't you know?"
+     "How would I know?"
+     "I don't know either, but somehow you knew about Hugger."
+     "About  Hugger,"  I  said.  "I  know  about  Hugger  quite
+accidentally. And about you I know nothing at  all...  how  you
+live and what you do. For instance, what are you doing now?"
+     "The safeguard is broken."
+     "Well then, give it to me, I'll fix it. Why are you afraid
+of me? Do I look like a rat-fink?"
+     "They all drove off to work," he said.
+     "You  sure  go  to  work late. It's practically dinnertime
+already. Do you know the Hotel Olympic?"
+     "Of course I know."
+     "Would you walk me there?"
+     He hesitated.
+     "No."
+     "Why not?" I asked.
+     "School is about to end -- I must be going home."
+     "Aha! So that's the way of it," said I. "You  are  playing
+hookey,  or  ditching it, as we used to say. What grade are you
+in?"
+     "Third."
+     "I used to be in third grade, too," I said.
+     He came a bit out of the bushes.
+     "And then?"
+     "Then I was in the fourth." I got up.  "Well,  okay.  Talk
+you  won't, go for a walk you won't, and your pants are wet, so
+I am going back in. You won't even tell me your name."
+     He looked at me in silence and  breathed  heavily  through
+his  mouth.  I went back to my quarters. The cream-colored hall
+was irreparably disfigured, it seemed to  me.  The  huge  black
+clot  was  not  drying.  Somebody  is  going to get it today, I
+thought. A ball of string was underfoot. I picked  it  up.  The
+end of the string was tied to the landlady's half-doorknob. So,
+I  thought,  this too is clear. I untied the string and put the
+ball in my pocket.
+     In the study, I got a clean sheet of paper from  the  desk
+and  composed  a  telegram to Matia. "Arrived safely, 78 Second
+Waterway. Kisses. Ivan." I telephoned it to the local PT&T  and
+again dialed Rimeyer's number. Again there was no answer. I put
+on  my  jacket, looked in the mirror, counted my money, and was
+about to set out when I saw that the door to  the  living  room
+was open and an eye was visible through the crack. Naturally, I
+gave  no  sign.  I  carefully  completed  the  inspection of my
+clothing, returned to the bathroom, and vacuumed myself  for  a
+while,  whistling  away  merrily. When I returned to the study,
+the  mouse-eared  head  sticking  through  the  half-open  door
+immediately  vanished.  Only  the silvery tube of the splotcher
+continued to protrude. Sitting down in the chair, I opened  and
+closed  all  the  twelve drawers, including the secret one, and
+only then looked at the door. The boy stood framed in it.
+     "My name is Len," he announced.
+     "Greetings, Len," I said  absent-mindedly.  "I  am  called
+Ivan.  Come  on  in -- although I was going out to have dinner.
+You haven't had dinner yet?"
+     "No."
+     "That's good. Go ask your mother's permission and we'll be
+off "
+     "It's too early," he said.
+     "What's too early? To have dinner?"
+     "No,  to  go.  School  doesn't  end  for  another   twenty
+minutes."  He was silent again. "Besides, there's that fat fink
+with the braid."
+     "He's a bad one?' I asked.
+     "Yeah," said Len. "Are you really leaving now?"
+     "Yes, I am," I said, and took the ball of string  from  my
+pocket. "Here, take it. And what if Mother comes out first?"
+     He shrugged.
+     "If  you  are  really  leaving," he said, "would it be all
+right if I stayed in your place?"
+     "Go ahead, stay."
+     "There's nobody else here?"
+     "Nobody."
+     He still didn't come to me to take the string, but let  me
+come to him, and even allowed me to take his ear. It was indeed
+cold.  I  ruffled  his  head  lightly and pushed him toward the
+table.
+     "Go sit all you want. I won't be back soon."
+     "I'll take a snooze," said Len.
+
+<ul><a name=3></a><h2>Chapter THREE</h2></ul>
+
+     The  Hotel  Olympic  was  a  fifteen-story   red-and-black
+structure. Half the plaza in front of it was covered with cars,
+and  in  its  center  stood  a  monument  surrounded by a small
+flowerbed. It represented a man with  a  proudly  raised  head.
+Detouring  the  monument,  I  suddenly realized that I knew the
+man. In puzzlement I stopped and examined it  more  thoroughly.
+There  was  no doubt about it. There in front of Hotel Olympic,
+in a funny old-fashioned suit  with  his  hand  resting  on  an
+incomprehensible   apparatus   which  I  almost  took  for  the
+extension of  the  abstract-styled  base,  and  with  his  eyes
+staring  at infinity through contemptuously squinting lids, was
+none other than Vladimir Sergeyevitch Yurkovsky. Carved in gold
+letters  on  the  base  was  the  legend  "Vladimir  Yurkovsky,
+December 5, Year of the Scales."
+     I couldn't believe it, because they do not raise monuments
+to Yurkovskys.  While  they live, they are appointed to more or
+less responsible positions, they are honored at jubilees,  they
+are  elected to membership in academies. They are rewarded with
+medals and are honored with international prizes, and when they
+die or perish; they are  the  subjects  of  books,  quotations,
+references,  but always less and less often as time passes, and
+finally they are forgotten altogether. They depart the halls of
+memory and linger on only in books. Vladimir Sergeyevitch was a
+general of the sciences and a remarkable man.  But  it  is  not
+possible  to erect monuments to all generals and all remarkable
+men, especially in  countries  to  which  they  had  no  direct
+relationship and in cities where if they did visit, it was only
+temporarily.  In any case, in that Year of the Scales, which is
+of significance only to them, he was not  even  a  general.  In
+March  he was, jointly with Dauge, completing the investigation
+of the Amorphous Spot on Uranus. That  was  when  the  sounding
+probe  blew up and we all got a dose in the work section -- and
+when we got back to the Planet in September, he was all spotted
+with lilac blotches, mad at the world, promising  himself  that
+he  would  take time out to swim and get sunburned and then get
+right back to the design of a new probe because the old one was
+trash.... I looked at the hotel again to reassure  myself.  The
+only  out  was  to assume that the life of the town was in some
+mysterious and potent manner highly dependent on the  Amorphous
+Spot  on  Uranus.  Yurkovsky  continued  to smile with snobbish
+superiority. Generally, the sculpture was  quite  good,  but  I
+could  not  figure  out  what  it  was  he  was leaning on. The
+apparatus didn't look like the probe.
+     Something hissed by my ear.  I  turned  and  involuntarily
+sprang back. Beside me, staring dully at the monument base, was
+a  tall  gaunt  individual closely encased from head to foot in
+some sort of gray scaly  material  and  with  a  bulky  cubical
+helmet  around  his  head. The face was obscured behind a glass
+plate with holes, from which smoke issued in  synchronism  with
+his  breathing.  The wasted visage behind the plate was covered
+with perspiration and the cheeks twitched in frantic tempo.  At
+first  I  took him for a Wanderer, then I thought that he was a
+tourist executing a curative routine, and only  finally  did  I
+realize that I was looking at an Arter.
+     "Excuse me," I said "Could you please tell me what sort of
+monument this is?"
+     The damp face contorted more desperately. "What?" came the
+dull response from inside the helmet.
+     I bent down.
+     "I am inquiring: what is this monument?"
+     The  man  glared at the statue. The smoke came thicker out
+of the holes. There was more powerful hissing.
+     "Vladimir Yurkovsky," he read, "Fifth of December, Year of
+the Scales... aha... December... so -- it must be some German."
+     "And who put up the monument?"
+     "I don't know," said the man. "But it's written down right
+there. What's it to you?"
+     "I was an acquaintance of his," I explained.
+     "Well then, why do you ask? Ask the man himself."
+     "He is dead."
+     "Aah... Maybe they buried him here?"
+     "No," I said, "he is buried far away."
+     "Where?"
+     "Far away. What's that thing he is holding?"
+     "What thing? It's an eroula."
+     "What?"
+     "I said, an eroula. An electronic roulette."-
+     My eyes popped.
+     "What's a roulette doing here?"
+     "Where?"
+     "Here, on the statue."
+     "I don't know," said the man after  some  thought.  "Maybe
+your friend invented it?"
+     "Hardly," said I. "He worked in a different field."
+     "What was that?"
+     "He was a planetologist and an interplanetary pilot."
+     "Aah...  well,  if he invented it, that was bully for him.
+It's a useful thing. I should remember it: Yurkovsky, Vladimir.
+He must have been a brainy German."
+     "I doubt he invented it," I said. "I repeat -- he  was  an
+interplanetary pilot."
+     The man stared at me.
+     "Well,  if  he  didn't  invent it, then why is he standing
+with it?"
+     "That's the point," I said. "I am amazed myself."
+     "You are a damn liar," said the man suddenly. "You lie and
+you don't even know why you are lying. It's early morning,  and
+he is stoned already.... Alcoholic!"
+     He  turned  away  and shuffled off, dragging his thin legs
+and hissing loudly. I shrugged my shoulders, took a  last  look
+at  Vladimir Sergeyevitch, and set off toward the hotel, across
+the huge plaza.
+     The gigantic doorman  swung  the  door  open  for  me  and
+sounded an energetic welcome.
+     I stopped.
+     "Would  you  be  so  kind," said I. "Do you know what that
+monument is?"
+     The doorman looked toward the plaza over my head. His face
+registered confusion.
+     "Isn't that written on it?"
+     "There is a legend," I said. "But who put it up and why?"
+     The doorman shuffled his feet.
+     "I beg your pardon,"  he  said  guiltily,  "I  just  can't
+answer
+     your  question.  The  monument has been there a long time,
+while I came here very recently. I don't wish to misinform you.
+Maybe the porter..."
+     I sighed.
+     "Well, don't worry about it. Where is a telephone?"
+     "To your right, if you please," he said looking delighted.
+     A porter started out in my direction, but I shook my  head
+and  picked  up  the receiver and dialed Rimeyer's number. This
+time I got a busy signal. I went to the elevator and up to  the
+ninth floor.
+     Rimeyer,  looking untypically fleshy, met me in a dressing
+gown, out of which stuck legs in pants and with shoes  on.  The
+room  stank  of  cigarette  smoke  and  the ashtray was full of
+butts. There was a general air of chaos in the whole suite. One
+of the armchairs was knocked over, a  woman's  slip  was  lying
+crumpled  on  the  couch,  and a whole battery of empty bottles
+glinted under the table.
+     "What can I do for you?" asked Rimeyer  with  a  touch  of
+hostility,  looking  at my chin. Apparently he was recently out
+of his bathroom, and his sparse colorless hair was wet  against
+his  long  skull. I handed him my card in silence. Rimeyer read
+it slowly  and  attentively,  shoved  it  in  his  pocket,  and
+continuing to look at my chin, said, "Sit down."
+     I sat.
+     "It  is  most  unfortunate. I am devilishly busy and don't
+have a minute's time."
+     "I called you several times today," said I.
+     "I just got back. What's your name?"
+     "Ivan."
+     "And your last name?"
+     "Zhilin."
+     "You see, Zhilin, to make it short, I have to get  dressed
+and  leave  again."  He  was  silent awhile, rubbing his flabby
+cheeks. "Anyway there's not much to talk about.... However,  if
+you  wish,  you can sit here and wait for me. If I don't return
+in an hour, come  back  tomorrow  at  twelve.  And  leave  your
+telephone  number and address, write it down right on the table
+there...."
+     He threw off the bathrobe, and dragging it  along,  walked
+off into the adjoining room.
+     "In  the  meantime,"  he continued, "you can see the town,
+and a miserable little town it is.... But you'll have to do  it
+in any case. As for me, I am sick to my stomach of it."
+     He  returned  adjusting his tie. His hands were trembling,
+and the skin on his face looked gray  and  wilted.  Suddenly  I
+felt  that  I  did  not  trust  him  --  the  sight  of him was
+repellent, like that of a neglected sick man.
+     "You look poorly," I  said.  "You  have  changed  a  great
+deal."
+     For the first time he looked me in the eyes.
+     "And how would you know what I was like before?"
+     "I  saw  you  at  Matia's.  You  smoke a lot, Rimeyer, and
+tobacco  is  saturated  regularly  with  all  kinds  of   trash
+nowadays."
+     "Tobacco -- that's a lot of nonsense," he said with sudden
+irritation.  "Here  everything  is  saturated with all kinds of
+tripe.... But perhaps you  may  be  right,  probably  I  should
+quit."  He  pulled  on his jacket slowly; "Time to quit, and in
+any case, I shouldn't have started."
+     "How is the work coming along?"
+     "It could be worse. And unusually absorbing work  it  is."
+He  smiled  in  a  peculiar unpleasant way. "I am going now, as
+they are waiting for me and I am late. So, till  an  hour  from
+now, or until tomorrow at twelve."
+     He nodded to me and left.
+     I  wrote my address and telephone number on the table, and
+as my foot plowed  into  the  mass  of  bottles  underneath,  I
+couldn't  help  but think that the work was indeed absorbing. I
+called room service and requested a chambermaid to clean up the
+room. The most polite of voices replied that  the  occupant  of
+the  suite categorically forbade service personnel to enter his
+room during his absence and had repeated the  prohibition  just
+now  on  leaving  the  hotel.  "Aha," I said, and hung up. This
+didn't sit well  with  me.  For  myself,  I  never  issue  such
+directions  and  have  never hidden even my notebooks, not from
+anyone. It's stupid to work at deception  and  much  better  to
+drink  less. I picked up the overturned armchair, sat down, and
+prepared for a  long  wait,  trying  to  overcome  a  sense  of
+displeasure and disappointment.
+     I  didn't  have  to wait for long. After some ten minutes,
+the door opened a crack and a pretty face  protruded  into  the
+room.
+     "Hey there," it pronounced huskily. "Is Rimeyer in?"
+     "Rimeyer is not in, but you can come in anyway."
+     She   hesitated,  examining  me.  Apparently  she  had  no
+intention of coming in, but was just saying hello, in passing.
+     "Come in, come in," said I. "I have nothing to do."
+     She entered with a light dancing  gait,  and  putting  her
+arms  akimbo,  stood  in front of me. She had a short turned-up
+nose and a disheveled boyish hairdo.  The  hair  was  red,  the
+shorts crimson, and the blouse a bright yolk yellow. A colorful
+woman   and   quite   attractive.  She  must  have  been  about
+twenty-five.
+     "You wait -- right?"
+     Her eyes were unnaturally bright and she smelled of  wine,
+tobacco, and perfume.
+     She  collapsed on the hassock and flung her legs up on the
+telephone table.
+     "Throw a cigarette to a working  girl,"  she  said.  "It's
+five hours since I had one."
+     "I don't smoke. Shall I ring for some?"
+     "Good  Lord,  another sad sack! Never mind the phone .. or
+that dame will show up again. Rummage around in the ashtray and
+find me a good long butt."
+     The ashtray did have a lot of long butts.
+     'They all have lipstick on them," said I.
+     "That's all right; it's my lipstick. What's your name?"
+     "Ivan."
+     She snapped a lighter and lit up.
+     "And mine is Ilina. Are you  a  foreigner,  too?  All  you
+foreigners seem so wide. What are you doing here?"'
+     "Waiting for Rimeyer."
+     "I  don't  mean  that!  What  brought  you  here,  are you
+escaping from your wife?"
+     "I am not married," I said quietly. "I  came  to  write  a
+book."
+     "A book? Some friends this Rimeyer has. He came to write a
+book.  <i>Sex  Problems  of  Impotent Sportsmen</i>. How's your
+situation with the sex problem?"
+     "It is not a problem to me," I said mildly. "And how about
+you?"
+     She lowered her legs from the table.
+     "That's a no-no. Take it slow. This isn't Paris, you know.
+All in good time. Anyway, you should have  your  locks  cut  --
+sitting there like a perch."
+     "Like  a  who?"  I  was  very  patient  as  I  had another
+forty-five minutes to wait.
+     "Like a perch. You know the type." She made vague  motions
+around her ears.
+     "I  don't know about that," I said. "I don't know anything
+yet as I have  just  arrived.  Tell  me  about  it,  it  sounds
+interesting."
+     "Oh no! Not I! We don't chatter. Our bit is a small one --
+serve, clean up, flash your teeth, and keep quiet. Professional
+secret. Have you heard of such an animal?"
+     "I've heard," I said. "But who's 'we' -- an association of
+doctors?
+     For some reason, she thought this was hilarious.
+     "Doctors!  Imagine  that."  She  laughed. "Well, wise guy,
+you're all right -- quite a tongue. We have  one  in  the  once
+like  you.  One  word,  and  we're  all  rolling in the aisles.
+Whenever we cater to the Fishers, he always gets the job,  they
+like a good laugh."
+     "Who doesn't?" said I.
+     "Well, you are wrong. The Intels, for instance, chased him
+out. 'Take  the  fool  away,' they said. Or also recently those
+pregnant males."
+     "Who?"'
+     "The sad ones. Well, I can  see  you  don't  understand  a
+thing. Where in heaven's name did you come from?"
+     "From Vienna."
+     "So -- don't you have the sad ones in Vienna?"
+     "You couldn't imagine what we don't have in Vienna."
+     "Could be you don't even have irregular meetings?"
+     "No,  we  don't  have  them. All our meetings are regular,
+like a bus schedule."
+     She was having a good time.
+     "Perhaps you don't have waitresses either?"
+     "Waitresses we do have, and you can  find  some  excellent
+examples. Are you a waitress then?"
+     She jumped up abruptly.
+     "That  won't  do  at all," she cried. "I've had enough sad
+ones for today. Now you're going to have a loving cup  with  me
+like a good fellow...." She began to search furiously among the
+bottles  by  the window. "Damn him, they're all empty! Could be
+you're a teetotaler? Aha, here's a little vermouth.  You  drink
+that, or shall we order whiskey?"
+     "Let's begin with the vermouth," said I.
+     She  banged  the  bottle on the table and took two glasses
+from the window sill.
+     "Have to wash them. Hold on a minute, everything's full of
+garbage." She went into the bathroom  and  continued  to  speak
+from  there.  "If  you  turned out to be a teetotaler on top of
+everything else. I don't know what I would do with you.... What
+a pigsty he's got in his bathroom -- I love it! Where  are  you
+staying? Here too?"
+     "No, in town," I replied. "On Second Waterway."
+     She came back with the glasses.
+     "Straight or with water?"
+     "Straight, I guess."
+     "All  foreigners  take  it  straight.  But we have it with
+water for some reason." She sat on my armchair and put her arms
+around my shoulders. We drank and kissed without  any  feeling.
+Her  lips  were  heavily lipsticked, and her eyelids were heavy
+from lack of  sleep  and  fatigue.  She  put  down  her  glass,
+searched  out  another butt in the ashtray, and returned to the
+hassock.
+     "Where is that Rimeyer?" she said. "After  all,  how  long
+can you wait for him? Have you known him a long time?"
+     "No, not very."
+     "I  think  maybe he is a louse," she said with sudden ire.
+"He's dug everything out of me, and now he plays hard  to  get.
+He doesn't open his door, the animal, and you can't get through
+to him by phone. Say, he wouldn't be a spy, would he?"
+     "What do you mean, a spy?"
+     "Oh,  there's  loads  of them.... From the Association for
+Sobriety and Morality.... The Connoisseurs and  Appraisers  are
+also a bad lot...."
+     "No, Rimeyer is a decent sort," I said with some effort.
+     "Decent...  you  are all decent. In the beginning, Rimeyer
+too was decent, so good-natured and full of fun... and  now  he
+looks at you like a croc."
+     "Poor fellow," I said. "He must have remembered his family
+and become ashamed of himself."
+     "He doesn't have a family. Anyway, the heck with him! Have
+another drink?"
+     We  had another drink. She lay down and put her hands over
+her head. Finally she spoke.
+     "Don't let it get to you. Spit on it! Wine we have  enough
+of, we'll dance, go to the shivers. Tomorrow there's a football
+game, we'll bet on the Bulls."
+     "I  am not letting it get to me. If you want to bet on the
+Bulls, we'd bet on the Bulls."
+     "Oh those Bulls! They are some boys! I  could  watch  them
+forever, arms like iron, snuggling up against them is just like
+snuggling against a tree trunk, really!"
+     There was a knock on the door.
+     "Come in!" yelled Ilina.
+     A  man  entered and stopped at once. He was tall and bony,
+of middle age, with a brush mustache and light protruding eyes.
+     "I beg your pardon, I was looking for Rimeyer," he said.
+     "Everyone here wants to see Rimeyer," said Ilina. "Have  a
+chair and we'll all wait together."
+     The  stranger  bowed  his  head and sat down by the table,
+crossing his legs.
+     Apparently he had  been  here  before.  He  did  not  look
+around,  but  stared  at  the  wall  directly  in front of him.
+However, perhaps he just was not a curious type. In  any  case,
+it  was  clear  that neither I nor Ilina was of any interest to
+him. This seemed unnatural to me, since I felt that such a pair
+as myself and  Ilina  should  arouse  interest  in  any  normal
+person.  Ilina  raised  up  on her elbow and scrutinized him in
+detail.
+     "I have seen you somewhere," she said.
+     "Really?" said the stranger coldly.
+     "What's your name?"
+     "Oscar. I am Rimeyer's friend."
+     "That's fine," said Ilina. She was obviously irritated  by
+the  stranger's  indifference,  but  she kept herself in check.
+"He's also a friend of Rimeyer." She stuck her  finger  at  me.
+"You know each other?"
+     "No," said. Oscar, continuing to look at the wall.
+     "My  name is Ivan," said I. "And this is Rimeyer's friend,
+Ilina. We just drank to our fraternal friendship."
+     Oscar  glanced  indifferently  in  Ilina's  direction  and
+nodded  his  head  politely. Ilina picked up the bottle without
+taking her eyes off him.
+     "There's still a little left here," she said.  "Would  you
+like a drink, Oscar?"
+     "No, thank you," he said, coldly.
+     "To fraternal friendship!" said Ilina. "No? You don't want
+to? Too bad!"
+     She  splashed  some  wine  in my glass, poured the rest in
+hers, and downed it at once.
+     "Never in my life would I have thought that Rimeyer  could
+have  friends  who  refuse  a  drink.  Still,  I  have seen you
+somewhere before."
+     Oscar shrugged his shoulders.
+     "I doubt it," he said.
+     Ilina was visibly becoming enraged.
+     "Some sort of a fink," she said to me loudly. "Say  there,
+Oscar, you wouldn't be an Intel?"
+     "No."
+     "What  do  you  mean, no?" said Ilina. "You're the one who
+had a set-to with that  baldy  Leiz  at  the  Weasel,  broke  a
+mirror, and had your face slapped by Mody."
+     The stone visage of Oscar grew a shade pinker.
+     "I  assure  you,"  he said courteously, "I am not an Intel
+and have never in my life been in the Weasel."
+     "Are you saying that I'm a liar?" said Ilina
+     At this point I took the bottle off the table and  put  it
+under my armchair, just in case.
+     "I am a visitor," said Oscar. "A tourist."
+     "When did you arrive?" I said to discharge the tension.
+     "Very  recently,"  replied  Oscar. He continued to gaze at
+the wall. Obviously here was a man with iron discipline.
+     "Oh, oh!" said Ilina suddenly. "Now I remember! I  got  it
+all mixed up."
+     She  burst  out  laughing, "Of course you're no Intel! You
+were at our office the day before last. You're the salesman who
+offered our manager some junk like... 'Dugong' or 'Dupont..."
+     "Devon," I prompted. "There is a repellent called Devon."
+     Oscar smiled for the first time.
+     "You are quite right, of course," he said. "But I am not a
+salesman. I was only doing a favor for a relative."
+     "That's different," said Ilina and jumped up. "You  should
+have  said  so.  Ivan,  we  all  need  to  drink to a pledge of
+friendship. I'll call... no, I'll go get it myself. You two can
+have a talk, I'll be right back."
+     She ran out of the room, banging the door.
+     "A fun girl," said I.
+     "Yes, extremely. You live here?"
+     "No, I'm a traveler, too....  What  a  strange  idea  your
+relative had!"
+     "What do you have in mind?"
+     "Who needs Devon in a resort town?"
+     Oscar shrugged.
+     "It's  hard  for me to judge; I'm no chemist. But you will
+agree that it's hard for us to comprehend the  actions  of  our
+fellow  men,  much less their fancies.... So Devon turns out to
+be - What did you call it, a res...?"
+     "Repellent," I said.
+     "That would be for mosquitoes?"
+     "Not so much for as against."
+     "I can see you are quite well up on it," said Oscar.
+     "I had occasion to use it."
+     "Well, well."
+     What the devil, thought I. What is he getting at?  He  was
+no longer staring at the wall He was looking me straight in the
+eyes  and smiling. But if he was going to say something, it was
+already said.
+     He got up.
+     "I don't think I'll wait any longer," he  pronounced.  "It
+looks like I'll have to drink another pledge. But I didn't come
+here  to  drink,  I  came here to get well. Please tell Rimeyer
+that I will call him again tonight. You won't forget?"
+     "No," I said, "I won't forget. If I tell  him  that  Oscar
+was in to see him, he will know whom I am talking about?"
+     "Yes, of course. It's my real name."
+     He   bowed,   and   walked   out  at  a  deliberate  pace,
+ramrod-straight and somehow unnatural-looking. I dipped my hand
+in the ashtray, found a  butt  without  lipstick,  and  inhaled
+several  times. I didn't like the taste and put out the stub. I
+didn't like Oscar, either. Nor Ilina. And especially Rimeyer --
+I didn't like him at all. I pawed through the bottles, but they
+were all empty.
+
+<ul><a name=4></a><h2>Chapter FOUR</h2></ul>
+
+     In the end I didn't wait long enough to see Rimeyer. Ilina
+never came back. Finally I got tired of sitting in  the  smoky,
+stale  atmosphere  of  the  room  and went down to the lobby. I
+intended to have dinner  and  stopped  to  look  around  for  a
+restaurant. A porter immediately materialized at my side.
+     "At  your service," he murmured discreetly. "An auto? Bar?
+Restaurant? Salon?"
+     "What kind of salon?" I asked, my curiosity piqued.
+     "A hair-styling  salon."  He  looked  at  my  hairdo  with
+delicate   concern.   "Master  Gaoway  is  receiving  today.  I
+recommend him most strenuously."
+     I recollected that Ilina had called me a disheveled  perch
+and said, "Well, all right."
+     "Please follow me," said the porter.
+     Crossing  the  lobby,  he  opened a wide low door and said
+into the spacious interior, "Excuse  me,  Master,  you  have  a
+client."
+     "Come in," replied a quiet voice.
+     I  entered.  The  salon  was  light  and  airy and smelled
+pleasantly. Everything in it shone -- the chrome, the  mirrors,
+the  antique  parquet  floor.  Shiny  half-domes  hung from the
+ceiling on glistening rods. In the center stood  a  huge  white
+barber  chair.  The  Master  was  advancing  to meet me. He had
+penetrating immobile eyes, a hooked nose, and a gray Van  Dyke.
+More than anything else he reminded me of a mature, experienced
+surgeon.  I  greeted  him  with  some  timidity, He nodded and,
+surveying me from head to foot, began to circle  around  me.  I
+began to feel uncomfortable.
+     "I  would like you to bring me up to the current fashion,"
+said I, trying not to let him out of my field of view.
+     But he restrained  me  gently  by  my  sleeve  and.  stood
+breathing  softly  behind my back for a few seconds. "No doubt!
+No doubt at all", he murmured, then touched me  lightly  on  my
+shoulder.  "Please," he said sternly, "take a few steps forward
+-- five or six -- then turn abruptly to face me."
+     I obeyed. He regarded me pensively, pulling on his  beard.
+I thought he was hesitating.
+     "On the other hand," he said, "sit down."
+     "Where?" I said.
+     "In the chair, in the chair."
+     I  lowered  myself  into  its  softness  and  watched  him
+approach me slowly. His intelligent face was suddenly  suffused
+with a look of profound chagrin.
+     "But  how  is  such  a  thing  possible?"  he  said. "It's
+absolutely awful."
+     I couldn't find anything to say.
+     "Gross disharmony," he muttered. "Repulsive... repulsive."
+     "Is it really that bad?" I asked.
+     "I don't understand why you came to me," he  said,  "since
+you obviously don't place any value at all on your appearance."
+     "I am beginning to, from this day on," I said.
+     He waved his hand.
+     "Never  mind...  I  will work on you, but..." He shook his
+head, turned impulsively, and went to a high table covered with
+shiny devices. The back of the chair depressed smoothly, and  I
+found  myself  in  a  half-reclining position. A big hemisphere
+descended  toward  me  from  above,  radiating  warmth,   while
+hundreds  of  tiny  needles  seemed to sink into the nape of my
+neck, eliciting a strange combination of simultaneous pain  and
+pleasure.
+     "Is it gone yet?" he asked.
+     The sensation abated.
+     "It's gone," I said.
+     "Your  skin  is  good,"  growled the Master with a certain
+satisfaction.
+     He returned  with  an  assortment  of  the  most  unlikely
+instruments and proceeded to palpate my cheeks.
+     "And  still  Mirosa  married  him,"  he  said suddenly. "I
+expected anything and everything, except that. After  all  that
+Levant  had done for her. Do you remember that moment when they
+were both weeping over the  dying  Pina?  You  could  have  bet
+anything that they would be together forever. And now, imagine,
+she is being wed to that literary fellow."
+     I  have  a  rule:  to pick up and sustain any conversation
+that comes along. When you don't know what it's all about, this
+can even be interesting.
+     "Not for long," I said with assurance. "Literary types are
+very inconstant, I can assure you, being one myself."
+     For a moment his hands paused on my temples.
+     "That didn't enter my head,"  he  admitted.  "Still,  it's
+wedlock,  even  though  only a civil one.... I must remember to
+call my wife. She was very upset."
+     "I can sympathize with her," I said. "But  it  did  always
+seem to me that Levant was in love with that... Pina."
+     "In  love?"  exclaimed  the  Master, coming around from my
+other side. "Of course he loved her! Madly! As only  a  lonely,
+rejected-by-all man can love."
+     "And so it was quite natural that after the death of Pina,
+he sought consolation with her best friend."
+     "Her  bosom  friend,  yes,"  said  the Master approvingly,
+while tickling me behind the ear. "Mirosa adored Pina!  It's  a
+very  accurate  term -- bosom friend! One senses a literary man
+in you at once! And Pina, too, adored Mirosa."
+     "But, you notice," I picked  up,  "that.  right  from  the
+beginning  Pina  suspected  that  Mirosa  was  infatuated  with
+Levant."
+     "Well, of course! They are extremely sensitive about  such
+things.  This  was  clear  to everyone -- my wife noticed it at
+once. I recollect that she would nudge me with her  elbow  each
+time  Pina  alighted on Mirosa's tousled head, and so coyly and
+expectantly looked at Levant."
+     This time I kept my peace.
+     "In general, I am  profoundly  convinced,"  he  continued,
+"that birds feel no less sensitively than people."
+     Aha,  thought  I,  and  said, "I don't know about birds in
+general, but Pina was a lot more sensitive than let's say  even
+you or I."
+     Something  bummed  briefly  over  my head, and there was a
+soft clink of metal.
+     "You speak like my wife,  word  for  word,"  observed  the
+Master,  "so  you  most  probably must like Dan. I was overcome
+when he was able  to  construct  a  bunkin  for  that  Japanese
+noblewoman...  can't  think  of  her  name.  After all, not one
+person believed Dan. The Japanese king, himself..."
+     "I beg your pardon," I said. "A bunkin?"
+     "Yes, of course, you are not a specialist.... You remember
+that moment when the Japanese noblewoman comes out  of  prison.
+Her  hair,  in  a high roller of blond hair, is ornamented with
+precious combs..."
+     "Aah," I guessed. "It's a coiffure."
+     "Yes, it even became fashionable for  a  time  last  year.
+Although a true bunkin could be made by a very few... even as a
+real  chignon, by the way. And, of course, no one could believe
+that Dan, with his  burned  hands  and  half-blind  ..  Do  you
+remember how he was blinded?"
+     "It was overpowering," I said.
+     "Oh  yes,  Dan was a true Master. To make a bunkin without
+electro-preparation, without biodevelopment... You know, I just
+had  a  thought,"  he  continued,  and  there  was  a  note  of
+excitement  in his voice. "It just struck me that Mirosa, after
+she parts with that literary guy,  should  marry  Dan  and  not
+Levant.  She  will  be  wheeling  him out on the veranda in his
+chair, and they will be listening to the  singing  nightingales
+in the moonlight -- the two of them together."
+     "And crying quietly out of sheer happiness," I said.
+     "Yes,"  the voice of the Master broke, "that would be only
+right. Otherwise I just don't know, I  just  don't  understand,
+what  all  our struggles are for. No... we must insist. I'll go
+to the union this very day...."
+     I kept quiet, again. The Master was breathing uneasily  by
+my ear.
+     "Let them go and shave at the automates," he said suddenly
+in a vengeful  tone,  "let them look like plucked geese. We let
+them have a taste once before of what it's like; now we'll  see
+how they appreciate it."
+     "I  am  afraid it won't be simple," I said cautiously, not
+-- having the vaguest idea of what this was about.
+     "We Masters are used to the complicated. It's not all that
+simple -- when a fat and sweaty stuffed shirt comes to you, and
+you have to make a human being out of him, or at the very best,
+something which under normal circumstances does not differ  too
+much  from  a  human being... is that simple? Remember what Dan
+said: 'Woman gives birth to a human being once in nine  months,
+but  we  Masters  have  to  do  it  every  day.'  Aren't  those
+magnificent words?"
+     "Dan was talking about barbers?" I said, just in case.
+     "Dan was talking about Masters. 'The beauty of  the  world
+rests  on  our  shoulders,'  he  would  say.  And again, do you
+remember: 'In order to make a man out of an ape, Darwin had  to
+be an excellent Master.'"
+     I decided to capitulate and confess.
+     "This I don't remember."
+     "How long have you been watching 'Rose of the Salon'?"
+     "Well, I have arrived just recently."
+     "Aah,  then you have missed a lot. My wife and I have been
+watching the program for seven years, every Tuesday. We  missed
+only  one  show; I had an attack and lost consciousness. But in
+the whole town there is only one man who hasn't missed even one
+show -- Master Mille at the Central Salon."
+     He moved off a few paces, turned various colored lights on
+and off, and resumed his work.
+     "The seventh year," he  repeated.  "And  now  --  can  you
+imagine  -- the year before last they kill off Mirosa and throw
+Levant into a Japanese prison for life, while Dan is burned  at
+the stake. Can you visualize that?"
+     "It's  impossible,"  I  said. "Dan? At the stake? Although
+it's true that they burned Bruno at the stake, too."
+     "It's possible," he said with impatience. "In any case, it
+became clear to us that they want to fold up the program  fast.
+But  we  didn't  put  up  with  that.  We declared a strike and
+struggled for three weeks. Mille  and  I  picketed  the  barber
+automates.  And  let  me  tell  you  that  quite  a  lot of the
+townspeople sympathized with us."
+     "I should think so," I said. "And what happened?  Did  you
+win?
+     "As you see. They grasped very well what was involved, and
+now the  TV  center knows with whom they are dealing. We didn't
+give one step, and if need be, we won't. Anyway we can rest  on
+Tuesdays now just like in the old days -- for real."
+     "And the other days?"
+     "The  other days we wait for Tuesday and try to guess what
+is awaiting us and what you literary fellows will do for us. We
+guess and make bets -- although  we  Masters  don't  have  much
+leisure."
+     "You have a large clientele?"
+     "No, that's not it. I mean homework. It's not difficult to
+become  a Master, it's difficult to remain one. There is a mass
+of literature, lots of new methods, new applications,  and  you
+have  to  keep  up  with  it  all  and  constantly  experiment,
+investigate and keep track of allied fields -- bionics, plastic
+medicine, organic  medicine.  And  with  time,  you  accumulate
+experience,  and  you  get the urge to share your knowledge. So
+Mille and I are writing our second book, and practically  every
+month,  we  have  to  update the manuscript. Everything becomes
+obsolete right before your eyes. I am now completing a treatise
+on a little-known  characteristic  of  the  naturally  straight
+nonplastic  hair;  and do you know I have practically no chance
+of being the first? In our  country  alone,  I  know  of  three
+Masters who are occupied with the same subject. It's only to be
+expected  --  the  naturally straight nonplastic hair is a real
+problem.     It's     considered     to      be      absolutely
+nonaestheticizable....  However, this may not be of interest to
+you? You are a writer?"
+     "Yes," I said.
+     "Well, you know, during the strike, I had a chance to  run
+through a novel. That would not be yours, by any chance?"
+     "I don't know," I said, "What was it about?"
+     "Well,  I  couldn't  say  exactly....  Son  quarrels  with
+father. He has a friend, an unpleasant fellow  with  a  strange
+name. He occupies himself by cutting up frogs."
+     "Can't remember," I lied -- poor Ivan Sergeyevitch.
+     "I  can't remember either. It was some sort of nonsense. I
+have a son, but  he  never  quarrels  with  me,  and  he  never
+tortures animals -- except perhaps when he was a child"
+     He  backed  away  again and made a slow circuit around me.
+His eyes were burning; he seemed to be very pleased.
+     "It looks as though we can stop here," he said.
+     I got out of  the  chair.  "Not  bad.  Not  bad  at  all,"
+murmured  the  Master.  I  approached  the mirror. He turned on
+spotlights, which illuminated me from all sides so  that  there
+were no shadows on my face.
+     In  the  first  instant  I did not notice anything unusual
+about myself. It was my usual self. Then I felt that it was not
+I at all. That it was something much better than I. A whole lot
+better.  Better  looking  than  I.  More  benevolent  than   I.
+Appreciably  more  significant than I. I experienced a sense of
+shame, as though I were deliberately passing myself  off  as  a
+man to whom I couldn't hold a candle.
+     "How did you do this thing?" I said in a strangled tone.
+     "It's nothing," said the Master, smiling in a very special
+way. "You  turned  out to be a fairly easy client, albeit quite
+neglected."
+     I stood before the mirror like Narcissus and couldn't tear
+myself away. Suddenly, I felt awed. The Master was a  magician,
+and an evil one at that, although he probably didn't realize it
+himself.  The  mirror reflected an extremely attractive lie. An
+intelligent, good-looking, monumental vapidity.  Well,  perhaps
+not  a  total  vacuum,  for after all I didn't have that low an
+opinion of myself. But the contrast was too great.  All  of  my
+inner  world,  everything  I valued in myself -- all that could
+just as well have not existed.  It  was  no  longer  needed.  I
+looked at the Master. He was smiling.
+     "You have many clients?" I asked.
+     He  did  not  grasp  my  meaning,  but after all, I didn't
+really want him to understand me.
+     "Don't worry," he replied, "I'll always work on  you  with
+pleasure. The rawest material is the most intriguing."
+     "Thank you," said I, lowering my eyes so as not to see his
+smile. "Thank you. Goodbye."
+     "Just  don't forget to pay," he said placidly. "We Masters
+value our work very highly."
+     "Yes, of course," I caught myself. "Naturally. How much do
+I owe you?"
+     He stated how much I owed.
+     'What?" said I regaining my equilibrium.
+     He repeated with satisfaction.
+     "Madness", I said forthrightly.
+     "Such is the price of beauty,"  he  explained.  "You  came
+here as an ordinary tourist, and you are leaving a king of this
+domain."
+     "An  impersonator  is  what  I am leaving as," I muttered,
+extracting the money.
+     "No, no, not that bad!" he said  confidentially.  "Even  I
+don't  know that for sure. And even you are not convinced of it
+entirely.... Two more dollars, please. Thank you.  Here  is  50
+pfennigs change. You don't mind pfennigs?"
+     I  had nothing against pfennigs. I wanted to leave as fast
+as possible.
+     I stood in the lobby for a while, becoming  myself  again,
+and  gazing  at  the  metallic figure of Vladimir Sergeyevitch.
+After all, all this is not new. After all, millions  of  people
+are  not what they pass themselves for. But the damnable barber
+had made me over into an empiriocritic. Reality was masked with
+gorgeous hieroglyphics. I no longer believed what I saw in this
+city. The plaza covered with  stereo-plastic  was  probably  in
+reality not beautiful at all. Under the elegant contours of the
+autos  lurked  ominous  and  ugly  shapes.  And  that beautiful
+charming woman is no  doubt  in  fact  a  repulsive  malodorous
+hyena,  a  promiscuous  dull-witted  sow.  I closed my eyes and
+shook my head. The old devil!
+     Two meticulously groomed oldsters stopped nearby and began
+to debate  heatedly  the  relative  merits  of  baked  pheasant
+compared  with  pheasant  broiled  with  feathers. They argued,
+drooling saliva, smacking  their  lips  and  choking,  snapping
+their  bony  fingers  under each other's noses. No Master could
+help these two. They were Masters themselves and they  made  no
+bones  about  it.  At  any  rate,  they restored my materialist
+viewpoint. I went to a porter and inquired about a restaurant.
+     "Right in front of you," said he and smiled at the arguing
+oldsters. "Any cuisine in the world."
+     I could have mistaken the entrance to the  restaurant  for
+the  gates  to  a  botanical  garden.  I  entered,  parting the
+branches of exotic trees, stepping alternately  on  soft  grass
+and  coral  flagstones. Unseen birds twittered in the luxuriant
+greenery, and the discreet clatter of utensils was  mixed  with
+the  sound  of  conversation  and  laughter. A golden bird flew
+right in front of my nose, barely able to carry the load  of  a
+caviar tartine in its beak.
+     "I am at your service," said the deep velvety voice.
+     An  imposing giant of a man with epaulettes stepped toward
+me cut of a thicket.
+     "Dinner," I said curtly. I don't like maitres-d'hotel.
+     "Dinner," he said  significantly.  "In  company?  Separate
+table?"'
+     "Separate table. On second thought..."
+     A notebook instantaneously appeared in his hand.
+     "A man of your age would be welcome at the table of
+     Mrs. and Miss Hamilton-Rey."
+     "Go on," I said.
+     "Father Geoffrois..."
+     "I would prefer an aborigine."
+     He turned the page.
+     "Opir,  doctor of philosophy, just now has sat down at his
+table."
+     "That's a possibility," said I.
+     He put away the book and led me along a  path  paved  with
+limestone  slabs. Somewhere around us there were people eating,
+talking,   swishing   seltzer.   Hummingbirds    darted    like
+multicolored  bees  in  the leaves. The maitre-d'hotel inquired
+respectfully, "How would you like to be introduced?"
+     "Ivan. Tourist and litterateur."
+     Doctor Opir was about fifty. I liked him at  once  because
+he immediately and without any ceremony sent the maitre-d'hotel
+packing  after  a  waiter. He was pink and plump, and moved and
+talked incessantly.
+     "Don't trouble yourself," he said when I reached. for  the
+menu.  "It's  all set already. Vodka, anchovies under egg -- we
+call them pacifunties -- potato soup..."
+     "With sour cream," I interjected.
+     "Of course!... steamed sturgeon a la Astrakhan... a  patty
+of veal..."
+     "I would prefer pheasant baked in feathers."
+     "No  -- don't; it's not the season... a slice of beef, eel
+in sweet marinade."
+     "Coffee," I said.
+     "Cognac," he retorted.
+     "Coffee with cognac."
+     "All right, cognac and coffee with cognac. Some pale  wine
+with the fish and a good natural cigar."
+     Dinner  with  Doctor Opir turned out to be most congenial.
+It was possible to eat, drink, and listen. Or  not  to  listen.
+Doctor  Opir  did  not  need  a  conversation.  He  required  a
+listener. I did not have  to  participate  in  the  talking,  I
+didn't  even  supply  any  commentaries,  while  he orated with
+enthusiastic delight, almost without interruption,  waving  his
+fork, while plates and dishes nonetheless became empty in front
+of him with mystifying speed. Never in my life have I met a man
+who was so skilled in conversation while his mouth was so fully
+packed and so busy masticating.
+     "Science!  Her  Majesty!"  he exclaimed. "She matured long
+and painfully, but her fruits turned out  to  be  abundant  and
+sweet. Stop, Moment, you are beautiful! Hundreds of generations
+were  born,  suffered,  and  died,  and not one was impelled to
+pronounce this incantation. We  are  singularly  fortunate.  We
+were  born  in  the  greatest  of  epochs,  the  Epoch  of  the
+Satisfaction  of  Desires.  It  may  be  that   not   everybody
+understands  this  as yet, but ninety-nine percent of my fellow
+citizens are already living in a world where, for all practical
+purposes, a man can have all he can think of. O,  Science!  You
+have  finally  freed  mankind.  You  have  given  us  and  will
+henceforth provide for us everything -- food -- wonderful  food
+-- clothing  of  the  best  quality and in any quantity, and to
+suit any taste! -- shelter -- magnificent shelter.  Love,  joy,
+satisfaction,  and  for  those  desiring  it, for those who are
+fatigued by happiness --  tears,  sweet  tears,  little  saving
+sorrows,  pleasant consoling worries which lend us significance
+in our own eyes.... Yes, we philosophers have maligned  science
+long  and  angrily.  We  called  forth  Luddites,  to  break up
+machines, we cursed Einstein, who changed our  whole  universe,
+we  vilified Wiener, who impugned our godlike essence. Well, so
+we really lost that godlike substance. Science robbed us of it.
+But in return! In return,  it  launched  men  to  the  feasting
+tables  of Olympus. Aha! Here is the potato soup, that heavenly
+porridge. No, no, do as I do... take this  spoon,  a  touch  of
+vinegar...  a  dash of pepper... with the other spoon, this one
+here, dip some sour cream and... no, no... gently,  gently  mix
+it.... This too is a science, one of the most ancient, older in
+any  cue  than  the  ubiquitous synthetic.... By the way, don't
+fail to visit  our  synthesizers,  Amalthea's  Horn,  Inc.  You
+wouldn't  be  a  chemist?  Oh  yes,  you are a litterateur! You
+should write about it,  the  greatest  mystery  of  our  times,
+beefsteaks  out of thin air, asparagus from clay, truffles from
+sawdust.... What a pity that Malthus is dead'! The whole  world
+would be laughing at him! Of course, he had certain reasons for
+his  pessimism.  I am prepared to agree with those who consider
+him a genius. But he was too ill-informed, he completely missed
+the possibilities in the natural sciences. He was one of  those
+unlucky  geniuses  who  discover  laws  of  social  development
+precisely at that moment when these laws cease to operate. I am
+genuinely sorry for him. The whole of humanity was but billions
+of hungrily gaping mouths to him. He must have lost sleep  from
+the  sheer horror of it. It is a truly monstrous nightmare -- a
+billion gaping maws and not one head. I  turned  back  and  see
+with  bitterness  how blind they were, the shakers of souls and
+the masters of the minds of the recent  past.  Their  awareness
+was dimmed by unbroken horror. Social Darwinists! They saw only
+the  press  of the struggle for survival: mobs of hunger-crazed
+people, tearing each other to pieces for a place in the sun, as
+though there was only that one single place, as though the  sun
+wasn't  sufficient  for  all!  And  Nietzsche...  maybe  he was
+suitable for the hungry slaves of the Pharaohs' times, with his
+ominous sermons about the master race, with his supermen beyond
+good and evil... who needs to be beyond now? It's not so bad on
+this side, don't you suppose? There were, of course,  Marx  and
+Freud.  Marx,  for example, was the first to understand that it
+all depended on  economics.  He  understood  that  to  rip  the
+economics   out   of   the  hands  of  greedy  nincompoops  and
+fetishists, to make  it  part  of  the  state,  to  develop  it
+limitlessly,  was  the  very  way  to  lay the foundations of a
+Golden Age. And Freud showed us for what, after all, we  needed
+this  Golden  Age.  Recollect  the  source of all human misery.
+Unsatisfied instincts, unrequited love, and unsated  hunger  --
+isn't  that  right?  But  here  comes Her Majesty, Science, and
+presents us with satisfactions. And how rapidly  all  this  has
+come  to  pass! The names of gloomy prognosticators are not yet
+forgotten, and already... How do you like the  sturgeon?  I  am
+under  the  impression  that the sauce is synthetic. Do you see
+the pinkish tint? Yes, it is  synthetic.  In  a  restaurant  we
+should  be  able  to  expect  natural  sauce. Waiter! On second
+thought -- the devil take it, let's not be so finicky.  Go  on,
+go  on...  Now what was I saying? Yes! Love and hunger. Satisfy
+love and hunger, and you'll see a happy man. On  condition,  of
+course,  that  your  man  is secure about the next day. All the
+utopias  of  all  times  are  based   on   this   simplest   of
+considerations.  Free  a man of the worry about his daily bread
+and about the morrow, and he will become truly free and  happy.
+I  am  deeply  convinced  that  children,  yes,  precisely  the
+children, are man's ideal. I see the most profound  meaning  in
+the  remarkable similarity between a child and the carefree man
+who is the object of utopia. Carefree means happy -- and we are
+so close to that ideal! Another few decades, or  maybe  just  a
+few  more  years,  and  we will attain the automated plenty, we
+will discard science as a healed man discards his crutches, and
+the whole of mankind will  become  one  huge  happy  family  of
+children.  The  adults  will be distinguished from the children
+only by their ability to love, and  this  ability  will,  again
+with  the  help  of  science,  become  the  source  of  new and
+unheard-of joys and pleasures.... Excuse me, what is your name?
+Ivan? So, you must be  from  Russia.  Communist?  Aha...  well,
+everything  is  different  there  I  know....  And  here is the
+coffee! Mm, not bad. But where is the cognac? Well, thank  you!
+By  the way, I hear that the Great Wine Taster has retired. The
+most grandiose  scandal  befell  at  the  Brussels  contest  of
+cognacs,  which  was  suppressed  only  with  the  greatest  of
+difficulties. The Grand Prix is awarded to  the  White  Centaur
+brand.   The   jury  is  delighted!  It  is  something  totally
+unprecedented! Such a phenomenal  extravaganza  of  sensations!
+The  declaratory  packet  is  opened,  and,  oh horrors, it's a
+synthetic! The Great Wine Taster turned as white as a sheet  of
+paper  and was physically ill. By the way, I had an opportunity
+to try this cognac, and it's really superb,  but  they  run  it
+from  crude  and  it  doesn't  even  have  a  proper name. H ex
+eighteen naphtha fraction  and  it's  cheaper  than  hydrolyzed
+alcohol....  Have a cigar. Nonsense, what do you mean you don't
+smoke? It's not right not to have a cigar after a  dinner  like
+this....  I  love  this  restaurant.  Every time I come here to
+lecture at the university, I dine at the  Olympic.  And  before
+returning, I invariably visit the Tavern. True, they don't have
+the greenery, nor the tropical birds, and it's a bit stuffy and
+warm  and  smells of smoke, but they have a genuine, inimitable
+cuisine. The Assiduous Tasters gather nowhere but there  --  at
+the  Gourmet.  In  that place you do nothing but eat. You can't
+talk, you can't laugh, it's totally  nonsensical  to  go  there
+with a woman -- you only eat there! Slowly, thoughtfully..."
+     Doctor  Opir  finally  ran down, leaned back in his chair,
+and inhaled deeply with total enjoyment. I sucked on the mighty
+cigar and contemplated the man. I had  him  well  pegged,  this
+doctor  of  philosophy. Always and in all times there have been
+such men, absolutely pleased with their  situation  in  society
+and  therefore  absolutely satisfied with the condition of that
+society. A marvelously well-geared tongue  and  a  lively  pen,
+magnificent  teeth  and  faultless innards, and a well-employed
+sexual apparatus.
+     "And so the world is beautiful, Doctor?"
+     "Yes," said  the  doctor  with  feeling,  "it  is  finally
+beautiful."
+     "You are a gigantic optimist," said I.
+     "Our  time  is the time of optimists. Pessimists go to the
+Good Mood Salon, void the gall  from  their  subconscious,  and
+become  optimists.  The  time of pessimists has passed, just as
+the time of tuberculars, of sexual maniacs, and of the military
+has passed. Pessimism, as an  intellectual  emotion,  is  being
+extirpated  by  that self-same science. And that not indirectly
+through the creation of affluence, but  concretely  by  way  of
+invasion  of  the  dark  world of the subcortex. Let's take the
+dream generator, currently the most popular  diversion  of  the
+masses.  It  is  completely harmless, unusually well adopted to
+general use,  and  is  structurally  simple.  Or  consider  the
+neurostimulators...."
+     I attempted to steer him into the desired channel.
+     "Doesn't   it   seem  to  you  that  right  there  in  the
+pharmaceutical field science is overdoing it a bit sometimes?"
+     Doctor Opir smiled  condescendingly  and  sniffed  at  his
+cigar.
+     "Science  has  always  moved  by trial and error," he said
+weightily. "And I am inclined to  believe  that  the  so-called
+errors  are  always  the  result  of  criminal  application. We
+haven't yet entered the Golden Age, we are just in the  process
+of  doing  so,  and all kinds of throwbacks, mobsters, and just
+plain dirt are under foot. So all kinds of drugs  are  put  out
+which  are  health-destroying,  but  which  are created, as you
+know, from the best of motives; all kinds of aromatics  ...  or
+this...  well,  that  doesn't  suit  a dinner conversation." He
+cackled suddenly and obscenely "You can guess my meaning --  we
+are  mature  people!  What  was  I  saying?  Oh  yes,  all this
+shouldn't disturb you. It will pass just like the atom bombs."
+     "I only wanted to emphasize," I remarked, "that  there  is
+still the problem of alcoholism, and the problem of narcotics."
+     Doctor  Opir's  interest  in  the conversation was visibly
+ebbing. Apparently he imagined that  I  challenged  his  thesis
+that  science  is  a boon. To conduct an argument on this basis
+naturally bored him, as  though,  for  instance,  he  had  been
+affirming  the  salubriousness  of  ocean  swimming  and  I was
+contradicting him on the basis that I had almost  drowned  last
+year.
+     "Well,  of  course..." he mumbled, studying his watch, "we
+can't have it all at once.... You must admit, after  all,  that
+it is the basic trend which is the most important.... Waiter!"
+     Doctor  Opir  had  eaten  well, had a good conversation --
+professing progressive philosophy -- felt well-satisfied, and I
+decided not to press the matter, especially as I really  didn't
+give  a  hang  about  his  progressive philosophy, while in the
+matters which interested me the most, he probably would not  be
+concretely informed at all in the final analysis.
+     We paid up and went out of the restaurant. I inquired, "Do
+you ]mow,  Doctor,  whose  monument  that is? Over there on the
+plaza."
+     Doctor Opir gazed absent-mindedly. "Sure  enough,  it's  a
+monument," he said. "Somehow I overlooked it before.... Shall I
+drop you somewhere?"
+     "Thank you, I prefer to walk."
+     "In  that case, goodbye. It was a pleasure to meet you....
+Of course it's hard to expect to convince  you."  He  grimaced,
+shifting  a  toothpick  around  his  mouth.  "But  it  would be
+interesting to try. Perhaps you will attend my lecture? I begin
+tomorrow at ten."
+     "Thank you," I said. "What is your topic?"
+     "Neo-optimist Philosophy. I will be sure to touch  upon  a
+series of questions which we have so pithily discussed today."
+     "Thank you," I said again. "Most assuredly."
+     I  watched as he went to his long automobile, collapsed in
+the seat, puttered with  the  auto-driver  control,  fell  back
+against  the seat back, and apparently dozed off instantly. The
+car began to roll cautiously across the plaza  and  disappeared
+in the shade and greenery of a side street.
+     Neo-optimism...      Neo-hedonism...      Neo-cretinism...
+Neo-capitalism... "No evil without good," said the fox.  So,  I
+have  landed in the Country of the Boobs. It should he recorded
+that the ratio of congenital fools does not vary as a  function
+of  time.  It  should  be  interesting  to  determine  what  is
+happening to the percentage of fools by conviction. Curious  --
+who  assigned  the  title  of Doctor to him? He is not the only
+one! There  must  have  been  a  whole  flock  of  doctors  who
+ceremoniously granted that title to Neo-optimist Opir. However,
+this occurs not only among philosophers.
+     I saw Rimeyer come into the hall and forgot Doctor Opir at
+once.  The  suit  hung on Rimeyer like a sack. Rimeyer stooped,
+and his face was flabby. I thought he wavered in his  walk.  He
+approached the elevator and I caught him by the sleeve there.
+     He jumped violently and turned on me.
+     "What in hell?" he said. He was clearly unhappy to see me.
+     "Why are you still here?"
+     "I waited for you."
+     "Didn't I tell you to come tomorrow at noon?"
+     "What's the difference?" I said. "Why waste time?"
+     He looked at me, breathing laboriously.
+     "I am expected. A man is waiting for me in my room, and he
+must not see you with me. Do you understand?"
+     "Don't shout," I said. "People are noticing."
+     Rimeyer glanced sideways with watery eyes.
+     "Go in the elevator," he said.
+     We  entered  and  he  pressed the button for the fifteenth
+floor.
+     "Get on with your business quickly," he said.
+     The  order  was  startlingly  stupid,  so   that   I   was
+momentarily disoriented.
+     "You mean to say that you don't know why I am here?"
+     He rubbed his forehead, and then said, "Hell, everything's
+mixed up.... Listen, I forgot, what is your name?"
+     "Zhilin."
+     "Listen, Zhilin, I have nothing new for you. I didn't have
+time to  attend  to  that  business.  It's  all a dream, do you
+understand? Matia's inventions. They sit there, writing papers,
+and invent. They should all be pitched the hell out."
+     We arrived at the  fifteenth  floor  and  he  pressed  the
+button for the first.
+     "Devil  take  it,"  he  said. "Five more minutes and he'll
+leave.... In general I am convinced  of  one  thing,  there  is
+nothing  to it. Not in this town, in any case." He looked at me
+surreptitiously, and turned his eyes away. "Here is something I
+can tell you. Look in at the Fishers. Just like that, to  clear
+your conscience."
+     "The Fishers? What Fishers?"
+     "You'll  find out for yourself," he said impatiently. "But
+don't get tricky with them. Do everything they ask."  Then,  as
+though   defending   himself,  he  added,  "I  don't  want  any
+preconceptions, you understand."
+     The elevator stopped at the first floor  and  he  signaled
+for the ninth.
+     "That's it," he said. "Then we'll meet and talk in detail.
+Let's say tomorrow at noon."
+     "All  right,"  I said slowly. He obviously did not want to
+talk to me. Maybe he didn't trust me. Well, it happens!
+     "By the way," I said, "you have been visited by a  certain
+Oscar."
+     It seemed to me that he started.
+     "Did he see you?"
+     "Naturally.  He  asked  me  to  tell  you  that he will be
+calling tonight."
+     "That's bad, devil take  it,  bad...."  muttered  Rimeyer.
+"Listen... damn, what is your name?"
+     "Zhilin."
+     The elevator stopped.
+     "Listen,  Zhilin,  it's  very bad that he has seen you....
+However, what the hell is the difference. I must  go  now."  Re
+opened  the  elevator  door,  "Tomorrow  we'll have a real good
+talk, okay? Tomorrow... and you look in on the Fishers. Is that
+a deal?"
+     He slammed the door with all his strength.
+     "Where will I look for them?" I asked.
+     I stood awhile, looking after him. He was almost  running,
+receding down the corridor with erratic steps.
+
+<ul><a name=5></a><h2>Chapter FIVE</h2></ul>
+
+     I  walked  slowly,  keeping to the shade of the trees. Now
+and then a car rolled by. One of these stopped and  the  driver
+threw  open  the door, leaned out, and vomited on the pavement.
+He cursed weakly, wiped his mouth with his  palm,  slammed  the
+door,  and  drove  off.  He was on the elderly side, red-faced,
+wearing a loud shirt with nothing under it.
+     Rimeyer  apparently  had  turned  into  a  drunkard.  This
+happens  fairly  often:  a  man  tries  hard,  works  hard,  is
+considered a valuable contributor, he is listened to  and  made
+out as a model, but just when he is needed for a concrete task,
+it  suddenly turns out that he has grown puffy and flabby, that
+wenches are running in and out of his place, and that he smells
+of vodka from early morning.... Your business does not interest
+him, while at  the  same  time,  he  is  frightfully  busy,  is
+constantly  meeting someone, talks confusingly and murkily, and
+is of no help whatsoever. And then he turns up in the alcoholic
+ward, or a mental clinic, or is involved in a legal process. Or
+he gets married unexpectedly -- strangely and  ineptly  --  and
+this  marriage  smells  strongly of blackmail. ... One can only
+comment: "Physician, heal thyself."
+     It would still be nice to hunt up Peck. Peck  is  hard  as
+flint, honest, and he always knows everything. You haven't even
+finished  the  rundown  on  the tech control, and haven't had a
+chance to get off the ship, before he is buddy-buddy  with  the
+cook,   is   already   fully   informed  and  involved  in  the
+investigation of the  dispute  between  the  Commander  of  the
+Pathfinders  and  the  chief  engineer,  who  didn't settle the
+matter of some prize; the technicians are already  planning  an
+evening  in  his honor, and the deputy director is listening to
+his advice in a quiet corner... Priceless Peck! He was born  in
+this city and has spent a third of his life here.
+     I  found  a telephone booth, and rang information for Peck
+Xenai's number and address. I was asked to wait. As usual,  the
+booth  smelled  of  cats.  The  plastic  shelf was covered with
+telephone numbers and obscene images. Someone had carved  quite
+deeply,  as with a knife, the strange word "SLUG." I opened the
+door,  to  lighten  the  string  atmosphere,  and  watched  the
+opposite  shady  side  of  the  street, where a barman stood in
+front of his establishment in a  white  jacket  with  rolled-up
+sleeves, smoking a cigarette. Then I was told that according to
+the  data  at the beginning of the year, Peck resided at No. 31
+Liberty Street, number  11-331.  I  thanked  the  operator  and
+dialed the number at once. A strange voice told me that I had a
+wrong  number.  Yes,  the  number  was  correct, and so was the
+address, but no Peck lived there, and if he  had,  they  didn't
+know  when  he  left  or where he had gone. I hung up, left the
+booth, and crossed the street to the shady side.
+     Catching my eye, the barman came to  life  and  said  from
+afar, "Come in, why don't you?"
+     "Don't know that I'd like to," I said.
+     "So  you won't be friendly, eh?" he said. "Come in anyway.
+We'll have a talk. I feel bored."
+     I stopped.
+     "Tomorrow morning,"  I  said,  "at  ten  o'clock,  at  the
+university, there will be a philosophy lecture on Neo-optimism.
+It will be given by the renowned Doctor Opir from the capital.
+     The  barman listened with avid interest -- he even stopped
+inhaling.
+     "How do you like that!" he said. "So  they  have  come  to
+that!  The  day before yesterday, they chased all the girls out
+of a night club, and now they'll be having lectures. We'll show
+them lectures!"
+     "It's about time," I said.
+     "I  don't  let  them  in,"  he  continued,  getting   more
+animated.  "I  have  a  sharp eye for them. A guy could be just
+approaching the  door,  when  I  can  spot  him  for  an  Intel
+'Fellows,'  I  say,  'an Intel is coming.' And the boys are all
+well picked; Dodd himself is here every night  after  training.
+So,  he  gets  up and meets this Intel at the door, and I don't
+even know what goes on between  them,  but  be  passes  him  on
+elsewhere.  Although  it's  true  that sometimes they travel in
+bunches. In that case, so there wouldn't be a  to-do,  we  lock
+the door -- let them knock. That's the right way, isn't it?"
+     'That's  okay  by  me,"  I  said. I had had enough of him.
+There are people who pall unusually quickly. "Let them."
+     "What do you mean -- let them?"
+     "Let them knock. In other words, knock on any door."
+     The barman looked at me with growing alertness.
+     "What say you move on," he said.
+     "How about a quick one," I offered.
+     "Move along, move along," he said. "You won't  get  served
+here."
+     We   looked   at  each  other  awhile,,  then  he  growled
+something, backed up, and slid the glass door in front of him.
+     "I am no Intel," I said. "I am  a  poor  tourist.  A  rich
+one."
+     He looked at me with his nose flattened against the glass.
+I made  a  motion  as  though knocking a drink back. Re mumbled
+something and went back into the darkness of  the  place  --  I
+could see him wandering aimlessly among empty tables. The place
+was called the Smile. I smiled and went on.
+     Around  the  corner  was  a wide main thoroughfare. A huge
+van, plastered with advertisements, was parked by the curb. Its
+back was  swung  down  for  a  counter,  on  which  were  piled
+mountains    of    cans,   bottles,   toys,   and   stacks   of
+cellophane-wrapped clothing and underwear.  Two  teenage  girls
+twittered  some  sort  of  nonsense  while  selecting  blouses.
+"Pho-o-ny," squeaked one. The other, turning  the  blouse  this
+way  and  that,  replied,  "Spangles,  spangles and not phony."
+"Here by the neck  it  phonies."  "Spangles."  "Even  the  star
+doesn't glimmer."
+     The  driver of the van, a gaunt man with huge, horn-rimmed
+dark glasses, sat on the step of the advertising  rotunda.  His
+eyes  were  not  visible, but, judging by his relaxed mouth and
+sweat-beaded nose, he was asleep. I approached the counter. The
+girls stopped talking and stared at me with parted mouths. They
+must have been about sixteen, and their eyes  were  vacant  and
+blue, like those of young kittens.
+     "Spangles," I said. "No phonying and lots of sparkle."
+     "And around the neck?" asked the one who was trying on the
+blouse.
+     "Around the neck it's practically a masterpiece."
+     "Spangles," said the other uncertainly.
+     "OK,  let's  look  at  another  one,"  offered  the  first
+peacefully. "This one here."
+     "This one is better, the silvery one with the frame."
+     I saw books. They were  magnificent  books.  There  was  a
+Strogoff  with such illustrations as I had never even heard of.
+There was  <i>Change  of  Dream</i>  with  an  introduction  by
+Saroyan.  There  was a Walter Mintz in three volumes. There was
+almost an entire Faulkner, <i>The New  Politics</i>  by  Weber,
+<i>Poles  of  Magnificence</i>  by Ignatova, The <i>Unpublished
+Sian She-Cuey</i>, <i>History of Fascism</i> in the "Memory  of
+Mankind"  edition.  There were current magazines, and almanacs,
+pocket Louvres, Hermitage, and Vatican. There  was  everything!
+"It  phonies too but it has a frame." "Spangles." I grabbed the
+Mintz. Holding the two volumes  under  my  arm,  I  opened  the
+third. Never have I seen such a complete Mintz. There were even
+the Ã©migré letters.
+     "How much will that be?" I called.
+     The  girls  gaped again; the driver sucked in his lips and
+sat up.
+     "What?" he said huskily.
+     "Who is the owner here?" I said.
+     He got up and came to me.
+     "What would you like?"
+     "I want this Mintz. How much is it?"
+     The girls giggled.  He  stared  at  me  in  silence,  then
+removed his glasses.
+     "You are a foreigner?"
+     "Yes, I am a tourist."
+     "It's the most complete Mintz."
+     "Of course, I can see that. I was stunned when I saw it."
+     "Me too," he said, "when I saw what you were after."
+     "He is a tourist," twittered one of the girls. "He doesn't
+understand."
+     "It's all free," said the driver. "Personal needs fund. To
+take care of personal needs."
+     I looked back at the bookshelf.
+     "Did you see <i>Change of Dream</i>?" asked the driver.
+     "Yes, thank you, I have it."
+     "About Strogoff I will not even inquire."
+     "How about the <i>History of Fascism</i>?"
+     "An excellent edition."
+     The  girls  giggled  again.  The  driver's  eyes popped in
+sudden wrath.
+     "Scram, snot faces," he barked.
+     The girls jumped. One of them thievishly  grabbed  several
+blouse packages. They ran across the street, where they stopped
+and continued to gaze at us.
+     "With frames!" said the driver. His thin lips twitched. "I
+should drop this whole idea. Where do you live?"
+     "On Second Waterway."
+     "Aha, in the thick of the mire.... Let's go -- I will drop
+you off.  I  have a complete Schedrin in the van, which I don't
+even exhibit; I have the entire  classics  library;  the  whole
+Golden Library, the complete Treasures of Philosophic Thought."
+     "Including Doctor Opir's?"
+     "Bitch  tripe,"  said  the driver. "Salacious bum! Amoeba!
+Rut do you know Sliy?"
+     "Not much," I said. "I don't like him.  Neo-individualism,
+as Doctor Opir would say."
+     "Doctor  Opir  stinks,"  said the driver. "While Sliy is a
+real man. Of course, there is the individualism. But  at  least
+he  says  what  he  thinks and does what he says. I'll get some
+Sliy for you.... Listen, did you see this? And this!"
+     He dug himself up to his elbows in books. He stroked  them
+tenderly and his face shone with rapture.
+     "And this," he kept on. "And how about this Cervantes?"
+     An  oldish lady of imposing bearing approached and started
+to pick over the canned goods.
+     "You still don't have Danish pickles... didn't I  ask  you
+to get some?"
+     "Go to hell," said the driver absent-mindedly.
+     The woman was stunned. Her face slowly turned crimson.
+     "How dare you!" she hissed.
+     The driver looked at her bullishly.
+     "You heard what I said. Get out of here!"
+     "Don't you dare!" said the woman. "What is your number?"
+     "My    number   is   ninety-three,"   said   the   driver,
+"Ninety-three -- is that clear enough? And I  spit  on  all  of
+you. Is that clear? Any other questions?"
+     "What  a  hooliganism!"  said  the woman with dignity. She
+took two cans of delicacies,  scanned  the  counter,  and  with
+great  precision,  ripped  the  cover off the <i>Cosmic Man</i>
+magazine. "I'll remember you, number ninety-three! These aren't
+the old times for you." She wrapped the two cans in the  cover.
+"We'll see each other in the municipal court."
+     I  took a firm hold on the driver's arm. His rigid muscles
+gradually relaxed.
+     "The nerve!" said she majestically and departed.
+     She stepped  along  the  sidewalk,  proudly  carrying  her
+handsome  head,  which  was  topped  with  a  high  cylindrical
+coiffure. She stopped at the corner, opened one  of  the  cans,
+and proceeded to pick out chunks with elegant fingers.
+     I released the driver's arm.
+     "They  ought  to  be shot," he said suddenly. "We ought to
+strangle them instead of dispensing pretty books to  them."  He
+turned  toward  me,  and  I  could  see his eyes were tortured.
+"Shall I deliver your books?"
+     "Well, no," I said. "Where will I put them?"
+     "In that case, shove off," said the driver. "Did you  take
+your Mintz? Then go and wrap your dirty pantaloons in it."
+     He climbed up into the cab. Something clicked and the back
+door began  to  rise.  You  could  hear everything crashing and
+rolling inside the van. Several books and some  shiny  packets,
+boxes,  and  cans  fell on the pavement. The rear panel had not
+yet closed completely when the driver shut his door and the van
+took off with a jerk.
+     The girls had already disappeared. I stood  alone  on  the
+empty  street  and  watched  the  wind lazily turn the pages of
+History of Fascism at my feet. Later a gang of kids in  striped
+shorts  came  around the corner. They walked by silently, hands
+stuck in their pockets. One jumped down  on  the  pavement  and
+began  to  kick  a can of pineapple, with a slick pretty cover,
+like a football down the street.
+
+<ul><a name=6></a><h2>Chapter SIX</h2></ul>
+
+     On the way home, I was overtaken by the change of  shifts.
+The  streets  filled  up with cars. Controller copters appeared
+over the intersections, and sweaty  police  cleared  constantly
+threatening  jams  with  roaring  bull  horns.  The  cars moved
+slowly, and the drivers stuck heads out of windows to light  up
+from  each  other,  to  yell,  to talk and joke while furiously
+blowing their horns. There was a instant  screech  of  clashing
+bumpers.  Everyone  was  happy,  everyone was good-natured, and
+everyone glowed with savage glee. It seemed as though  a  heavy
+load  had  just  fallen  from  the  soul of the city, as though
+everyone was seized with an enviable anticipation. Fingers were
+pointed at me and the other pedestrians. Several  times  I  was
+prodded  with bumpers while crossing -- the girls doing it with
+the utmost good nature. One of  them  drove  alongside  me  for
+quite   a  while,  and  we  got  acquainted.  Then  a  line  of
+demonstrators  with  sober  faces  walked  by  on  the  median,
+carrying  signs.  The  signs  appealed  to  people  to join the
+amateur club ensemble Songs of the  Fatherland,  to  enter  the
+municipal  Culinary  Art  groups,  and to sign up for condensed
+courses in motherhood and childhood. The people with signs were
+nudged by bumpers with special enthusiasm.  The  drivers  threw
+cigarette  butts,  apple  cores,  and  paper wads at them. They
+yelled such things as "I'll subscribe at once, just wait till I
+put my galoshes on," or "Me,  I'm  sterile,"  or  "Say,  buddy,
+teach  me  motherhood."  The  sign  carriers continued to march
+slowly in between the two solid streams  of  cars,  unperturbed
+and sacrificial, looking straight ahead with the sad dignity of
+camels.
+     Not far from my house, I was set upon by a flock of girls,
+and when  I finally struggled through to Second Waterway, I had
+a white aster in my lapel and drying kisses on my  cheeks,  and
+it seemed I had met half the girls in town. What a barber! What
+a Master!
+     Vousi,  in  a  flaming  orange  blouse, was sitting in the
+chair in my study. Her long legs in pointy shoes rested on  the
+table,  while  her  slender fingers held a long slim cigarette.
+With her head thrown back, she was  blowing  thick  streams  of
+smoke at the ceiling, through her nose.
+     "At long last!" she cried, seeing me. "Where have you been
+all this time? As you can see, I've been waiting for you."
+     "I've  been delayed," I said, trying to recollect if I had
+indeed promised to meet her.
+     Wipe off the lipstick," she  demanded.  "You  look  silly!
+What's this? Books? What do you need books for?"
+     "What do you mean by that?"
+     "You  are  really  quite a problem! Comes back late, hangs
+around with books. Or are those pornos?"
+     "It's Mintz," I said.
+     "Let me have them!" She jumped up and snatched  the  books
+out  of  my  grasp.  "Good  God! What nonsense -- all three are
+alike. What is it?  <i>History  of  Fascism</i>...  are  you  a
+Fascist?"
+     "How can you say that, Vousi!"
+     "Then,  what do you need them for? Are you really going to
+read them?"
+     "Reread them."
+     "I just don't understand," she said  peevishly.  "I  liked
+you from the first. Mother says you're a writer, and I went and
+bragged  to  everyone, like a fool, and then you turn out to be
+the next thing to an Intel."
+     "How could you, Vousi!" I said with reproach. By now I had
+realized that it was impermissible to be taken  for  an  Intel.
+"These  bookos  were  simply  needed  in  my literary business,
+that's all."
+     "Bookos!" she laughed. "Bookos! Look at what  I  can  do."
+She threw back her head and blew two thick streams of smoke out
+of  her  nostrils.  "I  got  it on the second try. Pretty good,
+right?"
+     "Remarkable aptitude," I remarked.
+     "Instead of laughing at me, you should  try  it  yourself.
+... A lady taught me at the salon today. Slobbered all over me,
+the fat cow... Will you try it?"
+     "How come she did that?"
+     "Who?"
+     "The cow."
+     "Not  normal.  Or maybe a sad sack.... What's your name? I
+forgot."
+     "Ivan."
+     "An amusing name! You'll have to remind me again. Are  you
+a Tungus?"
+     "I don't think so."
+     "So-o...  and  I  went  and  told  everyone that you are a
+Tungus. Too bad.... Say, why not have a drink?"
+     "Let's."
+     "Today I  should  have  a  strong  drink  to  forget  that
+slobbering cow."
+     She  ran  out  into  the  living room and came back with a
+tray. We had some brandy and looked at each other,  not  having
+anything  to say. I felt ill at ease. I couldn't say why, but I
+liked her. I sensed something,  something  I  couldn't  put  my
+finger   on;   something   which  distinguished  her  from  the
+long-legged, smooth-skinned pin-up beauties, good only for  the
+bed. I had the impression that she sensed something in me, too.
+     "Beautiful day, today," she said, looking away.
+     "A bit hot," I observed.
+     She sipped some brandy; I did too. The silence stretched.
+     "What do you like to do the most?" she asked.
+     "It depends. And you?"
+     "Same with me. In general, I like to have fun and not have
+to think about anything."
+     "So do I," I said. "At least I do right now."
+     She seemed to perk up a little. I understood suddenly what
+was the  matter:  during  the whole day, I had not met a single
+truly pleasant person, and I simply had  gotten  tired  of  it.
+There was nothing to her, after all.
+     "Let's go somewhere," she said.
+     "We could," I said. I really didn't want to go anywhere, I
+wanted to sit and relax in the cool room for a while.
+     "I can see you're not too eager," she said.
+     "To  be  honest,  I  would prefer to sit around here for a
+bit."
+     "Well then, amuse me."
+     I considered the problem, and recounted the story  of  the
+traveling salesman in the upper bunk. She liked it, but I think
+she  missed  the point. I made a correction in my aim, and told
+her the one about the president and the old maid. She laughed a
+long time, kicking her  wonderfully  long  legs.  Then,  taking
+courage  from  another  shot  of brandy, I told about the widow
+with the mushrooms growing on the wall. She slid  down  to  the
+floor  and  almost knocked over the tray. I picked her up under
+the armpits, hoisted her back up in the  chair,  and  delivered
+the  story of the drunk spaceman and the college girl, at which
+point Aunt Vaina came rushing in and  inquired  fearfully  what
+was  going  on  with  Vousi,  and  whether  I  was tickling her
+unmercifully. I poured  Aunt  Vaina  a  glass,  and  addressing
+myself  to her personally, recounted the one about the Irishman
+who wanted to be a gardener. Vousi  was  completely  shattered,
+but  Aunt  Vaina  smiled  sorrowfully  and  confided that Major
+General Tuur liked to tell the same story, when  he  was  in  a
+good mood. But in it there was, she thought, a Negro instead of
+the Irishman, and he aspired to the duties of a piano tuner and
+not  a  gardener.  "And you know, Ivan, the story ended somehow
+differently," she added after some thought.  At  this  point  I
+noticed Len standing in the doorway, looking at us. I waved and
+smiled  at him. He seemed not to notice, so I winked at him and
+beckoned for him to come in.
+     "Whom are you winking at?" asked Vousi, through  lingering
+laughter.
+     "It's Len," I said. It was really a pleasure to watch her,
+as I love  to see people laugh, especially such a one as Vousi,
+beautiful and almost a child.
+     "Where's Len?" she wondered.
+     There was no Len in the doorway.
+     "Len isn't here," said Aunt Vaina, who  was  sniffing  the
+brandy with approval, and did not notice a thing. "The boy went
+to the Ziroks' birthday party today. If you only knew, Ivan..."
+     "But why does he say it was Len?" asked Vousi, glancing at
+the door again.
+     "Len  was here," I said. "I waved at him, and be ran away.
+You know, he looked a bit wild to me."
+     "Ach, we have a  highly  nervous  boy  there,"  said  Aunt
+Vaina.  "He  was  born  in a very difficult time, and they just
+don't know how to deal with a nervous  child  in  these  modern
+schools. Today I let him go visit."
+     "We'll  go,  too,  now," said Vousi. "You'll walk with me.
+I'll just fix myself up, because on account of  you  everything
+got  smeared.  In  the  meantime, you can put on something more
+decent."
+     Aunt Vaina wouldn't have minded staying behind to tell  me
+a  few  more things and maybe show me a photo album of Len, but
+Vousi dragged her off and I heard her ask her mother behind the
+door, "What's his name? I just can't remember it. He is a jolly
+fellow, isn't he?"
+     "Vousi!" admonished Aunt Vaina.
+     I laid out my entire wardrobe on  the  bed  and  tried  to
+imagine what Vousi would consider a decently dressed man. Until
+now,  I had thought I was dressed quite satisfactorily. Vousi's
+heels were already beating an impatient rat-a-tat on the  study
+floor. Not having come up with anything, I called her in.
+     "That's all you have?" she asked, wrinkling her nose.
+     "It really isn't good enough?"
+     "Well,  it  will pass. Take off the jacket and put on this
+Hawaiian shirt... or better yet, this one here. They sure  have
+dressing  problems in your Tungusia! Hurry up. No, no, take off
+the shirt you have on."
+     "You mean, without an undershirt?"
+     "You know, you really are a Tungus. Where do you think you
+are going -- to the pole or to Mars?  What's  this  under  your
+shoulder blade?"
+     "A  bee  stung me," I said, hurriedly pulling on my shirt.
+"Let's go!"
+     The street was already dark. The fluorescents shone palely
+through dark foliage.
+     "Which way are we bound?" I asked.
+     "Downtown, of course.... Don't grab my arm, it's  hot!  At
+least you know how to fight, I hope?"
+     "I know how."
+     "That's good. I like to watch."
+     "To watch, I like, too," I said.
+     There  were  a  lot more people out in the streets than in
+the daytime. Under  the  trees,  in  the  bushes,  and  in  the
+driveways  there  were groups of unsettled-looking individuals.
+They furiously smoked  crackling  synthetic  cigars,  guffawed,
+spat  negligently  and  often,  and spoke in loud rough voices.
+Over each group hung the racket of radio receivers.  Under  one
+streetlight  a  banjo  twanged, and two youngsters, twisting in
+weird contortions  and  yelling  out  wildly,  were  performing
+fling,  a  currently fashionable dance, a dance of great beauty
+when properly executed. The youngsters knew  how.  Around  them
+stood  a  small  crowd, also yelling lustily and clapping their
+hands in rhythm.
+     "Shall we have a dance?" I offered.
+     "But no, no..." hissed Vousi, taking me by  the  hand  and
+increasing her pace.
+     "And why not? You do fling?"
+     "I'd sooner hop with alligators than this crowd."
+     "Too bad," I said, "They look like regular fellows."
+     "Yes,  each  one  by  himself,"  said  Vousi,  "and in the
+daytime."
+     They  hung  around  on   the   corners,   huddled   around
+streetlights,   gauche,   smoked  to  the  gills,  leaving  the
+sidewalks  behind  them  strewn  with  bits  of  candy   paper,
+cigarette  butts,  and  spittle.  They  were  nervous and showy
+melancholic, yearning, constantly looking around, stooped. They
+were awfully anxious not to look like others, and at  the  same
+time,  assiduously imitated each other and two or three popular
+movie stars. There were really not that many,  but  they  stood
+out  like  sore  thumbs,  and it always seemed to me that every
+town and the whole  world  was  filled  with  them  --  perhaps
+because  every  city  and  the  whole world belonged to them by
+night. And to me, they seemed full of some dark mystery, But  I
+too used to stand around of evenings in the company of friends,
+until  some  real people turned up and took us off the streets,
+and many a time I have seen the same groups in all  the  cities
+of  the world, where there was a lack of capable men to get rid
+of them. But I never did understand to the very end what  force
+it  is  that turns these fellows away from good books, of which
+there are so many, from sport  establishments,  of  which  this
+town  had  plenty,  and even from ordinary television sets, and
+drives them out in the night streets with cigarettes  in  their
+teeth  and  transistor sets in their ears, to stand and spit as
+far as possible, to guffaw as offensively as possible,  and  to
+do  nothing.  Apparently at fifteen, the most attractive of all
+the  treasures  in  the  world  is  the  feeling  of  your  own
+importance  and  ability to excite everyone's admiration, or at
+least attract attention. Everything else seems unbearably  dull
+and  dreary,  including,  perhaps  above  all, those avenues of
+achieving the desirable which are offered by the tired world of
+adults.
+     "This is where old Rouen lives," said Vousi. "He has a new
+one with him every night. The old turnip has managed it so that
+they all come to him of their own will. During the fracas,  his
+leg  was  blown off.... You see there is no light in his place,
+they are listening to the hi-fi. On top of which, he's ugly  as
+mortal sin."
+     "He   lives   well   who   has   but   one  leg,"  I  said
+absent-mindedly.
+     Of course she had to giggle at this, and continued.
+     "And here lives Seus. He is a Fisher. Now  there's  a  man
+for you!"
+     "Fisher,"   I   said.   "And   what   does   he  do,  this
+Seus-Fisher?"'
+     "He Fishers. That's what Fishers do -- they Fisher. Or are
+you asking where he works?"
+     "No, I mean to ask where does he Fisher?"
+     "In the Subway." Suddenly she stopped. "Say, you  wouldn't
+be a Fisher?"
+     "Me? Why, does it show?"
+     "There  is something about you, I noticed at once. We know
+about these bees that sting you in the back."
+     "Is that right?" I said.
+     She slipped her arm through mine.
+     "Tell me a story," she said,  cajoling.  "I  never  had  a
+Fisher among my friends. Will you tell me a story?"
+     "Well  now...  shall  I  tell  you about the pilot and the
+cow?"
+     She tweaked my elbow.
+     "No, really..."
+     "What a hot evening," I said. "It's a good thing  you  had
+me take off my jacket!"
+     "Anyway,  everybody  knows. Seus talks about it, and so do
+others."
+     "Ah, so," I said with interest. "And what does Seus tell?"
+     She let go of my arm at once.
+     "I didn't hear it myself. The girls told me."
+     "And what did they tell?"
+     "Well, this and that.... Maybe they put it all on.  Maybe,
+you know. Seus had nothing to do with it."
+     "Hmmm," I said.
+     "Don't  think  anything about Seus, he's a good guy and he
+keeps his mouth closed."
+     "Why should I be thinking about Seus?"  I  said  to  quiet
+her. "I have never even laid eyes on him."
+     She  took my arm again and enthusiastically announced that
+we were going to have a drink now.
+     "Now's the very time for us to have a drink."
+     She was already using the familiar  address  with  me.  We
+turned  a  corner  and came out on a wide thoroughfare. Here it
+was lighter than day. The lamps shone, the  walls  glowed,  the
+display windows were lambent with multicolored fires. This was,
+apparently,  one of Ahmad's circles of paradise. But I imagined
+it differently. I expected roaring  bands,  grimacing  couples,
+half-naked  and naked people. But here it was relatively quiet.
+There were lots of people, and it seemed to me that  most  were
+drunk,  but they were all very well and differently dressed and
+all were gay. And almost all smoked. There  was  no  wind,  and
+waves of bluish smoke undulated around the lights and lanterns.
+Vousi  dragged  me  into  some establishment, found a couple of
+acquaintances, and  disappeared  after  promising  to  find  me
+later.  The crowd was dense, and I found myself pressed against
+the bar. Before I could gather my wits, I found myself  downing
+a  shot.  A brown middle-aged man with yellow whites of the eye
+was booming into my face.
+     "Kiven hurt his leg -- right? Brush became an antique  and
+is  now  quite  useless.  That makes three -- right? And on the
+right they haven't got nobody. Phinney is  on  the  right,  and
+that's worse than nobody. A waiter, that's what be is."
+     "What are you drinking?" I asked.
+     "I  don't  drink  at  all,"  replied  the  brown  one with
+dignity, breathing strong fumes at me. "I have  jaundice.  Ever
+hear of it?"
+     Behind  me,  someone fell off a stool. The noise modulated
+up and down. The brown  one,  sitting  down  next  to  me,  was
+shouting out some story about some character who almost died of
+fresh  air  after  breaking  some  pipe at work. It was hard to
+understand any part  of  it,  as  various  stories  were  being
+shouted from all sides.
+     "... Like a fool, he quieted down and left, and she called
+s taxi  truck,  loaded  up his stuff, and had it dumped outside
+the town..."
+     "... I wouldn't have your TV in  my  outhouse.  You  can't
+think  of  one  improvement  on  the  Omega,  my neighbor is an
+engineer, and that's just what he says -- you can't think up an
+improvement on the Omega..."
+     "... That's the  way  their  honeymoon  ended.  When  they
+returned  home, his father enticed him in the garage -- and his
+father  is  a  boxer  --  and  trounced  him  until   he   lost
+consciousness. They called a doctor later..."
+     "...  So, all right, we took enough for three... and their
+rule is, you know, take as much as you wish,  but  you  get  to
+swallow all of it... and they are watching us by now, and he is
+carried  away -- and says -- let's take more... well, I says to
+myself, enough of this, time to break knuckles..."
+     "... Dear child, with  your  bust,  I  wouldn't  know  any
+grief,  such  a bosom is one in a thousand, but don't think I'm
+flattering you, that's not my style..."
+     A scrawny girl with bangs down to  the  tip  of  her  nose
+climbed  up  on  the vacant stool next to me and began to pound
+with puny fists on the bar, yelling, "Barman, barman, a drink."
+     The din died down again, and I  could  hear  behind  me  a
+tragic  whisper  -- "Where did he get it?" "From Buba, you know
+him, he is an engineer." "Was it real?" "It's scary, you  could
+croak." "Then you need some kind of pill --" "Quiet, will you?"
+"Oh,  all  right,  who  would be listening to us? You got one?"
+"Buba gave me one package, he says any drugstore  has  them  by
+the ton... here, look." "De... Devon -- what is it?" "Some sort
+of  medicine,  how  would  I  know?"  I  turned around. One was
+red-faced with a shirt unbuttoned down to his navel, and with a
+hairy chest. The other was  strangely  haggard-looking  with  a
+large-pored nose. Both were looking at me.
+     "Shall we have a drink?" I said.
+     "Alcoholic," said the pore-nose.
+     "Don't,  Pete. Don't start up, please," said the red-faced
+one.
+     "If you need some Devon, I've got it," I said loudly.
+     They  jumped  back.  Pore-nose  began   to   look   around
+cautiously.  Out  of  the corner of my eye, I could see several
+faces turn toward us and grow still.
+     "Let's go, Pat," said red-face. "Let's go! The  hell  with
+him."
+     Someone put a hand on my shoulder. I turned around and saw
+a handsome sunburned man with powerful muscles.
+     "Yes?" I said.
+     "Friend,"  he said benevolently, "drop this business. Drop
+it while it's not too late. Are you a Rhinoceros?"
+     "I am a hippopotamus," I joked.
+     "No, don't. I'm serious. Did you get beat up, maybe?"
+     "Black and blue."
+     "All right, don't feel  bad  about  it.  Today  it's  you,
+tomorrow  it's  them....  As  for  Devon and all that -- that's
+crap, believe me. There's lots of crap in the world,  but  that
+is the crap of all crap."
+     The  girl  with  the  bangs  advised me, "Crack him in the
+teeth... what's he sticking his nose in for... lousy dick."
+     "Lapping it up, and doing it up brown, aren't  you?"  said
+the  sunburned  one coolly, and turned his back on us. His back
+was huge, and  studded  with  bulging  muscles  under  a  tight
+half-transparent shirt.
+     "None  of  your business," said the girl at his back. Then
+she said to me, "Listen, friend, call the barman for  me  --  I
+can't seem to get through to him."
+     I gave her my glass and asked, "What's to do?"
+     "In  a  minute,  we'll  all  go," replied the girl. Having
+swallowed the alcohol, she went limp all at once. "As  to  what
+to  do  -- that's up to luck. Without luck, you can't make out.
+Or you need money if you deal with promoters. You're probably a
+visitor? Nobody here drinks that dry vodka. How is it your way,
+you should tell me about it.... I'm not going  anywhere  today,
+I'll go to the salon instead. I feel terrible and nothing seems
+to  help....  Mother says -- have a child. But that's dull too,
+what do I need one for?"
+     She closed her eyes and lowered her chin on  her  entwined
+fingers. She looked brazen, but at the same time crestfallen. I
+attempted  to rouse her but she stopped paying attention to me,
+and suddenly started shouting again, "Barman, barman, a drink!"
+     I looked for Vousi. She was nowhere to be seen.  The  cafe
+began to empty. Everyone was in a hurry to get somewhere. I got
+off  my stool, too, and left the cafe. Streams of people flowed
+down the street. They were all going in the same direction, and
+in about five minutes, I was swept out onto a  big  square.  It
+was  huge and poorly lighted, a wide gloomy space bordered by a
+ring of streetlights and store windows. It was full of people.
+     They stood pressed against each  other,  men,  women,  and
+youngsters, boys and girls, shifting from foot to foot, waiting
+for  I  knew  not  what.  There was almost no talking. Here and
+there  cigarette  tips  flared,  lighting  hollow  cheeks   and
+compressed  lips.  Then  a  clock began to strike the hour, and
+over the square, gigantic luminous panels sprang  into  flaming
+light.  There  were  three  of  them  --  red, blue, and green,
+irregularly shaped rounded  triangles.  The  crowd  surged  and
+stood  still.  Around  me, cigarettes were put out with subdued
+movements. The panels went out momentarily and then started  to
+flash  in  rotation: red-blue-green, red-blue-green... I felt a
+wave of hot air on my face, and was suddenly dizzy.  They  were
+astir  around  me.  I  got  up on tiptoes. In the center of the
+square, the people stood motionless; I had the impression  that
+they  were seized rigid and did not fall only because they were
+pressed  in  by  the  crowd.  Red-blue-green,   red-blue-green.
+Wooden, upturned faces, blackly gaping mouths, staring, bulging
+eyes.  They  weren't  even  winking  there, under the panels. A
+total quiet fell, so that I  jumped  when  a  piercing  woman's
+voice  nearby  yelled:  "Shivers!"  All at once, tens of voices
+responded: "Shivers! Shivers!" People on the  sidewalk  on  the
+square's  perimeter  began  to  clap  hands  in rhythm with the
+flashes, and to chant  in  even  voices,  "Shi-vers!  Shi-vers!
+Shi-vers!"  Somebody prodded me in the back with a sharp elbow.
+I was pressed forward to the center, toward the panels. I  took
+a  step  and another and started through the crowd, pushing the
+stiffened bodies  aside.  Two  youngsters,  rigid  as  icicles,
+suddenly  started  thrashing  wildly,  grabbing  at each other,
+scratching and pounding with  all  their  strength,  but  their
+faces  remained  frozen in the direction of the flashing sky...
+red-blue-green, red-blue-green. And just as  suddenly  as  they
+started, they grew still again.
+     At  this  paint,  finally,  I understood that all this was
+extraordinarily amusing. Everyone laughed. There  was  lots  of
+room around me and music thundered forth. I swept up a charming
+girl  and  we began to dance, as they used to dance, as dancing
+should be done and was done a long, long time ago,  as  it  was
+done  always  with abandon, so that your head swam, and so that
+everyone admired you. We stepped out of the way, and I held  on
+to her hands, and there was no need to talk about anything, and
+she  agreed  that the van driver was a strange man. Can't stand
+alcoholics, said Rimeyer, and pore-nose  is  the  most  genuine
+alcoholic,  and  what  about  Devon  I  said,  how could you be
+without Devon when we have an excellent zoo, the buffaloes love
+to wallow in the mud, and bugs are constantly swarming  out  of
+it.  Rim,  I  said,  there are some fools who said that you are
+fifty years old -- such nonsense when I wouldn't give you  over
+twenty-five  --  and this is Vousi, I told her about you, but I
+am intruding on you, said Rimeyer; no one can  intrude  on  us,
+said  Vousi,  as  for Seus he's the best of Fishers, he grabbed
+the splotcher and got the ray right  in  the  eye,  and  Hugger
+slipped  and  fell  in  the  water  and  said -- wouldn't it be
+something for you to drown -- look your gear are melting  away,
+aren't  you  funny,  said  Len, there is such a game of boy and
+gangster, you know, you remember we played with Maris...  Isn't
+it  wonderful,  I  have  never  felt so good in my life, what a
+pity, when it could be like this  every  day.  Vousi,  I  said,
+aren't  we  great fellows, Vousi, people have never had such an
+important problem before, and we solved it and  there  remained
+only  one  problem,  Vousi,  the  sole problem in the world, to
+return to people a spiritual content, and  spiritual  concerns,
+no, Seus, said Vousi, I love you very much, Oscar, you are very
+nice,  but  forgive  me,  would  you,  I  want it to be Ivan, I
+embraced her and felt that it was right to kiss her and I  said
+I love you...
+     Boom! Boom! Boom! Something exploded in the dark night sky
+and tinkling  sharp  shards  began to fall on us, and at once I
+felt cold and uncomfortable. There were  machine  guns  firing!
+Again  the  guns  rattled.  "Down, Vousi," I yelled, although I
+could not yet understand what was going on, and threw her  down
+on the ground and covered her with my body against the bullets,
+whereupon blows began to rain on my face.
+     Bang, bang, rat-tat-tat-tat... around me people stood like
+wooden  pickets. Some were coming to and rolling their eyeballs
+inanely. I was half reclining on a man's chest,  which  was  as
+hard  as  a  bench,  and right in front of my eyes was his open
+mouth  and   chin   glistening   with   saliva...   Blue-green,
+blue-green, blue-green... Something was missing.
+     There were piercing screams, cursing, someone thrashed and
+screeched  hysterically. A mechanical roar grew louder over the
+square. I raised my head with difficulty. The panels were right
+overhead, the blue and green flashing regularly, while the  red
+was  extinguished and raining glass rubble. Rat-tat-tat-tat and
+the green panel broke and darkened. In the blue remaining light
+unhurried wings floated by, spewing the reddish lightning of  a
+fusillade.
+     Again  I  attempted  to throw myself on the ground, but it
+was impossible, as they  all  stood  around  me  like  pillars.
+Something  made  an ugly snap quite near me, and a yellow-green
+plume rose skyward from which puffed a repulsive  stench.  Pow!
+Pow!  Another two plumes hung over the square. The crowd howled
+and stirred. The yellow vapor was caustic like mustard, my eyes
+and mouth filled, and I began to cry and cough, and around  me,
+everyone began to cry and cough and yell hoarsely: "Lousy bums!
+Scoundrels!  Sock  the  Intels!"  Again  the roar of the engine
+could be heard, coming in louder and louder. The  airplane  was
+returning.  "Down,  you  idiots,"  I yelled. Everyone around me
+flopped down all over each other.  Rat-tat-tat-tat!  This  time
+the  machine  gunner  missed  and the string apparently got the
+building opposite us. To make up for the miss,  the  gas  bombs
+fell  again  right on target. The lights around the square went
+out, and with them the blue panel, as a free-for-all started in
+the pitch-black dark.
+
+<ul><a name=7></a><h2>Chapter SEVEN</h2></ul>
+
+     I'll never know how I arrived at that fountain. It must be
+that I have good instincts and ordinary cold water was  exactly
+what  I  needed. I crawled into the water without taking off my
+clothes, and lay down, feeling better immediately. I was  lying
+on  my back, drops rained on my face, and this was unbelievably
+pleasant. It was quite dark here, and dim stars  shone  through
+the  branches  and  the  water.  It was very quiet. For several
+minutes I was watching a brighter star, for some reason unknown
+to me, which was slowly moving across the sky, until I realized
+that I was watching the relay satellite Europa.  How  far  from
+all  this,  I  thought, how degrading and senseless to remember
+the revolting mess on the square, the disgusting foul mouthings
+and screechings, the wet phrumping of the gas  bombs,  and  the
+putrid  stench  which turned your stomach and lungs inside out.
+Understanding   freedom   as   the   rapid   satisfaction   and
+multiplication  of  needs  and  desires,  I recollected, people
+distort their natures as they engender within  themselves  many
+senseless  and  stupid  desires,  habits  and the most unlikely
+inventions....
+     Priceless Peck, he loved to quote old pundit Zosima as  he
+circled  around  a  well-laid table, rubbing his hands. We were
+snot-nosed undergrads then and ingenuously believed  that  such
+pronouncements,  in  our  time,  were  meant  only  to show off
+flashes  of  humor  and  erudition....  At  this  point  in  my
+reflections,  someone  noisily  plunged into the water some ten
+paces from me.
+     At first he coughed hoarsely, spat and blew his  nose,  so
+that  I  hurried to leave the water, then he started to splash,
+finally became quiet, and  suddenly  discharged  himself  of  a
+string of curses:
+     "Shameless  lice,"  he  growled. "Whores, swine... on live
+people! Stinking hyenas, rotten  scum...  learned  prostitutes,
+filthy  snakes."  He  hawked  furiously again. "It bothers them
+that people are having a good time! Stepped  on  my  face,  the
+crud!"  He  groaned  nasally and painfully, "The hell with this
+shiver business. That will be the day when I'll go again."
+     He moaned again and rose. I could hear the  water  running
+from his clothes. I could dimly perceive his swaying figure. He
+saw me too.
+     "Hey, friend, have a smoke on you?"
+     "I did," I replied.
+     "Low-lifers! I didn't think to take them out. Just fell in
+with everything  on."  He  splashed  over  to  me  and sat down
+alongside. "Some moron stepped on my cheek," he informed me.
+     "They marched over me, too,"  I  said.  "The  people  went
+ape."
+     "But,  you  tell  me,  where do they get the tear gas?" he
+said. "And machine guns?"
+     "And airplanes," I added.
+     "An airplane means nothing," he contradicted. "I have  one
+myself.  I bought it cheap for seven hundred crowns.... What do
+they want, that's what I don't understand."
+     "Hoodlums," I said. "They should have their  faces  pulped
+properly, and that would be the end of that argument."
+     He laughed bitterly.
+     "Someone  did!  For  that you get worked over good.... You
+think they didn't get beat up? And how they got  beat  up!  But
+apparently  that  isn't  enough....  We should have driven them
+right into the ground, together with their  excrement,  but  we
+passed  up  the  chance....  And  now  they  are  giving us the
+business! The people got soft, that's what, I tell you.  Nobody
+gives  a  damn.  They put their four hours in, have a drink and
+off to the shivers! And you can pot them like clay pigeons." He
+slapped his sides in desperation. "Those were  the  times,"  he
+cried.  "They didn't dare open their mouths! Should one of them
+even whisper, guys in black shirts or maybe white  hoods  would
+pay a night visit, crunch him in the teeth, and off to the camp
+he  went,  so  there wouldn't be a peep out of him again.... In
+the schools, my son says, everyone bad-mouths fascism: Oh dear,
+they hurt the Negroes' feelings; oh dear, the  scientists  were
+witch-hunted;  oh  dear,  the camps; oh dear, the dictatorship!
+Well, it wasn't witch-hunting that was needed,  but  to  hammer
+them  into  the  ground,  so  there  wouldn't  be  any left for
+breeding!" He drew his hand under his nose, slurping  long  and
+loud.
+     "Tomorrow  morning,  I have to go to work with my face all
+out of shape.... Let's go have a drink,  or  we'll  both  catch
+cold."
+     We crawled through the bushes and came out on the street.
+     "The Weasel is just around the corner," he informed me.
+     The  Weasel was full of wet-haired half-naked people. They
+seemed depressed, somehow embarrassed,  and  gloomily  bragging
+about their contusions and abrasions. Several young women, clad
+only  in  panties,  clustered  around  the  electric fireplace,
+drying their skirts. The men patted them platonically on  their
+bare  flesh. My companion immediately penetrated into the thick
+of the crowd, and swinging his arms and blowing his  nose  with
+his fingers, began to call for "hammering the bastards into the
+ground." He was getting some weak support.
+     I asked for Russian vodka, and when the girls left, I took
+off my  sport  shirt  and  sat  by  the  fireplace.  The barman
+delivered my glass and returned at once to his crossword in the
+fat magazine. The public continued its conversation.
+     "So, what's the shooting for? Haven't  we  had  enough  of
+shooting?  Just  like little boys, by God... just spoiling some
+good fun."
+     "Bandits, they're worse than gangsters, but like it or not
+that shiver business is no good, too."
+     "That's right. The other day mine says to me, 'Papa, I saw
+you; you were all blue like a corpse and  very  scary'  --  and
+she's only ten. So how can I look her in the eyes? Eh?"
+     "Hey  anybody! What's an entertainment with four letters?"
+asked the barman without raising his head.
+     "So, all right, but who dreamed all this up -- the  shiver
+and the aromatics? Eh and also..."
+     "If you got drenched, brandy is best."
+     "We were waiting for him on the bridge, and along he comes
+with his eyeglasses and some kind of pipe with lenses in it. So
+up he  goes over the rail with his eyeglasses and his pipe, and
+he kicked his legs once and that was that. And then  old  Snoot
+comes  running,  after having been revived, and he looks at the
+guy blowing bubbles. "Fellows," he says, "What the hell is  the
+matter with you, are you drunk or something, that's not the guy
+-- I am seeing him for the first time..."
+     "I  think  there  ought to be a law -- if you are married,
+you can't go to the shiver."
+     "Hey somebody," again the bartender,  "What's  a  literary
+work with seven letters -- a booklet, maybe?"
+     "So, I myself had four Intels in my squad, machine gunners
+they were.  It's  quite  true  that  they fought like devils. I
+remember we  were  retreating  from  the  warehouse,  you  know
+they're  still  building a factory there, and two stayed behind
+to cover us. By the way, nobody asked  them,  they  volunteered
+entirely  by  themselves.  Later  we  came  back and found them
+hanging side by side from the rail crane, naked, with all their
+appurtenances ripped off with hot pincers. You understand?  And
+now,  I'm  thinking, where were the other two today? Maybe they
+were the very same guys to treat me to some tear gas, those are
+the types that can do such things."
+     "So who didn't get hung? We got hung  by  various  places,
+too!"
+     "Hammer  them into the ground right up to their noses, and
+that'll be the end of that!"
+     "I'm going. There is no point in hanging around here,  I'm
+getting  heartburn.  They must have fixed everything up by now,
+back there."
+     "Hey, barman, girls, let's have one last one."
+     My shirt had dried, and as the cafe emptied, I  pulled  it
+on  and  went  over  to  sit  at  a  table  and  to  watch. Two
+meticulously dressed gentlemen in the corner were sipping their
+drinks through straws.  They  called  attention  to  themselves
+immediately  -- both were in severe black suits and black ties,
+despite the very warm night. They weren't talking, and  one  of
+them  constantly  referred  to his watch. After a while, I grew
+tired of observing them. Well, Doctor Opir, how do you like the
+shivers? Were you at the square? But of course  you  were  not.
+Too  bad.  It  would  have  been  interesting  to know what you
+thought of it. On the other hand, to the devil with  you.  What
+do  I  care  what  Doctor Opir thinks? What do I think about it
+myself? Well, high-grade barber's raw  material,  what  do  you
+think? It's important to get acclimatized quickly
+     and  not  stuff  the  brain with induction, deduction, and
+technical procedures.  The  most  important  thing  is  to  get
+acclimatized as rapidly as possible. To get to feel like one of
+them....  There,  they  all  went  back  to the square. Despite
+everything that happened, they still went back  to  the  square
+again.  As for me, I don't have the slightest desire to go back
+there. I would, with the greatest of pleasure at this point, go
+back to my room and check out my new bed. But when would  I  go
+to  the  Fishers?  Intels,  Devon, and Fishers. Intels -- maybe
+they are the local version of the Golden Youth? Devon...  Devon
+must be kept in mind, together with Oscar. But now the Fishers.
+     "The Fishers; that's a little bit vulgar," said one of the
+black suits, not whispering, but very quietly.
+     "It  all  depends on temperament," said the other. "As for
+me, personally I don't condemn Karagan in the slightest."
+     "You see, I  don't  condemn  him  either.  It's  a  little
+shocking  that  he picked up his options. A gentleman would not
+have behaved that way."
+     "Forgive me, but Karagan is no gentleman.  He  is  only  a
+general   manager.   Hence   the   small-mindedness   and   the
+mercantilism and a certain what I might call commonness..."
+     "Let's not be so  hard  on  him.  The  Fishers  --  that's
+something  intriguing. And to be honest, I don't see any reason
+why we should not involve ourselves. The old Subway  --  that's
+quite  respectable.  Wild is much more elegant than Nivele, but
+we don't reject Nivele on that account."
+     "'You really are seriously considering?"
+     "Right now, if you wish.... It's five to two, by the  way.
+Shall we go?"
+     They  got  up,  said  a friendly and polite goodbye to the
+bartender, and proceeded toward the exit. They looked  elegant,
+calm,  and  condescendingly remote. This was astounding luck. I
+yawned loudly, and muttering, "Off  to  the  square,"  followed
+them,  pushing  stools  out  of  my  way. The street was poorly
+illuminated, but I saw them immediately. They were in no hurry.
+The one on the right was the  shorter,  and  when  they  passed
+under  the  street lights, you could see his safe, sparse hair.
+As near as I could tell, they were no longer conversing.
+     They detoured  the  square,  turned  into  a  dark  alley,
+avoided  a  drunk  who  tried  to strike up a conversation, and
+suddenly, without one backward glance, turned abruptly  into  a
+garden  in  front of a large gloomy house. I heard a heavy door
+thud shut. It was a minute before two.
+     I pushed off the drunk, entered the garden, and  sat  down
+on  a silver-painted bench under a lilac bush. The wooden bench
+was situated on a sandy path which ran through  the  garden.  A
+blue  lamp  illuminated  the  entrance  of  the  house,  and  I
+discerned two caryatids supporting the balcony over  the  door.
+This  didn't  look  like the entrance to the old subway, but as
+yet, I couldn't tell for sure, so I decided to wait.
+     I didn't have to wait long. There was a  rustle  of  steps
+and  a  dark  figure  in a cloak appeared on the path. It was a
+woman. I did not grasp immediately why her proudly raised  head
+with  a  high  cylindrical  coiffure,  in  which  large  stones
+glistened in the starlight, seemed familiar. I  arose  to  meet
+her,  and  said,  trying  to sound both respectful and mocking,
+"You are late, madam, it's after two."
+     She was not in the least startled.
+     "You don't say!" she exclaimed. "Can it be my watch is  so
+slow?"
+     It  was  the  very same woman who had the altercation with
+the van driver, but of course she did not recognize  me.  Women
+with  such  disdainful-looking lower lips never remember chance
+meetings. I took her by the arm, and we mounted the wide  stone
+steps.  The  door  turned  out to be as heavy as a reactor-well
+cover. There was no  one  in  the  entrance  hall.  The  woman,
+without  turning, flung the cloak on my arm and went ahead, and
+I paused for a second to look at myself  in  the  huge  mirror.
+Good  man,  Master  Gaoway, but it still behooved me to stay in
+the shadows. We entered the ballroom.
+     No, this was anything but a subway. The room was  enormous
+and  incredibly  old-fashioned.  The walls were lined with dark
+wood, and fifteen feet up, there was a gallery with a  railing.
+Pink  blond-curled angels smiled down with only their blue lips
+from a far-flung ceiling. Almost the entire floor of  the  room
+was  covered  with  rows  of  soft  massive chairs covered with
+embossed leather. Elegantly dressed people, mostly  middle-aged
+men,  sat  in  them  in  relaxed and negligent poses. They were
+looking at the far end  of  the  room,  where  a  brightly  lit
+picture blazed against a background of black velvet.
+     No  one  turned to look at us. The woman glided toward the
+front rows, and I sat down near the door. By now, I was  almost
+sure  that  I  had come here for nothing. There was silence and
+some coughs, and lazy streams of smoke curled upward  from  the
+fat cigars; many bald pates glistened under the chandeliers. My
+attention   turned   to   the  picture.  I  am  an  indifferent
+connoisseur of paintings, but it looked like a Raphael, and  if
+it was not genuine, it was certainly a perfect copy.
+     There  was  a deep brassy gong, and simultaneously a tall,
+thin man in a black mask appeared by the side of the picture. A
+black leotard covered  his  body  from  head  to  toe.  He  was
+followed by a limping, hunchbacked dwarf in a red smock. In his
+short, extended pawlike arms, he held a dully glinting sword of
+a  most  wicked appearance. He went to the right of the picture
+and stood still, while the masked  individual  stepped  forward
+and  spoke  in  a measured tone: "In accordance with the bylaws
+and directives of the Honorable Society of Patrons, and in  the
+name  of  Art,  which is holy and irreproducible, and the power
+granted me by you, I have examined the  history  and  worth  of
+this painting and now --"
+     "Request a halt," sounded a curt voice behind me.
+     Everyone  turned around. I also turned around and saw that
+three young, obviously very powerful, and immaculately  dressed
+men  were  looking at me full in the face. One had a monocle in
+his right eye. We studied each other for a few seconds, and the
+man with the monocle twitched his cheek and let it drop. I  got
+up  at once. They moved toward me together, stepping softly and
+soundlessly. I tried the chair, but it was  too  massive.  They
+jumped  me.  I met them as best I could and at first everything
+went well, but very quickly it became evident  that  they  wore
+brass  knuckles,  and I barely managed to evade them. I pressed
+my back against  the  wall  and  looked  at  them  while  they,
+breathing  heavily,  looked at me. There were still two of them
+left. There was the usual coughing in the auditorium. Four more
+were coming down the gallery steps, which squeaked and  groaned
+loudly enough to reverberate in the hall. Bad business, thought
+I, and launched myself to force a breach.
+     It  was hard going, just like the time in Manila, but then
+there were two of us. It would have been better  if  they  were
+armed, as I would have had a chance to expropriate a gun.
+     But  all  six of them met me with knuckles and truncheons.
+Luckily for me it was very crowded. My left  arm  went  out  of
+commission,  and  then the four suddenly jumped back, while the
+fifth drenched me with a clammy liquid from a  flat  container.
+Simultaneously, the lights were extinguished.
+     These tricks were well known to me: now they could see me,
+but I  could  not  see them. In all probability that would have
+been the end of me, were it not that some idiot threw open  the
+door  and announced in a greasy basso, "I beg forgiveness, I am
+terribly late and so sorry..." I charged toward the light, over
+some bodies, mowed down the latecomer, flew across the entrance
+hall, threw open the front door, and pelted down the sandy path
+holding my left arm with my right hand. No one was pursuing me,
+but I traversed two blocks before it dawned on me to stop.
+     I flung myself down on a lawn and lay for a long  time  in
+the short grass, grabbing lungfuls of the warm moist air. In no
+time,   the  curious  gathered  around  me.  They  stood  in  a
+semicircle and ogled me avidly, not saying a word. "Take  off,"
+I  said,  getting  up  finally. Hurriedly, they scooted away. I
+stood awhile, figuring out where I was, and began  a  stumbling
+journey  homeward.  I  had had enough for today. I still didn't
+get it, but I had had quite enough. Whoever  they  were,  these
+members  of  the Honorable Society of Art Patrons -- secret art
+worshippers, extant aristocrat-conspirators or whoever else  --
+they  fought  cruelly and without quarter, and the biggest fool
+in that hall of theirs was still apparently none other than I.
+     I passed by the  square,  where  again  the  color  panels
+pulsed   rhythmically,   and   hundreds  of  hysterical  voices
+screamed, "Shi-vers! Shi-vers!" Of this too I had  had  enough.
+Pleasant dreams are, of course, more attractive than unpleasant
+ones,  but  after  all,  we  do  not  live  in  a dream. In the
+establishment where Vousi had taken  me,  I  had  a  bottle  of
+ice-cold  soda water, observed with curiosity a squad of police
+peacefully camped by the bar, and went out, turning into Second
+Waterway.
+     A lump the size of a tennis ball was rising behind my left
+ear. I weaved badly and walked slowly,  keeping  close  to  the
+fences. Later, I heard the tap of heels behind me and voices:
+     "... Your place is in the museum, not in a cabaret."
+     "Nothing   of   the  sort,  I  am  not  drunk.  Can't  you
+und-derstand, only one measly bottle of wine..."
+     "How disgusting! Soused and picking up a wench."
+     "What's the girl got to do with it? She is a m-model!"
+     "Fighting over a wench. Making us fight over her."
+     "Why in hell d-do you believe them and don't believe me?"
+     "Just because you're drunk! You're a bum, just  like  they
+all are, maybe worse...."
+     "That's  all  right. I'll remember that scoundrel with the
+bracelet quite well.... Don't hold me! I'll walk by myself!"
+     "You'll  remember  nothing,  friend.  Your  glasses   were
+knocked  off in the first instant, and without them, you aren't
+even a man, but a blind sausage.... Stop kicking, or it will be
+the fountain for you...."
+     "I'm warning you, one more  stunt  like  that,  and  we'll
+throw  you out. A drunken <i>kulturfuhrer</i> -- it's enough to
+make you sick."
+     "Stop preaching at him, give a man a chance  to  sleep  it
+off."
+     "Fellows! There he is, the l-louse!"
+     The  street  was  empty,  and  the louse was clearly me. I
+could bend my left arm already, but it hurt like the devil, and
+I stepped back to let them pass. There were three of them. They
+were young, in identical caps, pushed  over  their  eyes.  One,
+thickset and low-slung, was obviously amused and held the other
+one,  a tall, open-faced, loose-jointed fellow, with a powerful
+grip, restraining  his  violent  and  sporadic  movements.  The
+third,  long  and  skinny,  with a narrow and darkish face, was
+following at some distance with his hands behind his  back.  As
+he got alongside me, the loose-jointed one braked determinedly.
+The short one attempted to nudge him off the spot, but in vain.
+     The  long  one  passed  by  and then stopped, looking back
+impatiently over his shoulder.
+     "Thought  you  were  gonna  get  away,  pig!"  he   yelled
+drunkenly,  attempting  to  seize me by the chest with his free
+hand.
+     I retreated to the fence and said,  addressing  myself  to
+the short fellow, "I had no business with you."
+     "Stop being a rowdy," said the distant one sharply.
+     "I  remember  you  very  well  indeed,"  yelled the drunk.
+"You're not going to get away from me! I'll get even with you!"
+     He advanced upon me in surges, dragging the short one,
+     who hung on with bulldog grimness, behind him.
+     "It's not him," cajoled the low-slung one, who  was  still
+very  merry.  "That guy went off to the shivers and this one is
+sober."
+     "You won't fool me."
+     "I'm warning you for the last time. We are going to  expel
+you."
+     "Got scared, the bum! Took off his bracelet."
+     "You  can't  even  see  him. You're worthless without your
+glasses."
+     "I can see everything pe-erfectly!... And even if he isn't
+the one..."
+     "Stop it! Enough is enough!"
+     The long one finally came back and grasped the drunk  from
+the other side.
+     "Will  you  move  on!" he said to me with irritation, "Why
+the devil are you  stopping  here!  Haven't  you  ever  seen  a
+drunk?"
+     "Oh, no! You aren't going to get away from me."
+     I  continued  on  my  way. I had not far to go by now. The
+trio dragged along behind me noisily.
+     "I can see right through  him,  if  you  please.  King  of
+Nature!  Drunk  enough  to  retch, and to beat up whoever comes
+along. Got beat up himself, and that's all he needs.... Let  go
+of me, I'll hang a few good ones on his mug...."
+     "What  have  you come to, we have to walk you along like a
+hood."
+     "So don't walk me!... I loathe them.... Shivers,  wenches,
+whiskey... brainless jelly..."
+     "Sure, sure, take it easy, just don't fall."
+     "Enough  of  your reproofs... I am sick of your hypocrisy,
+your puritanism. We should  blow  them  up,  shoot  them!  Raze
+everything off the face of the earth!"
+     "Drunk as a coot, and I thought he was sobered up!"
+     "I  am  sober. I remember everything... the twenty-eighth,
+right?"
+     "Shut up, you fool."
+     "Shh! Right  you  are!  The  enemy  is  on  the  alert....
+Fellows,  there  was  a spy here somewhere.... Didn't I talk to
+him?... The son of a bitch took off his  bracelet...  but  I'll
+get that dick before the twenty-eighth!"
+     "Will you be quiet!"
+     "Shh!  And  not  another word. That's it! And don't worry,
+the grenade launchers are my baby."
+     "I am going to kill him right now, the bum!"
+     "Lay it on the enemies of civilization.... Fifteen hundred
+meters of tear gas -- personally... six sectors... awk!"
+     I was already by the gate  to  my  house.  When  I  turned
+around  to  look,  the burly man was lying face down, the short
+one was  squatting  alongside,  while  the  long  fellow  stood
+rubbing the edge of his right hand.
+     "Why  did you do that?" said the short man. "You must have
+maimed him."
+     "Enough prattle," said the long one furiously.  "We  can't
+seem  to  learn  to  stop  prattling.  We  can't  learn to stop
+boozing. Enough!"
+     Let us be as children, Doctor Opir,  thought  I,  slipping
+into  the yard as quietly as possible. I held the latch to keep
+it from clicking into place.
+     "Where did he go?" said the long one, lowering his voice.
+     "Who?"
+     "The guy who went ahead of us."
+     "Turned off somewhere."
+     "Where? Did you notice?"
+     "Listen, I wasn't concerned about him."
+     "Too bad. But all right, pick him up, and let's go."
+     Stepping into the shadow of the  apple  trees,  I  watched
+them drag the drunk by the gate. He was wheezing horribly.
+     The house was quiet. I went to my quarters, undressed, and
+took a  hot shower. My shirt and shorts smelled of tear gas and
+were covered with the greasy spots of the  luminous  liquid.  I
+threw  them  into  the  hamper. Next, I inspected myself in the
+mirror and marveled once more at how lightly I had gotten away:
+a bump  behind  the  ear,  a  sizable  contusion  on  the  left
+shoulder, and some scraped ribs. Also skinned knuckles.
+     On   the   night   table,  I  discovered  a  notice  which
+respectfully suggested that I deposit a sum to cover  the  rent
+for  the apartment for the first thirty days. The sum was quite
+considerable, but tolerable. I counted out a  few  credits  and
+stuffed  them into the thoughtfully provided envelope, and then
+lay down on the bed with my hands behind my  head.  The  sheets
+were cool and crisp, and a salty sea breeze blew in through the
+open  window.  The  phonor  susurrated  cozily behind my ear. I
+intended to think awhile before falling  asleep,  but  was  too
+exhausted and quickly dozed off.
+     Later,  some  noise  in  the background awakened me, and I
+grew alert and listened with eyes wide open.
+     Somewhere nearby, someone either cried or sang in  a  thin
+childish  voice.  I  got  up cautiously and leaned out the open
+window. The thin halting voice was intoning: "... having stayed
+in the grave but a short time, they come out and live among the
+living as though alive." There was the sound of sobs. From  far
+away  like  the keening of a mosquito came the chant "Shi-vers!
+Shi-vers!" The pitiable little voice  went  on  --  "Blood  and
+earth  mixed  together  they  can't eat." I thought that it was
+Vousi, drunk and lamenting upstairs in her room, and called out
+softly, "Vousi!" No one replied,  The  thin  voice  cried  out:
+"Hence from my hair, hence from my flesh, hence from my bones,"
+and  I  knew who it was. I climbed over the window sill, jumped
+onto the lawn, and went to the apple grove,  listening  to  the
+sobbing. Light appeared through the trees, and soon I came to a
+garage. The doors were cracked open and I looked in. Inside was
+a  huge  shiny Opel. Two candles were burning on the workbench.
+There was a smell of gasoline and hot wax.
+     Under the candles,  seated  on  a  work  stool,  was  Len,
+dressed  in  a  full-length  white  gown,  in bare feet, with a
+thick, well-worn  book  on  his  knees.  He  regarded  me  with
+wide-open  eyes,  his  face  completely  white  and frozen with
+terror.
+     "What are you doing here?" I said loudly and entered.
+     He continued to look at  me  in  silence  and  started  to
+tremble. I could hear his teeth chattering.
+     "Len,  old  friend," I said, "I guess you didn't recognize
+me. It's me -- Ivan."
+     He dropped the book and hid his hands in his  armpits.  As
+earlier today, in the morning, his face beaded with cold sweat.
+I  sat  down  alongside  of  him  and  put  my  arm  around his
+shoulders. He collapsed against me weakly. He shook all over. I
+looked at the book. A certain Doctor Neuf had blessed the human
+race with <i>An Introduction to  the  Science  of  Necrological
+Phenomena</i>. I kicked the book under the bench.
+     'Whose ear is that?" I asked loudly.
+     "Mo... Mama's..."
+     "A very nice Ford."
+     "It's not a Ford. It's an Opel."
+     "You're right -- it is an Opel... a couple of hundred
+     miles per hour I would guess..."
+     "Yes."
+     "Where did you get the candles?"
+     "I bought them."
+     "Is  that  right!  I didn't know that they sold candles in
+our time. Is your bulb burned out? I went out  in  the  garden,
+you  know, to get an apple off a tree, and then I saw the light
+in the garage."
+     He moved closer to me and said, "Don't leave for  a  while
+yet, will you?"
+     "OK.  What  do you say we blow out the lights and go to my
+place?"
+     "No, I can't go there."
+     "Where can't you go?"
+     "In the house and to your  place."  He  was  talking  with
+tremendous  conviction. "For quite a while yet. Until they fall
+asleep."
+     "Who?"
+     "They."
+     "Who are -- they?"
+     "They -- you hear?"
+     I listened. There was only the rustle of branches in the
+     wind and somewhere very far away the  cry  of:  "Shi-vers!
+Shi-vers!"'
+     "I don't hear anything special," I said.
+     "That's because you don't know. You are new here and
+     they don't bother the new ones."
+     "But who are they, after all?"
+     "All of them. You've seen the fink with the buttons?"
+     "Pete? Yes, I saw him. But why is he a fink? In my
+     opinion, he's an entirely respectable man."
+     Len jumped up.
+     "Come  on,"  he  said in a whisper, "I'll show you. But be
+quiet."
+     We came out of the garage, crept  up  to  the  house,  and
+turned  a  corner.  Len held my hand all the time; his palm was
+cold and wet..
+     "There -- look," he said.
+     Sure enough, the sight was frightening. My customs  friend
+was  lying  on  the  porch  with his head stuck at an unnatural
+angle through the railing. The mercury  vapor  light  from  the
+street  fell  on  his  face, which looked blue and swollen, and
+covered with dark welts. Through half-open lids, the eyes could
+be seen, crossed toward the bridge of the nose.
+     'They walk among the living, like  living  people  in  the
+daytime," murmured Len, holding on to me with both hands. "They
+bow  and  smile,  but at night their faces are white, and blood
+seeps through  their  skin."  I  approached  the  veranda.  The
+customs  man  was  dressed  in pajamas. He breathed noisily and
+exuded a smell of cognac. There  was  blood  on  his  face,  as
+though he'd fallen on his face into some broken glass.
+     "He's  just  drunk,"  I  said  loudly.  "Simply  drunk and
+snoring. Very disgusting."
+     Len shook his head.
+     "You are a newcomer," he whispered. "You see nothing.  But
+I saw." He shook again. "Many of them came. She brought them...
+and  they  carried her in... there was a moon... they sawed off
+the top of her head... and she  screamed  and  screamed...  and
+then  they  started  to eat with spoons. She ate, too, and they
+all laughed when she screamed and flopped around..."
+     "Who? Who was it?"
+     "And then they piled on wood  and  burned  it  and  danced
+around  the  fire...  and  then  they  buried everything in the
+garden... she went out to get the shovel in the car... I saw it
+all... do you want to see where they buried her?"
+     "You know what, friend?" I said. "Let's go to my place."
+     "What for?"
+     "To get some sleep, that's what for. Everyone is  sleeping
+-- only you and I are palavering here."
+     "Nobody  is sleeping. You really are new. Right now no one
+is sleeping. You must not sleep now."
+     "Let's go, let's go," said I, "over to my place."
+     "I won't go," he said. "Don't touch me. I didn't say  your
+name."
+     "I  am  going  to  take a belt," I said menacingly, "and I
+will strap your behind."
+     Apparently this calmed him. He clutched my hand again  and
+became silent.
+     "Let's  go,  old  pal, let's go," I said. "You're going to
+sleep and I will sit alongside you.  And  if  anything  at  all
+happens, I will awaken you at once."
+     We  climbed into my room through the window (he absolutely
+refused to enter the house by the front door), and I put him to
+bed. I intended  to  tell  him  a  tale,  but  he  fell  asleep
+immediately. His face looked tortured, and every few minutes he
+quivered  in  his  sleep.  I  pushed  the  chair by the window,
+wrapped myself in a bathrobe, and smoked a cigarette to calm my
+nerves. I attempted  to  think  about  Rimeyer  and  about  the
+Fishers,  with whom I had not met up after all; about what must
+happen on the twenty-eighth; and about  the  Art  Patrons,  but
+nothing  came of it and this irritated me. It was annoying that
+I was unable  to  think  about  my  business  as  something  of
+importance.   The   thoughts  scattered  and  jumbled  emotions
+intruded, and I did not think so much as I felt. I felt that  I
+hadn't  come for nothing, but at the same time, I sensed that I
+had come for altogether the wrong reason.
+     But Len slept. He  did  not  even  awake  when  an  engine
+snorted at the gate, car doors were slammed, there were shouts,
+chokes, and howls in different voices, so that I almost decided
+that a crime was being committed in front of the house, when it
+became  clear  that  it  was  just  Vousi  coming back. Happily
+humming, she began  to  undress  while  still  in  the  garden,
+negligently  draping her blouse, skirt, and other garments over
+the apple branches. She didn't notice me, came into the  house,
+shuffled  around upstairs for a while, dropped something heavy,
+and finally settled down. It was close  to  five  o'clock.  The
+glow of dawn was kindling over the sea.
+
+<ul><a name=8></a><h2>Chapter EIGHT</h2></ul>
+
+     When I woke up, Len was already gone. My shoulder ached so
+badly  that  the pain pounded in my head, and I promised myself
+to take it easy the whole day. Grunting and  feeling  sick  and
+forlorn,  I executed a feeble attempt at set-ting-up exercises,
+approximated a wash-up, took the envelope with the  money,  and
+set  out  far Aunt Vaina, moving edge-wise through the doorway.
+In the hall, I stopped in  indecision:  it  was  quiet  in  the
+house,  and  I wasn't sure that my landlady was up. But at this
+point the door to her side of the house opened, and  Pete,  the
+customs  man, came out into the hall. Well, well, thought I. At
+night he had looked like a drowned drunk. Now in the  light  of
+day, he resembled a victim of a hooligan attack. The lower part
+of  his  face was dark with blood. Fresh blood glistened on his
+chin, and he held a handkerchief under  his  jaw  to  keep  his
+snow-white braided uniform clean. His face was strained and his
+eyes   tended  to  cross,  but  in  general,  he  held  himself
+remarkably calm, as though falling face-down into broken  glass
+was  a  most ordinary event for him. A slight misadventure, you
+know, can happen to anybody; please don't pay it any attention;
+every-thing will be all right.
+     "Good morning," I mumbled.
+     "Good morning," he responded, politely  dabbing  his  chin
+cautiously and sounding a bit nasal.
+     "Anything the matter? Can I help?"
+     "A trifle," he said. ' The chair fell."
+     He  bowed courteously, and passing by me, unhurriedly left
+the  house.  I  observed  his  departure  with   a   thoroughly
+unpleasant  feeling,  and when I turned back toward the door, I
+found Aunt Vaina standing in front of  me.  She  stood  in  the
+doorway,  gracefully  leaning on the jamb, all clean, rosy, and
+perfumed, and looking at me as though I was Major General  Tuur
+or, at least, Staff Major Polom.
+     "Good  morning,  early bird," she cooed. "I was puzzled --
+who would be talking at this hour?"
+     "I  couldn't  bring  myself  to  disturb  you,"  I   said,
+shuddering  fashionably  and mentally howling at the pain in my
+shoulder. "Good morning, and may I take the  }liberty  to  hand
+you --"
+     "How nice! You can tell a real gentleman right away. Major
+General  Tuur  used  to  say  that a true gentleman never makes
+anyone wait. Never. Nobody..."
+     I became aware that slowly but very persistently, she  was
+herding  me  away  from her door. The living room was darkened,
+with the drapes apparently drawn, and some strange sweet  smell
+was wafting out of it into the hall.
+     "But you did not have to be in such a rush, really..."
+     She was finally in a convenient position to close the door
+with a smooth negligent gesture. "However, you can be sure that
+I will  value  your  promptness  appropriately.  Vousi is still
+asleep, and it's time for me to get Len off to  school.  So  if
+you will excuse me... By the way, we have the newspapers on the
+veranda."
+     "Thank you," I said, retreating.
+     "If  you'll  have the patience, I would like to ask you to
+join me for breakfast and a cup of cream."
+     "Unfortunately, I will have to be going," I  said,  bowing
+out.
+     As  to newspapers, there were six. Two local, illustrated,
+fat as almanacs; one from the capital; two luxurious  weeklies;
+and,  for some reason, the Arab <i>El Gunia</i>. The last I put
+aside, and sifted through the  others,  accompanying  the  news
+with sandwiches and hot cocoa.
+     In  Bolivia,  government  troops, after stubborn fighting,
+had occupied the town of Reyes. The rebels were  pushed  across
+the  River  Beni.  In  Moscow,  at the international meeting of
+nuclear physicists, Haggerton and Soloviev announced a  project
+for  a  commercial  installation  to  produce  anti-matter. The
+Tretiakoff  Gallery  had  arrived  in  Leopoldville,   official
+opening  being  scheduled for tomorrow. The scheduled series of
+pilotless craft had been launched from the Staryi  Vostok  base
+on Pluto into the totally free flight zone; communications with
+two  of  the  craft  were  temporarily  disrupted.  The General
+Secretary of  the  UN  had  directed  an  official  message  to
+Orolianos, in which he warned that in the event of a repetition
+of  the  use  of  atomic  grenades by the extremists, UN police
+forces would be introduced into Eldorado. In Central Angola, at
+the sources of the River Kwando, an  archaeological  expedition
+of the Academy of Sciences of the UAR had uncovered the remains
+of a cyclopean construction, apparently dating from well before
+the  ice  age.  A group of specialists of the United Center for
+the Investigation of Subelectronic (Ritrinitive) Structures had
+evaluated  the  energy  reserves  available   to   mankind   as
+sufficient for three billion years. The cosmic branch of Unesco
+had   announced   that   the   relative  population  growth  of
+extraterrestrial  centers  and   bases   now   approached   the
+population  growth on Earth. The head of the British delegation
+to the UN had put forth a proposal, in the name  of  the  great
+powers, for the total demilitarization, by force if need be, of
+the remaining militarized regions on the globe.
+     Information  about how many kilos were pressed by whom and
+about who drove how many balls through whose goal posts  I  did
+not bother to read. Of the local announcements, I was intrigued
+by three. The local paper, Joy of Life, reported: "Last night a
+group of evil-minded men again carried out a private plane raid
+on  Star  Square,  which  was  full  of  citizens  taking their
+leisure. The hooligans fired  several  machine-gun  bursts  and
+dropped  eleven  gas  bombs.  As a result of the ensuing panic,
+several men and women  suffered  severe  injuries.  The  normal
+recreation of hundreds of respectable people was disrupted by a
+small group of bandit (excuse the term) intelligentsia with the
+obvious  connivance of the police. The president of the Society
+for the Good Old Country Against Evil Influences  informed  our
+correspondent  that  the  Society intended to take into its own
+hands the matter of the protection of the well-earned  rest  of
+fellow  citizens.  In no equivocal manner, the president let it
+be known whom specifically the people regarded as the source of
+the   harmful    infection,    banditism,    and    militarized
+hooliganism..."
+     On  page  twelve, the paper devoted a column to an article
+by "the outstanding proponent of  the  latest  philosophy,  the
+laureate  of  many  literary prizes, Doctor Opir." The treatise
+was titled "World Without Worry." With beautiful words and most
+convincingly indeed, Doctor Opir established the omnipotence of
+science, called  for  optimism,  derided  gloomy  skeptics  and
+denigrators, and invited all "to be as children." He assigned a
+specially  important  role  in  the  formation  of contemporary
+(i.e.,    anxiety-free)    psychology    to    electric    wave
+psychotechnics. "Recollect what a wonderful charge of vigor and
+good feeling is imparted by a bright, happy, and joyful dream!"
+exclaimed  this representative of the latest philosophy. "It is
+no wonder that sleep has been known for over a hundred years to
+be a curative agent for many psychic disturbances. But  we  are
+all  a touch ill: we are sick with our worries, we are overcome
+by the trivia of daily routine, we are irritated  by  the  rare
+but  still remaining few malfunctions, the inevitable frictions
+among individuals, the normal healthy  sexual  unsatisfiedness,
+the  dissatisfaction with self which is so common in the makeup
+of each person. ... As fragrant bath salts wash away  the  dust
+of  travel  from  our tired bodies, so does a joyful dream wash
+away and purify a tired psyche. So now, we no  longer  have  to
+fear  any  anxieties  or malfunctions. We well know that at the
+appointed hour, the invisible radiation of the dream generator,
+which together with the public I tend to call by  the  familiar
+name of 'the shivers,' will heal us, fill us with optimism, and
+return  to us the wonderful feeling of the joy of being alive."
+Further, Doctor Opir expounded that the shivers were absolutely
+harmless physically and psychologically, and that  the  attacks
+of detractors who wished to see in the shivers a resemblance to
+narcotics and who demagogically ranted about a "doped mankind,"
+could  not  but  arouse  in  us a painful incomprehension, and,
+conceivably, some stronger public-spirited emotions that  could
+be   dangerous   to  the  malevolently  inclined  citizens.  In
+conclusion, Doctor Opir pronounced a happy dream to be the best
+kind of rest, vaguely hinted that the shivers  constituted  the
+best antidote to alcoholism and drug addiction, and insistently
+warned  that the shivers should not be confused with other (not
+medically approved) methods of electric wave application.
+     The weekly Golden Days informed the public that a valuable
+canvas, ascribed in the opinion of experts to the  gifted  band
+of  Raphael,  had  been stolen from the National Art Galleries.
+The weekly called the attention of the authorities to the  fact
+that  this  criminal  act  was  the  third during the past four
+months of this year, and that neither of the previously  stolen
+works of art had ever been found.
+     All  in  all,  there  was  really  nothing  to read in the
+weeklies. I glanced through them quickly, and they left me with
+the most depressing impression.
+     All  were  filled  with   desolate   witticisms,   artless
+caricatures,  among  which  the  "captionless" series stood out
+with   particular   imbecility,   with   biographies   of   dim
+personalities, slobbering sketches of life in various layers of
+society, nightmarish series of photos with such titles as "Your
+husband  at work and at home," endless amounts of useful advice
+on how to occupy your time without, God forbid, burdening  your
+head,   passionately   idiotic   sallies   against  alcoholism,
+hooliganism, and  debauchery,  and  calls  to  join  clubs  and
+choruses  with  which  I  was already familiar. There were also
+memoirs of participants in the "fracas"  and  in  the  struggle
+against  organized  crime, which were served up in the literary
+style of jackasses totally  lacking  in  taste  or  conscience.
+These   were   obviously   exercises  of  addicts  of  literary
+sensationalism, loaded with suffering  and  tears,  magnificent
+feats  and  saccharine  futures. There were endless crosswords,
+chainwords, rebuses, and puzzle pictures.
+     I flung the pile of papers into the corner. What a  dreary
+place  they  had  here!  The  boob  was  coddled,  the boob was
+lovingly nurtured, and the boob was cultivated;  the  boob  had
+become  the  norm; a little more and he would become the ideal,
+while jubilant doctors of  philosophy  would  exultantly  dance
+attendance  upon him. But the papers were in full choreographic
+swing even now. Oh, what a wonderful  boob  we  have!  Such  an
+optimistic  boob,  and such an intelligent boob, such a healthy
+alert boob, and with such a fine sense of humor; and  oh  boob,
+how well and adroitly you can solve crossword puzzles! But most
+important  of  all,  boob,  don't  you  worry  about  a  thing,
+everything is  quite  all  right,  everything  is  just  dandy,
+everything  is in your service, the science and the literature,
+just so you can be amused and  don't  have  to  think  about  a
+thing....  As  for those seditious skeptics and hoodlums, boob,
+we'll take care of them! With your help, we can't help but take
+care of them! What are they complaining about, anyway? Do  they
+have more needs than other people?
+     Dreariness and desolation! There had to be some curse upon
+these   people,   some   awful  predilection  for  dangers  and
+disasters. Imperialism, fascism, tens  of  millions  of  people
+killed  and  lives  destroyed, including millions of these same
+boobs, guilty and innocent, good and bad. The last  skirmishes,
+the  last  putsches,  especially pitiless because they were the
+last. Criminals,  the  military  driven  berserk  by  prolonged
+uselessness,  all kinds of leftover trash from intelligence and
+counterintelligence,  bored  by  the  sameness  of   commercial
+espionage,  all  slavering  for  power. Again we were forced to
+return  from  space,  to  come  out  of  our  laboratories  and
+factories,  to call back our soldiers. And we managed it again.
+The zephyr was  gently  turning  the  pages  of  <i>History  of
+Fascism</i> by my feet. But hardly had we had the time to savor
+the  cloudless  horizons,  when  out  of  these  same sewers of
+history crept the scum with submachine guns,  homemade  quantum
+pistols, gangsters, syndicates, gangster corporations, gangster
+empires.  "Minor  malfunctions  are  still encountered here and
+there," soothed and calmed Doctor Opir,  while  napalm  bottles
+flew through university windows, cities were seized by bands of
+outlaws,   and  museums  burned  like  candles....  All  right.
+Brushing aside Doctor Opir and his kind, once again we came out
+of space, out of the labs and factories, recalled the soldiers,
+and once again managed the problem. And again  the  skies  were
+clear. Once more the Opirs were out, the weeklies were purring,
+and once more filth was flowing out of the same sewers. Tons of
+heroin,  cisterns  of  opium, and oceans of alcohol, and beyond
+all that something new, something for which we had no  name....
+Again  everything  was  hanging by a thread for them, and boobs
+were solving crosswords, dancing the fling, and desired but one
+thing: to have fun. But somewhere  idiot  children  were  being
+born,  people  were  going insane, some were dying strangely in
+bathtubs, some were dying no less  strangely  with  some  group
+called  the  Fishers,  while art patrons defended their passion
+for art with brass knuckles. And the weeklies  were  attempting
+to  cover  this  foul-smelling  bog  with a crust, fragile as a
+meringue,  of  cloyingly  sweet  prattle,  and  this  or   that
+diplomaed  fool glorified sweet dreams, and thousands of idiots
+surrendered with relish to dreams in lieu  of  drunkenness  (so
+that they need not think)... and again the boobs were persuaded
+that  all  was  well,  that  space  was  being  developed at an
+unprecedented pace (which was true), and that sources of energy
+would last for billions of years (which was  also  true),  that
+life  was  becoming  unquestionably more interesting and varied
+(which was also undoubtedly true, but  not  for  boobs),  while
+demagogue-denigrators (real-thinking men who considered that in
+our times any drop of pus could infect the whole of mankind, as
+once upon a time a beer putsch turned into a world menace) were
+foreign  to  the  people's  interests and deserved of universal
+condemnation. Boobs and criminals, criminals and boobs.
+     "Have to  work  at  it,"  I  said  aloud.  "To  hell  with
+melancholy! We'd show you skeptics!"
+     It  was  time  to  go see Rimeyer. Although there were the
+Fishers. But all right, the Fishers could be attended to later.
+I was tired of poking around in the dark. I  went  out  in  the
+yard. I could hear Aunt Vaina feeding Len.
+     "But, Mom, I don't want any!"
+     "Eat, son, you must eat. You are so pale."
+     "I don't want to. Disgusting lumps l"
+     "What lumps? Here, let me have some myself! Mm! Delicious!
+Just try some and you'll see it's very tasty."
+     "But I don't want any! I'm ill, I'm not going to school."
+     "Len, what are you saying? You've skipped a lot of days as
+it is."
+     "So what?"
+     "What  do  you  mean,  so  what?  The director has already
+called me twice. We'll be fined."
+     "Let them fine us!"
+     "Eat, son, eat. Maybe you didn't get enough sleep?"
+     "I didn't. And my stomach hurts... and my head...  and  my
+tooth, this one here, you see?"
+     Len's  voice sounded peevish, and I immediately visualized
+his pouting lips and his swinging stockinged foot.
+     I went out the gate. The day was again  clear  and  sunny,
+full of bird twitter. It was still too early, so that on my way
+to  the Olympic, I met only two people. They walked together by
+the curb, monstrously out of place in the joyful world of green
+branch and clear blue sky. One was painted  vermilion  and  the
+other  bright  blue.  Sweat  beaded  through the paint on their
+bodies. Their  breaths  heaved  through  open  mouths  and  the
+protruding  eyes were bloodshot. Unconsciously I unbuttoned all
+the buttons of my shirt and  breathed  with  relief  when  this
+strange pair passed me.
+     At  the hotel I went right up to the ninth floor. I was in
+a very determined mood. Whether Rimeyer wanted to  or  not,  he
+would  have to tell me everything I wanted to know. As a matter
+of fact, I needed him now for other things as well. I needed  a
+listener,  and in this sunny bedlam I could talk openly only to
+him, so far. True, this was not the Rimeyer I had  counted  on,
+but this too had to be talked cut in the end....
+     The red-headed Oscar stood by the door to Rimeyer's suite,
+and, seeing  him,  I slowed my steps. He was adjusting his tie,
+gazing pensively at the ceiling. He looked worried.
+     "Greetings," I said -- I had to start somehow.
+     He wiggled his eyebrows and looked  me  over,  and  I  was
+aware that he remembered me. He said slowly, "How do you do."
+     "You want to see Rimeyer, too?" l asked.
+     "Rimeyer  is  not feeling well," he said. He stood hard by
+the door and apparently had no intention of letting me by.
+     "A pity," I said, moving up  on  him.  "And  what  is  his
+problem?"
+     "He is feeling very bad."
+     "Oh, oh!" I said. "Someone should have a look."
+     I  was  now  right up against Oscar. It was obvious he was
+not about to give way. My shoulder responded  at  once  with  a
+flare of pain.
+     "I am not sure it's all that necessary," he said.
+     "What do you mean? Is it really that bad?"
+     "Exactly.  Very  bad.  And  you  shouldn't bother him. Not
+today, or any other day!"
+     It seems I arrived in time, I thought, and  hopefully  not
+too late.
+     "Are you a relative of his?" I asked. My attitude was most
+peaceable.
+     He grinned.
+     "I  am  his  friend.  His  closest  friend in this town. A
+childhood friend, you might say."
+     'This is most touching," I said. "But I am  his  relative.
+Same as a brother. Let's go in together and see what his friend
+and brother can do for poor Rimeyer."
+     "Maybe his brother has already done enough for Rimeyer."
+     "Really now... I only arrived yesterday."
+     "You  wouldn't,  by any chance, have other brothers around
+here?"
+     "I don't think there are any among your friends, with  the
+exception of Rimeyer."
+     While  we  were  carrying  on  with  this  nonsense, I was
+studying him most carefully. He didn't look too nimble  a  type
+-- even  considering  my  defective  shoulder.  But he kept his
+hands in his pockets all the time, and although I didn't  think
+he  would  risk  shooting  in the hotel, I was not of a mind to
+chance it. Especially as I had  heard  of  quantum  dischargers
+with limited range.
+     I  have been told critically many times that my intentions
+are  always  clearly  readable  on  my  face.  And  Oscar   was
+apparently  an  adequately  keen  observer. I was coming to the
+conclusion that he obviously did not  have  anything  there  at
+all,  that  the  hands-in-the-pocket  act was a bluff. He moved
+aside and said, "Go on in."
+     We entered. Rimeyer was indeed in a bad way. He lay on the
+couch covered with a torn  drape,  mumbling  in  delirium.  The
+table was overturned, a broken bottle stained the middle of the
+floor,  and  wet  clothes  were  strewn  all  over  the room. I
+approached Rimeyer and sat down by him so as not to lose  sight
+of  Oscar,  who  stood by the window, half-sitting on the sill.
+Rimeyer's eyes were open. I bent over him.
+     "Rimeyer," I called. "It's Ivan. Do you recognize me?"
+     He regarded me dully. There was a fresh cut  on  his  chin
+under the stubble.
+     "So  you got there already..." he muttered. "Don't prolong
+the Fishers... doesn't happen... don't  take  it  so  hard  ...
+bothered me a lot... I can't stand..."
+     It  was pure delirium. I looked at Oscar. He listened with
+interest, his neck stretched out.
+     "Bad when you wake up..." mumbled Rimeyer. "Nobody... wake
+up... they start... then they don't wake up..."
+     I disliked Oscar more and more.  I  was  annoyed  that  he
+should  be  hearing  Rimeyer's ravings. I didn't like his being
+here ahead of  me.  And  again,  I  didn't  like  that  cut  on
+Rimeyer's  chin -- it was quite fresh. How can I be rid of you,
+red-haired mug, I wondered.
+     "We should call a doctor," I said. "Why didn't you call  a
+doctor, Oscar? I think it's delirium tremens."
+     I  regretted  the  words  immediately.  To my considerable
+surprise, Rimeyer did not smell of alcohol at  all,  and  Oscar
+apparently knew it. He grinned and said, "Delirium tremens? Are
+you sure?"
+     "We  have  to call a doctor at once," I said. "Also, get a
+nurse."
+     I put my hand on the phone. He jumped up instantly and put
+his hand on mine.
+     "Why should you do it?" he said. "Better  let  me  call  a
+doctor. You are new here and I know an excellent doctor."
+     "Well,  what kind of a doctor is he?" I objected, studying
+the cut on his knuckles -- which was also quite new.
+     "An exemplary doctor. Just happens to be a  specialist  on
+the DT's."
+     Rimeyer   said   suddenly,   "So  I  commanded...  <i>also
+spracht</i> Rimeyer... alone with the world..."
+     We turned to look at him. He spoke haughtily, but his eyes
+were closed, and his face, draped in loose, gray  skin,  seemed
+pathetic.  That  swine  Oscar, I thought, where does he get the
+gall to linger here? A sudden wild thought flashed  through  my
+head -- it seemed at that moment exceedingly well conceived: to
+disable  Oscar with a blow to the solar plexus, tie him up, and
+force him then and there  to  expose  everything  he  knew.  He
+probably  knew  quite  a lot. Possibly everything. He looked at
+me, and in his pale eyes was a blend of fear and hatred.
+     "All right," I said. "Let the hotel call the doctor."
+     He removed his hand and I called  service.  While  waiting
+for  the doctor, I sat by Rimeyer, and Oscar walked from corner
+to corner, stepping over the liquor puddle. I followed him  out
+of  the  corner  of  my  eye. Suddenly he stooped and picked up
+something off the floor. Something small and multicolored.
+     "What have you got there?" I inquired indifferently.
+     He hesitated a bit and then threw a small flat box with  a
+polychrome sticker on my knees.
+     "Ah!" I said, and looked at Oscar. "Devon."
+     "Devon," he responded. "Strange that it's here rather than
+in the bathroom."
+     The  devil,  I  thought.  Maybe  I  was still too green to
+challenge him openly. I still knew  but  very  little  of  this
+whole mess.
+     "Nothing strange about that," I said at random. "I believe
+you distribute  that  repellent.  It's  probably a sample which
+fell out of your pocket."
+     "Out of my pocket?" He was astonished. "Oh, you think that
+I... But I finished my assignments a long time ago, and now I'm
+just taking it easy. But if you're interested, I can be of some
+help."
+     That s very interesting, I said. "I will consult --"
+     Unfortunately, the door flew open at  this  point,  and  a
+doctor accompanied by two nurses entered the room.
+     The  doctor  turned  out  to  be a decisive individual. He
+gestured me off the couch and flung the drape off  Rimeyer.  He
+was completely naked.
+     "Well, of course," said the doctor. "Again..."
+     He raised Rimeyer's eyelid, pulled down his lower lip, and
+felt his  pulse.  "Nurse - cordeine! And call some chambermaids
+and have them clean out these  stables  till  they  shine."  He
+stood up and looked at me. "A relative?"
+     "Yes," I said, while Oscar kept still.
+     "You found him unconscious?"
+     "He was delirious," said Oscar.
+     "You carried him out here?"
+     Oscar hesitated.
+     "I  only  covered  him  with  the drape," he said. "When I
+arrived, he was lying as he is now. I was afraid he would catch
+cold."
+     The doctor regarded him for a while, and  then  said,  "In
+any  case,  it  is immaterial. Both of you can go. A nurse will
+stay with him. You can call this evening. Goodbye."
+     "What is the matter with him, Doctor?" I asked.
+     "Nothing special. Overtired, nervous exhaustion... besides
+which he apparently smokes too much. Tomorrow he can be  moved,
+and  you  can take him home with you. It would be unhealthy for
+him to stay here with us. There are too many  amusements  here.
+Goodbye."
+     We went out into the corridor.
+     "Let's go have a drink," I said.
+     "You forgot that I don't drink," corrected Oscar.
+     "Too  bad.  This  whole  episode  has upset me. I'd like a
+snort. Rimeyer always was such a healthy specimen."
+     "Well, lately he has slipped a lot," said Oscar carefully.
+     "Yes, I hardly recognized him when I saw him yesterday."
+     "Same here," said Oscar. He didn't believe a word  of  it,
+and neither did I.
+     "Where are you staying?" I asked.
+     "Right  here,"  said  Oscar.  "On  the floor below, number
+817."
+     "Too bad that you don't drink. We could go  to  your  room
+and have a good talk."
+     "Yes,  that wouldn't be a bad idea. But, regretfully, I am
+in a great rush." He was  silent  awhile.  "Let  me  have  your
+address. Tomorrow morning, I'll be back and drop in to see you.
+About ten -- will that suit you? Or you can ring me up."
+     "Why  not?"  I said and gave him my address. "To be honest
+with you, I am quite interested in Devon."
+     "I think we'll be able to come to an understanding,"  said
+Oscar. "Till tomorrow!"
+     He  ran  down  the  stairs.  Apparently he really was in a
+hurry. I went down in the elevator and sent off a  telegram  to
+Matia: "Brother very ill, feeling very lonesome, but keeping up
+spirits,  Ivan."  I truly did feel very much alone. Rimeyer was
+out of the game again, at least for a day. The only hint he had
+given me was the advice about the Fishers. I had  nothing  more
+definite. There were the Fishers, who were located somewhere in
+the  old  subway; there was Devon, which in same peripheral way
+could have something to do with my  business,  but  also  could
+just  as  well  have  no  connection  with it at all; there was
+Oscar, clearly connected  with  Devon  and  Rimeyer,  a  player
+sufficiently ominous and repulsive, but undoubtedly only one of
+many  such  unpleasant  types  on the local cloudless horizons;
+then again there was a certain "Buba," who  supplied  pore-nose
+with  Devon....  After  all,  I have been here just twenty-four
+hours, I thought. There is time. Also, I could still  count  on
+Rimeyer in the final analysis, and there was the possibility of
+finding  Peck.  Suddenly  I  remembered the events of the night
+before and sent a wire to  Sigmund:  "Amateur  concert  on  the
+twenty-eighth,  details  unknown,  Ivan."  Then I beckoned to a
+porter and inquired as to the shortest way to the old subway.
+
+<ul><a name=9></a><h2>Chapter NINE</h2></ul>
+
+     "You would do better to come  at  night.  It's  too  early
+now."
+     "I prefer now."
+     "Can't wait, eh? Perhaps you've got the wrong address?"
+     "Oh no, I haven't got it wrong."
+     "You must have it now, you are sure?"
+     "Yes, now and not later."
+     He clicked his tongue and pulled on his lower lip. He was
+     short,  well  knit,  with  a  round  shaved head. He spoke
+hardly moving his tongue and rolling his eyes  languidly  under
+the lids. I thought he had not had enough sleep. His companion,
+sitting  behind  the  railing in an easy chair, apparently also
+had missed some. But he did not utter a word  and  didn't  even
+look in my direction. It was a gloomy place, with stale air and
+warped  panels  which  had  sprung away from the walls. A bulb,
+dimmed with dust, hung shadeless from the ceiling  on  a  dirty
+cable.
+     "Why not come later?" said the round-head. "When everybody
+comes."
+     "I just got the urge," I said diffidently.
+     "Got  the  urge..."  He  searched  in his table drawer. "I
+don't even have a form left. Eli, do you have some?"
+     The latter, without breaking his silence,  bent  over  and
+pulled  out  a  crumpled sheet of paper from somewhere near the
+railing.
+     The round-head said, yawning, "Guys that come at break  of
+day...  nobody  here...  no  girls... they're still in bed." He
+proffered the form. "Fill it out and sign. Eli and I will  sign
+as  witnesses.  Turn  in  your  money.  Don't worry, we keep it
+honest. Do you have any documents?"
+     "None."
+     "That's good, too."
+     I scanned the form. "In open deposition and of my own
+     free  will,  I,  the  undersigned,  in  the  presence   of
+witnesses,  earnestly request to be subjected to the initiation
+trials toward the mutual quest of membership in the Society  of
+VAL."  There  were  blank spaces for signature of applicant and
+signatures of witnesses.
+     "What is VAL?" I asked.
+     "That's the way we are registered,"  answered  round-head.
+He was counting my money.
+     "But how do you decipher it?"
+     "Who  knows? That was before my time. It's VAL, that's all
+there is to it. Maybe  you  know,  Eli?"  Eli  shook  his  bead
+lazily. "Well, really, what do you care?"
+     "You are absolutely right." I inserted my name and signed.
+     Round-head  looked it over, signed it, and passed the form
+to Eli.
+     "You look like a foreigner," he said.
+     "Right."
+     "In  that  case,  add  your  home  address.  Do  you  have
+relatives?"
+     "No."
+     "Well then, you don't have to. All set, Eli? Put it in the
+folder. Shall we go?"
+     He lifted up the gate in the railway and walked me over to
+a massive  square  door,  probably left over from the days when
+the subway had been fitted out as an atomic shelter.
+     "There is no choice," he said as though  in  self-defense.
+He   pulled   the   slides  and  turned  a  rusty  handle  with
+considerable effort. "Go straight down the  corridor  and  then
+you'll see for yourself."
+     I thought that I heard Eli snickering behind him. I turned
+around.  A  small  screen was fitted in the railing in front of
+Eli. Something was moving on the screen, but I  could  not  see
+what  it  was.  Round-bead put all his weight on the handle and
+swung back the door. A dusty passage became visible. For a  few
+seconds   he  listened  and  then  said,  "Straight  down  this
+corridor."
+     "What will I find there?" I said.
+     "You'll get what you were looking for. Or have you changed
+your mind?"
+     All of which was clearly not what I was looking  for,  but
+as  is  well known, nobody knows anything until he has tried it
+himself I stepped over the high sill and the door  shut  behind
+me with a clang. I could hear the latches screeching home.
+     The  corridor  was  lit  by  a few surviving lamps. It was
+damp, and mold grew an the cement walls. I stood still  awhile,
+listening, but there was nothing to be heard but the infrequent
+tap  of  water drops. I moved forward cautiously. Cement rubble
+crunched underfoot. Soon the corridor came to  an  end,  and  I
+found  myself in a vaulted, poorly lit concrete tunnel. When my
+eyes accommodated to the darkness, I discerned a set of tracks.
+The rails were badly rusted and puddles of dark  water  gleamed
+motionless  along  their  length.  Sagging cables hung from the
+ceiling. The dampness seeped to  the  marrow  of  my  bones.  A
+repulsive  stench  of sewer and carrion filled my nostrils. No,
+this was not what I was looking for. I was not  of  a  mind  to
+fritter away my time and thought of going back and telling them
+that  I would be back some other time. But first, simply out of
+curiosity, I decided to take a short walk along the  tunnel.  I
+went  to  the right toward the light of distant bulbs. I jumped
+puddles, stumbled over the rotting ties, and got  entangled  in
+loose wires. Reaching a lamp, I stopped again.
+     The  rails  had  been  removed. Ties were strewn along the
+walls, and holes filled with water gaped  along  the  right  of
+way.  Then  I  saw the rails. I have never seen rails in such a
+condition.  Some  were  twisted  into  corkscrews.  They   were
+polished  to  a  high  shine  and reminded me of gigantic drill
+bits. Others were driven with titanic force into the floor  and
+walls  of  the  tunnel.  A third group were tied into knots. My
+skin crawled at this sight. Some were simple knots, some with a
+single bow, some with a double bow like  shoelaces.  They  were
+mauve and brown.
+     I looked ahead into the depths of the tunnel. The smell of
+rotting  carrion  wafted  out  of it, and the dim yellow lights
+winked rhythmically as though something swayed  in  the  draft,
+covering  and uncovering them periodically. My nerves gave way.
+I felt that this was nothing more than a  stupid  joke,  but  I
+couldn't  control  myself. I squatted down and looked around. I
+soon found what I was looking  for  --  a  yard-long  piece  of
+reinforcing  rod.  I  stuck it under my arm and went ahead. The
+iron was wet and cold and rough with rust.
+     The reflection of the winking lights glinted  on  slippery
+wet   walls.   I   had   noticed  some  time  back  the  round,
+strange-looking marks on them, but at first did  not  pay  them
+any  attention. Then I became interested and examined them more
+closely. As far as the eye could reach, there were two sets  of
+round  prints on the walls at one-meter intervals. It looked as
+though an elephant had run along the wall -- and not  too  long
+ago at that. On the edge of one of the prints, the remains of a
+crushed  centipede  still  struggled feebly. Enough, I thought,
+time to go back. I looked along the tunnel. Now I could plainly
+see the swaying curves of black cables under the lamps. I  took
+a  better  grip on the rod and went ahead, holding close to the
+wall.
+     The whole thing was getting  through  to  me.  The  cables
+sagged under the arch of the tunnel, and on them, tied by their
+tails  into  hairy clusters, hung hundreds upon hundred of dead
+rats, swaying in the draft. Tiny teeth glinted horribly in  the
+semi-dark,  and  rigid little legs stuck out in all directions.
+The clusters  stretched  in  long  obscene  garlands  into  the
+distance.  A thick, nauseating stench oozed from under the arch
+and flowed along the tunnel, as palpable as glutinous jelly.
+     There was a piercing  screech  and  a  huge  rat  scurried
+between  my  feet.  And  then another and another. I backed up.
+They were fleeing from there, from the dark where there was not
+a single lamp. Suddenly, warm air came pulsing  from  the  same
+direction.  I  felt  a  hollow  space with my elbow and pressed
+myself into the niche. Something  live  squirmed  and  squeaked
+under  my  heel;  I swung my iron rod without looking. I had no
+time for rats, because I could hear something  running  heavily
+but softly along the tunnel, splashing in the puddles. It was a
+mistake  to  get involved in this business, thought I. The iron
+rod seemed very light and insignificant in comparison with  the
+bow-tied  rails.  This was no flying leech, nor a dinosaur from
+the Kongo... don't let  it  be  a  giganto-pithek,  I  thought,
+anything but a giganto-pithek. These donkeys would have the wit
+to  catch  one  and  let it loose in the tunnel. I was thinking
+very poorly in those few seconds. And suddenly for no reason at
+all I thought of Rimeyer. Why had he sent me here? Had he  gone
+out of his mind? If only it was not a giganto-pithek!
+     It  raced  by  me  so fast that I couldn't discern what it
+was.
+     The tunnel boomed from its  gallop.  Then  there  was  the
+despairing  scream  of  a  caught  rat  right  close  by and...
+silence. Cautiously I peeked out. He stood about ten paces away
+directly under one of the lamps, and my legs suddenly went limp
+from relief.
+     "Smart-alec entrepreneurs," I said aloud,  almost  crying.
+'They would dream up something like this."
+     He  heard my voice and raising his stern legs, pronounced:
+"Our temperature is two meters,  twelve  inches,  there  is  no
+humidity, and what there isn't is not there."
+     "Repeat your orders," I said, approaching him.
+     He  let  the  air  out  of  his  suction  cups with a loud
+whistle, twitched his  legs  mindlessly,  and  ran  up  on  the
+ceiling.
+     "Come down," I said sternly, "and answer my question."
+     He  hung  over  my  head,  this  poor long-obsolete cyber,
+intended for work an the asteroids, pitiable and out of  place,
+covered with flakes of corrosion and blobs of black underground
+dirt.
+     "Get down," I barked.
+     He flung the dead rat at me and sped off into the dark.
+     "Basalts!   Granites!"  he  yelled  in  different  voices.
+"Pseudo-metamorphic types! I am over Berlin! Do you copy!  Time
+to get to bed!"
+     I  threw  away  the rod and followed him. He ran as far as
+the next lamp,  came  down,  and  began  to  dig  the  concrete
+rapidly,  like  a  dog,  with his heavy work manipulators. Poor
+chap, even in better times his brain was capable of  performing
+properly only in less than one one-hundredth of a G, and now he
+was  altogether  out  of his mind. I bent over him and began to
+search for the control center under his armor. "The rotters," I
+said aloud. The controls were peened over  as  though  battered
+with a sledge. He stopped digging and grabbed me by the leg.
+     "Stop!" I shouted. "Desist!"
+     He  desisted,  lay  down on his side, and informed me in a
+basso voice, "I am deathly tired of him, Eli. Now would be  the
+time for a shot of brandy."
+     Contacts  clicked  inside  him  and  music  poured  forth.
+Hissing and whistling, he gave a  rendition  of  the  "Hunters'
+March."  I  was  looking  at  him  and  thinking how stupid and
+repulsive it all was, how  ridiculous  and  at  the  same  time
+frightening.  If  I  had  not  been  a  spaceman, if I had been
+frightened and run, he would almost certainly have  killed  me.
+But  nobody  here  knew  I  had  been in space. Nobody. Not one
+person. Even Rimeyer didn't know.
+     "Get up," I said.
+     He buzzed and started to dig the wall, and I turned around
+and went back. All  the  time  while  I  was  returning  to  my
+turn-off  I could hear him rattling and clanging in the pile of
+contorted rails, hissing with  the  electrowelder  and  ranting
+nonsense in two voices.
+     The  anti-atomic door was already open, and I stepped over
+the sill, swinging it shut behind me.
+     "Well, how was it?" asked round-head.
+     "Dumb," I replied.
+     "I had no idea you were a spaceman. You have worked out on
+the planets?"
+     "I have. But it's still dumb. For  fools.  For  illiterate
+keyed-up boobs."
+     "What kind?"
+     "Keyed-up."
+     "Well  --  there you got it wrong. Lots of people like it.
+Anyway, I told you  to  come  at  night.  We  don't  have  much
+amusement  for  singles." He poured some whiskey and added some
+soda from the siphon. "Would you like some?"
+     I took the glass and leaned on the railing.  Eli  gloomily
+regarded  the  screen,  a cigarette sticking to his lip. On the
+screen careened shifting views of the glistening tunnel  walls,
+twisted  rails,  black  puddles,  and  flying  sparks  from the
+welder.
+     'That's  not  for  me,"  I  announced.  "Let  barbers  and
+accountants  enjoy  it. Of course, I have nothing against them,
+but what I need is something the likes of which I have not seen
+in my entire life."
+     "So  you  don't  know  yourself  what  you   want,"   said
+roundhead. "It's a hard case. Excuse me, you aren't an Intel?"
+     "Why?"
+     "Well,  don't  take offense -- we are all equal before the
+grim reaper, you understand. What am  I  trying  to  say?  That
+Intels  are  the most difficult clients, that's all. Isn't that
+right, Eli? If one of your barbers or bookkeepers  comes  here,
+he  knows  very  well  what it is he needs. He needs to get his
+blood going, to show off and be proud of himself,  to  get  the
+girls  squealing,  and exhibit the punctures in his side. These
+fellows are simple, each one wants to consider himself  a  man.
+After  all,  who  is  he  --  our  client? He has no particular
+capabilities, and he doesn't need any. In earlier times, I read
+in a book, people used to be  envious  of  each  other  --  the
+neighbor  is  rolling  in  luxury  and  I  can't  save up for a
+refrigerator -- how could you put up with that?  They  hung  on
+like bulldogs to all kinds of trash, to money, to cushy jobs --
+they  laid  down  their  lives  for such things. The guy with a
+foxier head or a stronger fist would wind up on  top.  But  now
+life  has  become  affluent  and  dull and there is a plenty of
+everything. What shall a man apply himself to? A man is  not  a
+fish, for all that, he is still a man and gets bored, but can't
+dream  up  something  to  do  for  himself. To do that you need
+special talents, you need to read a mountain of books, and  how
+can  he  do  that  when  they  make  him  throw  up.  To become
+world-famous or to invent some new  machine,  that's  something
+that  wouldn't  pop  into his head, but even if it did, of what
+use would it be? Nobody really needs you,  not  even  your  own
+wife  and  children if you examine it honestly. Right, Eli? And
+you don't need  anybody  either.  Nowadays,  it  seems,  clever
+people  think  things  up  for  you,  something  new like these
+aerosols, or the shivers, or a new dance.  There  is  that  new
+drink -- it's called a polecat. Wanna me knock one together for
+you?  So  he  downs some of this polecat, his eyes crawl out of
+their sockets, and he's happy. But as long as his eyes  are  in
+their sockets, life is just as dull as rainwater for him. There
+is an Intel that comes here to us, and every time he complains:
+Life,  he  says,  is dull, my friends... but I leave here a new
+man; after, say, 'bullets' or 'twelve to one,' I see myself  in
+a  completely  new  light. Right, Eli? Everything becomes sweet
+all over again, food, drink, women."
+     "Yes," I said  sympathetically.  "I  understand  you  very
+well. But for me it's all too stale."
+     "Slug is what he needs," said Eli in his bass voice.
+     "What's that again?"
+     "Slug is what I said."
+     Round-head puckered in distaste.
+     "Aw, come on, Eli. What's with you today?"
+     "I  don't  give a hoot for the likes of him," said Eli. "I
+just don't like these guys.  Everything  is  insipid  for  him,
+nothing suits him."
+     "Don't  listen  to him," said round-head. "He hasn't slept
+all night and is very tired."
+     "Well, why not," I contradicted. "I am  quite  interested.
+What is this slug?"
+     Round-head puckered his face again.
+     "It's  not decent, you understand?" he said. "Don't listen
+to Eli, he is a good enough guy,  a  simple  fellow,  but  it's
+nothing  for  him  to  lambaste a man. It's a bad term. Certain
+types have taken to writing it all over the  walls.  Hooligans,
+that's  what  they  are, right? The snot-noses hardly know what
+it's about, but they write anyway. See how we had to plane  off
+the railing? Some son of a bitch carved into it, and if I catch
+him,  I'll  turn  his  hide inside out. We do have women coming
+here too."
+     "Tell  him,"  pronounced  Eli,   addressing   himself   to
+roundhead,  "that  he should get hold of a slug and quiet down.
+Let him find Buba..."
+     "Will you shut  up,  Eli?"  said  round-head,  now  angry.
+"Don't pay any attention to him."
+     Having  heard  the  name  Buba, I helped myself to another
+drink and settled more comfortably on the railing.
+     "What's it all about?" I said. "Some kind of secret vice?"
+     "Secret!" boomed Eli, and let out an obscene horselaugh.
+     Round-head laughed, too.
+     "Nothing can be a secret here,"  he  said.  "What  had  of
+secrets can there be when people are living it up at the age of
+fifteen?  The  dopes,  the  Intels, manufacture secrets. They'd
+like to get a fracas going on the twenty-eighth, they  are  all
+in  a  huddle, took some mine launchers out of town recently to
+hide them, like kids, honest to God! Right, Eli?"
+     "Tell him," the good simple  fellow  Eli  was  persisting.
+"Tell  him  to be off to Hell and gone. And don't go protecting
+him. Just tell him to go to Buba at the Oasis and that's that."
+     He threw my wallet and form on the railing. I finished the
+whiskey. Round-head said soberly, "Of course, it's entirely  up
+to  you,  but  my advice is to stay away from that stuff. Maybe
+we'll all come to it someday, but  the  later,  the  better.  I
+can't  even  explain it to you, I only feel that it is like the
+grave: never too late and always too soon."
+     "Thank you," I said.
+     "He even thanks you." Eli let  loose  another  horselaugh.
+"Have you seen anything like it! He thanks you!"
+     "We kept three dollars," said round-head. "You can tear up
+the blank.  Or  let  me tear it up. God forbid something should
+happen to you, the police will come looking to us."
+     "To be honest with you," I said, putting the wallet  away,
+"I  don't  understand  how  they  haven't  closed  your  office
+already."
+     "Everything is on the up and up with us," said round-head.
+"If you don't want any, no one is forcing you. But if something
+should happen, it's your own fault."
+     "No one is forcing the drug addicts either," I retorted.
+     "That's some comparison! Drugs are a profiteering  corrupt
+business!"
+     "Well,  okay,  I'll  be  seeing  you,"  I  said.  "Thanks,
+fellows. Where did you say to look for Buba?"
+     "At the Oasis," boomed Eli. "It's a cafe. Beat it."
+     "What a polite fellow you are, my  friend,"  I  said.  "It
+gets me right in my heart."
+     "Go on, beat it," repeated Eli. "Stinking Intel."
+     "Don't  get  so  excited,  pal,"  I  said, "or you'll earn
+yourself an ulcer. Save your stomach, it's your  most  valuable
+possession."
+     Eli  started  to  move slowly out from behind the railing,
+and I left. My shoulder had started to ache again.
+     A warm, heavy rain was falling outside. The leaves on  the
+trees  shone  wetly  and  joyfully, there was a smell of ozone,
+freshness and thunderstorm. I stopped  a  taxi  and  named  the
+Oasis.  The  street ran with fresh streams, and the city was so
+pretty and comfortable that it seemed improper to think of  the
+moldy and abandoned Subway.
+     The  rain  was  pelting in full swing when I jumped out of
+the car, ran across the sidewalk, and  burst  into  the  Oasis.
+There  were  quite  a  few  people,  most  of them were eating,
+including the bartender, who was spooning some soup  out  of  a
+dish  placed  among  drinking  glasses.  Those who had finished
+eating  sat  smoking  and  abstractedly  staring  out  of   the
+streaming  window  at  the  street.  I  approached  the bar and
+inquired in a low voice whether Buba was there.  The  bartender
+put down his spoon and surveyed the room.
+     "Naah," he said. "Why don't you have something to eat now,
+and he'll be along soon enough."
+     "How soon?"
+     "Twenty minutes, half an hour maybe."
+     "So!"  I  said.  "In  that case I'll have dinner, and then
+I'll come over and you can point him out to me."
+     "Uhuh," said the bartender, returning to his soup.
+     I picked up a tray, collected some sort of a meal, and sat
+down by the window away from the rest of the patrons. I  wanted
+to  think.  I  sensed  that there was enough data to ponder the
+problem effectively. Some sort of pattern seemed to be forming.
+Boxes of Devon in the bathroom. Pore-nose spoke about Buba  and
+Devon  (in  whispers).  Eli  talked of Buba and "slug." A clear
+chain of  links  --  bath,  Devon,  Buba,  slug.  Further:  the
+sunburned  fellow with the muscles cautioned that Devon was the
+worst of junk, while the roundhead saw  no  difference  between
+slug and the grave. It all had to fit together. It seemed to be
+what  we  were  looking  for.  If so, then Rimeyer had done the
+right thing to send me to  the  Fishers.  Rimeyer,  I  said  to
+myself,  why  did you send me to the Fishers? And even order me
+to do as I was told and not to fuss about it?  And  you  didn't
+know,  after  all,  that  I was a spaceman, Rimeyer. If you did
+know, there were still the other games with  bullets  and  "one
+against  twelve," besides the demented cyber. You really took a
+dislike to me for something or other, Rimeyer. Somehow  I  have
+crossed  you. But no, said I, this cannot be. It is simply that
+you did not trust me, Rimeyer.  It  is  simply  that  there  is
+something  that  I  do not know yet. For example, I do net know
+just who this Oscar is who trades in Devon in this resort  city
+and  who  is  connected with you, Rimeyer. Most likely you have
+been meeting with Oscar before our conversation in the elevator
+... I don't want to think about that.
+     There he was lying like a dead man and here I was thinking
+such things  about  him  when  he  could  not  defend  himself.
+Suddenly  I  felt a repulsive cold crawling feeling inside. All
+right, suppose we trapped this gang.  What  would  change?  The
+shivers  would  remain,  lop-eared Len would be up all night as
+before, Vousi would be coming home  disgustingly  drunk,  while
+customs  inspector  Pete would be smashing his face into broken
+glass. And all would  be  concerned  about  the  "good  of  the
+people."  Some  would be irrigated with tear gas, some would be
+driven into the ground  up  to  their  ears,  others  would  be
+converted  from  apehood  into something which passes muster as
+human.... And then the shivers would go out of  style  and  the
+people would be presented with the super-shivers, while in lieu
+of  the  extirpated slug a super-slug would surface. Everything
+would be for the good of the people. Have  fun,  Boobland,  and
+don't think about a thing!
+     Two  men  in  cloaks sat down at the next table with their
+trays. One of them seemed to me in some way familiar. He had  a
+haughty  thoroughbred  face,  and were it not for a thick white
+bandage on the left side  of  his  jaw,  I  was  sure  I  would
+recognize  him.  The other was a ruddy man with a bald pate and
+fussy movements. They were speaking quietly, but not so  as  to
+be  inaudible,  and  I  could  hear them quite well where I was
+sitting.
+     "Understand  me  correctly,"  the  ruddy  one  said   with
+conviction  while  hurriedly consuming his schnitzel, "I am not
+at all against theaters and museums. But the allocation for the
+municipal theater for the  past  year  has  not  been  expended
+fully, while only tourists visit the museums."
+     "Also picture thieves," inserted the man with the bandage.
+     "Drop  that, please, we don't have pictures that are worth
+the theft. Thank God,  they  have  learned  how  to  synthesize
+Sistine  Madonnas out of sawdust. I wish to call your attention
+to the point that dissemination of culture  in  our  time  must
+occur  in  an  entirely  different  manner. Culture must not be
+inculcated into the people, rather it  must  emanate  from  the
+people.  Public chorister, do-it-yourself groups, mass games --
+that is what our public needs."
+     "What our public needs is a good army of occupation," said
+the man with the bandage.
+     "Please stop talking that way,  when  you  actually  don't
+believe  what  you  are  saying.  Our  coverage  by the various
+associations is really  at  an  unacceptably  poor  level.  For
+instance,  Boella complained to me last night that only one man
+attends her readings, and he apparently only  does  so  out  of
+matrimonial intentions. But we need to distract the people from
+the  shivers,  from  alcohol,  from sexual pastimes. We need to
+raise the tone --"
+     The other interrupted, "What do you want from me?  That  I
+should  defend  your  project  against  that ass, our honorable
+mayor, today? Be my guest! It is absolutely all the same to me.
+But if you would like to hear my opinion about tone and spirit,
+let me tell you it does not exist, my dear Senator; it is  long
+dead! It has been smothered in belly fat! And if I were in your
+place I would take that into account and only that!"
+     The  ruddy  man  seemed to be crushed. He was silent for a
+while and then groaned suddenly, "Dear God, dear God, to  think
+of  what  we  have been driven to concern ourselves with! But I
+ask you -- is not someone flying to the stars? Somewhere  meson
+reactors  are  being  built,  new  learning  systems  are being
+devised! Dear God, I just recently grasped that we are not even
+a backwater, we are a preserve! In the eyes of the whole  world
+we  are  a  sanctuary  of stupidity, ignorance, and pornocracy.
+Imagine, Professor Rubenstein has a chair in our city  for  the
+second  year.  A  sociopsychologist  of  world  renown.  He  is
+studying us like animals.  Instinctive  Sociology  of  Decaying
+Economic  Structures  --  that's  the  name  of his work. He is
+interested in people as bearers of primeval instincts,  and  he
+complained  to  me that it was very difficult for him to gather
+data in countries where instinctive activity is  distorted  and
+suppressed by pedagogical systems! But with us he is in seventh
+heaven! In his own words, we don't have any activity other than
+instinctive!  I  was  insulted,  I was ashamed, but, good Lord,
+what could I say to contradict him? You must understand me! You
+are an intelligent man, my friend, I know you are a  cold  man,
+but  I  can't really believe that you are indifferent to such a
+degree."
+     The man with the bandage looked at him haughtily and then,
+abruptly, his cheek twitched. I recognized him at once: he  was
+the character with the monocle who had thrown the luminous slop
+all over me so deftly yesterday at the Art Patrons' hall.
+     Why,  you  vulture,  thought  I. You thief. So you need an
+army of occupation! Spirit smothered in lard indeed!
+     "Forgive me, Senator," he said. "I do understand  it  all,
+and  that's  precisely  why  it  is  perfectly clear to me that
+everything surrounding you is in a state of dementia. The final
+spasm! Euphoria!"
+     I got up and approached their table.
+     "May I join you?" I asked.
+     He stared at me in astonishment. I sat down.
+     "Please excuse me," I said.  "I  am,  to  be  specific,  a
+tourist  and  just  a  short  time  here;  while you seem to be
+natives and even to have some  connection  with  the  municipal
+government.  So  I  decided  to  inflict  myself on you. I keep
+hearing about Art Patrons, Art Patrons. But what it's all about
+no one seems to know."
+     The man with the bandage experienced another  tie  in  his
+cheek. His eyes grew wide -- he too recognized me.
+     "Art  Patrons?"  said the ruddy one. "Yes, there is such a
+barbarous organization with us here. It is very sad  that  such
+is the case, but it's so."
+     I  nodded,  studying  the  bandage.  My  acquaintance  had
+already regained his composure and was eating  his  jelly  with
+his accustomed haughty look.
+     "In  essence  they are simply modern-age vandals. I simply
+couldn't  find  a  more  appropriate  word.  They  pool   their
+resources  and  buy  up stolen paintings, statues, manuscripts,
+unpublished literary works, patents, and destroy them. Can  you
+imagine  how  revolting  that  is?  They  And some pathological
+delight in the destruction of examples of world  culture.  They
+gather in a large, well-dressed crowd and slowly, deliberately,
+orgiastically destroy them!"
+     "Oh  my,  my,  my!"  I  said,  not  taking my eyes off the
+bandage. "Such people should be hung by their legs."
+     "And we are after them," said the ruddy one.  "We  are  in
+pursuit of them on the legal level. We are unfortunately unable
+to  get  after  the  Artiques  and  the  Perchers,  who are not
+breaking any laws, but as far as the Art Patrons are  concerned
+--"
+     "Are  you  finished  yet,  Senator?" inquired the bandaged
+one, ignoring me.
+     The ruddy one caught himself.
+     "Yes, yes. It's time for us to go.  You  will  excuse  us,
+please,"  he  said,  turning  to  me. "We have a meeting of the
+municipal council."
+     "Bartender!" called the bandaged one in a metallic  voice.
+"Would you call us a taxi."
+     "Have you been here long?" asked the ruddy man.
+     "Second day," I replied.
+     "Do you like it?"
+     "A beautiful city."
+     "Mm -- yes," he mumbled.
+     We  were  silent.  The  man  with  the  bandage impudently
+inserted his monocle and pulled out a cigar.
+     "Does it hurt?" I asked sympathetically.
+     "What, exactly?"
+     "The jaw," I said.  "And  the  liver  should  hurt,  too."
+"Nothing ever hurts me," he replied, monocle glinting. "Are you
+two acquainted?" the ruddy one asked in astonishment.
+     "Slightly," I said. "We had an argument about art."
+     The  bartender  called  out that the taxi had arrived. The
+man with the bandage immediately got up.
+     "Let's go, Senator," he said.
+     The ruddy one smiled at me abstractedly and also got up.
+     They set off for the exit. I followed them  with  my  eyes
+and went to the bar.
+     "Brandy?" asked the bartender.
+     "Quite,"  I  said.  I  shuddered with rage. "Who are those
+people I just spoke to?"
+     'The  baldy  is  a  municipal  counselor,  his  field  are
+cultural  affairs.  The  one  with  the  monocle  is  the  city
+comptroller."
+     "Comptroller," I said. "A scoundrel is what he is."
+     "Really?" said the barman with interest.
+     'That's right, really," I said. "Is Buba here?"
+     "Not yet. And how about the comptroller, what is he up
+     to?"
+     "A scoundrel, an embezzler, that's what he is," I said.
+     The bartender thought awhile.
+     "It could well be," he said. "In fact he's a baron -- that
+is, he used to be,  of  course.  His  ways,  sure  enough,  are
+unsavory.  Too  bad  I  didn't  go  vote  or I would have voted
+against him. What's he done to you?"
+     "It's you he's done. And I've given  him  some  back.  And
+I'll give him some more in due time. Such is the situation."
+     The  bartender,  not  understanding  anything,  nodded and
+said, "Hit it again?"
+     "Do," I said.
+     He poured me more brandy and said,
+     "And here is Buba, coming in."
+     I turned around and barely managed to keep the glass in my
+grip. I recognized Buba.
+
+<ul><a name=10></a><h2>Chapter TEN</h2></ul>
+
+     He stood by the door looking about him as though trying to
+remember where he had come and what he was  to  do  there.  His
+appearance was very unlike his old one, but I recognized him at
+once  anyway,  because for four years we sat next to each other
+in the lecture halls of the school, and then there were several
+years when we met almost daily.
+     "Say," I addressed the bartender. "They call him Buba?"
+     "Uhuh," said the bartender.
+     "What is it -- a nickname?"
+     "How should I know? Buba is Buba,  that's  what  they  all
+call him."
+     "Peck," I cried.
+     Everyone  looked  at me. He too slowly turned his head and
+his eyes searched for the caller. But he paid no  attention  to
+me.  As  though  remembering  something, he suddenly started to
+shake the water out of his cape with  convulsive  motions,  and
+then,  dragging  his heels, hobbled over to the bar and climbed
+with difficulty on the stool next to mine.
+     "The usual," he said to the bartender. His voice was  dull
+and strangled, as though someone held him by the throat.
+     "Someone  has  been  waiting  for  you,"  said the barman,
+placing before him a glass of neat  alcohol  and  a  deep  dish
+filled with granulated sugar.
+     Slowly he turned his head and looked at me, saying, "Well,
+what is it you want?"
+     His  drooping  eyelids were inflamed red, with accumulated
+slime in the corners. He breathed through his mouth  as  though
+suffering with adenoids.
+     "Peck  Xenai,"  I said quietly. "Undergraduate Peck Xenai,
+please return from earth to heaven."
+     He continued to regard me without a change in his  manner.
+Then he licked his lips and said, "A classmate, perhaps?"
+     I felt numb and terrified. He turned around, picked up his
+glass,  drank  it  down, gagging in revulsion, and began to eat
+the sugar with a large soup spoon.  The  bartender  poured  him
+another glass.
+     "Peck," I said, "old friend, don't you remember me?"
+     He looked me over again.
+     "I wouldn't say that. I probably did see you somewhere."
+     "Saw  me  somewhere!"  I  said  in desperation. "I am Ivan
+Zhilin. Could it be you have completely forgotten me?"
+     His hand holding the glass quivered almost  imperceptibly,
+and that was all.
+     "No,  friend,"  he  said, "forgive me, please, but I don't
+remember you."
+     "And you don't remember the 'Tahmasib' or Iowa Smith?"
+     "This heartburn has really got to me today,"  he  informed
+the bartender. "Let me have some soda, Con."
+     The bartender, who had listened with curiosity, poured him
+a soda.
+     "Bad  day,  today,  Con,"  he  said. "Can you imagine, two
+automates failed on me today."
+     The bartender shook his head and sighed.
+     "The manager is bitching," continued Buba, "called  me  on
+the  carpet and bawled me out. I am going to quit that place. I
+told him to go to hell and he fired me."
+     "Complain to the union," the bartender advised.
+     "To hell with them." He drank his soda and wiped his mouth
+with the palm of his hand. He did not look at me.
+     I sat as though spat upon, forgetting completely  what  it
+was  I  wanted  Buba for. I needed Buba, not Peck -- that is, I
+needed Peck too. But not this one. This was not Peck, this  was
+some  strange and repulsive Buba, and I watched in horror as he
+sucked up  the  second  glass  of  alcohol  and  again  set  to
+shoveling spoonfuls of sugar into himself. His face effloresced
+with  red  spots,  and  he  kept  gagging  and listening to the
+bartender  as  he  animatedly  recounted  the  latest  football
+exploits. I wanted to cry out, "Peck, what has happened to you?
+Peck, you used to hate all this!" I put my hand on his shoulder
+and said imploringly, "Peck, dear friend, hear me out, please."
+     He shied away.
+     "What's  the matter, friend?" His eyes were now completely
+unseeing. "I am not Peck, I am Buba, do you understand? You are
+confusing me with someone else, there isn't any  Peck  here....
+So what did the Rhinos do then, Con?"
+     I  reminded  myself  where  I  was,  and  forced myself to
+understand that there was no more Peck, and that  there  was  a
+Buba,  here,  an agent of a criminal organization, and this was
+the only reality, while Peck Xenai was a  mirage  --  a  memory
+which must be quickly extirpated if I intended to press on with
+my work.
+     "Hold on, Buba," I said. "I want to talk business to you."
+     He was quite drunk by now.
+     "I  don't  talk  business  at the bar," he announced. "And
+anyway I am through with work. Done. I have no more business of
+any kind. You can apply to the city hall, friend. They'll  help
+you out."
+     "I  am  applying to you, not the city hall," I said. "Will
+you listen to me!"
+     "You I hear all the time, as it is. To the detriment of my
+health."
+     "My business is quite simple," I said. "I need a slug."
+     He shuddered violently.
+     "Are you out of your mind, pal?"
+     "You should be ashamed," said the bartender. "Right out in
+front of people... you have lost all sense of decency."
+     "Shut up," I told him.
+     "You be quiet," the barman said menacingly.  "It  must  be
+some  time  since you've been busted? Watch your step or you'll
+get exported."
+     "I don't give  a  damn  about  the  exportation,"  I  said
+insolently.   "Don't   stick   your  snoot  in  other  people's
+business."
+     "Lousy sluggard," said the bartender.
+     He was visibly incensed, but spoke in a low voice. "A slug
+he wants. I'll call an officer right now and he'll give  you  a
+slug."
+     Buba  slid  off the stool and hurriedly hobbled toward the
+door.
+     I left off with the bartender and hurried  after  him.  He
+shot  out  into  the rain, and forgetting to cover himself with
+his cape, started to look around in search of a taxi. I  caught
+up with him and grasped him by the sleeve.
+     "What  in  God's  name  do  you  want  from  me?"  he said
+miserably. "I'll call the police."
+     "Peck," I said. "Come out of it, Peck. I am  Ivan  Zhilin,
+and you must remember me."
+     He kept looking around and wiping the streaming water from
+his face  with  the palm of his hand. He looked pitiful and run
+down, and I, trying to suppress my irritation,  kept  insisting
+to  myself that this was my Peck, priceless Peck, irreplaceable
+Peck, good, intelligent, joyful Peck, kept trying  to  remember
+him  as he was in front of the Gladiator's control console, and
+I couldn't because I couldn't imagine him  anywhere  except  at
+the bar over a glass of alcohol.
+     "Taxi," he screeched, but the car flew by, full of people.
+     "Peck,"  I  said,  "come  with me. I'll tell you all about
+it."
+     "Leave me alone," he said, his teeth chattering. "I  won't
+go  anywhere with you. Leave off! I didn't bother you, I didn't
+do anything to you, leave me be, for God's sake."
+     "All right," I said, "I'll let you  alone.  But  you  must
+give me a slug and also your address."
+     "I don't know of any slugs," he moaned. "God, what kind of
+a day is this!"
+     Favoring  his  left leg, he wandered off and suddenly dove
+into a  basement  under  an  elegant  and  restrained  sign.  I
+followed.  We  sat  down  at  a  table and a waiter immediately
+brought us hot  meat  and  beer,  although  we  hadn't  ordered
+anything.  Buba  was shivering and his wet face turned blue. He
+pushed the plate away with revulsion and began to  swallow  the
+beer,  both  hands  around  the mug. The basement was quiet and
+empty. Over the sparkling counter hung a white sign  with  gold
+letters reading, "Paid Service Only."
+     Buba  raised  his  head from the beer and said pleadingly,
+"Can I go, Ivan? I can't... What's the point of all this  talk?
+Let me go, please."
+     I put my hand on his.
+     "What's  happening to you, Peck? I searched for you. There
+is no address listed anywhere. I met you quite by accident, and
+I don't understand anything. How did you get involved  in  this
+mess?  Can  I  help you possibly, with anything? Maybe we could
+--"
+     Suddenly he jerked his hand away in a rage.
+     "What an executioner," he hissed. "The devil lured  me  to
+that  Oasis....  Stupid chatter, drivel. I have no slug, do you
+understand? I have one, but I won't give it to you.  What'll  I
+do then -- like Archimedes? Don't you have any conscience? Then
+don't torture me, let me go."
+     "I  can't  let you go," I said, "until I get the slug. And
+your address. We must talk."
+     "I don't want to talk to  you,  can't  you  understand?  I
+don't want to talk to anyone about anything. I want to go home.
+I  won't  give  you my slug. What am I -- a factory? Give it to
+you and then chase all over town?"
+     I kept silent. It was clear that he hated me now. That  if
+he  thought he had the strength he would kill me and leave. But
+he knew that he did not have the strength.
+     "Scum," he  said  in  a  fury.  "Why  can't  you  buy  one
+yourself?  Don't  you  have the money? Here! Here!" he began to
+search  convulsively  in  his  pockets,  throwing  coppers  and
+crumpled bills on the table. "Take it, there's plenty."
+     "Buy what? Where?"
+     "There's  a damned jackass! It's... what is it? Hmm... how
+do you call it... Oh hell!" he cried. "May you drop straight to
+hell!"
+     He stuck his fingers into his shirt pocket and pulled  out
+a  flat plastic case. Inside it was a shiny metal tube, similar
+to a pocket radio local oscillator-mixer subassembly. "Here  --
+get  fat!"  He  proffered me the tube. It was quite small, less
+than an inch long and a millimeter thick.
+     "Thank you," I said. "And how do I use it?"
+     Peck's eyes opened wide. I think he even smiled.
+     "Good God!" he said almost tenderly. "Can it be you really
+don't know?"
+     "I know nothing," I said.
+     "Well then, you should have said so from the start. And  I
+thought  you  were  tormenting  me  like a torturer. You have a
+radio? Insert it in place of  the  mixer,  hang  it,  stand  it
+somewhere in the bath, and go to!"
+     "In the tub?"
+     "Yes."
+     "It must be in the bath?"
+     "But yes! It is absolutely necessary that your body be
+     immersed in water. In hot water. What an ass you are!"
+     "And how about Devon?"
+     "The  Devon  goes  in the water. About five tablets in the
+water and one orally. The taste is awful, but you won't  regret
+it  later. And one more thing, be sure to add bath salts to the
+water. And before you  start,  have  a  couple  of  glasses  of
+something  strong. This is required so that... how shall I say?
+-- so you can loosen up, sort of."
+     "So," I said. "I got  it.  Now  I've  got  everything."  I
+wrapped the slug in a paper napkin and put it in my pocket. "So
+it's electric wave psychotechnics?"
+     "Good Lord, now what do you care about that?"
+     He was up already, pulling the hood over his head.
+     "No matter," I said. "How much do I owe you?"
+     "A trifle, nonsense! Let's go quickly... what the hell are
+we losing time for?"
+     We went up into the street.
+     "You  made  the  right  decision," said Peck. What kind of
+world is this? Are we men in it? Trash is what it is and not  a
+world. Taxi!" he yelled. "Hey, taxi!"
+     He shook in sudden excitement. "What possessed me to go to
+that Oasis...  Oh  no...  from  now  on  I'll  go  nowhere  ...
+nowhere."
+     "Let me have your address," I said.
+     "What do you want with my address?"
+     A taxi drew up and Buba tore at the door.
+     "Address," I said, grabbing him by the shoulder.
+     "What a dumbhead," said Buba..  "Sunshine  Street,  number
+eleven... Dumbhead!" he repeated, seating himself.
+     "I'll come to see you tomorrow."
+     He paid no more attention to me.
+     "Sunshine," he threw at the driver. "Through downtown, and
+hurry, for God's sake."
+     How  simple,  I thought, looking after his car. How simple
+everything turned out to be. And everything fits. The bath  and
+Devon. Also the screaming radios, which irritated us so, and to
+which we never paid any attention. We simply turned them off. I
+took a taxi and set out for home.
+     But what if he deceived me, I thought. Simply wanted to be
+rid of  me  sooner.  But I would determine that soon enough. He
+doesn't look like a runner, an agent, at all, I thought.  After
+all,  he is Peck. However, no, he is no longer Peck. Poor Peck.
+You are no agent, you are simply a victim. You  know  where  to
+buy  this  filth,  but  you  are only a victim. I don't want to
+interrogate Peck, I don't want to  shake  him  down  like  some
+punk.  True,  he  is  no  longer Peck. Nonsense, what does that
+mean, that he is not Peck. He is  Peck,  and  still  I'll  have
+to...  Electric  wave psychotechnics... But the shivers they're
+wave psychotechnics too.... Somehow, it's a bit too  simple.  I
+haven't passed two days here yet, while Rimeyer has been living
+here  since  the  uprising. We left him behind, and he had gone
+native and everyone was  pleased  with  him,  although  in  his
+latest  reports he wrote that nothing like what we were looking
+for existed here. True, he has nervous exhaustion... and  Devon
+on  the  floor. Also there is Oscar. Further, he did not beg me
+to leave him be, but simply pointed me in the direction of  the
+Fishers.
+     I  didn't  meet  anyone either in the front yard or in the
+hall.. It was almost five.  I  went  to  my  rooms  and  called
+Rimeyer. A quiet female voice answered.
+     "How is the patient?" I asked.
+     "He is asleep. He shouldn't be disturbed."
+     "I won't do that. Is he better?"
+     "I  told  you  he  fell  asleep. And don't call too often,
+please. The phone disturbs him."
+     "You will be with him all the time?"
+     "Till morning, at least. If you call again, I'll have  the
+phone disconnected."
+     "Thank  you,"  I said. "Just, please, don't leave him till
+morning, I'll not trouble you again."
+     I hung up and sat awhile in the big comfortable  chair  in
+front  of  the huge absolutely bare table. Then I took the slug
+out of my pocket and laid it in front  of  me.  A  small  shiny
+tube,  inconspicuous  and  completely  harmless  to all outward
+appearances, an ordinary electronic component. Such can be made
+by the millions. They should cost pennies.
+     "What's that you got there?" asked Len, right next to my
+     He stood alongside and regarded the slug.
+     "Don't you know?" I asked.
+     "It's from a radio. I have one like it  in  my  radio  and
+it's breaking all the time."
+     I pulled my radio out of my pocket and extracted its mixer
+and laid it alongside the slug. The mixer looked like the slug,
+but it was not a slug.
+     "They are not the same," said Len. "But I have seen one of
+those gadgets, too."
+     "What gadget?"
+     "Like the one you have."
+     All at once, his face clouded over and he looked grim.
+     "Did you remember?"
+     "No, I didn't," he said. "I didn't remember anything."
+     "All right, then." I picked up the slug and inserted it in
+place of the mixer in the radio. Len grabbed me by the hand.
+     "Don't," he said.
+     "Why not?"
+     He didn't reply, eyeing the radio warily.
+     "What are you afraid of?" I asked.
+     "I'm not afraid of anything. Where did you get that idea?"
+     "Look  in the mirror," I said. "You look as though you are
+afraid for me." I put the radio in my pocket.
+     "For you?" he said in astonishment.
+     "Obviously for me. Not for yourself, of course, though you
+are still scared of those... necrotic phenomena."
+     He looked sideways.
+     "Where did you  get  that  idea,"  he  said.  "We're  just
+playing."
+     I snorted in disdain.
+     "I am well acquainted with these games. Rut one thing I
+     don't  know:  where in our time do necrotic phenomena come
+from?"
+     He glanced around and began backing up.
+     "I'm going," he said.
+     "O no," I said decisively. "Let's finish what we  started.
+Man to man. Don't think that I am altogether an ignoramus."
+     "What  do  you  know?"  He  was  already near the door and
+talking very quietly.
+     "More than you," I said severely. "But  I  don't  want  to
+shout  it all over the house. If you want to talk, come on over
+here. Climb up on the desk and have yourself  a  seat.  Believe
+me, I'm not a necrotic phenomenon."
+     He  hesitated for a whole minute, and everything for which
+he hoped and everything of which he  was  afraid  appeared  and
+disappeared  on  his face. At last, he said, "Just let me close
+the door."
+     He ran into the  living  room,  closed  the  door  to  the
+hallway, returned to close the study door tight, and approached
+me.  His hands were in his pockets, the face white, contrasting
+with the protruding ears, which were red but cold.
+     "In the first  place,  you  are  a  dope,"  I  pronounced,
+dragging him toward me and standing him between my knees. "Once
+there  was  a boy who lived in such a fear that his pants never
+dried out, not even when he was on a beach, and his  ears  were
+as  cold  as  though  they  had  been  left  in  a refrigerator
+overnight. This boy trembled constantly and so well  that  when
+he  grew  up his legs were all wiggly, and his skin became like
+that of a plucked goose."
+     I was hoping  that  he  would  smile  just  once,  but  he
+listened  very  intently and very seriously inquired, "And what
+was he afraid of?"
+     "He had an elder brother, who was a  nice  fellow,  but  a
+great  one  for  drinking.  And,  as  often  happens, the tipsy
+brother was not at all like the sober brother. He got  to  look
+very  wild  indeed.  And  when he really drank a lot, he got to
+look like a dead man. So this boy..."
+     A contemptuous smile appeared on Len's face.
+     "He sure found something to be scared of.  When  they  are
+drunk is when they turn good."
+     "Who are they?" I asked immediately. "Mother? Vousi?"
+     "That's  it. Mother is just the opposite -- in the morning
+when she gets up, she's  always  nasty,  and  then  she  drinks
+vermouth once, then twice, and that's it. Toward evening she is
+altogether nice because night is near."
+     "And at night?"
+     "At night that creep comes around," Len said reluctantly.
+     "We  are  not  concerned  with  the  creep,"  I  said in a
+businesslike manner. "It's not from him that  you  run  to  the
+garage."
+     "I don't run," he said stubbornly. "It's a game."
+     "I  don't  know,  I  don't  know,"  I said. "There are, of
+course, certain things in this world of which even I am afraid.
+For instance when a boy is crying and trembling. I  can't  look
+at  such things, and it just turns me over inside. Or when your
+teeth hurt and it is required by circumstances that you keep on
+smiling -- that's pretty bad and there is no  way  of  ignoring
+it.  But  there  are  also  just  plain  stupidities. When, for
+example, some idiots help themselves, out of sheer boredom  and
+surfeit,  to  the  brain  of  a living monkey. That's no longer
+frightening, it's just plain  disgusting.  Especially  as  they
+didn't  think  it up by themselves. It was a thousand years ago
+when they thought of  it  first,  and  also  out  of  excessive
+affluence,  the  fat  tyrants of the Far East. And contemporary
+idiots heard and rejoiced.  But  they  should  be  pitied,  not
+feared."
+     "Pity  them?" said Len. "But they don't pity anybody. They
+do whatever they like. It's all the same  to  them,  don't  you
+see?  It  they  are bored, then they don't care whose head they
+saw apart. Idiots... Maybe in the daytime they are idiots,  but
+you don't seem to understand that at night they are not idiots,
+they are all accursed."
+     "How can that be?"
+     "They  are  cursed  by  the  whole  world They can have no
+peace, and they won't ever have it. You  don't  know  anything.
+What's it to you? As you arrived, so you will leave... but they
+are  alive  at  night,  and  in  the  daytime  they  are  dead,
+corpselike."
+     I went to the living room and brought him some  water.  He
+drank down the glass and said, "Will you leave soon?"
+     "Of  course not, how can you think that? I just got here,"
+I said, patting him on the shoulder.
+     "Could I sleep with you?"
+     "Of course."
+     "At first I had a padlock, but she took it away  for  some
+reason. But why she took it she won't say."
+     "OK,"  I  said.  "You will sleep in my living room. Do you
+want to?"
+     "Yes."
+     "Go ahead and lock yourself in and sleep to  your  heart's
+content. And I will climb into the bedroom through the window."
+     He raised his head and gazed at me intently.
+     "You think your doors lock? I know all about this place.
+     Yours don't lock either."
+     "It's  for  you they don't lock," I said as negligently as
+possible. "But for me they'll lock.  It's  only  a  half-hour's
+work."
+     He laughed unpleasantly, like an adult.
+     "You  are afraid, too. All right, I was only joking. Don't
+be afraid, your locks do work"
+     "You dope," I said. "Didn't I tell you I wasn't afraid  of
+anything  of  that  sort?"  He  looked  at me questioningly. "I
+wanted to make the lock work for you in the living room, so you
+could sleep in peace, as long as you are so afraid. As for  me,
+I always sleep with the window open."
+     "I told you, I was joking."
+     We were silent for a bit.
+     "Len,"  I said, "what will you be when you grow up?" "What
+do you mean?" he said. He was  quite  astonished.  "What  do  I
+care?"
+     "Now,  now  --  what do you care. It's all the same to you
+whether you will be a chemist or a bartender?"
+     "I told you -- we are all under a  curse.  You  can't  get
+away  from  it,  why  can't you understand that? When everybody
+knows it?"
+     "So what?" I said. "There were  accursed  peoples  before.
+And then children were born who grew up and removed the curse."
+     "How?"
+     "That  would  take  a long time to explain, old friend." I
+got up. "I'll be sure to tell you all about it. For now, go  on
+out and play. You do play in the daytime? Okay then, run along.
+When the sun sets, come on over, I'll make your bed."
+     He  stuck  his  hands in his pockets and went to the door.
+There he stopped and said aver his shoulder, "That gadget you'd
+better take it out of the radio. What do you think it is?"
+     "A local oscillator-mixer," I said.
+     "It's not a mixer at all. Take it out or it  will  be  bad
+for you." "Why will it be bad for me?" I said.
+     "Take  it out," be said. "You'll hate everybody. Right now
+you are not cursed, blat you will become cursed. Who gave it to
+you? Vousi?"
+     "No."
+     He looked at me imploringly.
+     "Ivan, take it out!"
+     "So be it," I said. "I'll take it out. Run along and play.
+And never be afraid of me. Do you hear?"
+     He didn't say anything and went out, leaving me sitting in
+my chair, with my hands on the desk. Soon I heard him puttering
+about in the lilacs under  the  windows.  He  rustled,  stamped
+about,   muttering  something  under  his  breath,  and  softly
+exclaimed, talking to himself, "Bring the flags  and  put  them
+here  and here... that's it... that's it... and then I got on a
+plane and flew away into the mountains."  I  wondered  when  he
+went  to bed. It would be all right if it were eight o'clock or
+even nine; maybe it was a mistake to start  all  this  business
+with him. I could have locked myself in the bathroom and in two
+hours I would know everything. But no, I couldn't refuse him --
+just imagine I was in his place, I thought. But this is not the
+way;  I  am  catering  to  his  fears,  when  I should think of
+something more clever. But try to come up with it -- this is no
+Anyudinsk boarding school.
+     A boarding school this certainly is not,  I  thought.  How
+different  everything  is, and what lies ahead of me now, which
+circle of paradise, I wonder? But if it  tickles,  I  won't  be
+able  to stand it! Interesting -- the Fishers -- they too are a
+circle of paradise, for sure.  The  Art  Patrons  are  for  the
+aristocrats  of the mind, and the old Subway is for the simpler
+types, although the Intels are also aristocrats of the mind and
+they get intoxicated like swine  and  become  totally  useless,
+even  they are useless. There is too much bate, not enough love
+-- it's easy to teach hate, but love  is  hard  to  teach.  But
+then,  love has been too well overdone and slobbered over so it
+has become passive. How is it that love is always  passive  and
+hate  always  active and is thus always attractive? And then it
+is said that hate is natural, while love is  of  the  mind  and
+springs from deep thought.
+     It  should be worthwhile to have a talk with the Intels, I
+thought. They can't all be hysterical  fools,  and  what  if  I
+should  succeed  in  finding a Man. What in fact is good in man
+that comes from nature -- a pound of gray matter. But this  too
+is  not  always good, so that he always must start from a naked
+nothing; maybe it would be good if  man  could  inherit  social
+advances,  but then again, Len would now be a small-scale major
+general. No, better not -- better to start from zero.  True  he
+would  not  now  be afraid of anything, but instead he would be
+frightening others -- those who weren't major generals.
+     I was startled to suddenly see Len perched in the branches
+of the apple tree regarding me fixedly. The next moment he  was
+gone,  leaving only the crash of branches and falling apples as
+an aftermath.  He  doesn't  believe  me  in  the  slightest,  I
+thought.  He  believes  nobody.  And  whom do I believe in this
+town? I went over everyone I could recall. No, I  didn't  trust
+anyone. I picked up the telephone, dialed the Olympic and asked
+for number 817.
+     "Hello! Yes?" said Oscar's voice.
+     I kept quiet, covering the radio with my hand.
+     "Hello,  I'm listening," repeated Oscar irritably. "That's
+the second time," he  said  to  someone  aside.  "Hello!...  Of
+course  not,  what  sort  of  women could I be carrying on with
+here?" He hung up.
+     I picked up the Mintz volume, lay down on the  couch,  and
+read  until  twilight.  I  dearly  love  Mintz,  but I couldn't
+remember a word I read that day. The evening  shift  roared  by
+noisily.  Aunt  Vaina fed Len his supper, stuffing him with hot
+milk and crackers. Len whimpered  and  was  fretful  while  she
+cajoled  him  gently  and  patiently.  Customs  inspector  Pete
+propounded in a commanding yet benevolent tone,  "You  have  to
+eat, you have to eat, if Mother says eat, you must comply."
+     Two  men  of  loose character, if one could judge by their
+voices, came around looking for Vousi and made a play for  Aunt
+Vaina.  I thought they were drunk. It was growing dark rapidly.
+At eight o'clock the phone in the study rang. I ran  barefooted
+and  grabbed  the receiver, but no one spoke. As you holler, so
+it echoes. At eight-ten, there was a knock on the door.  I  was
+delighted, expecting Len, but it turned out to be Vousi.
+     "Why  don't  you  ever come around?" she asked indignantly
+from  the  doorway.  She  was  wearing  shorts  decorated  with
+suggestively  winking  faces,  a tight-fitting sleeveless shirt
+exposing her navel, and a huge translucent scarf: she was fresh
+and firm as a ripe apple. To a surfeit.
+     "I sit and wait for him all day, and all the  time  he  is
+sacked out here. Does something hurt?"
+     I got up and stuck my feet into my shoes.
+     "Have a chair, Vousi." I patted the couch alongside me.
+     "I  am  not going to sit by you. Imagine -- he is reading.
+You could at least offer me a drink."
+     "In the bar," I said, "How is your sloppy cow?"
+     "Thank  God  she  was  not  around  today,"  said   Vousi,
+disappearing in the bar. "Today I drew the mayor's wife. What a
+moron.  Why, she wants to know, doesn't anyone love her?... You
+want yours with water? Eyes white, face red, and a rear end  as
+wide  as a sofa, just like a frog, honest to God. Listen, let's
+make a polecat, nowadays everybody makes polecats."
+     "I don't go for doing like everybody."
+     "I can see that for myself. Everyone is  out  for  a  good
+time, and he is here -- sacked out. And reading to boot."
+     "He -- is tired," I said.
+     "Oh, so? Well then, I can leave!"
+     "But  I  won't let you," I said, catching her by the scarf
+and pulling her down beside me. "Vousi, dear girl,  are  you  a
+specialist  only  for  ladies'  good  humor  or in general? You
+wouldn't be able to put a lonely man whom nobody loves  into  a
+good humor?"
+     "What's  to  love?"  She  looked  me over. "Red eyes and a
+potato for a nose."
+     "Like an alligator's."
+     "Like a dog's. Don't go putting your arm about me, I won't
+allow it. Why didn't you come over?"
+     "And why did you abandon me yesterday?"
+     "How do you like that --.abandoned him!"
+     "All alone in a strange town."
+     "I abandoned him! Why, I locked for you all over.  I  told
+everyone  that you are a Tungus, and you got lost -- that was a
+poor thing for you to do. No -- I won't permit that! Where were
+you last night? Fishering, no doubt. And the same thing  today,
+you won't tell any stories."
+     "Why  shouldn't  I tell?" I said. And I told her about the
+old  Subway.  I  sensed  at  once  that  the  truth  would   be
+inadequate,  and  so  I  spoke  of  men in metallic masks, of a
+terrible oath, of a wall wet with blood, of a sobbing skeleton,
+and I let her feel the bump behind my ear. She liked everything
+very well.
+     "Let's go right now," she said.
+     "Not for anything," I said and lay down.
+     "What kind of manners is that? Get up at once and we'd go.
+Of course, no one will believe me. But you will show your bump,
+and everything will be just perfect."
+     "And then we'll go to the shivers?" I wanted to know.
+     "But yes! You know that turns out to he even good for your
+health."
+     "And we'll drink brandy?"
+     "Brandy and vermouth and a polecat and whiskey."
+     "Enough, enough... and no doubt we'll  also  squeeze  into
+cars  and  drive  at  a  hundred  and  fifty miles per hour?...
+Listen, Vousi, why should you go there?"
+     She finally understood and smiled in discomfiture.
+     "And what's wrong with it? The Fishers also go."
+     "There is nothing bad," I said.  "But  what's  good  about
+it?"
+     "I  don't know. Everybody does it. Sometimes it's a lot of
+fun... and the shivers. There everything  --  all  your  wishes
+come true."
+     "And that's it? That's all there is?"
+     "Well, not everything, of course. But whatever you think
+     about,  whatever  you would like to happen, often happens.
+Just like in a dream."
+     "Well then maybe it would be better to go to bed?"
+     "What's the matter with you?" she said sulkily. "In a real
+dream all kinds of things happen... as though you  don't  know!
+But with the shivers, only what you like!"
+     "And what do you like?"
+     "We-e-ll! Lots of things."'
+     "Still...  imagine I am a magician. And I say to you, have
+three wishes. Anything at all,  whatever  you  wish.  The  most
+impossible. And I will make them come true. Well?"
+     She  thought  very hard so that even her shoulders sagged.
+Then her face lit up.
+     "Let me never grow old," she said.
+     "Excellent," I said. "That's one."
+     "Let me..." she began inspiredly and stopped.
+     I used to enjoy tremendously asking my friends  this  very
+question  and  used  to  ask it at every available opportunity.
+Several times I even assigned compositions to my youngsters  on
+the  theme of three wishes. And it was always most amusing that
+out of a thousand men and women, oldsters  and  children,  only
+two or three dozen figured that it is possible to wish not only
+for  themselves  personally, or their immediate close ones, but
+also for the world at large, for mankind as a whole.  No,  this
+was  not  witness to the ineradicable human egotism; the wishes
+were not invariably  strictly  selfish,  and  the  majority  in
+subsequent  discussions,  when reminded of missed opportunities
+and the large problems of all mankind, did a double take and in
+honest anger reproached me  that  I  hadn't  explained  at  the
+beginning.  But  one  way or another they all began their reply
+along the lines of "Let me..." This was a manifestation of some
+kind of ancient subconscious conviction that your own  personal
+wishes  cannot  change anything in the wide world, and it makes
+no difference whether you do or do not have a magic wand.
+     "Let me..." began Vousi once more, and again was silent. I
+was watching  her  surreptitiously.  She  noticed   this,   and
+dissolving  into  a  broad smile, said with a wave of her hand,
+"So that's your game. Some card you are!"
+     "No -- no -- no," I said. "You should always  be  prepared
+to  answer  this question. Because I knew a man once who always
+asked it of everyone, and then was inconsolable -- 'Oh what  an
+opportunity  I missed, how could I not have figured it out?' So
+you see it's entirely in earnest. Your first wish is  never  to
+grow old. And then?"
+     "Let's  see  --  what else? Of course, it would be nice to
+have a handsome fellow, whom they  would  all  chase,  but  who
+would be with me only. Always."
+     "Wonderful," I said. "That's two. And what else?"
+     Her  face  showed that the game had already palled on her,
+and that any second she'd drop a bomb. And she did. All I could
+do was blink my eyes.
+     "Yes," I said, "of course that, too. But that happens even
+without any magic."
+     "Yes and no," she argued and began to  develop  the  idea,
+based  on the misfortunes of her clients. All of which was very
+gay and amusing to her,  while  I,  in  ignominious  confusion,
+gulped brandy with lemon and tittered in embarrassment, feeling
+like a virgin wall flower. Well, if all this went on in a night
+club,  I  could  handle  it.  Well,  well,  well...  some  fine
+activities go on in those salons of the Good Mood. How  do  you
+like these elderly ladies...
+     "Enough,"  I  said. "Vousi, you embarrass me, and anyway I
+understand it all very well now. I can  see  that  it's  really
+impossible to do without magic. It's a good thing that I am not
+a magician."
+     "I  really  stung  you  well," she said happily. "And what
+would you wish for yourself, now?"
+     I decided I'd reciprocate in kind.
+     "I don't need anything of that sort," I said.  "Anyway,  I
+am not good at things like that. I'd like a good solid slug."
+     She smiled gaily.
+     "I  don't  need three wishes," I explained, "I can do with
+one."
+     She was still smiling, but the smile  became  empty,  then
+crooked, and then disappeared altogether.
+     "What?" she said in a small voice.
+     "Vousi!" I said, getting up. "Vousi!"
+     She didn't seem to know what to do. She jumped up and then
+sat down  and  then jumped up again. The coffee table fell over
+with all the bottles. There were tears in  her  eyes,  and  her
+face  looked  pitiable,  like  that  of  a  child  who has been
+brutally, insolently, cruelly,  tauntingly  deceived.  Suddenly
+she  bit  her  lip  and  with all her strength slapped my face.
+While I was blinking, she, now in full tears, kicked  away  the
+overturned  table and ran out of the room. I sat, with my mouth
+open. An engine roared into life and lights sprang  up  in  the
+dark  garden, followed by the sound of the motor traversing the
+yard and disappearing in the distance.
+     I felt my face. Some joke. Never in my life have  I  joked
+so  effectively.  What  an old fool I was! How do you like that
+for a slug?
+     "May we?" asked Len. He stood in the door, and he was  not
+alone.  With him was a gloomy, freckle-faced boy with a cleanly
+shaved head.
+     "This is Reg," said Len. "Could he sleep here too?"
+     "Reg," I said, pensively smoothing my eyelids. "Of  course
+-- even  two  Regs  would  be okay. Listen, Len, why didn't you
+come ten minutes earlier!"
+     "But she was here," said Len.  "We  were  looking  in  the
+window, waiting for her to leave."
+     "Really?"  I  said.  "Very interesting. Reg, old chum, how
+about what your parents will say?"
+     Reg didn't reply. Len said, "He doesn't have parents."
+     "Well, all right," I said, feeling a  bit  tired.  "You're
+not going to have a pillow fight?"
+     "No," said Len, not smiling, "we are going to sleep."
+     "Fair  enough,"  I  said. "I'll make your beds and you can
+give all this a quick clean-up."
+     I made their beds on the couch and the big chair and  they
+took  off  their  clothes at once and went to bed. I locked the
+door to the hall, turned out their lights,  and  went  into  my
+bedroom,  where  I  sat  awhile  listening  to them whispering,
+moving furniture, and settling  down.  Then  they  were  quiet.
+About  eleven  o'clock  there  was  the  sound  of broken glass
+somewhere in the house.  Aunt  Vaina's  voice  could  be  heard
+singing  some  sort of marching song, followed by more breaking
+glass. Apparently the tireless Pete again was falling down face
+first. From the center  of  town  came  the  cry  of  "Shivers,
+shivers." Someone was loudly sick on the street.
+     I  locked the window and lowered the shades. I also locked
+the door to the study. Then I went to the bathroom  and  turned
+on  the hot water. I did everything per instructions. The radio
+went on the soap shelf, I threw several Devon  tablets  in  the
+water,  together  with  some  salt  crystals,  and was about to
+swallow the tablet when I remembered that it was propitious  to
+"loosen  up."  I didn't want to disturb the boys, but it wasn't
+necessary -- an open bottle of brandy  stood  in  the  medicine
+chest.  I took a few swallows right out of the bottle, stripped
+down to the skin, climbed into the  bath,  and  turned  on  the
+radio.
+
+<ul><a name=11></a><h2>Chapter ELEVEN</h2></ul>
+
+     I  intentionally did not set the thermo-regulator, so that
+when the water cooled off, I  returned  to  consciousness.  The
+radio was still shrieking and the sparkle of white light on the
+walls  hurt  my eyes. I was thoroughly chilled and covered with
+goose bumps. Switching off the radio, I turned on the hot water
+and remained in the bath, basking in the flooding warmth and  a
+very   strange,  very  novel  sensation  of  total,  cosmically
+enormous emptiness. I expected a  hangover,  but  there  wasn't
+any.  I  simply  felt  good. And there were very many memories.
+Also my thoughts flowed inordinately well, as  though  after  a
+long rest in the mountains.
+     In  the  middle  of  the last century, Olds and Miller had
+conducted  experiments  on  brain  stimulation.  They  inserted
+electrodes  into  the  brains  of  white  rats. They employed a
+primitive technology and a barbarous  methodology,  but  having
+located pleasure centers in the rats' brains, they succeeded in
+having the animals press the lever which closed the contacts to
+the electrodes, hour after hour, producing up to eight thousand
+auto-excitations  per hour. These rats did not need anything in
+the real world. They weren't in  the  slightest  interested  in
+anything  but  the  lever.  They  ignored  food, water, danger,
+females;  they  were  indifferent  to  everything  except   the
+stimulation  lever.  Later,  these  experiments  were  tried on
+monkeys and produced the same results. Rumors were  about  that
+someone  carried out similar experiments on criminals condemned
+to death....
+     That was a difficult time for mankind: a time of  struggle
+against  atomic  destruction, a time of increasing limited wars
+over the entire face of the planet, a time when the majority of
+mankind was starving, but even  so,  the  contemporary  English
+writer   and  critic  Kingsley  Amis,  having  learned  of  the
+experiments with rats, wrote:  "I  cannot  be  sure  that  this
+frightens  me  more  than  a  Berlin or a Taiwan crisis, but it
+should, I believe, frighten me more." He feared much about  the
+future,  this  brilliant  and venomous author of <i>New Maps of
+Hell</i>, and: in particular, he foresaw the  possibilities  of
+brain  stimulation  for  the creation of an illusory existence,
+just as intense as the actual, or more intense.
+     By the end of the century, when the first triumphs of wave
+psychotechnology were  realized,  and  when  psychiatric  wards
+began  to  empty,  amid the chorus of exulting cries of science
+commentators, the little brochure by Krinitsky and  Milanovitch
+had  sounded  like  an irritating dissonance. In its concluding
+section the Soviet educators wrote approximately as follows: In
+the overwhelming majority of countries, the  education  of  the
+young  exists  on  the  level  of the eighteenth and nineteenth
+centuries. This ancient system  of  education  always  did  and
+continues  to  posit  as  its objective, first of all and above
+all, the preparation for society  of  qualified  but  stupefied
+contributors  to  the  production  process.  This system is not
+interested in all the other potentialities of the  human  mind,
+and for this reason, outside of the production process, man, en
+masse,   remains   psychologically  a  cave  dweller,  Man  the
+Uneducated. The  disuse  of  these  potentialities  causes  the
+individuals'  inability  to comprehend our complex world in all
+its contradictions, to correlate  psychologically  incompatible
+concepts and phenomena, to obtain pleasure from the examination
+of  connections  and laws when these do not pertain directly to
+the satisfaction of the most  primitive  social  instincts.  In
+other  words,  this  system  of  education  for  all  practical
+purposes does not develop in man pure imagination,  untrammeled
+vision,  and  as  an immediate consequence, the sense of humor.
+The  Uneducated  Man  perceives  the  world  as  some  sort  of
+essentially trivial, routine, and traditionally simple process,
+a  world from which it is possible only by dint of great effort
+to extract pleasures which are, in the end,  also  compulsively
+routine and traditional. But even the unutilized potentialities
+remain,  apparently,  a  hidden reality of the human brain. The
+problem  for  scientific  education   consists   precisely   in
+initiating  the  action of these possibilities, in teaching man
+to dream,  in  bringing  the  multiordinality  and  variety  of
+psychic   associations   into   quantitative   and  qualitative
+coordination  with   the   multiordinality   and   variety   of
+interrelationships in the world of reality. This problem is the
+one  which,  as  is well known, must become the fundamental one
+for mankind in the  coming  proximate  epoch.  But  until  this
+problem  is resolved, there remains some basis to fear that the
+successes of  psychotechnics  will  lead  to  such  methods  of
+electrical  stimulation  as  will  endow  man  with an illusory
+existence which can exceed the real existence in intensity  and
+variety  by  a  considerable  margin. And if one remembers that
+imagination allows man to  be  both  a  rational  being  and  a
+sensual  animal,  and  if  one  adds  to that the fact that the
+psychic subject matter evoked by the  Uneducated  Man  for  his
+illusory  life  of  splendor  derives  from  the  darkest, most
+primitive reflexes, then it is not hard to perceive  the  awful
+temptation hidden in such possibilities.
+     And therefore -- slug.
+     It  is  now  understandable, I thought, why they write the
+word "slug" on fences.
+     Everything is now  understandable.  It's  odious,  that  I
+understand....  Better if I understood nothing, better if, upon
+regaining consciousness, I shrugged my  shoulders  and  climbed
+out  of the bath. Would it have been understandable to Strogoff
+and Einstein and Petrarch? Imagination is a priceless gift, but
+it must not be given an inward direction.  Only  outward,  only
+outward...  What  a  tasty worm some corrupter has dropped from
+his rod into this stagnant pool! And how accurately timed!  Yes
+indeed,  if  I  were  commander of Wells' Martians, I would not
+have bothered with fighter tripods, heat rays, and  other  such
+nonsense.  Illusory existence ... no, this is not a narcotic, a
+narcotic has a long way to go to approach it. In a. way this is
+exactly appropriate. Here. Now. To each  time  its  own.  Poppy
+seeds  and hemp, the kingdom of sweet blurred shadows and peace
+-- for the beggar, the worn-out, the downtrodden... But here no
+one wants peace, here no one is dying of hunger, here is simply
+a bore. A well-fed, well-heated, drunken bore.  It's  not  that
+the  world  is  bad,  it's  just  plain  dreary.  World without
+prospects, world without promise. But in the end man is  not  a
+carp,  he still remains a man. Yes, it is no kingdom of shades,
+it is indeed the real existence,  without  detraction,  without
+dreary  confusion.  Slug  is  moving on the world and the world
+will not mind subjecting itself to it.
+     Suddenly, for a fraction of a moment, I felt  that  I  was
+lost.  And  it  was  cozy  to  be destroyed. Fortunately I grew
+angry. Splashing out water, I climbed out of the bath,  cursing
+and  stoking  my  ire,  pulled  my shorts and shirt over my wet
+body, and grabbed my watch. It was three o'clock, and it  could
+have been three in the afternoon or three the following morning
+or  three  o'clock  after  a  hundred  years. Idiot, I thought,
+pulling on my trousers. Softened up and let Buba go when he was
+ready to give  me  the  address  of  the  gangsters'  den.  The
+operatives  could  have  been  there  by  now and we could have
+nabbed the whole accursed nest, the vile nest. The vermin nest.
+The repulsive cloaca... And at this instant  against  the  very
+depth  of  my  consciousness,  like  a  dancing  spot of light,
+flicked a very calm thought. But I could not fasten upon it.
+     I located  some  Potomac  in  the  medicine  cabinet,  the
+strongest  stimulant  which  I could find in it. I started into
+the living room, but the youngsters were snoring away there, so
+I climbed out the window. The  city  was  resting,  of  course.
+Guffawing  louts hung around under the street lamp on Waterway,
+bawling crowds surged on the brightly  lit  avenues.  Somewhere
+songs  were  shouted,  somewhere  they  were yelling "Shivers!"
+Somewhere glass was being broken. I picked out a  chauffeurless
+taxi, found the index for Sunshine Street, and dialed it on the
+control  console. The car took off across town. The cab smelled
+sour and bottles  rolled  underfoot.  At  one  intersection  it
+almost  plowed  into  a daisy chain of howling humanity, and at
+another there was the rhythmic flashing of  colored  lights  --
+apparently it was possible to set up the shivers elsewhere than
+the  plaza.  They  were  resting, resting with all their might,
+these benevolent patrons from  the  Happy  Mood  Salons,  these
+polite  customs  inspectors, clever barbers, tender mothers and
+manly  fathers,  innocent  youths  and  maidens  --  they   all
+exchanged  their  diurnal  aspects  for the nocturnal, they all
+worked hard to have fun and so that it wouldn't be necessary to
+think about a thing....
+     The taxi braked. It was  the  very  same  place.  It  even
+seemed as though there was that same burning smell...
+     ...  Peck registered a hit on the armored carrier with the
+Fulminator. It spun on a single tread, hopping in the piles  of
+broken bricks, and two fascists immediately jumped out in their
+unbuttoned  camouflage  shirts,  flung  a grenade apiece in our
+direction, and sped off into the darkness. They moved knowingly
+and adeptly, and it was obvious that these were not  youngsters
+from  the  Royal Academy or lifers from the Golden Brigade, but
+genuine full-blown tank corps officers. Robert  cut  them  down
+point-blank  with a burst from his machine gun. The carrier was
+bulging with cases of beer. It  struck  us  that  we  had  been
+constantly  thirsty for the last two days. Iowa Smith clambered
+into the carrier and began handing out the  cans.  Peck  opened
+them  with a knife. Robert, putting the machine gun against the
+carrier, punched holes into the cans with a sharp point on  the
+armor. And the Teacher, adjusting his pince-nez, tripped on the
+Fulminator  straps  and  muttered, "Wait a minute, Smith; can't
+you see I've got my hands full?" A five-story  building  burned
+briskly  at  the  end of the street, there was a thick smell of
+smoke and hot metal, and we avidly downed the  warm  beer,  and
+were  drenched through and through, and it was very hot and the
+dead officers lay on the broken and crushed bricks, with  their
+legs  identically  flung  out  in  their  black  pants, and the
+camouflage shirts bunched at their necks, and  the  skin  still
+glistening with perspiration on their backs.
+     'They are officers," said the Teacher. "Thank God. I can't
+bear the sight of any more dead kids. Accursed politics! People
+forget God on account of it."
+     "What  god  is  that?"  inquired  Iowa  Smith  out  of the
+carrier. "I've never heard of him."
+     "Don't jest about that, Smith," said  the  Teacher.  "This
+will  all  end  soon,  and  from then on no one nowhere will be
+permitted to poison the souls of men with vanity."
+     "And how then shall they multiply?" asked Iowa  Smith.  He
+bent  over  the  beer again, and we could see the burn holes in
+his pants.
+     "I am talking about politics," said the Teacher  modestly.
+"The  fascists  must be destroyed. They are beasts. But that is
+not enough. There are many other political parties,  and  there
+is no place for them and all their propaganda in our land." The
+Teacher  came from this town and lived within two blocks of our
+post.  "Social  anarchists,  technocrats,  communists,  are  of
+course -- "
+     "I  am  a  communist,"  announced Iowa Smith, "at least by
+conviction. I am for the commune."
+     The Teacher looked at him in bewilderment.
+     "Also I am a godless man," added Iowa Smith. "There is  no
+god, Teacher, and there's nothing you can do about it."
+     At  which  point  we  all  began  to  say that we were all
+atheists, and Peck  said  that  on  top  of  that  he  was  for
+technocracy,  while  Robert  announced  that  his  father was a
+social anarchist and his grandfather was a social anarchist and
+he, Robert, probably could not escape being a social anarchist,
+although he didn't know what it was all about.
+     "Well now, if the  beer  would  get  ice-cold,  said  Peck
+pensively, "I would at once believe in God with great delight."
+     Teacher  smiled embarrassedly and kept wiping his glasses.
+He was a good man and we always kidded him, but he  never  took
+offense.  From the very first night I observed that his courage
+was not great, but he never retreated without being  commanded.
+We were still chattering and joking when there was a thunderous
+crash, the burning building wall collapsed, and straight out of
+the  swirling  flames  and  clouds  of  smoke and sparks swam a
+Mammoth attack tank, floating a yard above the  pavement.  This
+was  a  new  horror,  the  likes  of  which we hadn't seen yet.
+Floating out in the  middle  of  the  street,  it  rotated  its
+thrower as though looking around, and then, hovering on its air
+cushion,  began  to  move  in  our  direction,  screeching  and
+clanking metallically. I regained my wits only by  the  time  I
+was  behind  a gate post. The tank was now considerably closer,
+and at first I couldn't see anyone at all, but then Iowa  Smith
+stood up in full view out of the carrier, and propping the butt
+of  the  Fulminator  against his stomach, took aim. I could see
+the recoil double him up. I saw  a  bright  flash  against  the
+black  brow  of  the  tank. And then the street was filled with
+roar and flame, and when I raised my burned eyelids with  great
+effort, the street was empty and contained only the tank. There
+was  no carrier, no mounds of broken brick, no leaning kiosk by
+the neighboring house -- there was only the  tank.  It  was  as
+though the monster had come awake and was spewing waterfalls of
+flame and the street ceased being a street and became a square.
+Peck  slapped  me  hard  on the neck and I could see his glassy
+eyes right in front of my face, but there was no  time  to  run
+toward the trench and break out the launcher.
+     We  both picked up the mine and started running toward the
+tank, and all I remember is looking continually at the back  of
+his  head,  and gasping for breath and counting steps, when the
+helmet flew off Peck's head, and he fell, so I  almost  dropped
+the  mine  and  fell  on  top  of him. The tank was blown up by
+Robert and Teacher. I still don't know how they did it or when;
+it must be they were running behind us with another mine. I sat
+until morning in  the  middle  of  the  street  holding  Peck's
+bandaged  head on my knees and staring at the awesome treads of
+the tank sticking out of the asphalt lake.  That  same  morning
+the  whole  bloody thing came to an end all at once. Zun Padana
+surrendered with all his staff and was shot in  the  street  by
+some crazed woman when already a prisoner....
+     This  was  the  very  same place. I even thought I smelled
+smoke and burned metal. Even the kiosk stood on the corner, and
+it too was a bit crooked in the latest style  of  architecture.
+The  part  of  the  street  which  the tank turned into a plaza
+remained a plaza, and on the site of the asphalt lake there was
+a small square in which someone was being  beaten.  Iowa  Smith
+was  an urban planner from Iowa, U.S.A., Robert Sventisky was a
+movie  director  form  Krakow,  Poland.  The  Teacher   was   a
+schoolteacher  from this town. No one ever saw them again, even
+dead. And Peck was Peck, who had now become Buba
+     Buba lived in the same sort of cottage as I, and its front
+door was open. I knocked, but no one responded  and  no  one  -
+came  out  to  meet me. I entered the dark hall. The lights did
+not go on. The door to the right was locked, and I looked  into
+the  one  on  the  left. In the living room a bearded man, in a
+jacket, but without pants, was sleeping on  a  tattered  couch.
+Someone's feet stuck out from under the overturned table. There
+was  a  smell  of brandy, tobacco smoke, and of something else,
+cloyingly sweet, like in Aunt Vaina's room the  other  day.  In
+the  door  to the study, I bumped into a handsome florid woman,
+who was not in the slightest surprised to see me.
+     "Good evening," I said. Please excuse me,  but  does  Buba
+live here?"
+     "Here,"   she   said,   examining  me  out  of  glistening
+oily-looking eyes.
+     "Can I see him?"
+     "And why not -- all you want."
+     "Where is he?"
+     "Funny man. Where would he be?" she laughed.
+     I could guess where, but said, "In the bedroom?"
+     "You are warm," she said.
+     "What do you mean -- warm?"
+     "What a dunce, and sober yet! Would you like a drink?"
+     "No," I said, angry. "Where is he? I need him right away."
+     "Your prospects are poor," she said gaily. "But search on,
+search on. As for me, I must go."
+     She patted me on the cheek and went out.
+     The study was empty. There was a large crystal vase on the
+table with some kind of reddish fluid in it. Everything smelled
+of that nauseatingly sweet odor. The bedroom  was  also  empty;
+crumpled  sheets and pillows were scattered about. I approached
+the bathroom door. The door was full of holes,  obviously  made
+by  bullets  shot  from  the  inside, judging by their shape. I
+hesitated, then took hold of the handle. The door was locked.
+     I opened it with considerable difficulty. Buba lay in  the
+bath  up  to  his  neck  in greenish water; steam rose from its
+surface. The radio howled and wheezed on the edge of the tub. I
+stood  and  looked  at  Buba.  At   the   erstwhile   cosmonaut
+experimenter,  Peck  Xenai.  At the once-upon-a-time supple and
+well-muscled fellow, who at eighteen left his warm city by  the
+warm  sea, and went into space for the glory of man, and who at
+thirty returned to  his  country  to  fight  the  last  of  the
+fascists  and  to  remain here forever. I was repelled to think
+that only an hour ago, I had looked like  him.  I  touched  his
+face  and  pulled  his  thin hair. He did not stir. Then I bent
+over him to let him sniff some Potomac, and suddenly  saw  that
+he was dead.
+     I knocked the radio off the edge of the tub and crushed it
+under  heel.  There was a pistol on the floor. But Peck had not
+shot himself; it must have been simply that someone  interfered
+with  him  and  he  shot  through  the door in order to be left
+alone. I stuck my arms in the hot water,  picked  him  up,  and
+carried  him  to  the  bed. He lay there all limp and terrible,
+with eyes sunken under his  brows.  If  only  he  were  not  my
+friend...  if  only he were not such a wonderful guy... if only
+he were not such an outstanding worker...
+     I called emergency aid on the phone and  sat  down  beside
+Peck.  I  tried not to think of him. I tried to think about the
+business at hand. And I tried to be cold and harsh, because  at
+the  very  bottom  of  my  conscious  mind,  that flick of warm
+feeling, like a speck of light, flashed again, and this time  I
+understood what the thought was.
+     By  the  time  the doctor came, I knew what I was going to
+do. I would find Eli. I would pay any sum. Maybe I  would  beat
+him.  If  necessary, I would torture him. And he would tell me,
+whence this plague flows out upon  the  world.  He  would  name
+names  and  addresses.  He would tell me all. And we would find
+these men. We would locate and burn their secret  laboratories,
+and  as for themselves, we would ship them out so far that they
+would never return. Whoever they might be. We would catch  them
+all,  we  would catch all who ever tried slug and isolate them,
+too. Whoever they were. Then I would demand  that  I,  too,  be
+isolated  because  I knew what slug was. Because I grasped what
+sort of thought I had, because I was socially  dangerous,  just
+as  they all are. And all that would be only the beginning. The
+beginning of all beginnings, and ahead would remain that  which
+was  most  important:  to  make  it so that people would never,
+never, wish to know what  slug  was.  Probably  that  would  be
+outlandish. Probably many would say that it was too outlandish,
+too harsh, too stupid -- but we would still have to do it if we
+wanted mankind not to stop....
+     The  doctor,  an  old  gray  man, put down his white case,
+leaned over Buba, looked  him  over,  and  said  indifferently,
+"Hopeless."
+     "Call the police," I said.
+     Slowly he put away his instruments.
+     "There  is  no need of that whatsoever," he said. "There's
+no criminal content, here. It is a neurostimulator...."
+     "Yes, I know."
+     "There you are -- the second case this  night.  They  just
+don't know when to stop."
+     "When did it start?"
+     "Not very long ago... a few months."
+     "Then why in hell do you keep it quiet?"
+     "Keep  it quiet? I don't understand. This is my sixth call
+tonight, young man. The second case of nervous  exhaustion  and
+four cases of brain fever. Are you a relative?"
+     "No."
+     "Well,  all  right,  I'll send some men." He stood awhile,
+looking at Peck. "Join some  choruses,"  he  said.  "Enter  the
+League of Reformed Sluts..."
+     He  was  mumbling something else as he left, an old, bent,
+uncaring man. I covered Peck with a sheet,  pulled  the  drape,
+and  went  out  into  the  living room. The drunks were snoring
+obscenely, filling the air with alcoholic  fumes,  and  I  took
+them  both  by  the  heels  and  dragged  them out in the yard,
+leaving them in the puddle by the fountain.
+     Dawn was breaking once more and the stars were dimming  in
+the  paling  sky. I got into the taxi and dialed the old Subway
+on the console.
+     It was full of people. It was impossible to get through to
+the railing, although it seemed to me that only  two  or  three
+men  were  filling  out  the  forms,  while  the rest were just
+looking,  stretching   their   necks   eagerly.   Neither   the
+round-headed  man  nor  Eli were to be seen behind the barrier,
+and no one knew where  they  could  be  found.  Below,  in  the
+cross-passages  and tunnels, drunken, shouting, half-crazed men
+and hysterical women were  milling  about.  There  were  shots,
+distant  and  muffled  and  some  loud  and close, the concrete
+underfoot shook with the detonations, and a mixture  of  smells
+-- gunpowder,  sweat,  smoke, gasoline, perfume, and whiskey --
+coated in the air.
+     Squealing and arm-waving teenagers surrounded a big fellow
+who dripped blood and whose pale face  shone  with  a  look  of
+triumph. Somewhere wild beasts roared menacingly. In the halls,
+the  audience  was  going wild in front of huge screens showing
+somebody blindfolded, firing a spray of bullets from a  machine
+gun  held  against  his  belly,  and someone else sat up to his
+chest in some black and heavy liquid, blue from  the  cold  and
+smoking   a   crackling   cigar,   and   another   one  with  a
+tension-twisted face, suspended as though cast in stone in some
+sort of web of taut cords...
+     Then I found out where Eli was.  I  saw  round-head  by  a
+dirty  room  full of old sandbags. He stood in the doorway, his
+face covered with soot, smelling of burnt gunpowder, the pupils
+of his eyes fully distended. Every few seconds he bent down and
+brushed his knees, not hearing me at all,  so  that  I  had  to
+shake him to make him take notice of me.
+     "There  is  no  Eli," he barked. "Gone, do you understand?
+Nothing but smoke -- get  it?  Twenty  kilovolts,  one  hundred
+amperes, see? He didn't leap far enough!"
+     He  pushed  me away vigorously and took off into the dirty
+room, jumping over the sandbags. Elbowing the  curious  out  of
+the way, he got to a low metal door.
+     "Let  me through," he howled. "Let me at it once more. God
+favors a third time!"
+     The door shut heavily and the mob surged  away,  stumbling
+and  falling  over the bags. I didn't wait for him to come out.
+Or not to come out. He was no longer of any use  to  me.  There
+was  only  Rimeyer  left.  There was also Vousi, but I couldn't
+count on her. So there was really only Rimeyer. I was not going
+to wake him. I'd wait outside his room.
+     The sun was already  up  and  the  filthied  streets  were
+empty.
+     The   auto-streetcleaners   were   coming   out  of  their
+underground garages to do their job. All they  knew  was  work;
+they  had  no potentialities to be developed, but they also had
+no primitive reflexes. Near the Olympic, I had to  stop  for  a
+long  chain of red and green men followed by a string of people
+enclosed in some sort of scales, who  dragged  their  shuffling
+feet  from one street into the next, leaving behind a stench of
+sweat and paint. I stood and waited for them to pass, while the
+sun had already lit up the huge mass of  the  hotel  and  shone
+gaily  in  the metallic face of Yurkovsky, who, as he had while
+alive, looked out over the heads of all men. After they passed,
+I went into the hotel. The clerk was dozing behind his counter.
+Awaking, he smiled professionally and asked in a cheery  voice,
+"Would you like a room?"
+     "No," I replied, "I am visiting Rimeyer."
+     ' Rimeyer? Excuse me -- room 902?"
+     I stopped.
+     "I believe so. What's the matter?"
+     "I beg your pardon, but he is not in."
+     "What do you mean, not in?"
+     "He checked out."
+     "Can't  be,  he  has  been ill. You are not mistaken? Room
+902?"
+     "Exactly right, 902, Rimeyer. Our perpetual  client.  It's
+an  hour  and a half since he left. More accurately, flew away.
+His friends helped him down and aboard a copter."
+     "What friends?" I asked hopelessly.
+     "Friends,  as  I  said,  but,   excuse   me,   they   were
+acquaintances.  There  were three of them, two of whom I really
+don't know. Just young athletic-looking men. But I do know  Mr.
+Pebblebridge,  he was our permanent guest. But he signed out --
+today."
+     "Pebblebridge?"
+     "Exactly. Lately he has been meeting Rimeyer quite  often,
+so  I concluded that they were quite well acquainted. He stayed
+in  room  817.  A  fairly  imposing   gentleman,   middle-aged,
+red-headed..."
+     "Oscar!"
+     "Exactly, Oscar Pebblebridge.
+     'That  makes  sense,"  I  said,  trying  to keep a hold on
+myself. "You say they helped him?"
+     "That's right. He has been very sick and they even sent  a
+doctor  up:  to  him  yesterday. He was still very weak and the
+young men held him up by his elbows, and almost carried him."
+     "And the nurse? He had an attendant nurse with him?"
+     "Yes, there was one. But she left right after them -- they
+let her go."
+     "And what is your name?"
+     "Val, at your service."
+     "Listen, Val," I said. "You are sure it didn't  look  like
+they were taking him away forcibly?"
+     I looked hard at him. He blinked in confusion.
+     "No,"  he  said.  "Although,  now  that you have mentioned
+it..."
+     "All right," I said. "Give me the key to his room and come
+with me."
+     Clerks are, as a rule, quite savvy types. Their  sense  of
+smell, at least for certain things, is quite impressive. It was
+perfectly obvious that he had guessed who I was. And maybe even
+where  I  came from. He called a porter, whispered something to
+him, and we went up to the ninth floor.
+     "What currency did he pay in?" I asked.
+     "Who? Pebblebridge?"
+     "Yes."
+     "I think... ah yes, marks, German marks."
+     "And when did he arrive here?"
+     "One minute... it will come to  me...  sixteen  marks  ...
+precisely four days ago."
+     "Did he know that Rimeyer stayed with you?"
+     "Excuse me, but I can't say. But the day before yesterday,
+they had  dinner  together. And yesterday, they had a long talk
+in the foyer. Early in the morning while  everybody  was  still
+up."
+     It  was  unusually  clean  and  tidy  in Rimeyer's room. I
+walked about looking over the place.  Suitcases  stood  in  the
+closet.  The  bed  was  rumpled,  but  I  could see no signs of
+struggle. The bathroom also was clean and tidy. Boxes of  Devon
+were stacked on the shelf.
+     "What do you think -- should I call the police?" asked the
+clerk.
+     "I    don't   know,"   I   replied.   "Check   with   your
+administration."
+     "You understand that I am in doubt again. True, he  didn't
+say  goodbye.  But  it all looked completely innocent. He could
+have given me a sign, and I would have  understood  him  --  we
+have  known  each  other  a  long  time.  He  was  pleading Mr.
+Pebblebridge: 'The radio, please don't forget the radio.'"
+     The radio lay under the mirror, hidden  by  a  negligently
+thrown towel.
+     "Yes?"  I  said.  "And  what  did  Mr. Pebblebridge say to
+that?"
+     Mr. Pebblebridge was soothing him, saying, "Of course,  of
+course, don't worry..."
+     I  took  the  radio, and leaving the bathroom, sat down at
+the desk. The clerk looked back and forth from the radio to me.
+     So, I thought, now he knows why I came here. I  turned  it
+an. It moaned and howled. They all know about slug. No need for
+Eli,  nor  Rimeyer;  you can take anyone at random. This clerk,
+for instance. Right now, for instance.  I  turned  it  off  and
+said, "Please be good enough to turn on the combo."
+     He  ran  over  to it with mincing steps, turned it on, and
+eyed me questioningly.
+     "Leave it on that station. A little softer. Thank you."
+     "So you don't advise me to call the police?"
+     "As you wish."
+     "It seemed you had something quite definite in  mind  when
+you questioned me."
+     "It  only  seemed  so,"  I  said coldly. "It's just that I
+dislike Mr. Pebblebridge. But that does not concern you."
+     The clerk bowed.
+     "I'll stay here for a while,  Val,"  I  said.  "I  have  a
+notion  that  this  Mr.  Pebblebridge will be back. It won't be
+necessary to announce that I am here. In the meantime, you  are
+free to go."
+     "Yes, sir," he said.
+     When  he left, I rang up the service bureau and dictated a
+telegram; "Have found the meaning of life but am lonely brother
+departed unexpectedly come at once Ivan." Then I turned on  the
+radio  again, and again it howled and screeched. I took off the
+back and pulled out  the  local  oscillator-mixer.  It  was  no
+mixer.  It  was  a  slug. A beautiful precision subassembly, of
+obviously mass-produced derivation, and the more  I  looked  at
+it, the more it seemed that somewhere, sometime, long before my
+arrival  here,  and  more  than  once, I had already seen these
+components  in  some  very  familiar  device.  I  attempted  to
+recollect  where I had seen them, but instead, I remembered the
+room  clerk  and  his  face  with  a   weak   smile   and   his
+understanding,  commiserating  eyes. They are all infected. No,
+they hadn't tried slug -- heaven forbid! They hadn't even  seen
+one!  It  is  so indecent! It is the worst of the worst! Not so
+loud, my dear, how can you say that in front of the boy...  but
+I've  been told it's something out of this world.... Me?... How
+can you think that, you must have a low  opinion  of  me  after
+all....  I don't know, they say over at the Oasis, Buba has it,
+but as for myself -- I don't know....  And  why  not?  I  am  a
+moderate man -- if I feel something is not right, I'll stop....
+Let  me  have  five packets of Devon, we have made up a fishing
+party (hee, hee!). Fifty thousand people. And their friends  in
+other  towns.  And  a hundred thousand tourists every year. The
+problem is not with the gang. That's the least of our  worries,
+for what does it take to scatter them? The problem is that they
+are  all  ready,  all  eager,  and  there  is not the slightest
+prospect of the  possibility  to  prove  to  them  that  it  is
+terribly  frightening,  that it is the end, that it is the last
+debasement.
+     I clasped the slug in my fist, propped up my head  on  it,
+and stared at Rimeyer's dress jacket with the ribbon bar on it,
+hanging  on  the  back of the chair. Just like me, he must have
+sat in this chair a few months ago, and also held the slug  and
+radio  for  the  second time, and the same warm flick of desire
+wandered through the depths  of  his  consciousness:  there  is
+nothing  to  worry  about,  because  now  there is light in any
+darkness, sweetness in any grief, joy in any pain....
+     ...There, there, said Rimeyer. Now you have  got  it.  You
+just  have  to be honest with yourself. It is a little shameful
+at first, and then you begin to understand how  much  time  you
+have lost for nothing.... ...Rimeyer, I said, I wasted time not
+for  myself.  This  cannot  be  done,  it  simply cannot, it is
+destruction  for  everyone,  you  can't   replace   life   with
+dreams.... ...Zhilin, said Rimeyer, when man does something, it
+is  always  for himself. There may be absolute egotists in this
+world, but perfect altruists are just impossible.  If  you  are
+thinking  of  death  in a bathtub, then, in the first place, we
+are all mortal, and in the second place,  if  science  gave  us
+slug,  it will see to it that it will be rendered harmless. And
+in the meantime, all that is required is moderation. And  don't
+talk  to me of the substitution of reality with dreams. You are
+no novice, you know perfectly well that these dreams  are  also
+part  of  reality.  They constitute an entire world. Why do you
+then call this acquisition ruin?... ...Rimeyer, I said, because
+this world is still illusory, it's all within you, not  outside
+of  you, and everything you do in it remains in yourself. It is
+the opposite of the real  world,  it  is  antagonistic  to  it.
+People  who  escape  into this illusory world cease to exist in
+the real world. They become as dead. And when  everyone  enters
+the  illusory  world  --  and you know it could end thus -- the
+history of man  will  terminate....  ...Zhilin,  said  Rimeyer,
+history  is  the  history  of people. Every man wants to live a
+life which has not been in vain, and  slug  gives  you  such  a
+life....  Yes, I know that you consider your life as not having
+been in vain without slug, but, admit it, you have never  lived
+so luminously, so fully as you have today in the tub. You are a
+bit  ashamed  to recollect it, and you wouldn't risk recounting
+it to others. Don't. They have their life, you  have  yours....
+...Rimeyer,  I  said,  all  that  is true. But the past! Space,
+schools, the struggle with fascists, gangsters -- is  all  that
+for naught? Forty years for nothing? And the others -- they did
+it all for nothing, too?... ...Zhilin, said Rimeyer, nothing is
+for  nothing  in  history.  Some  fought  and did not live long
+enough to have slug.  You  fought  and  lived  long  enough....
+...Rimeyer, I said, I fear for mankind. This is really the end.
+It's  the  end  of  man interacting with nature, the end of the
+interplay of man  with  society,  the  end  of  liaisons  among
+individuals, the end of progress, Rimeyer. AU these billions of
+people  submerged  in.  hot  water and in themselves... only in
+themselves....  ...  Zhilin,  said  Rimeyer,  it's  frightening
+because it's unfamiliar. And as for progress -- it will come to
+an  end  only for the real society, only for the real progress.
+But each separate man will lose nothing,  he  will  only  gain,
+since  his world will become infinitely brighter, his ties with
+nature,  illusory  though  they  may  be,  will   become   more
+multifaceted;  and  ties with society, also illusory but not so
+known to him, will become more powerful and fruitful.  And  you
+don't  have  to  mourn  the  end  of progress. You do know that
+everything comes to an end. So now comes the end of progress in
+the objective world. Heretofore, we didn't know how  if,  would
+end,  But  we  know  now. We hadn't had time to realize all the
+potential intensity of objective existence, it could be that we
+would have reached such knowledge in a few hundred  years,  but
+now  it  has  been  put  in  our  grasp.  Slug brings a gift of
+understanding of our remotest ancestors which you  cannot  ever
+have  in  real life. You are simply the prisoner of an obsolete
+ideal, but be logical, the ideal which slug offers you is  just
+as  beautiful.  Hadn't  you  always  dreamed  of  man  with the
+greatest  scope  of  fantasy   and   gigantic   imagination....
+...Rimeyer,  I  replied,  if  you  only  knew how tired I am of
+arguing. All my life I have argued with myself and with others.
+I have always loved to argue, because  otherwise  life  is  not
+worth  living. But I am tired right now and don't wish to argue
+over  slug,  of  all  things....  ...Then  go  on,  Ivan,  said
+Rimeyer....
+     I  inserted the slug into the radio. As he had then, I got
+up. As he did then, I was past thought, past belonging in  this
+world, but I still heard him say: don't forget to lock the door
+tight so that you won't be disturbed.
+     And  then I sat down. ...So that's the way of it, Rimeyer!
+said I. So that's how it went. You surrendered. You closed  the
+door  tight.  And  then  you sent lying reports to your friends
+that there wasn't any slug. And then  again,  after  hesitating
+but  a  moment,  you  sent  me  to  my death so that I wouldn't
+disturb you. Your ideal, Rimeyer,  is  offal.  If  man  has  to
+perform what is base in the name of an ideal, then the worth of
+such ideal is -- less than dross....
+     I  glanced at the watch and shoved the radio in my pocket.
+I was past waiting for Oscar. I was hungry. And beyond  that  I
+had  the  feeling  that for once I had done something useful in
+this town. I left my phone number with the  room  clerk  --  in
+case  Oscar  or  Rimeyer should return -- and went out onto the
+plaza. I did not believe that Rimeyer would come back  or  even
+that  I  would  ever see him again, but Oscar could hold to his
+promise, though more likely, I would have to seek him out.  And
+probably not alone. And probably not here.
+
+<ul><a name=12></a><h2>Chapter TWELVE</h2></ul>
+
+     There   was   but  one  visitor  in  the  automated  cafe.
+Barricaded behind bottles and hors d'oeuvres at a corner  table
+sat a dark man of oriental cast, magnificently but outlandishly
+dressed.  I  took  some yogurt and blintzes with sour cream and
+set to, glancing at him now and then. He ate and drank much and
+avidly, his face shiny with sweat, hot  inside  his  ridiculous
+formal  clothes.  He  sighed,  leaning  back  in  his chair and
+loosening his belt. The motion exposed a  long  yellow  holster
+glistening in the sunlight under the clothing.
+     I  was  on  my  way  into the last of the blintzes when he
+hailed me: "Hello," he said. "Are you a native here?"
+     "No," I said. "A tourist."
+     "So that means you don't understand anything either."
+     I went to the bar, threw a juice  cocktail  together,  and
+approached him.
+     "Why  is  it  empty  here?"  he continued. He had a lively
+spare face and a bold gaze. "Where are the inhabitants? Why  is
+everything  closed  up?  Everyone  is asleep, you can't get any
+service."
+     "You just arrived?"
+     "Yes."
+     He pushed an empty plate away, moved up a  full  one,  and
+gulped some light beer.
+     "Where are you from?" I asked. He glared at me menacingly,
+and I added quickly, "If it's not a secret, of course."
+     "No,"  he  said, "it's not a secret," and went back to his
+eating.
+     I finished the juice and got ready to leave. Then he said,
+"They live well, the dogs. Such food and as much as  you  want,
+and all for free."
+     "Well, not quite for free," I contradicted.
+     "Ninety dollars! Pennies! I'll show them how to eat ninety
+dollars   within   three   days!"   His   eyes  stopped  roving
+momentarily, "D-dogs!" he muttered and fell to again.
+     I was quite familiar  with  such  types.  They  came  from
+minuscule,  totally milked kingdoms and prefectdoms, reduced to
+utter poverty, and greedily ate and drank, mindful of  the  hot
+dusty  streets  of  their  home  towns,  where in the niggardly
+ribbons  of  shade,  moribund  men  and  women  lay  dying  and
+immobile, while children with distended bellies rummaged in the
+garbage  piles of foreign consulates. They were surcharged with
+hatred and needed only two things -- food and weapons. Food for
+their own gang, which was the opposition, and weapons to  fight
+the  other gang, which was in power. They were the most flaming
+patriots, who spoke hotly and effusively of their love for  the
+people,  but  resolutely refused all help from without, because
+they loved nothing but their power and no one  but  themselves,
+and  were  ready  in  the name of the people and the victory of
+high principles to mortify the same people, right down  to  the
+last   man,   if   necessary,  with  hunger  and  machine  gun.
+Microhitlers!
+     "Weapons? Food?" I asked.
+     He grew wary.
+     "Yes," he said. "Food and weapons. Only without any  silly
+conditions.  And  as  free  as  possible.  Or  on  credit. True
+patriots never have any money. While the ruling  clique  drowns
+in luxury...."
+     "Famine?" I asked.
+     "Anything  you  want.  While  you here swim in luxury." He
+gazed at me with hatred. "The whole world is drowning in wealth
+and we alone are starving. But your  hopes  are  in  vain!  The
+revolution cannot be stopped!"
+     "Yes," I said. "And whom is the revolution against?"
+     "We  are  fighting  the  blood leeches of Boadshah! We are
+against corruption and debauchery of the ruling top  layer,  we
+are for freedom and true democracy. The people are with us, but
+they  have  to be fed. And you tell us that you'll give us food
+only after we disarm. And even threaten  intervention....  What
+filthy,  lying  demagogy!  What  deception of the revolutionary
+masses! To disarm in the face of  those  bloodsuckers  --  that
+means to throw a hangman's noose over the heads of all the true
+freedom fighters! We answer you -- no! You will not deceive the
+people.  Let  Boadshah and his brutes disarm! Then we shall see
+what needs doing!"
+     "Yes," I said. "But Boadshah  also,  in  all  probability,
+does not wish a noose thrown over his neck."
+     He  put  the beer down savagely, and his hand moved toward
+the holster in a habitual gesture. But then he  quickly  caught
+himself.
+     "I  should  have known you don't understand a damn thing,"
+he said. "You who are well fed have grown drowsy  from  a  full
+stomach,  you  are too conceited to understand us. You wouldn't
+have dared to talk to me like that in the jungle."
+     In the jungle, I would have  talked  differently  to  you,
+bandit, I thought, and said:
+     "I  really  don't  understand many things. For instance, I
+don't understand what will happen when you gain the upper hand.
+Let us imagine that you have won, Boadshah has been hanged,  if
+be, in his turn, hasn't fled to seek food and weapons --"
+     "He  won't  get  away.  He'll  get  his  just deserts. The
+revolutionary people will tear him to shreds. That's when we'll
+go to work. We will regain the  territory  seized  from  us  by
+affluent  neighbors, we will carry out the entire program which
+the lying Boadshah  constantly  shouts  about  to  deceive  the
+people....  I'll  show  them how to strike! They'll learn about
+strikes with me on top -- there'll be no strikes!  They'll  all
+go under arms and forward march! We will win and then..."
+     He shut his eyes and moaned a bit, shaking his head.
+     "And  then  you  will be well fed, you will swim in luxury
+and sleep till noon?"
+     He laughed.
+     "I deserve that. The people deserve it. No one  will  dare
+reproach  us. We will eat and drink as much as we wish, we will
+live in real houses, we will say to the  people:  now  you  are
+free -- divert yourselves!"
+     "And  don't  think about a thing," I added. "But don't you
+think that all that could come out badly for you?"
+     "Forget it," he said. "That's sheer demagogy.  You  are  a
+demagogue.   Also  a  dogmatist.  We  too  have  all  kinds  of
+dogmatists similar to yourself. Man, they say,  will  lose  the
+meaning  of life. No, we reply, man will lose nothing. Man will
+acquire and not lose. You have to feel the people. You have  to
+be  from  the  people yourself. The people don't like sophists.
+What the hell for do I let myself be fed on by wood leeches and
+feed on worms myself?" Suddenly he smiled  amiably.  "You  must
+have  taken  offense  at me a bit, for calling you well fed and
+other things. Please don't. Affluence is  bad  when  you  don't
+have  it,  but  your  neighbor  does. But achieved affluence --
+that's a great thing! It's worth fighting for. Everybody fought
+for it. It must be obtained  with  weapons  in  hand,  and  not
+traded for freedom and democracy."
+     "So your final goal is still abundance? Just abundance?"
+     "Obviously!  The  final objective always is abundance. The
+difference is that we are choosy about the means to get it."
+     "I have already grasped that. But what about man?"
+     "What do you mean, man?"
+     I did understand that it was futile to argue.
+     "You have never been here before?" I asked.
+     "Why?"
+     "Look into it, I said. This town gives excellent practical
+lessons in abundance."
+     He shrugged his shoulders.
+     "So far, I like it here." Again he pushed  away  an  empty
+plate  and  replaced  it with a full one. "These hors d'oeuvres
+are strange to me.... Everything is tasty  and  cheap....  It's
+enviable."  He  swallowed  a few forkfuls of salad and growled.
+"We know that all great revolutionaries fought  for  abundance.
+We  don't  have  time to theorize, but there is no need for it,
+anyway. There are  enough  theories  without  us.  Furthermore,
+abundance is in no way threatening us. It won't threaten us for
+quite a while yet. We have much more pressing problems."
+     "To hang Boadshah," I said.
+     "Yes  --  to begin with. Next we will need to do away with
+the dogmatists. I can perceive that even now.  Next  comes  the
+realization  of  our  legitimate  claims. After that, something
+else will come up. And only then, and after many other  things,
+will  abundance arrive. I am an optimist, but I don't believe I
+will live to see it. Don't you worry -- we'll  manage  somehow.
+If  we can stand hunger then we can take abundance for sure....
+The dogmatists prattle that abundance is  not  an  end,  but  a
+means.  We  reply  that  every  means  was once an goal. Today,
+abundance is a goal. Tomorrow, perhaps it may become a means."
+     I got up.
+     "Tomorrow may be too late," I said. "It  is  incorrect  of
+you  to fall back on great revolutionaries. They would not have
+accepted your shibboleth: now you are free -- enjoy yourselves.
+They spoke otherwise: now that you are free -- work. After all,
+they never fought  for  abundance  for  the  belly,  they  were
+interested in abundance for the soul and the mind."
+     His  hand  twitched toward the holster again, and again he
+caught himself.
+     "A Marxist!" he said with astonishment. "But  then  again,
+you  are  a  visitor.  We have almost no Marxists, we take them
+and..."
+     I kept control of myself.
+     Passing by the window, I took another look at him. He  sat
+with  his  back to the street and ate and ate, his elbows stuck
+out.
+     When I got home, the living room was already  vacant.  The
+youngsters  had  piled the bedsheets and pillows in the corner.
+There was a note under the telephone on the desk. Written in  a
+childish   scrawl,   it  read:  "Take  care.  She  has  plotted
+something. She was fussing in the bedroom." I  sighed  and  sat
+down in the armchair.
+     There  was  still  an  hour  until the meeting with Oscar,
+assuming he came. There was no sense in going to sleep, but  in
+addition,  it  might  not be safe -- Oscar could bring company,
+and come earlier than expected, possibly not through the  door.
+I  got  the  pistol  out  of  the  suitcase, put in a clip, and
+dropped it in my side pocket. Next  I  climbed  into  the  bar,
+brewed myself some coffee, and went back to the study.
+     I  took  the  slug  out  of  my  radio  and the one out of
+Rimeyer's, lay them down in front  of  me  on  the  table,  and
+attempted  again to recollect where indeed I had seen just such
+components and why I thought that I had seen  them  before  and
+more than once. And then it came to me. I went into the bedroom
+and  brought in the phonor. I didn't even need a screwdriver. I
+took the case off the phonor, stuck my index finger  under  the
+odorizer  horn, and, catching it with my finger nail, extracted
+a vacuum tubusoid FX-92-U, four outputs, static field, capacity
+equals two. Sold in consumer electronic stores at  fifty  cents
+each. In local patois -- a slug.
+     It   had   to   be,  I  thought.  We  are  disoriented  by
+conversations about a new drug. We are constantly  derailed  by
+talk  about  horrific  new  inventions.  We  have  already made
+several similar blunders.
+     There was the time when Alhagana and Burris  served  up  a
+complaint  in  the  U.N.  that the separatists were using a new
+type of weapon -- freeze bombs. We  threw  ourselves  furiously
+into  a  search  for underground laboratories and even arrested
+two genuine underground inventors (sixteen and ninety-six years
+old, respectively). And then it turned out that  the  inventors
+were  in  no  way  connected,  and  the awful freeze bombs were
+acquired by the  separatists  in  Munich  from  a  refrigerator
+warehouse  -- and were in fact reject super-freezers. True, the
+effect of these super-freezers was  indeed  horrible.  Used  in
+conjunction  with molecular detonators (widely used by undersea
+archaeologists  in  the  Amazon  for   dispersing   crocs   and
+piranhas),  the  super-freezers  were  capable of instantaneous
+temperature  depression  of  one  hundred  and  fifty   degrees
+centigrade  over a radius of twenty meters. Afterward, we spent
+much effort indoctrinating ourselves with the concept  that  we
+should  keep  in mind that in our times, literally every month,
+masses of new inventions  appear  with  the  most  peaceful  of
+applications,  but with the most unexpected side effects. These
+characteristics are often such that lawbreaking in the area  of
+weapons  manufacture  and  stockpiling  becomes meaningless. We
+became extremely cautious about new types of armament, employed
+by various extremists, and only a  year  later  got  caught  by
+another  twist, when we went looking for a mysterious apparatus
+with which poachers lured pterodactyls from the Uganda Preserve
+at  a  great  distance.  We  found  a   clever   do-it-yourself
+adaptation  of  the  "Up-down" toy in combination with a fairly
+generally available medical device.
+     And now we had caught slug -- a combination of a  standard
+radio with a standard tubusoid and a standard chemical and very
+common plumbing-supplied hot water.
+     To  make  a  long  story  short, there would be no need to
+search for secret factories. We'd have to look  for  some  very
+adroit  and unprincipled speculators who sensed very delicately
+indeed that  they  found  themselves  in  the  Country  of  the
+Boob....  They'd  be  like  trichinae  in  a  ham.  Five or six
+enterprising self-seekers. An innocent cottage somewhere in the
+suburbs. Just go to a department store, buy the vacuum tubusoid
+for fifty cents, peel off the plastic wrapping, and place in an
+elegant box with a glassite cover. And then sell it  for  fifty
+marks  --  "only  to you and only through friends." True, there
+was still the inventor. Probably he was  not  alone,  and  most
+certainly he was not the only one.... But probably they had not
+survived;  for  this  was nothing like a lure for pterodactyls.
+Anyway, was the matter really one of speculators? Let them sell
+another forty slugs, or a hundred. Even in the City  of  Boobs,
+people  had to figure out in the end what it was all about. And
+when that happened, slug would spread like wildfire.
+     The first ones to see to that would be the moralists  from
+the  Joy  of  Living.  They  would be followed by Dr. Opir, who
+would sally forth and announce  that  according  to  scientific
+endings,  slug  was  conducive  to  clarity  of thought and was
+unsurpassed in the treatment of alcoholism and  depression.  In
+general,  the  future  ideal  was a vast trough filled with hot
+water. Then they would stop writing  the  word  "slug"  on  the
+fences.
+     That's  who  should  be taken by the throat, I thought, if
+anybody. The trouble is not the profiteers. The trouble is that
+there  exists  this  Country   of   the   Boob,   this   filthy
+misconstruction.  It  has  taken the shivers under its wing and
+can't wait to legalize slug....
+     There was a knock on the door. Oscar came into the  study,
+and he was not alone. With him was Matia himself, stocky, gray,
+with  dark  glasses  and  thick cane, as always, looking like a
+veteran  who  has  lost   his   sight.   Oscar   was   smirking
+self-satisfiedly.
+     "Hello,  Ivan,"  said  Matia.  "Meet  your  back-up, Oscar
+Pebblebridge, from the southwest section."
+     We shook hands. What I  have  always  disliked  about  our
+Security  Council  is  the  plethora  of  mossy traditions, and
+especially   infuriating   is    the    idiotic    system    of
+cross-investigation,  due  to  which we are constantly tripping
+over each other's sleuthing, busting each other's mugs, and not
+uncommonly shooting each other with fair accuracy. I can hardly
+see that as serious work -- more like  adolescents  playing  at
+detectives. Let them go soak their heads in a swamp.
+     "I was going to take you in today," confided Oscar. "Never
+in my life have I seen such a suspicious character."
+     Without saying a word, I took the pistol out of my pocket,
+unloaded it, and threw it in the desk drawer. Oscar followed my
+actions  with approval. I said, addressing Matia, "I guess that
+the  investigation  would  simply  collapse,  without   getting
+started,  had I known about Oscar. But I must inform you that I
+almost maimed him yesterday."
+     "I read you right," said Oscar smugly.
+     Grunting, Matia lowered himself into the armchair.
+     "I can't ever remember a situation," he said,  "when  Ivan
+was  pleased  with everything. But conspiracy is the foundation
+of our business.... Take a chair and sit  down,  both  of  you.
+You,  Oscar,  had  no right to be maimed, and you, Ivan, had no
+right to be arrested. That's how you should regard it. And what
+have you got here?" he said, taking off  his  dark  glasses  to
+look  at the slugs, "Taking up radio as a hobby in between your
+work? Laudable, laudable!"
+     It was evident that they didn't know a  thing.  Oscar  was
+leafing through his notebook, where everything was encrypted in
+his  own personal code, and was apparently preparing himself to
+make a report, while Matia scanned  over  the  slugs  with  his
+fleshy  nose,  holding the glasses aloft in his hand. There was
+something symbolic in this spectacle.
+     "And so, agent Zhilin is enriching his leisure with  radio
+technology," continued Matia, restoring his glasses and leaning
+back  in  his chair. "He has lots of free time, he has switched
+to a four-hour day.... And bow do you stand on the question  of
+the  meaning  of  life,  agent  Zhilin? It appears you may have
+found it. I hope it won't be necessary to take  you  away  like
+agent Rimeyer?"
+     "It  won't be required," I said. "I had not enough time to
+become addicted. Did Rimeyer tell you anything?"
+     "But of course not,"  he  said  with  vast  sarcasm.  "Why
+should he do that? He was ordered to find the drug, and he did,
+and  he  used  it,  and  now  he  apparently considers his duty
+discharged. He became an addict himself, don't you see.  He  is
+silent.  He  is  loaded with this brew up to his ears, and it's
+useless to talk to him! He raves that he has murdered  you  and
+constantly  asks  for his radio." Matia stopped short and gazed
+at the radios. "Strange," he said and looked at me. "However, I
+like orderliness. Oscar got here  first,  and  he  has  certain
+deductions  both  about  the  goodies  and  the  conduct of the
+operation. Let's begin with him."
+     I looked at Oscar.
+     "About what operation?"
+     "The devil knows," said Matia.
+     "The raiding of the center. You haven't located the center
+yet?"
+     The hunt is on, I thought, and  said,  "No,  I  didn't.  A
+center I haven't latched on to. But --"
+     "All  in good order, in proper order," said Matia severely
+and banged the table with the flat of his hand. "Oscar, you may
+begin, and as for you, Ivan, you listen  attentively  and  make
+your deductions. If you are still capable, that is."
+     Oscar  began.  Obviously  he  was  a good worker. He moved
+fast,  energetically,  and  purposefully.  True,  Rimeyer   had
+twisted   him   around  his  finger  as  well  as  he  had  me.
+Nevertheless, Oscar had been able to grasp much in spite of it.
+He understood that the sought-for "goodies" were known  locally
+as  "slug."  Very rapidly he had grasped the connection between
+slug and Devon. He divined that neither the  Fishers,  nor  the
+Perches,  nor the Sorrowers had any relation to our problem. He
+had deduced with superb  insight  that  in  this  town  it  was
+practically  impossible  to  hide  any secret. He had even been
+able to insinuate himself into the confidence  of  the  Intels,
+and  had  established beyond any doubt that there were only two
+truly secret societies -- the Art Patrons and the Intels. Since
+the Art  Patrons  could  be  eliminated,  that  left  only  the
+Intels....
+     "It  was  not  contrary  to  the  conviction  which  I had
+formed," said Oscar, "that  the  only  people  with  access  to
+laboratories   and   capable   of   conducting   scientific  or
+quasi-scientific research were the students and  professors  in
+the  university.  It's true that the factories in the city also
+have laboratories. There are only four  of  them,  and  I  have
+investigated  them  all.  These  laboratories  are  stringently
+specialized and are loaded to the limit with ongoing  work.  As
+the  factories  work  around  the  clock,  there  is  no  basis
+whatsoever to postulate that the industrial labs  could  become
+centers  of  slug  manufacture.  On  the other hand, out of the
+seven university labs, two are  obviously  surrounded  with  an
+atmosphere  of  mystery. I was unable to determine what goes on
+in them, but I spotted three students, who, I  believe,  should
+know for sure...."
+     I listened to him intently, amazed at how much he had been
+able to accomplish here, but it was already all too clear to me
+where  his main error lay. I could see he was following a false
+trail, and alongside of that, there  grew  within  me  a  vague
+feeling  of an even more significant error, of a most important
+error, the error in the underlying premises of the Council.
+     "I arrived at the  visualization,"  he  continued,  "of  a
+gangsterlike  organization of the vertical type with rigorously
+separated functions in decentralized sections.  The  production
+section  is  involved  in the manufacture and perfection of the
+slug.... I should inform you that slug, whatever it may be,  is
+being perfected: I was able to establish that in the beginning.
+Devon  was  not employed at all.... Next, the marketing section
+is concerned with expanding the slug  distribution,  while  the
+strong-arm section terrorizes the population and interdicts all
+debate on that topic.... The intimidation of the people..."
+     Now I understood it all.
+     "Just a minute, Oscar," I said. "Can you guarantee that in
+the entire city there are only two secret organizations?"
+     "Yes," he said. "Only the Art Patrons and the Intels."
+     "Please  continue, Oscar," said Matia with displeasure. "I
+would ask you not to interrupt, Ivan."
+     "Sorry," I said. Oscar continued to talk,  but  I  was  no
+longer  listening. Something flared in my mind. The traditional
+initial model for all  our  undertakings,  with  its  invariant
+axiom  predicating  the existence of a ramified organization of
+evildoers, had been shattered into dust, and I was only  amazed
+that  I had failed heretofore to recognize its inane complexity
+in the context of this simple-minded  country.  There  were  no
+secret  shops  guarded  by  gloomy persons with brass knuckles,
+there were no wary, unprincipled  businessmen,  there  were  no
+traveling  salesmen  with  double-walled  shirt collars stuffed
+with contraband, and it was quite for nothing  that  Oscar  was
+drafting the elegant chart of squares and circles, connected by
+a  confusion  of  lines, and inscribed with the words "center,"
+"staff," and numerous question  marks.  There  was  nothing  to
+demolish  and  be and no one to send off to Baffin Land.... But
+there was modern industry involved  in  everyday  trade,  there
+were state stores where slugs were sold for fifty cents apiece,
+and  there  were  --  but  only  in  the  beginning  one or two
+individuals not devoid of inventiveness and dying of inactivity
+and  thirsting  for  new  sensations.   And   there   was   the
+medium-sized  country  where,  once  upon a time, abundance and
+affluence were the end to  be  attained,  and  they  never  did
+become  the  means  to  another  end. And that was all that was
+needed.
+     Someone inserted a slug into a radio by  mistake  and  lay
+down  in  the bath to relax and maybe listen to some good music
+or to hear the latest news -- and it started.  The  news  oozed
+and remnants of phonors found their way into the garbage ducts,
+then  someone figured out that slugs could be obtained not only
+from phonors, but could simply be bought in stores. Someone was
+inspired to use aromatic  salts  and  someone  employed  Devon.
+People  started  to die in their baths from nervous exhaustion,
+and  the  statistical  department  of  the   Security   Council
+submitted  a  top  secret  report  to  the Presidium. It became
+apparent at once that all such deaths occurred with people  who
+had come here as tourists. And furthermore, that there were far
+more  such  deaths  in  this  country than anywhere else on the
+planet. As so often happens, a false theory was constructed  on
+well-verified  facts,  and we, one after another, well schooled
+in conspiracy, were sent here to uncover  the  secret  gang  of
+dealers  in a new and unknown drug, and we arrived here and did
+stupid things. But, as always, no labor goes for naught, and if
+you must look for the guilty, then all were  guilty,  from  the
+mayor to Rimeyer, and if so, then no one was guilty, and now we
+have to --
+     "Ivan," said Matia irritably, "are you asleep?"
+     They  were  both looking at me. Oscar was extending me his
+notebook with the diagrams. I took the notebook and threw it on
+the table.
+     "Listen," I said. "Oscar has done wonders, of course,  but
+we  have come a cropper again! Oscar, you have seen such a lot,
+but you understood nothing. If there are  any  people  in  this
+land  who  hate  slug,  it's  the  Intels.  The  Intels are not
+gangsters, they are desperate men and patriots. They  have  but
+one  aim  --  to stir this bog. By any means. To give this city
+some kind of purpose, to force it away from the trough They are
+sacrificing themselves, do you  understand?  They  invite  fire
+upon themselves, they are attempting to arouse the town to come
+sort  of common emotion, even if it has to be hatred. Can it be
+you haven't heard of the tear  gas,  the  shooting  up  of  the
+shivers? They are not making slug in the laboratories, they are
+building  bombs and cooking tear gas ... and generally breaking
+the laws on weapons technology. They are preparing a putsch for
+the twenty-eighth, but as for slug -- here it is!"
+     I shoved one at each of them, and simultaneously expounded
+everything I thought on the subject.
+     At first, they listened to  me  in  disbelief.  Then  they
+stared  at  the slugs, not taking their eyes off them until I'd
+finished, and when I did, they were quiet for  quite  a  while.
+Matia held his slug as though it were a buzzing wasp. There was
+displeasure written on his face.
+     "Vacuum  tubusoid...  Hmmm...  In  fact...  and radios ...
+there is something to it."
+     Matia stuck the slug in his  shirt  pocket  and  announced
+decisively,  "There  is nothing in it. That is, of course, I am
+very pleased with you, Ivan, since you  have  apparently  found
+that  which was needed, but your work is in the Council and not
+with the Commission of World Problems.  They  adore  philosophy
+there,  and  haven't done a single useful thing to date. As for
+you, you have been working with us for ten years now,  but  you
+still  haven't  grasped  the simple truth: if there is a crime,
+there must be a criminal."
+     'That's not true," I said.
+     "That is true!" said Matia. "Don't start a debate with me!
+You are eternally debating!... Be quiet, Oscar. It's my turn to
+talk. I am asking you, Ivan, what is the worth of your version?
+What do  you  propose  to  do?  But  be  concrete,  please!  Be
+concrete!"
+     "Concretely..." I faltered.
+     True enough, my version did not suit them.
+     They probably didn't even consider it a version.
+     For  them it was just philosophizing. They were men, so to
+say,  of  resolute  action,  knights  of   immediate   decisive
+measures.,  They  let nothing slide. They cut through knots and
+demounted Damocles' swords.  They  made  rapid  decisions,  and
+having  made them, they no longer doubted. They didn't know how
+to be otherwise. That was their world-view --  and  I  was  the
+only  one  to  consider that their time had passed. Patience, I
+thought. I am going to need an awful lot of patience. Suddenly,
+I understood that life's logic was again ripping me  away  from
+my  best comrades, and that now it would be especially hard for
+me, since the resolution of this argument  would  take  a  long
+time, a very long time.... They were both looking at me.
+     "Concretely," I repeated. "Concretely I suggest a plan for
+the development  and  spread  of a humanistic viewpoint in this
+country."
+     Oscar grimaced with distaste, and Matia said biliously:
+     "Nah! I am talking seriously."
+     "So am I. What we need is not detectives, nor squads armed
+with machine pistols."
+     "We need a decision!" said Matia, "not conversations,  but
+decisions!"
+     'That's precisely what I am proposing -- a decision."
+     Matia reddened
+     "We  have  to  save  people,"  he said. "Souls we can save
+after we save the people.... Don't annoy me, Ivan!"
+     "While you are  restructuring  world-views,"  said  Oscar,
+"people will be dying or turning into idiots."
+     I  didn't  want  to  argue,  but  said anyway, "As long as
+world-views are not restructured,  people  will  be  dying  and
+turning   into  idiots,  and  no  squads  will  help.  Remember
+Rimeyer!"
+     "Rimeyer forgot his duty," raged Matia.
+     "Exactly," said I.
+     Matia slammed his mouth shut and, tearing off his glasses,
+was silent for a while, his  eyes  rotating  angrily.  He  was,
+without  a  doubt, a man of iron; you could actually watch turn
+drive his rage inward. In a minute he  was  entirely  calm  and
+smiling placidly.
+     "Yes,"  he  said. "It seems that I am forced to admit that
+intelligence as a  social  institution  has  regressed  to  the
+piteous  end.  Apparently  we  destroyed  the  last of the true
+operatives in  the  time  of  the  last  putsches.  "Knife"  --
+Dannziger;  "Bamboo"  --  Savada;  "Doll"  --  Grover; "Ram" --
+Boas... True, they were bought and they were sold, they had  no
+country,  they were scum, lumpens, but they worked! "Sirius" --
+Haram... worked for four intelligences and was a scoundrel.  He
+was  a  filthy  animal. But if he gave information, it was real
+information,  clear,  precise,  and  timely.  I  can  recollect
+ordering  him  hung without the slightest pity, but when I look
+at my current co-workers, I can understand what a loss
+     that was.... Granted, a man can fail in the end and become
+a drug addict, as "Bamboo" Savada did finally.  But  why  write
+lying  reports? Rather resign, excuse yourself, don't write any
+reports at all.... I  arrive  in  this  town  in  the  profound
+conviction  that  I know it through and through, because I have
+had here for ten years an experienced, proved, resident  agent.
+And  suddenly  I determine that I know precisely nothing. Every
+local kid knows who the Fishers are. But I don't know.  I  know
+only  that the KVS Society which occupied itself with about the
+same things as the Fishers was  disbanded  and  outlawed  three
+years ago. I know this from the reports of the resident. But at
+the  local police I am informed that the VAL Society was formed
+two years ago, which  I  did  not  learn  from  the  resident's
+reports.  I  am  employing a simplified example, since I really
+don't  give  a  damn  about  the  Fishers,  but  this   becomes
+transformed  into a general style of work. Reports are delayed,
+reports lie, reports misinform... in the end reports are simply
+invented. One man openly resigns from the Council  and  doesn't
+consider  it  incumbent  upon him to so inform his superior. He
+has enough, you see;  he  had  intentions  to  communicate  but
+somehow couldn't find the time.... Another, instead of fighting
+the  drug  problem, becomes an addict himself.... And the third
+philosophizes."
+     He nodded at me with regretful bitterness.
+     "Understand me correctly, Ivan," he continued. "I  am  not
+opposed to philosophy. But philosophy is one thing and our work
+altogether  another.  Judge  for yourself, Ivan. If there is no
+secret  headquarters,  if  we  are  faced  with  a  deluge   of
+do-it-yourself  enterprise, then why all the secretiveness? All
+this conspiratorial atmosphere? Why is slug enveloped  in  such
+mystery?  I  allow  that  Rimeyer is silent because of pangs of
+conscience in general and specifically on your  account,  Ivan.
+But  the rest? Slug is not illegal; everyone knows about it and
+yet  everyone  keeps  it  a  secret.   Oscar,   here,   doesn't
+philosophize;  he  postulates  that  the inhabitants are simply
+terrorized. I can understand that. And what do  you  postulate,
+Ivan?"
+     "In  your  pocket,"  I  said,  "there is a slug. Go in the
+bathroom. There's Devon on the shelf -- one tablet orally, four
+in the water. There's some whiskey in the medicine chest. Oscar
+and I will wait. And then you can tell  us  aloud,  so  we  can
+hear,  we your comrades in work and your underlings, about your
+sensations and experiences. And we -- better it should be Oscar
+-- should listen, but as for me, I think I'll leave."
+     Matia put on his glasses and stared at me.
+     "You are implying that I won't tell? You propose  that  I,
+too, will be derelict in my duty?"
+     "What  you  will learn will have no relation whatsoever to
+your duty.  That  you  will  renege  on  subsequently.  As  did
+Rimeyer.  Comrades,  this  is  slug.  It's a cute device, which
+awakens fantasy and directs  it  where  it  will,  particularly
+where  you yourself subconsciously -- and I mean subconsciously
+-- would like to direct it. The further you  are  removed  from
+the  animal, the more inoffensive would slug be, but the closer
+to the animal, the more you would be impelled to adhere to  the
+conspiratorial  way.  The  animals  themselves  are  altogether
+silent. They just know how to press the lever."
+     "What lever?"
+     I explained about the rats to them.
+     "Did you try it yourself?" asked Matia.
+     "Yes."
+     "And?"
+     "As you can see, I tend to silence."
+     Matia sibilated for some time and then said, "Well,  I  am
+no nearer to the animal than you are. How do you put it in?"
+     I  loaded  the  radio  and  handed  it  to  him. Oscar was
+following all this with interest.
+     "God be with me," said Matia, "Where is  your  bath?  I'll
+wash after my trip while I'm at it."
+     He  locked  himself  in,  and  we  could hear him dropping
+things.
+     "Strange affair," said Oscar.
+     "It's really not an affair," I contradicted. "It's a piece
+of history, Oscar, and you would like to fit it into a file and
+tie it with a ribbon. But this  is  no  gangster  business.  It
+should be obvious to a hedgehog, as Yurkovsky used to say."
+     "Who?"
+     "Yurkovsky,   Vladimir  Sergeyevitch.  There  was  such  a
+renowned planetologist. I worked with him."
+     "Aah," said Oscar, "By the way, on the plaza by the  Hotel
+Olympic there is a monument to a Yurkovsky."
+     "The very same man."
+     "Really?"  said  Oscar.  "On  the  other  hand, it's quite
+possible. However, the monument was not put up because he was a
+renowned planetologist. It's simply that for the first time  in
+the history of the city, he broke the electronic roulette bank.
+It was decided to immortalize such a feat."
+     "I  expected  something  of  the sort," I murmured. I felt
+depressed.
+     The shower began to hiss in the bathroom, and there was  a
+frightful  roar  from Matia, At first, I decided that he turned
+on ice water instead of warm, but  he  kept  yelling  and  then
+began  to  curse  in  the  most  horrendous  terms. Oscar and I
+exchanged glances. He was generally calm, interpreting this  as
+the   typical   action  of  slug,  and  his  face  exhibited  a
+compassionate expression. The latch rattled  wildly,  the  door
+flew  open with a crash. Bare heels slapped in the bedroom, and
+a naked Matia rolled into the study.
+     "Are you some kind of an idiot?" he bellowed at me.  "What
+sort of filthy trick is this?"
+     I  went  numb.  Matia  resembled  a  grotesque  zebra. His
+well-fed body was covered with poison-green  vertical  stripes.
+He reared and stamped his feet, spraying emerald drops. When we
+regained  our  composure  and  investigated  the  site  of  the
+accident, we learned that the shower head had been stuffed with
+a sponge saturated with a green dye. I  remembered  Len's  note
+and guessed that Vousi was the culprit. It took a long while to
+restore  a  normal  atmosphere.  Matia viewed the incident as a
+boorish joke  and  an  inadmissible  disregard  of  subordinate
+discipline  and behavior. Oscar horse-laughed. I scrubbed Matia
+with a brush and explained. Then Matia announced that from  now
+on  he wouldn't trust anyone and would try out slug when he got
+home. He dressed and went into conference  with  Oscar  on  the
+plans for blockading the city.
+     I was cleaning up in the bath and thinking that with this,
+my work  in  the Council was coming to an end, and another kind
+of work was beginning -- which I did not know how to  begin.  I
+would  have  liked  to include myself in the blockade planning,
+not because I considered it necessary, but because  it  was  so
+simple,  so  much  more  simple  than to return to people their
+souls which had been devoured by affluence, and to  teach  each
+one  to  think  of  world  problems  in the same way as his own
+personal ones.
+     "Isolate this pus bag from the rest of the world,  isolate
+it  totally, that's the total of our philosophy," orated Matia.
+That was aimed at me. But perhaps not even me. For Matia was  a
+brilliant  mind.  He  understood  too  well  that isolation was
+always a defense, but here we had to attack. But he knew how to
+advance only with squads, and this was embarrassing to him.
+     To rescue. For how long  would  you  need  rescuing?  When
+would  you  learn  to rescue yourselves? Why were you eternally
+harkening to priests, fascists, demagogues, and imbecile Opirs?
+Why didn't you want to exert your brains? Why  did  you  resist
+thinking  so?  Why  couldn't  you  understand that the world is
+vast, complex, and fascinating? Why was everything  simple  and
+boring  tc  you? In what way did your mind differ from the mind
+of Rabelais, Swift, Lenin, Einstein, Makarenko, Hemingway,  and
+Strogoff?  Someday I would grow tired of all this. Someday when
+I had no more strength and conviction. For  I  was  similar  to
+you.  But  I  wanted  to  help you, and you didn't want to help
+me....
+     <i>Reg and Len came over after school, and Len  said,  "We
+have decided, Ivan. We will go to the Gobi Central." He had red
+fuzz  on  his  lip  and huge red hands, and I could see that it
+divas he who had thought up the Gobi trip, and  quite  recently
+-- not  more  than  ten minutes ago. Reg, as usual, was silent,
+chewing on a blade of grass and placidly studying me  with  his
+calm  gray  eyes. He has become altogether a square, I thought,
+and said, "Wonderful book, isn't it?" "Yes, indeed," said  Len.
+"We  understood  at  once  where  we should go." Reg was quiet.
+"Heat and stench are suspended in  the  shadow  of  these  hard
+laboring  dragons," I said from memory. "They devour everything
+under them -- the ancient Mongolian prayer gate, the bones of a
+two-humped beast fallen in some sand storm..." "Yes," said Len,
+while Reg went on chewing his blade of grass. "Every  time,"  I
+continued  (now  from  Ichin-dagli), "that the sun arrives at a
+mathematically precise  required  position,  a  strange  mirage
+blossoms out in the East -- of a strange city with white towers
+which  no  one  has yet seen in reality. " "One should see that
+with his own eyes," said Len,  and  laughed.  "Friend  Len,"  I
+said,  "it's too fascinating and therefore too simple. You will
+see that it's  too  simple  yourself  and  it  will  become  an
+unpleasant disappointment." No, I hadn't said it right. "Friend
+Len,"  I  said,  "what  sort  of a mirage is that? Here is one.
+Seven years  ago,  in  your  mother's  house,  I  saw  a  truly
+marvelous  mirage:  both of you standing before me almost grown
+up..." No -- I was saying that for myself,  not  for  them.  It
+should  be said differently. "Friend Len," I said, "seven years
+ago you explained to me that your people were accursed. We came
+here and removed the curse from you and Reg and from many other
+children who had no parents. And now it's your turn to  remove,
+the curse, which..."
+     It  will  be  very difficult, but I'll explain it to them.
+One way or another, I'll get it  across.  We  have  known  from
+childhood  how  to  remove  the curses on the barricades and on
+construction sites and in laboratories, and you will remove the
+last of the  curses,  you  will  be  the  future  teachers  and
+educators.  In  the last war -- the most bloodless and the most
+difficult for its soldiers.</i>
+     Upstairs Vousi screeched and Len started to cry piteously.
+Oscar's voice boomed in the  study.  How  well  off  he  is,  I
+thought. Simple: slug is bad, harmful, unnatural. Therefore, it
+must  be  destroyed,  forbidden by law, and then you must watch
+closely that the  law  is  strictly  enforced.  Only  Matia  is
+smarter  than  that,  because he is older and more experienced.
+Matia can still be pulled over to my side. My word doesn't mean
+anything to him, but others will  be  found  to  whom  he  will
+listen....  How  wonderful  that I can now cry out to the whole
+world and be heard by millions of like-thinkers!
+     And then I thought that I would not leave  this  place.  I
+had  been  here only three days. It could not be that there was
+no one here who would be with us. No one  who  hated  all  this
+with a deadly hatred, who wanted to blast this dull sated world
+out  of its stasis. Such people always existed and always will.
+Perhaps that bibliophile driver or that tall, harsh one of  the
+Intels...  and  who  knew how many more. They stumbled about as
+though they were blind. We would do everything in our power  to
+help  them so that they would not waste their anger on trifles.
+It was our place to be here now. And my place, too.
+     What a labor lies ahead, I thought, what a task!  For  the
+time being, I didn't know where to begin in this Country of the
+Boob,  caught  unprepared  in  a flood of affluence, but I knew
+that I wouldn't leave here as  long  as  the  immigration  laws
+permitted.  And  when they stopped permitting it, I would break
+them....
diff --git a/test/stress/framework/city.cpp b/test/stress/framework/city.cpp
new file mode 100644 (file)
index 0000000..69ba0e6
--- /dev/null
@@ -0,0 +1,630 @@
+// Copyright (c) 2011 Google, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
+// CityHash, by Geoff Pike and Jyrki Alakuijala
+//
+// This file provides CityHash64() and related functions.
+//
+// It's probably possible to create even faster hash functions by
+// writing a program that systematically explores some of the space of
+// possible hash functions, by using SIMD instructions, or by
+// compromising on hash quality.
+
+//#include "config.h"
+#include "city.h"
+#if CDS_BUILD_BITS == 64
+
+#include <algorithm>
+#include <string.h>  // for memcpy and memset
+
+using namespace std;
+
+static uint64 UNALIGNED_LOAD64(const char *p) {
+  uint64 result;
+  memcpy(&result, p, sizeof(result));
+  return result;
+}
+
+static uint32 UNALIGNED_LOAD32(const char *p) {
+  uint32 result;
+  memcpy(&result, p, sizeof(result));
+  return result;
+}
+
+#ifdef _MSC_VER
+
+#include <stdlib.h>
+#define bswap_32(x) _byteswap_ulong(x)
+#define bswap_64(x) _byteswap_uint64(x)
+
+#elif defined(__APPLE__)
+
+// Mac OS X / Darwin features
+#include <libkern/OSByteOrder.h>
+#define bswap_32(x) OSSwapInt32(x)
+#define bswap_64(x) OSSwapInt64(x)
+
+#elif defined(__NetBSD__)
+
+#include <sys/types.h>
+#include <machine/bswap.h>
+#if defined(__BSWAP_RENAME) && !defined(__bswap_32)
+#define bswap_32(x) bswap32(x)
+#define bswap_64(x) bswap64(x)
+#endif
+
+#else
+
+#include <byteswap.h>
+
+#endif
+
+#ifdef WORDS_BIGENDIAN
+#define uint32_in_expected_order(x) (bswap_32(x))
+#define uint64_in_expected_order(x) (bswap_64(x))
+#else
+#define uint32_in_expected_order(x) (x)
+#define uint64_in_expected_order(x) (x)
+#endif
+
+#if !defined(LIKELY)
+#if HAVE_BUILTIN_EXPECT
+#define LIKELY(x) (__builtin_expect(!!(x), 1))
+#else
+#define LIKELY(x) (x)
+#endif
+#endif
+
+static uint64 Fetch64(const char *p) {
+  return uint64_in_expected_order(UNALIGNED_LOAD64(p));
+}
+
+static uint32 Fetch32(const char *p) {
+  return uint32_in_expected_order(UNALIGNED_LOAD32(p));
+}
+
+// Some primes between 2^63 and 2^64 for various uses.
+static const uint64 k0 = 0xc3a5c85c97cb3127ULL;
+static const uint64 k1 = 0xb492b66fbe98f273ULL;
+static const uint64 k2 = 0x9ae16a3b2f90404fULL;
+
+// Magic numbers for 32-bit hashing.  Copied from Murmur3.
+static const uint32_t c1 = 0xcc9e2d51;
+static const uint32_t c2 = 0x1b873593;
+
+// A 32-bit to 32-bit integer hash copied from Murmur3.
+static uint32 fmix(uint32 h)
+{
+  h ^= h >> 16;
+  h *= 0x85ebca6b;
+  h ^= h >> 13;
+  h *= 0xc2b2ae35;
+  h ^= h >> 16;
+  return h;
+}
+
+static uint32 Rotate32(uint32 val, int shift) {
+  // Avoid shifting by 32: doing so yields an undefined result.
+  return shift == 0 ? val : ((val >> shift) | (val << (32 - shift)));
+}
+
+#undef PERMUTE3
+#define PERMUTE3(a, b, c) do { std::swap(a, b); std::swap(a, c); } while (0)
+
+static uint32 Mur(uint32 a, uint32 h) {
+  // Helper from Murmur3 for combining two 32-bit values.
+  a *= c1;
+  a = Rotate32(a, 17);
+  a *= c2;
+  h ^= a;
+  h = Rotate32(h, 19);
+  return h * 5 + 0xe6546b64;
+}
+
+static uint32 Hash32Len13to24(const char *s, size_t len) {
+  uint32 a = Fetch32(s - 4 + (len >> 1));
+  uint32 b = Fetch32(s + 4);
+  uint32 c = Fetch32(s + len - 8);
+  uint32 d = Fetch32(s + (len >> 1));
+  uint32 e = Fetch32(s);
+  uint32 f = Fetch32(s + len - 4);
+  uint32 h = len;
+
+  return fmix(Mur(f, Mur(e, Mur(d, Mur(c, Mur(b, Mur(a, h)))))));
+}
+
+static uint32 Hash32Len0to4(const char *s, size_t len) {
+  uint32 b = 0;
+  uint32 c = 9;
+  for (int i = 0; i < len; i++) {
+    signed char v = s[i];
+    b = b * c1 + v;
+    c ^= b;
+  }
+  return fmix(Mur(b, Mur(len, c)));
+}
+
+static uint32 Hash32Len5to12(const char *s, size_t len) {
+  uint32 a = len, b = len * 5, c = 9, d = b;
+  a += Fetch32(s);
+  b += Fetch32(s + len - 4);
+  c += Fetch32(s + ((len >> 1) & 4));
+  return fmix(Mur(c, Mur(b, Mur(a, d))));
+}
+
+uint32 CityHash32(const char *s, size_t len) {
+  if (len <= 24) {
+    return len <= 12 ?
+        (len <= 4 ? Hash32Len0to4(s, len) : Hash32Len5to12(s, len)) :
+        Hash32Len13to24(s, len);
+  }
+
+  // len > 24
+  uint32 h = len, g = c1 * len, f = g;
+  uint32 a0 = Rotate32(Fetch32(s + len - 4) * c1, 17) * c2;
+  uint32 a1 = Rotate32(Fetch32(s + len - 8) * c1, 17) * c2;
+  uint32 a2 = Rotate32(Fetch32(s + len - 16) * c1, 17) * c2;
+  uint32 a3 = Rotate32(Fetch32(s + len - 12) * c1, 17) * c2;
+  uint32 a4 = Rotate32(Fetch32(s + len - 20) * c1, 17) * c2;
+  h ^= a0;
+  h = Rotate32(h, 19);
+  h = h * 5 + 0xe6546b64;
+  h ^= a2;
+  h = Rotate32(h, 19);
+  h = h * 5 + 0xe6546b64;
+  g ^= a1;
+  g = Rotate32(g, 19);
+  g = g * 5 + 0xe6546b64;
+  g ^= a3;
+  g = Rotate32(g, 19);
+  g = g * 5 + 0xe6546b64;
+  f += a4;
+  f = Rotate32(f, 19);
+  f = f * 5 + 0xe6546b64;
+  size_t iters = (len - 1) / 20;
+  do {
+    uint32 a0 = Rotate32(Fetch32(s) * c1, 17) * c2;
+    uint32 a1 = Fetch32(s + 4);
+    uint32 a2 = Rotate32(Fetch32(s + 8) * c1, 17) * c2;
+    uint32 a3 = Rotate32(Fetch32(s + 12) * c1, 17) * c2;
+    uint32 a4 = Fetch32(s + 16);
+    h ^= a0;
+    h = Rotate32(h, 18);
+    h = h * 5 + 0xe6546b64;
+    f += a1;
+    f = Rotate32(f, 19);
+    f = f * c1;
+    g += a2;
+    g = Rotate32(g, 18);
+    g = g * 5 + 0xe6546b64;
+    h ^= a3 + a1;
+    h = Rotate32(h, 19);
+    h = h * 5 + 0xe6546b64;
+    g ^= a4;
+    g = bswap_32(g) * 5;
+    h += a4 * 5;
+    h = bswap_32(h);
+    f += a0;
+    PERMUTE3(f, h, g);
+    s += 20;
+  } while (--iters != 0);
+  g = Rotate32(g, 11) * c1;
+  g = Rotate32(g, 17) * c1;
+  f = Rotate32(f, 11) * c1;
+  f = Rotate32(f, 17) * c1;
+  h = Rotate32(h + g, 19);
+  h = h * 5 + 0xe6546b64;
+  h = Rotate32(h, 17) * c1;
+  h = Rotate32(h + f, 19);
+  h = h * 5 + 0xe6546b64;
+  h = Rotate32(h, 17) * c1;
+  return h;
+}
+
+// Bitwise right rotate.  Normally this will compile to a single
+// instruction, especially if the shift is a manifest constant.
+static uint64 Rotate(uint64 val, int shift) {
+  // Avoid shifting by 64: doing so yields an undefined result.
+  return shift == 0 ? val : ((val >> shift) | (val << (64 - shift)));
+}
+
+static uint64 ShiftMix(uint64 val) {
+  return val ^ (val >> 47);
+}
+
+static uint64 HashLen16(uint64 u, uint64 v) {
+  return Hash128to64(uint128(u, v));
+}
+
+static uint64 HashLen16(uint64 u, uint64 v, uint64 mul) {
+  // Murmur-inspired hashing.
+  uint64 a = (u ^ v) * mul;
+  a ^= (a >> 47);
+  uint64 b = (v ^ a) * mul;
+  b ^= (b >> 47);
+  b *= mul;
+  return b;
+}
+
+static uint64 HashLen0to16(const char *s, size_t len) {
+  if (len >= 8) {
+    uint64 mul = k2 + len * 2;
+    uint64 a = Fetch64(s) + k2;
+    uint64 b = Fetch64(s + len - 8);
+    uint64 c = Rotate(b, 37) * mul + a;
+    uint64 d = (Rotate(a, 25) + b) * mul;
+    return HashLen16(c, d, mul);
+  }
+  if (len >= 4) {
+    uint64 mul = k2 + len * 2;
+    uint64 a = Fetch32(s);
+    return HashLen16(len + (a << 3), Fetch32(s + len - 4), mul);
+  }
+  if (len > 0) {
+    uint8 a = s[0];
+    uint8 b = s[len >> 1];
+    uint8 c = s[len - 1];
+    uint32 y = static_cast<uint32>(a) + (static_cast<uint32>(b) << 8);
+    uint32 z = len + (static_cast<uint32>(c) << 2);
+    return ShiftMix(y * k2 ^ z * k0) * k2;
+  }
+  return k2;
+}
+
+// This probably works well for 16-byte strings as well, but it may be overkill
+// in that case.
+static uint64 HashLen17to32(const char *s, size_t len) {
+  uint64 mul = k2 + len * 2;
+  uint64 a = Fetch64(s) * k1;
+  uint64 b = Fetch64(s + 8);
+  uint64 c = Fetch64(s + len - 8) * mul;
+  uint64 d = Fetch64(s + len - 16) * k2;
+  return HashLen16(Rotate(a + b, 43) + Rotate(c, 30) + d,
+                   a + Rotate(b + k2, 18) + c, mul);
+}
+
+// Return a 16-byte hash for 48 bytes.  Quick and dirty.
+// Callers do best to use "random-looking" values for a and b.
+static pair<uint64, uint64> WeakHashLen32WithSeeds(
+    uint64 w, uint64 x, uint64 y, uint64 z, uint64 a, uint64 b) {
+  a += w;
+  b = Rotate(b + a + z, 21);
+  uint64 c = a;
+  a += x;
+  a += y;
+  b += Rotate(a, 44);
+  return make_pair(a + z, b + c);
+}
+
+// Return a 16-byte hash for s[0] ... s[31], a, and b.  Quick and dirty.
+static pair<uint64, uint64> WeakHashLen32WithSeeds(
+    const char* s, uint64 a, uint64 b) {
+  return WeakHashLen32WithSeeds(Fetch64(s),
+                                Fetch64(s + 8),
+                                Fetch64(s + 16),
+                                Fetch64(s + 24),
+                                a,
+                                b);
+}
+
+// Return an 8-byte hash for 33 to 64 bytes.
+static uint64 HashLen33to64(const char *s, size_t len) {
+  uint64 mul = k2 + len * 2;
+  uint64 a = Fetch64(s) * k2;
+  uint64 b = Fetch64(s + 8);
+  uint64 c = Fetch64(s + len - 24);
+  uint64 d = Fetch64(s + len - 32);
+  uint64 e = Fetch64(s + 16) * k2;
+  uint64 f = Fetch64(s + 24) * 9;
+  uint64 g = Fetch64(s + len - 8);
+  uint64 h = Fetch64(s + len - 16) * mul;
+  uint64 u = Rotate(a + g, 43) + (Rotate(b, 30) + c) * 9;
+  uint64 v = ((a + g) ^ d) + f + 1;
+  uint64 w = bswap_64((u + v) * mul) + h;
+  uint64 x = Rotate(e + f, 42) + c;
+  uint64 y = (bswap_64((v + w) * mul) + g) * mul;
+  uint64 z = e + f + c;
+  a = bswap_64((x + z) * mul + y) + b;
+  b = ShiftMix((z + a) * mul + d + h) * mul;
+  return b + x;
+}
+
+uint64 CityHash64(const char *s, size_t len) {
+  if (len <= 32) {
+    if (len <= 16) {
+      return HashLen0to16(s, len);
+    } else {
+      return HashLen17to32(s, len);
+    }
+  } else if (len <= 64) {
+    return HashLen33to64(s, len);
+  }
+
+  // For strings over 64 bytes we hash the end first, and then as we
+  // loop we keep 56 bytes of state: v, w, x, y, and z.
+  uint64 x = Fetch64(s + len - 40);
+  uint64 y = Fetch64(s + len - 16) + Fetch64(s + len - 56);
+  uint64 z = HashLen16(Fetch64(s + len - 48) + len, Fetch64(s + len - 24));
+  pair<uint64, uint64> v = WeakHashLen32WithSeeds(s + len - 64, len, z);
+  pair<uint64, uint64> w = WeakHashLen32WithSeeds(s + len - 32, y + k1, x);
+  x = x * k1 + Fetch64(s);
+
+  // Decrease len to the nearest multiple of 64, and operate on 64-byte chunks.
+  len = (len - 1) & ~static_cast<size_t>(63);
+  do {
+    x = Rotate(x + y + v.first + Fetch64(s + 8), 37) * k1;
+    y = Rotate(y + v.second + Fetch64(s + 48), 42) * k1;
+    x ^= w.second;
+    y += v.first + Fetch64(s + 40);
+    z = Rotate(z + w.first, 33) * k1;
+    v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first);
+    w = WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch64(s + 16));
+    std::swap(z, x);
+    s += 64;
+    len -= 64;
+  } while (len != 0);
+  return HashLen16(HashLen16(v.first, w.first) + ShiftMix(y) * k1 + z,
+                   HashLen16(v.second, w.second) + x);
+}
+
+uint64 CityHash64WithSeed(const char *s, size_t len, uint64 seed) {
+  return CityHash64WithSeeds(s, len, k2, seed);
+}
+
+uint64 CityHash64WithSeeds(const char *s, size_t len,
+                           uint64 seed0, uint64 seed1) {
+  return HashLen16(CityHash64(s, len) - seed0, seed1);
+}
+
+// A subroutine for CityHash128().  Returns a decent 128-bit hash for strings
+// of any length representable in signed long.  Based on City and Murmur.
+static uint128 CityMurmur(const char *s, size_t len, uint128 seed) {
+  uint64 a = Uint128Low64(seed);
+  uint64 b = Uint128High64(seed);
+  uint64 c = 0;
+  uint64 d = 0;
+  signed long l = len - 16;
+  if (l <= 0) {  // len <= 16
+    a = ShiftMix(a * k1) * k1;
+    c = b * k1 + HashLen0to16(s, len);
+    d = ShiftMix(a + (len >= 8 ? Fetch64(s) : c));
+  } else {  // len > 16
+    c = HashLen16(Fetch64(s + len - 8) + k1, a);
+    d = HashLen16(b + len, c + Fetch64(s + len - 16));
+    a += d;
+    do {
+      a ^= ShiftMix(Fetch64(s) * k1) * k1;
+      a *= k1;
+      b ^= a;
+      c ^= ShiftMix(Fetch64(s + 8) * k1) * k1;
+      c *= k1;
+      d ^= c;
+      s += 16;
+      l -= 16;
+    } while (l > 0);
+  }
+  a = HashLen16(a, c);
+  b = HashLen16(d, b);
+  return uint128(a ^ b, HashLen16(b, a));
+}
+
+uint128 CityHash128WithSeed(const char *s, size_t len, uint128 seed) {
+  if (len < 128) {
+    return CityMurmur(s, len, seed);
+  }
+
+  // We expect len >= 128 to be the common case.  Keep 56 bytes of state:
+  // v, w, x, y, and z.
+  pair<uint64, uint64> v, w;
+  uint64 x = Uint128Low64(seed);
+  uint64 y = Uint128High64(seed);
+  uint64 z = len * k1;
+  v.first = Rotate(y ^ k1, 49) * k1 + Fetch64(s);
+  v.second = Rotate(v.first, 42) * k1 + Fetch64(s + 8);
+  w.first = Rotate(y + z, 35) * k1 + x;
+  w.second = Rotate(x + Fetch64(s + 88), 53) * k1;
+
+  // This is the same inner loop as CityHash64(), manually unrolled.
+  do {
+    x = Rotate(x + y + v.first + Fetch64(s + 8), 37) * k1;
+    y = Rotate(y + v.second + Fetch64(s + 48), 42) * k1;
+    x ^= w.second;
+    y += v.first + Fetch64(s + 40);
+    z = Rotate(z + w.first, 33) * k1;
+    v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first);
+    w = WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch64(s + 16));
+    std::swap(z, x);
+    s += 64;
+    x = Rotate(x + y + v.first + Fetch64(s + 8), 37) * k1;
+    y = Rotate(y + v.second + Fetch64(s + 48), 42) * k1;
+    x ^= w.second;
+    y += v.first + Fetch64(s + 40);
+    z = Rotate(z + w.first, 33) * k1;
+    v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first);
+    w = WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch64(s + 16));
+    std::swap(z, x);
+    s += 64;
+    len -= 128;
+  } while (LIKELY(len >= 128));
+  x += Rotate(v.first + z, 49) * k0;
+  y = y * k0 + Rotate(w.second, 37);
+  z = z * k0 + Rotate(w.first, 27);
+  w.first *= 9;
+  v.first *= k0;
+  // If 0 < len < 128, hash up to 4 chunks of 32 bytes each from the end of s.
+  for (size_t tail_done = 0; tail_done < len; ) {
+    tail_done += 32;
+    y = Rotate(x + y, 42) * k0 + v.second;
+    w.first += Fetch64(s + len - tail_done + 16);
+    x = x * k0 + w.first;
+    z += w.second + Fetch64(s + len - tail_done);
+    w.second += v.first;
+    v = WeakHashLen32WithSeeds(s + len - tail_done, v.first + z, v.second);
+    v.first *= k0;
+  }
+  // At this point our 56 bytes of state should contain more than
+  // enough information for a strong 128-bit hash.  We use two
+  // different 56-byte-to-8-byte hashes to get a 16-byte final result.
+  x = HashLen16(x, v.first);
+  y = HashLen16(y + z, w.first);
+  return uint128(HashLen16(x + v.second, w.second) + y,
+                 HashLen16(x + w.second, y + v.second));
+}
+
+uint128 CityHash128(const char *s, size_t len) {
+  return len >= 16 ?
+      CityHash128WithSeed(s + 16, len - 16,
+                          uint128(Fetch64(s), Fetch64(s + 8) + k0)) :
+      CityHash128WithSeed(s, len, uint128(k0, k1));
+}
+
+#ifdef __SSE4_2__
+#include "citycrc.h"
+#include <nmmintrin.h>
+
+// Requires len >= 240.
+static void CityHashCrc256Long(const char *s, size_t len,
+                               uint32 seed, uint64 *result) {
+  uint64 a = Fetch64(s + 56) + k0;
+  uint64 b = Fetch64(s + 96) + k0;
+  uint64 c = result[0] = HashLen16(b, len);
+  uint64 d = result[1] = Fetch64(s + 120) * k0 + len;
+  uint64 e = Fetch64(s + 184) + seed;
+  uint64 f = 0;
+  uint64 g = 0;
+  uint64 h = c + d;
+  uint64 x = seed;
+  uint64 y = 0;
+  uint64 z = 0;
+
+  // 240 bytes of input per iter.
+  size_t iters = len / 240;
+  len -= iters * 240;
+  do {
+#undef CHUNK
+#define CHUNK(r)                                \
+    PERMUTE3(x, z, y);                          \
+    b += Fetch64(s);                            \
+    c += Fetch64(s + 8);                        \
+    d += Fetch64(s + 16);                       \
+    e += Fetch64(s + 24);                       \
+    f += Fetch64(s + 32);                       \
+    a += b;                                     \
+    h += f;                                     \
+    b += c;                                     \
+    f += d;                                     \
+    g += e;                                     \
+    e += z;                                     \
+    g += x;                                     \
+    z = _mm_crc32_u64(z, b + g);                \
+    y = _mm_crc32_u64(y, e + h);                \
+    x = _mm_crc32_u64(x, f + a);                \
+    e = Rotate(e, r);                           \
+    c += e;                                     \
+    s += 40
+
+    CHUNK(0); PERMUTE3(a, h, c);
+    CHUNK(33); PERMUTE3(a, h, f);
+    CHUNK(0); PERMUTE3(b, h, f);
+    CHUNK(42); PERMUTE3(b, h, d);
+    CHUNK(0); PERMUTE3(b, h, e);
+    CHUNK(33); PERMUTE3(a, h, e);
+  } while (--iters > 0);
+
+  while (len >= 40) {
+    CHUNK(29);
+    e ^= Rotate(a, 20);
+    h += Rotate(b, 30);
+    g ^= Rotate(c, 40);
+    f += Rotate(d, 34);
+    PERMUTE3(c, h, g);
+    len -= 40;
+  }
+  if (len > 0) {
+    s = s + len - 40;
+    CHUNK(33);
+    e ^= Rotate(a, 43);
+    h += Rotate(b, 42);
+    g ^= Rotate(c, 41);
+    f += Rotate(d, 40);
+  }
+  result[0] ^= h;
+  result[1] ^= g;
+  g += h;
+  a = HashLen16(a, g + z);
+  x += y << 32;
+  b += x;
+  c = HashLen16(c, z) + h;
+  d = HashLen16(d, e + result[0]);
+  g += e;
+  h += HashLen16(x, f);
+  e = HashLen16(a, d) + g;
+  z = HashLen16(b, c) + a;
+  y = HashLen16(g, h) + c;
+  result[0] = e + z + y + x;
+  a = ShiftMix((a + y) * k0) * k0 + b;
+  result[1] += a + result[0];
+  a = ShiftMix(a * k0) * k0 + c;
+  result[2] = a + result[1];
+  a = ShiftMix((a + e) * k0) * k0;
+  result[3] = a + result[2];
+}
+
+// Requires len < 240.
+static void CityHashCrc256Short(const char *s, size_t len, uint64 *result) {
+  char buf[240];
+  memcpy(buf, s, len);
+  memset(buf + len, 0, 240 - len);
+  CityHashCrc256Long(buf, 240, ~static_cast<uint32>(len), result);
+}
+
+void CityHashCrc256(const char *s, size_t len, uint64 *result) {
+  if (LIKELY(len >= 240)) {
+    CityHashCrc256Long(s, len, 0, result);
+  } else {
+    CityHashCrc256Short(s, len, result);
+  }
+}
+
+uint128 CityHashCrc128WithSeed(const char *s, size_t len, uint128 seed) {
+  if (len <= 900) {
+    return CityHash128WithSeed(s, len, seed);
+  } else {
+    uint64 result[4];
+    CityHashCrc256(s, len, result);
+    uint64 u = Uint128High64(seed) + result[0];
+    uint64 v = Uint128Low64(seed) + result[1];
+    return uint128(HashLen16(u, v + result[2]),
+                   HashLen16(Rotate(v, 32), u * k0 + result[3]));
+  }
+}
+
+uint128 CityHashCrc128(const char *s, size_t len) {
+  if (len <= 900) {
+    return CityHash128(s, len);
+  } else {
+    uint64 result[4];
+    CityHashCrc256(s, len, result);
+    return uint128(result[2], result[3]);
+  }
+}
+
+#endif
+#endif // #if CDS_BUILD_BITS == 64
diff --git a/test/stress/framework/city.h b/test/stress/framework/city.h
new file mode 100644 (file)
index 0000000..2c6744d
--- /dev/null
@@ -0,0 +1 @@
+#include <cds_test/city.h>
\ No newline at end of file
diff --git a/test/stress/framework/config.cpp b/test/stress/framework/config.cpp
new file mode 100644 (file)
index 0000000..14505c0
--- /dev/null
@@ -0,0 +1,153 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <fstream>
+#include <iostream>
+
+#include <cds_test/stress_test.h>
+
+namespace cds_test {
+
+    class config_file
+    {
+        std::map< std::string, config>  m_cfg;
+        config                          m_emptyCfg;
+
+    public:
+        void load( const char * fileName );
+
+        config const& operator[]( const std::string& testName ) const
+        {
+            auto it = m_cfg.find( testName );
+            if ( it != m_cfg.end() )
+                return it->second;
+            return m_emptyCfg;
+        }
+    };
+
+    void config_file::load( const char * fileName )
+    {
+        std::ifstream s;
+        s.open( fileName );
+        if ( !s.is_open() ) {
+            std::cerr << "WARNING: Cannot open test cfg file " << fileName
+                << "\n\tUse default settings"
+                << std::endl;
+            return;
+        }
+
+        std::cout << "Using test config file: " << fileName << std::endl;
+
+        char buf[4096];
+
+        config * pMap = nullptr;
+        while ( !s.eof() ) {
+            s.getline( buf, sizeof( buf ) / sizeof( buf[0] ) );
+            char * pszStr = buf;
+            // trim left
+            while ( *pszStr != 0 && (*pszStr == ' ' || *pszStr == '\t') ) ++pszStr;
+            // trim right
+            char * pszEnd = strchr( pszStr, 0 );
+            if ( pszEnd == pszStr )    // empty srtring
+                continue;
+            --pszEnd;
+            while ( pszEnd != pszStr && (*pszEnd == ' ' || *pszEnd == '\t' || *pszEnd == '\n' || *pszEnd == '\r') ) --pszEnd;
+
+            if ( pszStr == pszEnd )    // empty string
+                continue;
+
+            pszEnd[1] = 0;
+
+            if ( *pszStr == '#' )    // comment
+                continue;
+
+            if ( *pszStr == '[' && *pszEnd == ']' ) {    // chapter header
+                *pszEnd = 0;
+                pMap = &(m_cfg[pszStr + 1]);
+                continue;
+            }
+
+            if ( !pMap )
+                continue;
+
+            char * pszEq = strchr( pszStr, '=' );
+            if ( !pszEq )
+                continue;
+            if ( pszEq == pszStr )
+                continue;
+
+            pszEnd = pszEq;
+            while ( pszStr <= --pszEnd && (*pszEnd == ' ' || *pszEnd == '\t' || *pszEnd == '\n' || *pszEnd == '\r') );
+
+            if ( pszEnd <= pszStr )
+                continue;
+            pszEnd[1] = 0;
+            pMap->m_Cfg[pszStr] = pszEq + 1;
+        }
+        s.close();
+    }
+
+    static config_file s_cfg;
+
+    void init_config( int argc, char **argv )
+    {
+#if defined(_DEBUG) || !defined(NDEBUG)
+        char const * default_cfg_file = "./test-debug.conf";
+#else
+        char const * default_cfg_file = "./test.conf";
+#endif
+        char const * cfg_file = NULL;
+        for ( int i = 0; i < argc; ++i ) {
+            char * arg = argv[i];
+            char * eq = strchr( arg, '=' );
+            if ( eq ) {
+                if ( strncmp( arg, "--cfg", eq - arg ) == 0 )
+                    cfg_file = eq + 1;
+            }
+        }
+
+        if ( !cfg_file )
+            cfg_file = default_cfg_file;
+
+        ::testing::Test::RecordProperty( "config_file", cfg_file );
+        s_cfg.load( cfg_file );
+    }
+
+    /*static*/ config const& stress_fixture::get_config( char const * slot )\r
+    {\r
+        return s_cfg[std::string( slot )];\r
+    }\r
+\r
+    /*static*/ config const& stress_fixture::get_config( std::string const& slot )\r
+    {\r
+        return s_cfg[ slot ];\r
+    }\r
+
+} // namespace cds_test
diff --git a/test/stress/framework/ellen_bintree_update_desc_pool.cpp b/test/stress/framework/ellen_bintree_update_desc_pool.cpp
new file mode 100644 (file)
index 0000000..a8db922
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "ellen_bintree_update_desc_pool.h"
+
+namespace ellen_bintree_pool {
+    update_desc_pool_type s_UpdateDescPool;
+
+    bounded_update_desc_pool_type s_BoundedUpdateDescPool;
+
+    cds::atomicity::event_counter   internal_node_counter::m_nAlloc;
+    cds::atomicity::event_counter   internal_node_counter::m_nFree;
+}
diff --git a/test/stress/framework/ellen_bintree_update_desc_pool.h b/test/stress/framework/ellen_bintree_update_desc_pool.h
new file mode 100644 (file)
index 0000000..bd199c9
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_ELLEN_BINTREE_UPDATE_DESC_POOL_H
+#define CDSUNIT_ELLEN_BINTREE_UPDATE_DESC_POOL_H
+
+#include <cds/urcu/general_instant.h>
+#include <cds/container/details/ellen_bintree_base.h>
+#include <cds/memory/vyukov_queue_pool.h>
+#include <cds/memory/pool_allocator.h>
+
+namespace ellen_bintree_pool {
+    typedef cds::container::ellen_bintree::node_types< cds::urcu::gc< cds::urcu::general_instant<> >, int > node_types; // fake
+    typedef node_types::leaf_node_type     leaf_node;
+    typedef node_types::internal_node_type internal_node;
+    typedef node_types::update_desc_type   update_desc;
+
+    // Update descriptor pool based on Vyukov's queue
+    struct update_desc_pool_traits : public cds::memory::vyukov_queue_pool_traits
+    {
+        typedef cds::opt::v::static_buffer< cds::any_type, 4096 > buffer;
+    };
+
+    typedef cds::memory::vyukov_queue_pool< update_desc, update_desc_pool_traits > update_desc_pool_type;
+    extern update_desc_pool_type s_UpdateDescPool;
+
+    struct update_desc_pool_accessor {
+        typedef update_desc_pool_type::value_type     value_type;
+
+        update_desc_pool_type& operator()() const
+        {
+            return s_UpdateDescPool;
+        }
+    };
+
+    // Update descriptor pool based on bounded Vyukov's queue
+    struct bounded_update_desc_pool_traits : public cds::memory::vyukov_queue_pool_traits
+    {
+        typedef cds::opt::v::static_buffer< cds::any_type, 4096 > buffer;
+    };
+    typedef cds::memory::bounded_vyukov_queue_pool< update_desc, bounded_update_desc_pool_traits > bounded_update_desc_pool_type;
+    extern bounded_update_desc_pool_type s_BoundedUpdateDescPool;
+
+    struct bounded_update_desc_pool_accessor {
+        typedef bounded_update_desc_pool_type::value_type     value_type;
+
+        bounded_update_desc_pool_type& operator()() const
+        {
+            return s_BoundedUpdateDescPool;
+        }
+    };
+
+
+    // Internal node allocator
+    struct internal_node_counter
+    {
+        static cds::atomicity::event_counter   m_nAlloc;
+        static cds::atomicity::event_counter   m_nFree;
+
+        static void onAlloc()
+        {
+            ++m_nAlloc;
+        }
+        static void onFree()
+        {
+            ++m_nFree;
+        }
+
+        static void reset()
+        {
+            m_nAlloc.reset();
+            m_nFree.reset();
+        }
+    };
+
+    template <typename T, typename Alloc = CDS_DEFAULT_ALLOCATOR>
+    class internal_node_allocator
+        : public Alloc::template rebind< T >::other
+        , internal_node_counter
+    {
+        typedef typename Alloc::template rebind< T >::other  base_class;
+    public:
+        template <typename Other>
+        struct rebind {
+            typedef internal_node_allocator< Other, Alloc > other;
+        };
+
+        T * allocate( size_t n, void const * pHint = nullptr )
+        {
+            internal_node_counter::onAlloc();
+            T * p = base_class::allocate( n, pHint );
+            return p;
+        }
+
+        void deallocate( T * p, size_t n )
+        {
+            internal_node_counter::onFree();
+            return base_class::deallocate( p, n );
+        }
+    };
+
+} // namespace ellen_bintree_pool
+
+#endif // #ifndef CDSUNIT_ELLEN_BINTREE_UPDATE_DESC_POOL_H
diff --git a/test/stress/framework/michael_alloc.cpp b/test/stress/framework/michael_alloc.cpp
new file mode 100644 (file)
index 0000000..ec6e3aa
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "michael_alloc.h"
+
+namespace memory {
+    michael_heap s_MichaelHeap;
+}
diff --git a/test/stress/framework/michael_alloc.h b/test/stress/framework/michael_alloc.h
new file mode 100644 (file)
index 0000000..6830599
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSSTRESS_MICHAEL_ALLOC_H
+#define CDSSTRESS_MICHAEL_ALLOC_H
+
+#include <cds/memory/michael/allocator.h>
+#include <memory>
+
+namespace memory {
+
+    typedef cds::memory::michael::Heap<
+        cds::memory::michael::opt::check_bounds< cds::memory::michael::debug_bound_checking >
+    >    michael_heap;
+    extern michael_heap s_MichaelHeap;
+
+    template <class T>
+    class MichaelAllocator
+    {
+        typedef std::allocator<T>               std_allocator;
+    public:
+        // Declare typedefs from std::allocator
+        typedef typename std_allocator::const_pointer   const_pointer;
+        typedef typename std_allocator::pointer         pointer;
+        typedef typename std_allocator::const_reference const_reference;
+        typedef typename std_allocator::reference       reference;
+        typedef typename std_allocator::difference_type difference_type;
+        typedef typename std_allocator::size_type       size_type;
+        typedef typename std_allocator::value_type      value_type;
+
+        // Allocation function
+        pointer allocate( size_type _Count, const void* /*_Hint*/ = nullptr )
+        {
+            return reinterpret_cast<pointer>( s_MichaelHeap.alloc( sizeof(T) * _Count ));
+        }
+
+        // Deallocation function
+        void deallocate( pointer _Ptr, size_type /*_Count*/ )
+        {
+            s_MichaelHeap.free( _Ptr );
+        }
+
+        pointer address( reference r ) const
+        {
+            return &r;
+        }
+        const_pointer address( const_reference r ) const
+        {
+            return &r;
+        }
+        void construct( pointer p, const T& val )
+        {
+            return new( p ) T( val );
+        }
+        void destroy( pointer p )
+        {
+            p->T::~T();
+        }
+
+        // Rebinding allocator to other type
+        template <class Other>
+        struct rebind {
+            typedef MichaelAllocator<Other> other;
+        };
+    };
+}   // namespace memory
+
+#endif // #ifndef CDSSTRESS_MICHAEL_ALLOC_H
diff --git a/test/stress/framework/stress_test.cpp b/test/stress/framework/stress_test.cpp
new file mode 100644 (file)
index 0000000..b9e4d7d
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <fstream>
+#include <iostream>
+#include <cds_test/stress_test.h>
+\r
+namespace cds_test {\r
+\r
+    struct property_stream\r
+    {};\r
+\r
+    /*static*/ property_stream& stress_fixture::propout()\r
+    {\r
+        static property_stream s_prop_stream;\r
+        return s_prop_stream;\r
+    }\r
+\r
+    /*static*/ std::vector<std::string> stress_fixture::load_dictionary()\r
+    {\r
+        std::vector<std::string> arrString;\r
+\r
+        std::ifstream s;
+        char const* filename = "./dictionary.txt";
+        s.open( filename );
+        if ( !s.is_open() ) {
+            std::cerr << "WARNING: Cannot open test file " << filename << std::endl;
+            return arrString;
+        }
+\r
+        std::string line;\r
+        std::getline( s, line );\r
+\r
+        arrString.reserve( std::stoul( line ));\r
+\r
+        while ( !s.eof() ) {\r
+            std::getline( s, line );\r
+            if ( !line.empty() )\r
+                arrString.push_back( std::move( line ));\r
+        }\r
+\r
+        s.close();\r
+\r
+        return arrString;\r
+    }\r
+\r
+} // namespace\r
diff --git a/test/stress/lock/win32_lock.h b/test/stress/lock/win32_lock.h
new file mode 100644 (file)
index 0000000..db57d32
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_LOCK_WIN32_LOCK_H
+#define CDSUNIT_LOCK_WIN32_LOCK_H
+
+#if defined(_WIN32) || defined(_WIN64)
+#define NOMINMAX
+#include <windows.h>
+
+#define UNIT_LOCK_WIN_CS
+
+namespace lock {
+    namespace win {
+        // Win32 critical section
+        class CS {
+            CRITICAL_SECTION    m_cs;
+
+        public:
+            CS()    { ::InitializeCriticalSection( &m_cs ) ; }
+            ~CS()   { ::DeleteCriticalSection( &m_cs ) ; }
+
+            void lock()     { ::EnterCriticalSection( &m_cs ) ; }
+            void unlock()   { ::LeaveCriticalSection( &m_cs)  ; }
+            bool try_lock()  { return ::TryEnterCriticalSection( &m_cs ) != 0 ; }
+        };
+
+        class Mutex {
+            HANDLE  m_hMutex;
+        public:
+
+            Mutex()     { m_hMutex = ::CreateMutex( nullptr, false, nullptr ); }
+            ~Mutex()    { ::CloseHandle( m_hMutex ) ; }
+
+            void lock()     { ::WaitForSingleObject( m_hMutex, INFINITE ); }
+            void unlock()   { ::ReleaseMutex( m_hMutex ); }
+            bool try_lock()  { return ::WaitForSingleObject( m_hMutex, 0) == WAIT_OBJECT_0; }
+        };
+
+    } // namespace win
+}   // namespace lock
+
+#endif  // defined(_WIN32) || defined(_WIN64)
+#endif  // #ifndef CDSUNIT_LOCK_WIN32_LOCK_H
diff --git a/test/stress/main.cpp b/test/stress/main.cpp
new file mode 100644 (file)
index 0000000..ce60231
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds_test/stress_test.h>
+
+#include <cds/init.h>
+#include <cds/gc/hp.h>
+#include <cds/gc/dhp.h>
+#ifdef CDSUNIT_USE_URCU
+#   include <cds/urcu/general_instant.h>
+#   include <cds/urcu/general_buffered.h>
+#   include <cds/urcu/general_threaded.h>
+#   include <cds/urcu/signal_buffered.h>
+#   include <cds/urcu/signal_threaded.h>
+#endif
+
+int main( int argc, char **argv ) \r
+{\r
+    int result;\r
+    cds::Initialize();\r
+    {\r
+        // Read test config file\r
+        cds_test::init_config( argc, argv );\r
+\r
+        // Init Google test\r
+        ::testing::InitGoogleTest( &argc, argv );\r
+\r
+        cds_test::config const& general_cfg = cds_test::stress_fixture::get_config( "General" );\r
+\r
+        // Init SMR
+        cds::gc::HP hzpGC( general_cfg.get_size_t( "hazard_pointer_count", 16 ));
+        hzpGC.setScanType( general_cfg.get( "HZP_scan_strategy", "inplace" ) == "inplace" ? cds::gc::HP::scan_type::inplace : cds::gc::HP::scan_type::classic );
+
+        cds::gc::DHP dhpGC(
+            general_cfg.get_size_t( "dhp_liberate_threshold", 1024 ),
+            general_cfg.get_size_t( "dhp_init_guard_count", 16 ),
+            general_cfg.get_size_t( "dhp_epoch_count", 16 )
+        );
+
+#ifdef CDSUNIT_USE_URCU
+        size_t rcu_buffer_size = general_cfg.get_size_t( "rcu_buffer_size", 256 );
+
+        // RCU varieties
+        typedef cds::urcu::gc< cds::urcu::general_instant<> >    rcu_gpi;
+        rcu_gpi   gpiRCU;
+
+        typedef cds::urcu::gc< cds::urcu::general_buffered<> >    rcu_gpb;
+        rcu_gpb   gpbRCU( rcu_buffer_size );
+
+        typedef cds::urcu::gc< cds::urcu::general_threaded<> >    rcu_gpt;
+        rcu_gpt   gptRCU( rcu_buffer_size );
+
+#   ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cds::urcu::gc< cds::urcu::signal_buffered<> >    rcu_shb;
+        rcu_shb   shbRCU( rcu_buffer_size, SIGUSR1 );
+
+        typedef cds::urcu::gc< cds::urcu::signal_threaded<> >    rcu_sht;
+        rcu_sht   shtRCU( rcu_buffer_size, SIGUSR2 );
+#   endif
+#endif // CDSUNIT_USE_URCU
+\r
+        cds::threading::Manager::attachThread();\r
+\r
+        result =  RUN_ALL_TESTS();\r
+\r
+        cds::threading::Manager::detachThread();\r
+    }\r
+    cds::Terminate();\r
+    return result;\r
+}
diff --git a/test/stress/map/CMakeLists.txt b/test/stress/map/CMakeLists.txt
new file mode 100644 (file)
index 0000000..7428b22
--- /dev/null
@@ -0,0 +1,28 @@
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DCDSUNIT_USE_URCU")
+
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/delodd)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/find_int)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/find_string)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/insdel_func)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/insdel_int)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/insdel_string)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/insdel_item_int)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/insdelfind)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/insfind_int)
+#add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/insdel_find)
+#add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/insdel_func)
+#add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/insdel_string)
+
+add_custom_target( stress-map
+    DEPENDS
+        stress-map-delodd
+        stress-map-find-int
+        stress-map-find-string
+        stress-map-insdel-func
+        stress-map-insdel-int
+        stress-map-insdel-string
+        stress-map-insdel-item-int
+        stress-map-insdelfind
+        stress-map-insfind-int
+)
diff --git a/test/stress/map/delodd/CMakeLists.txt b/test/stress/map/delodd/CMakeLists.txt
new file mode 100644 (file)
index 0000000..3a05c30
--- /dev/null
@@ -0,0 +1,29 @@
+set(PACKAGE_NAME stress-map-delodd)
+
+set(CDSSTRESS_MAP_DELODD_SOURCES
+    ../../main.cpp
+    map_delodd.cpp
+    map_delodd_bronsonavltree.cpp
+    map_delodd_cuckoo.cpp
+    map_delodd_ellentree.cpp
+    map_delodd_feldman_hashset.cpp
+    map_delodd_michael.cpp
+    map_delodd_skip.cpp
+    map_delodd_split.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    ${CMAKE_CURRENT_SOURCE_DIR}/..
+)
+
+add_executable(${PACKAGE_NAME} ${CDSSTRESS_MAP_DELODD_SOURCES} $<TARGET_OBJECTS:${CDSSTRESS_FRAMEWORK_LIBRARY}>)
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/stress/map/delodd/map_delodd.cpp b/test/stress/map/delodd/map_delodd.cpp
new file mode 100644 (file)
index 0000000..44b951b
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_delodd.h"
+
+namespace map {
+    
+    size_t  Map_DelOdd::s_nMapSize = 1000000;
+    size_t  Map_DelOdd::s_nInsThreadCount = 4;
+    size_t  Map_DelOdd::s_nDelThreadCount = 4;
+    size_t  Map_DelOdd::s_nExtractThreadCount = 4;
+    size_t  Map_DelOdd::s_nMaxLoadFactor = 8;
+
+    size_t  Map_DelOdd::s_nCuckooInitialSize = 1024;
+    size_t  Map_DelOdd::s_nCuckooProbesetSize = 16;
+    size_t  Map_DelOdd::s_nCuckooProbesetThreshold = 0;
+
+    size_t Map_DelOdd::s_nFeldmanMap_HeadBits = 10;
+    size_t Map_DelOdd::s_nFeldmanMap_ArrayBits = 4;
+
+
+    size_t Map_DelOdd::s_nLoadFactor = 1;
+    std::vector<size_t> Map_DelOdd::m_arrInsert;
+    std::vector<size_t> Map_DelOdd::m_arrRemove;
+
+    void Map_DelOdd::SetUpTestCase()
+    {
+        cds_test::config const& cfg = get_config( "map_delodd" );
+
+        s_nMapSize = cfg.get_size_t( "MapSize", s_nMapSize );
+        if ( s_nMapSize < 1000 )
+            s_nMapSize = 1000;
+
+        s_nInsThreadCount = cfg.get_size_t( "InsThreadCount", s_nInsThreadCount );
+        if ( s_nInsThreadCount == 0 )
+            s_nInsThreadCount = 1;
+
+        s_nDelThreadCount = cfg.get_size_t( "DelThreadCount", s_nDelThreadCount );
+        s_nExtractThreadCount = cfg.get_size_t( "ExtractThreadCount", s_nExtractThreadCount );
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        s_nCuckooInitialSize = cfg.get_size_t( "CuckooInitialSize", s_nCuckooInitialSize );
+        if ( s_nCuckooInitialSize < 256 )
+            s_nCuckooInitialSize = 256;
+
+        s_nCuckooProbesetSize = cfg.get_size_t( "CuckooProbesetSize", s_nCuckooProbesetSize );
+        if ( s_nCuckooProbesetSize < 8 )
+            s_nCuckooProbesetSize = 8;
+
+        s_nCuckooProbesetThreshold = cfg.get_size_t( "CuckooProbesetThreshold", s_nCuckooProbesetThreshold );
+
+        s_nFeldmanMap_HeadBits = cfg.get_size_t( "FeldmanMapHeadBits", s_nFeldmanMap_HeadBits );
+        if ( s_nFeldmanMap_HeadBits == 0 )
+            s_nFeldmanMap_HeadBits = 2;
+
+        s_nFeldmanMap_ArrayBits = cfg.get_size_t( "FeldmanMapArrayBits", s_nFeldmanMap_ArrayBits );
+        if ( s_nFeldmanMap_ArrayBits == 0 )
+            s_nFeldmanMap_ArrayBits = 2;
+
+
+        m_arrInsert.resize( s_nMapSize );
+        m_arrRemove.resize( s_nMapSize );
+        for ( size_t i = 0; i < s_nMapSize; ++i ) {
+            m_arrInsert[i] = i;
+            m_arrRemove[i] = i;
+        }
+        shuffle( m_arrInsert.begin(), m_arrInsert.end() );
+        shuffle( m_arrRemove.begin(), m_arrRemove.end() );
+    }
+
+    void Map_DelOdd::TearDownTestCase()
+    {
+        m_arrInsert.clear();
+        m_arrRemove.clear();
+    }
+
+    std::vector<size_t> Map_DelOdd_LF::get_load_factors()
+    {
+        cds_test::config const& cfg = get_config( "map_delodd" );
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        std::vector<size_t> lf;
+        for ( size_t n = 1; n <= s_nMaxLoadFactor; n *= 2 )
+            lf.push_back( n );
+
+        return lf;
+    }
+
+    INSTANTIATE_TEST_CASE_P( a, Map_DelOdd_LF, ::testing::ValuesIn( Map_DelOdd_LF::get_load_factors() ) );
+} // namespace map
diff --git a/test/stress/map/delodd/map_delodd.h b/test/stress/map/delodd/map_delodd.h
new file mode 100644 (file)
index 0000000..003c15d
--- /dev/null
@@ -0,0 +1,740 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_type.h"
+
+namespace map {
+
+    namespace {
+        struct key_thread
+        {
+            uint32_t  nKey;
+            uint16_t  nThread;
+            //uint16_t  pad_;
+
+            key_thread( size_t key, size_t threadNo )
+                : nKey( static_cast<uint32_t>(key))
+                , nThread( static_cast<uint16_t>(threadNo))
+                //, pad_(0)
+            {}
+
+            key_thread()
+            {}
+        };
+    }
+
+    template <>
+    struct cmp<key_thread> {
+        int operator ()(key_thread const& k1, key_thread const& k2) const
+        {
+            if ( k1.nKey < k2.nKey )
+                return -1;
+            if ( k1.nKey > k2.nKey )
+                return 1;
+            if ( k1.nThread < k2.nThread )
+                return -1;
+            if ( k1.nThread > k2.nThread )
+                return 1;
+            return 0;
+        }
+        int operator ()(key_thread const& k1, size_t k2) const
+        {
+            if ( k1.nKey < k2 )
+                return -1;
+            if ( k1.nKey > k2 )
+                return 1;
+            return 0;
+        }
+        int operator ()(size_t k1, key_thread const& k2) const
+        {
+            if ( k1 < k2.nKey )
+                return -1;
+            if ( k1 > k2.nKey )
+                return 1;
+            return 0;
+        }
+    };
+
+    template <>
+    struct less<key_thread>
+    {
+        bool operator()( key_thread const& k1, key_thread const& k2 ) const
+        {
+            if ( k1.nKey <= k2.nKey )
+                return k1.nKey < k2.nKey || k1.nThread < k2.nThread;
+            return false;
+        }
+    };
+
+    template <>
+    struct hash<key_thread>
+    {
+        typedef size_t             result_type;
+        typedef key_thread    argument_type;
+
+        size_t operator()( key_thread const& k ) const
+        {
+            return std::hash<size_t>()(k.nKey);
+        }
+        size_t operator()( size_t k ) const
+        {
+            return std::hash<size_t>()(k);
+        }
+    };
+
+    class Map_DelOdd: public cds_test::stress_fixture
+    {
+    public:
+        static size_t s_nInsThreadCount;      // insert thread count
+        static size_t s_nDelThreadCount;      // delete thread count
+        static size_t s_nExtractThreadCount;  // extract thread count
+        static size_t s_nMapSize;             // max map size
+        static size_t s_nMaxLoadFactor;       // maximum load factor
+
+        static size_t s_nCuckooInitialSize;       // initial size for CuckooMap
+        static size_t s_nCuckooProbesetSize;      // CuckooMap probeset size (only for list-based probeset)
+        static size_t s_nCuckooProbesetThreshold; // CuckooMap probeset threshold (0 - use default)
+
+        static size_t s_nFeldmanMap_HeadBits;
+        static size_t s_nFeldmanMap_ArrayBits;
+
+        static size_t  s_nLoadFactor;  // current load factor
+
+        static std::vector<size_t> m_arrInsert;
+        static std::vector<size_t> m_arrRemove;
+
+        static void SetUpTestCase();
+        static void TearDownTestCase();
+
+    protected:
+        typedef key_thread  key_type;
+        typedef size_t      value_type;
+        typedef std::pair<key_type const, value_type> pair_type;
+
+        atomics::atomic<size_t> m_nInsThreadCount;
+
+        enum {
+            inserter_thread,
+            deleter_thread,
+            extractor_thread,
+        };
+
+        // Inserts keys from [0..N)
+        template <class Map>
+        class Inserter: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+            Map&     m_Map;
+
+            struct ensure_func
+            {
+                template <typename Q>
+                void operator()( bool /*bNew*/, Q const& )
+                {}
+                template <typename Q, typename V>
+                void operator()( bool /*bNew*/, Q const&, V& )
+                {}
+
+                // FeldmanHashMap
+                template <typename Q>
+                void operator()( Q&, Q*)
+                {}
+            };
+        public:
+            size_t m_nInsertSuccess = 0;
+            size_t m_nInsertFailed = 0;
+
+        public:
+            Inserter( cds_test::thread_pool& pool, Map& map )
+                : base_class( pool, inserter_thread )
+                , m_Map( map )
+            {}
+
+            Inserter( Inserter& src )
+                : base_class( src )
+                , m_Map( src.m_Map )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Inserter( *this );
+            }
+
+            virtual void test()
+            {
+                Map& rMap = m_Map;
+                Map_DelOdd& fixture = pool().template fixture<Map_DelOdd>();
+
+                std::vector<size_t>& arrData = fixture.m_arrInsert;
+                for ( size_t i = 0; i < arrData.size(); ++i ) {
+                    if ( rMap.insert( key_type( arrData[i], id() )))
+                        ++m_nInsertSuccess;
+                    else
+                        ++m_nInsertFailed;
+                }
+
+                ensure_func f;
+                for ( size_t i = arrData.size() - 1; i > 0; --i ) {
+                    if ( arrData[i] & 1 ) {
+                        rMap.update( key_type( arrData[i], id() ), f );
+                    }
+                }
+
+                fixture.m_nInsThreadCount.fetch_sub( 1, atomics::memory_order_acquire );
+            }
+        };
+
+        struct key_equal {
+            bool operator()( key_type const& k1, key_type const& k2 ) const
+            {
+                return k1.nKey == k2.nKey;
+            }
+            bool operator()( size_t k1, key_type const& k2 ) const
+            {
+                return k1 == k2.nKey;
+            }
+            bool operator()( key_type const& k1, size_t k2 ) const
+            {
+                return k1.nKey == k2;
+            }
+        };
+
+        struct key_less {
+            bool operator()( key_type const& k1, key_type const& k2 ) const
+            {
+                return k1.nKey < k2.nKey;
+            }
+            bool operator()( size_t k1, key_type const& k2 ) const
+            {
+                return k1 < k2.nKey;
+            }
+            bool operator()( key_type const& k1, size_t k2 ) const
+            {
+                return k1.nKey < k2;
+            }
+
+            typedef key_equal equal_to;
+        };
+
+        // Deletes odd keys from [0..N)
+        template <class Map>
+        class Deleter: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+            Map&     m_Map;
+
+        public:
+            size_t  m_nDeleteSuccess = 0;
+            size_t  m_nDeleteFailed = 0;
+
+        public:
+            Deleter( cds_test::thread_pool& pool, Map& map )
+                : base_class( pool, deleter_thread )
+                , m_Map( map )
+            {}
+            Deleter( Deleter& src )
+                : base_class( src )
+                , m_Map( src.m_Map )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Deleter( *this );
+            }
+
+            template <typename MapType, bool>
+            struct eraser {
+                static bool erase(MapType& map, size_t key, size_t /*insThread*/)
+                {
+                    return map.erase_with(key, key_less());
+                }
+            };
+
+            template <typename MapType>
+            struct eraser<MapType, true>
+            {
+                static bool erase(MapType& map, size_t key, size_t insThread)
+                {
+                    return map.erase(key_type(key, insThread));
+                }
+            };
+
+            virtual void test()
+            {
+                Map& rMap = m_Map;
+
+                Map_DelOdd& fixture = pool().template fixture<Map_DelOdd>();
+                size_t const nInsThreadCount = s_nInsThreadCount;
+
+                for ( size_t pass = 0; pass < 2; pass++ ) {
+                    std::vector<size_t>& arrData = fixture.m_arrRemove;
+                    if ( id() & 1 ) {
+                        for ( size_t k = 0; k < nInsThreadCount; ++k ) {
+                            for ( size_t i = 0; i < arrData.size(); ++i ) {
+                                if ( arrData[i] & 1 ) {
+                                    if ( Map::c_bEraseExactKey ) {
+                                        for (size_t key = 0; key < nInsThreadCount; ++key) {
+                                            if ( eraser<Map, Map::c_bEraseExactKey>::erase( rMap, arrData[i], key ))
+                                                ++m_nDeleteSuccess;
+                                            else
+                                                ++m_nDeleteFailed;
+                                        }
+                                    }
+                                    else {
+                                        if ( eraser<Map, Map::c_bEraseExactKey>::erase(rMap, arrData[i], 0))
+                                            ++m_nDeleteSuccess;
+                                        else
+                                            ++m_nDeleteFailed;
+                                    }
+                                }
+                            }
+                            if ( fixture.m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
+                                break;
+                        }
+                    }
+                    else {
+                        for ( size_t k = 0; k < nInsThreadCount; ++k ) {
+                            for ( size_t i = arrData.size() - 1; i > 0; --i ) {
+                                if ( arrData[i] & 1 ) {
+                                    if ( Map::c_bEraseExactKey ) {
+                                        for (size_t key = 0; key < nInsThreadCount; ++key) {
+                                            if (eraser<Map, Map::c_bEraseExactKey>::erase(rMap, arrData[i], key))
+                                                ++m_nDeleteSuccess;
+                                            else
+                                                ++m_nDeleteFailed;
+                                        }
+                                    }
+                                    else {
+                                        if (eraser<Map, Map::c_bEraseExactKey>::erase(rMap, arrData[i], 0))
+                                            ++m_nDeleteSuccess;
+                                        else
+                                            ++m_nDeleteFailed;
+                                    }
+                                }
+                            }
+                            if ( fixture.m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
+                                break;
+                        }
+                    }
+                }
+            }
+        };
+
+        // Deletes odd keys from [0..N)
+        template <class GC, class Map >
+        class Extractor: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+            Map&     m_Map;
+
+        public:
+            size_t  m_nDeleteSuccess = 0;
+            size_t  m_nDeleteFailed = 0;
+
+        public:
+            Extractor( cds_test::thread_pool& pool, Map& map )
+                : base_class( pool, extractor_thread )
+                , m_Map( map )
+            {}
+
+            Extractor( Extractor& src )
+                : base_class( src )
+                , m_Map( src.m_Map )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Extractor( *this );
+            }
+
+            template <typename MapType, bool>
+            struct extractor {
+                static typename Map::guarded_ptr extract(MapType& map, size_t key, size_t /*insThread*/)
+                {
+                    return map.extract_with(key, key_less());
+                }
+            };
+
+            template <typename MapType>
+            struct extractor<MapType, true>
+            {
+                static typename Map::guarded_ptr extract(MapType& map, size_t key, size_t insThread)
+                {
+                    return map.extract(key_type(key, insThread));
+                }
+            };
+
+            virtual void test()
+            {
+                Map& rMap = m_Map;
+
+                typename Map::guarded_ptr gp;
+                Map_DelOdd& fixture = pool().template fixture<Map_DelOdd>();
+                size_t const nInsThreadCount = s_nInsThreadCount;
+
+                for ( size_t pass = 0; pass < 2; ++pass ) {
+                    std::vector<size_t>& arrData = fixture.m_arrRemove;
+                    if ( id() & 1 ) {
+                        for ( size_t k = 0; k < nInsThreadCount; ++k ) {
+                            for ( size_t i = 0; i < arrData.size(); ++i ) {
+                                if ( arrData[i] & 1 ) {
+                                    gp = extractor< Map, Map::c_bEraseExactKey >::extract( rMap, arrData[i], k );
+                                    if ( gp )
+                                        ++m_nDeleteSuccess;
+                                    else
+                                        ++m_nDeleteFailed;
+                                    gp.release();
+                                }
+                            }
+                            if ( fixture.m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
+                                break;
+                        }
+                    }
+                    else {
+                        for ( size_t k = 0; k < nInsThreadCount; ++k ) {
+                            for ( size_t i = arrData.size() - 1; i > 0; --i ) {
+                                if ( arrData[i] & 1 ) {
+                                    gp = extractor< Map, Map::c_bEraseExactKey >::extract( rMap, arrData[i], k);
+                                    if ( gp )
+                                        ++m_nDeleteSuccess;
+                                    else
+                                        ++m_nDeleteFailed;
+                                    gp.release();
+                                }
+                            }
+                            if ( fixture.m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
+                                break;
+                        }
+                    }
+                }
+            }
+        };
+
+        template <class RCU, class Map >
+        class Extractor< cds::urcu::gc<RCU>, Map > : public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+            Map&     m_Map;
+
+        public:
+            size_t  m_nDeleteSuccess = 0;
+            size_t  m_nDeleteFailed = 0;
+
+        public:
+            Extractor( cds_test::thread_pool& pool, Map& map )
+                : base_class( pool, extractor_thread )
+                , m_Map( map )
+            {}
+
+            Extractor( Extractor& src )
+                : base_class( src )
+                , m_Map( src.m_Map )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Extractor( *this );
+            }
+
+            template <typename MapType, bool>
+            struct extractor {
+                static typename Map::exempt_ptr extract( MapType& map, size_t key, size_t /*insThread*/ )
+                {
+                    return map.extract_with( key, key_less());
+                }
+            };
+
+            template <typename MapType>
+            struct extractor<MapType, true>
+            {
+                static typename Map::exempt_ptr extract(MapType& map, size_t key, size_t insThread)
+                {
+                    return map.extract( key_type(key, insThread));
+                }
+            };
+
+            virtual void test()
+            {
+                Map& rMap = m_Map;
+                Map_DelOdd& fixture = pool().template fixture<Map_DelOdd>();
+
+                typename Map::exempt_ptr xp;
+                size_t const nInsThreadCount = s_nInsThreadCount;
+
+                std::vector<size_t>& arrData = fixture.m_arrRemove;
+                if ( id() & 1 ) {
+                    for ( size_t k = 0; k < nInsThreadCount; ++k ) {
+                        for ( size_t i = 0; i < arrData.size(); ++i ) {
+                            if ( arrData[i] & 1 ) {
+                                if ( Map::c_bExtractLockExternal ) {
+                                    {
+                                        typename Map::rcu_lock l;
+                                        xp = extractor<Map, Map::c_bEraseExactKey>::extract( rMap, arrData[i], k );
+                                        if ( xp )
+                                            ++m_nDeleteSuccess;
+                                        else
+                                            ++m_nDeleteFailed;
+                                    }
+                                }
+                                else {
+                                    xp = extractor<Map, Map::c_bEraseExactKey>::extract( rMap, arrData[i], k);
+                                    if ( xp )
+                                        ++m_nDeleteSuccess;
+                                    else
+                                        ++m_nDeleteFailed;
+                                }
+                                xp.release();
+                            }
+                        }
+                        if ( fixture.m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
+                            break;
+                    }
+                }
+                else {
+                    for ( size_t k = 0; k < nInsThreadCount; ++k ) {
+                        for ( size_t i = arrData.size() - 1; i > 0; --i ) {
+                            if ( arrData[i] & 1 ) {
+                                if ( Map::c_bExtractLockExternal ) {
+                                    {
+                                        typename Map::rcu_lock l;
+                                        xp = extractor<Map, Map::c_bEraseExactKey>::extract(rMap, arrData[i], k);
+                                        if ( xp )
+                                            ++m_nDeleteSuccess;
+                                        else
+                                            ++m_nDeleteFailed;
+                                    }
+                                }
+                                else {
+                                    xp = extractor<Map, Map::c_bEraseExactKey>::extract(rMap, arrData[i], k);
+                                    if ( xp )
+                                        ++m_nDeleteSuccess;
+                                    else
+                                        ++m_nDeleteFailed;
+                                }
+                                xp.release();
+                            }
+                        }
+                        if ( fixture.m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
+                            break;
+                    }
+                }
+            }
+        };
+
+    protected:
+        template <class Map>
+        void do_test( Map& testMap )
+        {
+            typedef Inserter<Map> insert_thread;
+            typedef Deleter<Map>  delete_thread;
+
+            m_nInsThreadCount.store( s_nInsThreadCount, atomics::memory_order_release );
+
+            cds_test::thread_pool& pool = get_pool();
+            pool.add( new insert_thread( pool, testMap ), s_nInsThreadCount );
+            pool.add( new delete_thread( pool, testMap ), s_nDelThreadCount ? s_nDelThreadCount : cds::OS::topology::processor_count() );
+
+            propout() << std::make_pair( "insert_thread_count", s_nInsThreadCount )
+                << std::make_pair( "delete_thread_count", s_nDelThreadCount )
+                << std::make_pair( "map_size", s_nMapSize );
+
+            std::chrono::milliseconds duration = pool.run();
+
+            propout() << std::make_pair( "duration", duration );
+
+            size_t nInsertSuccess = 0;
+            size_t nInsertFailed = 0;
+            size_t nDeleteSuccess = 0;
+            size_t nDeleteFailed = 0;
+
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                cds_test::thread& thr = pool.get( i );
+                if ( thr.type() == inserter_thread ) {
+                    insert_thread& inserter = static_cast<insert_thread&>(thr);
+                    nInsertSuccess += inserter.m_nInsertSuccess;
+                    nInsertFailed += inserter.m_nInsertFailed;
+                }
+                else {
+                    assert( thr.type() == deleter_thread );
+                    delete_thread& deleter = static_cast<delete_thread&>(thr);
+                    nDeleteSuccess += deleter.m_nDeleteSuccess;
+                    nDeleteFailed += deleter.m_nDeleteFailed;
+                }
+            }
+
+            EXPECT_EQ( nInsertSuccess, s_nMapSize * s_nInsThreadCount );
+            EXPECT_EQ( nInsertFailed, 0 );
+
+            propout()
+                << std::make_pair( "insert_success", nInsertSuccess )
+                << std::make_pair( "insert_failed",  nInsertFailed )
+                << std::make_pair( "delete_success", nDeleteSuccess )
+                << std::make_pair( "delete_failed",  nDeleteFailed );
+
+            analyze( testMap );
+        }
+
+        template <class Map>
+        void do_test_extract( Map& testMap )
+        {
+            typedef Inserter<Map> insert_thread;
+            typedef Deleter<Map> delete_thread;
+            typedef Extractor< typename Map::gc, Map > extract_thread;
+
+            m_nInsThreadCount.store( s_nInsThreadCount, atomics::memory_order_release );
+
+            cds_test::thread_pool& pool = get_pool();
+            pool.add( new insert_thread( pool, testMap ), s_nInsThreadCount );
+            if ( s_nDelThreadCount )
+                pool.add( new delete_thread( pool, testMap ), s_nDelThreadCount );
+            if ( s_nExtractThreadCount )
+                pool.add( new extract_thread( pool, testMap ), s_nExtractThreadCount );
+
+            propout() << std::make_pair( "insert_thread_count", s_nInsThreadCount )
+                << std::make_pair( "delete_thread_count", s_nDelThreadCount )
+                << std::make_pair( "extract_thread_count", s_nExtractThreadCount )
+                << std::make_pair( "map_size", s_nMapSize );
+
+            std::chrono::milliseconds duration = pool.run();
+
+            propout() << std::make_pair( "duration", duration );
+
+            size_t nInsertSuccess = 0;
+            size_t nInsertFailed = 0;
+            size_t nDeleteSuccess = 0;
+            size_t nDeleteFailed = 0;
+            size_t nExtractSuccess = 0;
+            size_t nExtractFailed = 0;
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                cds_test::thread& thr = pool.get( i );
+                switch ( thr.type() ) {
+                case inserter_thread:
+                {
+                    insert_thread& inserter = static_cast<insert_thread&>(thr);
+                    nInsertSuccess += inserter.m_nInsertSuccess;
+                    nInsertFailed += inserter.m_nInsertFailed;
+                }
+                break;
+                case deleter_thread:
+                {
+                    delete_thread& deleter = static_cast<delete_thread&>(thr);
+                    nDeleteSuccess += deleter.m_nDeleteSuccess;
+                    nDeleteFailed += deleter.m_nDeleteFailed;
+                }
+                break;
+                case extractor_thread:
+                {
+                    extract_thread& extractor = static_cast<extract_thread&>(thr);
+                    nExtractSuccess += extractor.m_nDeleteSuccess;
+                    nExtractFailed += extractor.m_nDeleteFailed;
+                }
+                break;
+                default:
+                    assert( false );
+                }
+            }
+
+            EXPECT_EQ( nInsertSuccess, s_nMapSize * s_nInsThreadCount );
+            EXPECT_EQ( nInsertFailed, 0 );
+
+            propout()
+                << std::make_pair( "insert_success", nInsertSuccess )
+                << std::make_pair( "insert_failed", nInsertFailed )
+                << std::make_pair( "delete_success", nDeleteSuccess )
+                << std::make_pair( "delete_failed", nDeleteFailed )
+                << std::make_pair( "extract_success", nExtractSuccess )
+                << std::make_pair( "extract_failed", nExtractFailed );
+
+            analyze( testMap );
+        }
+
+        template <class Map>
+        void analyze( Map& testMap )
+        {
+            // All even keys must be in the map
+            {
+                for ( size_t n = 0; n < s_nMapSize; n +=2 ) {
+                    for ( size_t i = 0; i < s_nInsThreadCount; ++i ) {
+                        EXPECT_TRUE( testMap.contains( key_type( n, i ) ) ) << "key=" << n << "/" << i;
+                    }
+                }
+            }
+
+            print_stat( propout(), testMap );
+
+            check_before_cleanup( testMap );
+            testMap.clear();
+            EXPECT_TRUE( testMap.empty() ) << "map.size=" << testMap.size();
+
+            additional_check( testMap );
+            additional_cleanup( testMap );
+        }
+
+        template <class Map>
+        void run_test_extract()
+        {
+            static_assert( Map::c_bExtractSupported, "Map class must support extract() method" );
+
+            Map testMap( *this );
+            do_test_extract( testMap );
+        }
+
+        template <class Map>
+        void run_test()
+        {
+            Map testMap( *this );
+            do_test( testMap );
+        }
+    };
+
+    class Map_DelOdd_LF: public Map_DelOdd
+        , public ::testing::WithParamInterface<size_t>
+    {
+    public:
+        template <class Map>
+        void run_test()
+        {
+            s_nLoadFactor = GetParam();
+            propout() << std::make_pair( "load_factor", s_nLoadFactor );
+            Map_DelOdd::run_test<Map>();
+        }
+
+        template <class Map>
+        void run_test_extract()
+        {
+            s_nLoadFactor = GetParam();
+            propout() << std::make_pair( "load_factor", s_nLoadFactor );
+            Map_DelOdd::run_test_extract<Map>();
+        }
+
+        static std::vector<size_t> get_load_factors();
+    };
+
+} // namespace map
diff --git a/test/stress/map/delodd/map_delodd_bronsonavltree.cpp b/test/stress/map/delodd/map_delodd_bronsonavltree.cpp
new file mode 100644 (file)
index 0000000..b5f9c11
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_delodd.h"
+#include "map_type_bronson_avltree.h"
+
+namespace map {
+
+    CDSSTRESS_BronsonAVLTreeMap( Map_DelOdd, run_test_extract, key_thread, size_t )
+
+} // namespace map
diff --git a/test/stress/map/delodd/map_delodd_cuckoo.cpp b/test/stress/map/delodd/map_delodd_cuckoo.cpp
new file mode 100644 (file)
index 0000000..35bbfca
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_delodd.h"
+#include "map_type_cuckoo.h"
+
+namespace map {
+
+    CDSSTRESS_CuckooMap( Map_DelOdd, run_test, key_thread, size_t )
+
+} // namespace map
diff --git a/test/stress/map/delodd/map_delodd_ellentree.cpp b/test/stress/map/delodd/map_delodd_ellentree.cpp
new file mode 100644 (file)
index 0000000..8ccb9ad
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_delodd.h"
+#include "map_type_ellen_bintree.h"
+
+namespace map {
+
+    CDSSTRESS_EllenBinTreeMap( Map_DelOdd, run_test_extract, key_thread, size_t )
+
+} // namespace map
diff --git a/test/stress/map/delodd/map_delodd_feldman_hashset.cpp b/test/stress/map/delodd/map_delodd_feldman_hashset.cpp
new file mode 100644 (file)
index 0000000..7d692ac
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_delodd.h"
+#include "map_type_feldman_hashmap.h"
+
+namespace map {
+
+    CDSSTRESS_FeldmanHashMap_fixed( Map_DelOdd, run_test_extract, key_thread, size_t )
+
+} // namespace map
diff --git a/test/stress/map/delodd/map_delodd_michael.cpp b/test/stress/map/delodd/map_delodd_michael.cpp
new file mode 100644 (file)
index 0000000..602cfde
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_delodd.h"
+#include "map_type_michael.h"
+
+namespace map {
+
+    CDSSTRESS_MichaelMap( Map_DelOdd_LF, run_test_extract, key_thread, size_t )
+
+} // namespace map
diff --git a/test/stress/map/delodd/map_delodd_skip.cpp b/test/stress/map/delodd/map_delodd_skip.cpp
new file mode 100644 (file)
index 0000000..fa0d657
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_delodd.h"
+#include "map_type_skip_list.h"
+
+namespace map {
+
+    CDSSTRESS_SkipListMap( Map_DelOdd, run_test_extract, key_thread, size_t )
+
+} // namespace map
diff --git a/test/stress/map/delodd/map_delodd_split.cpp b/test/stress/map/delodd/map_delodd_split.cpp
new file mode 100644 (file)
index 0000000..302e14f
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_delodd.h"
+#include "map_type_split_list.h"
+
+namespace map {
+
+    CDSSTRESS_SplitListMap( Map_DelOdd_LF, run_test_extract, key_thread, size_t )
+
+} // namespace map
diff --git a/test/stress/map/find_int/CMakeLists.txt b/test/stress/map/find_int/CMakeLists.txt
new file mode 100644 (file)
index 0000000..3ec07ce
--- /dev/null
@@ -0,0 +1,31 @@
+set(PACKAGE_NAME stress-map-find-int)
+
+set(CDSSTRESS_MAP_FIND_INT_SOURCES
+    ../../main.cpp
+    map_find_int.cpp
+    map_find_int_bronsonavltree.cpp
+    map_find_int_cuckoo.cpp
+    map_find_int_ellentree.cpp
+    map_find_int_feldman_hashset.cpp
+    map_find_int_michael.cpp
+    map_find_int_skip.cpp
+    map_find_int_split.cpp
+    map_find_int_std.cpp
+    map_find_int_striped.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    ${CMAKE_CURRENT_SOURCE_DIR}/..
+)
+
+add_executable(${PACKAGE_NAME} ${CDSSTRESS_MAP_FIND_INT_SOURCES} $<TARGET_OBJECTS:${CDSSTRESS_FRAMEWORK_LIBRARY}>)
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/stress/map/find_int/map_find_int.cpp b/test/stress/map/find_int/map_find_int.cpp
new file mode 100644 (file)
index 0000000..17b473c
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_find_int.h"
+
+namespace map {
+    
+    size_t Map_find_int::s_nThreadCount = 8;
+    size_t Map_find_int::s_nMapSize = 10000000;
+    size_t Map_find_int::s_nMaxLoadFactor = 8;
+    size_t Map_find_int::s_nPercentExists = 50;
+    size_t Map_find_int::s_nPassCount = 2;
+
+    size_t Map_find_int::s_nCuckooInitialSize = 1024;
+    size_t Map_find_int::s_nCuckooProbesetSize = 16;
+    size_t Map_find_int::s_nCuckooProbesetThreshold = 0;
+
+    size_t Map_find_int::s_nFeldmanMap_HeadBits = 10;
+    size_t Map_find_int::s_nFeldmanMap_ArrayBits = 4;
+
+
+    size_t Map_find_int::s_nLoadFactor = 1;
+    size_t Map_find_int::s_nRealMapSize = 0;
+    Map_find_int::value_vector Map_find_int::s_Data;
+
+    void Map_find_int::generateSequence()
+    {
+        size_t nPercent = s_nPercentExists;
+
+        if ( nPercent > 100 )
+            nPercent = 100;
+        else if ( nPercent < 1 )
+            nPercent = 1;
+        
+        s_nRealMapSize = 0;
+
+        s_Data.resize( s_nMapSize );
+        for ( size_t i = 0; i < s_nMapSize; ++i ) {
+            s_Data[i].nKey = i * 13;
+            s_Data[i].bExists = rand( 100 ) <= nPercent;
+            if ( s_Data[i].bExists )
+                ++s_nRealMapSize;
+        }
+        shuffle( s_Data.begin(), s_Data.end() );
+    }
+
+    void Map_find_int::SetUpTestCase()
+    {
+        cds_test::config const& cfg = get_config( "map_find_int" );
+
+        s_nMapSize = cfg.get_size_t( "MapSize", s_nMapSize );
+        if ( s_nMapSize < 1000 )
+            s_nMapSize = 1000;
+
+        s_nThreadCount = cfg.get_size_t( "ThreadCount", s_nThreadCount );
+        if ( s_nThreadCount == 0 )
+            s_nThreadCount = 1;
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        s_nCuckooInitialSize = cfg.get_size_t( "CuckooInitialSize", s_nCuckooInitialSize );
+        if ( s_nCuckooInitialSize < 256 )
+            s_nCuckooInitialSize = 256;
+
+        s_nCuckooProbesetSize = cfg.get_size_t( "CuckooProbesetSize", s_nCuckooProbesetSize );
+        if ( s_nCuckooProbesetSize < 8 )
+            s_nCuckooProbesetSize = 8;
+
+        s_nCuckooProbesetThreshold = cfg.get_size_t( "CuckooProbesetThreshold", s_nCuckooProbesetThreshold );
+
+        s_nFeldmanMap_HeadBits = cfg.get_size_t( "FeldmanMapHeadBits", s_nFeldmanMap_HeadBits );
+        if ( s_nFeldmanMap_HeadBits == 0 )
+            s_nFeldmanMap_HeadBits = 2;
+
+        s_nFeldmanMap_ArrayBits = cfg.get_size_t( "FeldmanMapArrayBits", s_nFeldmanMap_ArrayBits );
+        if ( s_nFeldmanMap_ArrayBits == 0 )
+            s_nFeldmanMap_ArrayBits = 2;
+
+        generateSequence();
+    }
+
+    void Map_find_int::TearDownTestCase()
+    {
+        s_Data.clear();
+    }
+
+    std::vector<size_t> Map_find_int_LF::get_load_factors()
+    {
+        cds_test::config const& cfg = get_config( "map_find_int" );
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        std::vector<size_t> lf;
+        for ( size_t n = 1; n <= s_nMaxLoadFactor; n *= 2 )
+            lf.push_back( n );
+
+        return lf;
+    }
+
+    INSTANTIATE_TEST_CASE_P( a, Map_find_int_LF, ::testing::ValuesIn( Map_find_int_LF::get_load_factors() ) );
+} // namespace map
diff --git a/test/stress/map/find_int/map_find_int.h b/test/stress/map/find_int/map_find_int.h
new file mode 100644 (file)
index 0000000..f54c308
--- /dev/null
@@ -0,0 +1,240 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_type.h"
+
+// find int test in map<int> in mutithreaded mode
+namespace map {
+
+    class Map_find_int: public cds_test::stress_fixture
+    {
+    public:
+        static size_t s_nThreadCount;       // thread count
+        static size_t s_nMapSize;           // map size (count of searching item)
+        static size_t s_nPercentExists;     // percent of existing keys in searching sequence
+        static size_t s_nPassCount;
+        static size_t s_nMaxLoadFactor;     // maximum load factor
+
+        static size_t s_nCuckooInitialSize;         // initial size for CuckooMap
+        static size_t s_nCuckooProbesetSize;        // CuckooMap probeset size (only for list-based probeset)
+        static size_t s_nCuckooProbesetThreshold;   // CUckooMap probeset threshold (o - use default)
+
+        static size_t s_nFeldmanMap_HeadBits;
+        static size_t s_nFeldmanMap_ArrayBits;
+
+        static size_t s_nLoadFactor;  // current load factor
+
+        typedef size_t   key_type;
+        struct value_type {
+            key_type    nKey;   // key
+            bool        bExists;   // true - key in map, false - key not in map
+        };
+
+        typedef std::vector<value_type> value_vector;
+        static value_vector s_Data;
+
+        static void SetUpTestCase();
+        static void TearDownTestCase();
+
+    private:
+        static size_t s_nRealMapSize;
+
+        static void generateSequence();
+
+        template <typename Iterator, typename Map>
+        static bool check_result( Iterator const& it, Map const& map )
+        {
+            return it != map.end();
+        }
+        template <typename Map>
+        static bool check_result( bool b, Map const& )
+        {
+            return b;
+        }
+
+        template <class Map>
+        class Worker: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+            Map&  m_Map;
+
+        public:
+            struct Stat {
+                size_t      nSuccess = 0;
+                size_t      nFailed = 0;
+            };
+
+            Stat    m_KeyExists;
+            Stat    m_KeyNotExists;
+
+        public:
+            Worker( cds_test::thread_pool& pool, Map& map )
+                : base_class( pool )
+                , m_Map( map )
+            {}
+
+            Worker( Worker& src )
+                : base_class( src )
+                , m_Map( src.m_Map )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Worker( *this );
+            }
+
+            virtual void test()
+            {
+                size_t const nPassCount = s_nPassCount;
+
+                Map& rMap = m_Map;
+                for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
+                    if ( id() & 1 ) {
+                        auto itEnd = s_Data.cend();
+                        for ( auto it = s_Data.cbegin(); it != itEnd; ++it ) {
+                            auto bFound = rMap.contains( it->nKey );
+                            if ( it->bExists ) {
+                                if ( check_result( bFound, rMap ))
+                                    ++m_KeyExists.nSuccess;
+                                else
+                                    ++m_KeyExists.nFailed;
+                            }
+                            else {
+                                if ( check_result( bFound, rMap ))
+                                    ++m_KeyNotExists.nFailed;
+                                else
+                                    ++m_KeyNotExists.nSuccess;
+                            }
+                        }
+                    }
+                    else {
+                        auto itEnd = s_Data.crend();
+                        for ( auto it = s_Data.crbegin(); it != itEnd; ++it ) {
+                            auto bFound = rMap.contains( it->nKey );
+                            if ( it->bExists ) {
+                                if ( check_result( bFound, rMap ))
+                                    ++m_KeyExists.nSuccess;
+                                else
+                                    ++m_KeyExists.nFailed;
+                            }
+                            else {
+                                if ( check_result( bFound, rMap ))
+                                    ++m_KeyNotExists.nFailed;
+                                else
+                                    ++m_KeyNotExists.nSuccess;
+                            }
+                        }
+                    }
+                }
+            }
+        };
+
+    protected:
+
+        template <class Map>
+        void test( Map& testMap )
+        {
+            typedef Worker<Map> worker;
+
+            // Fill the map
+            for ( auto const& it: s_Data ) {
+                if ( it.bExists ) {
+                    EXPECT_TRUE( check_result( testMap.insert( it.nKey, it ), testMap ));
+                }
+            }
+
+            propout() << std::make_pair( "thread_count", s_nThreadCount )
+                << std::make_pair( "map_size", s_nMapSize )
+                << std::make_pair( "percent_exist", s_nPercentExists )
+                << std::make_pair( "pass_count", s_nPassCount );
+
+            cds_test::thread_pool& pool = get_pool();
+            pool.add( new worker( pool, testMap ), s_nThreadCount );
+
+            std::chrono::milliseconds duration = pool.run();
+
+            propout() << std::make_pair( "duration", duration );
+
+            size_t nExistSuccess = 0;
+            size_t nExistFailed = 0;
+            size_t nMissingSuccess = 0;
+            size_t nMissingFailed = 0;
+
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                worker& w = static_cast<worker&>( pool.get( i ));
+                nExistSuccess += w.m_KeyExists.nSuccess;
+                nExistFailed += w.m_KeyExists.nFailed;
+                nMissingSuccess += w.m_KeyNotExists.nSuccess;
+                nMissingFailed += w.m_KeyNotExists.nFailed;
+
+                EXPECT_EQ( w.m_KeyExists.nFailed, 0 ) << "thread " << i;
+                EXPECT_EQ( w.m_KeyExists.nSuccess, s_nRealMapSize * s_nPassCount ) << "thread " << i;
+                EXPECT_EQ( w.m_KeyNotExists.nFailed, 0 ) << "thread " << i;
+                EXPECT_EQ( w.m_KeyNotExists.nSuccess, (s_Data.size() - s_nRealMapSize) * s_nPassCount ) << "thread " << i;
+            }
+
+            propout() 
+                << std::make_pair( "exist_found", nExistSuccess )
+                << std::make_pair( "exist_not_found",  nExistFailed )  // must = 0
+                << std::make_pair( "missing_not_found", nMissingSuccess )
+                << std::make_pair( "missing_found", nMissingFailed );  // must = 0
+
+            check_before_cleanup( testMap );
+
+            testMap.clear();
+            additional_check( testMap );
+            print_stat( propout(), testMap );
+            additional_cleanup( testMap );
+        }
+
+        template <class Map>
+        void run_test()
+        {
+            Map testMap( *this );
+            test( testMap );
+        }
+    };
+
+    class Map_find_int_LF: public Map_find_int
+        , public ::testing::WithParamInterface<size_t>
+    {
+    public:
+        template <class Map>
+        void run_test()
+        {
+            s_nLoadFactor = GetParam();
+            propout() << std::make_pair( "load_factor", s_nLoadFactor );
+            Map_find_int::run_test<Map>();
+        }
+
+        static std::vector<size_t> get_load_factors();
+    };
+
+} // namespace map
diff --git a/test/stress/map/find_int/map_find_int_bronsonavltree.cpp b/test/stress/map/find_int/map_find_int_bronsonavltree.cpp
new file mode 100644 (file)
index 0000000..5fa22a9
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_find_int.h"
+#include "map_type_bronson_avltree.h"
+
+namespace map {
+
+    CDSSTRESS_BronsonAVLTreeMap( Map_find_int, run_test, size_t, Map_find_int::value_type )
+
+} // namespace map
diff --git a/test/stress/map/find_int/map_find_int_cuckoo.cpp b/test/stress/map/find_int/map_find_int_cuckoo.cpp
new file mode 100644 (file)
index 0000000..8c036aa
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_find_int.h"
+#include "map_type_cuckoo.h"
+
+namespace map {
+
+    CDSSTRESS_CuckooMap( Map_find_int, run_test, size_t, Map_find_int::value_type )
+
+} // namespace map
diff --git a/test/stress/map/find_int/map_find_int_ellentree.cpp b/test/stress/map/find_int/map_find_int_ellentree.cpp
new file mode 100644 (file)
index 0000000..a820bdc
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_find_int.h"
+#include "map_type_ellen_bintree.h"
+
+namespace map {
+
+    CDSSTRESS_EllenBinTreeMap( Map_find_int, run_test, size_t, Map_find_int::value_type )
+
+} // namespace map
diff --git a/test/stress/map/find_int/map_find_int_feldman_hashset.cpp b/test/stress/map/find_int/map_find_int_feldman_hashset.cpp
new file mode 100644 (file)
index 0000000..56b9cc4
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_find_int.h"
+#include "map_type_feldman_hashmap.h"
+
+namespace map {
+
+    CDSSTRESS_FeldmanHashMap_fixed( Map_find_int, run_test, size_t, Map_find_int::value_type )
+
+} // namespace map
diff --git a/test/stress/map/find_int/map_find_int_michael.cpp b/test/stress/map/find_int/map_find_int_michael.cpp
new file mode 100644 (file)
index 0000000..8f7a717
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_find_int.h"
+#include "map_type_michael.h"
+
+namespace map {
+
+    CDSSTRESS_MichaelMap( Map_find_int_LF, run_test, size_t, Map_find_int::value_type )
+    CDSSTRESS_MichaelMap_nogc( Map_find_int_LF, run_test, size_t, Map_find_int::value_type )
+
+} // namespace map
diff --git a/test/stress/map/find_int/map_find_int_skip.cpp b/test/stress/map/find_int/map_find_int_skip.cpp
new file mode 100644 (file)
index 0000000..fe19b43
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_find_int.h"
+#include "map_type_skip_list.h"
+
+namespace map {
+
+    CDSSTRESS_SkipListMap( Map_find_int, run_test, size_t, Map_find_int::value_type )
+    CDSSTRESS_SkipListMap_nogc( Map_find_int, run_test, size_t, Map_find_int::value_type )
+
+} // namespace map
diff --git a/test/stress/map/find_int/map_find_int_split.cpp b/test/stress/map/find_int/map_find_int_split.cpp
new file mode 100644 (file)
index 0000000..59bdd93
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_find_int.h"
+#include "map_type_split_list.h"
+
+namespace map {
+
+    CDSSTRESS_SplitListMap( Map_find_int_LF, run_test, size_t, Map_find_int::value_type )
+    CDSSTRESS_SplitListMap_nogc( Map_find_int_LF, run_test, size_t, Map_find_int::value_type )
+
+} // namespace map
diff --git a/test/stress/map/find_int/map_find_int_std.cpp b/test/stress/map/find_int/map_find_int_std.cpp
new file mode 100644 (file)
index 0000000..a3557cd
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_find_int.h"
+#include "map_type_std.h"
+
+namespace map {
+
+    CDSSTRESS_StdMap( Map_find_int, run_test, size_t, Map_find_int::value_type )
+    CDSSTRESS_StdMap_nolock( Map_find_int, run_test, size_t, Map_find_int::value_type )
+
+} // namespace map
diff --git a/test/stress/map/find_int/map_find_int_striped.cpp b/test/stress/map/find_int/map_find_int_striped.cpp
new file mode 100644 (file)
index 0000000..be5c0a1
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_find_int.h"
+#include "map_type_striped.h"
+
+namespace map {
+
+    CDSSTRESS_StripedMap( Map_find_int_LF, run_test, size_t, Map_find_int::value_type )
+
+} // namespace map
diff --git a/test/stress/map/find_string/CMakeLists.txt b/test/stress/map/find_string/CMakeLists.txt
new file mode 100644 (file)
index 0000000..784bec3
--- /dev/null
@@ -0,0 +1,31 @@
+set(PACKAGE_NAME stress-map-find-string)
+
+set(CDSSTRESS_MAP_FIND_STRING_SOURCES
+    ../../main.cpp
+    map_find_string.cpp
+    map_find_string_bronsonavltree.cpp
+    map_find_string_cuckoo.cpp
+    map_find_string_ellentree.cpp
+    map_find_string_feldman_hashset.cpp
+    map_find_string_michael.cpp
+    map_find_string_skip.cpp
+    map_find_string_split.cpp
+    map_find_string_std.cpp
+    map_find_string_striped.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    ${CMAKE_CURRENT_SOURCE_DIR}/..
+)
+
+add_executable(${PACKAGE_NAME} ${CDSSTRESS_MAP_FIND_STRING_SOURCES} $<TARGET_OBJECTS:${CDSSTRESS_FRAMEWORK_LIBRARY}>)
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/stress/map/find_string/map_find_string.cpp b/test/stress/map/find_string/map_find_string.cpp
new file mode 100644 (file)
index 0000000..068dd88
--- /dev/null
@@ -0,0 +1,199 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_find_string.h"
+#include <cds_test/hash_func.h>
+
+namespace map {
+    
+    size_t Map_find_string::s_nThreadCount = 8;
+    size_t Map_find_string::s_nMapSize = 10000000;
+    size_t Map_find_string::s_nMaxLoadFactor = 8;
+    size_t Map_find_string::s_nPercentExists = 50;
+    size_t Map_find_string::s_nPassCount = 2;
+
+    size_t Map_find_string::s_nCuckooInitialSize = 1024;
+    size_t Map_find_string::s_nCuckooProbesetSize = 16;
+    size_t Map_find_string::s_nCuckooProbesetThreshold = 0;
+
+    size_t Map_find_string::s_nFeldmanMap_HeadBits = 10;
+    size_t Map_find_string::s_nFeldmanMap_ArrayBits = 4;
+
+
+    size_t Map_find_string::s_nLoadFactor = 1;
+    Map_find_string::value_vector Map_find_string::s_Data;
+    std::vector<std::string> Map_find_string::s_arrString;
+
+    void Map_find_string::setup_test_case()
+    {
+        cds_test::config const& cfg = get_config( "map_find_string" );
+
+        s_nMapSize = cfg.get_size_t( "MapSize", s_nMapSize );
+        if ( s_nMapSize < 1000 )
+            s_nMapSize = 1000;
+
+        s_nThreadCount = cfg.get_size_t( "ThreadCount", s_nThreadCount );
+        if ( s_nThreadCount == 0 )
+            s_nThreadCount = 1;
+
+        s_nPercentExists = cfg.get_size_t( "PercentExists", s_nPercentExists );
+        if ( s_nPercentExists > 100 )
+            s_nPercentExists = 100;
+        else if ( s_nPercentExists < 1 )
+            s_nPercentExists = 1;
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        s_nCuckooInitialSize = cfg.get_size_t( "CuckooInitialSize", s_nCuckooInitialSize );
+        if ( s_nCuckooInitialSize < 256 )
+            s_nCuckooInitialSize = 256;
+
+        s_nCuckooProbesetSize = cfg.get_size_t( "CuckooProbesetSize", s_nCuckooProbesetSize );
+        if ( s_nCuckooProbesetSize < 8 )
+            s_nCuckooProbesetSize = 8;
+
+        s_nCuckooProbesetThreshold = cfg.get_size_t( "CuckooProbesetThreshold", s_nCuckooProbesetThreshold );
+
+        s_nFeldmanMap_HeadBits = cfg.get_size_t( "FeldmanMapHeadBits", s_nFeldmanMap_HeadBits );
+        if ( s_nFeldmanMap_HeadBits == 0 )
+            s_nFeldmanMap_HeadBits = 2;
+
+        s_nFeldmanMap_ArrayBits = cfg.get_size_t( "FeldmanMapArrayBits", s_nFeldmanMap_ArrayBits );
+        if ( s_nFeldmanMap_ArrayBits == 0 )
+            s_nFeldmanMap_ArrayBits = 2;
+
+        s_arrString = load_dictionary();
+    }
+
+    void Map_find_string::TearDownTestCase()
+    {
+        s_arrString.clear();
+        s_Data.clear();
+    }
+
+    void Map_find_string::SetUpTestCase()
+    {
+        setup_test_case();
+
+        s_Data.clear();
+
+        size_t nSize = s_arrString.size();
+        if ( nSize > s_nMapSize )
+            nSize = s_nMapSize;
+        s_Data.reserve( nSize );
+
+        size_t nActualSize = 0;
+        for ( size_t i = 0; i < nSize; ++i ) {
+            bool bExists = rand( 100 ) <= s_nPercentExists;
+            if ( bExists )
+                ++nActualSize;
+            s_Data.push_back( { &s_arrString.at( i ), bExists } );
+        }
+        s_nMapSize = nActualSize;
+    }
+
+    template <typename Hash>
+    void Map_find_string::fill_string_array()
+    {
+        typedef Hash hasher;
+        typedef typename hasher::result_type hash_type;
+
+        std::map<hash_type, size_t> mapHash;
+        s_Data.clear();
+
+        size_t nSize = s_arrString.size();
+        if ( nSize > s_nMapSize )
+            nSize = s_nMapSize;
+        s_Data.reserve( nSize );
+
+        size_t nActualSize = 0;
+        size_t nDiffHash = 0;
+        hasher h;
+        for ( size_t i = 0; i < s_arrString.size(); ++i ) {
+            hash_type hash = h( s_arrString.at( i ));
+            if ( mapHash.insert( std::make_pair( hash, i ) ).second ) {
+                if ( ++nDiffHash >= nSize )
+                    break;
+                bool bExists = rand( 100 ) <= s_nPercentExists;
+                if ( bExists )
+                    ++nActualSize;
+                s_Data.push_back( { &s_arrString.at( i ), bExists } );
+            }
+        }
+        s_nMapSize = nActualSize;
+
+    }
+
+    void Map_find_string_stdhash::SetUpTestCase()
+    {
+        setup_test_case();
+        fill_string_array<std::hash<std::string>>();
+    }
+
+#if CDS_BUILD_BITS == 64
+    void Map_find_string_city32::SetUpTestCase()
+    {
+        setup_test_case();
+        fill_string_array<cds_test::city32>();
+    }
+
+    void Map_find_string_city64::SetUpTestCase()
+    {
+        setup_test_case();
+        fill_string_array<cds_test::city64>();
+    }
+
+    void Map_find_string_city128::SetUpTestCase()
+    {
+        setup_test_case();
+        fill_string_array<cds_test::city128>();
+    }
+
+#endif
+
+    std::vector<size_t> Map_find_string::get_load_factors()
+    {
+        cds_test::config const& cfg = get_config( "map_find_string" );
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        std::vector<size_t> lf;
+        for ( size_t n = 1; n <= s_nMaxLoadFactor; n *= 2 )
+            lf.push_back( n );
+
+        return lf;
+    }
+
+    INSTANTIATE_TEST_CASE_P( a, Map_find_string_LF, ::testing::ValuesIn( Map_find_string::get_load_factors() ) );
+} // namespace map
diff --git a/test/stress/map/find_string/map_find_string.h b/test/stress/map/find_string/map_find_string.h
new file mode 100644 (file)
index 0000000..056c2cb
--- /dev/null
@@ -0,0 +1,286 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_type.h"
+
+namespace map {
+
+    class Map_find_string: public cds_test::stress_fixture
+    {
+    public:
+        static size_t s_nThreadCount;       // thread count
+        static size_t s_nMapSize;           // map size (count of searching item)
+        static size_t s_nPercentExists;     // percent of existing keys in searching sequence
+        static size_t s_nPassCount;
+        static size_t s_nMaxLoadFactor;     // maximum load factor
+
+        static size_t s_nCuckooInitialSize;         // initial size for CuckooMap
+        static size_t s_nCuckooProbesetSize;        // CuckooMap probeset size (only for list-based probeset)
+        static size_t s_nCuckooProbesetThreshold;   // CUckooMap probeset threshold (o - use default)
+
+        static size_t s_nFeldmanMap_HeadBits;
+        static size_t s_nFeldmanMap_ArrayBits;
+
+        static size_t s_nLoadFactor;  // current load factor
+
+        typedef std::string  key_type;
+        struct value_type {
+            std::string const* pKey;
+            bool        bExists ;   // true - key in map, false - key not in map
+        };
+
+        typedef std::vector<value_type> value_vector;
+        static std::vector<std::string> s_arrString;
+        static value_vector s_Data;
+
+        static void SetUpTestCase();
+        static void TearDownTestCase();
+
+        static void setup_test_case();
+        static std::vector<size_t> get_load_factors();
+
+    private:
+        template <typename Iterator, typename Map>
+        static bool check_result( Iterator const& it, Map const& map )
+        {
+            return it != map.end();
+        }
+        template <typename Map>
+        static bool check_result( bool b, Map const& )
+        {
+            return b;
+        }
+
+        template <class Map>
+        class Worker: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+            Map&     m_Map;
+
+        public:
+            struct Stat {
+                size_t      nSuccess = 0;
+                size_t      nFailed = 0;
+            };
+
+            Stat    m_KeyExists;
+            Stat    m_KeyNotExists;
+
+        public:
+            Worker( cds_test::thread_pool& pool, Map& map )
+                : base_class( pool )
+                , m_Map( map )
+            {}
+
+            Worker( Worker& src )
+                : base_class( src )
+                , m_Map( src.m_Map )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Worker( *this );
+            }
+            virtual void test()
+            {
+                size_t const nPassCount = s_nPassCount;
+
+                Map& rMap = m_Map;
+                for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
+                    if ( id() & 1 ) {
+                        auto itEnd = s_Data.cend();
+                        for ( auto it = s_Data.cbegin(); it != itEnd; ++it ) {
+                            auto bFound = rMap.contains( *(it->pKey) );
+                            if ( it->bExists ) {
+                                if ( check_result(bFound, rMap))
+                                    ++m_KeyExists.nSuccess;
+                                else
+                                    ++m_KeyExists.nFailed;
+                            }
+                            else {
+                                if ( check_result(bFound, rMap))
+                                    ++m_KeyNotExists.nFailed;
+                                else
+                                    ++m_KeyNotExists.nSuccess;
+                            }
+                        }
+                    }
+                    else {
+                        auto itEnd = s_Data.crend();
+                        for ( auto it = s_Data.crbegin(); it != itEnd; ++it ) {
+                            auto bFound = rMap.contains( *(it->pKey) );
+                            if ( it->bExists ) {
+                                if ( check_result(bFound, rMap))
+                                    ++m_KeyExists.nSuccess;
+                                else
+                                    ++m_KeyExists.nFailed;
+                            }
+                            else {
+                                if ( check_result( bFound, rMap ))
+                                    ++m_KeyNotExists.nFailed;
+                                else
+                                    ++m_KeyNotExists.nSuccess;
+                            }
+                        }
+                    }
+                }
+            }
+        };
+
+    protected:
+        template <typename Hash>
+        static void fill_string_array();
+
+        template <class Map>
+        void test( Map& testMap )
+        {
+            typedef Worker<Map> worker;
+
+            // Fill the map
+            for ( size_t i = 0; i < s_Data.size(); ++i ) {
+                // All keys in arrData are unique, insert() must be successful
+                if ( s_Data[i].bExists )
+                    EXPECT_TRUE( check_result( testMap.insert( *(s_Data[i].pKey), s_Data[i] ), testMap ));
+            }
+
+            propout() << std::make_pair( "thread_count", s_nThreadCount )
+                << std::make_pair( "map_size", s_nMapSize )
+                << std::make_pair( "percent_exist", s_nPercentExists )
+                << std::make_pair( "pass_count", s_nPassCount );
+
+            cds_test::thread_pool& pool = get_pool();
+            pool.add( new worker( pool, testMap ), s_nThreadCount );
+
+            std::chrono::milliseconds duration = pool.run();
+
+            propout() << std::make_pair( "duration", duration );
+
+            size_t nExistSuccess = 0;
+            size_t nExistFailed = 0;
+            size_t nMissingSuccess = 0;
+            size_t nMissingFailed = 0;
+
+            // Postcondition: the number of success searching == the number of map item
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                worker& w = static_cast<worker&>(pool.get( i ));
+                nExistSuccess += w.m_KeyExists.nSuccess;
+                nExistFailed += w.m_KeyExists.nFailed;
+                nMissingSuccess += w.m_KeyNotExists.nSuccess;
+                nMissingFailed += w.m_KeyNotExists.nFailed;
+
+                EXPECT_EQ( w.m_KeyExists.nSuccess, s_nMapSize * s_nPassCount ) << "thread " << i;
+                EXPECT_EQ( w.m_KeyExists.nFailed, 0 ) << "thread " << i;
+                EXPECT_EQ( w.m_KeyNotExists.nSuccess, (s_Data.size() - s_nMapSize) * s_nPassCount ) << "thread " << i;
+                EXPECT_EQ( w.m_KeyNotExists.nFailed, 0 ) << "thread " << i;
+            }
+
+            check_before_cleanup( testMap );
+
+            testMap.clear();
+            additional_check( testMap );
+            print_stat( propout(), testMap );
+            additional_cleanup( testMap );
+        }
+
+        template <class Map>
+        void run_test()
+        {
+            ASSERT_GT( s_Data.size(), 0 );
+
+            Map testMap( *this );
+            test( testMap );
+        }
+    };
+
+    class Map_find_string_stdhash: public Map_find_string
+    {
+    public:
+        static void SetUpTestCase();
+
+        template <class Map>
+        void run_test()
+        {
+            Map_find_string::run_test<Map>();
+        }
+    };
+
+#if CDS_BUILD_BITS == 64
+    class Map_find_string_city32: public Map_find_string
+    {
+    public:
+        static void SetUpTestCase();
+
+        template <class Map>
+        void run_test()
+        {
+            Map_find_string::run_test<Map>();
+        }
+    };
+
+    class Map_find_string_city64: public Map_find_string
+    {
+    public:
+        static void SetUpTestCase();
+
+        template <class Map>
+        void run_test()
+        {
+            Map_find_string::run_test<Map>();
+        }
+    };
+
+    class Map_find_string_city128: public Map_find_string
+    {
+    public:
+        static void SetUpTestCase();
+
+        template <class Map>
+        void run_test()
+        {
+            Map_find_string::run_test<Map>();
+        }
+    };
+
+#endif // #if CDS_BUILD_BITS == 64
+
+    class Map_find_string_LF: public Map_find_string
+        , public ::testing::WithParamInterface<size_t>
+    {
+    public:
+        template <class Map>
+        void run_test()
+        {
+            s_nLoadFactor = GetParam();
+            propout() << std::make_pair( "load_factor", s_nLoadFactor );
+            Map_find_string::run_test<Map>();
+        }
+    };
+
+} // namespace map
diff --git a/test/stress/map/find_string/map_find_string_bronsonavltree.cpp b/test/stress/map/find_string/map_find_string_bronsonavltree.cpp
new file mode 100644 (file)
index 0000000..f36cf80
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_find_string.h"
+#include "map_type_bronson_avltree.h"
+
+namespace map {
+
+    CDSSTRESS_BronsonAVLTreeMap( Map_find_string, run_test, std::string, Map_find_string::value_type )
+
+} // namespace map
diff --git a/test/stress/map/find_string/map_find_string_cuckoo.cpp b/test/stress/map/find_string/map_find_string_cuckoo.cpp
new file mode 100644 (file)
index 0000000..edb4b8f
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_find_string.h"
+#include "map_type_cuckoo.h"
+
+namespace map {
+
+    CDSSTRESS_CuckooMap( Map_find_string, run_test, std::string, Map_find_string::value_type )
+#if CDS_BUILD_BITS == 64
+    CDSSTRESS_CuckooMap_city64( Map_find_string, run_test, std::string, Map_find_string::value_type )
+#endif
+
+} // namespace map
diff --git a/test/stress/map/find_string/map_find_string_ellentree.cpp b/test/stress/map/find_string/map_find_string_ellentree.cpp
new file mode 100644 (file)
index 0000000..39ad3aa
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_find_string.h"
+#include "map_type_ellen_bintree.h"
+
+namespace map {
+
+    CDSSTRESS_EllenBinTreeMap( Map_find_string, run_test, std::string, Map_find_string::value_type )
+
+} // namespace map
diff --git a/test/stress/map/find_string/map_find_string_feldman_hashset.cpp b/test/stress/map/find_string/map_find_string_feldman_hashset.cpp
new file mode 100644 (file)
index 0000000..c12cb33
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_find_string.h"
+#include "map_type_feldman_hashmap.h"
+
+namespace map {
+
+    CDSSTRESS_FeldmanHashMap_stdhash( Map_find_string_stdhash, run_test, std::string, Map_find_string::value_type )
+#if CDS_BUILD_BITS == 64
+    CDSSTRESS_FeldmanHashMap_city64(  Map_find_string_city64,  run_test, std::string, Map_find_string::value_type )
+    CDSSTRESS_FeldmanHashMap_city128( Map_find_string_city128, run_test, std::string, Map_find_string::value_type )
+#endif
+
+} // namespace map
diff --git a/test/stress/map/find_string/map_find_string_michael.cpp b/test/stress/map/find_string/map_find_string_michael.cpp
new file mode 100644 (file)
index 0000000..a47eaa0
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_find_string.h"
+#include "map_type_michael.h"
+
+namespace map {
+
+    CDSSTRESS_MichaelMap(      Map_find_string_LF, run_test, std::string, Map_find_string::value_type )
+    CDSSTRESS_MichaelMap_nogc( Map_find_string_LF, run_test, std::string, Map_find_string::value_type )
+
+} // namespace map
diff --git a/test/stress/map/find_string/map_find_string_skip.cpp b/test/stress/map/find_string/map_find_string_skip.cpp
new file mode 100644 (file)
index 0000000..e9f3d6d
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_find_string.h"
+#include "map_type_skip_list.h"
+
+namespace map {
+
+    CDSSTRESS_SkipListMap(      Map_find_string, run_test, std::string, Map_find_string::value_type )
+    CDSSTRESS_SkipListMap_nogc( Map_find_string, run_test, std::string, Map_find_string::value_type )
+
+} // namespace map
diff --git a/test/stress/map/find_string/map_find_string_split.cpp b/test/stress/map/find_string/map_find_string_split.cpp
new file mode 100644 (file)
index 0000000..361a500
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_find_string.h"
+#include "map_type_split_list.h"
+
+namespace map {
+
+    CDSSTRESS_SplitListMap(      Map_find_string_LF, run_test, std::string, Map_find_string::value_type )
+    CDSSTRESS_SplitListMap_nogc( Map_find_string_LF, run_test, std::string, Map_find_string::value_type )
+
+} // namespace map
diff --git a/test/stress/map/find_string/map_find_string_std.cpp b/test/stress/map/find_string/map_find_string_std.cpp
new file mode 100644 (file)
index 0000000..eb00c7e
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_find_string.h"
+#include "map_type_std.h"
+
+namespace map {
+
+    CDSSTRESS_StdMap(        Map_find_string, run_test, std::string, Map_find_string::value_type )
+    CDSSTRESS_StdMap_nolock( Map_find_string, run_test, std::string, Map_find_string::value_type )
+
+} // namespace map
diff --git a/test/stress/map/find_string/map_find_string_striped.cpp b/test/stress/map/find_string/map_find_string_striped.cpp
new file mode 100644 (file)
index 0000000..76d49b9
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_find_string.h"
+#include "map_type_striped.h"
+
+namespace map {
+
+    CDSSTRESS_StripedMap( Map_find_string_LF, run_test, std::string, Map_find_string::value_type )
+
+} // namespace map
diff --git a/test/stress/map/insdel_func/CMakeLists.txt b/test/stress/map/insdel_func/CMakeLists.txt
new file mode 100644 (file)
index 0000000..f6a4e48
--- /dev/null
@@ -0,0 +1,30 @@
+set(PACKAGE_NAME stress-map-insdel-func)
+
+set(CDSSTRESS_MAP_INSDEL_FUNC_SOURCES
+    ../../main.cpp
+    map_insdel_func.cpp
+    map_insdel_func_bronsonavltree.cpp
+    map_insdel_func_cuckoo.cpp
+    map_insdel_func_ellentree.cpp
+    map_insdel_func_feldman_hashset.cpp
+    map_insdel_func_michael.cpp
+    map_insdel_func_skip.cpp
+    map_insdel_func_split.cpp
+    map_insdel_func_striped.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    ${CMAKE_CURRENT_SOURCE_DIR}/..
+)
+
+add_executable(${PACKAGE_NAME} ${CDSSTRESS_MAP_INSDEL_FUNC_SOURCES} $<TARGET_OBJECTS:${CDSSTRESS_FRAMEWORK_LIBRARY}>)
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/stress/map/insdel_func/map_insdel_func.cpp b/test/stress/map/insdel_func/map_insdel_func.cpp
new file mode 100644 (file)
index 0000000..791adbc
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_func.h"
+
+namespace map {
+
+    size_t Map_InsDel_func::s_nMapSize = 1000000;      // map size
+    size_t Map_InsDel_func::s_nInsertThreadCount = 4;  // count of insertion thread
+    size_t Map_InsDel_func::s_nDeleteThreadCount = 4;  // count of deletion thread
+    size_t Map_InsDel_func::s_nUpdateThreadCount = 4;  // count of ensure thread
+    size_t Map_InsDel_func::s_nThreadPassCount = 4;    // pass count for each thread
+    size_t Map_InsDel_func::s_nMaxLoadFactor = 8;      // maximum load factor
+
+    size_t Map_InsDel_func::s_nCuckooInitialSize = 1024;// initial size for CuckooSet
+    size_t Map_InsDel_func::s_nCuckooProbesetSize = 16; // CuckooSet probeset size (only for list-based probeset)
+    size_t Map_InsDel_func::s_nCuckooProbesetThreshold = 0; // CUckooSet probeset threshold (0 - use default)
+
+    size_t Map_InsDel_func::s_nFeldmanMap_HeadBits = 10;
+    size_t Map_InsDel_func::s_nFeldmanMap_ArrayBits = 4;
+
+    size_t Map_InsDel_func::s_nLoadFactor = 1;
+    Map_InsDel_func::key_array Map_InsDel_func::s_arrKeys;
+
+    void Map_InsDel_func::SetUpTestCase()
+    {
+        cds_test::config const& cfg = get_config( "map_insdel_func" );
+
+        s_nMapSize = cfg.get_size_t( "MapSize", s_nMapSize );
+        if ( s_nMapSize < 1000 )
+            s_nMapSize = 1000;
+
+        s_nInsertThreadCount = cfg.get_size_t( "InsertThreadCount", s_nInsertThreadCount );
+        if ( s_nInsertThreadCount == 0 )
+            s_nInsertThreadCount = 2;
+
+        s_nDeleteThreadCount = cfg.get_size_t( "DeleteThreadCount", s_nDeleteThreadCount );
+        if ( s_nDeleteThreadCount == 0 )
+            s_nDeleteThreadCount = 2;
+
+        s_nUpdateThreadCount = cfg.get_size_t( "UpdateThreadCount", s_nUpdateThreadCount );
+        if ( s_nUpdateThreadCount == 0 )
+            s_nUpdateThreadCount = 2;
+
+        s_nThreadPassCount = cfg.get_size_t( "ThreadPassCount", s_nThreadPassCount );
+        if ( s_nThreadPassCount == 0 )
+            s_nThreadPassCount = 4;
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        s_nCuckooInitialSize = cfg.get_size_t( "CuckooInitialSize", s_nCuckooInitialSize );
+        if ( s_nCuckooInitialSize < 256 )
+            s_nCuckooInitialSize = 256;
+
+        s_nCuckooProbesetSize = cfg.get_size_t( "CuckooProbesetSize", s_nCuckooProbesetSize );
+        if ( s_nCuckooProbesetSize < 8 )
+            s_nCuckooProbesetSize = 8;
+
+        s_nCuckooProbesetThreshold = cfg.get_size_t( "CuckooProbesetThreshold", s_nCuckooProbesetThreshold );
+
+        s_nFeldmanMap_HeadBits = cfg.get_size_t( "FeldmanMapHeadBits", s_nFeldmanMap_HeadBits );
+        if ( s_nFeldmanMap_HeadBits == 0 )
+            s_nFeldmanMap_HeadBits = 2;
+
+        s_nFeldmanMap_ArrayBits = cfg.get_size_t( "FeldmanMapArrayBits", s_nFeldmanMap_ArrayBits );
+        if ( s_nFeldmanMap_ArrayBits == 0 )
+            s_nFeldmanMap_ArrayBits = 2;
+
+        s_arrKeys.clear();
+        s_arrKeys.reserve( s_nMapSize );
+        for ( size_t i = 0; i < s_nMapSize; ++i )
+            s_arrKeys.push_back( i );
+        shuffle( s_arrKeys.begin(), s_arrKeys.end() );
+    }
+
+    void Map_InsDel_func::TearDownTestCase()
+    {
+        s_arrKeys.clear();
+    }
+
+    std::vector<size_t> Map_InsDel_func_LF::get_load_factors()
+    {
+        cds_test::config const& cfg = get_config( "map_insdel_func" );
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        std::vector<size_t> lf;
+        for ( size_t n = 1; n <= s_nMaxLoadFactor; n *= 2 )
+            lf.push_back( n );
+
+        return lf;
+    }
+
+    INSTANTIATE_TEST_CASE_P( a, Map_InsDel_func_LF, ::testing::ValuesIn( Map_InsDel_func_LF::get_load_factors()));
+} // namespace map
diff --git a/test/stress/map/insdel_func/map_insdel_func.h b/test/stress/map/insdel_func/map_insdel_func.h
new file mode 100644 (file)
index 0000000..b56f5fe
--- /dev/null
@@ -0,0 +1,545 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_type.h"
+
+namespace map {
+
+    class Map_InsDel_func: public cds_test::stress_fixture
+    {
+    public:
+        static size_t s_nMapSize;           // map size
+        static size_t s_nInsertThreadCount; // count of insertion thread
+        static size_t s_nDeleteThreadCount; // count of deletion thread
+        static size_t s_nUpdateThreadCount; // count of updating thread
+        static size_t s_nThreadPassCount;   // pass count for each thread
+        static size_t s_nMaxLoadFactor;     // maximum load factor
+
+        static size_t s_nCuckooInitialSize;         // initial size for CuckooMap
+        static size_t s_nCuckooProbesetSize;        // CuckooMap probeset size (only for list-based probeset)
+        static size_t s_nCuckooProbesetThreshold;   // CuckooMap probeset threshold (o - use default)
+
+        static size_t s_nFeldmanMap_HeadBits;
+        static size_t s_nFeldmanMap_ArrayBits;
+
+        static size_t s_nLoadFactor;  // current load factor
+
+        static void SetUpTestCase();
+        static void TearDownTestCase();
+
+        typedef size_t  key_type;
+        struct value_type {
+            size_t      nKey;
+            size_t      nData;
+            size_t      nUpdateCall;
+            atomics::atomic<bool>   bInitialized;
+            cds::OS::ThreadId       threadId;   // inserter thread id
+
+            typedef cds::sync::spin_lock< cds::backoff::pause > lock_type;
+            mutable lock_type   m_access;
+
+            value_type()
+                : nKey(0)
+                , nData(0)
+                , nUpdateCall(0)
+                , bInitialized( false )
+                , threadId( cds::OS::get_current_thread_id())
+            {}
+
+            value_type( value_type const& s )
+                : nKey(s.nKey)
+                , nData(s.nData)
+                , nUpdateCall( s.nUpdateCall )
+                , bInitialized( s.bInitialized.load(atomics::memory_order_relaxed))
+                , threadId( cds::OS::get_current_thread_id())
+            {}
+
+            // boost::container::flat_map requires operator =
+            value_type& operator=( value_type const& v )
+            {
+                nKey = v.nKey;
+                nData = v.nData;
+                nUpdateCall = v.nUpdateCall;
+                bInitialized.store(v.bInitialized.load(atomics::memory_order_relaxed), atomics::memory_order_relaxed);
+
+                return *this;
+            }
+        };
+
+        typedef std::vector<key_type>   key_array;
+        static key_array                s_arrKeys;
+
+    protected:
+        enum {
+            insert_thread,
+            delete_thread,
+            update_thread
+        };
+
+        template <class Map>
+        class Inserter: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+            Map&     m_Map;
+
+            struct insert_functor {
+                size_t nTestFunctorRef;
+
+                insert_functor()
+                    : nTestFunctorRef(0)
+                {}
+
+                template <typename Pair>
+                void operator()( Pair& val )
+                {
+                    operator()( val.first, val.second );
+                }
+
+                template <typename Key, typename Val >
+                void operator()( Key const& key, Val& v )
+                {
+                    std::unique_lock< typename value_type::lock_type> ac( v.m_access );
+
+                    v.nKey  = key;
+                    v.nData = key * 8;
+
+                    ++nTestFunctorRef;
+                    v.bInitialized.store( true, atomics::memory_order_relaxed);
+                }
+            };
+
+        public:
+            size_t  m_nInsertSuccess = 0;
+            size_t  m_nInsertFailed = 0;
+
+            size_t  m_nTestFunctorRef = 0;
+
+        public:
+            Inserter( cds_test::thread_pool& pool, Map& map )
+                : base_class( pool, insert_thread )
+                , m_Map( map )
+            {}
+
+            Inserter( Inserter& src )
+                : base_class( src )
+                , m_Map( src.m_Map )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Inserter( *this );
+            }
+
+            virtual void test()
+            {
+                Map& rMap = m_Map;
+
+                // func is passed by reference
+                insert_functor  func;
+                size_t const nPassCount = s_nThreadPassCount;
+
+                if ( id() & 1 ) {
+                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
+                        for ( key_array::const_iterator it = s_arrKeys.begin(), itEnd = s_arrKeys.end(); it != itEnd; ++it ) {
+                            if ( rMap.insert_with( *it, std::ref(func)))
+                                ++m_nInsertSuccess;
+                            else
+                                ++m_nInsertFailed;
+                        }
+                    }
+                }
+                else {
+                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
+                        for ( key_array::const_reverse_iterator it = s_arrKeys.rbegin(), itEnd = s_arrKeys.rend(); it != itEnd; ++it ) {
+                            if ( rMap.insert_with( *it, std::ref(func)))
+                                ++m_nInsertSuccess;
+                            else
+                                ++m_nInsertFailed;
+                        }
+                    }
+                }
+
+                m_nTestFunctorRef = func.nTestFunctorRef;
+            }
+        };
+
+        template <class Map>
+        class Updater: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+            Map&     m_Map;
+
+            struct update_functor {
+                size_t  nCreated = 0;
+                size_t  nModified = 0;
+
+                update_functor() = default;
+
+                template <typename Key, typename Val>
+                void operator()( bool /*bNew*/, Key const& key, Val& v )
+                {
+                    std::unique_lock<typename value_type::lock_type> ac( v.m_access );
+                    if ( !v.bInitialized.load( atomics::memory_order_acquire )) {
+                        ++nCreated;
+                        v.nKey = key;
+                        v.nData = key * 8;
+                        v.bInitialized.store( true, atomics::memory_order_relaxed);
+                    }
+                    else {
+                        ++v.nUpdateCall;
+                        ++nModified;
+                    }
+                }
+
+                template <typename Pair>
+                void operator()( bool bNew, Pair& val )
+                {
+                    operator()( bNew, val.first, val.second );
+                }
+
+                // For FeldmanHashMap
+                template <typename Val>
+                void operator()( Val& cur, Val * old )
+                {
+                    if ( old ) {
+                        // If a key exists, FeldmanHashMap creates a new node too
+                        // We should manually copy important values from old to cur
+                        std::unique_lock<typename value_type::lock_type> ac( cur.second.m_access );
+                        cur.second.nKey = cur.first;
+                        cur.second.nData = cur.first * 8;
+                        cur.second.bInitialized.store( true, atomics::memory_order_release );
+                    }
+                    operator()( old == nullptr, cur.first, cur.second );
+                }
+
+            private:
+                update_functor(const update_functor& ) = delete;
+            };
+
+        public:
+            size_t  m_nUpdateFailed = 0;
+            size_t  m_nUpdateCreated = 0;
+            size_t  m_nUpdateExisted = 0;
+            size_t  m_nFunctorCreated = 0;
+            size_t  m_nFunctorModified = 0;
+
+        public:
+            Updater( cds_test::thread_pool& pool, Map& map )
+                : base_class( pool, update_thread )
+                , m_Map( map )
+            {}
+
+            Updater( Updater& src )
+                : base_class( src )
+                , m_Map( src.m_Map )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Updater( *this );
+            }
+
+            virtual void test()
+            {
+                Map& rMap = m_Map;
+
+                update_functor func;
+                size_t const nPassCount = s_nThreadPassCount;
+
+                if ( id() & 1 ) {
+                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
+                        for ( key_array::const_iterator it = s_arrKeys.begin(), itEnd = s_arrKeys.end(); it != itEnd; ++it ) {
+                            std::pair<bool, bool> ret = rMap.update( *it, std::ref( func ));
+                            if ( ret.first  ) {
+                                if ( ret.second )
+                                    ++m_nUpdateCreated;
+                                else
+                                    ++m_nUpdateExisted;
+                            }
+                            else
+                                ++m_nUpdateFailed;
+                        }
+                    }
+                }
+                else {
+                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
+                        for ( key_array::const_reverse_iterator it = s_arrKeys.rbegin(), itEnd = s_arrKeys.rend(); it != itEnd; ++it ) {
+                            std::pair<bool, bool> ret = rMap.update( *it, std::ref( func ));
+                            if ( ret.first  ) {
+                                if ( ret.second )
+                                    ++m_nUpdateCreated;
+                                else
+                                    ++m_nUpdateExisted;
+                            }
+                            else
+                                ++m_nUpdateFailed;
+                        }
+                    }
+                }
+
+                m_nFunctorCreated = func.nCreated;
+                m_nFunctorModified = func.nModified;
+            }
+        };
+
+        template <class Map>
+        class Deleter: public cds_test::thread
+        {
+            Map&     m_Map;
+            typedef cds_test::thread base_class;
+            typedef typename Map::mapped_type value_type;
+
+            struct value_container
+            {
+                size_t      nKeyExpected;
+
+                size_t      nSuccessItem;
+                size_t      nFailedItem;
+
+                value_container()
+                    : nSuccessItem(0)
+                    , nFailedItem(0)
+                {}
+            };
+
+            struct erase_functor {
+                value_container     m_cnt;
+
+                template <typename Key, typename Val>
+                void operator()( Key const& /*key*/, Val& v )
+                {
+                    while ( true ) {
+                        if ( v.bInitialized.load( atomics::memory_order_relaxed )) {
+                            std::unique_lock< typename value_type::lock_type> ac( v.m_access );
+
+                            if ( m_cnt.nKeyExpected == v.nKey && m_cnt.nKeyExpected * 8 == v.nData )
+                                ++m_cnt.nSuccessItem;
+                            else
+                                ++m_cnt.nFailedItem;
+                            v.nData++;
+                            v.nKey = 0;
+                            break;
+                        }
+                        else
+                            cds::backoff::yield()();
+                    }
+                }
+
+                template <typename Pair>
+                void operator ()( Pair& item )
+                {
+                    operator()( item.first, item.second );
+                }
+            };
+
+        public:
+            size_t  m_nDeleteSuccess = 0;
+            size_t  m_nDeleteFailed = 0;
+            size_t  m_nValueSuccess = 0;
+            size_t  m_nValueFailed = 0;
+
+        public:
+            Deleter( cds_test::thread_pool& pool, Map& map )
+                : base_class( pool, delete_thread )
+                , m_Map( map )
+            {}
+
+            Deleter( Deleter& src )
+                : base_class( src )
+                , m_Map( src.m_Map )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Deleter( *this );
+            }
+
+            virtual void test()
+            {
+                Map& rMap = m_Map;
+
+                erase_functor   func;
+                size_t const nPassCount = s_nThreadPassCount;
+
+                if ( id() & 1 ) {
+                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
+                        for ( key_array::const_iterator it = s_arrKeys.cbegin(), itEnd = s_arrKeys.cend(); it != itEnd; ++it ) {
+                            func.m_cnt.nKeyExpected = *it;
+                            if ( rMap.erase( *it, std::ref(func)))
+                                ++m_nDeleteSuccess;
+                            else
+                                ++m_nDeleteFailed;
+                        }
+                    }
+                }
+                else {
+                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
+                        for ( key_array::const_reverse_iterator it = s_arrKeys.crbegin(), itEnd = s_arrKeys.crend(); it != itEnd; ++it ) {
+                            func.m_cnt.nKeyExpected = *it;
+                            if ( rMap.erase( *it, std::ref(func)))
+                                ++m_nDeleteSuccess;
+                            else
+                                ++m_nDeleteFailed;
+                        }
+                    }
+                }
+
+                m_nValueSuccess = func.m_cnt.nSuccessItem;
+                m_nValueFailed = func.m_cnt.nFailedItem;
+            }
+        };
+
+    protected:
+
+        template <class Map>
+        void do_test( Map& testMap )
+        {
+            typedef Inserter<Map> inserter;
+            typedef Deleter<Map>  deleter;
+            typedef Updater<Map>  updater;
+
+            cds_test::thread_pool& pool = get_pool();
+            pool.add( new inserter( pool, testMap ), s_nInsertThreadCount );
+            pool.add( new deleter( pool, testMap ), s_nDeleteThreadCount );
+            pool.add( new updater( pool, testMap ), s_nUpdateThreadCount );
+
+            propout() << std::make_pair( "insert_thread_count", s_nInsertThreadCount )
+                << std::make_pair( "delete_thread_count", s_nDeleteThreadCount )
+                << std::make_pair( "update_thread_count", s_nUpdateThreadCount )
+                << std::make_pair( "pass_count", s_nThreadPassCount )
+                << std::make_pair( "map_size", s_nMapSize );
+
+            std::chrono::milliseconds duration = pool.run();
+
+            propout() << std::make_pair( "duration", duration );
+
+            size_t nInsertSuccess = 0;
+            size_t nInsertFailed = 0;
+            size_t nDeleteSuccess = 0;
+            size_t nDeleteFailed = 0;
+            size_t nDelValueSuccess = 0;
+            size_t nDelValueFailed = 0;
+            size_t nUpdateFailed = 0;
+            size_t nUpdateCreated = 0;
+            size_t nUpdateModified = 0;
+            size_t nEnsFuncCreated = 0;
+            size_t nEnsFuncModified = 0;
+            size_t nInsFuncCalled = 0;
+
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                cds_test::thread& thr = pool.get( i );
+                switch ( thr.type() ) {
+                case insert_thread:
+                    {
+                        inserter& t = static_cast<inserter&>( thr );
+                        nInsertSuccess += t.m_nInsertSuccess;
+                        nInsertFailed += t.m_nInsertFailed;
+                        nInsFuncCalled += t.m_nTestFunctorRef;
+                    }
+                    break;
+                case delete_thread:
+                    {
+                        deleter& t = static_cast<deleter&>(thr);
+                        nDeleteSuccess += t.m_nDeleteSuccess;
+                        nDeleteFailed += t.m_nDeleteFailed;
+                        nDelValueSuccess += t.m_nValueSuccess;
+                        nDelValueFailed += t.m_nValueFailed;
+                    }
+                    break;
+                case update_thread:
+                    {
+                        updater& t = static_cast<updater&>(thr);
+                        nUpdateCreated += t.m_nUpdateCreated;
+                        nUpdateModified += t.m_nUpdateExisted;
+                        nUpdateFailed += t.m_nUpdateFailed;
+                        nEnsFuncCreated += t.m_nFunctorCreated;
+                        nEnsFuncModified += t.m_nFunctorModified;
+                    }
+                    break;
+                default:
+                    assert( false );
+                }
+            }
+
+            propout()
+                << std::make_pair( "insert_success", nInsertSuccess )
+                << std::make_pair( "insert_failed",  nInsertFailed )
+                << std::make_pair( "delete_success", nDeleteSuccess )
+                << std::make_pair( "delete_failed",  nDeleteFailed )
+                << std::make_pair( "update_success", nUpdateCreated + nUpdateModified )
+                << std::make_pair( "update_failed",  nUpdateFailed )
+                << std::make_pair( "update_functor_create", nEnsFuncCreated )
+                << std::make_pair( "update_functor_modify", nEnsFuncModified )
+                << std::make_pair( "finish_map_size", testMap.size() );
+
+            EXPECT_EQ( nDelValueFailed, 0 );
+            EXPECT_EQ( nDelValueSuccess, nDeleteSuccess );
+            EXPECT_EQ( nUpdateFailed, 0 );
+            EXPECT_EQ( nUpdateCreated + nUpdateModified, nEnsFuncCreated + nEnsFuncModified );
+
+            // nInsFuncCalled is call count of insert functor
+            EXPECT_EQ( nInsFuncCalled, nInsertSuccess );
+
+            check_before_cleanup( testMap );
+
+            for ( size_t nItem = 0; nItem < s_nMapSize; ++nItem )
+                testMap.erase( nItem );
+
+            EXPECT_TRUE( testMap.empty());
+
+            additional_check( testMap );
+            print_stat( propout(), testMap );
+            additional_cleanup( testMap );
+        }
+
+        template <class Map>
+        void run_test()
+        {
+            Map testMap( *this );
+            do_test( testMap );
+        }
+    };
+
+    class Map_InsDel_func_LF: public Map_InsDel_func
+        , public ::testing::WithParamInterface<size_t>
+    {
+    public:
+        template <class Set>
+        void run_test()
+        {
+            s_nLoadFactor = GetParam();
+            propout() << std::make_pair( "load_factor", s_nLoadFactor );
+            Map_InsDel_func::run_test<Set>();
+        }
+
+        static std::vector<size_t> get_load_factors();
+    };
+
+} // namespace map
diff --git a/test/stress/map/insdel_func/map_insdel_func_bronsonavltree.cpp b/test/stress/map/insdel_func/map_insdel_func_bronsonavltree.cpp
new file mode 100644 (file)
index 0000000..8d52d8a
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_func.h"
+#include "map_type_bronson_avltree.h"
+
+namespace map {
+
+    CDSSTRESS_BronsonAVLTreeMap( Map_InsDel_func, run_test, size_t, Map_InsDel_func::value_type )
+
+} // namespace map
diff --git a/test/stress/map/insdel_func/map_insdel_func_cuckoo.cpp b/test/stress/map/insdel_func/map_insdel_func_cuckoo.cpp
new file mode 100644 (file)
index 0000000..535e180
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_func.h"
+#include "map_type_cuckoo.h"
+
+namespace map {
+
+    CDSSTRESS_CuckooMap( Map_InsDel_func, run_test, size_t, Map_InsDel_func::value_type )
+
+} // namespace map
diff --git a/test/stress/map/insdel_func/map_insdel_func_ellentree.cpp b/test/stress/map/insdel_func/map_insdel_func_ellentree.cpp
new file mode 100644 (file)
index 0000000..aa0d15c
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_func.h"
+#include "map_type_ellen_bintree.h"
+
+namespace map {
+
+    CDSSTRESS_EllenBinTreeMap( Map_InsDel_func, run_test, size_t, Map_InsDel_func::value_type )
+
+} // namespace map
diff --git a/test/stress/map/insdel_func/map_insdel_func_feldman_hashset.cpp b/test/stress/map/insdel_func/map_insdel_func_feldman_hashset.cpp
new file mode 100644 (file)
index 0000000..d4ef1d1
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_func.h"
+#include "map_type_feldman_hashmap.h"
+
+namespace map {
+
+    CDSSTRESS_FeldmanHashMap_fixed( Map_InsDel_func, run_test, size_t, Map_InsDel_func::value_type )
+
+} // namespace map
diff --git a/test/stress/map/insdel_func/map_insdel_func_michael.cpp b/test/stress/map/insdel_func/map_insdel_func_michael.cpp
new file mode 100644 (file)
index 0000000..9ad39ba
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_func.h"
+#include "map_type_michael.h"
+
+namespace map {
+
+    CDSSTRESS_MichaelMap( Map_InsDel_func_LF, run_test, size_t, Map_InsDel_func::value_type )
+
+} // namespace map
diff --git a/test/stress/map/insdel_func/map_insdel_func_skip.cpp b/test/stress/map/insdel_func/map_insdel_func_skip.cpp
new file mode 100644 (file)
index 0000000..bd94904
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_func.h"
+#include "map_type_skip_list.h"
+
+namespace map {
+
+    CDSSTRESS_SkipListMap( Map_InsDel_func, run_test, size_t, Map_InsDel_func::value_type )
+
+} // namespace map
diff --git a/test/stress/map/insdel_func/map_insdel_func_split.cpp b/test/stress/map/insdel_func/map_insdel_func_split.cpp
new file mode 100644 (file)
index 0000000..e6cd74d
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_func.h"
+#include "map_type_split_list.h"
+
+namespace map {
+
+    CDSSTRESS_SplitListMap( Map_InsDel_func_LF, run_test, size_t, Map_InsDel_func::value_type )
+
+} // namespace map
diff --git a/test/stress/map/insdel_func/map_insdel_func_striped.cpp b/test/stress/map/insdel_func/map_insdel_func_striped.cpp
new file mode 100644 (file)
index 0000000..f04c550
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_func.h"
+#include "map_type_striped.h"
+
+namespace map {
+
+    CDSSTRESS_StripedMap( Map_InsDel_func_LF, run_test, size_t, Map_InsDel_func::value_type )
+
+} // namespace map
diff --git a/test/stress/map/insdel_int/CMakeLists.txt b/test/stress/map/insdel_int/CMakeLists.txt
new file mode 100644 (file)
index 0000000..7c23b0c
--- /dev/null
@@ -0,0 +1,31 @@
+set(PACKAGE_NAME stress-map-insdel-int)
+
+set(CDSSTRESS_MAP_INSDEL_INT_SOURCES
+    ../../main.cpp
+    map_insdel_int.cpp
+    map_insdel_int_bronsonavltree.cpp
+    map_insdel_int_cuckoo.cpp
+    map_insdel_int_ellentree.cpp
+    map_insdel_int_feldman_hashset.cpp
+    map_insdel_int_michael.cpp
+    map_insdel_int_skip.cpp
+    map_insdel_int_split.cpp
+    map_insdel_int_std.cpp
+    map_insdel_int_striped.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    ${CMAKE_CURRENT_SOURCE_DIR}/..
+)
+
+add_executable(${PACKAGE_NAME} ${CDSSTRESS_MAP_INSDEL_INT_SOURCES} $<TARGET_OBJECTS:${CDSSTRESS_FRAMEWORK_LIBRARY}>)
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/stress/map/insdel_int/map_insdel_int.cpp b/test/stress/map/insdel_int/map_insdel_int.cpp
new file mode 100644 (file)
index 0000000..3b7587a
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_int.h"
+
+namespace map {
+
+    size_t Map_InsDel_int::s_nMapSize = 1000000;      // map size
+    size_t Map_InsDel_int::s_nInsertThreadCount = 4;  // count of insertion thread
+    size_t Map_InsDel_int::s_nDeleteThreadCount = 4;  // count of deletion thread
+    size_t Map_InsDel_int::s_nThreadPassCount = 4;    // pass count for each thread
+    size_t Map_InsDel_int::s_nMaxLoadFactor = 8;      // maximum load factor
+
+    size_t Map_InsDel_int::s_nCuckooInitialSize = 1024;// initial size for CuckooSet
+    size_t Map_InsDel_int::s_nCuckooProbesetSize = 16; // CuckooSet probeset size (only for list-based probeset)
+    size_t Map_InsDel_int::s_nCuckooProbesetThreshold = 0; // CUckooSet probeset threshold (0 - use default)
+
+    size_t Map_InsDel_int::s_nFeldmanMap_HeadBits = 10;
+    size_t Map_InsDel_int::s_nFeldmanMap_ArrayBits = 4;
+
+    size_t Map_InsDel_int::s_nLoadFactor = 1;
+    Map_InsDel_int::key_array Map_InsDel_int::s_arrKeys;
+
+    void Map_InsDel_int::SetUpTestCase()
+    {
+        cds_test::config const& cfg = get_config( "map_insdel_int" );
+
+        s_nMapSize = cfg.get_size_t( "MapSize", s_nMapSize );
+        if ( s_nMapSize < 1000 )
+            s_nMapSize = 1000;
+
+        s_nInsertThreadCount = cfg.get_size_t( "InsertThreadCount", s_nInsertThreadCount );
+        if ( s_nInsertThreadCount == 0 )
+            s_nInsertThreadCount = 2;
+
+        s_nDeleteThreadCount = cfg.get_size_t( "DeleteThreadCount", s_nDeleteThreadCount );
+        if ( s_nDeleteThreadCount == 0 )
+            s_nDeleteThreadCount = 2;
+
+        s_nThreadPassCount = cfg.get_size_t( "ThreadPassCount", s_nThreadPassCount );
+        if ( s_nThreadPassCount == 0 )
+            s_nThreadPassCount = 4;
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        s_nCuckooInitialSize = cfg.get_size_t( "CuckooInitialSize", s_nCuckooInitialSize );
+        if ( s_nCuckooInitialSize < 256 )
+            s_nCuckooInitialSize = 256;
+
+        s_nCuckooProbesetSize = cfg.get_size_t( "CuckooProbesetSize", s_nCuckooProbesetSize );
+        if ( s_nCuckooProbesetSize < 8 )
+            s_nCuckooProbesetSize = 8;
+
+        s_nCuckooProbesetThreshold = cfg.get_size_t( "CuckooProbesetThreshold", s_nCuckooProbesetThreshold );
+
+        s_nFeldmanMap_HeadBits = cfg.get_size_t( "FeldmanMapHeadBits", s_nFeldmanMap_HeadBits );
+        if ( s_nFeldmanMap_HeadBits == 0 )
+            s_nFeldmanMap_HeadBits = 2;
+
+        s_nFeldmanMap_ArrayBits = cfg.get_size_t( "FeldmanMapArrayBits", s_nFeldmanMap_ArrayBits );
+        if ( s_nFeldmanMap_ArrayBits == 0 )
+            s_nFeldmanMap_ArrayBits = 2;
+
+        s_arrKeys.clear();
+        s_arrKeys.reserve( s_nMapSize );
+        for ( size_t i = 0; i < s_nMapSize; ++i )
+            s_arrKeys.push_back( i );
+        shuffle( s_arrKeys.begin(), s_arrKeys.end() );
+    }
+
+    void Map_InsDel_int::TearDownTestCase()
+    {
+        s_arrKeys.clear();
+    }
+
+    std::vector<size_t> Map_InsDel_int_LF::get_load_factors()
+    {
+        cds_test::config const& cfg = get_config( "map_insdel_int" );
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        std::vector<size_t> lf;
+        for ( size_t n = 1; n <= s_nMaxLoadFactor; n *= 2 )
+            lf.push_back( n );
+
+        return lf;
+    }
+
+    INSTANTIATE_TEST_CASE_P( a, Map_InsDel_int_LF, ::testing::ValuesIn( Map_InsDel_int_LF::get_load_factors()));
+} // namespace map
diff --git a/test/stress/map/insdel_int/map_insdel_int.h b/test/stress/map/insdel_int/map_insdel_int.h
new file mode 100644 (file)
index 0000000..5fc3138
--- /dev/null
@@ -0,0 +1,261 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_type.h"
+
+namespace map {
+
+    class Map_InsDel_int: public cds_test::stress_fixture
+    {
+    public:
+        static size_t s_nMapSize;           // map size
+        static size_t s_nInsertThreadCount; // count of insertion thread
+        static size_t s_nDeleteThreadCount; // count of deletion thread
+        static size_t s_nThreadPassCount;   // pass count for each thread
+        static size_t s_nMaxLoadFactor;     // maximum load factor
+
+        static size_t s_nCuckooInitialSize;         // initial size for CuckooMap
+        static size_t s_nCuckooProbesetSize;        // CuckooMap probeset size (only for list-based probeset)
+        static size_t s_nCuckooProbesetThreshold;   // CuckooMap probeset threshold (o - use default)
+
+        static size_t s_nFeldmanMap_HeadBits;
+        static size_t s_nFeldmanMap_ArrayBits;
+
+        static size_t  s_nLoadFactor;  // current load factor
+
+        static void SetUpTestCase();
+        static void TearDownTestCase();
+
+        typedef size_t  key_type;
+        typedef size_t  value_type;
+
+        typedef std::vector<key_type>   key_array;
+        static key_array                s_arrKeys;
+
+    protected:
+        enum {
+            insert_thread,
+            delete_thread
+        };
+
+        template <class Map>
+        class Inserter: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+            Map&     m_Map;
+
+        public:
+            size_t  m_nInsertSuccess = 0;
+            size_t  m_nInsertFailed = 0;
+
+        public:
+            Inserter( cds_test::thread_pool& pool, Map& map )
+                : base_class( pool, insert_thread )
+                , m_Map( map )
+            {}
+
+            Inserter( Inserter& src )
+                : base_class( src )
+                , m_Map( src.m_Map )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Inserter( *this );
+            }
+
+            virtual void test()
+            {
+                Map& rMap = m_Map;
+
+                if ( id() & 1 ) {
+                    for ( size_t nPass = 0; nPass < s_nThreadPassCount; ++nPass ) {
+                        for ( key_array::const_iterator it = s_arrKeys.cbegin(), itEnd = s_arrKeys.cend(); it != itEnd; ++it ) {
+                            if ( rMap.insert( *it, *it * 8 ) )
+                                ++m_nInsertSuccess;
+                            else
+                                ++m_nInsertFailed;
+                        }
+                    }
+                }
+                else {
+                    for ( size_t nPass = 0; nPass < s_nThreadPassCount; ++nPass ) {
+                        for ( key_array::const_reverse_iterator it = s_arrKeys.crbegin(), itEnd = s_arrKeys.crend(); it != itEnd; ++it ) {
+                            if ( rMap.insert( *it, *it * 8 ) )
+                                ++m_nInsertSuccess;
+                            else
+                                ++m_nInsertFailed;
+                        }
+                    }
+                }
+            }
+        };
+
+        template <class Map>
+        class Deleter: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+            Map&     m_Map;
+        public:
+            size_t  m_nDeleteSuccess = 0;
+            size_t  m_nDeleteFailed = 0;
+
+        public:
+            Deleter( cds_test::thread_pool& pool, Map& map )
+                : base_class( pool, delete_thread )
+                , m_Map( map )
+            {}
+
+            Deleter( Deleter& src )
+                : base_class( src )
+                , m_Map( src.m_Map )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Deleter( *this );
+            }
+
+            virtual void test()
+            {
+                Map& rMap = m_Map;
+
+                if ( id() & 1 ) {
+                    for ( size_t nPass = 0; nPass < s_nThreadPassCount; ++nPass ) {
+                        for ( key_array::const_iterator it = s_arrKeys.cbegin(), itEnd = s_arrKeys.cend(); it != itEnd; ++it ) {
+                            if ( rMap.erase( *it ) )
+                                ++m_nDeleteSuccess;
+                            else
+                                ++m_nDeleteFailed;
+                        }
+                    }
+                }
+                else {
+                    for ( size_t nPass = 0; nPass < s_nThreadPassCount; ++nPass ) {
+                        for ( key_array::const_reverse_iterator it = s_arrKeys.crbegin(), itEnd = s_arrKeys.crend(); it != itEnd; ++it ) {
+                            if ( rMap.erase( *it ) )
+                                ++m_nDeleteSuccess;
+                            else
+                                ++m_nDeleteFailed;
+                        }
+                    }
+                }
+            }
+        };
+
+    protected:
+        template <class Map>
+        void do_test( Map& testMap )
+        {
+            typedef Inserter<Map>       inserter;
+            typedef Deleter<Map>        deleter;
+
+            cds_test::thread_pool& pool = get_pool();
+            pool.add( new inserter( pool, testMap ), s_nInsertThreadCount );
+            pool.add( new deleter( pool, testMap ), s_nDeleteThreadCount );
+
+            propout() << std::make_pair( "insert_thread_count", s_nInsertThreadCount )
+                << std::make_pair( "delete_thread_count", s_nDeleteThreadCount )
+                << std::make_pair( "pass_count", s_nThreadPassCount )
+                << std::make_pair( "map_size", s_nMapSize );
+
+            std::chrono::milliseconds duration = pool.run();
+
+            propout() << std::make_pair( "duration", duration );
+
+            size_t nInsertSuccess = 0;
+            size_t nInsertFailed = 0;
+            size_t nDeleteSuccess = 0;
+            size_t nDeleteFailed = 0;
+
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                cds_test::thread& thr = pool.get( i );
+                switch ( thr.type() ) {
+                case insert_thread:
+                    {
+                        inserter& t = static_cast<inserter&>( thr );
+                        nInsertSuccess += t.m_nInsertSuccess;
+                        nInsertFailed += t.m_nInsertFailed;
+                    }
+                    break;
+                case delete_thread:
+                    {
+                        deleter& t = static_cast<deleter&>(thr);
+                        nDeleteSuccess += t.m_nDeleteSuccess;
+                        nDeleteFailed += t.m_nDeleteFailed;
+                    }
+                    break;
+                default:
+                    assert( false );
+                }
+            }
+
+            propout()
+                << std::make_pair( "insert_success", nInsertSuccess )
+                << std::make_pair( "insert_failed", nInsertFailed )
+                << std::make_pair( "delete_success", nDeleteSuccess )
+                << std::make_pair( "delete_failed", nDeleteFailed )
+                << std::make_pair( "finish_map_size", testMap.size() );
+
+            check_before_cleanup( testMap );
+
+            testMap.clear();
+
+            EXPECT_TRUE( testMap.empty());
+
+            additional_check( testMap );
+            print_stat( propout(), testMap );
+            additional_cleanup( testMap );
+        }
+
+        template <class Map>
+        void run_test()
+        {
+            Map testMap( *this );
+            do_test( testMap );
+        }
+    };
+
+    class Map_InsDel_int_LF: public Map_InsDel_int
+        , public ::testing::WithParamInterface<size_t>
+    {
+    public:
+        template <class Set>
+        void run_test()
+        {
+            s_nLoadFactor = GetParam();
+            propout() << std::make_pair( "load_factor", s_nLoadFactor );
+            Map_InsDel_int::run_test<Set>();
+        }
+
+        static std::vector<size_t> get_load_factors();
+    };
+
+} // namespace map
diff --git a/test/stress/map/insdel_int/map_insdel_int_bronsonavltree.cpp b/test/stress/map/insdel_int/map_insdel_int_bronsonavltree.cpp
new file mode 100644 (file)
index 0000000..417290d
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_int.h"
+#include "map_type_bronson_avltree.h"
+
+namespace map {
+
+    CDSSTRESS_BronsonAVLTreeMap( Map_InsDel_int, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_int/map_insdel_int_cuckoo.cpp b/test/stress/map/insdel_int/map_insdel_int_cuckoo.cpp
new file mode 100644 (file)
index 0000000..887d311
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_int.h"
+#include "map_type_cuckoo.h"
+
+namespace map {
+
+    CDSSTRESS_CuckooMap( Map_InsDel_int, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_int/map_insdel_int_ellentree.cpp b/test/stress/map/insdel_int/map_insdel_int_ellentree.cpp
new file mode 100644 (file)
index 0000000..5d480c8
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_int.h"
+#include "map_type_ellen_bintree.h"
+
+namespace map {
+
+    CDSSTRESS_EllenBinTreeMap( Map_InsDel_int, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_int/map_insdel_int_feldman_hashset.cpp b/test/stress/map/insdel_int/map_insdel_int_feldman_hashset.cpp
new file mode 100644 (file)
index 0000000..24f62c8
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_int.h"
+#include "map_type_feldman_hashmap.h"
+
+namespace map {
+
+    CDSSTRESS_FeldmanHashMap_fixed( Map_InsDel_int, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_int/map_insdel_int_michael.cpp b/test/stress/map/insdel_int/map_insdel_int_michael.cpp
new file mode 100644 (file)
index 0000000..46ebfdb
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_int.h"
+#include "map_type_michael.h"
+
+namespace map {
+
+    CDSSTRESS_MichaelMap( Map_InsDel_int_LF, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_int/map_insdel_int_skip.cpp b/test/stress/map/insdel_int/map_insdel_int_skip.cpp
new file mode 100644 (file)
index 0000000..0b490cc
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_int.h"
+#include "map_type_skip_list.h"
+
+namespace map {
+
+    CDSSTRESS_SkipListMap( Map_InsDel_int, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_int/map_insdel_int_split.cpp b/test/stress/map/insdel_int/map_insdel_int_split.cpp
new file mode 100644 (file)
index 0000000..cce10ba
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_int.h"
+#include "map_type_split_list.h"
+
+namespace map {
+
+    CDSSTRESS_SplitListMap( Map_InsDel_int_LF, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_int/map_insdel_int_std.cpp b/test/stress/map/insdel_int/map_insdel_int_std.cpp
new file mode 100644 (file)
index 0000000..b22b32f
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_int.h"
+#include "map_type_std.h"
+
+namespace map {
+
+    CDSSTRESS_StdMap( Map_InsDel_int, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_int/map_insdel_int_striped.cpp b/test/stress/map/insdel_int/map_insdel_int_striped.cpp
new file mode 100644 (file)
index 0000000..520aa30
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_int.h"
+#include "map_type_striped.h"
+
+namespace map {
+
+    CDSSTRESS_StripedMap( Map_InsDel_int_LF, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_item_int/CMakeLists.txt b/test/stress/map/insdel_item_int/CMakeLists.txt
new file mode 100644 (file)
index 0000000..b3ea1bf
--- /dev/null
@@ -0,0 +1,30 @@
+set(PACKAGE_NAME stress-map-insdel-item-int)
+
+set(CDSSTRESS_MAP_INSDEL_ITEM_INT_SOURCES
+    ../../main.cpp
+    map_insdel_item_int.cpp
+    map_insdel_item_int_bronsonavltree.cpp
+    map_insdel_item_int_cuckoo.cpp
+    map_insdel_item_int_ellentree.cpp
+    map_insdel_item_int_feldman_hashset.cpp
+    map_insdel_item_int_michael.cpp
+    map_insdel_item_int_skip.cpp
+    map_insdel_item_int_split.cpp
+    map_insdel_item_int_striped.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    ${CMAKE_CURRENT_SOURCE_DIR}/..
+)
+
+add_executable(${PACKAGE_NAME} ${CDSSTRESS_MAP_INSDEL_ITEM_INT_SOURCES} $<TARGET_OBJECTS:${CDSSTRESS_FRAMEWORK_LIBRARY}>)
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/stress/map/insdel_item_int/map_insdel_item_int.cpp b/test/stress/map/insdel_item_int/map_insdel_item_int.cpp
new file mode 100644 (file)
index 0000000..8f1ca51
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_item_int.h"
+
+namespace map {
+
+    size_t Map_InsDel_item_int::s_nMapSize = 10000;      // map size
+    size_t Map_InsDel_item_int::s_nInsertThreadCount = 4;  // count of insertion thread
+    size_t Map_InsDel_item_int::s_nDeleteThreadCount = 4;  // count of deletion thread
+    size_t Map_InsDel_item_int::s_nMaxLoadFactor = 8;      // maximum load factor
+
+    size_t Map_InsDel_item_int::s_nAttemptCount = 2000;      // count of SUCCESS insert/delete for each thread
+    size_t Map_InsDel_item_int::s_nGoalItem = 5000;
+
+    size_t Map_InsDel_item_int::s_nCuckooInitialSize = 1024;// initial size for CuckooSet
+    size_t Map_InsDel_item_int::s_nCuckooProbesetSize = 16; // CuckooSet probeset size (only for list-based probeset)
+    size_t Map_InsDel_item_int::s_nCuckooProbesetThreshold = 0; // CUckooSet probeset threshold (0 - use default)
+
+    size_t Map_InsDel_item_int::s_nFeldmanMap_HeadBits = 10;
+    size_t Map_InsDel_item_int::s_nFeldmanMap_ArrayBits = 4;
+
+    size_t Map_InsDel_item_int::s_nLoadFactor = 1;
+
+    void Map_InsDel_item_int::SetUpTestCase()
+    {
+        cds_test::config const& cfg = get_config( "map_insdel_item_int" );
+
+        s_nMapSize = cfg.get_size_t( "MapSize", s_nMapSize );
+        if ( s_nMapSize < 1000 )
+            s_nMapSize = 1000;
+
+        s_nInsertThreadCount = cfg.get_size_t( "InsertThreadCount", s_nInsertThreadCount );
+        if ( s_nInsertThreadCount == 0 )
+            s_nInsertThreadCount = 2;
+
+        s_nDeleteThreadCount = cfg.get_size_t( "DeleteThreadCount", s_nDeleteThreadCount );
+        if ( s_nDeleteThreadCount == 0 )
+            s_nDeleteThreadCount = 2;
+
+        s_nGoalItem = cfg.get_size_t( "GoalItem", s_nGoalItem );
+        if ( s_nGoalItem >= s_nMapSize )
+            s_nGoalItem = s_nMapSize / 2;
+
+        s_nAttemptCount = cfg.get_size_t( "AttemptCount", s_nAttemptCount );
+        if ( s_nAttemptCount == 0 )
+            s_nAttemptCount = 1000;
+
+        s_nCuckooInitialSize = cfg.get_size_t( "CuckooInitialSize", s_nCuckooInitialSize );
+        if ( s_nCuckooInitialSize < 256 )
+            s_nCuckooInitialSize = 256;
+
+        s_nCuckooProbesetSize = cfg.get_size_t( "CuckooProbesetSize", s_nCuckooProbesetSize );
+        if ( s_nCuckooProbesetSize < 8 )
+            s_nCuckooProbesetSize = 8;
+
+        s_nCuckooProbesetThreshold = cfg.get_size_t( "CuckooProbesetThreshold", s_nCuckooProbesetThreshold );
+
+        s_nFeldmanMap_HeadBits = cfg.get_size_t( "FeldmanMapHeadBits", s_nFeldmanMap_HeadBits );
+        if ( s_nFeldmanMap_HeadBits == 0 )
+            s_nFeldmanMap_HeadBits = 2;
+
+        s_nFeldmanMap_ArrayBits = cfg.get_size_t( "FeldmanMapArrayBits", s_nFeldmanMap_ArrayBits );
+        if ( s_nFeldmanMap_ArrayBits == 0 )
+            s_nFeldmanMap_ArrayBits = 2;
+    }
+
+    std::vector<size_t> Map_InsDel_item_int_LF::get_load_factors()
+    {
+        cds_test::config const& cfg = get_config( "map_insdel_item_int" );
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        std::vector<size_t> lf;
+        for ( size_t n = 1; n <= s_nMaxLoadFactor; n *= 2 )
+            lf.push_back( n );
+
+        return lf;
+    }
+
+    INSTANTIATE_TEST_CASE_P( a, Map_InsDel_item_int_LF, ::testing::ValuesIn( Map_InsDel_item_int_LF::get_load_factors()));
+} // namespace map
diff --git a/test/stress/map/insdel_item_int/map_insdel_item_int.h b/test/stress/map/insdel_item_int/map_insdel_item_int.h
new file mode 100644 (file)
index 0000000..66d783c
--- /dev/null
@@ -0,0 +1,302 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_type.h"
+
+namespace map {
+
+    class Map_InsDel_item_int: public cds_test::stress_fixture
+    {
+    public:
+        static size_t s_nMapSize;           // map size
+        static size_t s_nInsertThreadCount; // count of insertion thread
+        static size_t s_nDeleteThreadCount; // count of deletion thread
+        static size_t s_nMaxLoadFactor;     // maximum load factor
+
+        static size_t s_nAttemptCount;      // count of SUCCESS insert/delete for each thread
+        static size_t s_nGoalItem;
+
+        static size_t s_nCuckooInitialSize;         // initial size for CuckooMap
+        static size_t s_nCuckooProbesetSize;        // CuckooMap probeset size (only for list-based probeset)
+        static size_t s_nCuckooProbesetThreshold;   // CuckooMap probeset threshold (o - use default)
+
+        static size_t s_nFeldmanMap_HeadBits;
+        static size_t s_nFeldmanMap_ArrayBits;
+
+        static size_t  s_nLoadFactor;  // current load factor
+
+        static void SetUpTestCase();
+        //static void TearDownTestCase();
+
+        typedef size_t  key_type;
+        typedef size_t  value_type;
+
+    protected:
+        enum {
+            insert_thread,
+            delete_thread
+        };
+
+        template <class Map>
+        class Inserter: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+            Map&     m_Map;
+
+            struct update_func
+            {
+                void operator()( bool bNew, std::pair<key_type const, value_type>& item )
+                {
+                    if ( bNew )
+                        item.second = item.first;
+                }
+                // for boost::container::flat_map
+                void operator()( bool bNew, std::pair<key_type, value_type>& item )
+                {
+                    if ( bNew )
+                        item.second = item.first;
+                }
+
+                // for BronsonAVLTreeMap
+                void operator()( bool bNew, key_type key, value_type& val )
+                {
+                    if ( bNew )
+                        val = key;
+                }
+
+                // for FeldmanHashMap
+                void operator()( std::pair<key_type const, value_type>& item, std::pair<key_type const, value_type> * pOld )
+                {
+                    if ( !pOld )
+                        item.second = item.first;
+                }
+            };
+
+        public:
+            size_t  m_nInsertSuccess = 0;
+            size_t  m_nInsertFailed = 0;
+
+        public:
+            Inserter( cds_test::thread_pool& pool, Map& map )
+                : base_class( pool, insert_thread )
+                , m_Map( map )
+            {}
+
+            Inserter( Inserter& src )
+                : base_class( src )
+                , m_Map( src.m_Map )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Inserter( *this );
+            }
+
+            virtual void test()
+            {
+                Map& rMap = m_Map;
+
+                size_t const nGoalItem = s_nGoalItem;
+                size_t const nAttemptCount = s_nAttemptCount;
+
+                for ( size_t nAttempt = 0; nAttempt < nAttemptCount; ) {
+                    if ( nAttempt % 2  == 0 ) {
+                        if ( rMap.insert( nGoalItem, nGoalItem )) {
+                            ++m_nInsertSuccess;
+                            ++nAttempt;
+                        }
+                        else
+                            ++m_nInsertFailed;
+                    }
+                    else {
+                        std::pair<bool, bool> updateResult = rMap.update( nGoalItem, update_func(), true );
+                        if ( updateResult.second ) {
+                            ++m_nInsertSuccess;
+                            ++nAttempt;
+                        }
+                        else
+                            ++m_nInsertFailed;
+                    }
+                }
+            }
+        };
+
+        template <class Map>
+        class Deleter: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+            Map&     m_Map;
+
+        public:
+            size_t  m_nDeleteSuccess = 0;
+            size_t  m_nDeleteFailed = 0;
+
+        public:
+            Deleter( cds_test::thread_pool& pool, Map& map )
+                : base_class( pool, delete_thread )
+                , m_Map( map )
+            {}
+
+            Deleter( Deleter& src )
+                : base_class( src )
+                , m_Map( src.m_Map )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Deleter( *this );
+            }
+
+            virtual void test()
+            {
+                Map& rMap = m_Map;
+
+                size_t const nGoalItem = s_nGoalItem;
+                size_t const nAttemptCount = s_nAttemptCount;
+                for ( size_t nAttempt = 0; nAttempt < nAttemptCount; ) {
+                    if ( rMap.erase( nGoalItem )) {
+                        ++m_nDeleteSuccess;
+                        ++nAttempt;
+                    }
+                    else
+                        ++m_nDeleteFailed;
+                }
+            }
+        };
+
+    protected:
+
+        template <class Map>
+        void do_test( Map& testMap )
+        {
+            typedef Inserter<Map>       inserter;
+            typedef Deleter<Map>        deleter;
+
+            // Fill the map
+            {
+                std::vector<key_type>   v;
+                v.reserve( s_nMapSize );
+                for ( size_t i = 0; i < s_nMapSize; ++i )
+                    v.push_back( i );
+                shuffle( v.begin(), v.end() );
+                for ( auto i: v )
+                    EXPECT_TRUE( testMap.insert( i, i ));
+            }
+
+            cds_test::thread_pool& pool = get_pool();
+            pool.add( new inserter( pool, testMap ), s_nInsertThreadCount );
+            pool.add( new deleter( pool, testMap ), s_nDeleteThreadCount );
+
+            propout() << std::make_pair( "insert_thread_count", s_nInsertThreadCount )
+                << std::make_pair( "delete_thread_count", s_nDeleteThreadCount )
+                << std::make_pair( "map_size", s_nMapSize )
+                << std::make_pair( "goal_item", s_nGoalItem )
+                << std::make_pair( "attempt_count", s_nAttemptCount );
+
+
+            std::chrono::milliseconds duration = pool.run();
+
+            propout() << std::make_pair( "duration", duration );
+
+            size_t nInsertSuccess = 0;
+            size_t nInsertFailed = 0;
+            size_t nDeleteSuccess = 0;
+            size_t nDeleteFailed = 0;
+
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                cds_test::thread& thr = pool.get( i );
+                switch ( thr.type() ) {
+                case insert_thread:
+                {
+                    inserter& t = static_cast<inserter&>(thr);
+                    EXPECT_EQ( t.m_nInsertSuccess, s_nAttemptCount ) << "thread=" << t.id();
+                    nInsertSuccess += t.m_nInsertSuccess;
+                    nInsertFailed += t.m_nInsertFailed;
+                }
+                break;
+                case delete_thread:
+                {
+                    deleter& t = static_cast<deleter&>(thr);
+                    EXPECT_EQ( t.m_nDeleteSuccess, s_nAttemptCount ) << "thread=" << t.id();
+                    nDeleteSuccess += t.m_nDeleteSuccess;
+                    nDeleteFailed += t.m_nDeleteFailed;
+                }
+                break;
+                default:
+                    assert( false );
+                }
+            }
+
+            EXPECT_EQ( nInsertSuccess, nDeleteSuccess );
+            EXPECT_TRUE( testMap.contains( s_nGoalItem ));
+            EXPECT_CONTAINER_SIZE( testMap, s_nMapSize );
+
+            propout()
+                << std::make_pair( "insert_success", nInsertSuccess )
+                << std::make_pair( "insert_failed", nInsertFailed )
+                << std::make_pair( "delete_success", nDeleteSuccess )
+                << std::make_pair( "delete_failed", nDeleteFailed );
+
+            // Check if the map contains all items
+            for ( size_t i = 0; i < s_nMapSize; ++i )
+                EXPECT_TRUE( testMap.contains( i ) ) << "key=" << i;
+
+            check_before_cleanup( testMap );
+
+            testMap.clear();
+            additional_check( testMap );
+            print_stat( propout(), testMap );
+            additional_cleanup( testMap );
+        }
+
+        template <class Map>
+        void run_test()
+        {
+            Map testMap( *this );
+            do_test<Map>( testMap );
+        }
+    };
+
+    class Map_InsDel_item_int_LF: public Map_InsDel_item_int
+        , public ::testing::WithParamInterface<size_t>
+    {
+    public:
+        template <class Set>
+        void run_test()
+        {
+            s_nLoadFactor = GetParam();
+            propout() << std::make_pair( "load_factor", s_nLoadFactor );
+            Map_InsDel_item_int::run_test<Set>();
+        }
+
+        static std::vector<size_t> get_load_factors();
+    };
+
+} // namespace map
diff --git a/test/stress/map/insdel_item_int/map_insdel_item_int_bronsonavltree.cpp b/test/stress/map/insdel_item_int/map_insdel_item_int_bronsonavltree.cpp
new file mode 100644 (file)
index 0000000..641ec3e
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_item_int.h"
+#include "map_type_bronson_avltree.h"
+
+namespace map {
+
+    CDSSTRESS_BronsonAVLTreeMap( Map_InsDel_item_int, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_item_int/map_insdel_item_int_cuckoo.cpp b/test/stress/map/insdel_item_int/map_insdel_item_int_cuckoo.cpp
new file mode 100644 (file)
index 0000000..71232e5
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_item_int.h"
+#include "map_type_cuckoo.h"
+
+namespace map {
+
+    CDSSTRESS_CuckooMap( Map_InsDel_item_int, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_item_int/map_insdel_item_int_ellentree.cpp b/test/stress/map/insdel_item_int/map_insdel_item_int_ellentree.cpp
new file mode 100644 (file)
index 0000000..70180fd
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_item_int.h"
+#include "map_type_ellen_bintree.h"
+
+namespace map {
+
+    CDSSTRESS_EllenBinTreeMap( Map_InsDel_item_int, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_item_int/map_insdel_item_int_feldman_hashset.cpp b/test/stress/map/insdel_item_int/map_insdel_item_int_feldman_hashset.cpp
new file mode 100644 (file)
index 0000000..679a587
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_item_int.h"
+#include "map_type_feldman_hashmap.h"
+
+namespace map {
+
+    CDSSTRESS_FeldmanHashMap_fixed( Map_InsDel_item_int, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_item_int/map_insdel_item_int_michael.cpp b/test/stress/map/insdel_item_int/map_insdel_item_int_michael.cpp
new file mode 100644 (file)
index 0000000..83e49af
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_item_int.h"
+#include "map_type_michael.h"
+
+namespace map {
+
+    CDSSTRESS_MichaelMap( Map_InsDel_item_int_LF, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_item_int/map_insdel_item_int_skip.cpp b/test/stress/map/insdel_item_int/map_insdel_item_int_skip.cpp
new file mode 100644 (file)
index 0000000..8339afb
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_item_int.h"
+#include "map_type_skip_list.h"
+
+namespace map {
+
+    CDSSTRESS_SkipListMap( Map_InsDel_item_int, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_item_int/map_insdel_item_int_split.cpp b/test/stress/map/insdel_item_int/map_insdel_item_int_split.cpp
new file mode 100644 (file)
index 0000000..f5d2696
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_item_int.h"
+#include "map_type_split_list.h"
+
+namespace map {
+
+    CDSSTRESS_SplitListMap( Map_InsDel_item_int_LF, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_item_int/map_insdel_item_int_striped.cpp b/test/stress/map/insdel_item_int/map_insdel_item_int_striped.cpp
new file mode 100644 (file)
index 0000000..bc4f4fa
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_item_int.h"
+#include "map_type_striped.h"
+
+namespace map {
+
+    CDSSTRESS_StripedMap( Map_InsDel_item_int_LF, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_string/CMakeLists.txt b/test/stress/map/insdel_string/CMakeLists.txt
new file mode 100644 (file)
index 0000000..1e7858f
--- /dev/null
@@ -0,0 +1,31 @@
+set(PACKAGE_NAME stress-map-insdel-string)
+
+set(CDSSTRESS_MAP_INSDEL_STRING_SOURCES
+    ../../main.cpp
+    map_insdel_string.cpp
+    map_insdel_string_bronsonavltree.cpp
+    map_insdel_string_cuckoo.cpp
+    map_insdel_string_ellentree.cpp
+    map_insdel_string_feldman_hashset.cpp
+    map_insdel_string_michael.cpp
+    map_insdel_string_skip.cpp
+    map_insdel_string_split.cpp
+    map_insdel_string_std.cpp
+    map_insdel_string_striped.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    ${CMAKE_CURRENT_SOURCE_DIR}/..
+)
+
+add_executable(${PACKAGE_NAME} ${CDSSTRESS_MAP_INSDEL_STRING_SOURCES} $<TARGET_OBJECTS:${CDSSTRESS_FRAMEWORK_LIBRARY}>)
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/stress/map/insdel_string/map_insdel_string.cpp b/test/stress/map/insdel_string/map_insdel_string.cpp
new file mode 100644 (file)
index 0000000..df8a2f1
--- /dev/null
@@ -0,0 +1,183 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_string.h"
+#include <cds_test/hash_func.h>
+
+namespace map {
+
+    size_t Map_InsDel_string::s_nMapSize = 1000000;      // map size
+    size_t Map_InsDel_string::s_nInsertThreadCount = 4;  // count of insertion thread
+    size_t Map_InsDel_string::s_nDeleteThreadCount = 4;  // count of deletion thread
+    size_t Map_InsDel_string::s_nThreadPassCount = 4;    // pass count for each thread
+    size_t Map_InsDel_string::s_nMaxLoadFactor = 8;      // maximum load factor
+
+    size_t Map_InsDel_string::s_nCuckooInitialSize = 1024;// initial size for CuckooSet
+    size_t Map_InsDel_string::s_nCuckooProbesetSize = 16; // CuckooSet probeset size (only for list-based probeset)
+    size_t Map_InsDel_string::s_nCuckooProbesetThreshold = 0; // CuckooSet probeset threshold (0 - use default)
+
+    size_t Map_InsDel_string::s_nFeldmanMap_HeadBits = 10;
+    size_t Map_InsDel_string::s_nFeldmanMap_ArrayBits = 4;
+
+    size_t Map_InsDel_string::s_nLoadFactor = 1;
+    std::vector<std::string> Map_InsDel_string::s_arrKeys;
+
+    void Map_InsDel_string::setup_test_case()
+    {
+        cds_test::config const& cfg = get_config( "map_insdel_string" );
+
+        s_nMapSize = cfg.get_size_t( "MapSize", s_nMapSize );
+        if ( s_nMapSize < 1000 )
+            s_nMapSize = 1000;
+
+        s_nInsertThreadCount = cfg.get_size_t( "InsertThreadCount", s_nInsertThreadCount );
+        if ( s_nInsertThreadCount == 0 )
+            s_nInsertThreadCount = 2;
+
+        s_nDeleteThreadCount = cfg.get_size_t( "DeleteThreadCount", s_nDeleteThreadCount );
+        if ( s_nDeleteThreadCount == 0 )
+            s_nDeleteThreadCount = 2;
+
+        s_nThreadPassCount = cfg.get_size_t( "ThreadPassCount", s_nThreadPassCount );
+        if ( s_nThreadPassCount == 0 )
+            s_nThreadPassCount = 4;
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        s_nCuckooInitialSize = cfg.get_size_t( "CuckooInitialSize", s_nCuckooInitialSize );
+        if ( s_nCuckooInitialSize < 256 )
+            s_nCuckooInitialSize = 256;
+
+        s_nCuckooProbesetSize = cfg.get_size_t( "CuckooProbesetSize", s_nCuckooProbesetSize );
+        if ( s_nCuckooProbesetSize < 8 )
+            s_nCuckooProbesetSize = 8;
+
+        s_nCuckooProbesetThreshold = cfg.get_size_t( "CuckooProbesetThreshold", s_nCuckooProbesetThreshold );
+
+        s_nFeldmanMap_HeadBits = cfg.get_size_t( "FeldmanMapHeadBits", s_nFeldmanMap_HeadBits );
+        if ( s_nFeldmanMap_HeadBits == 0 )
+            s_nFeldmanMap_HeadBits = 2;
+
+        s_nFeldmanMap_ArrayBits = cfg.get_size_t( "FeldmanMapArrayBits", s_nFeldmanMap_ArrayBits );
+        if ( s_nFeldmanMap_ArrayBits == 0 )
+            s_nFeldmanMap_ArrayBits = 2;
+    }
+
+    void Map_InsDel_string::SetUpTestCase()
+    {
+        setup_test_case();
+
+        s_arrKeys.clear();
+        s_arrKeys.reserve( s_nMapSize );
+        std::vector<std::string> dict = load_dictionary();
+        for ( size_t i = 0; i < s_nMapSize; ++i )
+            s_arrKeys.push_back( std::move( dict.at(i) ));
+    }
+
+    void Map_InsDel_string::TearDownTestCase()
+    {
+        s_arrKeys.clear();
+    }
+
+    std::vector<size_t> Map_InsDel_string::get_load_factors()
+    {
+        cds_test::config const& cfg = get_config( "map_insdel_string" );
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        std::vector<size_t> lf;
+        for ( size_t n = 1; n <= s_nMaxLoadFactor; n *= 2 )
+            lf.push_back( n );
+
+        return lf;
+    }
+
+    template <typename Hash>
+    void Map_InsDel_string::fill_string_array()
+    {
+        typedef Hash hasher;
+        typedef typename hasher::result_type hash_type;
+
+        std::map<hash_type, size_t> mapHash;
+        s_arrKeys.clear();
+        std::vector<std::string> dict = load_dictionary();
+
+        size_t nSize = dict.size();
+        if ( nSize > s_nMapSize )
+            nSize = s_nMapSize;
+        s_arrKeys.reserve( nSize );
+
+        size_t nDiffHash = 0;
+        hasher h;
+        for ( size_t i = 0; i < dict.size(); ++i ) {
+            hash_type hash = h( dict.at( i ) );
+            if ( mapHash.insert( std::make_pair( hash, i ) ).second ) {
+                if ( ++nDiffHash >= nSize )
+                    break;
+                s_arrKeys.push_back( std::move( dict.at( i ) ));
+            }
+        }
+        s_nMapSize = dict.size();
+    }
+
+    void Map_InsDel_string_stdhash::SetUpTestCase()
+    {
+        setup_test_case();
+        fill_string_array<std::hash<std::string>>();
+    }
+
+#if CDS_BUILD_BITS == 64
+    void Map_InsDel_string_city32::SetUpTestCase()
+    {
+        setup_test_case();
+        fill_string_array<cds_test::city32>();
+    }
+
+    void Map_InsDel_string_city64::SetUpTestCase()
+    {
+        setup_test_case();
+        fill_string_array<cds_test::city64>();
+    }
+
+    void Map_InsDel_string_city128::SetUpTestCase()
+    {
+        setup_test_case();
+        fill_string_array<cds_test::city128>();
+    }
+
+#endif
+
+
+    INSTANTIATE_TEST_CASE_P( a, Map_InsDel_string_LF, ::testing::ValuesIn( Map_InsDel_string::get_load_factors()));
+} // namespace map
diff --git a/test/stress/map/insdel_string/map_insdel_string.h b/test/stress/map/insdel_string/map_insdel_string.h
new file mode 100644 (file)
index 0000000..4948c4e
--- /dev/null
@@ -0,0 +1,317 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_type.h"
+
+namespace map {
+
+#define TEST_CASE(TAG, X)  void X();
+
+    class Map_InsDel_string: public cds_test::stress_fixture
+    {
+    public:
+        static size_t s_nMapSize;           // map size
+        static size_t s_nInsertThreadCount; // count of insertion thread
+        static size_t s_nDeleteThreadCount; // count of deletion thread
+        static size_t s_nThreadPassCount;   // pass count for each thread
+        static size_t s_nMaxLoadFactor;     // maximum load factor
+
+        static size_t s_nCuckooInitialSize;         // initial size for CuckooMap
+        static size_t s_nCuckooProbesetSize;        // CuckooMap probeset size (only for list-based probeset)
+        static size_t s_nCuckooProbesetThreshold;   // CuckooMap probeset threshold (o - use default)
+
+        static size_t s_nFeldmanMap_HeadBits;
+        static size_t s_nFeldmanMap_ArrayBits;
+
+        static size_t  s_nLoadFactor;  // current load factor
+
+        static void SetUpTestCase();
+        static void TearDownTestCase();
+
+        static void setup_test_case();
+        static std::vector<size_t> get_load_factors();
+
+        typedef std::string key_type;
+        typedef size_t      value_type;
+
+        static std::vector<std::string> s_arrKeys;
+
+    protected:
+        enum {
+            insert_thread,
+            delete_thread
+        };
+
+        template <class Map>
+        class Inserter: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+            Map&     m_Map;
+
+        public:
+            size_t  m_nInsertSuccess = 0;
+            size_t  m_nInsertFailed = 0;
+
+        public:
+            Inserter( cds_test::thread_pool& pool, Map& map )
+                : base_class( pool, insert_thread )
+                , m_Map( map )
+            {}
+
+            Inserter( Inserter& src )
+                : base_class( src )
+                , m_Map( src.m_Map )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Inserter( *this );
+            }
+
+            virtual void test()
+            {
+                Map& rMap = m_Map;
+
+                if ( id() & 1 ) {
+                    for ( size_t nPass = 0; nPass < s_nThreadPassCount; ++nPass ) {
+                        for ( auto it = s_arrKeys.cbegin(), itEnd = s_arrKeys.cend(); it != itEnd; ++it ) {
+                            if ( rMap.insert( *it, 0 ))
+                                ++m_nInsertSuccess;
+                            else
+                                ++m_nInsertFailed;
+                        }
+                    }
+                }
+                else {
+                    for ( size_t nPass = 0; nPass < s_nThreadPassCount; ++nPass ) {
+                        for ( auto it = s_arrKeys.crbegin(), itEnd = s_arrKeys.crend(); it != itEnd; ++it ) {
+                            if ( rMap.insert( *it, 1 ))
+                                ++m_nInsertSuccess;
+                            else
+                                ++m_nInsertFailed;
+                        }
+                    }
+                }
+            }
+        };
+
+        template <class Map>
+        class Deleter: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+            Map&     m_Map;
+
+        public:
+            size_t  m_nDeleteSuccess = 0;
+            size_t  m_nDeleteFailed = 0;
+
+        public:
+            Deleter( cds_test::thread_pool& pool, Map& map )
+                : base_class( pool, delete_thread )
+                , m_Map( map )
+            {}
+
+            Deleter( Deleter& src )
+                : base_class( src )
+                , m_Map( src.m_Map )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Deleter( *this );
+            }
+
+            virtual void test()
+            {
+                Map& rMap = m_Map;
+
+                if ( id() & 1 ) {
+                    for ( size_t nPass = 0; nPass < s_nThreadPassCount; ++nPass ) {
+                        for ( auto it = s_arrKeys.cbegin(), itEnd = s_arrKeys.cend(); it != itEnd; ++it ) {
+                            if ( rMap.erase( *it ))
+                                ++m_nDeleteSuccess;
+                            else
+                                ++m_nDeleteFailed;
+                        }
+                    }
+                }
+                else {
+                    for ( size_t nPass = 0; nPass < s_nThreadPassCount; ++nPass ) {
+                        for ( auto it = s_arrKeys.crbegin(), itEnd = s_arrKeys.crend(); it != itEnd; ++it ) {
+                            if ( rMap.erase( *it ))
+                                ++m_nDeleteSuccess;
+                            else
+                                ++m_nDeleteFailed;
+                        }
+                    }
+                }
+            }
+        };
+
+    protected:
+        template <typename Hash>
+        static void fill_string_array();
+
+        template <class Map>
+        void do_test( Map& testMap )
+        {
+            typedef Inserter<Map>       inserter;
+            typedef Deleter<Map>        deleter;
+
+            cds_test::thread_pool& pool = get_pool();
+            pool.add( new inserter( pool, testMap ), s_nInsertThreadCount );
+            pool.add( new deleter( pool, testMap ), s_nDeleteThreadCount );
+
+            propout() << std::make_pair( "insert_thread_count", s_nInsertThreadCount )
+                << std::make_pair( "delete_thread_count", s_nDeleteThreadCount )
+                << std::make_pair( "pass_count", s_nThreadPassCount )
+                << std::make_pair( "map_size", s_nMapSize );
+
+            std::chrono::milliseconds duration = pool.run();
+
+            propout() << std::make_pair( "duration", duration );
+
+            size_t nInsertSuccess = 0;
+            size_t nInsertFailed = 0;
+            size_t nDeleteSuccess = 0;
+            size_t nDeleteFailed = 0;
+
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                cds_test::thread& thr = pool.get( i );
+                switch ( thr.type() ) {
+                case insert_thread:
+                {
+                    inserter& t = static_cast<inserter&>(thr);
+                    nInsertSuccess += t.m_nInsertSuccess;
+                    nInsertFailed += t.m_nInsertFailed;
+                }
+                break;
+                case delete_thread:
+                {
+                    deleter& t = static_cast<deleter&>(thr);
+                    nDeleteSuccess += t.m_nDeleteSuccess;
+                    nDeleteFailed += t.m_nDeleteFailed;
+                }
+                break;
+                default:
+                    assert( false );
+                }
+            }
+
+            propout()
+                << std::make_pair( "insert_success", nInsertSuccess )
+                << std::make_pair( "insert_failed", nInsertFailed )
+                << std::make_pair( "delete_success", nDeleteSuccess )
+                << std::make_pair( "delete_failed", nDeleteFailed )
+                << std::make_pair( "finish_map_size", testMap.size() );
+
+            check_before_cleanup( testMap );
+
+            testMap.clear();
+            EXPECT_TRUE( testMap.empty() );
+
+            additional_check( testMap );
+            print_stat( propout(), testMap );
+            additional_cleanup( testMap );
+        }
+
+        template <class Map>
+        void run_test()
+        {
+            Map testMap( *this );
+            do_test( testMap );
+        }
+    };
+
+    class Map_InsDel_string_stdhash: public Map_InsDel_string
+    {
+    public:
+        static void SetUpTestCase();
+
+        template <class Map>
+        void run_test()
+        {
+            Map_InsDel_string::run_test<Map>();
+        }
+    };
+
+#if CDS_BUILD_BITS == 64
+    class Map_InsDel_string_city32: public Map_InsDel_string
+    {
+    public:
+        static void SetUpTestCase();
+
+        template <class Map>
+        void run_test()
+        {
+            Map_InsDel_string::run_test<Map>();
+        }
+    };
+
+    class Map_InsDel_string_city64: public Map_InsDel_string
+    {
+    public:
+        static void SetUpTestCase();
+
+        template <class Map>
+        void run_test()
+        {
+            Map_InsDel_string::run_test<Map>();
+        }
+    };
+
+    class Map_InsDel_string_city128: public Map_InsDel_string
+    {
+    public:
+        static void SetUpTestCase();
+
+        template <class Map>
+        void run_test()
+        {
+            Map_InsDel_string::run_test<Map>();
+        }
+    };
+
+#endif // #if CDS_BUILD_BITS == 64
+
+    class Map_InsDel_string_LF: public Map_InsDel_string
+        , public ::testing::WithParamInterface<size_t>
+    {
+    public:
+        template <class Map>
+        void run_test()
+        {
+            s_nLoadFactor = GetParam();
+            propout() << std::make_pair( "load_factor", s_nLoadFactor );
+            Map_InsDel_string::run_test<Map>();
+        }
+    };
+
+} // namespace map
diff --git a/test/stress/map/insdel_string/map_insdel_string_bronsonavltree.cpp b/test/stress/map/insdel_string/map_insdel_string_bronsonavltree.cpp
new file mode 100644 (file)
index 0000000..fc0ef8c
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_string.h"
+#include "map_type_bronson_avltree.h"
+
+namespace map {
+
+    CDSSTRESS_BronsonAVLTreeMap( Map_InsDel_string, run_test, std::string, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_string/map_insdel_string_cuckoo.cpp b/test/stress/map/insdel_string/map_insdel_string_cuckoo.cpp
new file mode 100644 (file)
index 0000000..165d183
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_string.h"
+#include "map_type_cuckoo.h"
+
+namespace map {
+
+    CDSSTRESS_CuckooMap( Map_InsDel_string, run_test, std::string, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_string/map_insdel_string_ellentree.cpp b/test/stress/map/insdel_string/map_insdel_string_ellentree.cpp
new file mode 100644 (file)
index 0000000..02fef1a
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_string.h"
+#include "map_type_ellen_bintree.h"
+
+namespace map {
+
+    CDSSTRESS_EllenBinTreeMap( Map_InsDel_string, run_test, std::string, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_string/map_insdel_string_feldman_hashset.cpp b/test/stress/map/insdel_string/map_insdel_string_feldman_hashset.cpp
new file mode 100644 (file)
index 0000000..291e3c8
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_string.h"
+#include "map_type_feldman_hashmap.h"
+
+namespace map {
+
+    CDSSTRESS_FeldmanHashMap_stdhash( Map_InsDel_string_stdhash, run_test, std::string, size_t )
+#if CDS_BUILD_BITS == 64
+        CDSSTRESS_FeldmanHashMap_city64( Map_InsDel_string_city64, run_test, std::string, size_t )
+        CDSSTRESS_FeldmanHashMap_city128( Map_InsDel_string_city128, run_test, std::string, size_t )
+#endif
+
+} // namespace map
diff --git a/test/stress/map/insdel_string/map_insdel_string_michael.cpp b/test/stress/map/insdel_string/map_insdel_string_michael.cpp
new file mode 100644 (file)
index 0000000..9225a0f
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_string.h"
+#include "map_type_michael.h"
+
+namespace map {
+
+    CDSSTRESS_MichaelMap( Map_InsDel_string_LF, run_test, std::string, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_string/map_insdel_string_skip.cpp b/test/stress/map/insdel_string/map_insdel_string_skip.cpp
new file mode 100644 (file)
index 0000000..4fdf29c
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_string.h"
+#include "map_type_skip_list.h"
+
+namespace map {
+
+    CDSSTRESS_SkipListMap( Map_InsDel_string, run_test, std::string, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_string/map_insdel_string_split.cpp b/test/stress/map/insdel_string/map_insdel_string_split.cpp
new file mode 100644 (file)
index 0000000..d1dbfc3
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_string.h"
+#include "map_type_split_list.h"
+
+namespace map {
+
+    CDSSTRESS_SplitListMap( Map_InsDel_string_LF, run_test, std::string, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_string/map_insdel_string_std.cpp b/test/stress/map/insdel_string/map_insdel_string_std.cpp
new file mode 100644 (file)
index 0000000..b4ce647
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_string.h"
+#include "map_type_std.h"
+
+namespace map {
+
+    CDSSTRESS_StdMap( Map_InsDel_string, run_test, std::string, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdel_string/map_insdel_string_striped.cpp b/test/stress/map/insdel_string/map_insdel_string_striped.cpp
new file mode 100644 (file)
index 0000000..e653b23
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdel_string.h"
+#include "map_type_striped.h"
+
+namespace map {
+
+    CDSSTRESS_StripedMap( Map_InsDel_string_LF, run_test, std::string, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdelfind/CMakeLists.txt b/test/stress/map/insdelfind/CMakeLists.txt
new file mode 100644 (file)
index 0000000..c02765e
--- /dev/null
@@ -0,0 +1,31 @@
+set(PACKAGE_NAME stress-map-insdelfind)
+
+set(CDSSTRESS_MAP_INSDELFIND_SOURCES
+    ../../main.cpp
+    map_insdelfind.cpp
+    map_insdelfind_bronsonavltree.cpp
+    map_insdelfind_cuckoo.cpp
+    map_insdelfind_ellentree.cpp
+    map_insdelfind_feldman_hashset.cpp
+    map_insdelfind_michael.cpp
+    map_insdelfind_skip.cpp
+    map_insdelfind_split.cpp
+    map_insdelfind_std.cpp
+    map_insdelfind_striped.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    ${CMAKE_CURRENT_SOURCE_DIR}/..
+)
+
+add_executable(${PACKAGE_NAME} ${CDSSTRESS_MAP_INSDELFIND_SOURCES} $<TARGET_OBJECTS:${CDSSTRESS_FRAMEWORK_LIBRARY}>)
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/stress/map/insdelfind/map_insdelfind.cpp b/test/stress/map/insdelfind/map_insdelfind.cpp
new file mode 100644 (file)
index 0000000..581bb9f
--- /dev/null
@@ -0,0 +1,134 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdelfind.h"
+
+namespace map {
+
+    size_t Map_InsDelFind::s_nMapSize = 500000;
+    size_t Map_InsDelFind::s_nThreadCount = 8;
+    size_t Map_InsDelFind::s_nMaxLoadFactor = 8;
+    unsigned int Map_InsDelFind::s_nInsertPercentage = 5;
+    unsigned int Map_InsDelFind::s_nDeletePercentage = 5;
+    unsigned int Map_InsDelFind::s_nDuration = 30;
+
+
+    size_t Map_InsDelFind::s_nCuckooInitialSize = 1024;// initial size for CuckooSet
+    size_t Map_InsDelFind::s_nCuckooProbesetSize = 16; // CuckooSet probeset size (only for list-based probeset)
+    size_t Map_InsDelFind::s_nCuckooProbesetThreshold = 0; // CUckooSet probeset threshold (0 - use default)
+
+    size_t Map_InsDelFind::s_nFeldmanMap_HeadBits = 10;
+    size_t Map_InsDelFind::s_nFeldmanMap_ArrayBits = 4;
+
+    size_t Map_InsDelFind::s_nLoadFactor = 1;
+    Map_InsDelFind::actions Map_InsDelFind::s_arrShuffle[Map_InsDelFind::c_nShuffleSize];
+
+    void Map_InsDelFind::SetUpTestCase()
+    {
+        cds_test::config const& cfg = get_config( "map_insdelfind" );
+
+        s_nMapSize = cfg.get_size_t( "InitialMapSize", s_nMapSize );
+        if ( s_nMapSize < 1000 )
+            s_nMapSize = 1000;
+
+        s_nThreadCount = cfg.get_size_t( "ThreadCount", s_nThreadCount );
+        if ( s_nThreadCount == 0 )
+            s_nThreadCount = std::thread::hardware_concurrency() * 2;
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        s_nInsertPercentage = cfg.get_uint( "InsertPercentage", s_nInsertPercentage );
+        if ( s_nInsertPercentage >= 100 )
+            s_nInsertPercentage = 99;
+
+        s_nDeletePercentage = cfg.get_uint( "DeletePercentage", s_nDeletePercentage );
+        if ( s_nDeletePercentage >= 100 )
+            s_nDeletePercentage = 99;
+
+        if ( s_nInsertPercentage + s_nDeletePercentage > 100 ) {
+            unsigned int total = s_nInsertPercentage + s_nDeletePercentage;
+            s_nInsertPercentage = s_nInsertPercentage * 100 / total;
+            s_nDeletePercentage = s_nDeletePercentage * 100 / total;
+        }
+
+        s_nDuration = cfg.get_uint( "Duration", s_nDuration );
+        if ( s_nDuration < 5 )
+            s_nDuration = 5;
+
+        s_nCuckooInitialSize = cfg.get_size_t( "CuckooInitialSize", s_nCuckooInitialSize );
+        if ( s_nCuckooInitialSize < 256 )
+            s_nCuckooInitialSize = 256;
+
+        s_nCuckooProbesetSize = cfg.get_size_t( "CuckooProbesetSize", s_nCuckooProbesetSize );
+        if ( s_nCuckooProbesetSize < 8 )
+            s_nCuckooProbesetSize = 8;
+
+        s_nCuckooProbesetThreshold = cfg.get_size_t( "CuckooProbesetThreshold", s_nCuckooProbesetThreshold );
+
+        s_nFeldmanMap_HeadBits = cfg.get_size_t( "FeldmanMapHeadBits", s_nFeldmanMap_HeadBits );
+        if ( s_nFeldmanMap_HeadBits == 0 )
+            s_nFeldmanMap_HeadBits = 2;
+
+        s_nFeldmanMap_ArrayBits = cfg.get_size_t( "FeldmanMapArrayBits", s_nFeldmanMap_ArrayBits );
+        if ( s_nFeldmanMap_ArrayBits == 0 )
+            s_nFeldmanMap_ArrayBits = 2;
+
+        actions * pFirst = s_arrShuffle;
+        actions * pLast = s_arrShuffle + s_nInsertPercentage;
+        std::fill( pFirst, pLast, do_insert );
+        pFirst = pLast;
+        pLast += s_nDeletePercentage;
+        std::fill( pFirst, pLast, do_delete );
+        pFirst = pLast;
+        pLast = s_arrShuffle + sizeof( s_arrShuffle ) / sizeof( s_arrShuffle[0] );
+        if ( pFirst < pLast )
+            std::fill( pFirst, pLast, do_find );
+        shuffle( s_arrShuffle, pLast );
+    }
+
+    std::vector<size_t> Map_InsDelFind_LF::get_load_factors()
+    {
+        cds_test::config const& cfg = get_config( "map_insdelfind" );
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        std::vector<size_t> lf;
+        for ( size_t n = 1; n <= s_nMaxLoadFactor; n *= 2 )
+            lf.push_back( n );
+
+        return lf;
+    }
+
+    INSTANTIATE_TEST_CASE_P( a, Map_InsDelFind_LF, ::testing::ValuesIn( Map_InsDelFind_LF::get_load_factors()));
+} // namespace map
diff --git a/test/stress/map/insdelfind/map_insdelfind.h b/test/stress/map/insdelfind/map_insdelfind.h
new file mode 100644 (file)
index 0000000..87a5c85
--- /dev/null
@@ -0,0 +1,262 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_type.h"
+
+namespace map {
+
+
+    class Map_InsDelFind: public cds_test::stress_fixture
+    {
+    public:
+        static size_t s_nMapSize;           // initial map size
+        static size_t s_nThreadCount;       // thread count
+        static size_t s_nMaxLoadFactor;     // maximum load factor
+        static unsigned int s_nInsertPercentage;
+        static unsigned int s_nDeletePercentage;
+        static unsigned int s_nDuration;    // test duration, seconds
+
+        static size_t s_nCuckooInitialSize;         // initial size for CuckooMap
+        static size_t s_nCuckooProbesetSize;        // CuckooMap probeset size (only for list-based probeset)
+        static size_t s_nCuckooProbesetThreshold;   // CuckooMap probeset threshold (o - use default)
+
+        static size_t s_nFeldmanMap_HeadBits;
+        static size_t s_nFeldmanMap_ArrayBits;
+
+        static size_t  s_nLoadFactor;  // current load factor
+
+        static void SetUpTestCase();
+        //static void TearDownTestCase();
+
+    public:
+        enum actions
+        {
+            do_find,
+            do_insert,
+            do_delete
+        };
+        static const unsigned int c_nShuffleSize = 100;
+        static actions s_arrShuffle[c_nShuffleSize];
+
+    protected:
+        typedef size_t  key_type;
+        typedef size_t  value_type;
+
+        template <class Map>
+        class Worker: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+            Map&     m_Map;
+
+        public:
+            size_t  m_nInsertSuccess = 0;
+            size_t  m_nInsertFailed = 0;
+            size_t  m_nDeleteSuccess = 0;
+            size_t  m_nDeleteFailed = 0;
+            size_t  m_nFindSuccess = 0;
+            size_t  m_nFindFailed = 0;
+
+        public:
+            Worker( cds_test::thread_pool& pool, Map& map )
+                : base_class( pool )
+                , m_Map( map )
+            {}
+
+            Worker( Worker& src )
+                : base_class( src )
+                , m_Map( src.m_Map )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Worker( *this );
+            }
+
+            typedef std::pair< key_type const, value_type > map_value_type;
+
+            struct update_functor {
+                template <typename Q>
+                void operator()( bool /*bNew*/, map_value_type& /*cur*/, Q const& /*val*/ )
+                {}
+
+                // FeldmanHashMap
+                void operator()( map_value_type& /*cur*/, map_value_type * /*old*/)
+                {}
+
+                // MichaelMap
+                void operator()( bool /*bNew*/, map_value_type& /*cur*/ )
+                {}
+
+                // BronsonAVLTreeMap
+                void operator()( bool /*bNew*/, key_type /*key*/, value_type& /*val*/ )
+                {}
+            };
+
+            virtual void test()
+            {
+                Map& rMap = m_Map;
+
+                unsigned int i = 0;
+                size_t const nNormalize = size_t(-1) / ( s_nMapSize * 2 );
+
+                size_t nRand = 0;
+                while ( !time_elapsed() ) {
+                    nRand = cds::bitop::RandXorShift( nRand );
+                    size_t n = nRand / nNormalize;
+                    switch ( s_arrShuffle[i] ) {
+                    case do_find:
+                        if ( rMap.contains( n ))
+                            ++m_nFindSuccess;
+                        else
+                            ++m_nFindFailed;
+                        break;
+                    case do_insert:
+                        if ( n % 2 ) {
+                            if ( rMap.insert( n, n ))
+                                ++m_nInsertSuccess;
+                            else
+                                ++m_nInsertFailed;
+                        }
+                        else {
+                            if ( rMap.update( n, update_functor(), true ).first )
+                                ++m_nInsertSuccess;
+                            else
+                                ++m_nInsertFailed;
+                        }
+                        break;
+                    case do_delete:
+                        if ( rMap.erase( n ))
+                            ++m_nDeleteSuccess;
+                        else
+                            ++m_nDeleteFailed;
+                        break;
+                    }
+
+                    if ( ++i >= c_nShuffleSize )
+                        i = 0;
+                }
+            }
+        };
+
+    protected:
+        template <class Map>
+        void do_test( Map& testMap )
+        {
+            typedef Worker<Map> worker;
+
+            // fill map - only odd number
+            {
+                std::vector<size_t> arr;
+                arr.reserve( s_nMapSize );
+                for ( size_t i = 0; i < s_nMapSize; ++i )
+                    arr.push_back( i * 2 + 1);
+                shuffle( arr.begin(), arr.end() );
+                for ( size_t i = 0; i < s_nMapSize; ++i )
+                    testMap.insert( arr[i], arr[i] );
+            }
+
+            cds_test::thread_pool& pool = get_pool();
+            pool.add( new worker( pool, testMap ), s_nThreadCount );
+
+            propout() << std::make_pair( "thread_count", s_nThreadCount )
+                << std::make_pair( "insert_percentage", s_nInsertPercentage )
+                << std::make_pair( "delete_percentage", s_nDeletePercentage )
+                << std::make_pair( "map_size", s_nMapSize );
+
+            std::chrono::milliseconds duration = pool.run( std::chrono::seconds( s_nDuration ));
+
+            propout() << std::make_pair( "duration", duration );
+
+            size_t nInsertSuccess = 0;
+            size_t nInsertFailed = 0;
+            size_t nDeleteSuccess = 0;
+            size_t nDeleteFailed = 0;
+            size_t nFindSuccess = 0;
+            size_t nFindFailed = 0;
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                worker& thr = static_cast<worker&>( pool.get( i ));
+
+                nInsertSuccess += thr.m_nInsertSuccess;
+                nInsertFailed += thr.m_nInsertFailed;
+                nDeleteSuccess += thr.m_nDeleteSuccess;
+                nDeleteFailed += thr.m_nDeleteFailed;
+                nFindSuccess += thr.m_nFindSuccess;
+                nFindFailed += thr.m_nFindFailed;
+            }
+
+            propout()
+                << std::make_pair( "insert_success", nInsertSuccess )
+                << std::make_pair( "insert_failed", nInsertFailed )
+                << std::make_pair( "delete_success", nDeleteSuccess )
+                << std::make_pair( "delete_failed", nDeleteFailed )
+                << std::make_pair( "find_success", nFindSuccess )
+                << std::make_pair( "find_failed", nFindFailed )
+                << std::make_pair( "finish_map_size", testMap.size() );
+
+            {
+                ASSERT_TRUE( std::chrono::duration_cast<std::chrono::seconds>(duration).count() > 0 );
+                size_t nTotalOps = nInsertSuccess + nInsertFailed + nDeleteSuccess + nDeleteFailed + nFindSuccess + nFindFailed;
+                propout() << std::make_pair( "avg_speed", nTotalOps / std::chrono::duration_cast<std::chrono::seconds>( duration ).count());
+            }
+
+            check_before_cleanup( testMap );
+
+            testMap.clear();
+            EXPECT_TRUE( testMap.empty());
+
+            additional_check( testMap );
+            print_stat( propout(), testMap );
+            additional_cleanup( testMap );
+        }
+
+        template <class Map>
+        void run_test()
+        {
+            Map testMap( *this );
+            do_test( testMap );
+        }
+    };
+
+    class Map_InsDelFind_LF: public Map_InsDelFind
+        , public ::testing::WithParamInterface<size_t>
+    {
+    public:
+        template <class Map>
+        void run_test()
+        {
+            s_nLoadFactor = GetParam();
+            propout() << std::make_pair( "load_factor", s_nLoadFactor );
+            Map_InsDelFind::run_test<Map>();
+        }
+
+        static std::vector<size_t> get_load_factors();
+    };
+
+} // namespace map
diff --git a/test/stress/map/insdelfind/map_insdelfind_bronsonavltree.cpp b/test/stress/map/insdelfind/map_insdelfind_bronsonavltree.cpp
new file mode 100644 (file)
index 0000000..1502e0a
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdelfind.h"
+#include "map_type_bronson_avltree.h"
+
+namespace map {
+
+    CDSSTRESS_BronsonAVLTreeMap( Map_InsDelFind, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdelfind/map_insdelfind_cuckoo.cpp b/test/stress/map/insdelfind/map_insdelfind_cuckoo.cpp
new file mode 100644 (file)
index 0000000..89a84f9
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdelfind.h"
+#include "map_type_cuckoo.h"
+
+namespace map {
+
+    CDSSTRESS_CuckooMap( Map_InsDelFind, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdelfind/map_insdelfind_ellentree.cpp b/test/stress/map/insdelfind/map_insdelfind_ellentree.cpp
new file mode 100644 (file)
index 0000000..a279b14
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdelfind.h"
+#include "map_type_ellen_bintree.h"
+
+namespace map {
+
+    CDSSTRESS_EllenBinTreeMap( Map_InsDelFind, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdelfind/map_insdelfind_feldman_hashset.cpp b/test/stress/map/insdelfind/map_insdelfind_feldman_hashset.cpp
new file mode 100644 (file)
index 0000000..0f7ebcc
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdelfind.h"
+#include "map_type_feldman_hashmap.h"
+
+namespace map {
+
+    CDSSTRESS_FeldmanHashMap_fixed( Map_InsDelFind, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdelfind/map_insdelfind_michael.cpp b/test/stress/map/insdelfind/map_insdelfind_michael.cpp
new file mode 100644 (file)
index 0000000..da6e16a
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdelfind.h"
+#include "map_type_michael.h"
+
+namespace map {
+
+    CDSSTRESS_MichaelMap( Map_InsDelFind_LF, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdelfind/map_insdelfind_skip.cpp b/test/stress/map/insdelfind/map_insdelfind_skip.cpp
new file mode 100644 (file)
index 0000000..4bbd634
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdelfind.h"
+#include "map_type_skip_list.h"
+
+namespace map {
+
+    CDSSTRESS_SkipListMap( Map_InsDelFind, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdelfind/map_insdelfind_split.cpp b/test/stress/map/insdelfind/map_insdelfind_split.cpp
new file mode 100644 (file)
index 0000000..febb310
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdelfind.h"
+#include "map_type_split_list.h"
+
+namespace map {
+
+    CDSSTRESS_SplitListMap( Map_InsDelFind_LF, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdelfind/map_insdelfind_std.cpp b/test/stress/map/insdelfind/map_insdelfind_std.cpp
new file mode 100644 (file)
index 0000000..013091d
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdelfind.h"
+#include "map_type_std.h"
+
+namespace map {
+
+    CDSSTRESS_StdMap( Map_InsDelFind, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insdelfind/map_insdelfind_striped.cpp b/test/stress/map/insdelfind/map_insdelfind_striped.cpp
new file mode 100644 (file)
index 0000000..46ed0de
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insdelfind.h"
+#include "map_type_striped.h"
+
+namespace map {
+
+    CDSSTRESS_StripedMap( Map_InsDelFind_LF, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insfind_int/CMakeLists.txt b/test/stress/map/insfind_int/CMakeLists.txt
new file mode 100644 (file)
index 0000000..9027a4b
--- /dev/null
@@ -0,0 +1,31 @@
+set(PACKAGE_NAME stress-map-insfind-int)
+
+set(CDSSTRESS_MAP_INSFIND_INT_SOURCES
+    ../../main.cpp
+    map_insfind.cpp
+    map_insfind_bronsonavltree.cpp
+    map_insfind_cuckoo.cpp
+    map_insfind_ellentree.cpp
+    map_insfind_feldman_hashset.cpp
+    map_insfind_michael.cpp
+    map_insfind_skip.cpp
+    map_insfind_split.cpp
+    map_insfind_std.cpp
+    map_insfind_striped.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    ${CMAKE_CURRENT_SOURCE_DIR}/..
+)
+
+add_executable(${PACKAGE_NAME} ${CDSSTRESS_MAP_INSFIND_INT_SOURCES} $<TARGET_OBJECTS:${CDSSTRESS_FRAMEWORK_LIBRARY}>)
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/stress/map/insfind_int/map_insfind.cpp b/test/stress/map/insfind_int/map_insfind.cpp
new file mode 100644 (file)
index 0000000..ac7c443
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insfind_int.h"
+
+namespace map {
+
+    size_t Map_InsFind_int::s_nMapSize = 500000;
+    size_t Map_InsFind_int::s_nThreadCount = 8;
+    size_t Map_InsFind_int::s_nMaxLoadFactor = 8;
+
+    size_t Map_InsFind_int::s_nCuckooInitialSize = 1024;    // initial size for CuckooSet
+    size_t Map_InsFind_int::s_nCuckooProbesetSize = 16;     // CuckooSet probeset size (only for list-based probeset)
+    size_t Map_InsFind_int::s_nCuckooProbesetThreshold = 0; // CuckooSet probeset threshold (0 - use default)
+
+    size_t Map_InsFind_int::s_nFeldmanMap_HeadBits = 10;
+    size_t Map_InsFind_int::s_nFeldmanMap_ArrayBits = 4;
+
+    size_t Map_InsFind_int::s_nLoadFactor = 1;
+
+    void Map_InsFind_int::SetUpTestCase()
+    {
+        cds_test::config const& cfg = get_config( "map_insfind_int" );
+
+        s_nMapSize = cfg.get_size_t( "MapSize", s_nMapSize );
+        if ( s_nMapSize < 100 )
+            s_nMapSize = 100;
+
+        s_nThreadCount = cfg.get_size_t( "ThreadCount", s_nThreadCount );
+        if ( s_nThreadCount == 0 )
+            s_nThreadCount = std::thread::hardware_concurrency() * 2;
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        s_nCuckooInitialSize = cfg.get_size_t( "CuckooInitialSize", s_nCuckooInitialSize );
+        if ( s_nCuckooInitialSize < 256 )
+            s_nCuckooInitialSize = 256;
+
+        s_nCuckooProbesetSize = cfg.get_size_t( "CuckooProbesetSize", s_nCuckooProbesetSize );
+        if ( s_nCuckooProbesetSize < 8 )
+            s_nCuckooProbesetSize = 8;
+
+        s_nCuckooProbesetThreshold = cfg.get_size_t( "CuckooProbesetThreshold", s_nCuckooProbesetThreshold );
+
+        s_nFeldmanMap_HeadBits = cfg.get_size_t( "FeldmanMapHeadBits", s_nFeldmanMap_HeadBits );
+        if ( s_nFeldmanMap_HeadBits == 0 )
+            s_nFeldmanMap_HeadBits = 2;
+
+        s_nFeldmanMap_ArrayBits = cfg.get_size_t( "FeldmanMapArrayBits", s_nFeldmanMap_ArrayBits );
+        if ( s_nFeldmanMap_ArrayBits == 0 )
+            s_nFeldmanMap_ArrayBits = 2;
+    }
+
+    std::vector<size_t> Map_InsFind_int_LF::get_load_factors()
+    {
+        cds_test::config const& cfg = get_config( "map_insfind_int" );
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        std::vector<size_t> lf;
+        for ( size_t n = 1; n <= s_nMaxLoadFactor; n *= 2 )
+            lf.push_back( n );
+
+        return lf;
+    }
+
+    INSTANTIATE_TEST_CASE_P( a, Map_InsFind_int_LF, ::testing::ValuesIn( Map_InsFind_int_LF::get_load_factors()));
+} // namespace map
diff --git a/test/stress/map/insfind_int/map_insfind_bronsonavltree.cpp b/test/stress/map/insfind_int/map_insfind_bronsonavltree.cpp
new file mode 100644 (file)
index 0000000..6c4ee7b
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insfind_int.h"
+#include "map_type_bronson_avltree.h"
+
+namespace map {
+
+    CDSSTRESS_BronsonAVLTreeMap( Map_InsFind_int, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insfind_int/map_insfind_cuckoo.cpp b/test/stress/map/insfind_int/map_insfind_cuckoo.cpp
new file mode 100644 (file)
index 0000000..ef62372
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insfind_int.h"
+#include "map_type_cuckoo.h"
+
+namespace map {
+
+    CDSSTRESS_CuckooMap( Map_InsFind_int, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insfind_int/map_insfind_ellentree.cpp b/test/stress/map/insfind_int/map_insfind_ellentree.cpp
new file mode 100644 (file)
index 0000000..7a327bc
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insfind_int.h"
+#include "map_type_ellen_bintree.h"
+
+namespace map {
+
+    CDSSTRESS_EllenBinTreeMap( Map_InsFind_int, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insfind_int/map_insfind_feldman_hashset.cpp b/test/stress/map/insfind_int/map_insfind_feldman_hashset.cpp
new file mode 100644 (file)
index 0000000..7174a37
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insfind_int.h"
+#include "map_type_feldman_hashmap.h"
+
+namespace map {
+
+    CDSSTRESS_FeldmanHashMap_fixed( Map_InsFind_int, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insfind_int/map_insfind_int.h b/test/stress/map/insfind_int/map_insfind_int.h
new file mode 100644 (file)
index 0000000..048309e
--- /dev/null
@@ -0,0 +1,210 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_type.h"
+
+namespace map {
+
+    class Map_InsFind_int: public cds_test::stress_fixture
+    {
+    public:
+        static size_t s_nMapSize;          // initial map size
+        static size_t s_nThreadCount;      // thread count
+        static size_t s_nMaxLoadFactor;    // maximum load factor
+
+        static size_t s_nCuckooInitialSize;         // initial size for CuckooMap
+        static size_t s_nCuckooProbesetSize;        // CuckooMap probeset size (only for list-based probeset)
+        static size_t s_nCuckooProbesetThreshold;   // CuckooMap probeset threshold (o - use default)
+
+        static size_t s_nFeldmanMap_HeadBits;
+        static size_t s_nFeldmanMap_ArrayBits;
+
+        static size_t  s_nLoadFactor;  // current load factor
+
+        static void SetUpTestCase();
+        //static void TearDownTestCase();
+
+    private:
+        typedef size_t  key_type;
+        typedef size_t  value_type;
+
+        template <typename Iterator, typename Map>
+        static bool check_result( Iterator const& it, Map const& map )
+        {
+            return it != map.end();
+        }
+        template <typename Map>
+        static bool check_result( bool b, Map const& )
+        {
+            return b;
+        }
+
+        template <class Map>
+        class Inserter: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+
+            Map&     m_Map;
+            std::vector<size_t> m_arrVal;
+
+            void make_array()
+            {
+                size_t const nThreadCount = s_nThreadCount;
+                size_t const nSize = s_nMapSize / nThreadCount + 1;
+                m_arrVal.resize( nSize );
+                size_t nItem = id();
+                for ( size_t i = 0; i < nSize; nItem += nThreadCount, ++i )
+                    m_arrVal[i] = nItem;
+                shuffle( m_arrVal.begin(), m_arrVal.end() );
+            }
+        public:
+            size_t  m_nInsertSuccess = 0;
+            size_t  m_nInsertFailed = 0;
+            size_t  m_nFindSuccess = 0;
+            size_t  m_nFindFail = 0;
+
+        public:
+            Inserter( cds_test::thread_pool& pool, Map& map )
+                : base_class( pool )
+                , m_Map( map )
+            {
+                make_array();
+            }
+
+            Inserter( Inserter& src )
+                : base_class( src )
+                , m_Map( src.m_Map )
+            {
+                make_array();
+            }
+
+            virtual thread * clone()
+            {
+                return new Inserter( *this );
+            }
+
+            virtual void test()
+            {
+                Map& rMap = m_Map;
+
+                size_t const nArrSize = m_arrVal.size();
+                for ( size_t i = 0; i < nArrSize; ++i ) {
+                    size_t const nItem = m_arrVal[i];
+                    if ( check_result( rMap.insert( nItem, nItem * 8 ), rMap ))
+                        ++m_nInsertSuccess;
+                    else
+                        ++m_nInsertFailed;
+
+                    for ( size_t k = 0; k <= i; ++k ) {
+                        if ( check_result( rMap.contains( m_arrVal[k] ), rMap ))
+                            ++m_nFindSuccess;
+                        else
+                            ++m_nFindFail;
+                    }
+                }
+            }
+        };
+
+    protected:
+
+        template <class Map>
+        void do_test( Map& testMap )
+        {
+            typedef Inserter<Map> inserter;
+
+            cds_test::thread_pool& pool = get_pool();
+            pool.add( new inserter( pool, testMap ), s_nThreadCount );
+
+            propout()
+                << std::make_pair( "thread_count", s_nThreadCount )
+                << std::make_pair( "insert_per_thread", s_nMapSize );
+
+            std::chrono::milliseconds duration = pool.run();
+
+            propout() << std::make_pair( "duration", duration );
+
+            size_t nInsertSuccess = 0;
+            size_t nInsertFailed = 0;
+            size_t nFindSuccess = 0;
+            size_t nFindFailed = 0;
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                inserter& thr = static_cast<inserter&>(pool.get( i ));
+
+                EXPECT_EQ( thr.m_nInsertFailed, 0 ) << "thread " << thr.id();
+                EXPECT_EQ( thr.m_nFindFail, 0 ) << "thread " << thr.id();
+
+                nInsertSuccess += thr.m_nInsertSuccess;
+                nInsertFailed += thr.m_nInsertFailed;
+                nFindSuccess += thr.m_nFindSuccess;
+                nFindFailed += thr.m_nFindFail;
+            }
+
+            propout()
+                << std::make_pair( "insert_success", nInsertSuccess )
+                << std::make_pair( "insert_failed", nInsertFailed )
+                << std::make_pair( "find_success", nFindSuccess )
+                << std::make_pair( "find_failed", nFindFailed )
+                << std::make_pair( "finish_map_size", testMap.size() );
+
+            EXPECT_EQ( nInsertFailed, 0 );
+            EXPECT_EQ( nFindFailed, 0 );
+
+            check_before_cleanup( testMap );
+
+            testMap.clear();
+            additional_check( testMap );
+            print_stat( propout(), testMap );
+            additional_cleanup( testMap );
+        }
+
+        template <class Map>
+        void run_test()
+        {
+            Map testMap( *this );
+            do_test( testMap );
+        }
+    };
+
+    class Map_InsFind_int_LF: public Map_InsFind_int
+        , public ::testing::WithParamInterface<size_t>
+    {
+    public:
+        template <class Map>
+        void run_test()
+        {
+            s_nLoadFactor = GetParam();
+            propout() << std::make_pair( "load_factor", s_nLoadFactor );
+            Map_InsFind_int::run_test<Map>();
+        }
+
+        static std::vector<size_t> get_load_factors();
+    };
+
+} // namespace map
diff --git a/test/stress/map/insfind_int/map_insfind_michael.cpp b/test/stress/map/insfind_int/map_insfind_michael.cpp
new file mode 100644 (file)
index 0000000..86f279b
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insfind_int.h"
+#include "map_type_michael.h"
+
+namespace map {
+
+    CDSSTRESS_MichaelMap( Map_InsFind_int_LF, run_test, size_t, size_t )
+    CDSSTRESS_MichaelMap_nogc( Map_InsFind_int_LF, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insfind_int/map_insfind_skip.cpp b/test/stress/map/insfind_int/map_insfind_skip.cpp
new file mode 100644 (file)
index 0000000..2593ca6
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insfind_int.h"
+#include "map_type_skip_list.h"
+
+namespace map {
+
+    CDSSTRESS_SkipListMap( Map_InsFind_int, run_test, size_t, size_t )
+    CDSSTRESS_SkipListMap_nogc( Map_InsFind_int, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insfind_int/map_insfind_split.cpp b/test/stress/map/insfind_int/map_insfind_split.cpp
new file mode 100644 (file)
index 0000000..326b525
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insfind_int.h"
+#include "map_type_split_list.h"
+
+namespace map {
+
+    CDSSTRESS_SplitListMap( Map_InsFind_int_LF, run_test, size_t, size_t )
+    CDSSTRESS_SplitListMap_nogc( Map_InsFind_int_LF, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insfind_int/map_insfind_std.cpp b/test/stress/map/insfind_int/map_insfind_std.cpp
new file mode 100644 (file)
index 0000000..c7b9b51
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insfind_int.h"
+#include "map_type_std.h"
+
+namespace map {
+
+    CDSSTRESS_StdMap( Map_InsFind_int, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/insfind_int/map_insfind_striped.cpp b/test/stress/map/insfind_int/map_insfind_striped.cpp
new file mode 100644 (file)
index 0000000..ec4e781
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "map_insfind_int.h"
+#include "map_type_striped.h"
+
+namespace map {
+
+    CDSSTRESS_StripedMap( Map_InsFind_int_LF, run_test, size_t, size_t )
+
+} // namespace map
diff --git a/test/stress/map/map_type.h b/test/stress/map/map_type.h
new file mode 100644 (file)
index 0000000..3d1187b
--- /dev/null
@@ -0,0 +1,230 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_MAP_TYPE_H
+#define CDSUNIT_MAP_TYPE_H
+
+#include <cds/urcu/general_instant.h>
+#include <cds/urcu/general_buffered.h>
+#include <cds/urcu/general_threaded.h>
+#include <cds/urcu/signal_buffered.h>
+#include <cds/urcu/signal_threaded.h>
+
+#include <cds/sync/spinlock.h>
+#include <cds/opt/hash.h>
+#include <boost/functional/hash/hash.hpp>
+
+#include <cds_test/stress_test.h>
+#include <cds_test/check_size.h>
+#include "framework/michael_alloc.h"
+
+namespace map {
+    namespace cc = cds::container;
+    namespace co = cds::opt;
+
+    typedef cds::urcu::gc< cds::urcu::general_instant<> >   rcu_gpi;
+    typedef cds::urcu::gc< cds::urcu::general_buffered<> >  rcu_gpb;
+    typedef cds::urcu::gc< cds::urcu::general_threaded<> >  rcu_gpt;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+    typedef cds::urcu::gc< cds::urcu::signal_buffered<> >  rcu_shb;
+    typedef cds::urcu::gc< cds::urcu::signal_threaded<> >  rcu_sht;
+#endif
+
+    template <typename Key>
+    struct less;
+
+    template <typename Key>
+    struct cmp {
+        int operator ()(Key const& k1, Key const& k2) const
+        {
+            if ( less<Key>( k1, k2 ) )
+                return -1;
+            return less<Key>( k2, k1 ) ? 1 : 0;
+        }
+    };
+
+    template <typename Key>
+    struct hash;
+
+#define CDSUNIT_INT_COMPARE(t)  template <> struct cmp<t> { int operator()( t k1, t k2 ){ return (int)(k1 - k2); } }
+    CDSUNIT_INT_COMPARE(char);
+    CDSUNIT_INT_COMPARE(unsigned char);
+    CDSUNIT_INT_COMPARE(int);
+    CDSUNIT_INT_COMPARE(unsigned int);
+    CDSUNIT_INT_COMPARE(long);
+    CDSUNIT_INT_COMPARE(unsigned long);
+    CDSUNIT_INT_COMPARE(long long);
+    CDSUNIT_INT_COMPARE(unsigned long long);
+#undef CDSUNIT_INT_COMPARE
+
+#define CDSUNIT_INT_LESS(t)  template <> struct less<t> { bool operator()( t k1, t k2 ){ return k1 < k2; } }
+    CDSUNIT_INT_LESS( char );
+    CDSUNIT_INT_LESS( unsigned char );
+    CDSUNIT_INT_LESS( int );
+    CDSUNIT_INT_LESS( unsigned int );
+    CDSUNIT_INT_LESS( long );
+    CDSUNIT_INT_LESS( unsigned long );
+    CDSUNIT_INT_LESS( long long );
+    CDSUNIT_INT_LESS( unsigned long long );
+#undef CDSUNIT_INT_LESS
+
+    template <>
+    struct cmp<std::string>
+    {
+        int operator()(std::string const& s1, std::string const& s2)
+        {
+            return s1.compare( s2 );
+        }
+        int operator()(std::string const& s1, char const * s2)
+        {
+            return s1.compare( s2 );
+        }
+        int operator()(char const * s1, std::string const& s2)
+        {
+            return -s2.compare( s1 );
+        }
+    };
+
+    template <>
+    struct less<std::string>
+    {
+        bool operator ()( std::string const& k1, std::string const& k2 ) const
+        {
+            return cmp<std::string>()(k1, k2) < 0;
+        }
+        bool operator ()( std::string const& k1, char const* k2 ) const
+        {
+            return cmp<std::string>()(k1, k2) < 0;
+        }
+        bool operator ()( char const* k1, std::string const& k2 ) const
+        {
+            return cmp<std::string>()(k1, k2) < 0;
+        }
+    };
+
+    template <typename T>
+    struct hash
+    {
+        typedef size_t result_type;
+        typedef T      argument_type;
+
+        size_t operator()( T const& k ) const
+        {
+            return std::hash<size_t>()(k.nKey);
+        }
+
+        size_t operator()( size_t k ) const
+        {
+            return std::hash<size_t>()(k);
+        }
+    };
+
+    template <>
+    struct hash<size_t>
+    {
+        typedef size_t result_type;
+        typedef size_t argument_type;
+
+        size_t operator()( size_t k ) const
+        {
+            return std::hash<size_t>()(k);
+        }
+    };
+
+    template <>
+    struct hash<std::string>
+    {
+        typedef size_t result_type;
+        typedef std::string argument_type;
+
+        size_t operator()( std::string const& k ) const
+        {
+            return std::hash<std::string>()(k);
+        }
+    };
+
+    // forward
+    template <typename ImplSelector, typename Key, typename Value>
+    struct map_type;
+
+    template <typename Key, typename Value>
+    struct map_type_base
+    {
+        typedef map::hash<Key>    key_hash;
+        typedef map::less<Key>    key_less;
+        typedef cmp<Key>          key_compare;
+
+        struct equal_to {
+            bool operator()( Key const& k1, Key const& k2 ) const
+            {
+                return key_compare()( k1, k2 ) == 0;
+            }
+        };
+
+        struct hash2: public key_hash
+        {
+            size_t operator()( Key const& k ) const
+            {
+                size_t h = key_hash::operator ()( k );
+                size_t seed = ~h;
+                seed ^= h + 0x9e3779b9 + (seed << 6) + (seed >> 2);
+                return seed;
+            }
+            template <typename Q>
+            size_t operator()( Q const& k ) const
+            {
+                size_t h = key_hash::operator ()( k );
+                size_t seed = ~h;
+                seed ^= h + 0x9e3779b9 + (seed << 6) + (seed >> 2);
+                return seed;
+            }
+        };
+
+    };
+
+    template <typename Map>
+    static inline void print_stat( cds_test::property_stream&, Map const& /*m*/ )
+    {}
+
+    template <typename Map>
+    static inline void check_before_cleanup( Map& /*m*/ )
+    {}
+
+    template <typename Map>
+    static inline void additional_cleanup( Map& /*m*/ )
+    {}
+
+    template <typename Map>
+    static inline void additional_check( Map& /*m*/ )
+    {}
+
+} // namespace map
+
+#endif // ifndef CDSUNIT_MAP_TYPE_H
diff --git a/test/stress/map/map_type_bronson_avltree.h b/test/stress/map/map_type_bronson_avltree.h
new file mode 100644 (file)
index 0000000..ac5bff3
--- /dev/null
@@ -0,0 +1,246 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_MAP_TYPE_BRONSON_AVLTREE_H
+#define CDSUNIT_MAP_TYPE_BRONSON_AVLTREE_H
+
+#include "map_type.h"
+
+#include <cds/memory/vyukov_queue_pool.h>
+#include <cds/sync/pool_monitor.h>
+#include <cds/container/bronson_avltree_map_rcu.h>
+
+#include <cds_test/stat_bronson_avltree_out.h>
+#include <cds_test/stat_sync_monitor_out.h>
+
+namespace map {
+
+    template <class GC, typename Key, typename T, typename Traits = cc::bronson_avltree::traits >
+    class BronsonAVLTreeMap : public cc::BronsonAVLTreeMap< GC, Key, T, Traits >
+    {
+        typedef cc::BronsonAVLTreeMap< GC, Key, T, Traits > base_class;
+    public:
+        template <typename Config>
+        BronsonAVLTreeMap( Config const& /*cfg*/)
+            : base_class()
+        {}
+
+        // 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;
+
+    template <typename Key, typename Value>
+    struct map_type< tag_BronsonAVLTreeMap, Key, Value >: public map_type_base< Key, Value >
+    {
+        typedef map_type_base< Key, Value >      base_class;
+        typedef typename base_class::key_compare compare;
+        typedef typename base_class::key_less    less;
+
+        typedef cds::memory::vyukov_queue_pool< std::mutex >         BronsonAVLTreeMap_simple_pool;
+        typedef cds::memory::lazy_vyukov_queue_pool< std::mutex >    BronsonAVLTreeMap_lazy_pool;
+        typedef cds::memory::bounded_vyukov_queue_pool< std::mutex > BronsonAVLTreeMap_bounded_pool;
+
+        struct BronsonAVLTreeMap_less: public
+            cc::bronson_avltree::make_traits<
+                co::less< less >
+                ,cc::bronson_avltree::relaxed_insert< false >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_gpi_less;
+        typedef BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_gpb_less;
+        typedef BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_gpt_less;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_shb_less;
+        typedef BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_sht_less;
+#endif
+        struct BronsonAVLTreeMap_cmp_stat: public
+            cc::bronson_avltree::make_traits<
+                co::compare< compare >
+                ,cc::bronson_avltree::relaxed_insert< false >
+                ,co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< cc::bronson_avltree::stat<>>
+            >::type
+        {};
+        typedef BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_gpi_cmp_stat;
+        typedef BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_gpb_cmp_stat;
+        typedef BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_gpt_cmp_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_shb_cmp_stat;
+        typedef BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_sht_cmp_stat;
+#endif
+
+        struct BronsonAVLTreeMap_less_pool_simple: public BronsonAVLTreeMap_less
+        {
+            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_simple_pool> sync_monitor;
+        };
+        typedef BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_gpi_less_pool_simple;
+        typedef BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_gpb_less_pool_simple;
+        typedef BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_gpt_less_pool_simple;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_shb_less_pool_simple;
+        typedef BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_sht_less_pool_simple;
+#endif
+        struct BronsonAVLTreeMap_less_pool_simple_stat : public BronsonAVLTreeMap_less
+        {
+            typedef cc::bronson_avltree::stat<> stat;
+            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_simple_pool, cds::opt::none, true > sync_monitor;
+        };
+        typedef BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_gpi_less_pool_simple_stat;
+        typedef BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_gpb_less_pool_simple_stat;
+        typedef BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_gpt_less_pool_simple_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_shb_less_pool_simple_stat;
+        typedef BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_sht_less_pool_simple_stat;
+#endif
+        struct BronsonAVLTreeMap_less_pool_lazy: public BronsonAVLTreeMap_less
+        {
+            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_lazy_pool> sync_monitor;
+            static CDS_CONSTEXPR bool const relaxed_insert = false; // relaxed insert can lead to test assert triggering
+        };
+        typedef BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_gpi_less_pool_lazy;
+        typedef BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_gpb_less_pool_lazy;
+        typedef BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_gpt_less_pool_lazy;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_shb_less_pool_lazy;
+        typedef BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_sht_less_pool_lazy;
+#endif
+        struct BronsonAVLTreeMap_less_pool_lazy_stat : public BronsonAVLTreeMap_less
+        {
+            typedef cc::bronson_avltree::stat<> stat;
+            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_lazy_pool, cds::opt::none, true > sync_monitor;
+            static CDS_CONSTEXPR bool const relaxed_insert = false; // relaxed insert can lead to test assert triggering
+        };
+        typedef BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_gpi_less_pool_lazy_stat;
+        typedef BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_gpb_less_pool_lazy_stat;
+        typedef BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_gpt_less_pool_lazy_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_shb_less_pool_lazy_stat;
+        typedef BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_sht_less_pool_lazy_stat;
+#endif
+        struct BronsonAVLTreeMap_less_pool_bounded: public BronsonAVLTreeMap_less
+        {
+            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_bounded_pool> sync_monitor;
+            static CDS_CONSTEXPR bool const relaxed_insert = false; // relaxed insert can lead to test assert triggering
+        };
+        typedef BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_gpi_less_pool_bounded;
+        typedef BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_gpb_less_pool_bounded;
+        typedef BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_gpt_less_pool_bounded;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_shb_less_pool_bounded;
+        typedef BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_sht_less_pool_bounded;
+#endif
+        struct BronsonAVLTreeMap_less_pool_bounded_stat : public BronsonAVLTreeMap_less
+        {
+            typedef cc::bronson_avltree::stat<> stat;
+            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_bounded_pool, cds::opt::none, true > sync_monitor;
+            static CDS_CONSTEXPR bool const relaxed_insert = false; // relaxed insert can lead to test assert triggering
+        };
+        typedef BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_gpi_less_pool_bounded_stat;
+        typedef BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_gpb_less_pool_bounded_stat;
+        typedef BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_gpt_less_pool_bounded_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_shb_less_pool_bounded_stat;
+        typedef BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_sht_less_pool_bounded_stat;
+#endif
+    };
+
+    template <typename GC, typename Key, typename T, typename Traits>
+    static inline void print_stat( cds_test::property_stream& o, BronsonAVLTreeMap<GC, Key, T, Traits> const& m )
+    {
+        o << m.statistics()
+          << m.monitor().statistics();
+    }
+
+    template <typename GC, typename Key, typename T, typename Traits>
+    static inline void check_before_cleanup( BronsonAVLTreeMap<GC, Key, T, Traits>& m )
+    {
+        bool check_consistency_result = m.check_consistency([]( size_t nLevel, size_t hLeft, size_t hRight )
+            {
+                EXPECT_TRUE( false ) << "Tree violation on level=" << nLevel << ": hLeft=" << hLeft << ", hRight=" << hRight;
+            });
+        EXPECT_TRUE( check_consistency_result );
+    }
+
+
+#define CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, bronson_map_type, key_type, value_type ) \
+    TEST_F( fixture, bronson_map_type ) \
+    { \
+        typedef map::map_type< tag_BronsonAVLTreeMap, key_type, value_type >::bronson_map_type map_type; \
+        test_case<map_type>(); \
+    }
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+#   define CDSSTRESS_BronsonAVLTreeMap_SHRCU( fixture, test_case, key_type, value_type ) \
+        CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_shb_less,                   key_type, value_type ) \
+        CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_sht_less,                   key_type, value_type ) \
+        CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_shb_cmp_stat,               key_type, value_type ) \
+        CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_sht_cmp_stat,               key_type, value_type ) \
+        CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_shb_less_pool_simple,       key_type, value_type ) \
+        CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_sht_less_pool_simple,       key_type, value_type ) \
+        CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_shb_less_pool_simple_stat,  key_type, value_type ) \
+        CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_sht_less_pool_simple_stat,  key_type, value_type ) \
+        CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_shb_less_pool_lazy,         key_type, value_type ) \
+        CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_sht_less_pool_lazy,         key_type, value_type ) \
+        CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_shb_less_pool_lazy_stat,    key_type, value_type ) \
+        CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_sht_less_pool_lazy_stat,    key_type, value_type )
+
+#else
+#   define CDSSTRESS_BronsonAVLTreeMap_SHRCU( fixture, test_case, key_type, value_type )
+#endif
+
+#define CDSSTRESS_BronsonAVLTreeMap( fixture, test_case, key_type, value_type ) \
+    CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_gpi_less,                   key_type, value_type ) \
+    CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_gpb_less,                   key_type, value_type ) \
+    CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_gpt_less,                   key_type, value_type ) \
+    CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_gpi_cmp_stat,               key_type, value_type ) \
+    CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_gpb_cmp_stat,               key_type, value_type ) \
+    CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_gpt_cmp_stat,               key_type, value_type ) \
+    CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_gpi_less_pool_simple,       key_type, value_type ) \
+    CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_gpb_less_pool_simple,       key_type, value_type ) \
+    CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_gpt_less_pool_simple,       key_type, value_type ) \
+    CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_gpi_less_pool_simple_stat,  key_type, value_type ) \
+    CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_gpb_less_pool_simple_stat,  key_type, value_type ) \
+    CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_gpt_less_pool_simple_stat,  key_type, value_type ) \
+    CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_gpi_less_pool_lazy,         key_type, value_type ) \
+    CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_gpb_less_pool_lazy,         key_type, value_type ) \
+    CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_gpt_less_pool_lazy,         key_type, value_type ) \
+    CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_gpi_less_pool_lazy_stat,    key_type, value_type ) \
+    CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_gpb_less_pool_lazy_stat,    key_type, value_type ) \
+    CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_gpt_less_pool_lazy_stat,    key_type, value_type ) \
+    CDSSTRESS_BronsonAVLTreeMap_SHRCU( fixture, test_case, key_type, value_type )
+
+}   // namespace map
+
+#endif // ifndef CDSUNIT_MAP_TYPE_BRONSON_AVLTREE_H
diff --git a/test/stress/map/map_type_cuckoo.h b/test/stress/map/map_type_cuckoo.h
new file mode 100644 (file)
index 0000000..0fd760c
--- /dev/null
@@ -0,0 +1,364 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_MAP_TYPE_CUCKOO_H
+#define CDSUNIT_MAP_TYPE_CUCKOO_H
+
+#include "map_type.h"
+#include <cds/container/cuckoo_map.h>
+#include <cds_test/stat_cuckoo_out.h>
+#include <cds_test/hash_func.h>
+
+namespace map {
+
+    template <typename K, typename V, typename Traits>
+    class CuckooMap: public cc::CuckooMap< K, V, Traits >
+    {
+    public:
+        typedef cc::CuckooMap< K, V, Traits > base_class;
+
+    public:
+        template <typename Config>
+        CuckooMap( Config const& cfg )
+            : base_class(
+                cfg.s_nCuckooInitialSize,
+                static_cast<unsigned int>( cfg.s_nCuckooProbesetSize ),
+                static_cast<unsigned int>( cfg.s_nCuckooProbesetThreshold )
+            )
+        {}
+
+        template <typename Q, typename Pred>
+        bool erase_with( Q const& key, Pred /*pred*/ )
+        {
+            return base_class::erase_with( key, typename std::conditional< base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
+        }
+
+        // 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;
+
+    template <typename Key, typename Value>
+    struct map_type< tag_CuckooMap, Key, Value >: public map_type_base< Key, Value >
+    {
+        typedef map_type_base< Key, Value > base_class;
+        typedef typename base_class::key_compare compare;
+        typedef typename base_class::key_less    less;
+        typedef typename base_class::equal_to    equal_to;
+        typedef typename base_class::key_hash    hash;
+        typedef typename base_class::hash2       hash2;
+
+        template <typename Traits>
+        struct traits_CuckooStripedMap: public Traits
+        {
+            typedef cc::cuckoo::striping<> mutex_policy;
+        };
+        template <typename Traits>
+        struct traits_CuckooRefinableMap : public Traits
+        {
+            typedef cc::cuckoo::refinable<> mutex_policy;
+        };
+
+        struct traits_CuckooMap_list_unord :
+            public cc::cuckoo::make_traits <
+                cc::cuckoo::probeset_type< cc::cuckoo::list >
+                , co::equal_to< equal_to >
+                , co::hash< std::tuple< hash, hash2 > >
+            > ::type
+        {};
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_unord>> CuckooStripedMap_list_unord;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_unord>> CuckooRefinableMap_list_unord;
+
+        struct traits_CuckooMap_list_unord_stat : public traits_CuckooMap_list_unord
+        {
+            typedef cc::cuckoo::stat stat;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_unord_stat>> CuckooStripedMap_list_unord_stat;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_unord_stat>> CuckooRefinableMap_list_unord_stat;
+
+        struct traits_CuckooMap_list_unord_storehash : public traits_CuckooMap_list_unord
+        {
+            static CDS_CONSTEXPR const bool store_hash = true;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_unord_storehash>> CuckooStripedMap_list_unord_storehash;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_unord_storehash>> CuckooRefinableMap_list_unord_storehash;
+
+        struct traits_CuckooMap_list_ord :
+            public cc::cuckoo::make_traits <
+                cc::cuckoo::probeset_type< cc::cuckoo::list >
+                , co::compare< compare >
+                , co::hash< std::tuple< hash, hash2 > >
+            >::type
+        {};
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_ord>> CuckooStripedMap_list_ord;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_ord>> CuckooRefinableMap_list_ord;
+
+        struct traits_CuckooMap_list_ord_stat : public traits_CuckooMap_list_ord
+        {
+            typedef cc::cuckoo::stat stat;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_ord_stat>> CuckooStripedMap_list_ord_stat;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_ord_stat>> CuckooRefinableMap_list_ord_stat;
+
+        struct traits_CuckooMap_list_ord_storehash : public traits_CuckooMap_list_ord
+        {
+            static CDS_CONSTEXPR const bool store_hash = true;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_ord_storehash>> CuckooStripedMap_list_ord_storehash;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_ord_storehash>> CuckooRefinableMap_list_ord_storehash;
+
+        struct traits_CuckooMap_vector_unord :
+            public cc::cuckoo::make_traits <
+                cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
+                , co::equal_to< equal_to >
+                , co::hash< std::tuple< hash, hash2 > >
+            >::type
+        {};
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_unord>> CuckooStripedMap_vector_unord;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_unord>> CuckooRefinableMap_vector_unord;
+
+        struct traits_CuckooMap_vector_unord_stat : public traits_CuckooMap_vector_unord
+        {
+            typedef cc::cuckoo::stat stat;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_unord_stat>> CuckooStripedMap_vector_unord_stat;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_unord_stat>> CuckooRefinableMap_vector_unord_stat;
+
+        struct traits_CuckooMap_vector_unord_storehash : public traits_CuckooMap_vector_unord
+        {
+            static CDS_CONSTEXPR const bool store_hash = true;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_unord_storehash>> CuckooStripedMap_vector_unord_storehash;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_unord_storehash>> CuckooRefinableMap_vector_unord_storehash;
+
+        struct traits_CuckooMap_vector_ord :
+            public cc::cuckoo::make_traits <
+                cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
+                , co::compare< compare >
+                , co::hash< std::tuple< hash, hash2 > >
+            >::type
+        {};
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_ord>> CuckooStripedMap_vector_ord;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_ord>> CuckooRefinableMap_vector_ord;
+
+        struct traits_CuckooMap_vector_ord_stat : public traits_CuckooMap_vector_ord
+        {
+            typedef cc::cuckoo::stat stat;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_ord_stat>> CuckooStripedMap_vector_ord_stat;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_ord_stat>> CuckooRefinableMap_vector_ord_stat;
+
+        struct traits_CuckooMap_vector_ord_storehash : public traits_CuckooMap_vector_ord
+        {
+            static CDS_CONSTEXPR const bool store_hash = true;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_ord_storehash>> CuckooStripedMap_vector_ord_storehash;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_ord_storehash>> CuckooRefinableMap_vector_ord_storehash;
+
+#if CDS_BUILD_BITS == 64
+
+        struct traits_CuckooMap_list_unord_city64:
+            public cc::cuckoo::make_traits <
+                cc::cuckoo::probeset_type< cc::cuckoo::list >
+                , co::equal_to< equal_to >
+                , co::hash< std::tuple< cds_test::city64, hash2 > >
+            > ::type
+        {};
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_unord_city64>> CuckooStripedMap_list_unord_city64;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_unord_city64>> CuckooRefinableMap_list_unord_city64;
+
+        struct traits_CuckooMap_list_unord_city64_stat: public traits_CuckooMap_list_unord_city64
+        {
+            typedef cc::cuckoo::stat stat;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_unord_city64_stat>> CuckooStripedMap_list_unord_city64_stat;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_unord_city64_stat>> CuckooRefinableMap_list_unord_city64_stat;
+
+        struct traits_CuckooMap_list_unord_city64_storehash: public traits_CuckooMap_list_unord_city64
+        {
+            static CDS_CONSTEXPR const bool store_hash = true;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_unord_city64_storehash>> CuckooStripedMap_list_unord_city64_storehash;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_unord_city64_storehash>> CuckooRefinableMap_list_unord_city64_storehash;
+
+        struct traits_CuckooMap_list_ord_city64:
+            public cc::cuckoo::make_traits <
+            cc::cuckoo::probeset_type< cc::cuckoo::list >
+            , co::compare< compare >
+            , co::hash< std::tuple< cds_test::city64, hash2 > >
+            >::type
+        {};
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_ord_city64>> CuckooStripedMap_list_ord_city64;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_ord_city64>> CuckooRefinableMap_list_ord_city64;
+
+        struct traits_CuckooMap_list_ord_city64_stat: public traits_CuckooMap_list_ord_city64
+        {
+            typedef cc::cuckoo::stat stat;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_ord_city64_stat>> CuckooStripedMap_list_ord_city64_stat;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_ord_city64_stat>> CuckooRefinableMap_list_ord_city64_stat;
+
+        struct traits_CuckooMap_list_ord_city64_storehash: public traits_CuckooMap_list_ord_city64
+        {
+            static CDS_CONSTEXPR const bool store_hash = true;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_ord_city64_storehash>> CuckooStripedMap_list_ord_city64_storehash;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_ord_city64_storehash>> CuckooRefinableMap_list_ord_city64_storehash;
+
+        struct traits_CuckooMap_vector_unord_city64:
+            public cc::cuckoo::make_traits <
+            cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
+            , co::equal_to< equal_to >
+            , co::hash< std::tuple< cds_test::city64, hash2 > >
+            >::type
+        {};
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_unord_city64>> CuckooStripedMap_vector_unord_city64;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_unord_city64>> CuckooRefinableMap_vector_unord_city64;
+
+        struct traits_CuckooMap_vector_unord_city64_stat: public traits_CuckooMap_vector_unord_city64
+        {
+            typedef cc::cuckoo::stat stat;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_unord_city64_stat>> CuckooStripedMap_vector_unord_city64_stat;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_unord_city64_stat>> CuckooRefinableMap_vector_unord_city64_stat;
+
+        struct traits_CuckooMap_vector_unord_city64_storehash: public traits_CuckooMap_vector_unord_city64
+        {
+            static CDS_CONSTEXPR const bool store_hash = true;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_unord_city64_storehash>> CuckooStripedMap_vector_unord_city64_storehash;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_unord_city64_storehash>> CuckooRefinableMap_vector_unord_city64_storehash;
+
+        struct traits_CuckooMap_vector_ord_city64:
+            public cc::cuckoo::make_traits <
+            cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
+            , co::compare< compare >
+            , co::hash< std::tuple< cds_test::city64, hash2 > >
+            >::type
+        {};
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_ord_city64>> CuckooStripedMap_vector_ord_city64;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_ord_city64>> CuckooRefinableMap_vector_ord_city64;
+
+        struct traits_CuckooMap_vector_ord_city64_stat: public traits_CuckooMap_vector_ord_city64
+        {
+            typedef cc::cuckoo::stat stat;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_ord_city64_stat>> CuckooStripedMap_vector_ord_city64_stat;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_ord_city64_stat>> CuckooRefinableMap_vector_ord_city64_stat;
+
+        struct traits_CuckooMap_vector_ord_city64_storehash: public traits_CuckooMap_vector_ord_city64
+        {
+            static CDS_CONSTEXPR const bool store_hash = true;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_ord_city64_storehash>> CuckooStripedMap_vector_ord_city64_storehash;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_ord_city64_storehash>> CuckooRefinableMap_vector_ord_city64_storehash;
+#endif // CDS_BUILD_BITS == 64
+    };
+
+    template <typename Key, typename T, typename Traits >
+    static inline void print_stat( cds_test::property_stream& o, cc::CuckooMap< Key, T, Traits > const& s )
+    {
+        o << s.statistics() << s.mutex_policy_statistics();
+    }
+
+    template <typename Key, typename V, typename Traits>
+    static inline void print_stat( cds_test::property_stream& o, CuckooMap< Key, V, Traits > const& s )
+    {
+        typedef CuckooMap< Key, V, Traits > map_type;
+        print_stat( o, static_cast<typename map_type::base_class const&>(s) );
+    }
+
+}   // namespace map
+
+
+#define CDSSTRESS_CuckooMap_case( fixture, test_case, cuckoo_map_type, key_type, value_type ) \
+    TEST_F( fixture, cuckoo_map_type ) \
+    { \
+        typedef map::map_type< tag_CuckooMap, key_type, value_type >::cuckoo_map_type map_type; \
+        test_case<map_type>(); \
+    }
+
+#define CDSSTRESS_CuckooMap( fixture, test_case, key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_list_unord,              key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_list_unord,            key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_list_unord_stat,         key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_list_unord_stat,       key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_list_unord_storehash,    key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_list_unord_storehash,  key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_list_ord,                key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_list_ord,              key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_list_ord_stat,           key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_list_ord_stat,         key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_list_ord_storehash,      key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_list_ord_storehash,    key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_vector_unord,            key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_vector_unord,          key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_vector_unord_stat,       key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_vector_unord_stat,     key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_vector_unord_storehash,  key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_vector_unord_storehash, key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_vector_ord,              key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_vector_ord,            key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_vector_ord_stat,         key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_vector_ord_stat,       key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_vector_ord_storehash,    key_type, value_type ) \
+    CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_vector_ord_storehash,  key_type, value_type )
+
+#if CDS_BUILD_BITS == 64
+#   define CDSSTRESS_CuckooMap_city64( fixture, test_case, key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_list_unord_city64,              key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_list_unord_city64,            key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_list_unord_city64_stat,         key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_list_unord_city64_stat,       key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_list_unord_city64_storehash,    key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_list_unord_city64_storehash,  key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_list_ord_city64,                key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_list_ord_city64,              key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_list_ord_city64_stat,           key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_list_ord_city64_stat,         key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_list_ord_city64_storehash,      key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_list_ord_city64_storehash,    key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_vector_unord_city64,            key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_vector_unord_city64,          key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_vector_unord_city64_stat,       key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_vector_unord_city64_stat,     key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_vector_unord_city64_storehash,  key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_vector_unord_city64_storehash, key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_vector_ord_city64,              key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_vector_ord_city64,            key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_vector_ord_city64_stat,         key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_vector_ord_city64_stat,       key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooStripedMap_vector_ord_city64_storehash,    key_type, value_type ) \
+        CDSSTRESS_CuckooMap_case( fixture, test_case, CuckooRefinableMap_vector_ord_city64_storehash,  key_type, value_type )
+#endif
+#endif // ifndef CDSUNIT_MAP_TYPE_CUCKOO_H
diff --git a/test/stress/map/map_type_ellen_bintree.h b/test/stress/map/map_type_ellen_bintree.h
new file mode 100644 (file)
index 0000000..0513b51
--- /dev/null
@@ -0,0 +1,306 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_MAP_TYPE_ELLEN_BINTREE_H
+#define CDSUNIT_MAP_TYPE_ELLEN_BINTREE_H
+
+#include "map_type.h"
+
+#include <cds/container/ellen_bintree_map_rcu.h>
+#include <cds/container/ellen_bintree_map_hp.h>
+#include <cds/container/ellen_bintree_map_dhp.h>
+
+#include <cds_test/stat_ellenbintree_out.h>
+#include "framework/ellen_bintree_update_desc_pool.h"
+
+namespace map {
+
+    template <class GC, typename Key, typename T, typename Traits = cc::ellen_bintree::traits >
+    class EllenBinTreeMap : public cc::EllenBinTreeMap< GC, Key, T, Traits >
+    {
+        typedef cc::EllenBinTreeMap< GC, Key, T, Traits > base_class;
+    public:
+        template <typename Config>
+        EllenBinTreeMap( Config const& /*cfg*/)
+            : base_class()
+        {}
+
+        // 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;
+
+    template <typename Key, typename Value>
+    struct map_type< tag_EllenBinTreeMap, Key, Value >: public map_type_base< Key, Value >
+    {
+        typedef map_type_base< Key, Value >      base_class;
+        typedef typename base_class::key_compare compare;
+        typedef typename base_class::key_less    less;
+
+        struct ellen_bintree_props {
+            struct hp_gc {
+                typedef cc::ellen_bintree::map_node<cds::gc::HP, Key, Value>        leaf_node;
+                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
+                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
+            };
+            struct dhp_gc {
+                typedef cc::ellen_bintree::map_node<cds::gc::DHP, Key, Value>       leaf_node;
+                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
+                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
+            };
+            struct gpi {
+                typedef cc::ellen_bintree::map_node<rcu_gpi, Key, Value>            leaf_node;
+                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
+                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
+            };
+            struct gpb {
+                typedef cc::ellen_bintree::map_node<rcu_gpb, Key, Value>            leaf_node;
+                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
+                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
+            };
+            struct gpt {
+                typedef cc::ellen_bintree::map_node<rcu_gpt, Key, Value>            leaf_node;
+                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
+                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
+            };
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+            struct shb {
+                typedef cc::ellen_bintree::map_node<rcu_shb, Key, Value>            leaf_node;
+                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
+                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
+            };
+            struct sht {
+                typedef cc::ellen_bintree::map_node<rcu_sht, Key, Value>            leaf_node;
+                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
+                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
+            };
+#endif
+        };
+
+        struct traits_EllenBinTreeMap: public cc::ellen_bintree::make_set_traits<
+                co::less< less >
+                ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        struct traits_EllenBinTreeMap_hp : traits_EllenBinTreeMap {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_hp > EllenBinTreeMap_hp;
+
+        struct traits_EllenBinTreeMap_dhp : traits_EllenBinTreeMap {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeMap< cds::gc::DHP, Key, Value, traits_EllenBinTreeMap_dhp > EllenBinTreeMap_dhp;
+
+        struct traits_EllenBinTreeMap_gpi : traits_EllenBinTreeMap {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeMap< rcu_gpi, Key, Value, traits_EllenBinTreeMap_gpi > EllenBinTreeMap_rcu_gpi;
+
+        struct traits_EllenBinTreeMap_gpb : traits_EllenBinTreeMap {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_gpb > EllenBinTreeMap_rcu_gpb;
+
+        struct traits_EllenBinTreeMap_gpt : traits_EllenBinTreeMap {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeMap< rcu_gpt, Key, Value, traits_EllenBinTreeMap_gpt > EllenBinTreeMap_rcu_gpt;
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        struct traits_EllenBinTreeMap_shb : traits_EllenBinTreeMap {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeMap< rcu_shb, Key, Value, traits_EllenBinTreeMap_shb > EllenBinTreeMap_rcu_shb;
+
+        struct traits_EllenBinTreeMap_sht : traits_EllenBinTreeMap {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeMap< rcu_sht, Key, Value, traits_EllenBinTreeMap_sht > EllenBinTreeMap_rcu_sht;
+#endif
+
+        struct traits_EllenBinTreeMap_yield : public traits_EllenBinTreeMap
+        {
+            typedef cds::backoff::yield back_off;
+        };
+        struct traits_EllenBinTreeMap_hp_yield : traits_EllenBinTreeMap_yield {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_hp_yield > EllenBinTreeMap_hp_yield;
+
+        struct traits_EllenBinTreeMap_dhp_yield : traits_EllenBinTreeMap_yield {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeMap< cds::gc::DHP, Key, Value, traits_EllenBinTreeMap_dhp_yield > EllenBinTreeMap_dhp_yield;
+
+        struct traits_EllenBinTreeMap_gpb_yield : traits_EllenBinTreeMap_yield {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_gpb_yield > EllenBinTreeMap_rcu_gpb_yield;
+
+
+        struct traits_EllenBinTreeMap_stat: public cc::ellen_bintree::make_set_traits<
+                co::less< less >
+                ,cc::ellen_bintree::update_desc_allocator<
+                    cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
+                >
+                ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
+                ,co::stat< cc::ellen_bintree::stat<> >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+
+        struct traits_EllenBinTreeMap_stat_hp : public traits_EllenBinTreeMap_stat
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_stat_hp > EllenBinTreeMap_hp_stat;
+
+        struct traits_EllenBinTreeMap_stat_dhp : public traits_EllenBinTreeMap_stat
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_stat_dhp > EllenBinTreeMap_dhp_stat;
+
+        struct traits_EllenBinTreeMap_stat_gpi : public traits_EllenBinTreeMap_stat
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeMap< rcu_gpi, Key, Value, traits_EllenBinTreeMap_stat_gpi > EllenBinTreeMap_rcu_gpi_stat;
+
+        struct traits_EllenBinTreeMap_stat_gpb : public traits_EllenBinTreeMap_stat
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_stat_gpb > EllenBinTreeMap_rcu_gpb_stat;
+
+        struct traits_EllenBinTreeMap_stat_gpt : public traits_EllenBinTreeMap_stat
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeMap< rcu_gpt, Key, Value, traits_EllenBinTreeMap_stat_gpt > EllenBinTreeMap_rcu_gpt_stat;
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        struct traits_EllenBinTreeMap_stat_shb : public traits_EllenBinTreeMap_stat
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeMap< rcu_shb, Key, Value, traits_EllenBinTreeMap_stat_shb > EllenBinTreeMap_rcu_shb_stat;
+
+        struct traits_EllenBinTreeMap_stat_sht : public traits_EllenBinTreeMap_stat
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeMap< rcu_sht, Key, Value, traits_EllenBinTreeMap_stat_sht > EllenBinTreeMap_rcu_sht_stat;
+#endif
+    };
+
+    template <typename GC, typename Key, typename T, typename Traits>
+    static inline void print_stat( cds_test::property_stream& o, EllenBinTreeMap<GC, Key, T, Traits> const& s )
+    {
+        o << s.statistics();
+    }
+    template <typename GC, typename Key, typename T, typename Traits>
+    static inline void additional_cleanup( EllenBinTreeMap<GC, Key, T, Traits>& /*s*/ )
+    {
+        ellen_bintree_pool::internal_node_counter::reset();
+    }
+    namespace ellen_bintree_check {
+        static inline void check_stat( cds::intrusive::ellen_bintree::empty_stat const& /*s*/ )
+        {
+            // This check is not valid for thread-based RCU
+            /*
+            CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get(),
+                "m_nAlloc=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
+                << ", m_nFree=" << ellen_bintree_pool::internal_node_counter::m_nFree.get()
+                );
+            */
+        }
+
+        static inline void check_stat( cds::intrusive::ellen_bintree::stat<> const& stat )
+        {
+            EXPECT_EQ( stat.m_nInternalNodeCreated, stat.m_nInternalNodeDeleted );
+            EXPECT_EQ( stat.m_nUpdateDescCreated, stat.m_nUpdateDescDeleted );
+            EXPECT_EQ( ellen_bintree_pool::internal_node_counter::m_nAlloc.get(), stat.m_nInternalNodeCreated );
+        }
+    }   // namespace ellen_bintree_check
+    template <typename GC, typename Key, typename T, typename Traits>
+    static inline void additional_check( EllenBinTreeMap<GC, Key, T, Traits>& m )
+    {
+        GC::force_dispose();
+        ellen_bintree_check::check_stat( m.statistics() );
+    }
+
+    template <typename GC, typename Key, typename T, typename Traits>
+    static inline void check_before_cleanup( EllenBinTreeMap<GC, Key, T, Traits>& m )
+    {
+        EXPECT_TRUE( m.check_consistency() );
+    }
+}   // namespace map
+
+
+#define CDSSTRESS_EllenBinTreeMap_case( fixture, test_case, ellen_map_type, key_type, value_type ) \
+    TEST_F( fixture, ellen_map_type ) \
+    { \
+        typedef map::map_type< tag_EllenBinTreeMap, key_type, value_type >::ellen_map_type map_type; \
+        test_case<map_type>(); \
+    }
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+#   define CDSSTRESS_EllenBinTreeMap_SHRCU( fixture, test_case, key_type, value_type ) \
+        CDSSTRESS_EllenBinTreeMap_case( fixture, test_case, EllenBinTreeMap_rcu_shb,        key_type, value_type ) \
+        CDSSTRESS_EllenBinTreeMap_case( fixture, test_case, EllenBinTreeMap_rcu_sht,        key_type, value_type ) \
+        CDSSTRESS_EllenBinTreeMap_case( fixture, test_case, EllenBinTreeMap_rcu_shb_stat,   key_type, value_type ) \
+        CDSSTRESS_EllenBinTreeMap_case( fixture, test_case, EllenBinTreeMap_rcu_sht_stat,   key_type, value_type )
+#else
+#   define CDSSTRESS_EllenBinTreeMap_SHRCU( fixture, test_case, key_type, value_type )
+#endif
+
+#define CDSSTRESS_EllenBinTreeMap( fixture, test_case, key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeMap_case( fixture, test_case, EllenBinTreeMap_hp,             key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeMap_case( fixture, test_case, EllenBinTreeMap_dhp,            key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeMap_case( fixture, test_case, EllenBinTreeMap_rcu_gpi,        key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeMap_case( fixture, test_case, EllenBinTreeMap_rcu_gpb,        key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeMap_case( fixture, test_case, EllenBinTreeMap_rcu_gpt,        key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeMap_case( fixture, test_case, EllenBinTreeMap_hp_yield,       key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeMap_case( fixture, test_case, EllenBinTreeMap_dhp_yield,      key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeMap_case( fixture, test_case, EllenBinTreeMap_rcu_gpb_yield,  key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeMap_case( fixture, test_case, EllenBinTreeMap_hp_stat,        key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeMap_case( fixture, test_case, EllenBinTreeMap_dhp_stat,       key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeMap_case( fixture, test_case, EllenBinTreeMap_rcu_gpi_stat,   key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeMap_case( fixture, test_case, EllenBinTreeMap_rcu_gpb_stat,   key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeMap_case( fixture, test_case, EllenBinTreeMap_rcu_gpt_stat,   key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeMap_SHRCU( fixture, test_case, key_type, value_type )
+
+#endif // ifndef CDSUNIT_MAP_TYPE_ELLEN_BINTREE_H
diff --git a/test/stress/map/map_type_feldman_hashmap.h b/test/stress/map/map_type_feldman_hashmap.h
new file mode 100644 (file)
index 0000000..1cafd83
--- /dev/null
@@ -0,0 +1,312 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_MAP_TYPE_FELDMAN_HASHMAP_H
+#define CDSUNIT_MAP_TYPE_FELDMAN_HASHMAP_H
+
+#include "map_type.h"
+
+#include <cds/container/feldman_hashmap_hp.h>
+#include <cds/container/feldman_hashmap_dhp.h>
+#include <cds/container/feldman_hashmap_rcu.h>
+
+#include <cds_test/stat_feldman_hashset_out.h>
+#include <cds_test/hash_func.h>
+
+namespace map {
+
+    template <class GC, typename Key, typename T, typename Traits = cc::feldman_hashmap::traits>
+    class FeldmanHashMap : public cc::FeldmanHashMap< GC, Key, T, Traits >
+    {
+        typedef cc::FeldmanHashMap< GC, Key, T, Traits > base_class;
+    public:
+        template <typename Config>
+        FeldmanHashMap( Config const& cfg)
+            : base_class( cfg.s_nFeldmanMap_HeadBits, cfg.s_nFeldmanMap_ArrayBits )
+        {}
+
+        // 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_FeldmanHashMap;
+
+    template <typename Key, typename Value>
+    struct map_type< tag_FeldmanHashMap, Key, Value >: public map_type_base< Key, Value >
+    {
+        typedef map_type_base< Key, Value >      base_class;
+        typedef typename base_class::key_compare compare;
+        typedef typename base_class::key_less    less;
+
+        struct traits_FeldmanHashMap_stdhash : public cc::feldman_hashmap::traits
+        {
+            typedef std::hash< Key > hash;
+        };
+
+        typedef FeldmanHashMap< cds::gc::HP,  Key, Value, traits_FeldmanHashMap_stdhash >    FeldmanHashMap_hp_stdhash;
+        typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_stdhash >    FeldmanHashMap_dhp_stdhash;
+        typedef FeldmanHashMap< rcu_gpi, Key, Value, traits_FeldmanHashMap_stdhash >    FeldmanHashMap_rcu_gpi_stdhash;
+        typedef FeldmanHashMap< rcu_gpb, Key, Value, traits_FeldmanHashMap_stdhash >    FeldmanHashMap_rcu_gpb_stdhash;
+        typedef FeldmanHashMap< rcu_gpt, Key, Value, traits_FeldmanHashMap_stdhash >    FeldmanHashMap_rcu_gpt_stdhash;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_stdhash >    FeldmanHashMap_rcu_shb_stdhash;
+        typedef FeldmanHashMap< rcu_sht, Key, Value, traits_FeldmanHashMap_stdhash >    FeldmanHashMap_rcu_sht_stdhash;
+#endif
+
+        struct traits_FeldmanHashMap_stdhash_stat: traits_FeldmanHashMap_stdhash
+        {
+            typedef cc::feldman_hashmap::stat<> stat;
+        };
+
+        typedef FeldmanHashMap< cds::gc::HP,  Key, Value, traits_FeldmanHashMap_stdhash_stat >    FeldmanHashMap_hp_stdhash_stat;
+        typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_stdhash_stat >    FeldmanHashMap_dhp_stdhash_stat;
+        typedef FeldmanHashMap< rcu_gpi, Key, Value, traits_FeldmanHashMap_stdhash_stat >    FeldmanHashMap_rcu_gpi_stdhash_stat;
+        typedef FeldmanHashMap< rcu_gpb, Key, Value, traits_FeldmanHashMap_stdhash_stat >    FeldmanHashMap_rcu_gpb_stdhash_stat;
+        typedef FeldmanHashMap< rcu_gpt, Key, Value, traits_FeldmanHashMap_stdhash_stat >    FeldmanHashMap_rcu_gpt_stdhash_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_stdhash_stat >    FeldmanHashMap_rcu_shb_stdhash_stat;
+        typedef FeldmanHashMap< rcu_sht, Key, Value, traits_FeldmanHashMap_stdhash_stat >    FeldmanHashMap_rcu_sht_stdhash_stat;
+#endif
+
+        // CityHash
+#if CDS_BUILD_BITS == 64
+        struct traits_FeldmanHashMap_city64 : public cc::feldman_hashmap::traits
+        {
+            typedef ::cds_test::city64 hash;
+            typedef ::cds_test::city64::less less;
+        };
+        typedef FeldmanHashMap< cds::gc::HP,  Key, Value, traits_FeldmanHashMap_city64 >    FeldmanHashMap_hp_city64;
+        typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_city64 >    FeldmanHashMap_dhp_city64;
+        typedef FeldmanHashMap< rcu_gpi, Key, Value, traits_FeldmanHashMap_city64 >    FeldmanHashMap_rcu_gpi_city64;
+        typedef FeldmanHashMap< rcu_gpb, Key, Value, traits_FeldmanHashMap_city64 >    FeldmanHashMap_rcu_gpb_city64;
+        typedef FeldmanHashMap< rcu_gpt, Key, Value, traits_FeldmanHashMap_city64 >    FeldmanHashMap_rcu_gpt_city64;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_city64 >    FeldmanHashMap_rcu_shb_city64;
+        typedef FeldmanHashMap< rcu_sht, Key, Value, traits_FeldmanHashMap_city64 >    FeldmanHashMap_rcu_sht_city64;
+#endif
+
+        struct traits_FeldmanHashMap_city64_stat : public traits_FeldmanHashMap_city64
+        {
+            typedef cc::feldman_hashmap::stat<> stat;
+        };
+        typedef FeldmanHashMap< cds::gc::HP,  Key, Value, traits_FeldmanHashMap_city64_stat >    FeldmanHashMap_hp_city64_stat;
+        typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_city64_stat >    FeldmanHashMap_dhp_city64_stat;
+        typedef FeldmanHashMap< rcu_gpi, Key, Value, traits_FeldmanHashMap_city64_stat >    FeldmanHashMap_rcu_gpi_city64_stat;
+        typedef FeldmanHashMap< rcu_gpb, Key, Value, traits_FeldmanHashMap_city64_stat >    FeldmanHashMap_rcu_gpb_city64_stat;
+        typedef FeldmanHashMap< rcu_gpt, Key, Value, traits_FeldmanHashMap_city64_stat >    FeldmanHashMap_rcu_gpt_city64_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_city64_stat >    FeldmanHashMap_rcu_shb_city64_stat;
+        typedef FeldmanHashMap< rcu_sht, Key, Value, traits_FeldmanHashMap_city64_stat >    FeldmanHashMap_rcu_sht_city64_stat;
+#endif
+
+        struct traits_FeldmanHashMap_city128 : public cc::feldman_hashmap::traits
+        {
+            typedef ::cds_test::city128 hash;
+            typedef ::cds_test::city128::less less;
+        };
+        typedef FeldmanHashMap< cds::gc::HP,  Key, Value, traits_FeldmanHashMap_city128 >    FeldmanHashMap_hp_city128;
+        typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_city128 >    FeldmanHashMap_dhp_city128;
+        typedef FeldmanHashMap< rcu_gpi, Key, Value, traits_FeldmanHashMap_city128 >    FeldmanHashMap_rcu_gpi_city128;
+        typedef FeldmanHashMap< rcu_gpb, Key, Value, traits_FeldmanHashMap_city128 >    FeldmanHashMap_rcu_gpb_city128;
+        typedef FeldmanHashMap< rcu_gpt, Key, Value, traits_FeldmanHashMap_city128 >    FeldmanHashMap_rcu_gpt_city128;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_city128 >    FeldmanHashMap_rcu_shb_city128;
+        typedef FeldmanHashMap< rcu_sht, Key, Value, traits_FeldmanHashMap_city128 >    FeldmanHashMap_rcu_sht_city128;
+#endif
+
+        struct traits_FeldmanHashMap_city128_stat : public traits_FeldmanHashMap_city128
+        {
+            typedef cc::feldman_hashmap::stat<> stat;
+        };
+        typedef FeldmanHashMap< cds::gc::HP,  Key, Value, traits_FeldmanHashMap_city128_stat >    FeldmanHashMap_hp_city128_stat;
+        typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_city128_stat >    FeldmanHashMap_dhp_city128_stat;
+        typedef FeldmanHashMap< rcu_gpi, Key, Value, traits_FeldmanHashMap_city128_stat >    FeldmanHashMap_rcu_gpi_city128_stat;
+        typedef FeldmanHashMap< rcu_gpb, Key, Value, traits_FeldmanHashMap_city128_stat >    FeldmanHashMap_rcu_gpb_city128_stat;
+        typedef FeldmanHashMap< rcu_gpt, Key, Value, traits_FeldmanHashMap_city128_stat >    FeldmanHashMap_rcu_gpt_city128_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_city128_stat >    FeldmanHashMap_rcu_shb_city128_stat;
+        typedef FeldmanHashMap< rcu_sht, Key, Value, traits_FeldmanHashMap_city128_stat >    FeldmanHashMap_rcu_sht_city128_stat;
+#endif
+#endif // CDS_BUILD_BITS == 64
+
+
+        // for fixed-sized keys - no hash functor required
+        typedef FeldmanHashMap< cds::gc::HP, Key, Value >    FeldmanHashMap_hp_fixed;
+        typedef FeldmanHashMap< cds::gc::DHP, Key, Value >   FeldmanHashMap_dhp_fixed;
+        typedef FeldmanHashMap< rcu_gpi, Key, Value >    FeldmanHashMap_rcu_gpi_fixed;
+        typedef FeldmanHashMap< rcu_gpb, Key, Value >    FeldmanHashMap_rcu_gpb_fixed;
+        typedef FeldmanHashMap< rcu_gpt, Key, Value >    FeldmanHashMap_rcu_gpt_fixed;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef FeldmanHashMap< rcu_shb, Key, Value >    FeldmanHashMap_rcu_shb_fixed;
+        typedef FeldmanHashMap< rcu_sht, Key, Value >    FeldmanHashMap_rcu_sht_fixed;
+#endif
+
+        struct traits_FeldmanHashMap_stat : public cc::feldman_hashmap::traits
+        {
+            typedef cc::feldman_hashmap::stat<> stat;
+        };
+        typedef FeldmanHashMap< cds::gc::HP, Key, Value, traits_FeldmanHashMap_stat >    FeldmanHashMap_hp_fixed_stat;
+        typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_stat >   FeldmanHashMap_dhp_fixed_stat;
+        typedef FeldmanHashMap< rcu_gpi, Key, Value, traits_FeldmanHashMap_stat >    FeldmanHashMap_rcu_gpi_fixed_stat;
+        typedef FeldmanHashMap< rcu_gpb, Key, Value, traits_FeldmanHashMap_stat >    FeldmanHashMap_rcu_gpb_fixed_stat;
+        typedef FeldmanHashMap< rcu_gpt, Key, Value, traits_FeldmanHashMap_stat >    FeldmanHashMap_rcu_gpt_fixed_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_stat >    FeldmanHashMap_rcu_shb_fixed_stat;
+        typedef FeldmanHashMap< rcu_sht, Key, Value, traits_FeldmanHashMap_stat >    FeldmanHashMap_rcu_sht_fixed_stat;
+#endif
+
+    };
+
+    template <typename GC, typename K, typename T, typename Traits >
+    static inline void print_stat( cds_test::property_stream& o, FeldmanHashMap< GC, K, T, Traits > const& m )
+    {
+        std::vector< cds::intrusive::feldman_hashset::level_statistics > level_stat;
+        m.get_level_statistics( level_stat );
+
+        o << m.statistics()
+          << level_stat;
+    }
+
+#define CDSSTRESS_FeldmanHashMap_case( fixture, test_case, feldman_map_type, key_type, value_type ) \
+    TEST_F( fixture, feldman_map_type ) \
+    { \
+        typedef map::map_type< tag_FeldmanHashMap, key_type, value_type >::feldman_map_type map_type; \
+        test_case<map_type>(); \
+    }
+
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+#   define CDSSTRESS_FeldmanHashMap_fixed_SHRCU( fixture, test_case, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_shb_fixed, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_sht_fixed, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_shb_fixed_stat, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_sht_fixed_stat, key_type, value_type ) \
+
+#   define CDSSTRESS_FeldmanHashMap_stdhash_SHRCU( fixture, test_case, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_shb_stdhash, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_sht_stdhash, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_shb_stdhash_stat, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_sht_stdhash_stat, key_type, value_type ) \
+
+#   if CDS_BUILD_BITS == 64
+#       define CDSSTRESS_FeldmanHashMap_city64_SHRCU( fixture, test_case, key_type, value_type ) \
+            CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_shb_city64, key_type, value_type ) \
+            CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_sht_city64, key_type, value_type ) \
+            CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_shb_city64_stat, key_type, value_type ) \
+            CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_sht_city64_stat, key_type, value_type ) \
+
+#       define CDSSTRESS_FeldmanHashMap_city128_SHRCU( fixture, test_case, key_type, value_type ) \
+            CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_shb_city64, key_type, value_type ) \
+            CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_sht_city64, key_type, value_type ) \
+            CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_shb_city64_stat, key_type, value_type ) \
+            CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_sht_city64_stat, key_type, value_type ) \
+
+#   else
+#       define CDSSTRESS_FeldmanHashMap_city64_SHRCU( fixture, test_case, key_type, value_type )
+#       define CDSSTRESS_FeldmanHashMap_city128_SHRCU( fixture, test_case, key_type, value_type )
+#   endif
+
+#else
+#   define CDSSTRESS_FeldmanHashMap_fixed_SHRCU( fixture, test_case, key_type, value_type )
+#   define CDSSTRESS_FeldmanHashMap_stdhash_SHRCU( fixture, test_case, key_type, value_type )
+#   define CDSSTRESS_FeldmanHashMap_city64_SHRCU( fixture, test_case, key_type, value_type )
+#   define CDSSTRESS_FeldmanHashMap_city128_SHRCU( fixture, test_case, key_type, value_type )
+#endif
+
+#define CDSSTRESS_FeldmanHashMap_fixed( fixture, test_case, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_hp_fixed, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_dhp_fixed, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpi_fixed, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpb_fixed, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpt_fixed, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_hp_fixed_stat, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_dhp_fixed_stat, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpi_fixed_stat, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpb_fixed_stat, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpt_fixed_stat, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashMap_fixed_SHRCU( fixture, test_case, key_type, value_type )
+
+#define CDSSTRESS_FeldmanHashMap_stdhash( fixture, test_case, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_hp_stdhash, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_dhp_stdhash, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpi_stdhash, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpb_stdhash, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpt_stdhash, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_hp_stdhash_stat, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_dhp_stdhash_stat, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpi_stdhash_stat, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpb_stdhash_stat, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpt_stdhash_stat, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashMap_stdhash_SHRCU( fixture, test_case, key_type, value_type )
+
+
+#if CDS_BUILD_BITS == 64
+#   define CDSSTRESS_FeldmanHashMap_city64( fixture, test_case, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_hp_city64, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_dhp_city64, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpi_city64, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpb_city64, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpt_city64, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_hp_city64_stat, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_dhp_city64_stat, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpi_city64_stat, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpb_city64_stat, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpt_city64_stat, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_city64_SHRCU( fixture, test_case, key_type, value_type )
+
+#   define CDSSTRESS_FeldmanHashMap_city128( fixture, test_case, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_hp_city128, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_dhp_city128, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpi_city128, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpb_city128, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpt_city128, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_hp_city128_stat, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_dhp_city128_stat, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpi_city128_stat, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpb_city128_stat, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpt_city128_stat, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_city128_SHRCU( fixture, test_case, key_type, value_type )
+
+#   define CDSSTRESS_FeldmanHashMap_city( fixture, test_case, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_city64( fixture, test_case, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashMap_city128( fixture, test_case, key_type, value_type )
+
+#else
+#   define CDSSTRESS_FeldmanHashMap_city64( fixture, test_case, key_type, value_type )
+#   define CDSSTRESS_FeldmanHashMap_city128( fixture, test_case, key_type, value_type )
+#   define CDSSTRESS_FeldmanHashMap_city( fixture, test_case, key_type, value_type )
+#endif
+
+
+}   // namespace map
+
+#endif // #ifndef CDSUNIT_MAP_TYPE_FELDMAN_HASHMAP_H
diff --git a/test/stress/map/map_type_lazy_list.h b/test/stress/map/map_type_lazy_list.h
new file mode 100644 (file)
index 0000000..14a70f4
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_MAP_TYPE_LAZY_LIST_H
+#define CDSUNIT_MAP_TYPE_LAZY_LIST_H
+
+#include "map_type.h"
+
+#include <cds/container/lazy_kvlist_hp.h>
+#include <cds/container/lazy_kvlist_dhp.h>
+#include <cds/container/lazy_kvlist_rcu.h>
+#include <cds/container/lazy_kvlist_nogc.h>
+
+namespace map {
+
+    template <typename Key, typename Value>
+    struct lazy_list_type
+    {
+        typedef typename map_type_base<Key, Value>::key_compare compare;
+        typedef typename map_type_base<Key, Value>::key_less    less;
+        typedef typename map_type_base<Key, Value>::equal_to    equal_to;
+
+        struct traits_LazyList_cmp_stdAlloc:
+            public cc::lazy_list::make_traits<
+                co::compare< compare >
+            >::type
+        {};
+        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_HP_cmp_stdAlloc;
+        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_DHP_cmp_stdAlloc;
+        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_NOGC_cmp_stdAlloc;
+        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPI_cmp_stdAlloc;
+        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPB_cmp_stdAlloc;
+        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPT_cmp_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHB_cmp_stdAlloc;
+        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHT_cmp_stdAlloc;
+#endif
+
+        struct traits_LazyList_unord_stdAlloc :
+            public cc::lazy_list::make_traits<
+                co::equal_to< equal_to >
+                ,co::sort< false >
+            >::type
+        {};
+        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_unord_stdAlloc > LazyList_NOGC_unord_stdAlloc;
+
+        struct traits_LazyList_cmp_stdAlloc_seqcst :
+            public cc::lazy_list::make_traits<
+                co::compare< compare >
+                ,co::memory_model< co::v::sequential_consistent >
+            >::type
+        {};
+        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_HP_cmp_stdAlloc_seqcst;
+        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_DHP_cmp_stdAlloc_seqcst;
+        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_NOGC_cmp_stdAlloc_seqcst;
+        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPI_cmp_stdAlloc_seqcst;
+        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPB_cmp_stdAlloc_seqcst;
+        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPT_cmp_stdAlloc_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHB_cmp_stdAlloc_seqcst;
+        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHT_cmp_stdAlloc_seqcst;
+#endif
+
+        struct traits_LazyList_cmp_michaelAlloc :
+            public cc::lazy_list::make_traits<
+                co::compare< compare >,
+                co::allocator< memory::MichaelAllocator<int> >
+            >::type
+        {};
+        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_HP_cmp_michaelAlloc;
+        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_DHP_cmp_michaelAlloc;
+        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_NOGC_cmp_michaelAlloc;
+        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPI_cmp_michaelAlloc;
+        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPB_cmp_michaelAlloc;
+        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPT_cmp_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHB_cmp_michaelAlloc;
+        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHT_cmp_michaelAlloc;
+#endif
+        struct traits_LazyList_less_stdAlloc :
+            public cc::lazy_list::make_traits<
+                co::less< less >
+            >::type
+        {};
+        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_stdAlloc > LazyList_HP_less_stdAlloc;
+        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_stdAlloc > LazyList_DHP_less_stdAlloc;
+        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_stdAlloc > LazyList_NOGC_less_stdAlloc;
+        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPI_less_stdAlloc;
+        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPB_less_stdAlloc;
+        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPT_less_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_SHB_less_stdAlloc;
+        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_SHT_less_stdAlloc;
+#endif
+
+        struct traits_LazyList_less_stdAlloc_seqcst :
+            public cc::lazy_list::make_traits<
+                co::less< less >
+                ,co::memory_model< co::v::sequential_consistent >
+            >::type
+        {};
+        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_HP_less_stdAlloc_seqcst;
+        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_DHP_less_stdAlloc_seqcst;
+        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_NOGC_less_stdAlloc_seqcst;
+        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPI_less_stdAlloc_seqcst;
+        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPB_less_stdAlloc_seqcst;
+        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPT_less_stdAlloc_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHB_less_stdAlloc_seqcst;
+        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHT_less_stdAlloc_seqcst;
+#endif
+
+        struct traits_LazyList_less_michaelAlloc :
+            public cc::lazy_list::make_traits<
+                co::less< less >,
+                co::allocator< memory::MichaelAllocator<int> >
+            >::type
+        {};
+        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_HP_less_michaelAlloc;
+        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_DHP_less_michaelAlloc;
+        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_NOGC_less_michaelAlloc;
+        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPI_less_michaelAlloc;
+        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPB_less_michaelAlloc;
+        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPT_less_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHB_less_michaelAlloc;
+        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHT_less_michaelAlloc;
+#endif
+    };
+
+} // namespace map
+
+#endif // ifndef CDSUNIT_MAP_TYPE_LAZY_LIST_H
diff --git a/test/stress/map/map_type_michael.h b/test/stress/map/map_type_michael.h
new file mode 100644 (file)
index 0000000..a5a1c0c
--- /dev/null
@@ -0,0 +1,341 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_MAP_TYPE_MICHAEL_H
+#define CDSUNIT_MAP_TYPE_MICHAEL_H
+
+#include "map_type_michael_list.h"
+#include "map_type_lazy_list.h"
+
+#include <cds/container/michael_map.h>
+#include <cds/container/michael_map_rcu.h>
+#include <cds/container/michael_map_nogc.h>
+
+namespace map {
+
+    template <class GC, typename List, typename Traits = cc::michael_map::traits>
+    class MichaelHashMap : public cc::MichaelHashMap< GC, List, Traits >
+    {
+        typedef cc::MichaelHashMap< GC, List, Traits > base_class;
+    public:
+        template <typename Config>
+        MichaelHashMap( Config const& cfg)
+            : base_class( cfg.s_nMapSize, cfg.s_nLoadFactor )
+        {}
+
+        // 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;
+
+    template <typename Key, typename Value>
+    struct map_type< tag_MichaelHashMap, Key, Value >: public map_type_base< Key, Value >
+    {
+        typedef map_type_base< Key, Value > base_class;
+        typedef typename base_class::key_compare compare;
+        typedef typename base_class::key_less    less;
+        typedef typename base_class::equal_to    equal_to;
+        typedef typename base_class::key_hash    hash;
+
+
+        // ***************************************************************************
+        // MichaelHashMap based on MichaelKVList
+        typedef michael_list_type< Key, Value > ml;
+
+        struct traits_MichaelMap_hash :
+            public cc::michael_map::make_traits<
+                co::hash< hash >
+            >::type
+        {};
+        typedef MichaelHashMap< cds::gc::HP,  typename ml::MichaelList_HP_cmp_stdAlloc,  traits_MichaelMap_hash > MichaelMap_HP_cmp_stdAlloc;
+        typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_DHP_cmp_stdAlloc;
+        typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_NOGC_cmp_stdAlloc;
+        typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPI_cmp_stdAlloc;
+        typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPB_cmp_stdAlloc;
+        typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPT_cmp_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHB_cmp_stdAlloc;
+        typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHT_cmp_stdAlloc;
+#endif
+
+        typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_HP_less_stdAlloc;
+        typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_DHP_less_stdAlloc;
+        typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_NOGC_less_stdAlloc;
+        typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPI_less_stdAlloc;
+        typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPB_less_stdAlloc;
+        typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPT_less_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHB_less_stdAlloc;
+        typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHT_less_stdAlloc;
+#endif
+
+        typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_HP_cmp_stdAlloc_seqcst;
+        typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_DHP_cmp_stdAlloc_seqcst;
+        typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_NOGC_cmp_stdAlloc_seqcst;
+        typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPI_cmp_stdAlloc_seqcst;
+        typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPB_cmp_stdAlloc_seqcst;
+        typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPT_cmp_stdAlloc_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHB_cmp_stdAlloc_seqcst;
+        typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHT_cmp_stdAlloc_seqcst;
+#endif
+
+        typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_HP_less_stdAlloc_seqcst;
+        typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_DHP_less_stdAlloc_seqcst;
+        typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_NOGC_less_stdAlloc_seqcst;
+        typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPI_less_stdAlloc_seqcst;
+        typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPB_less_stdAlloc_seqcst;
+        typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPT_less_stdAlloc_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHB_less_stdAlloc_seqcst;
+        typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHT_less_stdAlloc_seqcst;
+#endif
+
+        struct traits_MichaelSet_michaelAlloc :
+            public traits_MichaelMap_hash
+        {
+            typedef memory::MichaelAllocator<int> allocator;
+        };
+        typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_HP_cmp_michaelAlloc;
+        typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_DHP_cmp_michaelAlloc;
+        typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_NOGC_cmp_michaelAlloc;
+        typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPI_cmp_michaelAlloc;
+        typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPB_cmp_michaelAlloc;
+        typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPT_cmp_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHB_cmp_michaelAlloc;
+        typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHT_cmp_michaelAlloc;
+#endif
+        typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_HP_less_michaelAlloc;
+        typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_DHP_less_michaelAlloc;
+        typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_NOGC_less_michaelAlloc;
+        typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPI_less_michaelAlloc;
+        typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPB_less_michaelAlloc;
+        typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPT_less_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHB_less_michaelAlloc;
+        typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHT_less_michaelAlloc;
+#endif
+
+
+        // ***************************************************************************
+        // MichaelHashMap based on LazyKVList
+        typedef lazy_list_type< Key, Value > ll;
+
+        typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_HP_cmp_stdAlloc;
+        typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_cmp_stdAlloc;
+        typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_cmp_stdAlloc;
+        typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc;
+        typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc;
+        typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc;
+        typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc;
+#endif
+
+        typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_unord_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_unord_stdAlloc;
+
+        typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_HP_less_stdAlloc;
+        typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_less_stdAlloc;
+        typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_less_stdAlloc;
+        typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_less_stdAlloc;
+        typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_less_stdAlloc;
+        typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_less_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_less_stdAlloc;
+        typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_less_stdAlloc;
+#endif
+
+        typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_HP_cmp_stdAlloc_seqcst;
+        typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_cmp_stdAlloc_seqcst;
+        typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_cmp_stdAlloc_seqcst;
+        typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc_seqcst;
+        typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc_seqcst;
+        typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc_seqcst;
+        typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc_seqcst;
+#endif
+
+        typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_HP_less_stdAlloc_seqcst;
+        typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_less_stdAlloc_seqcst;
+        typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_less_stdAlloc_seqcst;
+        typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_less_stdAlloc_seqcst;
+        typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_less_stdAlloc_seqcst;
+        typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_less_stdAlloc_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_less_stdAlloc_seqcst;
+        typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_less_stdAlloc_seqcst;
+#endif
+
+        typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_HP_cmp_michaelAlloc;
+        typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_DHP_cmp_michaelAlloc;
+        typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_NOGC_cmp_michaelAlloc;
+        typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPI_cmp_michaelAlloc;
+        typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPB_cmp_michaelAlloc;
+        typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPT_cmp_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHB_cmp_michaelAlloc;
+        typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHT_cmp_michaelAlloc;
+#endif
+        typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_HP_less_michaelAlloc;
+        typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_DHP_less_michaelAlloc;
+        typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_NOGC_less_michaelAlloc;
+        typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPI_less_michaelAlloc;
+        typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPB_less_michaelAlloc;
+        typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPT_less_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHB_less_michaelAlloc;
+        typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHT_less_michaelAlloc;
+#endif
+
+    };
+}   // namespace map
+
+#define CDSSTRESS_MichaelMap_case( fixture, test_case, michael_map_type, key_type, value_type ) \
+    TEST_P( fixture, michael_map_type ) \
+    { \
+        typedef map::map_type< tag_MichaelHashMap, key_type, value_type >::michael_map_type map_type; \
+        test_case<map_type>(); \
+    }
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+#   define CDSSTRESS_MichaelMap_SHRCU( fixture, test_case, key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHB_cmp_stdAlloc,              key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHT_cmp_stdAlloc,              key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHB_less_stdAlloc,             key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHT_less_stdAlloc,             key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHB_cmp_stdAlloc_seqcst,       key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHT_cmp_stdAlloc_seqcst,       key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHB_less_stdAlloc_seqcst,      key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHT_less_stdAlloc_seqcst,      key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHB_cmp_michaelAlloc,          key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHT_cmp_michaelAlloc,          key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHB_less_michaelAlloc,         key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHT_less_michaelAlloc,         key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc,         key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc,         key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHB_less_stdAlloc,        key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHT_less_stdAlloc,        key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc_seqcst,  key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc_seqcst,  key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHB_less_stdAlloc_seqcst, key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHT_less_stdAlloc_seqcst, key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHB_cmp_michaelAlloc,     key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHT_cmp_michaelAlloc,     key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHB_less_michaelAlloc,    key_type, value_type ) \
+        CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHT_less_michaelAlloc,    key_type, value_type ) 
+#else
+#   define CDSSTRESS_MichaelMap_SHRCU( fixture, test_case, key_type, value_type )
+#endif
+
+#define CDSSTRESS_MichaelMap( fixture, test_case, key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_HP_cmp_stdAlloc,                      key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_DHP_cmp_stdAlloc,                     key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPI_cmp_stdAlloc,                 key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPB_cmp_stdAlloc,                 key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPT_cmp_stdAlloc,                 key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_HP_less_stdAlloc,                     key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_DHP_less_stdAlloc,                    key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPI_less_stdAlloc,                key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPB_less_stdAlloc,                key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPT_less_stdAlloc,                key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_HP_cmp_stdAlloc_seqcst,               key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_DHP_cmp_stdAlloc_seqcst,              key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPI_cmp_stdAlloc_seqcst,          key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPB_cmp_stdAlloc_seqcst,          key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPT_cmp_stdAlloc_seqcst,          key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_HP_less_stdAlloc_seqcst,              key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_DHP_less_stdAlloc_seqcst,             key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPI_less_stdAlloc_seqcst,         key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPB_less_stdAlloc_seqcst,         key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPT_less_stdAlloc_seqcst,         key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_HP_cmp_michaelAlloc,                  key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_DHP_cmp_michaelAlloc,                 key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPI_cmp_michaelAlloc,             key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPB_cmp_michaelAlloc,             key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPT_cmp_michaelAlloc,             key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_HP_less_michaelAlloc,                 key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_DHP_less_michaelAlloc,                key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPI_less_michaelAlloc,            key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPB_less_michaelAlloc,            key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPT_less_michaelAlloc,            key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_HP_cmp_stdAlloc,                 key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_DHP_cmp_stdAlloc,                key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc,            key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc,            key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc,            key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_HP_less_stdAlloc,                key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_DHP_less_stdAlloc,               key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPI_less_stdAlloc,           key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPB_less_stdAlloc,           key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPT_less_stdAlloc,           key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_HP_cmp_stdAlloc_seqcst,          key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_DHP_cmp_stdAlloc_seqcst,         key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc_seqcst,     key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc_seqcst,     key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc_seqcst,     key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_HP_less_stdAlloc_seqcst,         key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_DHP_less_stdAlloc_seqcst,        key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPI_less_stdAlloc_seqcst,    key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPB_less_stdAlloc_seqcst,    key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPT_less_stdAlloc_seqcst,    key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_HP_cmp_michaelAlloc,             key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_DHP_cmp_michaelAlloc,            key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPI_cmp_michaelAlloc,        key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPB_cmp_michaelAlloc,        key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPT_cmp_michaelAlloc,        key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_HP_less_michaelAlloc,            key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_DHP_less_michaelAlloc,           key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPI_less_michaelAlloc,       key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPB_less_michaelAlloc,       key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPT_less_michaelAlloc,       key_type, value_type ) \
+    CDSSTRESS_MichaelMap_SHRCU( fixture, test_case, key_type, value_type )
+
+#define CDSSTRESS_MichaelMap_nogc( fixture, test_case, key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_NOGC_cmp_stdAlloc,                    key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_NOGC_less_stdAlloc,                   key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_NOGC_cmp_stdAlloc_seqcst,             key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_NOGC_less_stdAlloc_seqcst,            key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_NOGC_cmp_michaelAlloc,                key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_NOGC_less_michaelAlloc,               key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_NOGC_cmp_stdAlloc,               key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_NOGC_unord_stdAlloc,             key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_NOGC_less_stdAlloc,              key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_NOGC_cmp_stdAlloc_seqcst,        key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_NOGC_less_stdAlloc_seqcst,       key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_NOGC_cmp_michaelAlloc,           key_type, value_type ) \
+    CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_NOGC_less_michaelAlloc,          key_type, value_type ) \
+
+
+#endif // ifndef CDSUNIT_MAP_TYPE_MICHAEL_H
diff --git a/test/stress/map/map_type_michael_list.h b/test/stress/map/map_type_michael_list.h
new file mode 100644 (file)
index 0000000..e223ce9
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_MAP_TYPE_MICHAEL_LIST_H
+#define CDSUNIT_MAP_TYPE_MICHAEL_LIST_H
+
+#include "map_type.h"
+
+#include <cds/container/michael_kvlist_hp.h>
+#include <cds/container/michael_kvlist_dhp.h>
+#include <cds/container/michael_kvlist_rcu.h>
+#include <cds/container/michael_kvlist_nogc.h>
+
+namespace map {
+
+    template <typename Key, typename Value>
+    struct michael_list_type
+    {
+        typedef typename map_type_base<Key, Value>::key_compare compare;
+        typedef typename map_type_base<Key, Value>::key_less    less;
+
+        struct traits_MichaelList_cmp_stdAlloc :
+            public cc::michael_list::make_traits<
+                co::compare< compare >
+            >::type
+        {};
+        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_HP_cmp_stdAlloc;
+        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_DHP_cmp_stdAlloc;
+        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_NOGC_cmp_stdAlloc;
+        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPI_cmp_stdAlloc;
+        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPB_cmp_stdAlloc;
+        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPT_cmp_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHB_cmp_stdAlloc;
+        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHT_cmp_stdAlloc;
+#endif
+
+        struct traits_MichaelList_cmp_stdAlloc_seqcst :
+            public cc::michael_list::make_traits<
+                co::compare< compare >
+                ,co::memory_model< co::v::sequential_consistent >
+            >::type
+        {};
+        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_HP_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_DHP_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_NOGC_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPI_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPB_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPT_cmp_stdAlloc_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHB_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHT_cmp_stdAlloc_seqcst;
+#endif
+
+        struct traits_MichaelList_cmp_michaelAlloc :
+            public cc::michael_list::make_traits<
+                co::compare< compare >,
+                co::allocator< memory::MichaelAllocator<int> >
+            >::type
+        {};
+        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_HP_cmp_michaelAlloc;
+        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_DHP_cmp_michaelAlloc;
+        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_NOGC_cmp_michaelAlloc;
+        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPI_cmp_michaelAlloc;
+        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPB_cmp_michaelAlloc;
+        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPT_cmp_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHB_cmp_michaelAlloc;
+        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHT_cmp_michaelAlloc;
+#endif
+
+        struct traits_MichaelList_less_stdAlloc :
+            public cc::michael_list::make_traits<
+                co::less< less >
+            >::type
+        {};
+        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_HP_less_stdAlloc;
+        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_DHP_less_stdAlloc;
+        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_NOGC_less_stdAlloc;
+        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPI_less_stdAlloc;
+        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPB_less_stdAlloc;
+        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPT_less_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHB_less_stdAlloc;
+        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHT_less_stdAlloc;
+#endif
+
+        struct traits_MichaelList_less_stdAlloc_seqcst :
+            public cc::michael_list::make_traits<
+                co::less< less >
+                ,co::memory_model< co::v::sequential_consistent >
+            >::type
+        {};
+        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_HP_less_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_DHP_less_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_NOGC_less_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPI_less_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPB_less_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPT_less_stdAlloc_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHB_less_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHT_less_stdAlloc_seqcst;
+#endif
+
+        struct traits_MichaelList_less_michaelAlloc :
+            public cc::michael_list::make_traits<
+                co::less< less >,
+                co::allocator< memory::MichaelAllocator<int> >
+            >::type
+        {};
+        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_HP_less_michaelAlloc;
+        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_DHP_less_michaelAlloc;
+        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_NOGC_less_michaelAlloc;
+        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPI_less_michaelAlloc;
+        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPB_less_michaelAlloc;
+        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPT_less_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHB_less_michaelAlloc;
+        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHT_less_michaelAlloc;
+#endif
+    };
+
+} // namespace map
+
+#endif // ifndef CDSUNIT_MAP_TYPE_MICHAEL_LIST_H
diff --git a/test/stress/map/map_type_skip_list.h b/test/stress/map/map_type_skip_list.h
new file mode 100644 (file)
index 0000000..959cfe2
--- /dev/null
@@ -0,0 +1,330 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_MAP_TYPE_SKIP_LIST_H
+#define CDSUNIT_MAP_TYPE_SKIP_LIST_H
+
+#include "map_type.h"
+
+#include <cds/container/skip_list_map_hp.h>
+#include <cds/container/skip_list_map_dhp.h>
+#include <cds/container/skip_list_map_rcu.h>
+#include <cds/container/skip_list_map_nogc.h>
+
+#include <cds_test/stat_skiplist_out.h>
+
+namespace map {
+
+    template <class GC, typename Key, typename T, typename Traits = cc::skip_list::traits >
+    class SkipListMap : public cc::SkipListMap< GC, Key, T, Traits >
+    {
+        typedef cc::SkipListMap< GC, Key, T, Traits > base_class;
+    public:
+        template <typename Config>
+        SkipListMap( Config const& /*cfg*/)
+            : base_class()
+        {}
+
+        // 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;
+
+    template <typename Key, typename Value>
+    struct map_type< tag_SkipListMap, Key, Value >: public map_type_base< Key, Value >
+    {
+        typedef map_type_base< Key, Value >      base_class;
+        typedef typename base_class::key_compare compare;
+        typedef typename base_class::key_less    less;
+
+        class traits_SkipListMap_less_pascal: public cc::skip_list::make_traits <
+                co::less< less >
+                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_hp_less_pascal;
+        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_dhp_less_pascal;
+        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_nogc_less_pascal;
+        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpi_less_pascal;
+        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpb_less_pascal;
+        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpt_less_pascal;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_shb_less_pascal;
+        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_sht_less_pascal;
+#endif
+
+        class traits_SkipListMap_less_pascal_seqcst: public cc::skip_list::make_traits <
+                co::less< less >
+                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_hp_less_pascal_seqcst;
+        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_dhp_less_pascal_seqcst;
+        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_nogc_less_pascal_seqcst;
+        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpi_less_pascal_seqcst;
+        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpb_less_pascal_seqcst;
+        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpt_less_pascal_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_shb_less_pascal_seqcst;
+        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_sht_less_pascal_seqcst;
+#endif
+
+        class traits_SkipListMap_less_pascal_stat: public cc::skip_list::make_traits <
+                co::less< less >
+                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
+                ,co::stat< cc::skip_list::stat<> >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_hp_less_pascal_stat;
+        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_dhp_less_pascal_stat;
+        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_nogc_less_pascal_stat;
+        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpi_less_pascal_stat;
+        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpb_less_pascal_stat;
+        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpt_less_pascal_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_shb_less_pascal_stat;
+        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_sht_less_pascal_stat;
+#endif
+
+        class traits_SkipListMap_cmp_pascal: public cc::skip_list::make_traits <
+                co::compare< compare >
+                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_hp_cmp_pascal;
+        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_dhp_cmp_pascal;
+        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_nogc_cmp_pascal;
+        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpi_cmp_pascal;
+        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpb_cmp_pascal;
+        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpt_cmp_pascal;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_shb_cmp_pascal;
+        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_sht_cmp_pascal;
+#endif
+
+        class traits_SkipListMap_cmp_pascal_stat: public cc::skip_list::make_traits <
+                co::compare< compare >
+                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
+                ,co::stat< cc::skip_list::stat<> >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_hp_cmp_pascal_stat;
+        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_dhp_cmp_pascal_stat;
+        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_nogc_cmp_pascal_stat;
+        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpi_cmp_pascal_stat;
+        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpb_cmp_pascal_stat;
+        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpt_cmp_pascal_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_shb_cmp_pascal_stat;
+        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_sht_cmp_pascal_stat;
+#endif
+
+        class traits_SkipListMap_less_xorshift: public cc::skip_list::make_traits <
+                co::less< less >
+                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_hp_less_xorshift;
+        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_dhp_less_xorshift;
+        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_nogc_less_xorshift;
+        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpi_less_xorshift;
+        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpb_less_xorshift;
+        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpt_less_xorshift;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_shb_less_xorshift;
+        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_sht_less_xorshift;
+#endif
+
+        class traits_SkipListMap_less_xorshift_stat: public cc::skip_list::make_traits <
+                co::less< less >
+                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
+                ,co::stat< cc::skip_list::stat<> >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_hp_less_xorshift_stat;
+        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_dhp_less_xorshift_stat;
+        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_nogc_less_xorshift_stat;
+        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpi_less_xorshift_stat;
+        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpb_less_xorshift_stat;
+        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpt_less_xorshift_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_shb_less_xorshift_stat;
+        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_sht_less_xorshift_stat;
+#endif
+
+        class traits_SkipListMap_cmp_xorshift: public cc::skip_list::make_traits <
+                co::compare< compare >
+                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_hp_cmp_xorshift;
+        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_dhp_cmp_xorshift;
+        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_nogc_cmp_xorshift;
+        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpi_cmp_xorshift;
+        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpb_cmp_xorshift;
+        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpt_cmp_xorshift;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_shb_cmp_xorshift;
+        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_sht_cmp_xorshift;
+#endif
+
+        class traits_SkipListMap_cmp_xorshift_stat: public cc::skip_list::make_traits <
+                co::compare< compare >
+                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
+                ,co::stat< cc::skip_list::stat<> >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_hp_cmp_xorshift_stat;
+        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_dhp_cmp_xorshift_stat;
+        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_nogc_cmp_xorshift_stat;
+        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpi_cmp_xorshift_stat;
+        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpb_cmp_xorshift_stat;
+        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpt_cmp_xorshift_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_shb_cmp_xorshift_stat;
+        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_sht_cmp_xorshift_stat;
+#endif
+
+    };
+
+    template <typename GC, typename K, typename T, typename Traits >
+    static inline void print_stat( cds_test::property_stream& o, SkipListMap< GC, K, T, Traits > const& m )
+    {
+        o << m.statistics();
+    }
+
+}   // namespace map
+
+#define CDSSTRESS_SkipListMap_case( fixture, test_case, skiplist_map_type, key_type, value_type ) \
+    TEST_F( fixture, skiplist_map_type ) \
+    { \
+        typedef map::map_type< tag_SkipListMap, key_type, value_type >::skiplist_map_type map_type; \
+        test_case<map_type>(); \
+    }
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+#   define CDSSTRESS_SkipListMap_SHRCU( fixture, test_case, key_type, value_type ) \
+        CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_shb_less_pascal,        key_type, value_type ) \
+        CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_sht_less_pascal,        key_type, value_type ) \
+        CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_shb_less_pascal_seqcst, key_type, value_type ) \
+        CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_sht_less_pascal_seqcst, key_type, value_type ) \
+        CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_shb_less_pascal_stat,   key_type, value_type ) \
+        CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_sht_less_pascal_stat,   key_type, value_type ) \
+        CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_shb_cmp_pascal,         key_type, value_type ) \
+        CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_sht_cmp_pascal,         key_type, value_type ) \
+        CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_shb_cmp_pascal_stat,    key_type, value_type ) \
+        CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_sht_cmp_pascal_stat,    key_type, value_type ) \
+        CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_shb_less_xorshift,      key_type, value_type ) \
+        CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_sht_less_xorshift,      key_type, value_type ) \
+        CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_shb_less_xorshift_stat, key_type, value_type ) \
+        CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_sht_less_xorshift_stat, key_type, value_type ) \
+        CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_shb_cmp_xorshift,       key_type, value_type ) \
+        CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_sht_cmp_xorshift,       key_type, value_type ) \
+        CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_shb_cmp_xorshift_stat,  key_type, value_type ) \
+        CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_sht_cmp_xorshift_stat,  key_type, value_type ) \
+
+#else
+#   define CDSSTRESS_SkipListMap_SHRCU( fixture, test_case, key_type, value_type )
+#endif
+
+#define CDSSTRESS_SkipListMap( fixture, test_case, key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_hp_less_pascal,             key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_dhp_less_pascal,            key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpi_less_pascal,        key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpb_less_pascal,        key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpt_less_pascal,        key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_hp_less_pascal_seqcst,      key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_dhp_less_pascal_seqcst,     key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpi_less_pascal_seqcst, key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpb_less_pascal_seqcst, key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpt_less_pascal_seqcst, key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_hp_less_pascal_stat,        key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_dhp_less_pascal_stat,       key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpi_less_pascal_stat,   key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpb_less_pascal_stat,   key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpt_less_pascal_stat,   key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_hp_cmp_pascal,              key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_dhp_cmp_pascal,             key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpi_cmp_pascal,         key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpb_cmp_pascal,         key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpt_cmp_pascal,         key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_hp_cmp_pascal_stat,         key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_dhp_cmp_pascal_stat,        key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpi_cmp_pascal_stat,    key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpb_cmp_pascal_stat,    key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpt_cmp_pascal_stat,    key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_hp_less_xorshift,           key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_dhp_less_xorshift,          key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpi_less_xorshift,      key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpb_less_xorshift,      key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpt_less_xorshift,      key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_hp_less_xorshift_stat,      key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_dhp_less_xorshift_stat,     key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpi_less_xorshift_stat, key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpb_less_xorshift_stat, key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpt_less_xorshift_stat, key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_hp_cmp_xorshift,            key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_dhp_cmp_xorshift,           key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpi_cmp_xorshift,       key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpb_cmp_xorshift,       key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpt_cmp_xorshift,       key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_hp_cmp_xorshift_stat,       key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_dhp_cmp_xorshift_stat,      key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpi_cmp_xorshift_stat,  key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpb_cmp_xorshift_stat,  key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpt_cmp_xorshift_stat,  key_type, value_type ) \
+    CDSSTRESS_SkipListMap_SHRCU( fixture, test_case, key_type, value_type )
+
+#define CDSSTRESS_SkipListMap_nogc( fixture, test_case, key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_nogc_less_pascal,           key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_nogc_less_pascal_seqcst,    key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_nogc_less_pascal_stat,      key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_nogc_cmp_pascal,            key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_nogc_cmp_pascal_stat,       key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_nogc_less_xorshift,         key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_nogc_less_xorshift_stat,    key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_nogc_cmp_xorshift,          key_type, value_type ) \
+    CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_nogc_cmp_xorshift_stat,     key_type, value_type ) \
+
+
+#endif // ifndef CDSUNIT_MAP_TYPE_SKIP_LIST_H
diff --git a/test/stress/map/map_type_split_list.h b/test/stress/map/map_type_split_list.h
new file mode 100644 (file)
index 0000000..b419e7b
--- /dev/null
@@ -0,0 +1,751 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_MAP_TYPE_SPLIT_LIST_H
+#define CDSUNIT_MAP_TYPE_SPLIT_LIST_H
+
+#include "map_type.h"
+
+#include <cds/container/michael_kvlist_hp.h>
+#include <cds/container/michael_kvlist_dhp.h>
+#include <cds/container/michael_kvlist_rcu.h>
+#include <cds/container/michael_kvlist_nogc.h>
+
+#include <cds/container/lazy_kvlist_hp.h>
+#include <cds/container/lazy_kvlist_dhp.h>
+#include <cds/container/lazy_kvlist_rcu.h>
+#include <cds/container/lazy_kvlist_nogc.h>
+
+#include <cds/container/split_list_map.h>
+#include <cds/container/split_list_map_rcu.h>
+#include <cds/container/split_list_map_nogc.h>
+
+#include <cds_test/stat_splitlist_out.h>
+
+namespace map {
+
+    template <class GC, typename Key, typename T, typename Traits = cc::split_list::traits >
+    class SplitListMap : public cc::SplitListMap< GC, Key, T, Traits >
+    {
+        typedef cc::SplitListMap< GC, Key, T, Traits > base_class;
+    public:
+        template <typename Config>
+        SplitListMap( Config const& cfg)
+            : base_class( cfg.s_nMapSize, cfg.s_nLoadFactor )
+        {}
+
+        // 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 <typename Key, typename T, typename Traits >
+    class SplitListMap< cds::gc::nogc, Key, T, Traits> : public cc::SplitListMap< cds::gc::nogc, Key, T, Traits >
+    {
+        typedef cc::SplitListMap< cds::gc::nogc, Key, T, Traits > base_class;
+    public:
+        template <typename Config>
+        SplitListMap( Config const& cfg)
+            : base_class( cfg.s_nMapSize, cfg.s_nLoadFactor )
+        {}
+
+        template <typename K>
+        bool insert( K const& key )
+        {
+            return base_class::insert( key ) != base_class::end();
+        }
+
+        template <typename K, typename V>
+        bool insert( K const& key, V const& val )
+        {
+            return base_class::insert( key, val ) != base_class::end();
+        }
+
+        template <typename K, typename Func>
+        bool insert_with( K const& key, Func func )
+        {
+            return base_class::insert_with( key, func ) != base_class::end();
+        }
+
+        template <typename K>
+        bool find( K const& key )
+        {
+            return base_class::find( key ) != base_class::end();
+        }
+
+        void clear()
+        {}
+
+        // for testing
+        static CDS_CONSTEXPR bool const c_bExtractSupported = true;
+        static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
+    };
+
+    struct tag_SplitListMap;
+
+    template <typename Key, typename Value>
+    struct map_type< tag_SplitListMap, Key, Value >: public map_type_base< Key, Value >
+    {
+        typedef map_type_base< Key, Value >      base_class;
+        typedef typename base_class::key_compare compare;
+        typedef typename base_class::key_less    less;
+        typedef typename base_class::equal_to    equal_to;
+        typedef typename base_class::key_hash    hash;
+
+
+        // ***************************************************************************
+        // SplitListMap based on MichaelList
+        struct traits_SplitList_Michael_dyn_cmp: public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::compare< compare >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_HP_dyn_cmp;
+        typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_DHP_dyn_cmp;
+        typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_NOGC_dyn_cmp;
+        typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPI_dyn_cmp;
+        typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPB_dyn_cmp;
+        typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPT_dyn_cmp;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHB_dyn_cmp;
+        typedef SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHT_dyn_cmp;
+#endif
+
+        struct traits_SplitList_Michael_dyn_cmp_stat : public traits_SplitList_Michael_dyn_cmp
+        {
+            typedef cc::split_list::stat<> stat;
+        };
+        typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_HP_dyn_cmp_stat;
+        typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_DHP_dyn_cmp_stat;
+        typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_cmp_stat> SplitList_Michael_NOGC_dyn_cmp_stat;
+        typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPI_dyn_cmp_stat;
+        typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPB_dyn_cmp_stat;
+        typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPT_dyn_cmp_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHB_dyn_cmp_stat;
+        typedef SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHT_dyn_cmp_stat;
+#endif
+
+        struct traits_SplitList_Michael_dyn_cmp_seqcst: public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,co::hash< hash >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::compare< compare >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_HP_dyn_cmp_seqcst;
+        typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_DHP_dyn_cmp_seqcst;
+        typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst> SplitList_Michael_NOGC_dyn_cmp_seqcst;
+        typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
+        typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
+        typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
+        typedef SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
+#endif
+
+        struct traits_SplitList_Michael_st_cmp: public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::compare< compare >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_HP_st_cmp;
+        typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_DHP_st_cmp;
+        typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_cmp> SplitList_Michael_NOGC_st_cmp;
+        typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPI_st_cmp;
+        typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPB_st_cmp;
+        typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPT_st_cmp;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHB_st_cmp;
+        typedef SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHT_st_cmp;
+#endif
+
+        struct traits_SplitList_Michael_st_cmp_seqcst: public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::compare< compare >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_HP_st_cmp_seqcst;
+        typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_DHP_st_cmp_seqcst;
+        typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_NOGC_st_cmp_seqcst;
+        typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_GPI_st_cmp_seqcst;
+        typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_GPB_st_cmp_seqcst;
+        typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_GPT_st_cmp_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_SHB_st_cmp_seqcst;
+        typedef SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_SHT_st_cmp_seqcst;
+#endif
+
+        //HP + less
+        struct traits_SplitList_Michael_dyn_less: public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::less< less >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_HP_dyn_less;
+        typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_DHP_dyn_less;
+        typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_less> SplitList_Michael_NOGC_dyn_less;
+        typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPI_dyn_less;
+        typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPB_dyn_less;
+        typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPT_dyn_less;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHB_dyn_less;
+        typedef SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHT_dyn_less;
+#endif
+
+
+        struct traits_SplitList_Michael_dyn_less_seqcst: public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,co::hash< hash >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::less< less >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_HP_dyn_less_seqcst;
+        typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_DHP_dyn_less_seqcst;
+        typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_less_seqcst> SplitList_Michael_NOGC_dyn_less_seqcst;
+        typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPI_dyn_less_seqcst;
+        typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPB_dyn_less_seqcst;
+        typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPT_dyn_less_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHB_dyn_less_seqcst;
+        typedef SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHT_dyn_less_seqcst;
+#endif
+
+        struct traits_SplitList_Michael_st_less: public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::less< less >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_HP_st_less;
+        typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_DHP_st_less;
+        typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_less> SplitList_Michael_NOGC_st_less;
+        typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPI_st_less;
+        typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPB_st_less;
+        typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPT_st_less;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHB_st_less;
+        typedef SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHT_st_less;
+#endif
+
+        struct traits_SplitList_Michael_st_less_stat : traits_SplitList_Michael_st_less
+        {
+            typedef cc::split_list::stat<> stat;
+        };
+        typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_HP_st_less_stat;
+        typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_DHP_st_less_stat;
+        typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_less_stat> SplitList_Michael_NOGC_st_less_stat;
+        typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPI_st_less_stat;
+        typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPB_st_less_stat;
+        typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPT_st_less_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHB_st_less_stat;
+        typedef SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHT_st_less_stat;
+#endif
+
+
+        class traits_SplitList_Michael_st_less_seqcst: public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::less< less >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_HP_st_less_seqcst;
+        typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_DHP_st_less_seqcst;
+        typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_less_seqcst> SplitList_Michael_NOGC_st_less_seqcst;
+        typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPI_st_less_seqcst;
+        typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPB_st_less_seqcst;
+        typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPT_st_less_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHB_st_less_seqcst;
+        typedef SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHT_st_less_seqcst;
+#endif
+
+
+        // ***************************************************************************
+        // SplitListMap based on LazyKVList
+
+        struct SplitList_Lazy_dyn_cmp :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::compare< compare >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_HP_dyn_cmp;
+        typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_DHP_dyn_cmp;
+        typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_cmp> SplitList_Lazy_NOGC_dyn_cmp;
+        typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPI_dyn_cmp;
+        typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPB_dyn_cmp;
+        typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPT_dyn_cmp;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp;
+        typedef SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp;
+#endif
+
+        struct SplitList_Lazy_dyn_cmp_stat : public SplitList_Lazy_dyn_cmp
+        {
+            typedef cc::split_list::stat<> stat;
+        };
+        typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_HP_dyn_cmp_stat;
+        typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_DHP_dyn_cmp_stat;
+        typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_cmp_stat> SplitList_Lazy_NOGC_dyn_cmp_stat;
+        typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPI_dyn_cmp_stat;
+        typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPB_dyn_cmp_stat;
+        typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPT_dyn_cmp_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_SHB_dyn_cmp_stat;
+        typedef SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_SHT_dyn_cmp_stat;
+#endif
+
+        struct SplitList_Lazy_dyn_cmp_seqcst :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,co::hash< hash >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::compare< compare >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_HP_dyn_cmp_seqcst;
+        typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_DHP_dyn_cmp_seqcst;
+        typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_cmp_seqcst> SplitList_Lazy_NOGC_dyn_cmp_seqcst;
+        typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
+        typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
+        typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
+        typedef SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
+#endif
+
+        struct SplitList_Lazy_st_cmp :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::compare< compare >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_HP_st_cmp;
+        typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_DHP_st_cmp;
+        typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_cmp> SplitList_Lazy_NOGC_st_cmp;
+        typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPI_st_cmp;
+        typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPB_st_cmp;
+        typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPT_st_cmp;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHB_st_cmp;
+        typedef SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHT_st_cmp;
+#endif
+
+
+        struct SplitList_Lazy_st_cmp_seqcst :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::compare< compare >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_HP_st_cmp_seqcst;
+        typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_DHP_st_cmp_seqcst;
+        typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_NOGC_st_cmp_seqcst;
+        typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_GPI_st_cmp_seqcst;
+        typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_GPB_st_cmp_seqcst;
+        typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_GPT_st_cmp_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_SHB_st_cmp_seqcst;
+        typedef SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_SHT_st_cmp_seqcst;
+#endif
+
+
+        struct SplitList_Lazy_dyn_less :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::less< less >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_HP_dyn_less;
+        typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_DHP_dyn_less;
+        typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_less> SplitList_Lazy_NOGC_dyn_less;
+        typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPI_dyn_less;
+        typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPB_dyn_less;
+        typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPT_dyn_less;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHB_dyn_less;
+        typedef SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHT_dyn_less;
+#endif
+
+        struct SplitList_Lazy_dyn_less_seqcst:
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,co::hash< hash >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::less< less >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_HP_dyn_less_seqcst;
+        typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_DHP_dyn_less_seqcst;
+        typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_less_seqcst> SplitList_Lazy_NOGC_dyn_less_seqcst;
+        typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPI_dyn_less_seqcst;
+        typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPB_dyn_less_seqcst;
+        typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPT_dyn_less_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHB_dyn_less_seqcst;
+        typedef SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHT_dyn_less_seqcst;
+#endif
+
+        struct SplitList_Lazy_st_less :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::less< less >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_HP_st_less;
+        typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_DHP_st_less;
+        typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_less> SplitList_Lazy_NOGC_st_less;
+        typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPI_st_less;
+        typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPB_st_less;
+        typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPT_st_less;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHB_st_less;
+        typedef SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHT_st_less;
+#endif
+
+        struct SplitList_Lazy_st_less_stat : public SplitList_Lazy_st_less
+        {
+            typedef cc::split_list::stat<> stat;
+        };
+        typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_HP_st_less_stat;
+        typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_DHP_st_less_stat;
+        typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_less_stat> SplitList_Lazy_NOGC_st_less_stat;
+        typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPI_st_less_stat;
+        typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPB_st_less_stat;
+        typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPT_st_less_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHB_st_less_stat;
+        typedef SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHT_st_less_stat;
+#endif
+
+        struct SplitList_Lazy_st_less_seqcst :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::less< less >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_HP_st_less_seqcst;
+        typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_DHP_st_less_seqcst;
+        typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_less_seqcst> SplitList_Lazy_NOGC_st_less_seqcst;
+        typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPI_st_less_seqcst;
+        typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPB_st_less_seqcst;
+        typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPT_st_less_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHB_st_less_seqcst;
+        typedef SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHT_st_less_seqcst;
+#endif
+    };
+
+    template <typename GC, typename K, typename T, typename Traits >
+    static inline void print_stat( cds_test::property_stream& o, SplitListMap< GC, K, T, Traits > const& m )
+    {
+        o << m.statistics();
+    }
+
+}   // namespace map
+
+#define CDSSTRESS_SplitListMap_case( fixture, test_case, splitlist_map_type, key_type, value_type ) \
+    TEST_P( fixture, splitlist_map_type ) \
+    { \
+        typedef map::map_type< tag_SplitListMap, key_type, value_type >::splitlist_map_type map_type; \
+        test_case<map_type>(); \
+    }
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+#   define CDSSTRESS_SplitListMap_SHRCU( fixture, test_case, key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHB_dyn_cmp,         key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHT_dyn_cmp,         key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHB_dyn_cmp_stat,    key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHT_dyn_cmp_stat,    key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHB_dyn_cmp_seqcst,  key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHT_dyn_cmp_seqcst,  key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHB_st_cmp,          key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHT_st_cmp,          key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHB_st_cmp_seqcst,   key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHT_st_cmp_seqcst,   key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHB_dyn_less,        key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHT_dyn_less,        key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHB_dyn_less_seqcst, key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHT_dyn_less_seqcst, key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHB_st_less,         key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHT_st_less,         key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHB_st_less_stat,    key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHT_st_less_stat,    key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHB_st_less_seqcst,  key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHT_st_less_seqcst,  key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHB_dyn_cmp,            key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHT_dyn_cmp,            key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHB_dyn_cmp_stat,       key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHT_dyn_cmp_stat,       key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst,     key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst,     key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHB_st_cmp,             key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHT_st_cmp,             key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHB_st_cmp_seqcst,      key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHT_st_cmp_seqcst,      key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHB_dyn_less,           key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHT_dyn_less,           key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHB_dyn_less_seqcst,    key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHT_dyn_less_seqcst,    key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHB_st_less,            key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHT_st_less,            key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHB_st_less_stat,       key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHT_st_less_stat,       key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHB_st_less_seqcst,     key_type, value_type ) \
+        CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHT_st_less_seqcst,     key_type, value_type ) \
+
+#else
+#   define CDSSTRESS_SplitListMap_SHRCU( fixture, test_case, key_type, value_type )
+#endif
+
+#define CDSSTRESS_SplitListMap( fixture, test_case, key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_HP_dyn_cmp,              key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_DHP_dyn_cmp,             key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPI_dyn_cmp,         key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_cmp,         key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPT_dyn_cmp,         key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_HP_dyn_cmp_stat,         key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_DHP_dyn_cmp_stat,        key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPI_dyn_cmp_stat,    key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_cmp_stat,    key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPT_dyn_cmp_stat,    key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_HP_dyn_cmp_seqcst,       key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_DHP_dyn_cmp_seqcst,      key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPI_dyn_cmp_seqcst,  key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_cmp_seqcst,  key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPT_dyn_cmp_seqcst,  key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_HP_st_cmp,               key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_DHP_st_cmp,              key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPI_st_cmp,          key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPB_st_cmp,          key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPT_st_cmp,          key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_HP_st_cmp_seqcst,        key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_DHP_st_cmp_seqcst,       key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPI_st_cmp_seqcst,   key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPB_st_cmp_seqcst,   key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPT_st_cmp_seqcst,   key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_HP_dyn_less,             key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_DHP_dyn_less,            key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPI_dyn_less,        key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_less,        key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPT_dyn_less,        key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_HP_dyn_less_seqcst,      key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_DHP_dyn_less_seqcst,     key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPI_dyn_less_seqcst, key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_less_seqcst, key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPT_dyn_less_seqcst, key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_HP_st_less,              key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_DHP_st_less,             key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPI_st_less,         key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPB_st_less,         key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPT_st_less,         key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_HP_st_less_stat,         key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_DHP_st_less_stat,        key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPI_st_less_stat,    key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPB_st_less_stat,    key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPT_st_less_stat,    key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_HP_st_less_seqcst,       key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_DHP_st_less_seqcst,      key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPI_st_less_seqcst,  key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPB_st_less_seqcst,  key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPT_st_less_seqcst,  key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_HP_dyn_cmp,                 key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_DHP_dyn_cmp,                key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPI_dyn_cmp,            key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPB_dyn_cmp,            key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPT_dyn_cmp,            key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_HP_dyn_cmp_stat,            key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_DHP_dyn_cmp_stat,           key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPI_dyn_cmp_stat,       key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPB_dyn_cmp_stat,       key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPT_dyn_cmp_stat,       key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_HP_dyn_cmp_seqcst,          key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_DHP_dyn_cmp_seqcst,         key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst,     key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst,     key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst,     key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_HP_st_cmp,                  key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_DHP_st_cmp,                 key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPI_st_cmp,             key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPB_st_cmp,             key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPT_st_cmp,             key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_HP_st_cmp_seqcst,           key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_DHP_st_cmp_seqcst,          key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPI_st_cmp_seqcst,      key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPB_st_cmp_seqcst,      key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPT_st_cmp_seqcst,      key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_HP_dyn_less,                key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_DHP_dyn_less,               key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPI_dyn_less,           key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPB_dyn_less,           key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPT_dyn_less,           key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_HP_dyn_less_seqcst,         key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_DHP_dyn_less_seqcst,        key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPI_dyn_less_seqcst,    key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPB_dyn_less_seqcst,    key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPT_dyn_less_seqcst,    key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_HP_st_less,                 key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_DHP_st_less,                key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPI_st_less,            key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPB_st_less,            key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPT_st_less,            key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_HP_st_less_stat,            key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_DHP_st_less_stat,           key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPI_st_less_stat,       key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPB_st_less_stat,       key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPT_st_less_stat,       key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_HP_st_less_seqcst,          key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_DHP_st_less_seqcst,         key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPI_st_less_seqcst,     key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPB_st_less_seqcst,     key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPT_st_less_seqcst,     key_type, value_type ) \
+    CDSSTRESS_SplitListMap_SHRCU( fixture, test_case, key_type, value_type )
+
+#define CDSSTRESS_SplitListMap_nogc( fixture, test_case, key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_NOGC_dyn_cmp,            key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_NOGC_dyn_cmp_stat,       key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_NOGC_dyn_cmp_seqcst,     key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_NOGC_st_cmp,             key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_NOGC_st_cmp_seqcst,      key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_NOGC_dyn_less,           key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_NOGC_dyn_less_seqcst,    key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_NOGC_st_less,            key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_NOGC_st_less_stat,       key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_NOGC_st_less_seqcst,     key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_NOGC_dyn_cmp,               key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_NOGC_dyn_cmp_stat,          key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_NOGC_dyn_cmp_seqcst,        key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_NOGC_st_cmp,                key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_NOGC_st_cmp_seqcst,         key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_NOGC_dyn_less,              key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_NOGC_dyn_less_seqcst,       key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_NOGC_st_less,               key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_NOGC_st_less_stat,          key_type, value_type ) \
+    CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_NOGC_st_less_seqcst,        key_type, value_type ) \
+
+#endif // ifndef CDSUNIT_MAP_TYPE_SPLIT_LIST_H
diff --git a/test/stress/map/map_type_std.h b/test/stress/map/map_type_std.h
new file mode 100644 (file)
index 0000000..30ce916
--- /dev/null
@@ -0,0 +1,267 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_MAP_TYPE_STD_H
+#define CDSUNIT_MAP_TYPE_STD_H
+
+#include "map_type.h"
+
+#include <map>
+#include <unordered_map>
+
+namespace map {
+
+    struct empty_lock
+    {
+        void lock() {}
+        void unlock() {}
+    };
+
+    template <typename Key, typename Value, typename Lock,
+        class Alloc = typename CDS_DEFAULT_ALLOCATOR::template rebind<std::pair<Key const, Value> >::other
+    >
+        class StdMap: public std::map<Key, Value, std::less<Key>, Alloc>
+    {
+        Lock m_lock;
+        typedef std::unique_lock<Lock> scoped_lock;
+        typedef std::map<Key, Value, std::less<Key>, Alloc> base_class;
+    public:
+        typedef typename base_class::mapped_type value_type;
+        typedef typename base_class::value_type  pair_type;
+        typedef size_t      item_counter;
+
+        StdMap()
+        {}
+
+        template <class Config>
+        StdMap( Config const& )
+        {}
+
+        bool contains( const Key& key )
+        {
+            scoped_lock al( m_lock );
+            return base_class::find( key ) != base_class::end();
+        }
+
+        bool insert( const Key& key, const Value& val )
+        {
+            scoped_lock al( m_lock );
+            return base_class::insert( typename base_class::value_type( key, val ) ).second;
+        }
+
+        template <typename T, typename Func>
+        bool insert( const Key& key, const T& val, Func func )
+        {
+            scoped_lock al( m_lock );
+            std::pair<typename base_class::iterator, bool> pRet = base_class::insert( typename base_class::value_type( key, Value() ) );
+            if ( pRet.second ) {
+                func( pRet.first->second, val );
+                return true;
+            }
+            return false;
+        }
+
+        template <typename T, typename Func>
+        std::pair<bool, bool> update( const T& key, Func func, bool /*bAllowInsert*/ = true )
+        {
+            scoped_lock al( m_lock );
+            std::pair<typename base_class::iterator, bool> pRet = base_class::insert( typename base_class::value_type( key, Value() ) );
+            if ( pRet.second ) {
+                func( true, *pRet.first );
+                return std::make_pair( true, true );
+            }
+            else {
+                func( false, *pRet.first );
+                return std::make_pair( true, false );
+            }
+        }
+
+        bool erase( const Key& key )
+        {
+            scoped_lock al( m_lock );
+            return base_class::erase( key ) != 0;
+        }
+
+        template <typename T, typename Func>
+        bool erase( const T& key, Func func )
+        {
+            scoped_lock al( m_lock );
+            typename base_class::iterator it = base_class::find( key );
+            if ( it != base_class::end() ) {
+                func( (*it) );
+                base_class::erase( it );
+                return true;
+            }
+            return false;
+        }
+
+        std::ostream& dump( std::ostream& stm ) { return stm; }
+
+
+        // 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;
+    };
+
+    template <typename Key, typename Value, typename Lock,
+        class Alloc = typename CDS_DEFAULT_ALLOCATOR::template rebind<std::pair<Key const, Value> >::other
+    >
+    class StdHashMap
+        : public std::unordered_map<
+            Key, Value
+            , std::hash<Key>
+            , std::equal_to<Key>
+            , Alloc
+        >
+    {
+    public:
+        Lock m_lock;
+        typedef std::unique_lock<Lock> scoped_lock;
+        typedef std::unordered_map<
+            Key, Value
+            , std::hash<Key>
+            , std::equal_to<Key>
+            , Alloc
+        >   base_class;
+    public:
+        typedef typename base_class::mapped_type value_type;
+        typedef size_t      item_counter;
+
+        StdHashMap()
+        {}
+
+        template <class Config>
+        StdHashMap( Config const& )
+        {}
+
+        bool contains( const Key& key )
+        {
+            scoped_lock al( m_lock );
+            return base_class::find( key ) != base_class::end();
+        }
+
+        bool insert( const Key& key, const Value& val )
+        {
+            scoped_lock al( m_lock );
+            return base_class::insert( typename base_class::value_type(key, val)).second;
+        }
+
+        template <typename T, typename Func>
+        bool insert( const Key& key, const T& val, Func func )
+        {
+            scoped_lock al( m_lock );
+            std::pair<typename base_class::iterator, bool> pRet = base_class::insert( typename base_class::value_type(key, Value() ));
+            if ( pRet.second ) {
+                func( pRet.first->second, val );
+                return true;
+            }
+            return false;
+        }
+
+        template <typename T, typename Func>
+        std::pair<bool, bool> update( const T& key, Func func, bool /*bAllowInsert*/ = true )
+        {
+            scoped_lock al( m_lock );
+            std::pair<typename base_class::iterator, bool> pRet = base_class::insert( typename base_class::value_type( key, Value() ));
+            if ( pRet.second ) {
+                func( true, *pRet.first );
+                return std::make_pair( true, true );
+            }
+            else {
+                func( false, *pRet.first );
+                return std::make_pair( true, false );
+            }
+        }
+
+        bool erase( const Key& key )
+        {
+            scoped_lock al( m_lock );
+            return base_class::erase( key ) != 0;
+        }
+
+        template <typename T, typename Func>
+        bool erase( const T& key, Func func )
+        {
+            scoped_lock al( m_lock );
+            typename base_class::iterator it = base_class::find( key );
+            if ( it != base_class::end() ) {
+                func( *it );
+                return base_class::erase( key ) != 0;
+            }
+            return false;
+        }
+
+        std::ostream& dump( std::ostream& stm ) { return stm; }
+
+
+        // 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_StdMap;
+
+    template <typename Key, typename Value>
+    struct map_type< tag_StdMap, Key, Value >: public map_type_base< Key, Value >
+    {
+        typedef map_type_base< Key, Value >      base_class;
+        typedef typename base_class::key_compare compare;
+        typedef typename base_class::key_less    less;
+
+        typedef StdMap< Key, Value, cds::sync::spin > StdMap_Spin;
+        typedef StdMap< Key, Value, std::mutex >      StdMap_Mutex;
+        typedef StdMap< Key, Value, empty_lock>       StdMap_NoLock;
+
+        typedef StdHashMap< Key, Value, cds::sync::spin > StdHashMap_Spin;
+        typedef StdHashMap< Key, Value, std::mutex >      StdHashMap_Mutex;
+        typedef StdHashMap< Key, Value, empty_lock >      StdHashMap_NoLock;
+    };
+}   // namespace map
+
+#define CDSSTRESS_StdMap_case( fixture, test_case, std_map_type, key_type, value_type ) \
+    TEST_F( fixture, std_map_type ) \
+    { \
+        typedef map::map_type< tag_StdMap, key_type, value_type >::std_map_type map_type; \
+        test_case<map_type>(); \
+    }
+
+#define CDSSTRESS_StdMap( fixture, test_case, key_type, value_type ) \
+    CDSSTRESS_StdMap_case( fixture, test_case, StdMap_Spin,      key_type, value_type ) \
+    CDSSTRESS_StdMap_case( fixture, test_case, StdMap_Mutex,     key_type, value_type ) \
+    CDSSTRESS_StdMap_case( fixture, test_case, StdHashMap_Spin,  key_type, value_type ) \
+    CDSSTRESS_StdMap_case( fixture, test_case, StdHashMap_Mutex, key_type, value_type )
+
+#define CDSSTRESS_StdMap_nolock( fixture, test_case, key_type, value_type ) \
+    CDSSTRESS_StdMap_case( fixture, test_case, StdMap_NoLock,      key_type, value_type ) \
+    CDSSTRESS_StdMap_case( fixture, test_case, StdHashMap_NoLock,  key_type, value_type )
+
+#endif // ifndef CDSUNIT_MAP_TYPE_STD_H
diff --git a/test/stress/map/map_type_striped.h b/test/stress/map/map_type_striped.h
new file mode 100644 (file)
index 0000000..44773db
--- /dev/null
@@ -0,0 +1,291 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_MAP_TYPE_STRIPED_H
+#define CDSUNIT_MAP_TYPE_STRIPED_H
+
+#include "map_type.h"
+#include <cds/container/striped_map/std_list.h>
+#include <cds/container/striped_map/std_map.h>
+#include <cds/container/striped_map/std_hash_map.h>
+
+#include <boost/version.hpp>
+#if BOOST_VERSION >= 104800
+#   include <cds/container/striped_map/boost_list.h>
+#   include <cds/container/striped_map/boost_slist.h>
+#   include <cds/container/striped_map/boost_map.h>
+#   include <cds/container/striped_map/boost_flat_map.h>
+#endif
+#include <cds/container/striped_map/boost_unordered_map.h>
+#include <cds/container/striped_map.h>
+
+namespace map {
+
+    struct tag_StripedMap;
+
+    template <typename Key, typename Value>
+    struct map_type< tag_StripedMap, Key, Value >: public map_type_base< Key, Value >
+    {
+        typedef map_type_base< Key, Value >      base_class;
+        typedef typename base_class::key_compare compare;
+        typedef typename base_class::key_less    less;
+        typedef typename base_class::equal_to    equal_to;
+        typedef typename base_class::key_hash    hash;
+        typedef typename base_class::hash2       hash2;
+
+        // for sequential containers
+        template <class BucketEntry, typename... Options>
+        class StripedHashMap_seq:
+            public cc::StripedMap< BucketEntry,
+                co::mutex_policy< cc::striped_set::striping<> >
+                ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+                , Options...
+            >
+        {
+            typedef cc::StripedMap< BucketEntry,
+                co::mutex_policy< cc::striped_set::striping<> >
+                ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+                , Options...
+            > base_class;
+            typedef typename base_class::resizing_policy resizing_policy_t;
+
+            resizing_policy_t   m_placeHolder;
+        public:
+            template <class Config>
+            StripedHashMap_seq( Config const& cfg )
+                : base_class( cfg.s_nMapSize / cfg.s_nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( cfg.s_nLoadFactor )) )
+            {}
+
+            // for testing
+            static CDS_CONSTEXPR bool const c_bExtractSupported = false;
+            static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
+        };
+
+        // for non-sequential ordered containers
+        template <class BucketEntry, typename... Options>
+        class StripedHashMap_ord:
+            public cc::StripedMap< BucketEntry,
+                co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+                ,co::mutex_policy< cc::striped_set::striping<> >
+                , Options...
+            >
+        {
+            typedef cc::StripedMap< BucketEntry,
+               co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+                ,co::mutex_policy< cc::striped_set::striping<> >
+                , Options...
+            > base_class;
+            typedef typename base_class::resizing_policy resizing_policy_t;
+
+            resizing_policy_t   m_placeHolder;
+        public:
+            template <class Config>
+            StripedHashMap_ord( Config const& cfg )
+                : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( cfg.s_nMaxLoadFactor * 1024 )) )
+            {}
+
+            // for testing
+            static CDS_CONSTEXPR bool const c_bExtractSupported = false;
+            static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false;
+        };
+
+
+        typedef StripedHashMap_seq<
+            std::list< std::pair< Key const, Value > >
+            , co::hash< hash2 >
+            , co::less< less >
+        > StripedMap_list;
+
+        typedef StripedHashMap_ord<
+            std::unordered_map< Key, Value, hash, equal_to >
+            , co::hash< hash2 >
+        > StripedMap_hashmap;
+
+        typedef StripedHashMap_ord<
+            std::map< Key, Value, less >
+            , co::hash< hash2 >
+        > StripedMap_map;
+
+        typedef StripedHashMap_ord<
+            boost::unordered_map< Key, Value, hash, equal_to >
+            , co::hash< hash2 >
+        > StripedMap_boost_unordered_map;
+
+#   if BOOST_VERSION >= 104800
+        typedef StripedHashMap_seq<
+            boost::container::slist< std::pair< Key const, Value > >
+            , co::hash< hash2 >
+            , co::less< less >
+        > StripedMap_slist;
+
+        typedef StripedHashMap_seq<
+            boost::container::list< std::pair< Key const, Value > >
+            , co::hash< hash2 >
+            , co::less< less >
+        > StripedMap_boost_list;
+
+        typedef StripedHashMap_ord<
+            boost::container::map< Key, Value, less >
+            , co::hash< hash2 >
+        > StripedMap_boost_map;
+
+        typedef StripedHashMap_ord<
+            boost::container::flat_map< Key, Value, less >
+            , co::hash< hash2 >
+        > StripedMap_boost_flat_map;
+#   endif  // BOOST_VERSION >= 104800
+
+
+        // ***************************************************************************
+        // RefinableHashMap
+
+        // for sequential containers
+        template <class BucketEntry, typename... Options>
+        class RefinableHashMap_seq:
+            public cc::StripedMap< BucketEntry,
+                co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+                ,co::mutex_policy< cc::striped_set::refinable<> >
+                , Options...
+            >
+        {
+            typedef cc::StripedMap< BucketEntry,
+               co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+                ,co::mutex_policy< cc::striped_set::refinable<> >
+                , Options...
+            > base_class;
+            typedef typename base_class::resizing_policy resizing_policy_t;
+
+            resizing_policy_t   m_placeHolder;
+        public:
+            template <class Config>
+            RefinableHashMap_seq( Config const& cfg )
+                : base_class( cfg.s_nMapSize / cfg.s_nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( cfg.s_nLoadFactor )))
+            {}
+
+            // for testing
+            static CDS_CONSTEXPR bool const c_bExtractSupported = false;
+            static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
+        };
+
+        // for non-sequential ordered containers
+        template <class BucketEntry, typename... Options>
+        class RefinableHashMap_ord:
+            public cc::StripedMap< BucketEntry,
+                co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+                ,co::mutex_policy< cc::striped_set::refinable<> >
+                , Options...
+            >
+        {
+            typedef cc::StripedMap< BucketEntry,
+               co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+                ,co::mutex_policy< cc::striped_set::refinable<> >
+                , Options...
+            > base_class;
+            typedef typename base_class::resizing_policy resizing_policy_t;
+
+            resizing_policy_t   m_placeHolder;
+        public:
+            template <class Config>
+            RefinableHashMap_ord( Config const& cfg )
+                : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( cfg.s_nMaxLoadFactor * 1024 )) )
+            {}
+
+            // for testing
+            static CDS_CONSTEXPR bool const c_bExtractSupported = false;
+            static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false;
+        };
+
+
+        typedef RefinableHashMap_seq<
+            std::list< std::pair< Key const, Value > >
+            , co::hash< hash2 >
+            , co::less< less >
+        > RefinableMap_list;
+
+#   if BOOST_VERSION >= 104800
+        typedef RefinableHashMap_seq<
+            boost::container::slist< std::pair< Key const, Value > >
+            , co::hash< hash2 >
+            , co::less< less >
+        > RefinableMap_slist;
+#   endif
+
+        typedef RefinableHashMap_ord<
+            std::map< Key, Value, less >
+            , co::hash< hash2 >
+        > RefinableMap_map;
+
+        typedef RefinableHashMap_ord<
+            std::unordered_map< Key, Value, hash, equal_to >
+            , co::hash< hash2 >
+        > RefinableMap_hashmap;
+
+        typedef RefinableHashMap_ord<
+            boost::unordered_map< Key, Value, hash, equal_to >
+            , co::hash< hash2 >
+        > RefinableMap_boost_unordered_map;
+
+#   if BOOST_VERSION >= 104800
+        typedef RefinableHashMap_seq<
+            boost::container::list< std::pair< Key const, Value > >
+            , co::hash< hash2 >
+            , co::less< less >
+        > RefinableMap_boost_list;
+
+        typedef RefinableHashMap_ord<
+            boost::container::map< Key, Value, less >
+            , co::hash< hash2 >
+        > RefinableMap_boost_map;
+
+        typedef RefinableHashMap_ord<
+            boost::container::flat_map< Key, Value, less >
+            , co::hash< hash2 >
+        > RefinableMap_boost_flat_map;
+#   endif // #if BOOST_VERSION >= 104800
+
+    };
+}   // namespace map
+
+#define CDSSTRESS_StripedMap_case( fixture, test_case, striped_map_type, key_type, value_type ) \
+    TEST_P( fixture, striped_map_type ) \
+    { \
+        typedef map::map_type< tag_StripedMap, key_type, value_type >::striped_map_type map_type; \
+        test_case<map_type>(); \
+    }
+
+#define CDSSTRESS_StripedMap( fixture, test_case, key_type, value_type ) \
+    CDSSTRESS_StripedMap_case( fixture, test_case, StripedMap_list,         key_type, value_type ) \
+    CDSSTRESS_StripedMap_case( fixture, test_case, StripedMap_hashmap,      key_type, value_type ) \
+    CDSSTRESS_StripedMap_case( fixture, test_case, StripedMap_map,          key_type, value_type ) \
+    CDSSTRESS_StripedMap_case( fixture, test_case, RefinableMap_list,       key_type, value_type ) \
+    CDSSTRESS_StripedMap_case( fixture, test_case, RefinableMap_map,        key_type, value_type ) \
+    CDSSTRESS_StripedMap_case( fixture, test_case, RefinableMap_hashmap,    key_type, value_type ) \
+
+#endif // ifndef CDSUNIT_MAP_TYPE_STRIPED_H
diff --git a/test/stress/pqueue/CMakeLists.txt b/test/stress/pqueue/CMakeLists.txt
new file mode 100644 (file)
index 0000000..7131a98
--- /dev/null
@@ -0,0 +1,25 @@
+set(PACKAGE_NAME stress-pqueue)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DCDSUNIT_USE_URCU") 
+
+set(CDSSTRESS_PQUEUE_SOURCES
+    ../main.cpp
+    pop.cpp
+    push.cpp
+    push_pop.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_executable(${PACKAGE_NAME} ${CDSSTRESS_PQUEUE_SOURCES} $<TARGET_OBJECTS:${CDSSTRESS_FRAMEWORK_LIBRARY}>)
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/stress/pqueue/item.h b/test/stress/pqueue/item.h
new file mode 100644 (file)
index 0000000..1a14fba
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSSTRESS_PQUEUE_ITEM_H
+#define CDSSTRESS_PQUEUE_ITEM_H
+
+namespace pqueue {
+
+    struct simple_value {
+        typedef size_t  key_type;
+
+        key_type key;
+
+        struct key_extractor {
+            void operator()( key_type& k, simple_value const& s ) const
+            {
+                k = s.key;
+            }
+        };
+
+        simple_value()
+            : key(0)
+        {}
+
+        simple_value( key_type n )
+            : key(n) 
+        {}
+    };
+} // namespace pqueue
+
+namespace std {
+    template <class T> struct less;
+    template <class T> struct greater;
+
+    template <>
+    struct less<pqueue::simple_value>
+    {
+        bool operator()( pqueue::simple_value const& k1, pqueue::simple_value const& k2 ) const
+        {
+            return k1.key < k2.key;
+        }
+
+        bool operator()( pqueue::simple_value const& k1, size_t k2 ) const
+        {
+            return k1.key < k2;
+        }
+
+        bool operator()( size_t k1, pqueue::simple_value const& k2 ) const
+        {
+            return k1 < k2.key;
+        }
+
+        bool operator()( size_t k1, size_t k2 ) const
+        {
+            return k1 < k2;
+        }
+    };
+
+    template <>
+    struct greater<pqueue::simple_value>
+    {
+        bool operator()( pqueue::simple_value const& k1, pqueue::simple_value const& k2 ) const
+        {
+            return k1.key > k2.key;
+        }
+
+        bool operator()( pqueue::simple_value const& k1, size_t k2 ) const
+        {
+            return k1.key > k2;
+        }
+
+        bool operator()( size_t k1, pqueue::simple_value const& k2 ) const
+        {
+            return k1 > k2.key;
+        }
+
+        bool operator()( size_t k1, size_t k2 ) const
+        {
+            return k1 > k2;
+        }
+    };
+
+} // namespace std
+
+#endif // #ifndef CDSSTRESS_PQUEUE_ITEM_H
diff --git a/test/stress/pqueue/pop.cpp b/test/stress/pqueue/pop.cpp
new file mode 100644 (file)
index 0000000..1ac5088
--- /dev/null
@@ -0,0 +1,321 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "pqueue_type.h"
+#include "item.h"
+
+namespace {
+    static size_t s_nThreadCount = 8;
+    static size_t s_nQueueSize = 2000000;
+
+    class pqueue_pop: public cds_test::stress_fixture
+    {
+        typedef cds_test::stress_fixture base_class;
+
+    protected:
+        template <class PQueue>
+        class Producer: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+
+        public:
+            Producer( cds_test::thread_pool& pool, PQueue& queue )
+                : base_class( pool )
+                , m_Queue( queue )
+            {}
+
+            Producer( Producer& src )
+                : base_class( src )
+                , m_Queue( src.m_Queue )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Producer( *this );
+            }
+
+            virtual void test()
+            {
+                typedef typename PQueue::value_type value_type;
+                for ( array_type::const_iterator it = m_arr.begin(); it != m_arr.end(); ++it ) {
+                    if ( !m_Queue.push( value_type( *it ) ))
+                        ++m_nPushError;
+                }
+            }
+
+            void prepare( size_t nStart, size_t nEnd )
+            {
+                m_arr.reserve( nEnd - nStart );
+                for ( size_t i = nStart; i < nEnd; ++i )
+                    m_arr.push_back( i );
+                shuffle( m_arr.begin(), m_arr.end() );
+            }
+
+        public:
+            PQueue&             m_Queue;
+            size_t              m_nPushError = 0;
+
+            typedef std::vector<size_t> array_type;
+            array_type          m_arr;
+        };
+
+        template <class PQueue>
+        class Consumer: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+
+        public:
+            Consumer( cds_test::thread_pool& pool, PQueue& queue )
+                : base_class( pool )
+                , m_Queue( queue )
+            {}
+
+            Consumer( Consumer& src )
+                : base_class( src )
+                , m_Queue( src.m_Queue )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Consumer( *this );
+            }
+
+            virtual void test()
+            {
+                typedef typename PQueue::value_type value_type;
+                size_t nPrevKey;
+                value_type val;
+                if ( m_Queue.pop( val )) {
+                    ++m_nPopSuccess;
+                    nPrevKey = val.key;
+
+                    while ( !m_Queue.empty() ) {
+                        if ( m_Queue.pop( val )) {
+                            ++m_nPopSuccess;
+                            if ( val.key > nPrevKey )
+                                ++m_nPopError;
+                            else if ( val.key == nPrevKey )
+                                ++m_nPopErrorEq;
+                            nPrevKey = val.key;
+                        }
+                        else
+                            ++m_nPopFailed;
+                    }
+                }
+                else
+                    ++m_nPopFailed;
+            }
+
+        public:
+            PQueue&             m_Queue;
+            size_t              m_nPopError = 0;
+            size_t              m_nPopErrorEq = 0;
+            size_t              m_nPopSuccess = 0;
+            size_t              m_nPopFailed = 0;
+        };
+
+    protected:
+
+        template <class PQueue>
+        void test( PQueue& q )
+        {
+            size_t const nThreadItemCount = s_nQueueSize / s_nThreadCount;
+            s_nQueueSize = nThreadItemCount * s_nThreadCount;
+
+            cds_test::thread_pool& pool = get_pool();
+
+            propout() << std::make_pair( "thread_count", s_nThreadCount )
+                << std::make_pair( "push_count", s_nQueueSize );
+
+            // push
+            {
+                pool.add( new Producer<PQueue>( pool, q ), s_nThreadCount );
+
+                size_t nStart = 0;
+                for ( size_t i = 0; i < pool.size(); ++i ) {
+                    static_cast<Producer<PQueue>&>( pool.get(i) ).prepare( nStart, nStart + nThreadItemCount );
+                    nStart += nThreadItemCount;
+                }
+
+                std::chrono::milliseconds duration = pool.run();
+                propout() << std::make_pair( "producer_duration", duration );
+            }
+
+            // pop
+            {
+                pool.clear();
+                pool.add( new Consumer<PQueue>( pool, q ), s_nThreadCount );
+
+                std::chrono::milliseconds duration = pool.run();
+                propout() << std::make_pair( "consumer_duration", duration );
+
+                // Analyze result
+                size_t nTotalPopped = 0;
+                size_t nTotalError = 0;
+                size_t nTotalErrorEq = 0;
+                size_t nTotalFailed = 0;
+                for ( size_t i = 0; i < pool.size(); ++i ) {
+                    Consumer<PQueue>& cons = static_cast<Consumer<PQueue>&>( pool.get(i));
+
+                    nTotalPopped  += cons.m_nPopSuccess;
+                    nTotalError   += cons.m_nPopError;
+                    nTotalErrorEq += cons.m_nPopErrorEq;
+                    nTotalFailed  += cons.m_nPopFailed;
+                }
+
+                propout()
+                    << std::make_pair( "total_popped", nTotalPopped )
+                    << std::make_pair( "error_pop_double", nTotalErrorEq )
+                    << std::make_pair( "error_priority_violation", nTotalError );
+
+                EXPECT_EQ( nTotalPopped, s_nQueueSize );
+                EXPECT_EQ( nTotalError, 0 );
+                EXPECT_EQ( nTotalErrorEq, 0 );
+            }
+
+            propout() << q.statistics();
+        }
+
+    public:
+        static void SetUpTestCase()\r
+        {\r
+            cds_test::config const& cfg = get_config( "pqueue_pop" );\r
+\r
+            s_nThreadCount = cfg.get_size_t( "ThreadCount", s_nThreadCount );
+            s_nQueueSize = cfg.get_size_t( "QueueSize", s_nQueueSize );
+
+            if ( s_nThreadCount == 0 )
+                s_nThreadCount = 1;
+            if ( s_nQueueSize == 0 )
+                s_nQueueSize = 1000;\r
+        }
+
+        //static void TearDownTestCase();
+    };
+
+#define CDSSTRESS_MSPriorityQueue( fixture_t, pqueue_t ) \
+    TEST_F( fixture_t, pqueue_t ) \
+    { \
+        typedef pqueue::Types<pqueue::simple_value>::pqueue_t pqueue_type; \
+        pqueue_type pq( s_nQueueSize ); \
+        test( pq ); \
+    }
+    CDSSTRESS_MSPriorityQueue( pqueue_pop, MSPriorityQueue_dyn_less )
+    CDSSTRESS_MSPriorityQueue( pqueue_pop, MSPriorityQueue_dyn_less_stat )
+    CDSSTRESS_MSPriorityQueue( pqueue_pop, MSPriorityQueue_dyn_cmp )
+    CDSSTRESS_MSPriorityQueue( pqueue_pop, MSPriorityQueue_dyn_mutex )
+
+#define CDSSTRESS_MSPriorityQueue_static( fixture_t, pqueue_t ) \
+    TEST_F( fixture_t, pqueue_t ) \
+    { \
+        typedef pqueue::Types<pqueue::simple_value>::pqueue_t pqueue_type; \
+        std::unique_ptr< pqueue_type > pq( new pqueue_type ); \
+        test( *pq.get() ); \
+    }
+    //CDSSTRESS_MSPriorityQueue( pqueue_pop, MSPriorityQueue_static_less )
+    //CDSSTRESS_MSPriorityQueue( pqueue_pop, MSPriorityQueue_static_less_stat )
+    //CDSSTRESS_MSPriorityQueue( pqueue_pop, MSPriorityQueue_static_cmp )
+    //CDSSTRESS_MSPriorityQueue( pqueue_pop, 1MSPriorityQueue_static_mutex )
+
+
+#define CDSSTRESS_PriorityQueue( fixture_t, pqueue_t ) \
+    TEST_F( fixture_t, pqueue_t ) \
+    { \
+        typedef pqueue::Types<pqueue::simple_value>::pqueue_t pqueue_type; \
+        pqueue_type pq; \
+        test( pq ); \
+    }
+    CDSSTRESS_PriorityQueue( pqueue_pop, FCPQueue_vector )
+    CDSSTRESS_PriorityQueue( pqueue_pop, FCPQueue_vector_stat )
+    CDSSTRESS_PriorityQueue( pqueue_pop, FCPQueue_deque )
+    CDSSTRESS_PriorityQueue( pqueue_pop, FCPQueue_deque_stat )
+    CDSSTRESS_PriorityQueue( pqueue_pop, FCPQueue_boost_deque )
+    CDSSTRESS_PriorityQueue( pqueue_pop, FCPQueue_boost_deque_stat )
+    CDSSTRESS_PriorityQueue( pqueue_pop, FCPQueue_boost_stable_vector )
+    CDSSTRESS_PriorityQueue( pqueue_pop, FCPQueue_boost_stable_vector_stat )
+
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_HP_max )
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_HP_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_HP_min )
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_HP_min_stat )
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_DHP_max )
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_DHP_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_DHP_min )
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_DHP_min_stat )
+    // CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_RCU_gpi_max )
+    // CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_RCU_gpi_max_stat )
+    // CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_RCU_gpi_min )
+    // CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_RCU_gpi_min_stat )
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_RCU_gpb_max )
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_RCU_gpb_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_RCU_gpb_min )
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_RCU_gpb_min_stat )
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_RCU_gpt_max )
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_RCU_gpt_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_RCU_gpt_min )
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_RCU_gpt_min_stat )
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_RCU_shb_max )
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_RCU_shb_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_RCU_shb_min )
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_RCU_shb_min_stat )
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_RCU_sht_max )
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_RCU_sht_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_RCU_sht_min )
+    CDSSTRESS_PriorityQueue( pqueue_pop, EllenBinTree_RCU_sht_min_stat )
+#endif
+
+    CDSSTRESS_PriorityQueue( pqueue_pop, SkipList_HP_max )
+    CDSSTRESS_PriorityQueue( pqueue_pop, SkipList_HP_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_pop, SkipList_HP_min )
+    CDSSTRESS_PriorityQueue( pqueue_pop, SkipList_HP_min_stat )
+    CDSSTRESS_PriorityQueue( pqueue_pop, SkipList_DHP_max )
+    CDSSTRESS_PriorityQueue( pqueue_pop, SkipList_DHP_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_pop, SkipList_DHP_min )
+    CDSSTRESS_PriorityQueue( pqueue_pop, SkipList_DHP_min_stat )
+    CDSSTRESS_PriorityQueue( pqueue_pop, SkipList_RCU_gpi_max )
+    CDSSTRESS_PriorityQueue( pqueue_pop, SkipList_RCU_gpi_min )
+    CDSSTRESS_PriorityQueue( pqueue_pop, SkipList_RCU_gpb_max )
+    CDSSTRESS_PriorityQueue( pqueue_pop, SkipList_RCU_gpb_min )
+    CDSSTRESS_PriorityQueue( pqueue_pop, SkipList_RCU_gpt_max )
+    CDSSTRESS_PriorityQueue( pqueue_pop, SkipList_RCU_gpt_min )
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+    CDSSTRESS_PriorityQueue( pqueue_pop, SkipList_RCU_shb_max )
+    CDSSTRESS_PriorityQueue( pqueue_pop, SkipList_RCU_shb_min )
+    CDSSTRESS_PriorityQueue( pqueue_pop, SkipList_RCU_sht_max )
+    CDSSTRESS_PriorityQueue( pqueue_pop, SkipList_RCU_sht_min )
+#endif
+
+    CDSSTRESS_PriorityQueue( pqueue_pop, StdPQueue_vector_spin )
+    CDSSTRESS_PriorityQueue( pqueue_pop, StdPQueue_vector_mutex )
+    CDSSTRESS_PriorityQueue( pqueue_pop, StdPQueue_deque_spin )
+    CDSSTRESS_PriorityQueue( pqueue_pop, StdPQueue_deque_mutex )
+
+} // namespace
diff --git a/test/stress/pqueue/pqueue_type.h b/test/stress/pqueue/pqueue_type.h
new file mode 100644 (file)
index 0000000..288132f
--- /dev/null
@@ -0,0 +1,666 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSSTRESS_PQUEUE_TYPES_H
+#define CDSSTRESS_PQUEUE_TYPES_H
+
+#include <cds/urcu/general_instant.h>
+#include <cds/urcu/general_buffered.h>
+#include <cds/urcu/general_threaded.h>
+#include <cds/urcu/signal_buffered.h>
+#include <cds/urcu/signal_threaded.h>
+
+#include <cds/container/mspriority_queue.h>
+#include <cds/container/fcpriority_queue.h>
+
+#include <cds/container/ellen_bintree_set_hp.h>
+#include <cds/container/ellen_bintree_set_dhp.h>
+#include <cds/container/ellen_bintree_set_rcu.h>
+
+#include <cds/container/skip_list_set_hp.h>
+#include <cds/container/skip_list_set_dhp.h>
+#include <cds/container/skip_list_set_rcu.h>
+
+#include <cds/sync/spinlock.h>
+
+#include <queue>
+#include <vector>
+#include <deque>
+#include <mutex> //unique_lock
+
+#include <boost/container/stable_vector.hpp>
+#include <boost/container/deque.hpp>
+
+#include <cds_test/stress_test.h>
+#include <cds_test/stat_ellenbintree_out.h>
+#include <cds_test/stat_skiplist_out.h>
+
+namespace pqueue {
+    namespace cc = cds::container;
+    namespace co = cds::opt;
+
+    namespace details {
+        template <typename T, typename Container, typename Lock, typename Less = std::less<typename Container::value_type> >
+        class StdPQueue
+        {
+        public:
+            typedef T value_type;
+            typedef std::priority_queue<value_type, Container, Less> pqueue_type;
+
+        private:
+            pqueue_type     m_PQueue;
+            mutable Lock    m_Lock;
+
+            typedef std::unique_lock<Lock> scoped_lock;
+
+        public:
+            bool push( value_type const& val )
+            {
+                scoped_lock l( m_Lock );
+                m_PQueue.push( val );
+                return true;
+            }
+
+            bool pop( value_type& dest )
+            {
+                scoped_lock l( m_Lock );
+                if ( !m_PQueue.empty() ) {
+                    dest = m_PQueue.top();
+                    m_PQueue.pop();
+                    return true;
+                }
+                return false;
+            }
+
+            template <typename Q, typename MoveFunc>
+            bool pop_with( Q& dest, MoveFunc f )
+            {
+                scoped_lock l( m_Lock );
+                if ( !m_PQueue.empty() ) {
+                    f( dest, m_PQueue.top() );
+                    m_PQueue.pop();
+                    return true;
+                }
+                return false;
+            }
+
+            void clear()
+            {
+                scoped_lock l( m_Lock );
+                while ( !m_PQueue.empty() )
+                    m_PQueue.pop();
+            }
+
+            template <typename Func>
+            void clear_with( Func f )
+            {
+                scoped_lock l( m_Lock );
+                while ( !m_PQueue.empty() ) {
+                    f( m_PQueue.top() );
+                    m_PQueue.pop();
+                }
+            }
+
+            bool empty() const
+            {
+                return m_PQueue.empty();
+            }
+
+            size_t size() const
+            {
+                return m_PQueue.size();
+            }
+
+            cds::opt::none statistics() const
+            {
+                return cds::opt::none();
+            }
+        };
+
+        // EllenBinTree priority queue
+        template <typename GC>
+        struct EllenBinTreePQueue_pop_max
+        {
+            template <typename T, typename Tree>
+            bool operator()( T& dest, Tree& container ) const
+            {
+                typename Tree::guarded_ptr gp( container.extract_max() );
+                if ( gp )
+                    dest = *gp;
+                return !gp.empty();
+            }
+        };
+
+        template <typename RCU>
+        struct EllenBinTreePQueue_pop_max< cds::urcu::gc<RCU> >
+        {
+            template <typename T, typename Tree>
+            bool operator()( T& dest, Tree& container ) const
+            {
+                typename Tree::exempt_ptr ep( container.extract_max() );
+                if ( ep )
+                    dest = *ep;
+                return !ep.empty();
+            }
+        };
+
+        template <typename GC>
+        struct EllenBinTreePQueue_pop_min
+        {
+            template <typename T, typename Tree>
+            bool operator()( T& dest, Tree& container ) const
+            {
+                typename Tree::guarded_ptr gp( container.extract_min() );
+                if ( gp )
+                    dest = *gp;
+                return !gp.empty();
+            }
+        };
+
+        template <typename RCU>
+        struct EllenBinTreePQueue_pop_min< cds::urcu::gc<RCU> >
+        {
+            template <typename T, typename Tree>
+            bool operator()( T& dest, Tree& container ) const
+            {
+                typename Tree::exempt_ptr ep( container.extract_min() );
+                if ( ep )
+                    dest = *ep;
+                return !ep.empty();
+            }
+        };
+
+        template <typename GC, typename Key, typename T, typename Traits, bool Max = true>
+        class EllenBinTreePQueue : protected cds::container::EllenBinTreeSet< GC, Key, T, Traits >
+        {
+            typedef cds::container::EllenBinTreeSet< GC, Key, T, Traits > base_class;
+            template <typename GC2> friend struct EllenBinTreePQueue_pop_max;
+            template <typename GC2> friend struct EllenBinTreePQueue_pop_min;
+
+        public:
+            typedef T value_type;
+
+            bool push( value_type const& val )
+            {
+                return base_class::insert( val );
+            }
+
+            bool pop( value_type& dest )
+            {
+                return Max ? EllenBinTreePQueue_pop_max< typename base_class::gc >()(dest, *this)
+                    : EllenBinTreePQueue_pop_min< typename base_class::gc >()(dest, *this);
+            }
+
+            void clear()
+            {
+                base_class::clear();
+            }
+
+            bool empty() const
+            {
+                return base_class::empty();
+            }
+
+            size_t size() const
+            {
+                return base_class::size();
+            }
+
+            typename base_class::stat const& statistics() const
+            {
+                return base_class::statistics();
+            }
+        };
+
+
+        // SkipList property queue
+        template <typename GC>
+        struct SkipListPQueue_pop_max
+        {
+            template <typename T, typename Set>
+            bool operator()( T& dest, Set& container ) const
+            {
+                typename Set::guarded_ptr gp( container.extract_max() );
+                if ( gp )
+                    dest = *gp;
+                return !gp.empty();
+            }
+        };
+
+        template <typename RCU>
+        struct SkipListPQueue_pop_max< cds::urcu::gc<RCU> >
+        {
+            template <typename T, typename Set>
+            bool operator()( T& dest, Set& container ) const
+            {
+                typename Set::exempt_ptr ep( container.extract_max() );
+                if ( ep )
+                    dest = *ep;
+                return !ep.empty();
+            }
+        };
+
+        template <typename GC>
+        struct SkipListPQueue_pop_min
+        {
+            template <typename T, typename Set>
+            bool operator()( T& dest, Set& container ) const
+            {
+                typename Set::guarded_ptr gp( container.extract_min() );
+                if ( gp )
+                    dest = *gp;
+                return !gp.empty();
+            }
+        };
+
+        template <typename RCU>
+        struct SkipListPQueue_pop_min< cds::urcu::gc<RCU> >
+        {
+            template <typename T, typename Set>
+            bool operator()( T& dest, Set& container ) const
+            {
+                typename Set::exempt_ptr ep( container.extract_min() );
+                if ( ep )
+                    dest = *ep;
+                return !ep.empty();
+            }
+        };
+
+        template <typename GC, typename T, typename Traits, bool Max = true>
+        class SkipListPQueue : protected cds::container::SkipListSet< GC, T, Traits >
+        {
+            typedef cds::container::SkipListSet< GC, T, Traits > base_class;
+            template <typename GC2> friend struct SkipListPQueue_pop_max;
+            template <typename GC2> friend struct SkipListPQueue_pop_min;
+
+        public:
+            typedef T value_type;
+
+            bool push( value_type const& val )
+            {
+                return base_class::insert( val );
+            }
+
+            bool pop( value_type& dest )
+            {
+                return Max ? SkipListPQueue_pop_max< typename base_class::gc >()(dest, *this)
+                    : SkipListPQueue_pop_min< typename base_class::gc >()(dest, *this);
+            }
+
+            void clear()
+            {
+                base_class::clear();
+            }
+
+            bool empty() const
+            {
+                return base_class::empty();
+            }
+
+            size_t size() const
+            {
+                return base_class::size();
+            }
+
+            typename base_class::stat const& statistics() const
+            {
+                return base_class::statistics();
+            }
+        };
+
+    } // namespace details
+
+    template <typename Value>
+    struct Types
+    {
+        static size_t const c_nBoundedCapacity = 1024 * 1024 * 16;
+
+        typedef std::less<Value>    less;
+
+        struct cmp {
+            int operator()( Value const& v1, Value const& v2 ) const
+            {
+                return less()( v1, v2 ) ? -1 : less()( v2, v1 ) ? 1 : 0;
+            }
+        };
+
+        typedef cds::urcu::gc< cds::urcu::general_instant<> >   rcu_gpi;
+        typedef cds::urcu::gc< cds::urcu::general_buffered<> >  rcu_gpb;
+        typedef cds::urcu::gc< cds::urcu::general_threaded<> >  rcu_gpt;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cds::urcu::gc< cds::urcu::signal_buffered<> >  rcu_shb;
+        typedef cds::urcu::gc< cds::urcu::signal_threaded<> >  rcu_sht;
+#endif
+
+
+        // MSPriorityQueue
+        struct traits_MSPriorityQueue_static_less : public
+            cc::mspriority_queue::make_traits <
+                co::buffer < co::v::static_buffer< char, c_nBoundedCapacity > >
+            > ::type
+        {};
+        typedef cc::MSPriorityQueue< Value, traits_MSPriorityQueue_static_less > MSPriorityQueue_static_less;
+
+        struct traits_MSPriorityQueue_static_less_stat : public cc::mspriority_queue::traits
+        {
+            typedef co::v::static_buffer< char, c_nBoundedCapacity > buffer;
+            typedef cc::mspriority_queue::stat<> stat;
+        };
+        typedef cc::MSPriorityQueue< Value, traits_MSPriorityQueue_static_less_stat > MSPriorityQueue_static_less_stat;
+
+        struct traits_MSPriorityQueue_static_cmp : public
+            cc::mspriority_queue::make_traits <
+                co::buffer< co::v::static_buffer< char, c_nBoundedCapacity > >
+                , co::compare < cmp >
+            > ::type
+        {};
+        typedef cc::MSPriorityQueue< Value, traits_MSPriorityQueue_static_cmp > MSPriorityQueue_static_cmp;
+
+        struct traits_MSPriorityQueue_static_mutex : public
+            cc::mspriority_queue::make_traits<
+                co::buffer< co::v::static_buffer< char, c_nBoundedCapacity > >
+                , co::lock_type<std::mutex>
+            >::type
+        {};
+        typedef cc::MSPriorityQueue< Value, traits_MSPriorityQueue_static_mutex > MSPriorityQueue_static_mutex;
+
+        struct traits_MSPriorityQueue_dyn_less : public
+            cc::mspriority_queue::make_traits<
+                co::buffer< co::v::dynamic_buffer< char > >
+            >::type
+        {};
+        typedef cc::MSPriorityQueue< Value, traits_MSPriorityQueue_dyn_less > MSPriorityQueue_dyn_less;
+
+        struct traits_MSPriorityQueue_dyn_less_stat : public
+            cc::mspriority_queue::make_traits <
+                co::buffer< co::v::dynamic_buffer< char > >
+                , co::stat < cc::mspriority_queue::stat<> >
+            > ::type
+        {};
+        typedef cc::MSPriorityQueue< Value, traits_MSPriorityQueue_dyn_less_stat > MSPriorityQueue_dyn_less_stat;
+
+        struct traits_MSPriorityQueue_dyn_cmp : public
+            cc::mspriority_queue::make_traits <
+                co::buffer< co::v::dynamic_buffer< char > >
+                , co::compare < cmp >
+            > ::type
+        {};
+        typedef cc::MSPriorityQueue< Value, traits_MSPriorityQueue_dyn_cmp > MSPriorityQueue_dyn_cmp;
+
+        struct traits_MSPriorityQueue_dyn_mutex : public
+            cc::mspriority_queue::make_traits <
+                co::buffer< co::v::dynamic_buffer< char > >
+                , co::lock_type < std::mutex >
+            > ::type
+        {};
+        typedef cc::MSPriorityQueue< Value, traits_MSPriorityQueue_dyn_mutex > MSPriorityQueue_dyn_mutex;
+
+
+        // Priority queue based on EllenBinTreeSet
+        struct traits_EllenBinTree_max :
+            public cc::ellen_bintree::make_set_traits<
+                cc::ellen_bintree::key_extractor< typename Value::key_extractor >
+                ,cc::opt::less< std::less<Value> >
+                ,co::stat< cc::ellen_bintree::stat<> >
+            >::type
+        {};
+        typedef details::EllenBinTreePQueue< cds::gc::HP, typename Value::key_type, Value, traits_EllenBinTree_max > EllenBinTree_HP_max;
+        typedef details::EllenBinTreePQueue< cds::gc::DHP, typename Value::key_type, Value, traits_EllenBinTree_max > EllenBinTree_DHP_max;
+        typedef details::EllenBinTreePQueue< rcu_gpi, typename Value::key_type, Value, traits_EllenBinTree_max > EllenBinTree_RCU_gpi_max;
+        typedef details::EllenBinTreePQueue< rcu_gpb, typename Value::key_type, Value, traits_EllenBinTree_max > EllenBinTree_RCU_gpb_max;
+        typedef details::EllenBinTreePQueue< rcu_gpt, typename Value::key_type, Value, traits_EllenBinTree_max > EllenBinTree_RCU_gpt_max;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef details::EllenBinTreePQueue< rcu_shb, typename Value::key_type, Value, traits_EllenBinTree_max > EllenBinTree_RCU_shb_max;
+        typedef details::EllenBinTreePQueue< rcu_sht, typename Value::key_type, Value, traits_EllenBinTree_max > EllenBinTree_RCU_sht_max;
+#endif
+
+        struct traits_EllenBinTree_max_stat :
+            public cc::ellen_bintree::make_set_traits<
+                cc::ellen_bintree::key_extractor< typename Value::key_extractor >
+                ,cc::opt::less< std::less<Value> >
+                ,co::stat< cc::ellen_bintree::stat<> >
+            >::type
+        {};
+        typedef details::EllenBinTreePQueue< cds::gc::HP, typename Value::key_type, Value, traits_EllenBinTree_max_stat > EllenBinTree_HP_max_stat;
+        typedef details::EllenBinTreePQueue< cds::gc::DHP, typename Value::key_type, Value, traits_EllenBinTree_max_stat > EllenBinTree_DHP_max_stat;
+        typedef details::EllenBinTreePQueue< rcu_gpi, typename Value::key_type, Value, traits_EllenBinTree_max_stat > EllenBinTree_RCU_gpi_max_stat;
+        typedef details::EllenBinTreePQueue< rcu_gpb, typename Value::key_type, Value, traits_EllenBinTree_max_stat > EllenBinTree_RCU_gpb_max_stat;
+        typedef details::EllenBinTreePQueue< rcu_gpt, typename Value::key_type, Value, traits_EllenBinTree_max_stat > EllenBinTree_RCU_gpt_max_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef details::EllenBinTreePQueue< rcu_shb, typename Value::key_type, Value, traits_EllenBinTree_max_stat > EllenBinTree_RCU_shb_max_stat;
+        typedef details::EllenBinTreePQueue< rcu_sht, typename Value::key_type, Value, traits_EllenBinTree_max_stat > EllenBinTree_RCU_sht_max_stat;
+#endif
+
+        struct traits_EllenBinTree_min :
+            public cc::ellen_bintree::make_set_traits<
+                cc::ellen_bintree::key_extractor< typename Value::key_extractor >
+                ,cc::opt::less< std::greater<Value> >
+            >::type
+        {};
+        typedef details::EllenBinTreePQueue< cds::gc::HP, typename Value::key_type, Value, traits_EllenBinTree_min, false > EllenBinTree_HP_min;
+        typedef details::EllenBinTreePQueue< cds::gc::DHP, typename Value::key_type, Value, traits_EllenBinTree_min, false > EllenBinTree_DHP_min;
+        typedef details::EllenBinTreePQueue< rcu_gpi, typename Value::key_type, Value, traits_EllenBinTree_min, false > EllenBinTree_RCU_gpi_min;
+        typedef details::EllenBinTreePQueue< rcu_gpb, typename Value::key_type, Value, traits_EllenBinTree_min, false > EllenBinTree_RCU_gpb_min;
+        typedef details::EllenBinTreePQueue< rcu_gpt, typename Value::key_type, Value, traits_EllenBinTree_min, false > EllenBinTree_RCU_gpt_min;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef details::EllenBinTreePQueue< rcu_shb, typename Value::key_type, Value, traits_EllenBinTree_min, false > EllenBinTree_RCU_shb_min;
+        typedef details::EllenBinTreePQueue< rcu_sht, typename Value::key_type, Value, traits_EllenBinTree_min, false > EllenBinTree_RCU_sht_min;
+#endif
+
+        struct traits_EllenBinTree_min_stat :
+            public cc::ellen_bintree::make_set_traits<
+                cc::ellen_bintree::key_extractor< typename Value::key_extractor >
+                ,cc::opt::less< std::greater<Value> >
+                ,co::stat< cc::ellen_bintree::stat<> >
+            >::type
+        {};
+        typedef details::EllenBinTreePQueue< cds::gc::HP, typename Value::key_type, Value, traits_EllenBinTree_min_stat, false > EllenBinTree_HP_min_stat;
+        typedef details::EllenBinTreePQueue< cds::gc::DHP, typename Value::key_type, Value, traits_EllenBinTree_min_stat, false > EllenBinTree_DHP_min_stat;
+        typedef details::EllenBinTreePQueue< rcu_gpi, typename Value::key_type, Value, traits_EllenBinTree_min_stat, false > EllenBinTree_RCU_gpi_min_stat;
+        typedef details::EllenBinTreePQueue< rcu_gpb, typename Value::key_type, Value, traits_EllenBinTree_min_stat, false > EllenBinTree_RCU_gpb_min_stat;
+        typedef details::EllenBinTreePQueue< rcu_gpt, typename Value::key_type, Value, traits_EllenBinTree_min_stat, false > EllenBinTree_RCU_gpt_min_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef details::EllenBinTreePQueue< rcu_shb, typename Value::key_type, Value, traits_EllenBinTree_min_stat, false > EllenBinTree_RCU_shb_min_stat;
+        typedef details::EllenBinTreePQueue< rcu_sht, typename Value::key_type, Value, traits_EllenBinTree_min_stat, false > EllenBinTree_RCU_sht_min_stat;
+#endif
+
+        // Priority queue based on SkipListSet
+        struct traits_SkipList_max :
+            public cc::skip_list::make_traits <
+            cc::opt::less < std::less<Value> >
+            > ::type
+        {};
+        typedef details::SkipListPQueue< cds::gc::HP, Value, traits_SkipList_max > SkipList_HP_max;
+        typedef details::SkipListPQueue< cds::gc::DHP, Value, traits_SkipList_max > SkipList_DHP_max;
+        typedef details::SkipListPQueue< rcu_gpi, Value, traits_SkipList_max > SkipList_RCU_gpi_max;
+        typedef details::SkipListPQueue< rcu_gpb, Value, traits_SkipList_max > SkipList_RCU_gpb_max;
+        typedef details::SkipListPQueue< rcu_gpt, Value, traits_SkipList_max > SkipList_RCU_gpt_max;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef details::SkipListPQueue< rcu_shb, Value, traits_SkipList_max > SkipList_RCU_shb_max;
+        typedef details::SkipListPQueue< rcu_sht, Value, traits_SkipList_max > SkipList_RCU_sht_max;
+#endif
+
+        struct traits_SkipList_max_stat :
+            public cc::skip_list::make_traits<
+                cc::opt::less< std::less<Value> >
+                ,co::stat< cc::skip_list::stat<> >
+            >::type
+        {};
+        typedef details::SkipListPQueue< cds::gc::HP, Value, traits_SkipList_max_stat > SkipList_HP_max_stat;
+        typedef details::SkipListPQueue< cds::gc::DHP, Value, traits_SkipList_max_stat > SkipList_DHP_max_stat;
+        typedef details::SkipListPQueue< rcu_gpi, Value, traits_SkipList_max_stat > SkipList_RCU_gpi_max_stat;
+        typedef details::SkipListPQueue< rcu_gpb, Value, traits_SkipList_max_stat > SkipList_RCU_gpb_max_stat;
+        typedef details::SkipListPQueue< rcu_gpt, Value, traits_SkipList_max_stat > SkipList_RCU_gpt_max_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef details::SkipListPQueue< rcu_shb, Value, traits_SkipList_max_stat > SkipList_RCU_shb_max_stat;
+        typedef details::SkipListPQueue< rcu_sht, Value, traits_SkipList_max_stat > SkipList_RCU_sht_max_stat;
+#endif
+
+        struct traits_SkipList_min :
+            public cc::skip_list::make_traits<
+                cc::opt::less< std::greater<Value> >
+            >::type
+        {};
+        typedef details::SkipListPQueue< cds::gc::HP, Value, traits_SkipList_min, false > SkipList_HP_min;
+        typedef details::SkipListPQueue< cds::gc::DHP, Value, traits_SkipList_min, false > SkipList_DHP_min;
+        typedef details::SkipListPQueue< rcu_gpi, Value, traits_SkipList_min, false > SkipList_RCU_gpi_min;
+        typedef details::SkipListPQueue< rcu_gpb, Value, traits_SkipList_min, false > SkipList_RCU_gpb_min;
+        typedef details::SkipListPQueue< rcu_gpt, Value, traits_SkipList_min, false > SkipList_RCU_gpt_min;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef details::SkipListPQueue< rcu_shb, Value, traits_SkipList_min, false > SkipList_RCU_shb_min;
+        typedef details::SkipListPQueue< rcu_sht, Value, traits_SkipList_min, false > SkipList_RCU_sht_min;
+#endif
+
+        struct traits_SkipList_min_stat :
+            public cc::skip_list::make_traits<
+                cc::opt::less< std::greater<Value> >
+                ,co::stat< cc::skip_list::stat<> >
+            >::type
+        {};
+        typedef details::SkipListPQueue< cds::gc::HP, Value, traits_SkipList_min_stat, false > SkipList_HP_min_stat;
+        typedef details::SkipListPQueue< cds::gc::DHP, Value, traits_SkipList_min_stat, false > SkipList_DHP_min_stat;
+        typedef details::SkipListPQueue< rcu_gpi, Value, traits_SkipList_min_stat, false > SkipList_RCU_gpi_min_stat;
+        typedef details::SkipListPQueue< rcu_gpb, Value, traits_SkipList_min_stat, false > SkipList_RCU_gpb_min_stat;
+        typedef details::SkipListPQueue< rcu_gpt, Value, traits_SkipList_min_stat, false > SkipList_RCU_gpt_min_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef details::SkipListPQueue< rcu_shb, Value, traits_SkipList_min_stat, false > SkipList_RCU_shb_min_stat;
+        typedef details::SkipListPQueue< rcu_sht, Value, traits_SkipList_min_stat, false > SkipList_RCU_sht_min_stat;
+#endif
+
+
+        // FCPriorityQueue
+        struct traits_FCPQueue_stat : public
+            cds::container::fcpqueue::make_traits <
+            cds::opt::stat < cds::container::fcpqueue::stat<> >
+            > ::type
+        {};
+
+        typedef cds::container::FCPriorityQueue< Value >    FCPQueue_vector;
+        typedef cds::container::FCPriorityQueue< Value
+            ,std::priority_queue<Value>
+            ,traits_FCPQueue_stat
+        >    FCPQueue_vector_stat;
+
+        typedef cds::container::FCPriorityQueue< Value
+            ,std::priority_queue<Value, std::deque<Value> >
+        > FCPQueue_deque;
+        typedef cds::container::FCPriorityQueue< Value
+            ,std::priority_queue<Value, std::deque<Value> >
+            ,traits_FCPQueue_stat
+        > FCPQueue_deque_stat;
+
+        typedef cds::container::FCPriorityQueue< Value
+            ,std::priority_queue<Value, boost::container::deque<Value> >
+        > FCPQueue_boost_deque;
+        typedef cds::container::FCPriorityQueue< Value
+            ,std::priority_queue<Value, boost::container::deque<Value> >
+            ,traits_FCPQueue_stat
+        > FCPQueue_boost_deque_stat;
+
+        typedef cds::container::FCPriorityQueue< Value
+            ,std::priority_queue<Value, boost::container::stable_vector<Value> >
+        > FCPQueue_boost_stable_vector;
+        typedef cds::container::FCPriorityQueue< Value
+            ,std::priority_queue<Value, boost::container::stable_vector<Value> >
+            ,traits_FCPQueue_stat
+        > FCPQueue_boost_stable_vector_stat;
+
+        /// Standard priority_queue
+        typedef details::StdPQueue< Value, std::vector<Value>, cds::sync::spin> StdPQueue_vector_spin;
+        typedef details::StdPQueue< Value, std::vector<Value>, std::mutex >  StdPQueue_vector_mutex;
+        typedef details::StdPQueue< Value, std::deque<Value>, cds::sync::spin> StdPQueue_deque_spin;
+        typedef details::StdPQueue< Value, std::deque<Value>,  std::mutex >  StdPQueue_deque_mutex;
+    };
+
+
+    //template <typename Stat>
+    //static inline void check_statistics( Stat const& /*s*/ )
+    //{}
+
+    //static inline void check_statistics( cds::container::ellen_bintree::stat<> const& s )
+    //{
+    //    CPPUNIT_CHECK_CURRENT( s.m_nInternalNodeCreated.get() == s.m_nInternalNodeDeleted.get() );
+    //    CPPUNIT_CHECK_CURRENT( s.m_nUpdateDescCreated.get() == s.m_nUpdateDescDeleted.get() );
+    //}
+}   // namespace pqueue
+
+
+// *********************************************
+// Priority queue statistics
+namespace cds_test {
+
+    static inline property_stream& operator <<( property_stream& o, cds::opt::none )
+    {
+        return o;
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::container::fcpqueue::empty_stat const& )
+    {
+        return o;
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::container::fcpqueue::stat<> const& s )
+    {
+        return o 
+            << CDSSTRESS_STAT_OUT( s, m_nPush )
+            << CDSSTRESS_STAT_OUT( s, m_nPushMove )
+            << CDSSTRESS_STAT_OUT( s, m_nPop )
+            << CDSSTRESS_STAT_OUT( s, m_nFailedPop )
+            << CDSSTRESS_STAT_OUT_( "combining_factor", s.combining_factor() )
+            << CDSSTRESS_STAT_OUT( s, m_nOperationCount )
+            << CDSSTRESS_STAT_OUT( s, m_nCombiningCount )
+            << CDSSTRESS_STAT_OUT( s, m_nCompactPublicationList )
+            << CDSSTRESS_STAT_OUT( s, m_nDeactivatePubRecord )
+            << CDSSTRESS_STAT_OUT( s, m_nActivatePubRecord )
+            << CDSSTRESS_STAT_OUT( s, m_nPubRecordCreated )
+            << CDSSTRESS_STAT_OUT( s, m_nPubRecordDeteted )
+            << CDSSTRESS_STAT_OUT( s, m_nAcquirePubRecCount )
+            << CDSSTRESS_STAT_OUT( s, m_nReleasePubRecCount );
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::container::mspriority_queue::empty_stat const& /*s*/ )
+    {
+        return o;
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::container::mspriority_queue::stat<> const& s )
+    {
+        return o
+            << CDSSTRESS_STAT_OUT( s, m_nPushCount )
+            << CDSSTRESS_STAT_OUT( s, m_nPopCount )
+            << CDSSTRESS_STAT_OUT( s, m_nPushFailCount )
+            << CDSSTRESS_STAT_OUT( s, m_nPopFailCount )
+            << CDSSTRESS_STAT_OUT( s, m_nPushHeapifySwapCount )
+            << CDSSTRESS_STAT_OUT( s, m_nPopHeapifySwapCount );
+    }
+
+} // namespace cds_test
+
+#endif // #ifndef CDSSTRESS_PQUEUE_TYPES_H
diff --git a/test/stress/pqueue/push.cpp b/test/stress/pqueue/push.cpp
new file mode 100644 (file)
index 0000000..8b122d5
--- /dev/null
@@ -0,0 +1,264 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "pqueue_type.h"
+#include "item.h"
+
+namespace pqueue {
+
+    static size_t s_nThreadCount = 8;
+    static size_t s_nQueueSize = 2000000;
+
+    class pqueue_push: public cds_test::stress_fixture
+    {
+        typedef cds_test::stress_fixture base_class;
+
+    protected:
+        template <class PQueue>
+        class Producer: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+
+        public:
+            Producer( cds_test::thread_pool& pool, PQueue& queue )
+                : base_class( pool )
+                , m_Queue( queue )
+            {}
+
+            Producer( Producer& src )
+                : base_class( src )
+                , m_Queue( src.m_Queue )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Producer( *this );
+            }
+
+            virtual void test()
+            {
+                typedef typename PQueue::value_type value_type;
+
+                for ( auto it = m_arr.begin(); it != m_arr.end(); ++it ) {
+                    if ( !m_Queue.push( value_type( *it ) ))
+                        ++m_nPushError;
+                }
+            }
+
+            void prepare( size_t nStart, size_t nEnd )
+            {
+                m_arr.reserve( nEnd - nStart );
+                for ( size_t i = nStart; i < nEnd; ++i )
+                    m_arr.push_back( i );
+                shuffle( m_arr.begin(), m_arr.end() );
+            }
+
+        public:
+            PQueue&             m_Queue;
+            size_t              m_nPushError = 0;
+            std::vector<size_t> m_arr;
+        };
+
+    protected:
+        template <class PQueue>
+        void analyze( PQueue& q )
+        {
+            cds_test::thread_pool& pool = get_pool();
+
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                Producer<PQueue>& prod = static_cast<Producer<PQueue>&>(pool.get( i ));
+                EXPECT_EQ( prod.m_nPushError, 0 ) << "producer=" << i;
+            }
+            EXPECT_FALSE( q.empty());
+
+            typedef std::vector<size_t> vector_type;
+            vector_type arr;
+            arr.reserve( s_nQueueSize );
+
+            size_t nPopped = 0;
+            typename PQueue::value_type val;
+            while ( q.pop( val )) {
+                nPopped++;
+                arr.push_back( val.key );
+            }
+
+            EXPECT_EQ( arr.size(), s_nQueueSize );
+            auto it = arr.begin();
+            size_t nPrev = *it;
+            ++it;
+            for ( auto itEnd = arr.end(); it != itEnd; ++it ) {
+                EXPECT_EQ( nPrev - 1, *it );
+                nPrev = *it;
+            }
+        }
+
+        template <class PQueue>
+        void test( PQueue& q )
+        {
+            cds_test::thread_pool& pool = get_pool();
+            pool.add( new Producer<PQueue>( pool, q ), s_nThreadCount );
+
+            size_t nStart = 0;
+            size_t nThreadItemCount = s_nQueueSize / s_nThreadCount;
+            s_nQueueSize = nThreadItemCount * s_nThreadCount;
+
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                static_cast<Producer<PQueue>&>(pool.get( i )).prepare( nStart, nStart + nThreadItemCount );
+                nStart += nThreadItemCount;
+            }
+
+            propout() << std::make_pair( "thread_count", s_nThreadCount )
+                << std::make_pair( "push_count", s_nQueueSize );
+
+            std::chrono::milliseconds duration = pool.run();
+            propout() << std::make_pair( "duration", duration );
+
+            analyze( q );
+
+            propout() << q.statistics();
+        }
+
+    public:
+        static void SetUpTestCase()\r
+        {\r
+            cds_test::config const& cfg = get_config( "pqueue_push" );\r
+\r
+            s_nThreadCount = cfg.get_size_t( "ThreadCount", s_nThreadCount );
+            s_nQueueSize = cfg.get_size_t( "QueueSize", s_nQueueSize );
+
+            if ( s_nThreadCount == 0 )
+                s_nThreadCount = 1;
+            if ( s_nQueueSize == 0 )
+                s_nQueueSize = 1000;\r
+        }
+
+        //static void TearDownTestCase();
+    };
+
+#define CDSSTRESS_MSPriorityQueue( fixture_t, pqueue_t ) \
+    TEST_F( fixture_t, pqueue_t ) \
+    { \
+        typedef pqueue::Types<pqueue::simple_value>::pqueue_t pqueue_type; \
+        pqueue_type pq( s_nQueueSize ); \
+        test( pq ); \
+    }
+    CDSSTRESS_MSPriorityQueue( pqueue_push, MSPriorityQueue_dyn_less )
+    CDSSTRESS_MSPriorityQueue( pqueue_push, MSPriorityQueue_dyn_less_stat )
+    CDSSTRESS_MSPriorityQueue( pqueue_push, MSPriorityQueue_dyn_cmp )
+    CDSSTRESS_MSPriorityQueue( pqueue_push, MSPriorityQueue_dyn_mutex )
+
+#define CDSSTRESS_MSPriorityQueue_static( fixture_t, pqueue_t ) \
+    TEST_F( fixture_t, pqueue_t ) \
+    { \
+        typedef pqueue::Types<pqueue::simple_value>::pqueue_t pqueue_type; \
+        std::unique_ptr< pqueue_type > pq( new pqueue_type ); \
+        test( *pq.get() ); \
+    }
+    //CDSSTRESS_MSPriorityQueue( pqueue_push, MSPriorityQueue_static_less )
+    //CDSSTRESS_MSPriorityQueue( pqueue_push, MSPriorityQueue_static_less_stat )
+    //CDSSTRESS_MSPriorityQueue( pqueue_push, MSPriorityQueue_static_cmp )
+    //CDSSTRESS_MSPriorityQueue( pqueue_push, 1MSPriorityQueue_static_mutex )
+
+
+#define CDSSTRESS_PriorityQueue( fixture_t, pqueue_t ) \
+    TEST_F( fixture_t, pqueue_t ) \
+    { \
+        typedef pqueue::Types<pqueue::simple_value>::pqueue_t pqueue_type; \
+        pqueue_type pq; \
+        test( pq ); \
+    }
+    CDSSTRESS_PriorityQueue( pqueue_push, FCPQueue_vector )
+    CDSSTRESS_PriorityQueue( pqueue_push, FCPQueue_vector_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push, FCPQueue_deque )
+    CDSSTRESS_PriorityQueue( pqueue_push, FCPQueue_deque_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push, FCPQueue_boost_deque )
+    CDSSTRESS_PriorityQueue( pqueue_push, FCPQueue_boost_deque_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push, FCPQueue_boost_stable_vector )
+    CDSSTRESS_PriorityQueue( pqueue_push, FCPQueue_boost_stable_vector_stat )
+
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_HP_max )
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_HP_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_HP_min )
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_HP_min_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_DHP_max )
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_DHP_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_DHP_min )
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_DHP_min_stat )
+    // CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_RCU_gpi_max )
+    // CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_RCU_gpi_max_stat )
+    // CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_RCU_gpi_min )
+    // CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_RCU_gpi_min_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_RCU_gpb_max )
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_RCU_gpb_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_RCU_gpb_min )
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_RCU_gpb_min_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_RCU_gpt_max )
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_RCU_gpt_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_RCU_gpt_min )
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_RCU_gpt_min_stat )
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_RCU_shb_max )
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_RCU_shb_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_RCU_shb_min )
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_RCU_shb_min_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_RCU_sht_max )
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_RCU_sht_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_RCU_sht_min )
+    CDSSTRESS_PriorityQueue( pqueue_push, EllenBinTree_RCU_sht_min_stat )
+#endif
+
+    CDSSTRESS_PriorityQueue( pqueue_push, SkipList_HP_max )
+    CDSSTRESS_PriorityQueue( pqueue_push, SkipList_HP_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push, SkipList_HP_min )
+    CDSSTRESS_PriorityQueue( pqueue_push, SkipList_HP_min_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push, SkipList_DHP_max )
+    CDSSTRESS_PriorityQueue( pqueue_push, SkipList_DHP_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push, SkipList_DHP_min )
+    CDSSTRESS_PriorityQueue( pqueue_push, SkipList_DHP_min_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push, SkipList_RCU_gpi_max )
+    CDSSTRESS_PriorityQueue( pqueue_push, SkipList_RCU_gpi_min )
+    CDSSTRESS_PriorityQueue( pqueue_push, SkipList_RCU_gpb_max )
+    CDSSTRESS_PriorityQueue( pqueue_push, SkipList_RCU_gpb_min )
+    CDSSTRESS_PriorityQueue( pqueue_push, SkipList_RCU_gpt_max )
+    CDSSTRESS_PriorityQueue( pqueue_push, SkipList_RCU_gpt_min )
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+    CDSSTRESS_PriorityQueue( pqueue_push, SkipList_RCU_shb_max )
+    CDSSTRESS_PriorityQueue( pqueue_push, SkipList_RCU_shb_min )
+    CDSSTRESS_PriorityQueue( pqueue_push, SkipList_RCU_sht_max )
+    CDSSTRESS_PriorityQueue( pqueue_push, SkipList_RCU_sht_min )
+#endif
+
+    CDSSTRESS_PriorityQueue( pqueue_push, StdPQueue_vector_spin )
+    CDSSTRESS_PriorityQueue( pqueue_push, StdPQueue_vector_mutex )
+    CDSSTRESS_PriorityQueue( pqueue_push, StdPQueue_deque_spin )
+    CDSSTRESS_PriorityQueue( pqueue_push, StdPQueue_deque_mutex )
+
+} // namespace queue
+
diff --git a/test/stress/pqueue/push_pop.cpp b/test/stress/pqueue/push_pop.cpp
new file mode 100644 (file)
index 0000000..f9555a4
--- /dev/null
@@ -0,0 +1,317 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "pqueue_type.h"
+#include "item.h"
+
+namespace {
+    static size_t s_nPushThreadCount = 4;
+    static size_t s_nPopThreadCount = 4;
+    static size_t s_nQueueSize = 2000000;
+
+    atomics::atomic<size_t>  s_nProducerCount(0);
+
+    class pqueue_push_pop: public cds_test::stress_fixture
+    {
+        typedef cds_test::stress_fixture base_class;
+
+    public:
+        enum {
+            producer_thread,
+            consumer_thread
+        };
+
+        template <class PQueue>
+        class Producer: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+
+        public:
+            Producer( cds_test::thread_pool& pool, PQueue& queue )
+                : base_class( pool, producer_thread )
+                , m_Queue( queue )
+            {}
+
+            Producer( Producer& src )
+                : base_class( src )
+                , m_Queue( src.m_Queue )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Producer( *this );
+            }
+
+            virtual void test()
+            {
+                typedef typename PQueue::value_type value_type;
+
+                for ( auto it = m_arr.begin(); it != m_arr.end(); ++it ) {
+                    if ( !m_Queue.push( value_type( *it )))
+                        ++m_nPushError;
+                }
+
+                s_nProducerCount.fetch_sub( 1, atomics::memory_order_relaxed );
+            }
+
+            void prepare( size_t nStart, size_t nEnd )
+            {
+                m_arr.reserve( nEnd - nStart );
+                for ( size_t i = nStart; i < nEnd; ++i )
+                    m_arr.push_back( i );
+                shuffle( m_arr.begin(), m_arr.end() );
+            }
+
+        public:
+            PQueue&             m_Queue;
+            size_t              m_nPushError = 0;
+
+            typedef std::vector<size_t> array_type;
+            array_type          m_arr;
+        };
+
+        template <class PQueue>
+        class Consumer: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+
+        public:
+            Consumer( cds_test::thread_pool& pool, PQueue& queue )
+                : base_class( pool, consumer_thread )
+                , m_Queue( queue )
+            {}
+
+            Consumer( Consumer& src )
+                : base_class( src )
+                , m_Queue( src.m_Queue )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Consumer( *this );
+            }
+
+            virtual void test()
+            {
+                typename PQueue::value_type val;
+                while ( s_nProducerCount.load( atomics::memory_order_relaxed ) != 0 || !m_Queue.empty() ) {
+                    if ( m_Queue.pop( val ))
+                        ++m_nPopSuccess;
+                    else
+                        ++m_nPopFailed;
+                }
+            }
+
+        public:
+            PQueue&             m_Queue;
+            size_t              m_nPopSuccess = 0;
+            size_t              m_nPopFailed = 0;
+
+            typedef std::vector<size_t> array_type;
+            array_type          m_arr;
+        };
+
+    protected:
+
+        template <class PQueue>
+        void test( PQueue& q )
+        {
+            size_t const nThreadItemCount = s_nQueueSize / s_nPushThreadCount;
+            s_nQueueSize = nThreadItemCount * s_nPushThreadCount;
+
+            propout() << std::make_pair( "producer_count", s_nPushThreadCount )
+                << std::make_pair( "consunmer_count", s_nPopThreadCount )
+                << std::make_pair( "queue_size", s_nQueueSize );
+
+            cds_test::thread_pool& pool = get_pool();
+            pool.add( new Producer<PQueue>( pool, q ), s_nPushThreadCount );
+
+            size_t nStart = 0;
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                static_cast<Producer<PQueue>&>(pool.get( i )).prepare( nStart, nStart + nThreadItemCount );
+                nStart += nThreadItemCount;
+            }
+
+            pool.add( new Consumer<PQueue>( pool, q ), s_nPopThreadCount );
+
+            s_nProducerCount.store( s_nPushThreadCount, atomics::memory_order_release );
+
+            std::chrono::milliseconds duration = pool.run();
+            propout() << std::make_pair( "duration", duration );
+
+            // Analyze result
+            size_t nTotalPopped = 0;
+            size_t nPushFailed = 0;
+            size_t nPopFailed = 0;
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                cds_test::thread& t = pool.get(i);
+                if ( t.type() == consumer_thread ) {
+                    Consumer<PQueue>& cons = static_cast<Consumer<PQueue>&>( t );
+                    nTotalPopped += cons.m_nPopSuccess;
+                    nPopFailed += cons.m_nPopFailed;
+                }
+                else {
+                    assert( t.type() == producer_thread );
+                    Producer<PQueue>& prod = static_cast<Producer<PQueue>&>(t);
+                    nPushFailed += prod.m_nPushError;
+                    EXPECT_EQ( prod.m_nPushError , 0 ) << "producer " << i;
+                }
+            }
+
+            propout() << std::make_pair( "total_popped", nTotalPopped )
+                << std::make_pair( "empty_pop", nPopFailed )
+                << std::make_pair( "push_error", nPushFailed );
+
+            EXPECT_EQ( nTotalPopped, s_nQueueSize );
+            EXPECT_EQ( nPushFailed, 0 );
+
+            //check_statistics( testQueue.statistics() );
+            propout() << q.statistics();
+        }
+
+    public:
+        static void SetUpTestCase()\r
+        {\r
+            cds_test::config const& cfg = get_config( "pqueue_push_pop" );\r
+\r
+            s_nPushThreadCount = cfg.get_size_t( "PushThreadCount", s_nPushThreadCount );
+            s_nPopThreadCount = cfg.get_size_t( "PopThreadCount", s_nPopThreadCount );
+            s_nQueueSize = cfg.get_size_t( "QueueSize", s_nQueueSize );
+
+            if ( s_nPushThreadCount == 0 )
+                s_nPushThreadCount = 1;
+            if ( s_nPopThreadCount == 0 )
+                s_nPopThreadCount = 1;
+            if ( s_nQueueSize == 0 )
+                s_nQueueSize = 1000;\r
+        }
+
+        //static void TearDownTestCase();
+    };
+
+#define CDSSTRESS_MSPriorityQueue( fixture_t, pqueue_t ) \
+    TEST_F( fixture_t, pqueue_t ) \
+    { \
+        typedef pqueue::Types<pqueue::simple_value>::pqueue_t pqueue_type; \
+        pqueue_type pq( s_nQueueSize ); \
+        test( pq ); \
+    }
+    CDSSTRESS_MSPriorityQueue( pqueue_push_pop, MSPriorityQueue_dyn_less )
+    CDSSTRESS_MSPriorityQueue( pqueue_push_pop, MSPriorityQueue_dyn_less_stat )
+    CDSSTRESS_MSPriorityQueue( pqueue_push_pop, MSPriorityQueue_dyn_cmp )
+    CDSSTRESS_MSPriorityQueue( pqueue_push_pop, MSPriorityQueue_dyn_mutex )
+
+#define CDSSTRESS_MSPriorityQueue_static( fixture_t, pqueue_t ) \
+    TEST_F( fixture_t, pqueue_t ) \
+    { \
+        typedef pqueue::Types<pqueue::simple_value>::pqueue_t pqueue_type; \
+        std::unique_ptr< pqueue_type > pq( new pqueue_type ); \
+        test( *pq.get() ); \
+    }
+    //CDSSTRESS_MSPriorityQueue( pqueue_push_pop, MSPriorityQueue_static_less )
+    //CDSSTRESS_MSPriorityQueue( pqueue_push_pop, MSPriorityQueue_static_less_stat )
+    //CDSSTRESS_MSPriorityQueue( pqueue_push_pop, MSPriorityQueue_static_cmp )
+    //CDSSTRESS_MSPriorityQueue( pqueue_push_pop, 1MSPriorityQueue_static_mutex )
+
+
+#define CDSSTRESS_PriorityQueue( fixture_t, pqueue_t ) \
+    TEST_F( fixture_t, pqueue_t ) \
+    { \
+        typedef pqueue::Types<pqueue::simple_value>::pqueue_t pqueue_type; \
+        pqueue_type pq; \
+        test( pq ); \
+    }
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, FCPQueue_vector )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, FCPQueue_vector_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, FCPQueue_deque )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, FCPQueue_deque_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, FCPQueue_boost_deque )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, FCPQueue_boost_deque_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, FCPQueue_boost_stable_vector )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, FCPQueue_boost_stable_vector_stat )
+
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_HP_max )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_HP_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_HP_min )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_HP_min_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_DHP_max )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_DHP_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_DHP_min )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_DHP_min_stat )
+    // CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_RCU_gpi_max )
+    // CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_RCU_gpi_max_stat )
+    // CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_RCU_gpi_min )
+    // CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_RCU_gpi_min_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_RCU_gpb_max )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_RCU_gpb_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_RCU_gpb_min )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_RCU_gpb_min_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_RCU_gpt_max )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_RCU_gpt_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_RCU_gpt_min )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_RCU_gpt_min_stat )
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_RCU_shb_max )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_RCU_shb_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_RCU_shb_min )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_RCU_shb_min_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_RCU_sht_max )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_RCU_sht_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_RCU_sht_min )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, EllenBinTree_RCU_sht_min_stat )
+#endif
+
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, SkipList_HP_max )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, SkipList_HP_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, SkipList_HP_min )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, SkipList_HP_min_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, SkipList_DHP_max )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, SkipList_DHP_max_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, SkipList_DHP_min )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, SkipList_DHP_min_stat )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, SkipList_RCU_gpi_max )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, SkipList_RCU_gpi_min )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, SkipList_RCU_gpb_max )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, SkipList_RCU_gpb_min )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, SkipList_RCU_gpt_max )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, SkipList_RCU_gpt_min )
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, SkipList_RCU_shb_max )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, SkipList_RCU_shb_min )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, SkipList_RCU_sht_max )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, SkipList_RCU_sht_min )
+#endif
+
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, StdPQueue_vector_spin )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, StdPQueue_vector_mutex )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, StdPQueue_deque_spin )
+    CDSSTRESS_PriorityQueue( pqueue_push_pop, StdPQueue_deque_mutex )
+
+} // namespace
diff --git a/test/stress/queue/CMakeLists.txt b/test/stress/queue/CMakeLists.txt
new file mode 100644 (file)
index 0000000..cca5e7b
--- /dev/null
@@ -0,0 +1,26 @@
+set(PACKAGE_NAME stress-queue)
+
+set(CDSSTRESS_QUEUE_SOURCES
+    ../main.cpp
+    bounded_queue_fulness.cpp
+    intrusive_push_pop.cpp
+    pop.cpp
+    push.cpp
+    push_pop.cpp
+    random.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_executable(${PACKAGE_NAME} ${CDSSTRESS_QUEUE_SOURCES} $<TARGET_OBJECTS:${CDSSTRESS_FRAMEWORK_LIBRARY}>)
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/stress/queue/bounded_queue_fulness.cpp b/test/stress/queue/bounded_queue_fulness.cpp
new file mode 100644 (file)
index 0000000..1677512
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "queue_type.h"
+
+
+/*
+    Bounded queue test.
+    The test checks the behaviour of bounded queue when it is almost full.
+    Many algorithms says the queue is full when it is not, and vice versa.
+*/
+namespace {
+
+    static size_t s_nThreadCount = 8;
+    static size_t s_nQueueSize = 1024;
+    static size_t s_nPassCount = 1000000;
+
+    class bounded_queue_fulness: public cds_test::stress_fixture
+    {
+        typedef cds_test::stress_fixture base_class;
+
+    protected:
+        template <class Queue>
+        class Strain: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+
+        public:
+            Queue&              m_Queue;
+            size_t              m_nPushError = 0;
+            size_t              m_nPopError  = 0;
+
+        public:
+            Strain( cds_test::thread_pool& pool, Queue& q )
+                : base_class( pool )
+                , m_Queue( q )
+            {}
+
+            Strain( Strain& src )
+                : base_class( src )
+                , m_Queue( src.m_Queue )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Strain( *this );
+            }
+
+            virtual void test()
+            {
+                for ( size_t i = 0; i < s_nPassCount; ++i ) {
+                    if ( !m_Queue.push( i ))
+                        ++m_nPushError;
+                    size_t item;
+                    if ( !m_Queue.pop( item ))
+                        ++m_nPopError;
+                }
+            }
+        };
+
+    public:
+        static void SetUpTestCase()\r
+        {\r
+            cds_test::config const& cfg = get_config( "bounded_queue_fulness" );\r
+\r
+            s_nThreadCount = cfg.get_size_t( "ThreadCount", s_nThreadCount );
+            s_nQueueSize = cfg.get_size_t( "QueueSize", s_nQueueSize );
+            s_nPassCount = cfg.get_size_t( "PassCount", s_nPassCount );
+
+            if ( s_nThreadCount == 0 )
+                s_nThreadCount = 1;
+            if ( s_nQueueSize == 0 )
+                s_nQueueSize = 1024;
+            if ( s_nPassCount == 0 )
+                s_nPassCount = 1;
+        }\r
+\r
+        //static void TearDownTestCase();\r
+
+    protected:
+        template <class Queue>
+        void analyze( Queue& q )
+        {
+            cds_test::thread_pool& pool = get_pool();
+
+            size_t nPushError = 0;
+            size_t nPopError = 0;
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                Strain<Queue>& strain = static_cast<Strain<Queue> &>(pool.get( i ));
+                nPushError += strain.m_nPushError;
+                nPopError  += strain.m_nPopError;
+            }
+            EXPECT_TRUE( !q.empty());
+            EXPECT_EQ( nPushError, 0 );
+            EXPECT_EQ( nPopError, 0 );
+        }
+
+        template <class Queue>
+        void test( Queue& q )
+        {
+            cds_test::thread_pool& pool = get_pool();
+            pool.add( new Strain<Queue>( pool, q ), s_nThreadCount );
+
+            size_t nSize = q.capacity() - s_nThreadCount;
+            for ( size_t i = 0; i < nSize; ++i )
+                q.push( i );
+
+            propout() << std::make_pair( "thread_count", s_nThreadCount )
+                << std::make_pair( "push_count", s_nQueueSize )
+                << std::make_pair( "pass_count", s_nPassCount );
+
+            std::chrono::milliseconds duration = pool.run();
+            propout() << std::make_pair( "duration", duration );
+
+            analyze( q );
+
+            propout() << q.statistics();
+        }
+    };
+
+#undef CDSSTRESS_Queue_F
+#define CDSSTRESS_Queue_F( test_fixture, type_name ) \
+    TEST_F( test_fixture, type_name ) \
+    { \
+        typedef queue::Types< size_t >::type_name queue_type; \
+        queue_type queue( s_nQueueSize ); \
+        test( queue ); \
+    }
+
+    CDSSTRESS_TsigasQueue( bounded_queue_fulness )
+    CDSSTRESS_VyukovQueue( bounded_queue_fulness )
+
+#undef CDSSTRESS_Queue_F
+
+} // namespace queue
diff --git a/test/stress/queue/intrusive_push_pop.cpp b/test/stress/queue/intrusive_push_pop.cpp
new file mode 100644 (file)
index 0000000..35d705e
--- /dev/null
@@ -0,0 +1,583 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "intrusive_queue_type.h"
+#include <vector>
+#include <algorithm>
+
+// Multi-threaded random queue test
+namespace {
+
+    static size_t s_nReaderThreadCount = 4;
+    static size_t s_nWriterThreadCount = 4;
+    static size_t s_nQueueSize = 4000000;
+
+    static unsigned int s_nFCPassCount = 8;
+    static unsigned int s_nFCCompactFactor = 64;
+
+    static atomics::atomic< size_t > s_nProducerCount(0);
+    static size_t s_nThreadPushCount;
+    static CDS_CONSTEXPR const size_t c_nBadConsumer = 0xbadc0ffe;
+
+    struct empty {};
+
+    template <typename Base = empty >
+    struct value_type: public Base
+    {
+        size_t      nNo;
+        size_t      nWriterNo;
+        size_t      nConsumer;
+    };
+
+    class intrusive_queue_push_pop: public cds_test::stress_fixture
+    {
+        typedef cds_test::stress_fixture base_class;
+
+    protected:
+        enum {
+            producer_thread,
+            consumer_thread
+        };
+
+        template <class Queue>
+        class Producer: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+
+        public:
+            Producer( cds_test::thread_pool& pool, Queue& q )
+                : base_class( pool, producer_thread )
+                , m_Queue( q )
+            {}
+            Producer( Producer& src )
+                : base_class( src )
+                , m_Queue( src.m_Queue )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Producer( *this );
+            }
+
+            virtual void test()
+            {
+                size_t i = 0;
+                for ( typename Queue::value_type * p = m_pStart; p < m_pEnd; ) {
+                    p->nNo = i;
+                    p->nWriterNo = id();
+                    CDS_TSAN_ANNOTATE_HAPPENS_BEFORE( &p->nWriterNo );
+                    if ( m_Queue.push( *p )) {
+                        ++p;
+                        ++i;
+                    }
+                    else
+                        ++m_nPushFailed;
+                }
+                s_nProducerCount.fetch_sub( 1, atomics::memory_order_release );
+            }
+
+        public:
+            Queue&              m_Queue;
+            size_t              m_nPushFailed = 0;
+
+            // Interval in m_arrValue
+            typename Queue::value_type *       m_pStart;
+            typename Queue::value_type *       m_pEnd;
+        };
+
+        template <class Queue>
+        class Consumer: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+
+        public:
+            Queue&              m_Queue;
+            size_t              m_nPopEmpty = 0;
+            size_t              m_nPopped = 0;
+            size_t              m_nBadWriter = 0;
+
+            typedef std::vector<size_t> TPoppedData;
+            typedef std::vector<size_t>::iterator       data_iterator;
+            typedef std::vector<size_t>::const_iterator const_data_iterator;
+
+            std::vector<TPoppedData>        m_WriterData;
+
+        private:
+            void initPoppedData()
+            {
+                const size_t nWriterCount = s_nWriterThreadCount;
+                const size_t nWriterPushCount = s_nThreadPushCount;
+                m_WriterData.resize( nWriterCount );
+                for ( size_t i = 0; i < nWriterCount; ++i )
+                    m_WriterData[i].reserve( nWriterPushCount );
+            }
+
+        public:
+            Consumer( cds_test::thread_pool& pool, Queue& q )
+                : base_class( pool, consumer_thread )
+                , m_Queue( q )
+            {
+                initPoppedData();
+            }
+            Consumer( Consumer& src )
+                : base_class( src )
+                , m_Queue( src.m_Queue )
+            {
+                initPoppedData();
+            }
+
+            virtual thread * clone()
+            {
+                return new Consumer( *this );
+            }
+
+            virtual void test()
+            {
+                size_t const nTotalWriters = s_nWriterThreadCount;
+
+                while ( true ) {
+                    typename Queue::value_type * p = m_Queue.pop();
+                    if ( p ) {
+                        p->nConsumer = id();
+                        ++m_nPopped;
+                        CDS_TSAN_ANNOTATE_HAPPENS_AFTER( &p->nWriterNo );
+                        if ( p->nWriterNo < nTotalWriters )
+                            m_WriterData[ p->nWriterNo ].push_back( p->nNo );
+                        else
+                            ++m_nBadWriter;
+                    }
+                    else {
+                        ++m_nPopEmpty;
+                        if ( s_nProducerCount.load( atomics::memory_order_acquire ) == 0 && m_Queue.empty() )
+                            break;
+                    }
+                }
+            }
+        };
+
+        template <typename T>
+        class value_array
+        {
+            std::unique_ptr<T[]> m_pArr;
+        public:
+            value_array( size_t nSize )
+                : m_pArr( new T[nSize] )
+            {}
+
+            T * get() const { return m_pArr.get(); }
+        };
+
+    public:
+        static void SetUpTestCase()\r
+        {\r
+            cds_test::config const& cfg = get_config( "queue_random" );\r
+\r
+            s_nReaderThreadCount = cfg.get_size_t( "ReaderCount", s_nReaderThreadCount );
+            s_nWriterThreadCount = cfg.get_size_t( "WriterCount", s_nWriterThreadCount );
+            s_nQueueSize = cfg.get_size_t( "QueueSize", s_nQueueSize );
+
+            s_nFCPassCount = cfg.get_uint( "FCPassCount", s_nFCPassCount );
+            s_nFCCompactFactor = cfg.get_uint( "FCCompactFactor", s_nFCCompactFactor );
+
+            if ( s_nReaderThreadCount == 0 )
+                s_nReaderThreadCount = 1;
+            if ( s_nWriterThreadCount == 0 )
+                s_nWriterThreadCount = 1;
+            if ( s_nQueueSize == 0 )
+                s_nQueueSize = 1000;
+        }\r
+\r
+        //static void TearDownTestCase();\r
+
+    protected:
+        template <class Queue>
+        void analyze( Queue& testQueue, size_t /*nLeftOffset*/, size_t nRightOffset )
+        {
+            typedef Consumer<Queue> Reader;
+            typedef Producer<Queue> Writer;
+            typedef typename Reader::const_data_iterator    ReaderIterator;
+
+            size_t nPostTestPops = 0;
+            while ( testQueue.pop() )
+                ++nPostTestPops;
+
+            size_t nTotalPops = 0;
+            size_t nPopFalse = 0;
+            size_t nPoppedItems = 0;
+            size_t nPushFailed = 0;
+
+            std::vector< Reader * > arrReaders;
+
+            cds_test::thread_pool& pool = get_pool();
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                cds_test::thread& thr = pool.get( i );
+                if ( thr.type() == consumer_thread ) {
+                    Consumer<Queue>& consumer = static_cast<Consumer<Queue>&>( thr );
+                    nTotalPops += consumer.m_nPopped;
+                    nPopFalse += consumer.m_nPopEmpty;
+                    arrReaders.push_back( &consumer );
+                    EXPECT_EQ( consumer.m_nBadWriter, 0 ) << "consumer " << (i - s_nWriterThreadCount);
+
+                    size_t nPopped = 0;
+                    for ( size_t n = 0; n < s_nWriterThreadCount; ++n )
+                        nPopped += consumer.m_WriterData[n].size();
+
+                    {
+                        std::stringstream s;
+                        s << "consumer" << (i - s_nWriterThreadCount) << "_popped";
+                        propout() << std::make_pair( s.str().c_str(), nPopped );
+                    }
+                    nPoppedItems += nPopped;
+                }
+                else {
+                    Producer<Queue>& producer = static_cast<Producer<Queue>&>( thr );
+                    nPushFailed += producer.m_nPushFailed;
+                    if ( !std::is_base_of<cds::bounded_container, Queue>::value ) {
+                        EXPECT_EQ( producer.m_nPushFailed, 0 ) << "producer " << i;
+                    }
+                }
+            }
+            EXPECT_EQ( nTotalPops, nPoppedItems );
+
+            propout() << std::make_pair( "success_pop", nTotalPops )
+                << std::make_pair( "empty_pop", nPopFalse )
+                << std::make_pair( "failed_push", nPushFailed );
+
+            size_t nQueueSize = s_nThreadPushCount * s_nWriterThreadCount;
+            EXPECT_EQ( nTotalPops + nPostTestPops, nQueueSize );
+            EXPECT_TRUE( testQueue.empty() );
+
+            // Test that all items have been popped
+            // Test FIFO order
+            for ( size_t nWriter = 0; nWriter < s_nWriterThreadCount; ++nWriter ) {
+                std::vector<size_t> arrData;
+                arrData.reserve( s_nThreadPushCount );
+                for ( size_t nReader = 0; nReader < arrReaders.size(); ++nReader ) {
+                    ReaderIterator it = arrReaders[nReader]->m_WriterData[nWriter].begin();
+                    ReaderIterator itEnd = arrReaders[nReader]->m_WriterData[nWriter].end();
+                    if ( it != itEnd ) {
+                        ReaderIterator itPrev = it;
+                        for ( ++it; it != itEnd; ++it ) {
+                            EXPECT_LT( *itPrev, *it + nRightOffset )
+                                << "Reader " << nReader << ", Writer " << nWriter << ": prev=" << *itPrev << ", cur=" << *it;
+                            itPrev = it;
+                        }
+                    }
+
+                    for ( it = arrReaders[nReader]->m_WriterData[nWriter].begin(); it != itEnd; ++it )
+                        arrData.push_back( *it );
+                }
+                std::sort( arrData.begin(), arrData.end() );
+                for ( size_t i=1; i < arrData.size(); ++i ) {
+                    if ( arrData[i-1] + 1 != arrData[i] ) {
+                        EXPECT_EQ( arrData[i-1] + 1,  arrData[i] ) << "Writer " << nWriter << ": [" << (i-1) << "]=" << arrData[i-1] 
+                            << ", [" << i << "]=" << arrData[i];
+                    }
+                }
+
+                EXPECT_EQ( arrData[0], 0 ) << "Writer " << nWriter;
+                EXPECT_EQ( arrData[arrData.size() - 1], s_nThreadPushCount - 1 ) << "Writer " << nWriter;
+            }
+        }
+
+        template <class Queue>
+        void test( Queue& q, value_array<typename Queue::value_type>& arrValue, size_t nLeftOffset, size_t nRightOffset )
+        {
+            s_nThreadPushCount = s_nQueueSize / s_nWriterThreadCount;
+            s_nQueueSize = s_nThreadPushCount * s_nWriterThreadCount;
+            propout() << std::make_pair( "producer_count", s_nWriterThreadCount )
+                << std::make_pair( "consumer_count", s_nReaderThreadCount )
+                << std::make_pair( "queue_size", s_nQueueSize );
+
+            typename Queue::value_type * pValStart = arrValue.get();
+            typename Queue::value_type * pValEnd = pValStart + s_nQueueSize;
+
+            cds_test::thread_pool& pool = get_pool();
+            s_nProducerCount.store( s_nWriterThreadCount, atomics::memory_order_release );
+
+            // Writers must be first
+            pool.add( new Producer<Queue>( pool, q ), s_nWriterThreadCount );
+            {
+                for ( typename Queue::value_type * it = pValStart; it != pValEnd; ++it ) {
+                    it->nNo = 0;
+                    it->nWriterNo = 0;
+                    it->nConsumer = c_nBadConsumer;
+                }
+
+                typename Queue::value_type * pStart = pValStart;
+                for ( size_t i = 0; i < pool.size(); ++i ) {
+                    Producer<Queue>& producer = static_cast<Producer<Queue>&>( pool.get( i ));
+                    producer.m_pStart = pStart;
+                    pStart += s_nThreadPushCount;
+                    producer.m_pEnd = pStart;
+                }
+            }
+            pool.add( new Consumer<Queue>( pool, q ), s_nReaderThreadCount );
+
+            std::chrono::milliseconds duration = pool.run();
+            propout() << std::make_pair( "duration", duration );
+
+            // Check that all values have been dequeued
+            {
+                size_t nBadConsumerCount = 0;
+                typename Queue::value_type * pEnd = pValStart + s_nQueueSize;
+                for ( typename Queue::value_type * it = pValStart; it != pEnd; ++it  ) {
+                    if ( it->nConsumer == c_nBadConsumer )
+                        ++nBadConsumerCount;
+                }
+                EXPECT_EQ( nBadConsumerCount, 0 );
+            }
+
+            analyze( q, nLeftOffset, nRightOffset );
+
+            propout() << q.statistics();
+        }
+
+/*
+        template <typename Queue>
+        void test( Queue& q )
+        {
+            value_array<typename Queue::value_type> arrValue( s_nQueueSize );
+            {
+                {
+                    Queue q;
+                    test_with( q, arrValue, 0, 0 );
+                }
+                Queue::gc::force_dispose();
+            }
+        }
+
+        template <typename Queue>
+        void test_boost()
+        {
+            value_array<typename Queue::value_type> arrValue( s_nQueueSize );
+            {
+                Queue q;
+                test_with(q, arrValue, 0, 0);
+            }
+        }
+
+        template <typename Queue>
+        void test_bounded()
+        {
+            value_array<typename Queue::value_type> arrValue( s_nQueueSize );
+            Queue q;
+            test_with(q, arrValue, 0, 0);
+        }
+
+        template <typename Queue>
+        void test_fcqueue()
+        {
+            value_array<typename Queue::value_type> arrValue( s_nQueueSize );
+            CPPUNIT_MSG( "Combining pass count: " << s_nFCPassCount << ", compact factor: " << s_nFCCompactFactor );
+            Queue q( s_nFCCompactFactor, s_nFCPassCount );
+            test_with(q, arrValue, 0, 0);
+        }
+
+        template <typename Queue>
+        void test_segmented()
+        {
+            value_array<typename Queue::value_type> arrValue( s_nQueueSize );
+            for ( size_t nSegmentSize = 4; nSegmentSize <= 256; nSegmentSize *= 4 ) {
+                CPPUNIT_MSG( "Segment size: " << nSegmentSize );
+                {
+                    Queue q( nSegmentSize );
+                    test_with( q, arrValue, nSegmentSize * 2, nSegmentSize );
+                }
+                Queue::gc::force_dispose();
+            }
+        }
+
+        template <typename Queue>
+        void test_spqueue()
+        {
+            value_array<typename Queue::value_type> arrValue( s_nQueueSize );
+            for ( size_t nArraySize = 2; nArraySize <= 64; nArraySize *= 2 ) {
+                CPPUNIT_MSG( "Array size: " << nArraySize );
+                {
+                    Queue q( nArraySize );
+                    test_with( q, arrValue, 0, 0 );
+                }
+                Queue::gc::force_dispose();
+            }
+        }
+*/
+    };
+
+#define CDSSTRESS_QUEUE_F( QueueType, NodeType ) \
+    TEST_F( intrusive_queue_push_pop, QueueType ) \
+    { \
+        typedef value_type<NodeType> node_type; \
+        typedef typename queue::Types< node_type >::QueueType queue_type; \
+        value_array<typename queue_type::value_type> arrValue( s_nQueueSize ); \
+        { \
+            queue_type q; \
+            test( q, arrValue, 0, 0 ); \
+        } \
+        queue_type::gc::force_dispose(); \
+    }
+
+    CDSSTRESS_QUEUE_F( MSQueue_HP,       cds::intrusive::msqueue::node<cds::gc::HP> )
+    CDSSTRESS_QUEUE_F( MSQueue_HP_ic,    cds::intrusive::msqueue::node<cds::gc::HP> )
+    CDSSTRESS_QUEUE_F( MSQueue_HP_stat,  cds::intrusive::msqueue::node<cds::gc::HP> )
+    CDSSTRESS_QUEUE_F( MSQueue_DHP,      cds::intrusive::msqueue::node<cds::gc::DHP> )
+    CDSSTRESS_QUEUE_F( MSQueue_DHP_ic,   cds::intrusive::msqueue::node<cds::gc::DHP> )
+    CDSSTRESS_QUEUE_F( MSQueue_DHP_stat, cds::intrusive::msqueue::node<cds::gc::DHP> )
+
+    CDSSTRESS_QUEUE_F( MoirQueue_HP,       cds::intrusive::msqueue::node<cds::gc::HP> )
+    CDSSTRESS_QUEUE_F( MoirQueue_HP_ic,    cds::intrusive::msqueue::node<cds::gc::HP> )
+    CDSSTRESS_QUEUE_F( MoirQueue_HP_stat,  cds::intrusive::msqueue::node<cds::gc::HP> )
+    CDSSTRESS_QUEUE_F( MoirQueue_DHP,      cds::intrusive::msqueue::node<cds::gc::DHP> )
+    CDSSTRESS_QUEUE_F( MoirQueue_DHP_ic,   cds::intrusive::msqueue::node<cds::gc::DHP> )
+    CDSSTRESS_QUEUE_F( MoirQueue_DHP_stat, cds::intrusive::msqueue::node<cds::gc::DHP> )
+
+    CDSSTRESS_QUEUE_F( OptimisticQueue_HP,       cds::intrusive::optimistic_queue::node<cds::gc::HP> )
+    CDSSTRESS_QUEUE_F( OptimisticQueue_HP_ic,    cds::intrusive::optimistic_queue::node<cds::gc::HP> )
+    CDSSTRESS_QUEUE_F( OptimisticQueue_HP_stat,  cds::intrusive::optimistic_queue::node<cds::gc::HP> )
+    CDSSTRESS_QUEUE_F( OptimisticQueue_DHP,      cds::intrusive::optimistic_queue::node<cds::gc::DHP> )
+    CDSSTRESS_QUEUE_F( OptimisticQueue_DHP_ic,   cds::intrusive::optimistic_queue::node<cds::gc::DHP> )
+    CDSSTRESS_QUEUE_F( OptimisticQueue_DHP_stat, cds::intrusive::optimistic_queue::node<cds::gc::DHP> )
+
+    CDSSTRESS_QUEUE_F( BasketQueue_HP,       cds::intrusive::basket_queue::node<cds::gc::HP> )
+    CDSSTRESS_QUEUE_F( BasketQueue_HP_ic,    cds::intrusive::basket_queue::node<cds::gc::HP> )
+    CDSSTRESS_QUEUE_F( BasketQueue_HP_stat,  cds::intrusive::basket_queue::node<cds::gc::HP> )
+    CDSSTRESS_QUEUE_F( BasketQueue_DHP,      cds::intrusive::basket_queue::node<cds::gc::DHP> )
+    CDSSTRESS_QUEUE_F( BasketQueue_DHP_ic,   cds::intrusive::basket_queue::node<cds::gc::DHP> )
+    CDSSTRESS_QUEUE_F( BasketQueue_DHP_stat, cds::intrusive::basket_queue::node<cds::gc::DHP> )
+#undef CDSSTRESS_QUEUE_F
+
+
+#define CDSSTRESS_QUEUE_F( QueueType, NodeType ) \
+    TEST_F( intrusive_queue_push_pop, QueueType ) \
+    { \
+        typedef value_type<NodeType> node_type; \
+        typedef typename queue::Types< node_type >::QueueType queue_type; \
+        value_array<typename queue_type::value_type> arrValue( s_nQueueSize ); \
+        queue_type q( s_nFCCompactFactor, s_nFCPassCount ); \
+        test( q, arrValue, 0, 0 ); \
+    }
+
+    CDSSTRESS_QUEUE_F(FCQueue_list_delay2,                      boost::intrusive::list_base_hook<> )
+    CDSSTRESS_QUEUE_F(FCQueue_list_delay2_elimination,          boost::intrusive::list_base_hook<> )
+    CDSSTRESS_QUEUE_F(FCQueue_list_delay2_elimination_stat,     boost::intrusive::list_base_hook<> )
+    CDSSTRESS_QUEUE_F(FCQueue_list_expbackoff_elimination,      boost::intrusive::list_base_hook<> )
+    CDSSTRESS_QUEUE_F(FCQueue_list_expbackoff_elimination_stat, boost::intrusive::list_base_hook<> )
+#undef CDSSTRESS_QUEUE_F
+
+
+#define CDSSTRESS_QUEUE_F( QueueType ) \
+    TEST_F( intrusive_queue_push_pop, QueueType ) \
+    { \
+        typedef typename queue::Types< value_type<> >::QueueType queue_type; \
+        value_array<typename queue_type::value_type> arrValue( s_nQueueSize ); \
+        queue_type q( s_nQueueSize ); \
+        test( q, arrValue, 0, 0 ); \
+    }
+
+    CDSSTRESS_QUEUE_F( TsigasCycleQueue_dyn )
+    CDSSTRESS_QUEUE_F( TsigasCycleQueue_dyn_ic )
+    CDSSTRESS_QUEUE_F( VyukovMPMCCycleQueue_dyn )
+    CDSSTRESS_QUEUE_F( VyukovMPMCCycleQueue_dyn_ic )
+#undef CDSSTRESS_QUEUE_F
+
+
+    // ********************************************************************
+    // SegmentedQueue test
+
+    class intrusive_segmented_queue_push_pop
+        : public intrusive_queue_push_pop
+        , public ::testing::WithParamInterface< size_t >
+    {
+        typedef intrusive_queue_push_pop base_class;
+
+    protected:
+        template <typename Queue>
+        void test()
+        {
+            value_array<typename Queue::value_type> arrValue( s_nQueueSize ); \
+            {
+                size_t quasi_factor = GetParam();
+
+                Queue q( quasi_factor );
+                propout() << std::make_pair( "quasi_factor", quasi_factor );
+
+                base_class::test( q, arrValue, quasi_factor * 2, quasi_factor );
+            }
+            Queue::gc::force_dispose();
+        }
+
+    public:
+        static std::vector< size_t > get_test_parameters()
+        {
+            cds_test::config const& cfg = cds_test::stress_fixture::get_config( "intrusive_queue_push_pop" );
+            bool bIterative = cfg.get_bool( "SegmentedQueue_Iterate", false );
+            size_t quasi_factor = cfg.get_size_t( "SegmentedQueue_SegmentSize", 256 );
+
+            std::vector<size_t> args;
+            if ( bIterative && quasi_factor > 4 ) {
+                for ( size_t qf = 4; qf <= quasi_factor; qf *= 2 )
+                    args.push_back( qf );
+            }
+            else {
+                if ( quasi_factor > 2 )
+                    args.push_back( quasi_factor );
+                else
+                    args.push_back( 2 );
+            }
+
+            return args;
+        }
+    };
+
+#define CDSSTRESS_QUEUE_F( type_name ) \
+    TEST_P( intrusive_segmented_queue_push_pop, type_name ) \
+    { \
+        typedef typename queue::Types<value_type<>>::type_name queue_type; \
+        test< queue_type >(); \
+    }
+
+    CDSSTRESS_QUEUE_F( SegmentedQueue_HP_spin )
+    //CDSSTRESS_QUEUE_F( SegmentedQueue_HP_spin_padding )
+    CDSSTRESS_QUEUE_F( SegmentedQueue_HP_spin_stat )
+    CDSSTRESS_QUEUE_F( SegmentedQueue_HP_mutex )
+    //CDSSTRESS_QUEUE_F( SegmentedQueue_HP_mutex_padding )
+    CDSSTRESS_QUEUE_F( SegmentedQueue_HP_mutex_stat )
+    CDSSTRESS_QUEUE_F( SegmentedQueue_DHP_spin )
+    //CDSSTRESS_QUEUE_F( SegmentedQueue_DHP_spin_padding )
+    CDSSTRESS_QUEUE_F( SegmentedQueue_DHP_spin_stat )
+    CDSSTRESS_QUEUE_F( SegmentedQueue_DHP_mutex )
+    //CDSSTRESS_QUEUE_F( SegmentedQueue_DHP_mutex_padding )
+    CDSSTRESS_QUEUE_F( SegmentedQueue_DHP_mutex_stat )
+
+    INSTANTIATE_TEST_CASE_P( SQ,
+        intrusive_segmented_queue_push_pop,
+        ::testing::ValuesIn( intrusive_segmented_queue_push_pop::get_test_parameters() ) );
+
+} // namespace
diff --git a/test/stress/queue/intrusive_queue_type.h b/test/stress/queue/intrusive_queue_type.h
new file mode 100644 (file)
index 0000000..d6f4836
--- /dev/null
@@ -0,0 +1,530 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSSTRESS_INTRUSIVE_QUEUE_TYPES_H
+#define CDSSTRESS_INTRUSIVE_QUEUE_TYPES_H
+
+#include <cds/intrusive/msqueue.h>
+#include <cds/intrusive/moir_queue.h>
+#include <cds/intrusive/optimistic_queue.h>
+#include <cds/intrusive/tsigas_cycle_queue.h>
+#include <cds/intrusive/vyukov_mpmc_cycle_queue.h>
+#include <cds/intrusive/basket_queue.h>
+#include <cds/intrusive/fcqueue.h>
+#include <cds/intrusive/segmented_queue.h>
+
+#include <cds/gc/hp.h>
+#include <cds/gc/dhp.h>
+
+#include <boost/intrusive/slist.hpp>
+
+#include <cds_test/stress_test.h>
+#include "print_stat.h"
+
+namespace queue {
+
+    namespace details {
+        struct empty_stat {};
+
+        template <typename T, typename Lock=std::mutex>
+        class BoostSList
+        {
+            typedef boost::intrusive::slist< T, boost::intrusive::cache_last<true> >    slist_type;
+            typedef Lock lock_type;
+            typedef std::lock_guard<lock_type> lock_guard;
+
+            slist_type  m_List;
+            mutable lock_type m_Lock;
+        public:
+            typedef T value_type;
+
+        public:
+            bool push( value_type& v )
+            {
+                lock_guard l( m_Lock );
+                m_List.push_back( v );
+                return true;
+            }
+
+            bool enqueue( value_type& v )
+            {
+                return push( v );
+            }
+
+            value_type * pop()
+            {
+                lock_guard l( m_Lock );
+                if ( m_List.empty() )
+                    return nullptr;
+                value_type& v = m_List.front();
+                m_List.pop_front();
+                return &v;
+            }
+            value_type * deque()
+            {
+                return pop();
+            }
+
+            bool empty() const
+            {
+                lock_guard l( m_Lock );
+                return m_List.empty();
+            }
+
+            size_t size() const
+            {
+                lock_guard l( m_Lock );
+                return m_List.size();
+            }
+
+            empty_stat statistics() const
+            {
+                return empty_stat();
+            }
+        };
+    } // namespace details
+
+    template <typename T>
+    struct Types 
+    {
+        // MSQueue, MoirQueue
+        struct traits_MSQueue_HP : public cds::intrusive::msqueue::traits
+        {
+            typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::HP > > hook;
+        };
+        typedef cds::intrusive::MSQueue< cds::gc::HP, T, traits_MSQueue_HP > MSQueue_HP;
+        typedef cds::intrusive::MoirQueue< cds::gc::HP, T, traits_MSQueue_HP > MoirQueue_HP;
+
+        struct traits_MSQueue_HP_seqcst : public cds::intrusive::msqueue::traits
+        {
+            typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::HP > > hook;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cds::intrusive::MSQueue< cds::gc::HP, T, traits_MSQueue_HP_seqcst > MSQueue_HP_seqcst;
+        typedef cds::intrusive::MoirQueue< cds::gc::HP, T, traits_MSQueue_HP_seqcst > MoirQueue_HP_seqcst;
+
+        struct traits_MSQueue_DHP : public cds::intrusive::msqueue::traits
+        {
+            typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::DHP > > hook;
+        };
+        typedef cds::intrusive::MSQueue< cds::gc::DHP, T, traits_MSQueue_DHP > MSQueue_DHP;
+        typedef cds::intrusive::MoirQueue< cds::gc::DHP, T, traits_MSQueue_DHP > MoirQueue_DHP;
+
+        struct traits_MSQueue_DHP_seqcst : public cds::intrusive::msqueue::traits
+        {
+            typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::DHP > > hook;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cds::intrusive::MSQueue< cds::gc::DHP, T, traits_MSQueue_DHP_seqcst > MSQueue_DHP_seqcst;
+        typedef cds::intrusive::MoirQueue< cds::gc::DHP, T, traits_MSQueue_DHP_seqcst > MoirQueue_DHP_seqcst;
+
+        // MSQueue + item counter
+        struct traits_MSQueue_HP_ic : public cds::intrusive::msqueue::traits
+        {
+            typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::HP > > hook;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cds::intrusive::MSQueue< cds::gc::HP, T, traits_MSQueue_HP_ic > MSQueue_HP_ic;
+        typedef cds::intrusive::MoirQueue< cds::gc::HP, T, traits_MSQueue_HP_ic > MoirQueue_HP_ic;
+
+        struct traits_MSQueue_DHP_ic : public cds::intrusive::msqueue::traits
+        {
+            typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::DHP > > hook;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cds::intrusive::MSQueue< cds::gc::DHP, T, traits_MSQueue_DHP_ic > MSQueue_DHP_ic;
+        typedef cds::intrusive::MoirQueue< cds::gc::DHP, T, traits_MSQueue_DHP_ic > MoirQueue_DHP_ic;
+
+        // MSQueue + stat
+        struct traits_MSQueue_HP_stat : public cds::intrusive::msqueue::traits
+        {
+            typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::HP > > hook;
+            typedef cds::intrusive::msqueue::stat<> stat;
+        };
+        typedef cds::intrusive::MSQueue< cds::gc::HP, T, traits_MSQueue_HP_stat > MSQueue_HP_stat;
+        typedef cds::intrusive::MoirQueue< cds::gc::HP, T, traits_MSQueue_HP_stat > MoirQueue_HP_stat;
+
+        struct traits_MSQueue_DHP_stat : public cds::intrusive::msqueue::traits
+        {
+            typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::DHP > > hook;
+            typedef cds::intrusive::msqueue::stat<> stat;
+        };
+        typedef cds::intrusive::MSQueue< cds::gc::DHP, T, traits_MSQueue_DHP_stat > MSQueue_DHP_stat;
+        typedef cds::intrusive::MoirQueue< cds::gc::DHP, T, traits_MSQueue_DHP_stat > MoirQueue_DHP_stat;
+
+
+        // OptimisticQueue
+        struct traits_OptimisticQueue_HP : public cds::intrusive::optimistic_queue::traits
+        {
+            typedef cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::HP > > hook;
+        };
+        typedef cds::intrusive::OptimisticQueue< cds::gc::HP, T, traits_OptimisticQueue_HP > OptimisticQueue_HP;
+
+        struct traits_OptimisticQueue_HP_seqcst : public
+            cds::intrusive::optimistic_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
+                , cds::opt::memory_model< cds::opt::v::sequential_consistent >
+            >::type
+        {};
+        typedef cds::intrusive::OptimisticQueue< cds::gc::HP, T, traits_OptimisticQueue_HP_seqcst > OptimisticQueue_HP_seqcst;
+
+        struct traits_OptimisticQueue_DHP : public cds::intrusive::optimistic_queue::traits
+        {
+            typedef cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::DHP > > hook;
+        };
+        typedef cds::intrusive::OptimisticQueue< cds::gc::DHP, T, traits_OptimisticQueue_DHP > OptimisticQueue_DHP;
+
+        struct traits_OptimisticQueue_DHP_seqcst: public
+            cds::intrusive::optimistic_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
+                , cds::opt::memory_model< cds::opt::v::sequential_consistent >
+            >::type
+        {};
+        typedef cds::intrusive::OptimisticQueue< cds::gc::DHP, T, traits_OptimisticQueue_DHP_seqcst > OptimisticQueue_DHP_seqcst;
+
+        // OptimisticQueue + item counter
+        struct traits_OptimisticQueue_HP_ic: public
+            cds::intrusive::optimistic_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
+                , cds::opt::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef cds::intrusive::OptimisticQueue< cds::gc::HP, T, traits_OptimisticQueue_HP_ic > OptimisticQueue_HP_ic;
+
+        struct traits_OptimisticQueue_DHP_ic: public
+            cds::intrusive::optimistic_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
+                , cds::opt::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef cds::intrusive::OptimisticQueue< cds::gc::DHP, T, traits_OptimisticQueue_DHP_ic > OptimisticQueue_DHP_ic;
+
+        // OptimisticQueue + stat
+        struct traits_OptimisticQueue_HP_stat: public
+            cds::intrusive::optimistic_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
+                , cds::opt::stat< cds::intrusive::optimistic_queue::stat<> >
+            >::type
+        {};
+        typedef cds::intrusive::OptimisticQueue< cds::gc::HP, T, traits_OptimisticQueue_HP_stat > OptimisticQueue_HP_stat;
+
+        struct traits_OptimisticQueue_DHP_stat: public
+            cds::intrusive::optimistic_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
+                , cds::opt::stat< cds::intrusive::optimistic_queue::stat<> >
+            >::type
+        {};
+        typedef cds::intrusive::OptimisticQueue< cds::gc::DHP, T, traits_OptimisticQueue_DHP_stat > OptimisticQueue_DHP_stat;
+
+        // TsigasCycleQueue
+        class TsigasCycleQueue_dyn
+            : public cds::intrusive::TsigasCycleQueue< T,
+                typename cds::intrusive::tsigas_queue::make_traits<
+                    cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
+                >::type
+            >
+        {
+            typedef cds::intrusive::TsigasCycleQueue< T,
+                typename cds::intrusive::tsigas_queue::make_traits<
+                    cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
+                >::type
+            > base_class;
+        public:
+            TsigasCycleQueue_dyn()
+                : base_class( 1024 * 64 )
+            {}
+
+            TsigasCycleQueue_dyn( size_t nCapacity )
+                : base_class( nCapacity )
+            {}
+
+            cds::opt::none statistics() const
+            {
+                return cds::opt::none();
+            }
+        };
+
+        class TsigasCycleQueue_dyn_ic
+            : public cds::intrusive::TsigasCycleQueue< T,
+                typename cds::intrusive::tsigas_queue::make_traits<
+                    cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
+                    ,cds::opt::item_counter< cds::atomicity::item_counter >
+                >::type
+            >
+        {
+            typedef cds::intrusive::TsigasCycleQueue< T,
+                typename cds::intrusive::tsigas_queue::make_traits<
+                    cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
+                    ,cds::opt::item_counter< cds::atomicity::item_counter >
+                >::type
+            > base_class;
+        public:
+            TsigasCycleQueue_dyn_ic()
+                : base_class( 1024 * 64 )
+            {}
+            TsigasCycleQueue_dyn_ic( size_t nCapacity )
+                : base_class( nCapacity )
+            {}
+
+            cds::opt::none statistics() const
+            {
+                return cds::opt::none();
+            }
+        };
+
+        // VyukovMPMCCycleQueue
+        struct traits_VyukovMPMCCycleQueue_dyn : public cds::intrusive::vyukov_queue::traits
+        {
+            typedef cds::opt::v::dynamic_buffer< int > buffer;
+        };
+        class VyukovMPMCCycleQueue_dyn
+            : public cds::intrusive::VyukovMPMCCycleQueue< T, traits_VyukovMPMCCycleQueue_dyn >
+        {
+            typedef cds::intrusive::VyukovMPMCCycleQueue< T, traits_VyukovMPMCCycleQueue_dyn > base_class;
+        public:
+            VyukovMPMCCycleQueue_dyn()
+                : base_class( 1024 * 64 )
+            {}
+            VyukovMPMCCycleQueue_dyn( size_t nCapacity )
+                : base_class( nCapacity )
+            {}
+
+            cds::opt::none statistics() const
+            {
+                return cds::opt::none();
+            }
+        };
+
+        struct traits_VyukovMPMCCycleQueue_dyn_ic : public traits_VyukovMPMCCycleQueue_dyn
+        {
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        class VyukovMPMCCycleQueue_dyn_ic
+            : public cds::intrusive::VyukovMPMCCycleQueue< T, traits_VyukovMPMCCycleQueue_dyn_ic >
+        {
+            typedef cds::intrusive::VyukovMPMCCycleQueue< T, traits_VyukovMPMCCycleQueue_dyn_ic > base_class;
+        public:
+            VyukovMPMCCycleQueue_dyn_ic()
+                : base_class( 1024 * 64 )
+            {}
+            VyukovMPMCCycleQueue_dyn_ic( size_t nCapacity )
+                : base_class( nCapacity )
+            {}
+
+            cds::opt::none statistics() const
+            {
+                return cds::opt::none();
+            }
+        };
+
+        // BasketQueue
+        struct traits_BasketQueue_HP : public
+            cds::intrusive::basket_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
+            > ::type
+        {};
+        typedef cds::intrusive::BasketQueue< cds::gc::HP, T, traits_BasketQueue_HP > BasketQueue_HP;
+
+        struct traits_BasketQueue_HP_seqcst: public
+            cds::intrusive::basket_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
+                , cds::opt::memory_model< cds::opt::v::sequential_consistent >
+            > ::type
+        {};
+        typedef cds::intrusive::BasketQueue<cds::gc::HP, T, traits_BasketQueue_HP_seqcst > BasketQueue_HP_seqcst;
+
+        struct traits_BasketQueue_DHP : public
+            cds::intrusive::basket_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
+            > ::type
+        {};
+        typedef cds::intrusive::BasketQueue< cds::gc::DHP, T, traits_BasketQueue_DHP > BasketQueue_DHP;
+
+        struct traits_BasketQueue_DHP_seqcst: public
+            cds::intrusive::basket_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
+                , cds::opt::memory_model< cds::opt::v::sequential_consistent >
+            > ::type
+        {};
+        typedef cds::intrusive::BasketQueue< cds::gc::DHP, T, traits_BasketQueue_DHP_seqcst > BasketQueue_DHP_seqcst;
+
+        // BasketQueue + item counter
+        struct traits_BasketQueue_HP_ic : public
+            cds::intrusive::basket_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
+                ,cds::opt::item_counter< cds::atomicity::item_counter >
+            > ::type
+        {};
+        typedef cds::intrusive::BasketQueue< cds::gc::HP, T, traits_BasketQueue_HP_ic > BasketQueue_HP_ic;
+
+        struct traits_BasketQueue_DHP_ic : public
+            cds::intrusive::basket_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
+                ,cds::opt::item_counter< cds::atomicity::item_counter >
+            > ::type
+        {};
+        typedef cds::intrusive::BasketQueue< cds::gc::DHP, T, traits_BasketQueue_DHP_ic > BasketQueue_DHP_ic;
+
+        // BasketQueue + stat
+        struct traits_BasketQueue_HP_stat : public
+            cds::intrusive::basket_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
+                , cds::opt::stat< cds::intrusive::basket_queue::stat<> >
+            > ::type
+        {};
+        typedef cds::intrusive::BasketQueue< cds::gc::HP, T, traits_BasketQueue_HP_stat > BasketQueue_HP_stat;
+
+        struct traits_BasketQueue_DHP_stat : public
+            cds::intrusive::basket_queue::make_traits <
+                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
+                , cds::opt::stat< cds::intrusive::basket_queue::stat<> >
+            > ::type
+        {};
+        typedef cds::intrusive::BasketQueue< cds::gc::DHP, T, traits_BasketQueue_DHP_stat > BasketQueue_DHP_stat;
+
+        // FCQueue
+        class traits_FCQueue_delay2:
+            public cds::intrusive::fcqueue::make_traits<
+                cds::opt::back_off< cds::backoff::delay_of<2> >
+            >::type
+        {};
+        class traits_FCQueue_delay2_elimination:
+            public cds::intrusive::fcqueue::make_traits<
+                cds::opt::back_off< cds::backoff::delay_of<2> >
+                ,cds::opt::enable_elimination< true >
+            >::type
+        {};
+        class traits_FCQueue_delay2_elimination_stat:
+            public cds::intrusive::fcqueue::make_traits<
+                cds::opt::back_off< cds::backoff::delay_of<2> >
+                ,cds::opt::stat< cds::intrusive::fcqueue::stat<> >
+                ,cds::opt::enable_elimination< true >
+            >::type
+        {};
+        class traits_FCQueue_expbackoff_elimination:
+            public cds::intrusive::fcqueue::make_traits<
+                cds::opt::enable_elimination< true >
+                ,cds::opt::elimination_backoff< cds::backoff::Default >
+            >::type
+        {};
+        class traits_FCQueue_expbackoff_elimination_stat:
+            public cds::intrusive::fcqueue::make_traits<
+                cds::opt::enable_elimination< true >
+                ,cds::opt::stat< cds::intrusive::fcqueue::stat<> >
+                ,cds::opt::elimination_backoff< cds::backoff::Default >
+            >::type
+        {};
+
+        typedef cds::intrusive::FCQueue< T, boost::intrusive::list<T>, traits_FCQueue_delay2 > FCQueue_list_delay2;
+        typedef cds::intrusive::FCQueue< T, boost::intrusive::list<T>, traits_FCQueue_delay2_elimination > FCQueue_list_delay2_elimination;
+        typedef cds::intrusive::FCQueue< T, boost::intrusive::list<T>, traits_FCQueue_delay2_elimination_stat > FCQueue_list_delay2_elimination_stat;
+        typedef cds::intrusive::FCQueue< T, boost::intrusive::list<T>, traits_FCQueue_expbackoff_elimination > FCQueue_list_expbackoff_elimination;
+        typedef cds::intrusive::FCQueue< T, boost::intrusive::list<T>, traits_FCQueue_expbackoff_elimination_stat > FCQueue_list_expbackoff_elimination_stat;
+
+        // SegmentedQueue
+        class traits_SegmentedQueue_spin_stat:
+            public cds::intrusive::segmented_queue::make_traits<
+                cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
+            >::type
+        {};
+        class traits_SegmentedQueue_spin_padding :
+            public cds::intrusive::segmented_queue::make_traits<
+            cds::opt::padding< cds::opt::cache_line_padding >
+            >::type
+        {};
+        class traits_SegmentedQueue_mutex_stat :
+            public cds::intrusive::segmented_queue::make_traits<
+                cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
+                ,cds::opt::lock_type< std::mutex >
+            >::type
+        {};
+        class traits_SegmentedQueue_mutex:
+            public cds::intrusive::segmented_queue::make_traits<
+                cds::opt::lock_type< std::mutex >
+            >::type
+        {};
+        class traits_SegmentedQueue_mutex_padding:
+            public cds::intrusive::segmented_queue::make_traits<
+                cds::opt::lock_type< std::mutex >
+                ,cds::opt::padding< cds::opt::cache_line_padding >
+            >::type
+        {};
+
+        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, T >  SegmentedQueue_HP_spin;
+        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, T, traits_SegmentedQueue_spin_padding >  SegmentedQueue_HP_spin_padding;
+        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, T, traits_SegmentedQueue_spin_stat >  SegmentedQueue_HP_spin_stat;
+        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, T, traits_SegmentedQueue_mutex >  SegmentedQueue_HP_mutex;
+        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, T, traits_SegmentedQueue_mutex_padding >  SegmentedQueue_HP_mutex_padding;
+        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, T, traits_SegmentedQueue_mutex_stat >  SegmentedQueue_HP_mutex_stat;
+
+        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, T >  SegmentedQueue_DHP_spin;
+        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, T, traits_SegmentedQueue_spin_padding >  SegmentedQueue_DHP_spin_padding;
+        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, T, traits_SegmentedQueue_spin_stat >  SegmentedQueue_DHP_spin_stat;
+        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, T, traits_SegmentedQueue_mutex >  SegmentedQueue_DHP_mutex;
+        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, T, traits_SegmentedQueue_mutex_padding >  SegmentedQueue_DHP_mutex_padding;
+        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, T, traits_SegmentedQueue_mutex_stat >  SegmentedQueue_DHP_mutex_stat;
+
+        // Boost SList
+        typedef details::BoostSList< T, std::mutex >      BoostSList_mutex;
+        typedef details::BoostSList< T, cds::sync::spin > BoostSList_spin;
+    };
+} // namespace queue
+
+namespace cds_test {
+
+    // cds::container::fcqueue::stat
+    template <typename Counter>
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::fcqueue::stat<Counter> const& s )
+    {
+        return o
+            << CDSSTRESS_STAT_OUT( s, m_nEnqueue )
+            << CDSSTRESS_STAT_OUT( s, m_nDequeue )
+            << CDSSTRESS_STAT_OUT( s, m_nFailedDeq )
+            << CDSSTRESS_STAT_OUT( s, m_nCollided )
+            << CDSSTRESS_STAT_OUT_( "combining_factor", s.combining_factor() )
+            << CDSSTRESS_STAT_OUT( s, m_nOperationCount )
+            << CDSSTRESS_STAT_OUT( s, m_nCombiningCount )
+            << CDSSTRESS_STAT_OUT( s, m_nCompactPublicationList )
+            << CDSSTRESS_STAT_OUT( s, m_nDeactivatePubRecord )
+            << CDSSTRESS_STAT_OUT( s, m_nActivatePubRecord )
+            << CDSSTRESS_STAT_OUT( s, m_nPubRecordCreated )
+            << CDSSTRESS_STAT_OUT( s, m_nPubRecordDeteted )
+            << CDSSTRESS_STAT_OUT( s, m_nAcquirePubRecCount )
+            << CDSSTRESS_STAT_OUT( s, m_nReleasePubRecCount );
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::fcqueue::empty_stat const& /*s*/ )
+    {
+        return o;
+    }
+
+} // namespace cds_test
+
+#endif // #ifndef CDSSTRESS_INTRUSIVE_QUEUE_TYPES_H
diff --git a/test/stress/queue/pop.cpp b/test/stress/queue/pop.cpp
new file mode 100644 (file)
index 0000000..d77cd4e
--- /dev/null
@@ -0,0 +1,249 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "queue_type.h"
+
+// Multi-threaded queue test for pop operation
+namespace {
+
+    static size_t s_nThreadCount = 8;
+    static size_t s_nQueueSize = 20000000 ;   // no more than 20 million records
+
+        struct SimpleValue {
+            size_t    nNo;
+
+            SimpleValue(): nNo(0) {}
+            SimpleValue( size_t n ): nNo(n) {}
+            size_t getNo() const { return  nNo; }
+        };
+
+    class queue_pop: public cds_test::stress_fixture
+    {
+    protected:
+        struct value_type
+        {
+            size_t      nNo;
+
+            value_type()
+                : nNo( 0 )
+            {}
+
+            value_type( size_t n )
+                : nNo( n )
+            {}
+        };
+
+        template <class Queue>
+        class Consumer: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+
+        public:
+            Consumer( cds_test::thread_pool& pool, Queue& queue )
+                : base_class( pool )
+                , m_Queue( queue )
+                , m_arr( new uint8_t[ s_nQueueSize ])
+                , m_nPopCount( 0 )
+            {}
+
+            Consumer( Consumer& src )
+                : base_class( src )
+                , m_Queue( src.m_Queue )
+                , m_arr( new uint8_t[ s_nQueueSize ])
+                , m_nPopCount( 0 )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Consumer( *this );
+            }
+
+            virtual void test()
+            {
+                memset( m_arr.get(), 0, sizeof( m_arr[0] ) * s_nQueueSize );
+                typedef typename Queue::value_type value_type;
+                value_type value;
+                size_t nPopCount = 0;
+                while ( m_Queue.pop( value ) ) {
+                    ++m_arr[ value.nNo ];
+                    ++nPopCount;
+                }
+                m_nPopCount = nPopCount;
+            }
+
+        public:
+            Queue&              m_Queue;
+            std::unique_ptr< uint8_t[] > m_arr;
+            size_t              m_nPopCount;
+        };
+
+    public:
+        static void SetUpTestCase()\r
+        {\r
+            cds_test::config const& cfg = get_config( "queue_pop" );\r
+\r
+            s_nThreadCount = cfg.get_size_t( "ThreadCount", s_nThreadCount );
+            s_nQueueSize = cfg.get_size_t( "QueueSize", s_nQueueSize );
+
+            if ( s_nThreadCount == 0 )
+                s_nThreadCount = 1;
+            if ( s_nQueueSize == 0 )
+                s_nQueueSize = 1000;
+        }\r
+\r
+        //static void TearDownTestCase();\r
+
+    protected:
+        template <class Queue>
+        void analyze( Queue& q )
+        {
+            cds_test::thread_pool& pool = get_pool();
+            std::unique_ptr< uint8_t[] > arr( new uint8_t[s_nQueueSize] );
+            memset(arr.get(), 0, sizeof(arr[0]) * s_nQueueSize );
+
+            size_t nTotalPops = 0;
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                Consumer<Queue>& thread = static_cast<Consumer<Queue>&>(pool.get( i ));
+                for ( size_t i = 0; i < s_nQueueSize; ++i )
+                    arr[i] += thread.m_arr[i];
+                nTotalPops += thread.m_nPopCount;
+            }
+            EXPECT_EQ( nTotalPops, s_nQueueSize );
+            EXPECT_TRUE( q.empty());
+
+            for ( size_t i = 0; i < s_nQueueSize; ++i ) {
+                EXPECT_EQ( arr[i], 1 ) << "i=" << i;
+            }
+        }
+
+        template <class Queue>
+        void test( Queue& q )
+        {
+            cds_test::thread_pool& pool = get_pool();
+
+            pool.add( new Consumer<Queue>( pool, q ), s_nThreadCount );
+
+            for ( size_t i = 0; i < s_nQueueSize; ++i )
+                q.push( i );
+
+            propout() << std::make_pair( "thread_count", s_nThreadCount )
+                << std::make_pair( "push_count", s_nQueueSize );
+
+            std::chrono::milliseconds duration = pool.run();
+
+            propout() << std::make_pair( "duration", duration );
+
+            analyze( q );
+
+            propout() << q.statistics();
+        }
+    };
+
+    CDSSTRESS_MSQueue( queue_pop )
+    CDSSTRESS_MoirQueue( queue_pop )
+    CDSSTRESS_BasketQueue( queue_pop )
+    CDSSTRESS_OptimsticQueue( queue_pop )
+    CDSSTRESS_FCQueue( queue_pop )
+    CDSSTRESS_FCDeque( queue_pop )
+    CDSSTRESS_RWQueue( queue_pop )
+    CDSSTRESS_StdQueue( queue_pop )
+
+#undef CDSSTRESS_Queue_F
+#define CDSSTRESS_Queue_F( test_fixture, type_name ) \
+    TEST_F( test_fixture, type_name ) \
+    { \
+        typedef queue::Types< value_type >::type_name queue_type; \
+        queue_type queue( s_nQueueSize ); \
+        test( queue ); \
+    }
+
+    CDSSTRESS_TsigasQueue( queue_pop )
+    CDSSTRESS_VyukovQueue( queue_pop )
+
+#undef CDSSTRESS_Queue_F
+
+
+    // ********************************************************************
+    // SegmentedQueue test
+
+    class segmented_queue_pop
+        : public queue_pop
+        , public ::testing::WithParamInterface< size_t >
+    {
+        typedef queue_pop base_class;
+
+    protected:
+        template <typename Queue>
+        void test()
+        {
+            size_t quasi_factor = GetParam();
+
+            Queue q( quasi_factor );
+            propout() << std::make_pair( "quasi_factor", quasi_factor );
+            base_class::test( q );
+        }
+
+    public:
+        static std::vector< size_t > get_test_parameters()
+        {
+            cds_test::config const& cfg = cds_test::stress_fixture::get_config( "queue_pop" );
+            bool bIterative = cfg.get_bool( "SegmentedQueue_Iterate", false );
+            size_t quasi_factor = cfg.get_size_t( "SegmentedQueue_SegmentSize", 256 );
+
+            std::vector<size_t> args;
+            if ( bIterative && quasi_factor > 4 ) {
+                for ( size_t qf = 4; qf <= quasi_factor; qf *= 2 )
+                    args.push_back( qf );
+            }
+            else {
+                if ( quasi_factor > 2 )
+                    args.push_back( quasi_factor );
+                else
+                    args.push_back( 2 );
+            }
+
+            return args;
+        }
+    };
+
+#define CDSSTRESS_Queue_F( test_fixture, type_name ) \
+    TEST_P( test_fixture, type_name ) \
+    { \
+        typedef typename queue::Types<value_type>::type_name queue_type; \
+        test< queue_type >(); \
+    }
+
+    CDSSTRESS_SegmentedQueue( segmented_queue_pop )
+
+    INSTANTIATE_TEST_CASE_P( SQ,
+        segmented_queue_pop,
+        ::testing::ValuesIn( segmented_queue_pop::get_test_parameters()));
+
+} // namespace
diff --git a/test/stress/queue/print_stat.h b/test/stress/queue/print_stat.h
new file mode 100644 (file)
index 0000000..267dfea
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSSTRESS_QUEUE_PRINT_STAT_H
+#define CDSSTRESS_QUEUE_PRINT_STAT_H
+
+namespace cds_test {
+
+    template <typename Counter>
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::basket_queue::stat<Counter> const& s )
+    {
+        return o
+            << CDSSTRESS_STAT_OUT( s, m_EnqueueCount )
+            << CDSSTRESS_STAT_OUT( s, m_EnqueueRace )
+            << CDSSTRESS_STAT_OUT( s, m_DequeueCount )
+            << CDSSTRESS_STAT_OUT( s, m_EmptyDequeue )
+            << CDSSTRESS_STAT_OUT( s, m_DequeueRace )
+            << CDSSTRESS_STAT_OUT( s, m_AdvanceTailError )
+            << CDSSTRESS_STAT_OUT( s, m_BadTail )
+            << CDSSTRESS_STAT_OUT( s, m_TryAddBasket )
+            << CDSSTRESS_STAT_OUT( s, m_AddBasketCount );
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::basket_queue::empty_stat const& /*s*/ )
+    {
+        return o;
+    }
+
+    template <typename Counter>
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::msqueue::stat<Counter> const& s )
+    {
+        return o
+            << CDSSTRESS_STAT_OUT( s, m_EnqueueCount )
+            << CDSSTRESS_STAT_OUT( s, m_EnqueueRace )
+            << CDSSTRESS_STAT_OUT( s, m_DequeueCount )
+            << CDSSTRESS_STAT_OUT( s, m_EmptyDequeue )
+            << CDSSTRESS_STAT_OUT( s, m_DequeueRace )
+            << CDSSTRESS_STAT_OUT( s, m_AdvanceTailError )
+            << CDSSTRESS_STAT_OUT( s, m_BadTail );
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::msqueue::empty_stat const& /*s*/ )
+    {
+        return o;
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::opt::none )
+    {
+        return o;
+    }
+
+    template <typename Counter>
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::optimistic_queue::stat<Counter> const& s )
+    {
+        return o
+            << CDSSTRESS_STAT_OUT( s, m_EnqueueCount )
+            << CDSSTRESS_STAT_OUT( s, m_EnqueueRace )
+            << CDSSTRESS_STAT_OUT( s, m_DequeueCount )
+            << CDSSTRESS_STAT_OUT( s, m_EmptyDequeue )
+            << CDSSTRESS_STAT_OUT( s, m_DequeueRace )
+            << CDSSTRESS_STAT_OUT( s, m_AdvanceTailError )
+            << CDSSTRESS_STAT_OUT( s, m_BadTail )
+            << CDSSTRESS_STAT_OUT( s, m_FixListCount );
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::optimistic_queue::empty_stat const& /*s*/ )
+    {
+        return o;
+    }
+
+    static inline property_stream& operator <<( property_stream& o, std::nullptr_t /*s*/ )
+    {
+        return o;
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::segmented_queue::stat<> const& s )
+    {
+        return o
+            << CDSSTRESS_STAT_OUT( s, m_nPush )
+            << CDSSTRESS_STAT_OUT( s, m_nPushPopulated )
+            << CDSSTRESS_STAT_OUT( s, m_nPushContended )
+            << CDSSTRESS_STAT_OUT( s, m_nPop )
+            << CDSSTRESS_STAT_OUT( s, m_nPopEmpty )
+            << CDSSTRESS_STAT_OUT( s, m_nPopContended )
+            << CDSSTRESS_STAT_OUT( s, m_nCreateSegmentReq )
+            << CDSSTRESS_STAT_OUT( s, m_nDeleteSegmentReq )
+            << CDSSTRESS_STAT_OUT( s, m_nSegmentCreated )
+            << CDSSTRESS_STAT_OUT( s, m_nSegmentDeleted );
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::segmented_queue::empty_stat const& /*s*/ )
+    {
+        return o;
+    }
+
+} // namespace cds_test
+
+#endif // CDSSTRESS_QUEUE_PRINT_STAT_H
diff --git a/test/stress/queue/push.cpp b/test/stress/queue/push.cpp
new file mode 100644 (file)
index 0000000..fc205b9
--- /dev/null
@@ -0,0 +1,252 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "queue_type.h"
+
+// Multi-threaded queue test for push operation
+namespace {
+
+    static size_t s_nThreadCount = 8;
+    static size_t s_nQueueSize = 20000000 ;   // no more than 20 million records
+
+    class queue_push: public cds_test::stress_fixture
+    {
+    protected:
+        struct value_type
+        {
+            size_t      nNo;
+
+            value_type() 
+                : nNo( 0 ) 
+            {}
+
+            value_type( size_t n ) 
+                : nNo( n ) 
+            {}
+        };
+
+        template <class Queue>
+        class Producer: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+
+        public:
+            Producer( cds_test::thread_pool& pool, Queue& queue )
+                : base_class( pool )
+                , m_Queue( queue )
+                , m_nStartItem( 0 )
+                , m_nEndItem( 0 )
+                , m_nPushError( 0 )
+            {}
+
+            Producer( Producer& src )
+                : base_class( src )
+                , m_Queue( src.m_Queue )
+                , m_nStartItem( 0 )
+                , m_nEndItem( 0 )
+                , m_nPushError( 0 )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Producer( *this );
+            }
+
+            virtual void test()
+            {
+                for ( size_t nItem = m_nStartItem; nItem < m_nEndItem; ++nItem ) {
+                    if ( !m_Queue.push( nItem ))
+                        ++m_nPushError;
+                }
+            }
+
+        public:
+            Queue&              m_Queue;
+            size_t              m_nStartItem;
+            size_t              m_nEndItem;
+            size_t              m_nPushError;
+        };
+
+    public:
+        static void SetUpTestCase()\r
+        {\r
+            cds_test::config const& cfg = get_config( "queue_push" );\r
+\r
+            s_nThreadCount = cfg.get_size_t( "ThreadCount", s_nThreadCount );
+            s_nQueueSize = cfg.get_size_t( "QueueSize", s_nQueueSize );
+
+            if ( s_nThreadCount == 0 )
+                s_nThreadCount = 1;
+            if ( s_nQueueSize == 0 )
+                s_nQueueSize = 1000;
+        }\r
+\r
+        //static void TearDownTestCase();\r
+
+    protected:
+        template <class Queue>
+        void test( Queue& q )
+        {
+            cds_test::thread_pool& pool = get_pool();
+
+            pool.add( new Producer<Queue>( pool, q ), s_nThreadCount );
+
+            size_t nStart = 0;
+            size_t nThreadItemCount = s_nQueueSize / s_nThreadCount;
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                Producer<Queue>& thread = static_cast<Producer<Queue>&>(pool.get( i ));
+                thread.m_nStartItem = nStart;
+                nStart += nThreadItemCount;
+                thread.m_nEndItem = nStart;
+            }
+
+            s_nQueueSize = nThreadItemCount * s_nThreadCount;
+            propout() << std::make_pair( "thread_count", s_nThreadCount )
+                << std::make_pair( "push_count", s_nQueueSize );
+
+            std::chrono::milliseconds duration = pool.run();
+
+            propout() << std::make_pair( "duration", duration );
+
+            analyze( q );
+
+            propout() << q.statistics();
+        }
+
+        template <class Queue>
+        void analyze( Queue& q )
+        {
+            size_t nThreadItems = s_nQueueSize / s_nThreadCount;
+            cds_test::thread_pool& pool = get_pool();
+
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                Producer<Queue>& thread = static_cast<Producer<Queue>&>(pool.get( i ));
+                EXPECT_EQ( thread.m_nPushError, 0 ) << " producer thread " << i;
+            }
+            EXPECT_TRUE( !q.empty() );
+
+            std::unique_ptr< uint8_t[] > arr( new uint8_t[s_nQueueSize] );
+            memset( arr.get(), 0, sizeof(arr[0]) * s_nQueueSize );
+
+            size_t nPopped = 0;
+            value_type val;
+            while ( q.pop( val )) {
+                nPopped++;
+                ++arr[ val.nNo ];
+            }
+
+            size_t nTotalItems = nThreadItems * s_nThreadCount;
+            for ( size_t i = 0; i < nTotalItems; ++i ) {
+                EXPECT_EQ( arr[i], 1 ) << "i=" << i;
+            }
+        }
+    };
+
+    CDSSTRESS_MSQueue( queue_push )
+    CDSSTRESS_MoirQueue( queue_push )
+    CDSSTRESS_BasketQueue( queue_push )
+    CDSSTRESS_OptimsticQueue( queue_push )
+    CDSSTRESS_FCQueue( queue_push )
+    CDSSTRESS_FCDeque( queue_push )
+    CDSSTRESS_RWQueue( queue_push )
+    CDSSTRESS_StdQueue( queue_push )
+
+#undef CDSSTRESS_Queue_F
+#define CDSSTRESS_Queue_F( test_fixture, type_name ) \
+    TEST_F( test_fixture, type_name ) \
+    { \
+        typedef queue::Types< value_type >::type_name queue_type; \
+        queue_type queue( s_nQueueSize ); \
+        test( queue ); \
+    }
+
+    CDSSTRESS_TsigasQueue( queue_push )
+    CDSSTRESS_VyukovQueue( queue_push )
+
+#undef CDSSTRESS_Queue_F
+
+
+    // ********************************************************************
+    // SegmentedQueue test
+
+    class segmented_queue_push
+        : public queue_push
+        , public ::testing::WithParamInterface< size_t >
+    {
+        typedef queue_push base_class;
+
+    protected:
+        template <typename Queue>
+        void test()
+        {
+            size_t quasi_factor = GetParam();
+
+            Queue q( quasi_factor );
+            propout() << std::make_pair( "quasi_factor", quasi_factor );
+            base_class::test( q );
+        }
+
+    public:
+        static std::vector< size_t > get_test_parameters()
+        {
+            cds_test::config const& cfg = cds_test::stress_fixture::get_config( "queue_push" );
+            bool bIterative = cfg.get_bool( "SegmentedQueue_Iterate", false );
+            size_t quasi_factor = cfg.get_size_t( "SegmentedQueue_SegmentSize", 256 );
+
+            std::vector<size_t> args;
+            if ( bIterative && quasi_factor > 4 ) {
+                for ( size_t qf = 4; qf <= quasi_factor; qf *= 2 )
+                    args.push_back( qf );
+            }
+            else {
+                if ( quasi_factor > 2 )
+                    args.push_back( quasi_factor );
+                else
+                    args.push_back( 2 );
+            }
+
+            return args;
+        }
+    };
+
+#define CDSSTRESS_Queue_F( test_fixture, type_name ) \
+    TEST_P( test_fixture, type_name ) \
+    { \
+        typedef typename queue::Types<value_type>::type_name queue_type; \
+        test< queue_type >(); \
+    }
+
+    CDSSTRESS_SegmentedQueue( segmented_queue_push )
+
+    INSTANTIATE_TEST_CASE_P( SQ,
+        segmented_queue_push,
+        ::testing::ValuesIn( segmented_queue_push::get_test_parameters()));
+
+} // namespace
diff --git a/test/stress/queue/push_pop.cpp b/test/stress/queue/push_pop.cpp
new file mode 100644 (file)
index 0000000..5720172
--- /dev/null
@@ -0,0 +1,405 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "queue_type.h"
+
+#include <vector>
+#include <algorithm>
+
+// Multi-threaded queue push/pop test
+namespace {
+
+    static size_t s_nConsumerThreadCount = 4;
+    static size_t s_nProducerThreadCount = 4;
+    static size_t s_nQueueSize = 4000000;
+
+    static std::atomic<size_t> s_nProducerDone( 0 );
+
+    class queue_push_pop: public cds_test::stress_fixture
+    {
+    protected:
+        struct value_type
+        {
+            size_t      nNo;
+            size_t      nWriterNo;
+        };
+
+        enum {
+            producer_thread,
+            consumer_thread
+        };
+
+        template <class Queue>
+        class Producer: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+
+        public:
+            Producer( cds_test::thread_pool& pool, Queue& queue, size_t nPushCount )
+                : base_class( pool, producer_thread )
+                , m_Queue( queue )
+                , m_nPushFailed( 0 )
+                , m_nPushCount( nPushCount )
+            {}
+
+            Producer( Producer& src )
+                : base_class( src )
+                , m_Queue( src.m_Queue )
+                , m_nPushFailed( 0 )
+                , m_nPushCount( src.m_nPushCount )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Producer( *this );
+            }
+
+            virtual void test()
+            {
+                size_t const nPushCount = m_nPushCount;
+                value_type v;
+                v.nWriterNo = id();
+                v.nNo = 0;
+                m_nPushFailed = 0;
+
+                while ( v.nNo < nPushCount ) {
+                    if ( m_Queue.push( v ))
+                        ++v.nNo;
+                    else
+                        ++m_nPushFailed;
+                }
+
+                s_nProducerDone.fetch_add( 1 );
+            }
+
+        public:
+            Queue&              m_Queue;
+            size_t              m_nPushFailed;
+            size_t const        m_nPushCount;
+        };
+
+        template <class Queue>
+        class Consumer: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+
+        public:
+            Queue&              m_Queue;
+            size_t const        m_nPushPerProducer;
+            size_t              m_nPopEmpty;
+            size_t              m_nPopped;
+            size_t              m_nBadWriter;
+
+            typedef std::vector<size_t> popped_data;
+            typedef std::vector<size_t>::iterator       data_iterator;
+            typedef std::vector<size_t>::const_iterator const_data_iterator;
+
+            std::vector<popped_data>        m_WriterData;
+
+        private:
+            void initPoppedData()
+            {
+                const size_t nProducerCount = s_nProducerThreadCount;
+                m_WriterData.resize( nProducerCount );
+                for ( size_t i = 0; i < nProducerCount; ++i )
+                    m_WriterData[i].reserve( m_nPushPerProducer );
+            }
+
+        public:
+            Consumer( cds_test::thread_pool& pool, Queue& queue, size_t nPushPerProducer )
+                : base_class( pool, consumer_thread )
+                , m_Queue( queue )
+                , m_nPushPerProducer( nPushPerProducer )
+                , m_nPopEmpty( 0 )
+                , m_nPopped( 0 )
+                , m_nBadWriter( 0 )
+            {
+                initPoppedData();
+            }
+            Consumer( Consumer& src )
+                : base_class( src )
+                , m_Queue( src.m_Queue )
+                , m_nPushPerProducer( src.m_nPushPerProducer )
+                , m_nPopEmpty( 0 )
+                , m_nPopped( 0 )
+                , m_nBadWriter( 0 )
+            {
+                initPoppedData();
+            }
+
+            virtual thread * clone()
+            {
+                return new Consumer( *this );
+            }
+
+            virtual void test()
+            {
+                m_nPopEmpty = 0;
+                m_nPopped = 0;
+                m_nBadWriter = 0;
+                const size_t nTotalWriters = s_nProducerThreadCount;
+                value_type v;
+                while ( true ) {
+                    if ( m_Queue.pop( v ) ) {
+                        ++m_nPopped;
+                        if ( v.nWriterNo < nTotalWriters )
+                            m_WriterData[ v.nWriterNo ].push_back( v.nNo );
+                        else
+                            ++m_nBadWriter;
+                    }
+                    else
+                        ++m_nPopEmpty;
+
+                    if ( m_Queue.empty() ) {
+                        if ( s_nProducerDone.load() >= nTotalWriters ) {
+                            if ( m_Queue.empty() )
+                                break;
+                        }
+                    }
+                }
+            }
+        };
+
+    protected:
+        size_t m_nThreadPushCount;
+
+    protected:
+        template <class Queue>
+        void analyze( Queue& q, size_t /*nLeftOffset*/ = 0, size_t nRightOffset = 0 )
+        {
+            cds_test::thread_pool& pool = get_pool();
+
+            typedef Consumer<Queue> Consumer;
+            typedef Producer<Queue> Producer;
+
+            size_t nPostTestPops = 0;
+            {
+                value_type v;
+                while ( q.pop( v ))
+                    ++nPostTestPops;
+            }
+
+            size_t nTotalPops = 0;
+            size_t nPopFalse = 0;
+            size_t nPoppedItems = 0;
+            size_t nPushFailed = 0;
+
+            std::vector< Consumer * > arrConsumer;
+
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                cds_test::thread& thr = pool.get(i);
+                if ( thr.type() == consumer_thread ) {
+                    Consumer& consumer = static_cast<Consumer&>( thr );
+                    nTotalPops += consumer.m_nPopped;
+                    nPopFalse += consumer.m_nPopEmpty;
+                    arrConsumer.push_back( &consumer );
+                    EXPECT_EQ( consumer.m_nBadWriter, 0 ) << "consumer_thread_no " << i;
+
+                    size_t nPopped = 0;
+                    for ( size_t n = 0; n < s_nProducerThreadCount; ++n )
+                        nPopped += consumer.m_WriterData[n].size();
+
+                    nPoppedItems += nPopped;
+                }
+                else {
+                    assert( thr.type() == producer_thread );
+
+                    Producer& producer = static_cast<Producer&>( thr );
+                    nPushFailed += producer.m_nPushFailed;
+                    EXPECT_EQ( producer.m_nPushFailed, 0 ) << "producer_thread_no " << i;
+                }
+            }
+            EXPECT_EQ( nTotalPops, nPoppedItems );
+
+            EXPECT_EQ( nTotalPops + nPostTestPops, s_nQueueSize ) << "nTotalPops=" << nTotalPops << ", nPostTestPops=" << nPostTestPops;
+            EXPECT_TRUE( q.empty() );
+
+            // Test consistency of popped sequence
+            for ( size_t nWriter = 0; nWriter < s_nProducerThreadCount; ++nWriter ) {
+                std::vector<size_t> arrData;
+                arrData.reserve( m_nThreadPushCount );
+                for ( size_t nReader = 0; nReader < arrConsumer.size(); ++nReader ) {
+                    auto it = arrConsumer[nReader]->m_WriterData[nWriter].begin();
+                    auto itEnd = arrConsumer[nReader]->m_WriterData[nWriter].end();
+                    if ( it != itEnd ) {
+                        auto itPrev = it;
+                        for ( ++it; it != itEnd; ++it ) {
+                            EXPECT_LT( *itPrev, *it + nRightOffset ) << "consumer=" << nReader << ", producer=" << nWriter;
+                            itPrev = it;
+                        }
+                    }
+
+                    for ( it = arrConsumer[nReader]->m_WriterData[nWriter].begin(); it != itEnd; ++it )
+                        arrData.push_back( *it );
+                }
+
+                std::sort( arrData.begin(), arrData.end() );
+                for ( size_t i=1; i < arrData.size(); ++i ) {
+                    EXPECT_EQ( arrData[i - 1] + 1, arrData[i] ) << "producer=" << nWriter;
+                }
+
+                EXPECT_EQ( arrData[0], 0 ) << "producer=" << nWriter;
+                EXPECT_EQ( arrData[arrData.size() - 1], m_nThreadPushCount - 1 ) << "producer=" << nWriter;
+            }
+        }
+
+        template <class Queue>
+        void test_queue( Queue& q )
+        {
+            m_nThreadPushCount = s_nQueueSize / s_nProducerThreadCount;
+
+            cds_test::thread_pool& pool = get_pool();
+            pool.add( new Producer<Queue>( pool, q, m_nThreadPushCount ), s_nProducerThreadCount );
+            pool.add( new Consumer<Queue>( pool, q, m_nThreadPushCount ), s_nConsumerThreadCount );
+
+            s_nProducerDone.store( 0 );
+            s_nQueueSize = m_nThreadPushCount * s_nProducerThreadCount;
+
+            propout() << std::make_pair( "producer_count", s_nProducerThreadCount )
+                << std::make_pair( "consumer_count", s_nConsumerThreadCount )
+                << std::make_pair( "push_count", s_nQueueSize );
+
+            std::chrono::milliseconds duration = pool.run();
+
+            propout() << std::make_pair( "duration", duration );
+        }
+
+        template <class Queue>
+        void test( Queue& q )
+        {
+            test_queue( q );
+            analyze( q );
+            propout() << q.statistics();
+        }
+
+    public:
+        static void SetUpTestCase()\r
+        {\r
+            cds_test::config const& cfg = get_config( "queue_push_pop" );\r
+\r
+            s_nConsumerThreadCount = cfg.get_size_t( "ConsumerCount", s_nConsumerThreadCount );
+            s_nProducerThreadCount = cfg.get_size_t( "ProducerCount", s_nProducerThreadCount );
+            s_nQueueSize = cfg.get_size_t( "QueueSize", s_nQueueSize );
+
+            if ( s_nConsumerThreadCount == 0 )
+                s_nConsumerThreadCount = 1;
+            if ( s_nProducerThreadCount == 0 )
+                s_nProducerThreadCount = 1;
+            if ( s_nQueueSize == 0 )
+                s_nQueueSize = 1000;
+        }\r
+\r
+        //static void TearDownTestCase();\r
+    };
+
+    CDSSTRESS_MSQueue( queue_push_pop )
+    CDSSTRESS_MoirQueue( queue_push_pop )
+    CDSSTRESS_BasketQueue( queue_push_pop )
+    CDSSTRESS_OptimsticQueue( queue_push_pop )
+    CDSSTRESS_FCQueue( queue_push_pop )
+    CDSSTRESS_FCDeque( queue_push_pop )
+    CDSSTRESS_RWQueue( queue_push_pop )
+    CDSSTRESS_StdQueue( queue_push_pop )
+
+#undef CDSSTRESS_Queue_F
+#define CDSSTRESS_Queue_F( test_fixture, type_name ) \
+    TEST_F( test_fixture, type_name ) \
+    { \
+        typedef queue::Types< value_type >::type_name queue_type; \
+        queue_type queue( s_nQueueSize ); \
+        test( queue ); \
+    }
+
+    CDSSTRESS_TsigasQueue( queue_push_pop )
+    CDSSTRESS_VyukovQueue( queue_push_pop )
+
+#undef CDSSTRESS_Queue_F
+
+
+    // ********************************************************************
+    // SegmentedQueue test
+
+    class segmented_queue_push_pop
+        : public queue_push_pop
+        , public ::testing::WithParamInterface< size_t >
+    {
+        typedef queue_push_pop base_class;
+
+    protected:
+
+        template <typename Queue>
+        void test()
+        {
+            size_t quasi_factor = GetParam();
+
+            Queue q( quasi_factor );
+            propout() << std::make_pair( "quasi_factor", quasi_factor );
+            base_class::test_queue( q );
+            analyze( q, quasi_factor * 2, quasi_factor );
+            propout() << q.statistics();
+        }
+
+    public:
+        static std::vector< size_t > get_test_parameters()
+        {
+            cds_test::config const& cfg = cds_test::stress_fixture::get_config( "queue_push_pop" );
+            bool bIterative = cfg.get_bool( "SegmentedQueue_Iterate", false );
+            size_t quasi_factor = cfg.get_size_t( "SegmentedQueue_SegmentSize", 256 );
+
+            std::vector<size_t> args;
+            if ( bIterative && quasi_factor > 4 ) {
+                for ( size_t qf = 4; qf <= quasi_factor; qf *= 2 )
+                    args.push_back( qf );
+            }
+            else {
+                if ( quasi_factor > 2 )
+                    args.push_back( quasi_factor );
+                else
+                    args.push_back( 2 );
+            }
+
+            return args;
+        }
+    };
+
+#define CDSSTRESS_Queue_F( test_fixture, type_name ) \
+    TEST_P( test_fixture, type_name ) \
+    { \
+        typedef typename queue::Types<value_type>::type_name queue_type; \
+        test< queue_type >(); \
+    }
+
+    CDSSTRESS_SegmentedQueue( segmented_queue_push_pop )
+
+    INSTANTIATE_TEST_CASE_P( SQ,
+        segmented_queue_push_pop,
+        ::testing::ValuesIn( segmented_queue_push_pop::get_test_parameters()));
+
+} // namespace
diff --git a/test/stress/queue/queue_type.h b/test/stress/queue/queue_type.h
new file mode 100644 (file)
index 0000000..af76bc5
--- /dev/null
@@ -0,0 +1,724 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSSTRESS_QUEUE_TYPES_H
+#define CDSSTRESS_QUEUE_TYPES_H
+
+#include <cds/container/msqueue.h>
+#include <cds/container/moir_queue.h>
+#include <cds/container/rwqueue.h>
+#include <cds/container/optimistic_queue.h>
+#include <cds/container/tsigas_cycle_queue.h>
+#include <cds/container/vyukov_mpmc_cycle_queue.h>
+#include <cds/container/basket_queue.h>
+#include <cds/container/fcqueue.h>
+#include <cds/container/fcdeque.h>
+#include <cds/container/segmented_queue.h>
+
+#include <cds/gc/hp.h>
+#include <cds/gc/dhp.h>
+
+#include "std_queue.h"
+#include "lock/win32_lock.h"
+#include "framework/michael_alloc.h"
+
+#include <boost/container/deque.hpp>
+
+#include <cds_test/stress_test.h>
+#include "print_stat.h"
+
+namespace queue {
+
+    namespace details {
+        template <typename T, typename Traits=cds::container::fcdeque::traits, class Deque=std::deque<T> >
+        class FCDequeL: public cds::container::FCDeque<T, Deque, Traits >
+        {
+            typedef cds::container::FCDeque<T, Deque, Traits > base_class;
+        public:
+            FCDequeL()
+            {}
+
+            FCDequeL(
+                unsigned int nCompactFactor     ///< Flat combining: publication list compacting factor
+                ,unsigned int nCombinePassCount ///< Flat combining: number of combining passes for combiner thread
+                )
+                : base_class( nCompactFactor, nCombinePassCount )
+            {}
+
+            bool push( T const& v )
+            {
+                return base_class::push_front( v );
+            }
+            bool enqueue( T const& v )
+            {
+                return push( v );
+            }
+
+            bool pop( T& v )
+            {
+                return base_class::pop_back( v );
+            }
+            bool deque( T& v )
+            {
+                return pop(v);
+            }
+        };
+
+        template <typename T, typename Traits=cds::container::fcdeque::traits, class Deque = std::deque<T> >
+        class FCDequeR: public cds::container::FCDeque<T, Deque, Traits >
+        {
+            typedef cds::container::FCDeque<T, Deque, Traits > base_class;
+        public:
+            FCDequeR()
+            {}
+
+            FCDequeR(
+                unsigned int nCompactFactor     ///< Flat combining: publication list compacting factor
+                ,unsigned int nCombinePassCount ///< Flat combining: number of combining passes for combiner thread
+                )
+                : base_class( nCompactFactor, nCombinePassCount )
+            {}
+
+            bool push( T const& v )
+            {
+                return base_class::push_back( v );
+            }
+            bool enqueue( T const& v )
+            {
+                return push( v );
+            }
+
+            bool pop( T& v )
+            {
+                return base_class::pop_front( v );
+            }
+            bool deque( T& v )
+            {
+                return pop(v);
+            }
+        };
+
+    } // namespace details
+
+    template <typename Value>
+    struct Types {
+
+        // MSQueue
+        typedef cds::container::MSQueue<cds::gc::HP,  Value > MSQueue_HP;
+        typedef cds::container::MSQueue<cds::gc::DHP, Value > MSQueue_DHP;
+        typedef cds::container::MoirQueue<cds::gc::HP, Value > MoirQueue_HP;
+        typedef cds::container::MoirQueue<cds::gc::DHP, Value > MoirQueue_DHP;
+
+        struct traits_MSQueue_michaelAlloc : public cds::container::msqueue::traits
+        {
+            typedef memory::MichaelAllocator<int>  allocator;
+        };
+        typedef cds::container::MSQueue<cds::gc::HP,  Value, traits_MSQueue_michaelAlloc > MSQueue_HP_michaelAlloc;
+        typedef cds::container::MSQueue<cds::gc::DHP, Value, traits_MSQueue_michaelAlloc > MSQueue_DHP_michaelAlloc;
+        typedef cds::container::MoirQueue<cds::gc::HP, Value, traits_MSQueue_michaelAlloc > MoirQueue_HP_michaelAlloc;
+        typedef cds::container::MoirQueue<cds::gc::DHP, Value, traits_MSQueue_michaelAlloc > MoirQueue_DHP_michaelAlloc;
+
+        struct traits_MSQueue_seqcst : public
+            cds::container::msqueue::make_traits <
+                cds::opt::memory_model < cds::opt::v::sequential_consistent >
+            > ::type
+        {};
+        typedef cds::container::MSQueue< cds::gc::HP,  Value, traits_MSQueue_seqcst > MSQueue_HP_seqcst;
+        typedef cds::container::MSQueue< cds::gc::DHP, Value, traits_MSQueue_seqcst > MSQueue_DHP_seqcst;
+        typedef cds::container::MoirQueue< cds::gc::HP, Value, traits_MSQueue_seqcst > MoirQueue_HP_seqcst;
+        typedef cds::container::MoirQueue< cds::gc::DHP, Value, traits_MSQueue_seqcst > MoirQueue_DHP_seqcst;
+
+        // MSQueue + item counter
+        struct traits_MSQueue_ic : public
+            cds::container::msqueue::make_traits <
+                cds::opt::item_counter < cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef cds::container::MSQueue< cds::gc::HP,  Value, traits_MSQueue_ic > MSQueue_HP_ic;
+        typedef cds::container::MSQueue< cds::gc::DHP, Value, traits_MSQueue_ic > MSQueue_DHP_ic;
+        typedef cds::container::MoirQueue< cds::gc::HP, Value, traits_MSQueue_ic > MoirQueue_HP_ic;
+        typedef cds::container::MoirQueue< cds::gc::DHP, Value, traits_MSQueue_ic > MoirQueue_DHP_ic;
+
+        // MSQueue + stat
+        struct traits_MSQueue_stat: public
+            cds::container::msqueue::make_traits <
+                cds::opt::stat< cds::container::msqueue::stat<> >
+            >::type
+        {};
+        typedef cds::container::MSQueue< cds::gc::HP,  Value, traits_MSQueue_stat > MSQueue_HP_stat;
+        typedef cds::container::MSQueue< cds::gc::DHP, Value, traits_MSQueue_stat > MSQueue_DHP_stat;
+        typedef cds::container::MoirQueue< cds::gc::HP, Value, traits_MSQueue_stat > MoirQueue_HP_stat;
+        typedef cds::container::MoirQueue< cds::gc::DHP, Value, traits_MSQueue_stat > MoirQueue_DHP_stat;
+
+
+        // OptimisticQueue
+        typedef cds::container::OptimisticQueue< cds::gc::HP, Value > OptimisticQueue_HP;
+        typedef cds::container::OptimisticQueue< cds::gc::DHP, Value > OptimisticQueue_DHP;
+
+        struct traits_OptimisticQueue_michaelAlloc : public cds::container::optimistic_queue::traits
+        {
+            typedef memory::MichaelAllocator<int> allocator;
+        };
+        typedef cds::container::OptimisticQueue< cds::gc::HP,  Value, traits_OptimisticQueue_michaelAlloc > OptimisticQueue_HP_michaelAlloc;
+        typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_michaelAlloc > OptimisticQueue_DHP_michaelAlloc;
+
+        struct traits_OptimisticQueue_seqcst : public cds::container::optimistic_queue::traits
+        {
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cds::container::OptimisticQueue< cds::gc::HP,  Value, traits_OptimisticQueue_seqcst > OptimisticQueue_HP_seqcst;
+        typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_seqcst > OptimisticQueue_DHP_seqcst;
+
+        struct traits_OptimisticQueue_ic : public cds::container::optimistic_queue::traits
+        {
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cds::container::OptimisticQueue< cds::gc::HP,  Value, traits_OptimisticQueue_ic > OptimisticQueue_HP_ic;
+        typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_ic > OptimisticQueue_DHP_ic;
+
+        struct traits_OptimisticQueue_stat : public
+            cds::container::optimistic_queue::make_traits <
+                cds::opt::stat < cds::intrusive::optimistic_queue::stat<> >
+            > ::type
+        {};
+        typedef cds::container::OptimisticQueue< cds::gc::HP,  Value, traits_OptimisticQueue_stat > OptimisticQueue_HP_stat;
+        typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_stat > OptimisticQueue_DHP_stat;
+
+
+        // TsigasCycleQueue
+
+        class TsigasCycleQueue_dyn
+            : public cds::container::TsigasCycleQueue< Value,
+                typename cds::container::tsigas_queue::make_traits<
+                    cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
+                >::type
+            >
+        {
+            typedef cds::container::TsigasCycleQueue< Value,
+                typename cds::container::tsigas_queue::make_traits<
+                    cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
+                >::type
+            > base_class;
+        public:
+            TsigasCycleQueue_dyn()
+                : base_class( 1024 * 64 )
+            {}
+
+            TsigasCycleQueue_dyn( size_t nCapacity )
+                : base_class( nCapacity )
+            {}
+
+            cds::opt::none statistics() const
+            {
+                return cds::opt::none();
+            }
+        };
+
+        class TsigasCycleQueue_dyn_michaelAlloc
+            : public cds::container::TsigasCycleQueue< Value,
+                typename cds::container::tsigas_queue::make_traits<
+                    cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
+                    ,cds::opt::allocator< memory::MichaelAllocator<int> >
+                >::type
+            >
+        {
+            typedef cds::container::TsigasCycleQueue< Value,
+                typename cds::container::tsigas_queue::make_traits<
+                   cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
+                    , cds::opt::allocator< memory::MichaelAllocator<int> >
+                >::type
+            > base_class;
+        public:
+            TsigasCycleQueue_dyn_michaelAlloc()
+                : base_class( 1024 * 64 )
+            {}
+
+            TsigasCycleQueue_dyn_michaelAlloc( size_t nCapacity )
+                : base_class( nCapacity )
+            {}
+
+            cds::opt::none statistics() const
+            {
+                return cds::opt::none();
+            }
+        };
+
+        class TsigasCycleQueue_dyn_ic
+            : public cds::container::TsigasCycleQueue< Value,
+                typename cds::container::tsigas_queue::make_traits<
+                    cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
+                    ,cds::opt::item_counter< cds::atomicity::item_counter >
+                >::type
+            >
+        {
+            typedef cds::container::TsigasCycleQueue< Value,
+                typename cds::container::tsigas_queue::make_traits<
+                    cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
+                    ,cds::opt::item_counter< cds::atomicity::item_counter >
+                >::type
+            > base_class;
+        public:
+            TsigasCycleQueue_dyn_ic()
+                : base_class( 1024 * 64 )
+            {}
+            TsigasCycleQueue_dyn_ic( size_t nCapacity )
+                : base_class( nCapacity )
+            {}
+
+            cds::opt::none statistics() const
+            {
+                return cds::opt::none();
+            }
+        };
+
+        // VyukovMPMCCycleQueue
+        struct traits_VyukovMPMCCycleQueue_dyn : public cds::container::vyukov_queue::traits
+        {
+            typedef cds::opt::v::dynamic_buffer< int > buffer;
+        };
+        class VyukovMPMCCycleQueue_dyn
+            : public cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn >
+        {
+            typedef cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn > base_class;
+        public:
+            VyukovMPMCCycleQueue_dyn()
+                : base_class( 1024 * 64 )
+            {}
+            VyukovMPMCCycleQueue_dyn( size_t nCapacity )
+                : base_class( nCapacity )
+            {}
+
+            cds::opt::none statistics() const
+            {
+                return cds::opt::none();
+            }
+        };
+
+        struct traits_VyukovMPMCCycleQueue_dyn_michaelAlloc : public cds::container::vyukov_queue::traits
+        {
+            typedef cds::opt::v::dynamic_buffer< int, memory::MichaelAllocator<int> > buffer;
+        };
+        class VyukovMPMCCycleQueue_dyn_michaelAlloc
+            : public cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_michaelAlloc >
+        {
+            typedef cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_michaelAlloc > base_class;
+        public:
+            VyukovMPMCCycleQueue_dyn_michaelAlloc()
+                : base_class( 1024 * 64 )
+            {}
+            VyukovMPMCCycleQueue_dyn_michaelAlloc( size_t nCapacity )
+                : base_class( nCapacity )
+            {}
+
+            cds::opt::none statistics() const
+            {
+                return cds::opt::none();
+            }
+        };
+
+        struct traits_VyukovMPMCCycleQueue_dyn_ic : public traits_VyukovMPMCCycleQueue_dyn
+        {
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        class VyukovMPMCCycleQueue_dyn_ic
+            : public cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_ic >
+        {
+            typedef cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_ic > base_class;
+        public:
+            VyukovMPMCCycleQueue_dyn_ic()
+                : base_class( 1024 * 64 )
+            {}
+            VyukovMPMCCycleQueue_dyn_ic( size_t nCapacity )
+                : base_class( nCapacity )
+            {}
+
+            cds::opt::none statistics() const
+            {
+                return cds::opt::none();
+            }
+        };
+
+
+        // BasketQueue
+
+        typedef cds::container::BasketQueue< cds::gc::HP , Value > BasketQueue_HP;
+        typedef cds::container::BasketQueue< cds::gc::DHP, Value > BasketQueue_DHP;
+
+        struct traits_BasketQueue_michaelAlloc : public cds::container::basket_queue::traits
+        {
+            typedef memory::MichaelAllocator<int> allocator;
+        };
+        typedef cds::container::BasketQueue< cds::gc::HP,  Value, traits_BasketQueue_michaelAlloc > BasketQueue_HP_michaelAlloc;
+        typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_michaelAlloc > BasketQueue_DHP_michaelAlloc;
+
+        struct traits_BasketQueue_seqcst : public cds::container::basket_queue::traits
+        {
+            typedef cds::opt::v::sequential_consistent mamory_model;
+        };
+        typedef cds::container::BasketQueue< cds::gc::HP,  Value, traits_BasketQueue_seqcst > BasketQueue_HP_seqcst;
+        typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_seqcst > BasketQueue_DHP_seqcst;
+
+        struct traits_BasketQueue_ic : public cds::container::basket_queue::traits
+        {
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cds::container::BasketQueue< cds::gc::HP,  Value, traits_BasketQueue_ic >BasketQueue_HP_ic;
+        typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_ic >BasketQueue_DHP_ic;
+
+        struct traits_BasketQueue_stat : public cds::container::basket_queue::traits
+        {
+            typedef cds::container::basket_queue::stat<> stat;
+        };
+        typedef cds::container::BasketQueue< cds::gc::HP,  Value, traits_BasketQueue_stat > BasketQueue_HP_stat;
+        typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_stat > BasketQueue_DHP_stat;
+
+
+        // RWQueue
+        typedef cds::container::RWQueue< Value > RWQueue_Spin;
+
+        struct traits_RWQueue_Spin_ic : public cds::container::rwqueue::traits
+        {
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cds::container::RWQueue< Value, traits_RWQueue_Spin_ic > RWQueue_Spin_ic;
+
+        struct traits_RWQueue_mutex : public
+            cds::container::rwqueue::make_traits<
+                cds::opt::lock_type< std::mutex >
+            >::type
+        {};
+        typedef cds::container::RWQueue< Value, traits_RWQueue_mutex > RWQueue_mutex;
+
+        // FCQueue
+        class traits_FCQueue_elimination:
+            public cds::container::fcqueue::make_traits<
+                cds::opt::enable_elimination< true >
+            >::type
+        {};
+        class traits_FCQueue_elimination_stat:
+            public cds::container::fcqueue::make_traits<
+                cds::opt::enable_elimination< true >
+                ,cds::opt::stat< cds::container::fcqueue::stat<> >
+            >::type
+        {};
+
+        typedef cds::container::FCQueue< Value > FCQueue_deque;
+        typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_elimination > FCQueue_deque_elimination;
+        typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_elimination_stat > FCQueue_deque_elimination_stat;
+
+        typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value> > > FCQueue_list;
+        typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value> >, traits_FCQueue_elimination > FCQueue_list_elimination;
+        typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value> >, traits_FCQueue_elimination_stat > FCQueue_list_elimination_stat;
+
+
+   // FCDeque
+        struct traits_FCDeque_stat:
+            public cds::container::fcdeque::make_traits<
+                cds::opt::stat< cds::container::fcdeque::stat<> >
+            >::type
+        {};
+        struct traits_FCDeque_elimination:
+            public cds::container::fcdeque::make_traits<
+                cds::opt::enable_elimination< true >
+            >::type
+        {};
+        struct traits_FCDeque_elimination_stat:
+            public cds::container::fcdeque::make_traits<
+                cds::opt::stat< cds::container::fcdeque::stat<> >,
+                cds::opt::enable_elimination< true >
+            >::type
+        {};
+        struct traits_FCDeque_mutex:
+            public cds::container::fcdeque::make_traits<
+                cds::opt::lock_type< std::mutex >
+            >::type
+        {};
+
+        typedef details::FCDequeL< Value > FCDequeL_default;
+        typedef details::FCDequeL< Value, traits_FCDeque_mutex > FCDequeL_mutex;
+        typedef details::FCDequeL< Value, traits_FCDeque_stat > FCDequeL_stat;
+        typedef details::FCDequeL< Value, traits_FCDeque_elimination > FCDequeL_elimination;
+        typedef details::FCDequeL< Value, traits_FCDeque_elimination_stat > FCDequeL_elimination_stat;
+
+        typedef details::FCDequeL< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeL_boost;
+        typedef details::FCDequeL< Value, traits_FCDeque_stat, boost::container::deque<Value> > FCDequeL_boost_stat;
+        typedef details::FCDequeL< Value, traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeL_boost_elimination;
+        typedef details::FCDequeL< Value, traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeL_boost_elimination_stat;
+
+        typedef details::FCDequeR< Value > FCDequeR_default;
+        typedef details::FCDequeR< Value, traits_FCDeque_mutex > FCDequeR_mutex;
+        typedef details::FCDequeR< Value, traits_FCDeque_stat > FCDequeR_stat;
+        typedef details::FCDequeR< Value, traits_FCDeque_elimination > FCDequeR_elimination;
+        typedef details::FCDequeR< Value, traits_FCDeque_elimination_stat > FCDequeR_elimination_stat;
+
+        typedef details::FCDequeR< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeR_boost;
+        typedef details::FCDequeR< Value, traits_FCDeque_stat, boost::container::deque<Value> > FCDequeR_boost_stat;
+        typedef details::FCDequeR< Value, traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeR_boost_elimination;
+        typedef details::FCDequeR< Value, traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeR_boost_elimination_stat;
+
+        typedef StdQueue_deque<Value>               StdQueue_deque_Spinlock;
+        typedef StdQueue_list<Value>                StdQueue_list_Spinlock;
+        typedef StdQueue_deque<Value, std::mutex>   StdQueue_deque_Mutex;
+        typedef StdQueue_list<Value, std::mutex>    StdQueue_list_Mutex;
+#ifdef UNIT_LOCK_WIN_CS
+        typedef StdQueue_deque<Value, lock::win::CS>    StdQueue_deque_WinCS;
+        typedef StdQueue_list<Value, lock::win::CS>     StdQueue_list_WinCS;
+        typedef StdQueue_deque<Value, lock::win::Mutex> StdQueue_deque_WinMutex;
+        typedef StdQueue_list<Value, lock::win::Mutex>  StdQueue_list_WinMutex;
+#endif
+
+        // SegmentedQueue
+        class traits_SegmentedQueue_spin_stat:
+            public cds::container::segmented_queue::make_traits<
+                cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
+            >::type
+        {};
+        class traits_SegmentedQueue_spin_padding:
+            public cds::container::segmented_queue::make_traits<
+                cds::opt::padding< cds::opt::cache_line_padding >
+            >::type
+        {};
+        class traits_SegmentedQueue_mutex_stat:
+            public cds::container::segmented_queue::make_traits<
+                cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
+                ,cds::opt::lock_type< std::mutex >
+            >::type
+        {};
+        class traits_SegmentedQueue_mutex:
+            public cds::container::segmented_queue::make_traits<
+                cds::opt::lock_type< std::mutex >
+            >::type
+        {};
+        class traits_SegmentedQueue_mutex_padding:
+            public cds::container::segmented_queue::make_traits<
+                cds::opt::lock_type< std::mutex >
+                , cds::opt::padding< cds::opt::cache_line_padding >
+            >::type
+        {};
+
+        typedef cds::container::SegmentedQueue< cds::gc::HP, Value >  SegmentedQueue_HP_spin;
+        typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_spin_padding >  SegmentedQueue_HP_spin_padding;
+        typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_spin_stat >  SegmentedQueue_HP_spin_stat;
+        typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_mutex >  SegmentedQueue_HP_mutex;
+        typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_mutex_padding >  SegmentedQueue_HP_mutex_padding;
+        typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_mutex_stat >  SegmentedQueue_HP_mutex_stat;
+
+        typedef cds::container::SegmentedQueue< cds::gc::DHP, Value >  SegmentedQueue_DHP_spin;
+        typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_spin_padding >  SegmentedQueue_DHP_spin_padding;
+        typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_spin_stat >  SegmentedQueue_DHP_spin_stat;
+        typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_mutex >  SegmentedQueue_DHP_mutex;
+        typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_mutex_padding >  SegmentedQueue_DHP_mutex_padding;
+        typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_mutex_stat >  SegmentedQueue_DHP_mutex_stat;
+    };
+}
+
+
+// *********************************************
+// Queue statistics
+namespace cds_test {
+
+    template <typename Counter>
+    static inline property_stream& operator <<( property_stream& o, cds::container::fcqueue::stat<Counter> const& s )
+    {
+            return o
+                << CDSSTRESS_STAT_OUT( s, m_nEnqueue )
+                << CDSSTRESS_STAT_OUT( s, m_nEnqMove )
+                << CDSSTRESS_STAT_OUT( s, m_nDequeue )
+                << CDSSTRESS_STAT_OUT( s, m_nFailedDeq )
+                << CDSSTRESS_STAT_OUT( s, m_nCollided )
+                << CDSSTRESS_STAT_OUT_( "combining_factor", s.combining_factor() )
+                << CDSSTRESS_STAT_OUT( s, m_nOperationCount )
+                << CDSSTRESS_STAT_OUT( s, m_nCombiningCount )
+                << CDSSTRESS_STAT_OUT( s, m_nCompactPublicationList )
+                << CDSSTRESS_STAT_OUT( s, m_nDeactivatePubRecord )
+                << CDSSTRESS_STAT_OUT( s, m_nActivatePubRecord )
+                << CDSSTRESS_STAT_OUT( s, m_nPubRecordCreated )
+                << CDSSTRESS_STAT_OUT( s, m_nPubRecordDeteted )
+                << CDSSTRESS_STAT_OUT( s, m_nAcquirePubRecCount )
+                << CDSSTRESS_STAT_OUT( s, m_nReleasePubRecCount );
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::container::fcqueue::empty_stat const& /*s*/ )
+    {
+        return o;
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::container::fcdeque::empty_stat const& /*s*/ )
+    {
+        return o;
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::container::fcdeque::stat<> const& s )
+    {
+        return o
+            << CDSSTRESS_STAT_OUT( s, m_nPushFront )
+            << CDSSTRESS_STAT_OUT( s, m_nPushFrontMove )
+            << CDSSTRESS_STAT_OUT( s, m_nPushBack )
+            << CDSSTRESS_STAT_OUT( s, m_nPushBackMove )
+            << CDSSTRESS_STAT_OUT( s, m_nPopFront )
+            << CDSSTRESS_STAT_OUT( s, m_nFailedPopFront )
+            << CDSSTRESS_STAT_OUT( s, m_nPopBack )
+            << CDSSTRESS_STAT_OUT( s, m_nFailedPopBack )
+            << CDSSTRESS_STAT_OUT( s, m_nCollided )
+            << CDSSTRESS_STAT_OUT_( "combining_factor", s.combining_factor() )
+            << CDSSTRESS_STAT_OUT( s, m_nOperationCount )
+            << CDSSTRESS_STAT_OUT( s, m_nCombiningCount )
+            << CDSSTRESS_STAT_OUT( s, m_nCompactPublicationList )
+            << CDSSTRESS_STAT_OUT( s, m_nDeactivatePubRecord )
+            << CDSSTRESS_STAT_OUT( s, m_nActivatePubRecord )
+            << CDSSTRESS_STAT_OUT( s, m_nPubRecordCreated )
+            << CDSSTRESS_STAT_OUT( s, m_nPubRecordDeteted )
+            << CDSSTRESS_STAT_OUT( s, m_nAcquirePubRecCount )
+            << CDSSTRESS_STAT_OUT( s, m_nReleasePubRecCount );
+    }
+
+} // namespace cds_test
+
+#define CDSSTRESS_Queue_F( test_fixture, type_name ) \
+    TEST_F( test_fixture, type_name ) \
+    { \
+        typedef queue::Types< value_type >::type_name queue_type; \
+        queue_type queue; \
+        test( queue ); \
+    }
+
+#define CDSSTRESS_MSQueue( test_fixture ) \
+    CDSSTRESS_Queue_F( test_fixture, MSQueue_HP ) \
+    CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_michaelAlloc ) \
+    CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_seqcst ) \
+    CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_ic ) \
+    CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_stat ) \
+    CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP ) \
+    CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_michaelAlloc ) \
+    CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_seqcst ) \
+    CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_ic ) \
+    CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_stat )
+
+#define CDSSTRESS_MoirQueue( test_fixture ) \
+    CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP ) \
+    CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_michaelAlloc ) \
+    CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_seqcst ) \
+    CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_ic ) \
+    CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_stat ) \
+    CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP ) \
+    CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_michaelAlloc ) \
+    CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_seqcst ) \
+    CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_ic ) \
+    CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_stat )
+
+#define CDSSTRESS_OptimsticQueue( test_fixture ) \
+    CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP ) \
+    CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_michaelAlloc ) \
+    CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_seqcst ) \
+    CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_ic ) \
+    CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_stat ) \
+    CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP ) \
+    CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_michaelAlloc ) \
+    CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_seqcst ) \
+    CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_ic ) \
+    CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_stat )
+
+#define CDSSTRESS_BasketQueue( test_fixture ) \
+    CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP ) \
+    CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_michaelAlloc ) \
+    CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_seqcst ) \
+    CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_ic ) \
+    CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_stat ) \
+    CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP ) \
+    CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_michaelAlloc ) \
+    CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_seqcst ) \
+    CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_ic ) \
+    CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_stat )
+
+#define CDSSTRESS_FCQueue( test_fixture ) \
+    CDSSTRESS_Queue_F( test_fixture, FCQueue_deque ) \
+    CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_elimination ) \
+    CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_elimination_stat ) \
+    CDSSTRESS_Queue_F( test_fixture, FCQueue_list ) \
+    CDSSTRESS_Queue_F( test_fixture, FCQueue_list_elimination ) \
+    CDSSTRESS_Queue_F( test_fixture, FCQueue_list_elimination_stat )
+
+#define CDSSTRESS_FCDeque( test_fixture ) \
+    CDSSTRESS_Queue_F( test_fixture, FCDequeL_default ) \
+    CDSSTRESS_Queue_F( test_fixture, FCDequeL_mutex ) \
+    CDSSTRESS_Queue_F( test_fixture, FCDequeL_stat ) \
+    CDSSTRESS_Queue_F( test_fixture, FCDequeL_elimination ) \
+    CDSSTRESS_Queue_F( test_fixture, FCDequeL_elimination_stat ) \
+    CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost ) \
+    CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost_stat ) \
+    CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost_elimination ) \
+    CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost_elimination_stat ) \
+    CDSSTRESS_Queue_F( test_fixture, FCDequeR_default ) \
+    CDSSTRESS_Queue_F( test_fixture, FCDequeR_mutex ) \
+    CDSSTRESS_Queue_F( test_fixture, FCDequeR_stat ) \
+    CDSSTRESS_Queue_F( test_fixture, FCDequeR_elimination ) \
+    CDSSTRESS_Queue_F( test_fixture, FCDequeR_elimination_stat ) \
+    CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost ) \
+    CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost_stat ) \
+    CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost_elimination ) \
+    CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost_elimination_stat )
+
+#define CDSSTRESS_RWQueue( test_fixture ) \
+    CDSSTRESS_Queue_F( test_fixture, RWQueue_Spin ) \
+    CDSSTRESS_Queue_F( test_fixture, RWQueue_Spin_ic ) \
+    CDSSTRESS_Queue_F( test_fixture, RWQueue_mutex )
+
+#define CDSSTRESS_SegmentedQueue( test_fixture ) \
+    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_spin ) \
+    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_spin_padding ) \
+    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_spin_stat ) \
+    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_mutex ) \
+    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_mutex_padding ) \
+    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_mutex_stat ) \
+    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_spin ) \
+    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_spin_padding ) \
+    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_spin_stat ) \
+    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_mutex ) \
+    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_mutex_padding ) \
+    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_mutex_stat )
+
+
+#define CDSSTRESS_TsigasQueue( test_fixture ) \
+    CDSSTRESS_Queue_F( test_fixture, TsigasCycleQueue_dyn ) \
+    CDSSTRESS_Queue_F( test_fixture, TsigasCycleQueue_dyn_michaelAlloc ) \
+    CDSSTRESS_Queue_F( test_fixture, TsigasCycleQueue_dyn_ic )
+
+#define CDSSTRESS_VyukovQueue( test_fixture ) \
+    CDSSTRESS_Queue_F( test_fixture, VyukovMPMCCycleQueue_dyn ) \
+    CDSSTRESS_Queue_F( test_fixture, VyukovMPMCCycleQueue_dyn_michaelAlloc ) \
+    CDSSTRESS_Queue_F( test_fixture, VyukovMPMCCycleQueue_dyn_ic )
+
+#define CDSSTRESS_StdQueue( test_fixture ) \
+    CDSSTRESS_Queue_F( test_fixture, StdQueue_deque_Spinlock ) \
+    CDSSTRESS_Queue_F( test_fixture, StdQueue_list_Spinlock ) \
+    CDSSTRESS_Queue_F( test_fixture, StdQueue_deque_Mutex ) \
+    CDSSTRESS_Queue_F( test_fixture, StdQueue_list_Mutex )
+
+#endif // #ifndef CDSSTRESS_QUEUE_TYPES_H
diff --git a/test/stress/queue/random.cpp b/test/stress/queue/random.cpp
new file mode 100644 (file)
index 0000000..65b81a2
--- /dev/null
@@ -0,0 +1,330 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "queue_type.h"
+
+#include <vector>
+
+// Multi-threaded queue test for random push/pop operation
+namespace {
+
+    static size_t s_nThreadCount = 16;
+    static size_t s_nQueueSize = 10000000;
+
+    std::atomic< size_t > s_nProducerCount(0);
+
+    class queue_random: public cds_test::stress_fixture
+    {
+        typedef cds_test::stress_fixture base_class;
+
+    protected:
+        struct value_type {
+            size_t      nNo;
+            size_t      nThread;
+
+            value_type() {}
+            value_type( size_t n ) : nNo( n ) {}
+        };
+
+        template <class Queue>
+        class Strain: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+
+        public:
+            Strain( cds_test::thread_pool& pool, Queue& q, size_t nPushCount, size_t nSpread = 0 )
+                : base_class( pool )
+                , m_Queue( q )
+                , m_nSpread( nSpread )
+                , m_nTotalPushCount( nPushCount )
+            {}
+
+            Strain( Strain& src )
+                : base_class( src )
+                , m_Queue( src.m_Queue )
+                , m_nSpread( src.m_nSpread )
+                , m_nTotalPushCount( src.m_nTotalPushCount )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Strain( *this );
+            }
+
+            virtual void test()
+            {
+                size_t const nThreadCount = s_nThreadCount;
+                size_t const nTotalPush = m_nTotalPushCount;
+
+                m_arrLastRead.resize( nThreadCount, 0 );
+                m_arrPopCountPerThread.resize( nThreadCount, 0 );
+
+                value_type node;
+
+                while ( m_nPushCount < nTotalPush ) {
+                    if ( (rand() & 3) != 3 ) {
+                        node.nThread = id();
+                        node.nNo = ++m_nPushCount;
+                        if ( !m_Queue.push( node )) {
+                            ++m_nPushError;
+                            --m_nPushCount;
+                        }
+                    }
+                    else
+                        pop( nThreadCount );
+                }
+
+                s_nProducerCount.fetch_sub( 1, std::memory_order_relaxed );
+
+                while ( !m_Queue.empty() || s_nProducerCount.load( std::memory_order_relaxed ) != 0 )
+                    pop( nThreadCount );
+            }
+
+            bool pop( size_t nThreadCount )
+            {
+                value_type node;
+                node.nThread = nThreadCount;
+                node.nNo = ~0;
+                if ( m_Queue.pop( node )) {
+                    ++m_nPopCount;
+                    if ( node.nThread < nThreadCount ) {
+                        m_arrPopCountPerThread[ node.nThread ] += 1;
+                        if ( m_nSpread ) {
+                            if ( m_arrLastRead[ node.nThread ] > node.nNo ) {
+                                if ( m_arrLastRead[ node.nThread ] - node.nNo > m_nSpread )
+                                    ++m_nRepeatValue;
+                            }
+                            else if ( m_arrLastRead[ node.nThread ] == node.nNo )
+                                ++m_nRepeatValue;
+                            m_arrLastRead[ node.nThread ] = node.nNo;
+                        }
+                        else {
+                            if ( m_arrLastRead[ node.nThread ] < node.nNo )
+                                m_arrLastRead[ node.nThread ] = node.nNo;
+                            else
+                                ++m_nRepeatValue;
+                        }
+                    }
+                    else
+                        ++m_nUndefWriter;
+                }
+                else {
+                    ++m_nEmptyPop;
+                    return false;
+                }
+                return true;
+            }
+
+        public:
+            Queue&              m_Queue;
+
+            size_t  m_nPushCount = 0;
+            size_t  m_nPopCount  = 0;
+            size_t  m_nEmptyPop  = 0;
+
+            size_t  m_nUndefWriter = 0;
+            size_t  m_nRepeatValue = 0;
+            size_t  m_nPushError   = 0;
+
+            std::vector<size_t> m_arrLastRead;
+            std::vector<size_t> m_arrPopCountPerThread;
+
+            size_t const m_nSpread;
+            size_t const m_nTotalPushCount;
+        };
+
+    public:
+        static void SetUpTestCase()\r
+        {\r
+            cds_test::config const& cfg = get_config( "queue_random" );\r
+\r
+            s_nThreadCount = cfg.get_size_t( "ThreadCount", s_nThreadCount );
+            s_nQueueSize = cfg.get_size_t( "QueueSize", s_nQueueSize );
+
+            if ( s_nThreadCount == 0 )
+                s_nThreadCount = 1;
+            if ( s_nQueueSize == 0 )
+                s_nQueueSize = 1000;
+        }\r
+\r
+        //static void TearDownTestCase();\r
+
+    protected:
+        template <class Queue>
+        void analyze( Queue& q  )
+        {
+            EXPECT_TRUE( q.empty() );
+
+            std::vector< size_t > arrPushCount;
+            arrPushCount.resize( s_nThreadCount, 0 );
+
+            size_t nPushTotal = 0;
+            size_t nPopTotal  = 0;
+            size_t nPushError = 0;
+
+            cds_test::thread_pool& pool = get_pool();
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                Strain<Queue>& thr = static_cast<Strain<Queue> &>( pool.get(i));
+                EXPECT_EQ( thr.m_nUndefWriter, 0 );
+                EXPECT_EQ( thr.m_nRepeatValue, 0 );
+                EXPECT_EQ( thr.m_nPushError, 0 );
+                nPushError += thr.m_nPushError;
+
+                arrPushCount[ thr.id() ] += thr.m_nPushCount;
+
+                nPushTotal += thr.m_nPushCount;
+                nPopTotal += thr.m_nPopCount;
+            }
+
+            EXPECT_EQ( nPushTotal, s_nQueueSize );
+            EXPECT_EQ( nPopTotal, s_nQueueSize );
+
+            size_t const nThreadPushCount = s_nQueueSize / s_nThreadCount;
+            for ( size_t i = 0; i < s_nThreadCount; ++i )
+                EXPECT_EQ( arrPushCount[i], nThreadPushCount ) << "thread=" << i;
+        }
+
+        template <class Queue>
+        void test( Queue& q )
+        {
+            size_t nThreadPushCount = s_nQueueSize / s_nThreadCount;
+
+            cds_test::thread_pool& pool = get_pool();
+            pool.add( new Strain<Queue>( pool, q, nThreadPushCount ), s_nThreadCount );
+
+            s_nQueueSize = nThreadPushCount * s_nThreadCount;
+            propout() << std::make_pair( "thread_count", s_nThreadCount )
+                << std::make_pair( "push_count", s_nQueueSize );
+
+            s_nProducerCount.store( pool.size(), std::memory_order_release );
+            std::chrono::milliseconds duration = pool.run();
+            propout() << std::make_pair( "duration", duration );
+
+            analyze( q );
+
+            propout() << q.statistics();
+        }
+    };
+
+    CDSSTRESS_MSQueue( queue_random )
+    CDSSTRESS_MoirQueue( queue_random )
+    CDSSTRESS_BasketQueue( queue_random )
+    CDSSTRESS_OptimsticQueue( queue_random )
+    CDSSTRESS_FCQueue( queue_random )
+    CDSSTRESS_FCDeque( queue_random )
+    CDSSTRESS_RWQueue( queue_random )
+    CDSSTRESS_StdQueue( queue_random )
+
+#undef CDSSTRESS_Queue_F
+#define CDSSTRESS_Queue_F( test_fixture, type_name ) \
+    TEST_F( test_fixture, type_name ) \
+    { \
+        typedef queue::Types< value_type >::type_name queue_type; \
+        queue_type queue( s_nQueueSize ); \
+        test( queue ); \
+    }
+
+    CDSSTRESS_TsigasQueue( queue_random )
+    CDSSTRESS_VyukovQueue( queue_random )
+
+#undef CDSSTRESS_Queue_F
+
+    // ********************************************************************
+    // SegmentedQueue test
+
+    class segmented_queue_random
+        : public queue_random
+        , public ::testing::WithParamInterface< size_t >
+    {
+        typedef queue_random base_class;
+
+    protected:
+        template <typename Queue>
+        void test()
+        {
+            size_t quasi_factor = GetParam();
+
+            Queue q( quasi_factor );
+            propout() << std::make_pair( "quasi_factor", quasi_factor );
+
+            size_t nThreadPushCount = s_nQueueSize / s_nThreadCount;
+
+            cds_test::thread_pool& pool = get_pool();
+            pool.add( new Strain<Queue>( pool, q, nThreadPushCount, quasi_factor * 2 ), s_nThreadCount );
+
+            s_nQueueSize = nThreadPushCount * s_nThreadCount;
+            propout() << std::make_pair( "thread_count", s_nThreadCount )
+                << std::make_pair( "push_count", s_nQueueSize );
+
+            s_nProducerCount.store( pool.size(), std::memory_order_release );
+            std::chrono::milliseconds duration = pool.run();
+            propout() << std::make_pair( "duration", duration );
+
+            analyze( q );
+
+            propout() << q.statistics();
+        }
+
+    public:
+        static std::vector< size_t > get_test_parameters()
+        {
+            cds_test::config const& cfg = cds_test::stress_fixture::get_config( "queue_push" );
+            bool bIterative = cfg.get_bool( "SegmentedQueue_Iterate", false );
+            size_t quasi_factor = cfg.get_size_t( "SegmentedQueue_SegmentSize", 256 );
+
+            std::vector<size_t> args;
+            if ( bIterative && quasi_factor > 4 ) {
+                for ( size_t qf = 4; qf <= quasi_factor; qf *= 2 )
+                    args.push_back( qf );
+            }
+            else {
+                if ( quasi_factor > 2 )
+                    args.push_back( quasi_factor );
+                else
+                    args.push_back( 2 );
+            }
+
+            return args;
+        }
+    };
+
+#define CDSSTRESS_Queue_F( test_fixture, type_name ) \
+    TEST_P( test_fixture, type_name ) \
+    { \
+        typedef typename queue::Types<value_type>::type_name queue_type; \
+        test< queue_type >(); \
+    }
+
+    CDSSTRESS_SegmentedQueue( segmented_queue_random )
+
+    INSTANTIATE_TEST_CASE_P( SQ,
+        segmented_queue_random,
+        ::testing::ValuesIn( segmented_queue_random::get_test_parameters()));
+} // namespace
diff --git a/test/stress/queue/std_queue.h b/test/stress/queue/std_queue.h
new file mode 100644 (file)
index 0000000..b8276aa
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_QUEUE_STD_QUEUE_H
+#define CDSUNIT_QUEUE_STD_QUEUE_H
+
+#include <mutex>    //unique_lock
+#include <queue>
+#include <list>
+#include <cds/sync/spinlock.h>
+
+namespace queue {
+
+    template <typename T, class Container, class Lock = cds::sync::spin >
+    class StdQueue: public std::queue<T, Container >
+    {
+        typedef std::queue<T, Container >   base_class;
+        Lock    m_Locker;
+
+    public:
+        bool enqueue( const T& data )
+        {
+            std::unique_lock<Lock> a(m_Locker);
+
+            base_class::push( data );
+            return true;
+        }
+        bool push( const T& data )  { return enqueue( data ) ; }
+        bool dequeue( T& data )
+        {
+            std::unique_lock<Lock> a(m_Locker);
+            if ( base_class::empty() )
+                return false;
+
+            data = base_class::front();
+            base_class::pop();
+            return true;
+        }
+        bool pop( T& data )         { return dequeue( data ) ; }
+
+        cds::opt::none statistics() const
+        {
+            return cds::opt::none();
+        }
+    };
+
+    template <typename T, class Lock = cds::sync::spin >
+    using StdQueue_deque = StdQueue<T, std::deque<T>, Lock >;
+
+    template <typename T, class Lock = cds::sync::spin >
+    using StdQueue_list = StdQueue<T, std::list<T>, Lock >;
+}
+
+#endif // #ifndef CDSUNIT_QUEUE_STD_QUEUE_H
diff --git a/test/stress/set/CMakeLists.txt b/test/stress/set/CMakeLists.txt
new file mode 100644 (file)
index 0000000..473f4e5
--- /dev/null
@@ -0,0 +1,15 @@
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DCDSUNIT_USE_URCU")
+
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/delodd)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/insdel_find)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/insdel_func)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/insdel_string)
+
+add_custom_target( stress-set
+    DEPENDS
+        stress-set-delodd
+        stress-set-insdelfind
+        stress-set-insdel-func
+        stress-set-insdel-string
+)
diff --git a/test/stress/set/delodd/CMakeLists.txt b/test/stress/set/delodd/CMakeLists.txt
new file mode 100644 (file)
index 0000000..b0b9e57
--- /dev/null
@@ -0,0 +1,28 @@
+set(PACKAGE_NAME stress-set-delodd)
+
+set(CDSSTRESS_SET_DELODD_SOURCES
+    ../../main.cpp
+    set_delodd.cpp
+    set_delodd_cuckoo.cpp
+    set_delodd_ellentree.cpp
+    set_delodd_feldman_hashset.cpp
+    set_delodd_michael.cpp
+    set_delodd_skip.cpp
+    set_delodd_split.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    ${CMAKE_CURRENT_SOURCE_DIR}/..
+)
+
+add_executable(${PACKAGE_NAME} ${CDSSTRESS_SET_DELODD_SOURCES} $<TARGET_OBJECTS:${CDSSTRESS_FRAMEWORK_LIBRARY}>)
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/stress/set/delodd/set_delodd.cpp b/test/stress/set/delodd/set_delodd.cpp
new file mode 100644 (file)
index 0000000..09c44fe
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_delodd.h"
+
+namespace set {
+    
+    size_t  Set_DelOdd::s_nSetSize = 1000000;
+    size_t  Set_DelOdd::s_nInsThreadCount = 4;
+    size_t  Set_DelOdd::s_nDelThreadCount = 4;
+    size_t  Set_DelOdd::s_nExtractThreadCount = 4;
+    size_t  Set_DelOdd::s_nMaxLoadFactor = 8;
+
+    size_t  Set_DelOdd::s_nCuckooInitialSize = 1024;
+    size_t  Set_DelOdd::s_nCuckooProbesetSize = 16;
+    size_t  Set_DelOdd::s_nCuckooProbesetThreshold = 0;
+
+    size_t Set_DelOdd::s_nFeldmanSet_HeadBits = 10;
+    size_t Set_DelOdd::s_nFeldmanSet_ArrayBits = 4;
+
+
+    size_t Set_DelOdd::s_nLoadFactor = 1;
+    std::vector<size_t> Set_DelOdd::m_arrData;
+
+    void Set_DelOdd::SetUpTestCase()
+    {
+        cds_test::config const& cfg = get_config( "map_delodd" );
+
+        s_nSetSize = cfg.get_size_t( "MapSize", s_nSetSize );
+        if ( s_nSetSize < 1000 )
+            s_nSetSize = 1000;
+
+        s_nInsThreadCount = cfg.get_size_t( "InsThreadCount", s_nInsThreadCount );
+        if ( s_nInsThreadCount == 0 )
+            s_nInsThreadCount = 1;
+
+        s_nDelThreadCount = cfg.get_size_t( "DelThreadCount", s_nDelThreadCount );
+        s_nExtractThreadCount = cfg.get_size_t( "ExtractThreadCount", s_nExtractThreadCount );
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        s_nCuckooInitialSize = cfg.get_size_t( "CuckooInitialSize", s_nCuckooInitialSize );
+        if ( s_nCuckooInitialSize < 256 )
+            s_nCuckooInitialSize = 256;
+
+        s_nCuckooProbesetSize = cfg.get_size_t( "CuckooProbesetSize", s_nCuckooProbesetSize );
+        if ( s_nCuckooProbesetSize < 8 )
+            s_nCuckooProbesetSize = 8;
+
+        s_nCuckooProbesetThreshold = cfg.get_size_t( "CuckooProbesetThreshold", s_nCuckooProbesetThreshold );
+
+        s_nFeldmanSet_HeadBits = cfg.get_size_t( "FeldmanMapHeadBits", s_nFeldmanSet_HeadBits );
+        if ( s_nFeldmanSet_HeadBits == 0 )
+            s_nFeldmanSet_HeadBits = 2;
+
+        s_nFeldmanSet_ArrayBits = cfg.get_size_t( "FeldmanMapArrayBits", s_nFeldmanSet_ArrayBits );
+        if ( s_nFeldmanSet_ArrayBits == 0 )
+            s_nFeldmanSet_ArrayBits = 2;
+
+        m_arrData.resize( s_nSetSize );
+        for ( size_t i = 0; i < s_nSetSize; ++i )
+            m_arrData[i] = i;
+        shuffle( m_arrData.begin(), m_arrData.end() );
+    }
+
+    void Set_DelOdd::TearDownTestCase()
+    {
+        m_arrData.clear();
+    }
+
+    std::vector<size_t> Set_DelOdd_LF::get_load_factors()
+    {
+        cds_test::config const& cfg = get_config( "map_delodd" );
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        std::vector<size_t> lf;
+        for ( size_t n = 1; n <= s_nMaxLoadFactor; n *= 2 )
+            lf.push_back( n );
+
+        return lf;
+    }
+
+    INSTANTIATE_TEST_CASE_P( a, Set_DelOdd_LF, ::testing::ValuesIn( Set_DelOdd_LF::get_load_factors() ) );
+} // namespace set
diff --git a/test/stress/set/delodd/set_delodd.h b/test/stress/set/delodd/set_delodd.h
new file mode 100644 (file)
index 0000000..e07090f
--- /dev/null
@@ -0,0 +1,745 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_type.h"
+
+namespace set {
+
+    struct key_thread
+    {
+        uint32_t  nKey;
+        uint16_t  nThread;
+        uint16_t  pad_;
+
+        key_thread( size_t key, size_t threadNo )
+            : nKey( static_cast<uint32_t>(key))
+            , nThread( static_cast<uint16_t>(threadNo))
+            , pad_(0)
+        {}
+
+        key_thread()
+        {}
+    };
+
+    typedef set_type_base<key_thread, size_t>::key_val     key_value_pair;
+
+    template <>
+    struct cmp<key_thread> {
+        int operator ()(key_thread const& k1, key_thread const& k2) const
+        {
+            if ( k1.nKey < k2.nKey )
+                return -1;
+            if ( k1.nKey > k2.nKey )
+                return 1;
+            if ( k1.nThread < k2.nThread )
+                return -1;
+            if ( k1.nThread > k2.nThread )
+                return 1;
+            return 0;
+        }
+        int operator ()(key_thread const& k1, size_t k2) const
+        {
+            if ( k1.nKey < k2 )
+                return -1;
+            if ( k1.nKey > k2 )
+                return 1;
+            return 0;
+        }
+        int operator ()(size_t k1, key_thread const& k2) const
+        {
+            if ( k1 < k2.nKey )
+                return -1;
+            if ( k1 > k2.nKey )
+                return 1;
+            return 0;
+        }
+    };
+
+    template <>
+    struct less<set::key_thread>
+    {
+        bool operator()( set::key_thread const& k1, set::key_thread const& k2 ) const
+        {
+            if ( k1.nKey <= k2.nKey )
+                return k1.nKey < k2.nKey || k1.nThread < k2.nThread;
+            return false;
+        }
+    };
+
+    template <>
+    struct hash<set::key_thread>
+    {
+        typedef size_t             result_type;
+        typedef set::key_thread    argument_type;
+
+        size_t operator()( set::key_thread const& k ) const
+        {
+            return std::hash<size_t>()(k.nKey);
+        }
+        size_t operator()( size_t k ) const
+        {
+            return std::hash<size_t>()(k);
+        }
+    };
+
+
+    class Set_DelOdd: public cds_test::stress_fixture
+    {
+    public:
+        static size_t s_nSetSize;              // max set size
+        static size_t s_nInsThreadCount;       // insert thread count
+        static size_t s_nDelThreadCount;       // delete thread count
+        static size_t s_nExtractThreadCount;   // extract thread count
+        static size_t s_nMaxLoadFactor;        // maximum load factor
+
+        static size_t s_nCuckooInitialSize;    // initial size for CuckooSet
+        static size_t s_nCuckooProbesetSize;   // CuckooSet probeset size (only for list-based probeset)
+        static size_t s_nCuckooProbesetThreshold; // CUckooSet probeset threshold (0 - use default)
+
+        static size_t s_nFeldmanSet_HeadBits;
+        static size_t s_nFeldmanSet_ArrayBits;
+
+        static size_t s_nLoadFactor;
+
+        static std::vector<size_t> m_arrData;
+
+        static void SetUpTestCase();
+        static void TearDownTestCase();
+
+    protected:
+        typedef key_thread  key_type;
+        typedef size_t      value_type;
+
+        atomics::atomic<size_t> m_nInsThreadCount;
+
+        enum {
+            inserter_thread,
+            deleter_thread,
+            extractor_thread,
+        };
+
+
+        // Inserts keys from [0..N)
+        template <class Set>
+        class Inserter: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+            Set&     m_Set;
+
+            struct update_functor
+            {
+                template <typename Q>
+                void operator()( bool /*bNew*/, key_value_pair const&, Q const& )
+                {}
+
+                void operator()(key_value_pair& /*cur*/, key_value_pair * /*prev*/)
+                {}
+            };
+        public:
+            size_t  m_nInsertSuccess = 0;
+            size_t  m_nInsertFailed = 0;
+
+        public:
+            Inserter( cds_test::thread_pool& pool, Set& set )
+                : base_class( pool, inserter_thread )
+                , m_Set( set )
+            {}
+
+            Inserter( Inserter& src )
+                : base_class( src )
+                , m_Set( src.m_Set )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Inserter( *this );
+            }
+
+            virtual void test()
+            {
+                Set& rSet = m_Set;
+                Set_DelOdd& fixture = pool().template fixture<Set_DelOdd>();
+
+                std::vector<size_t>& arrData = fixture.m_arrData;
+                for ( size_t i = 0; i < arrData.size(); ++i ) {
+                    if ( rSet.insert( key_type( arrData[i], id() )))
+                        ++m_nInsertSuccess;
+                    else
+                        ++m_nInsertFailed;
+                }
+
+                update_functor f;
+                for ( size_t i = arrData.size() - 1; i > 0; --i ) {
+                    if ( arrData[i] & 1 )
+                        rSet.update( key_type( arrData[i], id() ), f, true );
+                }
+
+                fixture.m_nInsThreadCount.fetch_sub( 1, atomics::memory_order_release );
+            }
+        };
+
+        struct key_equal {
+            bool operator()( key_type const& k1, key_type const& k2 ) const
+            {
+                return k1.nKey == k2.nKey;
+            }
+            bool operator()( size_t k1, key_type const& k2 ) const
+            {
+                return k1 == k2.nKey;
+            }
+            bool operator()( key_type const& k1, size_t k2 ) const
+            {
+                return k1.nKey == k2;
+            }
+            bool operator ()( key_value_pair const& k1, key_value_pair const& k2 ) const
+            {
+                return operator()( k1.key, k2.key );
+            }
+            bool operator ()( key_value_pair const& k1, key_type const& k2 ) const
+            {
+                return operator()( k1.key, k2 );
+            }
+            bool operator ()( key_type const& k1, key_value_pair const& k2 ) const
+            {
+                return operator()( k1, k2.key );
+            }
+            bool operator ()( key_value_pair const& k1, size_t k2 ) const
+            {
+                return operator()( k1.key, k2 );
+            }
+            bool operator ()( size_t k1, key_value_pair const& k2 ) const
+            {
+                return operator()( k1, k2.key );
+            }
+        };
+
+        struct key_less {
+            bool operator()( key_type const& k1, key_type const& k2 ) const
+            {
+                return k1.nKey < k2.nKey;
+            }
+            bool operator()( size_t k1, key_type const& k2 ) const
+            {
+                return k1 < k2.nKey;
+            }
+            bool operator()( key_type const& k1, size_t k2 ) const
+            {
+                return k1.nKey < k2;
+            }
+            bool operator ()( key_value_pair const& k1, key_value_pair const& k2 ) const
+            {
+                return operator()( k1.key, k2.key );
+            }
+            bool operator ()( key_value_pair const& k1, key_type const& k2 ) const
+            {
+                return operator()( k1.key, k2 );
+            }
+            bool operator ()( key_type const& k1, key_value_pair const& k2 ) const
+            {
+                return operator()( k1, k2.key );
+            }
+            bool operator ()( key_value_pair const& k1, size_t k2 ) const
+            {
+                return operator()( k1.key, k2 );
+            }
+            bool operator ()( size_t k1, key_value_pair const& k2 ) const
+            {
+                return operator()( k1, k2.key );
+            }
+
+            typedef key_equal   equal_to;
+        };
+
+        // Deletes odd keys from [0..N)
+        template <class Set>
+        class Deleter: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+            Set&     m_Set;
+
+        public:
+            size_t  m_nDeleteSuccess = 0;
+            size_t  m_nDeleteFailed = 0;
+
+        public:
+            Deleter( cds_test::thread_pool& pool, Set& set )
+                : base_class( pool, deleter_thread )
+                , m_Set( set )
+            {}
+            Deleter( Deleter& src )
+                : base_class( src )
+                , m_Set( src.m_Set )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Deleter( *this );
+            }
+
+            template <typename SetType, bool>
+            struct eraser {
+                static bool erase( SetType& s, size_t key, size_t /*thread*/)
+                {
+                    return s.erase_with( key, key_less() );
+                }
+            };
+
+            template <typename SetType>
+            struct eraser<SetType, true> {
+                static bool erase(SetType& s, size_t key, size_t thread)
+                {
+                    return s.erase( key_type(key, thread));
+                }
+            };
+
+            virtual void test()
+            {
+                Set& rSet = m_Set;
+
+                size_t const nInsThreadCount = s_nInsThreadCount;
+                Set_DelOdd& fixture = pool().template fixture<Set_DelOdd>();
+                std::vector<size_t>& arrData = fixture.m_arrData;
+
+                if ( id() & 1 ) {
+                    for (size_t i = 0; i < arrData.size(); ++i) {
+                        if ( arrData[i] & 1 ) {
+                            for ( size_t k = 0; k < nInsThreadCount; ++k ) {
+                                if ( eraser<Set, Set::c_bEraseExactKey>::erase( rSet, arrData[i], k ))
+                                    ++m_nDeleteSuccess;
+                                else
+                                    ++m_nDeleteFailed;
+                            }
+                        }
+                        if ( fixture.m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
+                            break;
+                    }
+                }
+                else {
+                    for ( size_t i = arrData.size() - 1; i > 0; --i ) {
+                        if ( arrData[i] & 1 ) {
+                            for ( size_t k = 0; k < nInsThreadCount; ++k ) {
+                                if (eraser<Set, Set::c_bEraseExactKey>::erase(rSet, arrData[i], k))
+                                    ++m_nDeleteSuccess;
+                                else
+                                    ++m_nDeleteFailed;
+                            }
+                        }
+                        if ( fixture.m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
+                            break;
+                    }
+                }
+            }
+        };
+
+        // Extracts odd keys from [0..N)
+        template <typename GC, class Set>
+        class Extractor: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+            Set&     m_Set;
+
+        public:
+            size_t  m_nExtractSuccess = 0;
+            size_t  m_nExtractFailed = 0;
+
+        public:
+            Extractor( cds_test::thread_pool& pool, Set& set )
+                : base_class( pool, extractor_thread )
+                , m_Set( set )
+            {}
+
+            Extractor( Extractor& src )
+                : base_class( src )
+                , m_Set( src.m_Set )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Extractor( *this );
+            }
+
+            template <typename SetType, bool>
+            struct extractor {
+                static typename SetType::guarded_ptr extract(SetType& s, size_t key, size_t /*thread*/)
+                {
+                    return s.extract_with( key, key_less());
+                }
+            };
+
+            template <typename SetType>
+            struct extractor<SetType, true> {
+                static typename SetType::guarded_ptr extract(SetType& s, size_t key, size_t thread)
+                {
+                    return s.extract( key_type(key, thread));
+                }
+            };
+
+            virtual void test()
+            {
+                Set& rSet = m_Set;
+
+                typename Set::guarded_ptr gp;
+
+                Set_DelOdd& fixture = pool().template fixture<Set_DelOdd>();
+                std::vector<size_t>& arrData = fixture.m_arrData;
+                size_t const nInsThreadCount = s_nInsThreadCount;
+
+                if ( id() & 1 ) {
+                    for ( size_t i = 0; i < arrData.size(); ++i ) {
+                        if ( arrData[i] & 1 ) {
+                            for ( size_t k = 0; k < nInsThreadCount; ++k ) {
+                                gp = extractor<Set, Set::c_bEraseExactKey>::extract( rSet, arrData[i], k );
+                                if ( gp )
+                                    ++m_nExtractSuccess;
+                                else
+                                    ++m_nExtractFailed;
+                                gp.release();
+                            }
+                        }
+                        if ( fixture.m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
+                            break;
+                    }
+                }
+                else {
+                    for ( size_t i = arrData.size() - 1; i > 0; --i ) {
+                        if ( arrData[i] & 1 ) {
+                            for ( size_t k = 0; k < nInsThreadCount; ++k ) {
+                                gp = extractor<Set, Set::c_bEraseExactKey>::extract( rSet, arrData[i], k);
+                                if ( gp )
+                                    ++m_nExtractSuccess;
+                                else
+                                    ++m_nExtractFailed;
+                                gp.release();
+                            }
+                        }
+                        if ( fixture.m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
+                            break;
+                    }
+                }
+            }
+        };
+
+        template <typename RCU, class Set>
+        class Extractor< cds::urcu::gc<RCU>, Set >: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+            Set&     m_Set;
+
+        public:
+            size_t  m_nExtractSuccess = 0;
+            size_t  m_nExtractFailed = 0;
+
+        public:
+            Extractor( cds_test::thread_pool& pool, Set& set )
+                : base_class( pool, extractor_thread )
+                , m_Set( set )
+            {}
+
+            Extractor( Extractor& src )
+                : base_class( src )
+                , m_Set( src.m_Set )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Extractor( *this );
+            }
+
+            template <typename SetType, bool>
+            struct extractor {
+                static typename SetType::exempt_ptr extract(SetType& s, size_t key, size_t /*thread*/)
+                {
+                    return s.extract_with(key, key_less());
+                }
+            };
+
+            template <typename SetType>
+            struct extractor<SetType, true> {
+                static typename SetType::exempt_ptr extract(SetType& s, size_t key, size_t thread)
+                {
+                    return s.extract(key_type(key, thread));
+                }
+            };
+
+            virtual void test()
+            {
+                Set& rSet = m_Set;
+
+                typename Set::exempt_ptr xp;
+
+                Set_DelOdd& fixture = pool().template fixture<Set_DelOdd>();
+                std::vector<size_t>& arrData = fixture.m_arrData;
+                size_t const nInsThreadCount = fixture.s_nInsThreadCount;
+
+                if ( id() & 1 ) {
+                    for ( size_t i = 0; i < arrData.size(); ++i ) {
+                        if ( arrData[i] & 1 ) {
+                            for ( size_t k = 0; k < nInsThreadCount; ++k ) {
+                                if ( Set::c_bExtractLockExternal ) {
+                                    typename Set::rcu_lock l;
+                                    xp = extractor<Set, Set::c_bEraseExactKey>::extract( rSet, arrData[i], k);
+                                    if ( xp )
+                                        ++m_nExtractSuccess;
+                                    else
+                                        ++m_nExtractFailed;
+                                }
+                                else {
+                                    xp = extractor<Set, Set::c_bEraseExactKey>::extract(rSet, arrData[i], k);
+                                    if ( xp )
+                                        ++m_nExtractSuccess;
+                                    else
+                                        ++m_nExtractFailed;
+                                }
+                                xp.release();
+                            }
+                        }
+                        if ( fixture.m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
+                            break;
+                    }
+                }
+                else {
+                    for ( size_t i = arrData.size() - 1; i > 0; --i ) {
+                        if ( arrData[i] & 1 ) {
+                            for ( size_t k = 0; k < nInsThreadCount; ++k ) {
+                                if ( Set::c_bExtractLockExternal ) {
+                                    typename Set::rcu_lock l;
+                                    xp = extractor<Set, Set::c_bEraseExactKey>::extract(rSet, arrData[i], k);
+                                    if ( xp )
+                                        ++m_nExtractSuccess;
+                                    else
+                                        ++m_nExtractFailed;
+                                }
+                                else {
+                                    xp = extractor<Set, Set::c_bEraseExactKey>::extract(rSet, arrData[i], k);
+                                    if ( xp )
+                                        ++m_nExtractSuccess;
+                                    else
+                                        ++m_nExtractFailed;
+                                }
+                                xp.release();
+                            }
+                        }
+                        if ( fixture.m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
+                            break;
+                    }
+                }
+            }
+        };
+
+    protected:
+        template <class Set>
+        void do_test_with( Set& testSet )
+        {
+            typedef Inserter<Set> insert_thread;
+            typedef Deleter<Set> delete_thread;
+
+            m_nInsThreadCount.store( s_nInsThreadCount, atomics::memory_order_release );
+
+            cds_test::thread_pool& pool = get_pool();
+            pool.add( new insert_thread( pool, testSet ), s_nInsThreadCount );
+            pool.add( new delete_thread( pool, testSet ), s_nDelThreadCount ? s_nDelThreadCount : cds::OS::topology::processor_count());
+
+            propout() << std::make_pair( "insert_thread_count", s_nInsThreadCount )
+                << std::make_pair( "delete_thread_count", s_nDelThreadCount )
+                << std::make_pair( "set_size", s_nSetSize );
+
+            std::chrono::milliseconds duration = pool.run();
+
+            propout() << std::make_pair( "duration", duration );
+
+            size_t nInsertSuccess = 0;
+            size_t nInsertFailed = 0;
+            size_t nDeleteSuccess = 0;
+            size_t nDeleteFailed = 0;
+
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                cds_test::thread& thr = pool.get( i );
+                if ( thr.type() == inserter_thread ) {
+                    insert_thread& inserter = static_cast<insert_thread&>(thr);
+                    nInsertSuccess += inserter.m_nInsertSuccess;
+                    nInsertFailed += inserter.m_nInsertFailed;
+                }
+                else {
+                    assert( thr.type() == deleter_thread );
+                    delete_thread& deleter = static_cast<delete_thread&>(thr);
+                    nDeleteSuccess += deleter.m_nDeleteSuccess;
+                    nDeleteFailed += deleter.m_nDeleteFailed;
+                }
+            }
+
+            EXPECT_EQ( nInsertSuccess, s_nSetSize * s_nInsThreadCount );
+            EXPECT_EQ( nInsertFailed, 0 );
+
+            propout()
+                << std::make_pair( "insert_success", nInsertSuccess )
+                << std::make_pair( "insert_failed", nInsertFailed )
+                << std::make_pair( "delete_success", nDeleteSuccess )
+                << std::make_pair( "delete_failed", nDeleteFailed );
+        }
+
+        template <class Set>
+        void do_test_extract_with( Set& testSet )
+        {
+            typedef Inserter<Set> insert_thread;
+            typedef Deleter<Set> delete_thread;
+            typedef Extractor< typename Set::gc, Set > extract_thread;
+
+            m_nInsThreadCount.store( s_nInsThreadCount, atomics::memory_order_release );
+
+            cds_test::thread_pool& pool = get_pool();
+            pool.add( new insert_thread( pool, testSet ), s_nInsThreadCount );
+            if ( s_nDelThreadCount )
+                pool.add( new delete_thread( pool, testSet ), s_nDelThreadCount );
+            if ( s_nExtractThreadCount )
+                pool.add( new extract_thread( pool, testSet ), s_nExtractThreadCount );
+
+            propout() << std::make_pair( "insert_thread_count", s_nInsThreadCount )
+                << std::make_pair( "delete_thread_count", s_nDelThreadCount )
+                << std::make_pair( "extract_thread_count", s_nExtractThreadCount )
+                << std::make_pair( "set_size", s_nSetSize );
+
+            std::chrono::milliseconds duration = pool.run();
+
+            propout() << std::make_pair( "duration", duration );
+
+            size_t nInsertSuccess = 0;
+            size_t nInsertFailed = 0;
+            size_t nDeleteSuccess = 0;
+            size_t nDeleteFailed = 0;
+            size_t nExtractSuccess = 0;
+            size_t nExtractFailed = 0;
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                cds_test::thread& thr = pool.get( i );
+                switch ( thr.type() ) {
+                case inserter_thread:
+                    {
+                        insert_thread& inserter = static_cast<insert_thread&>( thr );
+                        nInsertSuccess += inserter.m_nInsertSuccess;
+                        nInsertFailed += inserter.m_nInsertFailed;
+                    }
+                    break;
+                case deleter_thread:
+                    {
+                        delete_thread& deleter = static_cast<delete_thread&>(thr);
+                        nDeleteSuccess += deleter.m_nDeleteSuccess;
+                        nDeleteFailed += deleter.m_nDeleteFailed;
+                    }
+                    break;
+                case extractor_thread:
+                    {
+                        extract_thread& extractor = static_cast<extract_thread&>(thr);
+                        nExtractSuccess += extractor.m_nExtractSuccess;
+                        nExtractFailed += extractor.m_nExtractFailed;
+                    }
+                    break;
+                default:
+                    assert( false );
+                }
+            }
+
+            EXPECT_EQ( nInsertSuccess, s_nSetSize * s_nInsThreadCount );
+            EXPECT_EQ( nInsertFailed, 0 );
+
+            propout()
+                << std::make_pair( "insert_success", nInsertSuccess )
+                << std::make_pair( "insert_failed", nInsertFailed )
+                << std::make_pair( "delete_success", nDeleteSuccess )
+                << std::make_pair( "delete_failed", nDeleteFailed )
+                << std::make_pair( "extract_success", nExtractSuccess )
+                << std::make_pair( "extract_failed", nExtractFailed );
+        }
+
+        template <typename Set>
+        void analyze( Set& testSet )
+        {
+            // All even keys must be in the set
+            {
+                for ( size_t n = 0; n < s_nSetSize; n +=2 ) {
+                    for ( size_t i = 0; i < s_nInsThreadCount; ++i ) {
+                        EXPECT_TRUE( testSet.contains( key_type( n, i ))) << "key=" << n << "/" << i;
+                    }
+                }
+            }
+
+            check_before_clear( testSet );
+
+            testSet.clear();
+            EXPECT_TRUE( testSet.empty() ) << "set.size=" << testSet.size();
+
+            additional_check( testSet );
+            print_stat( propout(), testSet );
+            additional_cleanup( testSet );
+        }
+
+        template <class Set>
+        void run_test()
+        {
+            static_assert( !Set::c_bExtractSupported, "Set class must not support extract() method" );
+
+            Set  testSet( *this );
+            do_test_with( testSet );
+            analyze( testSet );
+        }
+
+        template <class Set>
+        void run_test_extract()
+        {
+            static_assert( Set::c_bExtractSupported, "Set class must support extract() method" );
+
+            Set  testSet( *this );
+            do_test_extract_with( testSet );
+            analyze( testSet );
+        }
+    };
+
+    class Set_DelOdd_LF: public Set_DelOdd
+        , public ::testing::WithParamInterface<size_t>
+    {
+    public:
+        template <class Set>
+        void run_test()
+        {
+            s_nLoadFactor = GetParam();
+            propout() << std::make_pair( "load_factor", s_nLoadFactor );
+            Set_DelOdd::run_test<Set>();
+        }
+
+        template <class Set>
+        void run_test_extract()
+        {
+            s_nLoadFactor = GetParam();
+            propout() << std::make_pair( "load_factor", s_nLoadFactor );
+            Set_DelOdd::run_test_extract<Set>();
+        }
+
+        static std::vector<size_t> get_load_factors();
+    };
+
+} // namespace set
diff --git a/test/stress/set/delodd/set_delodd_cuckoo.cpp b/test/stress/set/delodd/set_delodd_cuckoo.cpp
new file mode 100644 (file)
index 0000000..1303177
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_delodd.h"
+#include "set_type_cuckoo.h"
+
+namespace set {
+
+    CDSSTRESS_CuckooSet( Set_DelOdd, run_test, key_thread, size_t )
+
+} // namespace set
diff --git a/test/stress/set/delodd/set_delodd_ellentree.cpp b/test/stress/set/delodd/set_delodd_ellentree.cpp
new file mode 100644 (file)
index 0000000..fc2fa2b
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_delodd.h"
+#include "set_type_ellen_bintree.h"
+
+namespace set {
+
+    CDSSTRESS_EllenBinTreeSet( Set_DelOdd, run_test_extract, key_thread, size_t )
+
+} // namespace set
diff --git a/test/stress/set/delodd/set_delodd_feldman_hashset.cpp b/test/stress/set/delodd/set_delodd_feldman_hashset.cpp
new file mode 100644 (file)
index 0000000..207139f
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_delodd.h"
+#include "set_type_feldman_hashset.h"
+
+namespace set {
+
+    CDSSTRESS_FeldmanHashSet_fixed( Set_DelOdd, run_test_extract, key_thread, size_t )
+
+} // namespace set
diff --git a/test/stress/set/delodd/set_delodd_michael.cpp b/test/stress/set/delodd/set_delodd_michael.cpp
new file mode 100644 (file)
index 0000000..1e2ea55
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_delodd.h"
+#include "set_type_michael.h"
+
+namespace set {
+
+    CDSSTRESS_MichaelSet( Set_DelOdd_LF, run_test_extract, key_thread, size_t )
+
+} // namespace set
diff --git a/test/stress/set/delodd/set_delodd_skip.cpp b/test/stress/set/delodd/set_delodd_skip.cpp
new file mode 100644 (file)
index 0000000..45263da
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_delodd.h"
+#include "set_type_skip_list.h"
+
+namespace set {
+
+    CDSSTRESS_SkipListSet( Set_DelOdd, run_test_extract, key_thread, size_t )
+
+} // namespace set
diff --git a/test/stress/set/delodd/set_delodd_split.cpp b/test/stress/set/delodd/set_delodd_split.cpp
new file mode 100644 (file)
index 0000000..576d6ae
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_delodd.h"
+#include "set_type_split_list.h"
+
+namespace set {
+
+    CDSSTRESS_SplitListSet( Set_DelOdd_LF, run_test_extract, key_thread, size_t )
+
+} // namespace set
diff --git a/test/stress/set/insdel_find/CMakeLists.txt b/test/stress/set/insdel_find/CMakeLists.txt
new file mode 100644 (file)
index 0000000..5c8b0d6
--- /dev/null
@@ -0,0 +1,30 @@
+set(PACKAGE_NAME stress-set-insdelfind)
+
+set(CDSSTRESS_SET_INSDELFIND_SOURCES
+    ../../main.cpp
+    set_insdelfind.cpp
+    set_insdelfind_cuckoo.cpp
+    set_insdelfind_ellentree.cpp
+    set_insdelfind_feldman_hashset.cpp
+    set_insdelfind_michael.cpp
+    set_insdelfind_skip.cpp
+    set_insdelfind_split.cpp
+    set_insdelfind_std.cpp
+    set_insdelfind_striped.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    ${CMAKE_CURRENT_SOURCE_DIR}/..
+)
+
+add_executable(${PACKAGE_NAME} ${CDSSTRESS_SET_INSDELFIND_SOURCES} $<TARGET_OBJECTS:${CDSSTRESS_FRAMEWORK_LIBRARY}>)
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/stress/set/insdel_find/set_insdelfind.cpp b/test/stress/set/insdel_find/set_insdelfind.cpp
new file mode 100644 (file)
index 0000000..a66f520
--- /dev/null
@@ -0,0 +1,114 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdelfind.h"
+
+namespace set {
+
+    size_t Set_InsDelFind::s_nSetSize = 500000;      // initial set size
+    size_t Set_InsDelFind::s_nThreadCount = 8;       // thread count
+    size_t Set_InsDelFind::s_nMaxLoadFactor = 8;     // maximum load factor
+    unsigned int Set_InsDelFind::s_nInsertPercentage = 5;
+    unsigned int Set_InsDelFind::s_nDeletePercentage = 5;
+    unsigned int Set_InsDelFind::s_nDuration = 30;   // test duration, seconds
+
+    size_t Set_InsDelFind::s_nCuckooInitialSize = 1024;// initial size for CuckooSet
+    size_t Set_InsDelFind::s_nCuckooProbesetSize = 16; // CuckooSet probeset size (only for list-based probeset)
+    size_t Set_InsDelFind::s_nCuckooProbesetThreshold = 0; // CUckooSet probeset threshold (0 - use default)
+
+    size_t Set_InsDelFind::s_nFeldmanSet_HeadBits = 10;
+    size_t Set_InsDelFind::s_nFeldmanSet_ArrayBits = 4;
+
+    size_t Set_InsDelFind::s_nLoadFactor = 2;
+
+    void Set_InsDelFind::SetUpTestCase()
+    {
+        cds_test::config const& cfg = get_config( "map_insdelfind" );
+
+        s_nSetSize = cfg.get_size_t( "InitialMapSize", s_nSetSize );
+        if ( s_nSetSize < 1000 )
+            s_nSetSize = 1000;
+
+        s_nThreadCount = cfg.get_size_t( "ThreadCount", s_nThreadCount );
+        if ( s_nThreadCount == 0 )
+            s_nThreadCount = 2;
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        s_nInsertPercentage = cfg.get_uint( "InsertPercentage", s_nInsertPercentage );
+        if ( s_nInsertPercentage == 0 || s_nInsertPercentage > 90 )
+            s_nInsertPercentage = 5;
+
+        s_nDeletePercentage = cfg.get_uint( "DeletePercentage", s_nDeletePercentage );
+        if ( s_nDeletePercentage == 0 || s_nDeletePercentage > 90 )
+            s_nDeletePercentage = 5;
+
+        s_nDuration = cfg.get_uint( "Duration", s_nDuration );
+        if ( s_nDuration == 0 )
+            s_nDuration = 5;
+
+        s_nCuckooInitialSize = cfg.get_size_t( "CuckooInitialSize", s_nCuckooInitialSize );
+        if ( s_nCuckooInitialSize < 256 )
+            s_nCuckooInitialSize = 256;
+
+        s_nCuckooProbesetSize = cfg.get_size_t( "CuckooProbesetSize", s_nCuckooProbesetSize );
+        if ( s_nCuckooProbesetSize < 8 )
+            s_nCuckooProbesetSize = 8;
+
+        s_nCuckooProbesetThreshold = cfg.get_size_t( "CuckooProbesetThreshold", s_nCuckooProbesetThreshold );
+
+        s_nFeldmanSet_HeadBits = cfg.get_size_t( "FeldmanMapHeadBits", s_nFeldmanSet_HeadBits );
+        if ( s_nFeldmanSet_HeadBits == 0 )
+            s_nFeldmanSet_HeadBits = 2;
+
+        s_nFeldmanSet_ArrayBits = cfg.get_size_t( "FeldmanMapArrayBits", s_nFeldmanSet_ArrayBits );
+        if ( s_nFeldmanSet_ArrayBits == 0 )
+            s_nFeldmanSet_ArrayBits = 2;
+    }
+
+    std::vector<size_t> Set_InsDelFind_LF::get_load_factors()
+    {
+        cds_test::config const& cfg = get_config( "map_delodd" );
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        std::vector<size_t> lf;
+        for ( size_t n = 1; n <= s_nMaxLoadFactor; n *= 2 )
+            lf.push_back( n );
+
+        return lf;
+    }
+
+    INSTANTIATE_TEST_CASE_P( a, Set_InsDelFind_LF, ::testing::ValuesIn( Set_InsDelFind_LF::get_load_factors()));
+} // namespace set
diff --git a/test/stress/set/insdel_find/set_insdelfind.h b/test/stress/set/insdel_find/set_insdelfind.h
new file mode 100644 (file)
index 0000000..a262a87
--- /dev/null
@@ -0,0 +1,234 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_type.h"
+
+namespace set {
+
+    class Set_InsDelFind: public cds_test::stress_fixture
+    {
+    public:
+        static size_t s_nSetSize;           // initial set size
+        static size_t s_nThreadCount;       // thread count
+        static size_t s_nMaxLoadFactor;     // maximum load factor
+        static unsigned int s_nInsertPercentage;
+        static unsigned int s_nDeletePercentage;
+        static unsigned int s_nDuration;   // test duration, seconds
+
+        static size_t  s_nCuckooInitialSize;        // initial size for CuckooSet
+        static size_t  s_nCuckooProbesetSize;       // CuckooSet probeset size (only for list-based probeset)
+        static size_t  s_nCuckooProbesetThreshold;  // CUckooSet probeset threshold (0 - use default)
+
+        static size_t s_nFeldmanSet_HeadBits;
+        static size_t s_nFeldmanSet_ArrayBits;
+
+        static size_t s_nLoadFactor;
+
+        static void SetUpTestCase();
+        //static void TearDownTestCase();
+
+    public:
+        enum actions
+        {
+            do_find,
+            do_insert,
+            do_delete
+        };
+        static const unsigned int c_nShuffleSize = 100;
+        actions m_arrShuffle[c_nShuffleSize];
+
+    protected:
+        typedef size_t  key_type;
+        typedef size_t  value_type;
+
+        template <class Set>
+        class Worker: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+            Set&     m_Set;
+
+        public:
+            size_t  m_nInsertSuccess = 0;
+            size_t  m_nInsertFailed = 0;
+            size_t  m_nDeleteSuccess = 0;
+            size_t  m_nDeleteFailed = 0;
+            size_t  m_nFindSuccess = 0;
+            size_t  m_nFindFailed = 0;
+
+        public:
+            Worker( cds_test::thread_pool& pool, Set& set )
+                : base_class( pool )
+                , m_Set( set )
+            {}
+
+            Worker( Worker& src )
+                : base_class( src )
+                , m_Set( src.m_Set )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Worker( *this );
+            }
+
+            virtual void test()
+            {
+                Set& rSet = m_Set;
+                Set_InsDelFind& fixture = pool().template fixture<Set_InsDelFind>();
+
+                actions * pAct = fixture.m_arrShuffle;
+                unsigned int i = 0;
+                size_t const nNormalize = size_t(-1) / ( fixture.s_nSetSize * 2);
+
+                size_t nRand = 0;
+                while ( !time_elapsed() ) {
+                    nRand = cds::bitop::RandXorShift(nRand);
+                    size_t n = nRand / nNormalize;
+                    switch ( pAct[i] ) {
+                    case do_find:
+                        if ( rSet.contains( n ))
+                            ++m_nFindSuccess;
+                        else
+                            ++m_nFindFailed;
+                        break;
+                    case do_insert:
+                        if ( rSet.insert( n ))
+                            ++m_nInsertSuccess;
+                        else
+                            ++m_nInsertFailed;
+                        break;
+                    case do_delete:
+                        if ( rSet.erase( n ))
+                            ++m_nDeleteSuccess;
+                        else
+                            ++m_nDeleteFailed;
+                        break;
+                    }
+
+                    if ( ++i >= c_nShuffleSize )
+                        i = 0;
+                }
+            }
+        };
+
+    protected:
+        template <class Set>
+        void do_test( Set& testSet )
+        {
+            typedef Worker<Set> work_thread;
+
+            // fill map - only odd number
+            {
+                size_t * pInitArr = new size_t[ s_nSetSize ];
+                size_t * pEnd = pInitArr + s_nSetSize;
+                for ( size_t i = 0; i < s_nSetSize; ++i )
+                    pInitArr[i] = i * 2 + 1;
+                shuffle( pInitArr, pEnd );
+                for ( size_t * p = pInitArr; p < pEnd; ++p )
+                    testSet.insert( typename Set::value_type( *p, *p ) );
+                delete [] pInitArr;
+            }
+
+            cds_test::thread_pool& pool = get_pool();
+            pool.add( new work_thread( pool, testSet ), s_nThreadCount );
+
+            propout() << std::make_pair( "thread_count", s_nThreadCount )
+                << std::make_pair( "set_size", s_nSetSize )
+                << std::make_pair( "insert_percentage", s_nInsertPercentage )
+                << std::make_pair( "delete_percentage", s_nDeletePercentage )
+                << std::make_pair( "total_duration", s_nDuration );
+
+            std::chrono::milliseconds duration = pool.run( std::chrono::seconds( s_nDuration ));
+
+            propout() << std::make_pair( "duration", duration );
+
+            size_t nInsertSuccess = 0;
+            size_t nInsertFailed = 0;
+            size_t nDeleteSuccess = 0;
+            size_t nDeleteFailed = 0;
+            size_t nFindSuccess = 0;
+            size_t nFindFailed = 0;
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                work_thread& thr = static_cast<work_thread&>( pool.get( i ));
+                nInsertSuccess += thr.m_nInsertSuccess;
+                nInsertFailed  += thr.m_nInsertFailed;
+                nDeleteSuccess += thr.m_nDeleteSuccess;
+                nDeleteFailed  += thr.m_nDeleteFailed;
+                nFindSuccess   += thr.m_nFindSuccess;
+                nFindFailed    += thr.m_nFindFailed;
+            }
+
+            propout()
+                << std::make_pair( "insert_success", nInsertSuccess )
+                << std::make_pair( "insert_failed", nInsertFailed )
+                << std::make_pair( "delete_success", nDeleteSuccess )
+                << std::make_pair( "delete_failed", nDeleteFailed )
+                << std::make_pair( "find_success", nFindSuccess )
+                << std::make_pair( "find_failed", nFindFailed );
+
+            {
+                ASSERT_TRUE( std::chrono::duration_cast<std::chrono::seconds>(duration).count() > 0 );
+                size_t nTotalOps = nInsertSuccess + nInsertFailed + nDeleteSuccess + nDeleteFailed + nFindSuccess + nFindFailed;
+                propout() << std::make_pair( "avg_speed", nTotalOps / std::chrono::duration_cast<std::chrono::seconds>(duration).count() );
+            }
+
+
+            testSet.clear();
+            EXPECT_TRUE( testSet.empty()) << "set size=" << testSet.size();
+
+            additional_check( testSet );
+            print_stat( propout(), testSet );
+            additional_cleanup( testSet );
+        }
+
+        template <class Set>
+        void run_test()
+        {
+            Set s( *this );
+            do_test( s );
+        }
+    };
+
+    class Set_InsDelFind_LF: public Set_InsDelFind
+        , public ::testing::WithParamInterface<size_t>
+    {
+    public:
+        template <class Set>
+        void run_test()
+        {
+            s_nLoadFactor = GetParam();
+            propout() << std::make_pair( "load_factor", s_nLoadFactor );
+            Set_InsDelFind::run_test<Set>();
+        }
+
+        static std::vector<size_t> get_load_factors();
+    };
+
+} // namespace set
diff --git a/test/stress/set/insdel_find/set_insdelfind_cuckoo.cpp b/test/stress/set/insdel_find/set_insdelfind_cuckoo.cpp
new file mode 100644 (file)
index 0000000..8e095d2
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdelfind.h"
+#include "set_type_cuckoo.h"
+
+namespace set {
+
+    CDSSTRESS_CuckooSet( Set_InsDelFind, run_test, size_t, size_t )
+
+} // namespace set
diff --git a/test/stress/set/insdel_find/set_insdelfind_ellentree.cpp b/test/stress/set/insdel_find/set_insdelfind_ellentree.cpp
new file mode 100644 (file)
index 0000000..6704d28
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdelfind.h"
+#include "set_type_ellen_bintree.h"
+
+namespace set {
+
+    CDSSTRESS_EllenBinTreeSet( Set_InsDelFind, run_test, size_t, size_t )
+
+} // namespace set
diff --git a/test/stress/set/insdel_find/set_insdelfind_feldman_hashset.cpp b/test/stress/set/insdel_find/set_insdelfind_feldman_hashset.cpp
new file mode 100644 (file)
index 0000000..586036b
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdelfind.h"
+#include "set_type_feldman_hashset.h"
+
+namespace set {
+
+    CDSSTRESS_FeldmanHashSet_fixed( Set_InsDelFind, run_test, size_t, size_t )
+
+} // namespace set
diff --git a/test/stress/set/insdel_find/set_insdelfind_michael.cpp b/test/stress/set/insdel_find/set_insdelfind_michael.cpp
new file mode 100644 (file)
index 0000000..4be7e10
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdelfind.h"
+#include "set_type_michael.h"
+
+namespace set {
+
+    CDSSTRESS_MichaelSet( Set_InsDelFind_LF, run_test, size_t, size_t )
+
+} // namespace set
diff --git a/test/stress/set/insdel_find/set_insdelfind_skip.cpp b/test/stress/set/insdel_find/set_insdelfind_skip.cpp
new file mode 100644 (file)
index 0000000..7d33f64
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdelfind.h"
+#include "set_type_skip_list.h"
+
+namespace set {
+
+    CDSSTRESS_SkipListSet( Set_InsDelFind, run_test, size_t, size_t )
+
+} // namespace set
diff --git a/test/stress/set/insdel_find/set_insdelfind_split.cpp b/test/stress/set/insdel_find/set_insdelfind_split.cpp
new file mode 100644 (file)
index 0000000..150a202
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdelfind.h"
+#include "set_type_split_list.h"
+
+namespace set {
+
+    CDSSTRESS_SplitListSet( Set_InsDelFind_LF, run_test, size_t, size_t )
+
+} // namespace set
diff --git a/test/stress/set/insdel_find/set_insdelfind_std.cpp b/test/stress/set/insdel_find/set_insdelfind_std.cpp
new file mode 100644 (file)
index 0000000..100724d
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdelfind.h"
+#include "set_type_std.h"
+
+namespace set {
+    CDSSTRESS_StdSet( Set_InsDelFind, run_test, size_t, size_t )
+} // namespace set
+
diff --git a/test/stress/set/insdel_find/set_insdelfind_striped.cpp b/test/stress/set/insdel_find/set_insdelfind_striped.cpp
new file mode 100644 (file)
index 0000000..ceb006e
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdelfind.h"
+#include "set_type_striped.h"
+
+namespace set {
+
+    CDSSTRESS_StripedSet( Set_InsDelFind_LF, run_test, size_t, size_t )
+
+} // namespace set
+
diff --git a/test/stress/set/insdel_func/CMakeLists.txt b/test/stress/set/insdel_func/CMakeLists.txt
new file mode 100644 (file)
index 0000000..13c2b2c
--- /dev/null
@@ -0,0 +1,29 @@
+set(PACKAGE_NAME stress-set-insdel-func)
+
+set(CDSSTRESS_SET_INSDEL_FUNC_SOURCES
+    ../../main.cpp
+    set_insdel_func.cpp
+    set_insdel_func_cuckoo.cpp
+    set_insdel_func_ellentree.cpp
+    set_insdel_func_feldman_hashset.cpp
+    set_insdel_func_michael.cpp
+    set_insdel_func_skip.cpp
+    set_insdel_func_split.cpp
+    set_insdel_func_striped.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    ${CMAKE_CURRENT_SOURCE_DIR}/..
+)
+
+add_executable(${PACKAGE_NAME} ${CDSSTRESS_SET_INSDEL_FUNC_SOURCES} $<TARGET_OBJECTS:${CDSSTRESS_FRAMEWORK_LIBRARY}>)
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/stress/set/insdel_func/set_insdel_func.cpp b/test/stress/set/insdel_func/set_insdel_func.cpp
new file mode 100644 (file)
index 0000000..00b4f8c
--- /dev/null
@@ -0,0 +1,114 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdel_func.h"
+
+namespace set {
+
+    size_t Set_InsDel_func::s_nSetSize = 1000000;      // set size
+    size_t Set_InsDel_func::s_nInsertThreadCount = 4;  // count of insertion thread
+    size_t Set_InsDel_func::s_nDeleteThreadCount = 4;  // count of deletion thread
+    size_t Set_InsDel_func::s_nUpdateThreadCount = 4;  // count of ensure thread
+    size_t Set_InsDel_func::s_nThreadPassCount = 4;    // pass count for each thread
+    size_t Set_InsDel_func::s_nMaxLoadFactor = 8;      // maximum load factor
+
+    size_t Set_InsDel_func::s_nCuckooInitialSize = 1024;// initial size for CuckooSet
+    size_t Set_InsDel_func::s_nCuckooProbesetSize = 16; // CuckooSet probeset size (only for list-based probeset)
+    size_t Set_InsDel_func::s_nCuckooProbesetThreshold = 0; // CUckooSet probeset threshold (0 - use default)
+
+    size_t Set_InsDel_func::s_nFeldmanSet_HeadBits = 10;
+    size_t Set_InsDel_func::s_nFeldmanSet_ArrayBits = 4;
+
+    size_t Set_InsDel_func::s_nLoadFactor = 1;
+
+    void Set_InsDel_func::SetUpTestCase()
+    {
+        cds_test::config const& cfg = get_config( "map_insdel_func" );
+
+        s_nSetSize = cfg.get_size_t( "MapSize", s_nSetSize );
+        if ( s_nSetSize < 1000 )
+            s_nSetSize = 1000;
+
+        s_nInsertThreadCount = cfg.get_size_t( "InsertThreadCount", s_nInsertThreadCount );
+        if ( s_nInsertThreadCount == 0 )
+            s_nInsertThreadCount = 2;
+
+        s_nDeleteThreadCount = cfg.get_size_t( "DeleteThreadCount", s_nDeleteThreadCount );
+        if ( s_nDeleteThreadCount == 0 )
+            s_nDeleteThreadCount = 2;
+
+        s_nUpdateThreadCount = cfg.get_size_t( "UpdateThreadCount", s_nUpdateThreadCount );
+        if ( s_nUpdateThreadCount == 0 )
+            s_nUpdateThreadCount = 2;
+
+        s_nThreadPassCount = cfg.get_size_t( "ThreadPassCount", s_nThreadPassCount );
+        if ( s_nThreadPassCount == 0 )
+            s_nThreadPassCount = 4;
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        s_nCuckooInitialSize = cfg.get_size_t( "CuckooInitialSize", s_nCuckooInitialSize );
+        if ( s_nCuckooInitialSize < 256 )
+            s_nCuckooInitialSize = 256;
+
+        s_nCuckooProbesetSize = cfg.get_size_t( "CuckooProbesetSize", s_nCuckooProbesetSize );
+        if ( s_nCuckooProbesetSize < 8 )
+            s_nCuckooProbesetSize = 8;
+
+        s_nCuckooProbesetThreshold = cfg.get_size_t( "CuckooProbesetThreshold", s_nCuckooProbesetThreshold );
+
+        s_nFeldmanSet_HeadBits = cfg.get_size_t( "FeldmanMapHeadBits", s_nFeldmanSet_HeadBits );
+        if ( s_nFeldmanSet_HeadBits == 0 )
+            s_nFeldmanSet_HeadBits = 2;
+
+        s_nFeldmanSet_ArrayBits = cfg.get_size_t( "FeldmanMapArrayBits", s_nFeldmanSet_ArrayBits );
+        if ( s_nFeldmanSet_ArrayBits == 0 )
+            s_nFeldmanSet_ArrayBits = 2;
+    }
+
+    std::vector<size_t> Set_InsDel_func_LF::get_load_factors()
+    {
+        cds_test::config const& cfg = get_config( "map_insdel_func" );
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        std::vector<size_t> lf;
+        for ( size_t n = 1; n <= s_nMaxLoadFactor; n *= 2 )
+            lf.push_back( n );
+
+        return lf;
+    }
+
+    INSTANTIATE_TEST_CASE_P( a, Set_InsDel_func_LF, ::testing::ValuesIn( Set_InsDel_func_LF::get_load_factors()));
+} // namespace set
diff --git a/test/stress/set/insdel_func/set_insdel_func.h b/test/stress/set/insdel_func/set_insdel_func.h
new file mode 100644 (file)
index 0000000..8d6a5bf
--- /dev/null
@@ -0,0 +1,541 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_type.h"
+
+namespace set {
+
+    class Set_InsDel_func: public cds_test::stress_fixture
+    {
+    public:
+        static size_t s_nSetSize;               // set size
+        static size_t s_nInsertThreadCount;     // count of insertion thread
+        static size_t s_nDeleteThreadCount;     // count of deletion thread
+        static size_t s_nUpdateThreadCount;     // count of updating thread
+        static size_t s_nThreadPassCount;       // pass count for each thread
+        static size_t s_nMaxLoadFactor;         // maximum load factor
+
+        static size_t s_nCuckooInitialSize;     // initial size for CuckooSet
+        static size_t s_nCuckooProbesetSize;    // CuckooSet probeset size (only for list-based probeset)
+        static size_t s_nCuckooProbesetThreshold; // CUckooSet probeset threshold (0 - use default)
+
+        static size_t s_nFeldmanSet_HeadBits;
+        static size_t s_nFeldmanSet_ArrayBits;
+
+        static size_t s_nLoadFactor;
+
+        static void SetUpTestCase();
+        //static void TearDownTestCase();
+
+    public:
+        typedef size_t  key_type;
+
+        struct value {
+            size_t      nKey;
+            size_t      nData;
+            atomics::atomic<size_t> nUpdateCall;
+            bool volatile   bInitialized;
+            cds::OS::ThreadId          threadId     ;   // insert thread id
+
+            typedef cds::sync::spin_lock< cds::backoff::pause > lock_type;
+            mutable lock_type   m_access;
+
+            value()
+                : nKey(0)
+                , nData(0)
+                , nUpdateCall(0)
+                , bInitialized( false )
+                , threadId( cds::OS::get_current_thread_id() )
+            {}
+
+            value( value const& s )
+                : nKey(s.nKey)
+                , nData(s.nData)
+                , nUpdateCall(s.nUpdateCall.load(atomics::memory_order_relaxed))
+                , bInitialized( s.bInitialized )
+                , threadId( cds::OS::get_current_thread_id() )
+            {}
+
+            // boost::container::flat_map requires operator =
+            value& operator=( value const& v )
+            {
+                nKey = v.nKey;
+                nData = v.nData;
+                nUpdateCall.store( v.nUpdateCall.load(atomics::memory_order_relaxed), atomics::memory_order_relaxed );
+                bInitialized = v.bInitialized;
+
+                return *this;
+            }
+        };
+
+        size_t *    m_pKeyFirst;
+        size_t *    m_pKeyLast;
+        size_t *    m_pKeyArr;
+
+        enum {
+            insert_thread,
+            update_thread,
+            delete_thread
+        };
+
+        template <class Set>
+        class Inserter: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+
+            Set&     m_Set;
+            typedef typename Set::value_type keyval_type;
+
+            struct insert_functor {
+                size_t nTestFunctorRef;
+
+                insert_functor()
+                    : nTestFunctorRef(0)
+                {}
+                insert_functor( insert_functor const& ) = delete;
+
+                void operator()( keyval_type& val )
+                {
+                    std::unique_lock< typename value::lock_type> ac( val.val.m_access );
+
+                    val.val.nKey  = val.key;
+                    val.val.nData = val.key * 8;
+
+                    ++nTestFunctorRef;
+                    val.val.bInitialized = true;
+                }
+            };
+
+        public:
+            size_t  m_nInsertSuccess = 0;
+            size_t  m_nInsertFailed = 0;
+            size_t  m_nTestFunctorRef = 0;
+
+        public:
+            Inserter( cds_test::thread_pool& pool, Set& set )
+                : base_class( pool, insert_thread )
+                , m_Set( set )
+            {}
+
+            Inserter( Inserter& src )
+                : base_class( src )
+                , m_Set( src.m_Set )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Inserter( *this );
+            }
+
+            virtual void test()
+            {
+                Set& rSet = m_Set;
+                Set_InsDel_func& fixture = pool().template fixture<Set_InsDel_func>();
+
+                size_t * pKeyFirst      = fixture.m_pKeyFirst;
+                size_t * pKeyLast       = fixture.m_pKeyLast;
+                size_t const nPassCount = fixture.s_nThreadPassCount;
+
+                // func is passed by reference
+                insert_functor  func;
+
+                if ( id() & 1 ) {
+                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
+                        for ( size_t * p = pKeyFirst; p < pKeyLast; ++p ) {
+                            if ( rSet.insert( *p, std::ref( func )))
+                                ++m_nInsertSuccess;
+                            else
+                                ++m_nInsertFailed;
+                        }
+                    }
+                }
+                else {
+                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
+                        for ( size_t * p = pKeyLast - 1; p >= pKeyFirst; --p ) {
+                            if ( rSet.insert( *p, std::ref( func )))
+                                ++m_nInsertSuccess;
+                            else
+                                ++m_nInsertFailed;
+                        }
+                    }
+                }
+
+                m_nTestFunctorRef = func.nTestFunctorRef;
+            }
+        };
+
+        template <class Set>
+        class Updater: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+
+            Set&     m_Set;
+            typedef typename Set::value_type keyval_type;
+
+            struct update_functor {
+                size_t  nCreated = 0;
+                size_t  nModified = 0;
+
+                update_functor() {}
+                update_functor( const update_functor& ) = delete;
+
+                void operator()( bool bNew, keyval_type& val, size_t /*nKey*/ )
+                {
+                    std::unique_lock<typename value::lock_type> ac( val.val.m_access );
+                    if ( !val.val.bInitialized )
+                    {
+                        val.val.nKey = val.key;
+                        val.val.nData = val.key * 8;
+                        val.val.bInitialized = true;
+                    }
+
+                    if ( bNew ) {
+                        ++nCreated;
+                    }
+                    else {
+                        val.val.nUpdateCall.fetch_add( 1, atomics::memory_order_relaxed );
+                        ++nModified;
+                    }
+                }
+
+                void operator()( keyval_type& cur, keyval_type * old )
+                {
+                    operator()( old == nullptr, cur, 0 );
+                }
+            };
+
+        public:
+            size_t  m_nUpdateFailed = 0;
+            size_t  m_nUpdateCreated = 0;
+            size_t  m_nUpdateExisted = 0;
+            size_t  m_nFunctorCreated = 0;
+            size_t  m_nFunctorModified = 0;
+
+        public:
+            Updater( cds_test::thread_pool& pool, Set& set )
+                : base_class( pool, update_thread )
+                , m_Set( set )
+            {}
+
+            Updater( Updater& src )
+                : base_class( src )
+                , m_Set( src.m_Set )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Updater( *this );
+            }
+
+            virtual void test()
+            {
+                Set& rSet = m_Set;
+
+                Set_InsDel_func& fixture = pool().template fixture<Set_InsDel_func>();
+                size_t * pKeyFirst = fixture.m_pKeyFirst;
+                size_t * pKeyLast = fixture.m_pKeyLast;
+                size_t const nPassCount = fixture.s_nThreadPassCount;
+
+                update_functor func;
+
+                if ( id() & 1 ) {
+                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
+                        for ( size_t * p = pKeyFirst; p < pKeyLast; ++p ) {
+                            std::pair<bool, bool> ret = rSet.update( *p, std::ref( func ), true );
+                            if ( ret.first  ) {
+                                if ( ret.second )
+                                    ++m_nUpdateCreated;
+                                else
+                                    ++m_nUpdateExisted;
+                            }
+                            else
+                                ++m_nUpdateFailed;
+                        }
+                    }
+                }
+                else {
+                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
+                        for ( size_t * p = pKeyLast - 1 ; p >= pKeyFirst; --p ) {
+                            std::pair<bool, bool> ret = rSet.update( *p, std::ref( func ), true );
+                            if ( ret.first  ) {
+                                if ( ret.second )
+                                    ++m_nUpdateCreated;
+                                else
+                                    ++m_nUpdateExisted;
+                            }
+                            else
+                                ++m_nUpdateFailed;
+                        }
+                    }
+                }
+
+                m_nFunctorCreated = func.nCreated;
+                m_nFunctorModified = func.nModified;
+            }
+        };
+
+        template <class Set>
+        class Deleter: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+
+            Set&     m_Set;
+            typedef typename Set::value_type keyval_type;
+
+            struct value_container
+            {
+                size_t      nKeyExpected;
+
+                size_t      nSuccessItem = 0;
+                size_t      nFailedItem = 0;
+            };
+
+            struct erase_functor {
+                value_container     m_cnt;
+
+                void operator ()( keyval_type const& itm )
+                {
+                    keyval_type& item = const_cast<keyval_type&>(itm);
+                    while ( true ) {
+                        bool bBkoff = false;
+                        {
+                            std::unique_lock< typename value::lock_type> ac( item.val.m_access );
+                            if ( item.val.bInitialized ) {
+                                if ( m_cnt.nKeyExpected == item.val.nKey && m_cnt.nKeyExpected * 8 == item.val.nData )
+                                    ++m_cnt.nSuccessItem;
+                                else
+                                    ++m_cnt.nFailedItem;
+                                item.val.nData++;
+                                item.val.nKey = 0;
+                                break;
+                            }
+                            else
+                                bBkoff = true;
+                        }
+                        if ( bBkoff )
+                            cds::backoff::yield()();
+                    }
+                }
+            };
+
+        public:
+            size_t  m_nDeleteSuccess = 0;
+            size_t  m_nDeleteFailed = 0;
+            size_t  m_nValueSuccess = 0;
+            size_t  m_nValueFailed = 0;
+
+        public:
+            Deleter( cds_test::thread_pool& pool, Set& set )
+                : base_class( pool, delete_thread )
+                , m_Set( set )
+            {}
+
+            Deleter( Deleter& src )
+                : base_class( src )
+                , m_Set( src.m_Set )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Deleter( *this );
+            }
+
+            virtual void test()
+            {
+                Set& rSet = m_Set;
+
+                Set_InsDel_func& fixture = pool().template fixture<Set_InsDel_func>();
+                size_t * pKeyFirst      = fixture.m_pKeyFirst;
+                size_t * pKeyLast       = fixture.m_pKeyLast;
+                size_t const nPassCount = fixture.s_nThreadPassCount;
+
+                erase_functor   func;
+
+                if ( id() & 1 ) {
+                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
+                        for ( size_t * p = pKeyFirst; p < pKeyLast; ++p ) {
+                            func.m_cnt.nKeyExpected = *p;
+                            if ( rSet.erase( *p, std::ref( func )))
+                                ++m_nDeleteSuccess;
+                            else
+                                ++m_nDeleteFailed;
+                        }
+                    }
+                }
+                else {
+                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
+                        for ( size_t * p = pKeyLast - 1; p >= pKeyFirst; --p ) {
+                            func.m_cnt.nKeyExpected = *p;
+                            if ( rSet.erase( *p, std::ref( func )))
+                                ++m_nDeleteSuccess;
+                            else
+                                ++m_nDeleteFailed;
+                        }
+                    }
+                }
+
+                m_nValueSuccess = func.m_cnt.nSuccessItem;
+                m_nValueFailed = func.m_cnt.nFailedItem;
+            }
+        };
+
+    protected:
+
+        template <class Set>
+        void run_test( Set& testSet )
+        {
+            typedef Inserter<Set>       InserterThread;
+            typedef Deleter<Set>        DeleterThread;
+            typedef Updater<Set>        UpdaterThread;
+
+            m_pKeyArr = new size_t[ s_nSetSize ];
+            m_pKeyFirst = m_pKeyArr;
+            m_pKeyLast = m_pKeyFirst + s_nSetSize;
+            for ( size_t i = 0; i < s_nSetSize; ++i )
+                m_pKeyArr[i] = i;
+            shuffle( m_pKeyFirst, m_pKeyLast );
+
+            cds_test::thread_pool& pool = get_pool();
+            pool.add( new InserterThread( pool, testSet ), s_nInsertThreadCount );
+            pool.add( new DeleterThread( pool, testSet ),  s_nDeleteThreadCount );
+            pool.add( new UpdaterThread( pool, testSet ),  s_nUpdateThreadCount );
+
+            propout() << std::make_pair( "insert_thread_count", s_nInsertThreadCount )
+                << std::make_pair( "update_thread_count", s_nUpdateThreadCount )
+                << std::make_pair( "delete_thread_count", s_nDeleteThreadCount )
+                << std::make_pair( "thread_pass_count", s_nThreadPassCount )
+                << std::make_pair( "set_size", s_nSetSize );
+
+            std::chrono::milliseconds duration = pool.run();
+
+            propout() << std::make_pair( "duration", duration );
+
+            delete [] m_pKeyArr;
+
+            size_t nInsertSuccess = 0;
+            size_t nInsertFailed = 0;
+            size_t nDeleteSuccess = 0;
+            size_t nDeleteFailed = 0;
+            size_t nDelValueSuccess = 0;
+            size_t nDelValueFailed = 0;
+            size_t nUpdateFailed = 0;
+            size_t nUpdateCreated = 0;
+            size_t nUpdateModified = 0;
+            size_t nEnsFuncCreated = 0;
+            size_t nEnsFuncModified = 0;
+            size_t nTestFunctorRef = 0;
+
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                cds_test::thread& thr = pool.get( i );
+                switch ( thr.type() ) {
+                case insert_thread:
+                    {
+                        InserterThread& inserter = static_cast<InserterThread&>( thr );
+                        nInsertSuccess  += inserter.m_nInsertSuccess;
+                        nInsertFailed   += inserter.m_nInsertFailed;
+                        nTestFunctorRef += inserter.m_nTestFunctorRef;
+                    }
+                    break;
+                case update_thread:
+                    {
+                        UpdaterThread& updater = static_cast<UpdaterThread&>(thr);
+                        nUpdateCreated   += updater.m_nUpdateCreated;
+                        nUpdateModified  += updater.m_nUpdateExisted;
+                        nUpdateFailed    += updater.m_nUpdateFailed;
+                        nEnsFuncCreated  += updater.m_nFunctorCreated;
+                        nEnsFuncModified += updater.m_nFunctorModified;
+                    }
+                    break;
+                case delete_thread:
+                    {
+                        DeleterThread& deleter = static_cast<DeleterThread&>(thr);
+                        nDeleteSuccess   += deleter.m_nDeleteSuccess;
+                        nDeleteFailed    += deleter.m_nDeleteFailed;
+                        nDelValueSuccess += deleter.m_nValueSuccess;
+                        nDelValueFailed  += deleter.m_nValueFailed;
+                    }
+                    break;
+                }
+            }
+
+            propout()
+                << std::make_pair( "insert_success", nInsertSuccess )
+                << std::make_pair( "delete_success", nDeleteSuccess )
+                << std::make_pair( "insert_failed", nInsertFailed )
+                << std::make_pair( "delete_failed", nDeleteFailed )
+                << std::make_pair( "update_created", nUpdateCreated )
+                << std::make_pair( "update_modified", nUpdateModified )
+                << std::make_pair( "update_failed", nUpdateFailed )
+                << std::make_pair( "final_set_size", testSet.size() );
+
+
+            EXPECT_EQ( nDelValueFailed, 0 );
+            EXPECT_EQ( nDelValueSuccess, nDeleteSuccess );
+
+            EXPECT_EQ( nUpdateFailed, 0 );
+            EXPECT_EQ( nUpdateCreated, nEnsFuncCreated );
+            EXPECT_EQ( nUpdateModified, nEnsFuncModified );
+
+            // nTestFunctorRef is call count of insert functor
+            EXPECT_EQ( nTestFunctorRef, nInsertSuccess );
+
+            testSet.clear();
+            EXPECT_TRUE( testSet.empty() );
+
+            additional_check( testSet );
+            print_stat( propout(), testSet  );
+
+            additional_cleanup( testSet );
+        }
+
+        template <class Set>
+        void run_test()
+        {
+            Set s( *this );
+            run_test( s );
+        }
+    };
+
+    class Set_InsDel_func_LF: public Set_InsDel_func
+        , public ::testing::WithParamInterface<size_t>
+    {
+    public:
+        template <class Set>
+        void run_test()
+        {
+            s_nLoadFactor = GetParam();
+            propout() << std::make_pair( "load_factor", s_nLoadFactor );
+            Set_InsDel_func::run_test<Set>();
+        }
+
+        static std::vector<size_t> get_load_factors();
+    };
+
+} // namespace set
diff --git a/test/stress/set/insdel_func/set_insdel_func_cuckoo.cpp b/test/stress/set/insdel_func/set_insdel_func_cuckoo.cpp
new file mode 100644 (file)
index 0000000..7d37900
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdel_func.h"
+#include "set_type_cuckoo.h"
+
+namespace set {
+
+    CDSSTRESS_CuckooSet( Set_InsDel_func, run_test, size_t, value )
+
+} // namespace set
diff --git a/test/stress/set/insdel_func/set_insdel_func_ellentree.cpp b/test/stress/set/insdel_func/set_insdel_func_ellentree.cpp
new file mode 100644 (file)
index 0000000..36219cb
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdel_func.h"
+#include "set_type_ellen_bintree.h"
+
+namespace set {
+
+    CDSSTRESS_EllenBinTreeSet( Set_InsDel_func, run_test, size_t, value )
+
+} // namespace set
diff --git a/test/stress/set/insdel_func/set_insdel_func_feldman_hashset.cpp b/test/stress/set/insdel_func/set_insdel_func_feldman_hashset.cpp
new file mode 100644 (file)
index 0000000..05a8f6c
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdel_func.h"
+#include "set_type_feldman_hashset.h"
+
+namespace set {
+
+    CDSSTRESS_FeldmanHashSet_fixed( Set_InsDel_func, run_test, size_t, value )
+
+} // namespace set
diff --git a/test/stress/set/insdel_func/set_insdel_func_michael.cpp b/test/stress/set/insdel_func/set_insdel_func_michael.cpp
new file mode 100644 (file)
index 0000000..ead49b4
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdel_func.h"
+#include "set_type_michael.h"
+
+namespace set {
+
+    CDSSTRESS_MichaelSet( Set_InsDel_func_LF, run_test, size_t, value )
+
+} // namespace set
diff --git a/test/stress/set/insdel_func/set_insdel_func_skip.cpp b/test/stress/set/insdel_func/set_insdel_func_skip.cpp
new file mode 100644 (file)
index 0000000..57b1c7b
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdel_func.h"
+#include "set_type_skip_list.h"
+
+namespace set {
+
+    CDSSTRESS_SkipListSet( Set_InsDel_func, run_test, size_t, value )
+
+} // namespace set
diff --git a/test/stress/set/insdel_func/set_insdel_func_split.cpp b/test/stress/set/insdel_func/set_insdel_func_split.cpp
new file mode 100644 (file)
index 0000000..fb7978b
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdel_func.h"
+#include "set_type_split_list.h"
+
+namespace set {
+
+    CDSSTRESS_SplitListSet( Set_InsDel_func_LF, run_test, size_t, value )
+
+} // namespace set
diff --git a/test/stress/set/insdel_func/set_insdel_func_striped.cpp b/test/stress/set/insdel_func/set_insdel_func_striped.cpp
new file mode 100644 (file)
index 0000000..22106b2
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdel_func.h"
+#include "set_type_striped.h"
+
+namespace set {
+
+    CDSSTRESS_StripedSet( Set_InsDel_func_LF, run_test, size_t, value )
+
+} // namespace set
+
diff --git a/test/stress/set/insdel_string/CMakeLists.txt b/test/stress/set/insdel_string/CMakeLists.txt
new file mode 100644 (file)
index 0000000..0b557e3
--- /dev/null
@@ -0,0 +1,30 @@
+set(PACKAGE_NAME stress-set-insdel-string)
+
+set(CDSSTRESS_SET_INSDEL_STRING_SOURCES
+    ../../main.cpp
+    set_insdel_string.cpp
+    set_insdel_string_cuckoo.cpp
+    set_insdel_string_ellentree.cpp
+    set_insdel_string_feldman_hashset.cpp
+    set_insdel_string_michael.cpp
+    set_insdel_string_skip.cpp
+    set_insdel_string_split.cpp
+    set_insdel_string_std.cpp
+    set_insdel_string_striped.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    ${CMAKE_CURRENT_SOURCE_DIR}/..
+)
+
+add_executable(${PACKAGE_NAME} ${CDSSTRESS_SET_INSDEL_STRING_SOURCES} $<TARGET_OBJECTS:${CDSSTRESS_FRAMEWORK_LIBRARY}>)
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/stress/set/insdel_string/set_insdel_string.cpp b/test/stress/set/insdel_string/set_insdel_string.cpp
new file mode 100644 (file)
index 0000000..eeb9fbc
--- /dev/null
@@ -0,0 +1,118 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdel_string.h"
+
+namespace set {
+
+    size_t Set_InsDel_string::s_nSetSize = 1000000;      // set size
+    size_t Set_InsDel_string::s_nInsertThreadCount = 4;  // count of insertion thread
+    size_t Set_InsDel_string::s_nDeleteThreadCount = 4;  // count of deletion thread
+    size_t Set_InsDel_string::s_nThreadPassCount = 4;    // pass count for each thread
+    size_t Set_InsDel_string::s_nMaxLoadFactor = 8;      // maximum load factor
+
+    size_t Set_InsDel_string::s_nCuckooInitialSize = 1024;// initial size for CuckooSet
+    size_t Set_InsDel_string::s_nCuckooProbesetSize = 16; // CuckooSet probeset size (only for list-based probeset)
+    size_t Set_InsDel_string::s_nCuckooProbesetThreshold = 0; // CUckooSet probeset threshold (0 - use default)
+
+    size_t Set_InsDel_string::s_nFeldmanSet_HeadBits = 10;
+    size_t Set_InsDel_string::s_nFeldmanSet_ArrayBits = 4;
+
+    size_t Set_InsDel_string::s_nLoadFactor = 1;
+    std::vector<std::string> Set_InsDel_string::m_arrString;
+
+    void Set_InsDel_string::SetUpTestCase()
+    {
+        cds_test::config const& cfg = get_config( "map_insdel_func" );
+
+        s_nSetSize = cfg.get_size_t( "MapSize", s_nSetSize );
+        if ( s_nSetSize < 1000 )
+            s_nSetSize = 1000;
+
+        s_nInsertThreadCount = cfg.get_size_t( "InsertThreadCount", s_nInsertThreadCount );
+        if ( s_nInsertThreadCount == 0 )
+            s_nInsertThreadCount = 2;
+
+        s_nDeleteThreadCount = cfg.get_size_t( "DeleteThreadCount", s_nDeleteThreadCount );
+        if ( s_nDeleteThreadCount == 0 )
+            s_nDeleteThreadCount = 2;
+
+        s_nThreadPassCount = cfg.get_size_t( "ThreadPassCount", s_nThreadPassCount );
+        if ( s_nThreadPassCount == 0 )
+            s_nThreadPassCount = 4;
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        s_nCuckooInitialSize = cfg.get_size_t( "CuckooInitialSize", s_nCuckooInitialSize );
+        if ( s_nCuckooInitialSize < 256 )
+            s_nCuckooInitialSize = 256;
+
+        s_nCuckooProbesetSize = cfg.get_size_t( "CuckooProbesetSize", s_nCuckooProbesetSize );
+        if ( s_nCuckooProbesetSize < 8 )
+            s_nCuckooProbesetSize = 8;
+
+        s_nCuckooProbesetThreshold = cfg.get_size_t( "CuckooProbesetThreshold", s_nCuckooProbesetThreshold );
+
+        s_nFeldmanSet_HeadBits = cfg.get_size_t( "FeldmanMapHeadBits", s_nFeldmanSet_HeadBits );
+        if ( s_nFeldmanSet_HeadBits == 0 )
+            s_nFeldmanSet_HeadBits = 2;
+
+        s_nFeldmanSet_ArrayBits = cfg.get_size_t( "FeldmanMapArrayBits", s_nFeldmanSet_ArrayBits );
+        if ( s_nFeldmanSet_ArrayBits == 0 )
+            s_nFeldmanSet_ArrayBits = 2;
+
+        // Load string dictionary
+        m_arrString = load_dictionary();
+    }
+
+    void Set_InsDel_string::TearDownTestCase()
+    {
+        m_arrString.clear();
+    }
+
+    std::vector<size_t> Set_InsDel_string_LF::get_load_factors()
+    {
+        cds_test::config const& cfg = get_config( "map_insdel_func" );
+
+        s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor );
+        if ( s_nMaxLoadFactor == 0 )
+            s_nMaxLoadFactor = 1;
+
+        std::vector<size_t> lf;
+        for ( size_t n = 1; n <= s_nMaxLoadFactor; n *= 2 )
+            lf.push_back( n );
+
+        return lf;
+    }
+
+    INSTANTIATE_TEST_CASE_P( a, Set_InsDel_string_LF, ::testing::ValuesIn( Set_InsDel_string_LF::get_load_factors()));
+} // namespace set
diff --git a/test/stress/set/insdel_string/set_insdel_string.h b/test/stress/set/insdel_string/set_insdel_string.h
new file mode 100644 (file)
index 0000000..28e75ee
--- /dev/null
@@ -0,0 +1,515 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_type.h"
+
+namespace set {
+
+#define TEST_CASE(TAG, X)  void X();
+
+    class Set_InsDel_string: public cds_test::stress_fixture
+    {
+    public:
+        static size_t s_nSetSize;               // set size
+        static size_t s_nInsertThreadCount;     // count of insertion thread
+        static size_t s_nDeleteThreadCount;     // count of deletion thread
+        static size_t s_nThreadPassCount;       // pass count for each thread
+        static size_t s_nMaxLoadFactor;         // maximum load factor
+
+        static size_t s_nCuckooInitialSize;     // initial size for CuckooSet
+        static size_t s_nCuckooProbesetSize;    // CuckooSet probeset size (only for list-based probeset)
+        static size_t s_nCuckooProbesetThreshold; // CUckooSet probeset threshold (0 - use default)
+
+        static size_t s_nFeldmanSet_HeadBits;
+        static size_t s_nFeldmanSet_ArrayBits;
+
+        static size_t s_nLoadFactor;
+        static std::vector<std::string>  m_arrString;
+
+        static void SetUpTestCase();
+        static void TearDownTestCase();
+
+    private:
+        typedef std::string key_type;
+        typedef size_t      value_type;
+
+        enum {
+            insert_thread,
+            delete_thread,
+            extract_thread
+        };
+
+        template <class Set>
+        class Inserter: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+
+            Set&     m_Set;
+            typedef typename Set::value_type    keyval_type;
+
+        public:
+            size_t  m_nInsertSuccess = 0;
+            size_t  m_nInsertFailed = 0;
+
+        public:
+            Inserter( cds_test::thread_pool& pool, Set& set )
+                : base_class( pool, insert_thread )
+                , m_Set( set )
+            {}
+
+            Inserter( Inserter& src )
+                : base_class( src )
+                , m_Set( src.m_Set )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Inserter( *this );
+            }
+
+            virtual void test()
+            {
+                Set& rSet = m_Set;
+
+                Set_InsDel_string& fixture = pool().template fixture<Set_InsDel_string>();
+                size_t nArrSize = m_arrString.size();
+                size_t const nSetSize = fixture.s_nSetSize;
+                size_t const nPassCount = fixture.s_nThreadPassCount;
+
+                if ( id() & 1 ) {
+                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
+                        for ( size_t nItem = 0; nItem < nSetSize; ++nItem ) {
+                            if ( rSet.insert( keyval_type( m_arrString[nItem % nArrSize], nItem * 8 )))
+                                ++m_nInsertSuccess;
+                            else
+                                ++m_nInsertFailed;
+                        }
+                    }
+                }
+                else {
+                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
+                        for ( size_t nItem = nSetSize; nItem > 0; --nItem ) {
+                            if ( rSet.insert( keyval_type( m_arrString[nItem % nArrSize], nItem * 8 )))
+                                ++m_nInsertSuccess;
+                            else
+                                ++m_nInsertFailed;
+                        }
+                    }
+                }
+            }
+        };
+
+        template <class Set>
+        class Deleter: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+
+            Set&     m_Set;
+        public:
+            size_t  m_nDeleteSuccess = 0;
+            size_t  m_nDeleteFailed = 0;
+
+        public:
+            Deleter( cds_test::thread_pool& pool, Set& set )
+                : base_class( pool, delete_thread )
+                , m_Set( set )
+            {}
+
+            Deleter( Deleter& src )
+                : base_class( src )
+                , m_Set( src.m_Set )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Deleter( *this );
+            }
+
+            virtual void test()
+            {
+                Set& rSet = m_Set;
+
+                Set_InsDel_string& fixture = pool().template fixture<Set_InsDel_string>();
+                size_t nArrSize = m_arrString.size();
+                size_t const nSetSize = fixture.s_nSetSize;
+                size_t const nPassCount = fixture.s_nThreadPassCount;
+
+                if ( id() & 1 ) {
+                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
+                        for ( size_t nItem = 0; nItem < nSetSize; ++nItem ) {
+                            if ( rSet.erase( m_arrString[nItem % nArrSize] ))
+                                ++m_nDeleteSuccess;
+                            else
+                                ++m_nDeleteFailed;
+                        }
+                    }
+                }
+                else {
+                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
+                        for ( size_t nItem = nSetSize; nItem > 0; --nItem ) {
+                            if ( rSet.erase( m_arrString[nItem % nArrSize] ))
+                                ++m_nDeleteSuccess;
+                            else
+                                ++m_nDeleteFailed;
+                        }
+                    }
+                }
+            }
+        };
+
+        template <typename GC, class Set>
+        class Extractor: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+            Set&     m_Set;
+
+        public:
+            size_t  m_nDeleteSuccess = 0;
+            size_t  m_nDeleteFailed = 0;
+
+        public:
+            Extractor( cds_test::thread_pool& pool, Set& set )
+                : base_class( pool, extract_thread )
+                , m_Set( set )
+            {}
+
+            Extractor( Extractor& src )
+                : base_class( src )
+                , m_Set( src.m_Set )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Extractor( *this );
+            }
+
+            virtual void test()
+            {
+                Set& rSet = m_Set;
+
+                typename Set::guarded_ptr gp;
+
+                Set_InsDel_string& fixture = pool().template fixture<Set_InsDel_string>();
+                size_t nArrSize = m_arrString.size();
+                size_t const nSetSize = fixture.s_nSetSize;
+                size_t const nPassCount = fixture.s_nThreadPassCount;
+
+                if ( id() & 1 ) {
+                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
+                        for ( size_t nItem = 0; nItem < nSetSize; ++nItem ) {
+                            gp = rSet.extract( m_arrString[nItem % nArrSize] );
+                            if ( gp )
+                                ++m_nDeleteSuccess;
+                            else
+                                ++m_nDeleteFailed;
+                            gp.release();
+                        }
+                    }
+                }
+                else {
+                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
+                        for ( size_t nItem = nSetSize; nItem > 0; --nItem ) {
+                            gp = rSet.extract( m_arrString[nItem % nArrSize] );
+                            if ( gp )
+                                ++m_nDeleteSuccess;
+                            else
+                                ++m_nDeleteFailed;
+                            gp.release();
+                        }
+                    }
+                }
+            }
+        };
+
+        template <typename RCU, class Set>
+        class Extractor<cds::urcu::gc<RCU>, Set >: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+            Set&     m_Set;
+
+        public:
+            size_t  m_nDeleteSuccess = 0;
+            size_t  m_nDeleteFailed = 0;
+
+        public:
+            Extractor( cds_test::thread_pool& pool, Set& set )
+                : base_class( pool, extract_thread )
+                , m_Set( set )
+            {}
+
+            Extractor( Extractor& src )
+                : base_class( src )
+                , m_Set( src.m_Set )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Extractor( *this );
+            }
+
+            virtual void test()
+            {
+                Set& rSet = m_Set;
+
+                typename Set::exempt_ptr xp;
+
+                Set_InsDel_string& fixture = pool().template fixture<Set_InsDel_string>();
+                size_t nArrSize = m_arrString.size();
+                size_t const nSetSize = fixture.s_nSetSize;
+                size_t const nPassCount = fixture.s_nThreadPassCount;
+
+                if ( id() & 1 ) {
+                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
+                        for ( size_t nItem = 0; nItem < nSetSize; ++nItem ) {
+                            if ( Set::c_bExtractLockExternal ) {
+                                typename Set::rcu_lock l;
+                                xp = rSet.extract( m_arrString[nItem % nArrSize] );
+                                if ( xp )
+                                    ++m_nDeleteSuccess;
+                                else
+                                    ++m_nDeleteFailed;
+                            }
+                            else {
+                                xp = rSet.extract( m_arrString[nItem % nArrSize] );
+                                if ( xp )
+                                    ++m_nDeleteSuccess;
+                                else
+                                    ++m_nDeleteFailed;
+                            }
+                            xp.release();
+                        }
+                    }
+                }
+                else {
+                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
+                        for ( size_t nItem = nSetSize; nItem > 0; --nItem ) {
+                            if ( Set::c_bExtractLockExternal ) {
+                                typename Set::rcu_lock l;
+                                xp = rSet.extract( m_arrString[nItem % nArrSize] );
+                                if ( xp )
+                                    ++m_nDeleteSuccess;
+                                else
+                                    ++m_nDeleteFailed;
+                            }
+                            else {
+                                xp = rSet.extract( m_arrString[nItem % nArrSize] );
+                                if ( xp )
+                                    ++m_nDeleteSuccess;
+                                else
+                                    ++m_nDeleteFailed;
+                            }
+                            xp.release();
+                        }
+                    }
+                }
+            }
+        };
+
+    protected:
+        template <class Set>
+        void do_test( Set& testSet )
+        {
+            typedef Inserter<Set> InserterThread;
+            typedef Deleter<Set>  DeleterThread;
+
+            cds_test::thread_pool& pool = get_pool();
+            pool.add( new InserterThread( pool, testSet ), s_nInsertThreadCount );
+            pool.add( new DeleterThread( pool, testSet ), s_nDeleteThreadCount );
+
+            propout() << std::make_pair( "insert_thread_count", s_nInsertThreadCount )
+                << std::make_pair( "delete_thread_count", s_nDeleteThreadCount )
+                << std::make_pair( "thread_pass_count", s_nThreadPassCount )
+                << std::make_pair( "set_size", s_nSetSize );
+
+            std::chrono::milliseconds duration = pool.run();
+
+            propout() << std::make_pair( "duration", duration );
+
+            size_t nInsertSuccess = 0;
+            size_t nInsertFailed = 0;
+            size_t nDeleteSuccess = 0;
+            size_t nDeleteFailed = 0;
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                cds_test::thread& thr = pool.get( i );
+                switch ( thr.type() ) {
+                case insert_thread:
+                    {
+                        InserterThread& inserter = static_cast<InserterThread&>( thr );
+                        nInsertSuccess += inserter.m_nInsertSuccess;
+                        nInsertFailed += inserter.m_nInsertFailed;
+                    }
+                    break;
+                case delete_thread:
+                    {
+                        DeleterThread& deleter = static_cast<DeleterThread&>(thr);
+                        nDeleteSuccess += deleter.m_nDeleteSuccess;
+                        nDeleteFailed += deleter.m_nDeleteFailed;
+                }
+                    break;
+                default:
+                    assert( false ); // Forgot anything?..
+                }
+            }
+
+            propout()
+                << std::make_pair( "insert_success", nInsertSuccess )
+                << std::make_pair( "delete_success", nDeleteSuccess )
+                << std::make_pair( "insert_failed", nInsertFailed )
+                << std::make_pair( "delete_failed", nDeleteFailed )
+                << std::make_pair( "final_set_size", testSet.size() );
+
+            testSet.clear();
+            EXPECT_TRUE( testSet.empty() );
+
+            additional_check( testSet );
+            print_stat( propout(), testSet );
+            additional_cleanup( testSet );
+        }
+
+        template <class Set>
+        void do_test_extract( Set& testSet )
+        {
+            typedef Inserter<Set> InserterThread;
+            typedef Deleter<Set>  DeleterThread;
+            typedef Extractor<typename Set::gc, Set> ExtractThread;
+
+            size_t const nDelThreadCount = s_nDeleteThreadCount / 2;
+            size_t const nExtractThreadCount = s_nDeleteThreadCount - nDelThreadCount;
+
+            cds_test::thread_pool& pool = get_pool();
+            pool.add( new InserterThread( pool, testSet ), s_nInsertThreadCount );
+            pool.add( new DeleterThread( pool, testSet ), nDelThreadCount );
+            pool.add( new ExtractThread( pool, testSet ), nExtractThreadCount );
+
+            propout() << std::make_pair( "insert_thread_count", s_nInsertThreadCount )
+                << std::make_pair( "delete_thread_count", nDelThreadCount )
+                << std::make_pair( "extract_thread_count", nExtractThreadCount )
+                << std::make_pair( "thread_pass_count", s_nThreadPassCount )
+                << std::make_pair( "set_size", s_nSetSize );
+
+            std::chrono::milliseconds duration = pool.run();
+
+            propout() << std::make_pair( "duration", duration );
+
+            size_t nInsertSuccess = 0;
+            size_t nInsertFailed = 0;
+            size_t nDeleteSuccess = 0;
+            size_t nDeleteFailed = 0;
+            size_t nExtractSuccess = 0;
+            size_t nExtractFailed = 0;
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                cds_test::thread& thr = pool.get( i );
+                switch ( thr.type() ) {
+                case insert_thread:
+                    {
+                        InserterThread& inserter = static_cast<InserterThread&>(thr);
+                        nInsertSuccess += inserter.m_nInsertSuccess;
+                        nInsertFailed += inserter.m_nInsertFailed;
+                    }
+                    break;
+                case delete_thread:
+                    {
+                        DeleterThread& deleter = static_cast<DeleterThread&>(thr);
+                        nDeleteSuccess += deleter.m_nDeleteSuccess;
+                        nDeleteFailed += deleter.m_nDeleteFailed;
+                    }
+                    break;
+                case extract_thread:
+                    {
+                        ExtractThread& extractor = static_cast<ExtractThread&>(thr);
+                        nExtractSuccess += extractor.m_nDeleteSuccess;
+                        nExtractFailed += extractor.m_nDeleteFailed;
+                    }
+                    break;
+                default:
+                    assert( false ); // Forgot anything?..
+                }
+            }
+
+            propout()
+                << std::make_pair( "insert_success", nInsertSuccess )
+                << std::make_pair( "delete_success", nDeleteSuccess )
+                << std::make_pair( "extract_success", nExtractSuccess )
+                << std::make_pair( "insert_failed",  nInsertFailed )
+                << std::make_pair( "delete_failed",  nDeleteFailed )
+                << std::make_pair( "extract_failed", nExtractFailed )
+                << std::make_pair( "final_set_size", testSet.size() );
+
+            testSet.clear();
+            EXPECT_TRUE( testSet.empty() );
+
+            additional_check( testSet );
+            print_stat( propout(), testSet );
+            additional_cleanup( testSet );
+        }
+
+        template <class Set>
+        void run_test()
+        {
+            ASSERT_TRUE( m_arrString.size() > 0 );
+
+            Set s( *this );
+            do_test( s );
+        }
+
+        template <class Set>
+        void run_test_extract()
+        {
+            ASSERT_TRUE( m_arrString.size() > 0 );
+
+            Set s( *this );
+            do_test_extract( s );
+        }
+    };
+
+    class Set_InsDel_string_LF: public Set_InsDel_string
+        , public ::testing::WithParamInterface<size_t>
+    {
+    public:
+        template <class Set>
+        void run_test()
+        {
+            s_nLoadFactor = GetParam();
+            propout() << std::make_pair( "load_factor", s_nLoadFactor );
+            Set_InsDel_string::run_test<Set>();
+        }
+
+        template <class Set>
+        void run_test_extract()
+        {
+            s_nLoadFactor = GetParam();
+            propout() << std::make_pair( "load_factor", s_nLoadFactor );
+            Set_InsDel_string::run_test_extract<Set>();
+        }
+
+        static std::vector<size_t> get_load_factors();
+    };
+
+} // namespace set
diff --git a/test/stress/set/insdel_string/set_insdel_string_cuckoo.cpp b/test/stress/set/insdel_string/set_insdel_string_cuckoo.cpp
new file mode 100644 (file)
index 0000000..c9b02b0
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdel_string.h"
+#include "set_type_cuckoo.h"
+
+namespace set {
+
+    CDSSTRESS_CuckooSet( Set_InsDel_string, run_test, std::string, size_t )
+
+} // namespace set
diff --git a/test/stress/set/insdel_string/set_insdel_string_ellentree.cpp b/test/stress/set/insdel_string/set_insdel_string_ellentree.cpp
new file mode 100644 (file)
index 0000000..7c78bff
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdel_string.h"
+#include "set_type_ellen_bintree.h"
+
+namespace set {
+
+    CDSSTRESS_EllenBinTreeSet( Set_InsDel_string, run_test_extract, std::string, size_t )
+
+} // namespace set
diff --git a/test/stress/set/insdel_string/set_insdel_string_feldman_hashset.cpp b/test/stress/set/insdel_string/set_insdel_string_feldman_hashset.cpp
new file mode 100644 (file)
index 0000000..792d116
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdel_string.h"
+#include "set_type_feldman_hashset.h"
+
+namespace set {
+
+    CDSSTRESS_FeldmanHashSet_stdhash( Set_InsDel_string, run_test_extract, std::string, size_t )
+    CDSSTRESS_FeldmanHashSet_city( Set_InsDel_string, run_test_extract, std::string, size_t )
+
+} // namespace set
diff --git a/test/stress/set/insdel_string/set_insdel_string_michael.cpp b/test/stress/set/insdel_string/set_insdel_string_michael.cpp
new file mode 100644 (file)
index 0000000..26561cc
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdel_string.h"
+#include "set_type_michael.h"
+
+namespace set {
+
+    CDSSTRESS_MichaelSet( Set_InsDel_string_LF, run_test_extract, std::string, size_t )
+
+} // namespace set
diff --git a/test/stress/set/insdel_string/set_insdel_string_skip.cpp b/test/stress/set/insdel_string/set_insdel_string_skip.cpp
new file mode 100644 (file)
index 0000000..1ba4b2c
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdel_string.h"
+#include "set_type_skip_list.h"
+
+namespace set {
+
+    CDSSTRESS_SkipListSet( Set_InsDel_string, run_test_extract, std::string, size_t )
+
+} // namespace set
diff --git a/test/stress/set/insdel_string/set_insdel_string_split.cpp b/test/stress/set/insdel_string/set_insdel_string_split.cpp
new file mode 100644 (file)
index 0000000..b570933
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdel_string.h"
+#include "set_type_split_list.h"
+
+namespace set {
+
+    CDSSTRESS_SplitListSet( Set_InsDel_string_LF, run_test_extract, std::string, size_t )
+
+} // namespace set
diff --git a/test/stress/set/insdel_string/set_insdel_string_std.cpp b/test/stress/set/insdel_string/set_insdel_string_std.cpp
new file mode 100644 (file)
index 0000000..2bb7b03
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdel_string.h"
+#include "set_type_std.h"
+
+namespace set {
+    CDSSTRESS_StdSet( Set_InsDel_string, run_test, std::string, size_t )
+} // namespace set
+
diff --git a/test/stress/set/insdel_string/set_insdel_string_striped.cpp b/test/stress/set/insdel_string/set_insdel_string_striped.cpp
new file mode 100644 (file)
index 0000000..3026dfd
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "set_insdel_string.h"
+#include "set_type_striped.h"
+
+namespace set {
+
+    CDSSTRESS_StripedSet( Set_InsDel_string_LF, run_test, std::string, size_t )
+
+} // namespace set
+
diff --git a/test/stress/set/set_type.h b/test/stress/set/set_type.h
new file mode 100644 (file)
index 0000000..37bc106
--- /dev/null
@@ -0,0 +1,320 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TYPE_H
+#define CDSUNIT_SET_TYPE_H
+
+#include <cds/urcu/general_instant.h>
+#include <cds/urcu/general_buffered.h>
+#include <cds/urcu/general_threaded.h>
+#include <cds/urcu/signal_buffered.h>
+#include <cds/urcu/signal_threaded.h>
+
+#include <cds/opt/hash.h>
+#include <cds/sync/spinlock.h>
+
+#include <cds_test/stress_test.h>
+#include "framework/michael_alloc.h"
+
+namespace set {
+    namespace cc = cds::container;
+    namespace co = cds::opt;
+
+    typedef cds::urcu::gc< cds::urcu::general_instant<> >   rcu_gpi;
+    typedef cds::urcu::gc< cds::urcu::general_buffered<> >  rcu_gpb;
+    typedef cds::urcu::gc< cds::urcu::general_threaded<> >  rcu_gpt;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+    typedef cds::urcu::gc< cds::urcu::signal_buffered<> >  rcu_shb;
+    typedef cds::urcu::gc< cds::urcu::signal_threaded<> >  rcu_sht;
+#endif
+
+    template <typename Key>
+    struct less;
+
+    template <typename Key>
+    struct cmp 
+    {
+        int operator ()(Key const& k1, Key const& k2) const
+        {
+            if ( less<Key>( k1, k2 ) )
+                return -1;
+            return less<Key>( k2, k1 ) ? 1 : 0;
+        }
+    };
+
+    template <typename Key>
+    struct hash;
+
+#define CDSUNIT_INT_COMPARE(t)  template <> struct cmp<t> { int operator()( t k1, t k2 ){ return (int)(k1 - k2); } }
+    CDSUNIT_INT_COMPARE(char);
+    CDSUNIT_INT_COMPARE(unsigned char);
+    CDSUNIT_INT_COMPARE(int);
+    CDSUNIT_INT_COMPARE(unsigned int);
+    CDSUNIT_INT_COMPARE(long);
+    CDSUNIT_INT_COMPARE(unsigned long);
+    CDSUNIT_INT_COMPARE(long long);
+    CDSUNIT_INT_COMPARE(unsigned long long);
+#undef CDSUNIT_INT_COMPARE
+
+#define CDSUNIT_INT_LESS(t)  template <> struct less<t> { bool operator()( t k1, t k2 ){ return k1 < k2; } }
+    CDSUNIT_INT_LESS( char );
+    CDSUNIT_INT_LESS( unsigned char );
+    CDSUNIT_INT_LESS( int );
+    CDSUNIT_INT_LESS( unsigned int );
+    CDSUNIT_INT_LESS( long );
+    CDSUNIT_INT_LESS( unsigned long );
+    CDSUNIT_INT_LESS( long long );
+    CDSUNIT_INT_LESS( unsigned long long );
+#undef CDSUNIT_INT_LESS
+
+    template <>
+    struct cmp<std::string>
+    {
+        int operator()(std::string const& s1, std::string const& s2)
+        {
+            return s1.compare( s2 );
+        }
+        int operator()(std::string const& s1, char const * s2)
+        {
+            return s1.compare( s2 );
+        }
+        int operator()(char const * s1, std::string const& s2)
+        {
+            return -s2.compare( s1 );
+        }
+    };
+
+    template <>
+    struct less<std::string>
+    {
+        bool operator ()( std::string const& k1, std::string const& k2 ) const
+        {
+            return cmp<std::string>()( k1, k2 ) < 0;
+        }
+        bool operator ()( std::string const& k1, char const* k2 ) const
+        {
+            return cmp<std::string>()( k1, k2 ) < 0;
+        }
+        bool operator ()( char const* k1, std::string const& k2 ) const
+        {
+            return cmp<std::string>()( k1, k2 ) < 0;
+        }
+    };
+
+    template <typename T>
+    struct hash
+    {
+        typedef size_t result_type;
+        typedef T      argument_type;
+
+        size_t operator()( T const& k ) const
+        {
+            return std::hash<size_t>()(k.nKey);
+        }
+
+        size_t operator()( size_t k ) const
+        {
+            return std::hash<size_t>()(k);
+        }
+    };
+
+    template <>
+    struct hash<size_t>
+    {
+        typedef size_t result_type;
+        typedef size_t argument_type;
+
+        size_t operator()( size_t k ) const
+        {
+            return std::hash<size_t>()(k);
+        }
+    };
+
+    template <>
+    struct hash<std::string>
+    {
+        typedef size_t result_type;
+        typedef std::string argument_type;
+
+        size_t operator()( std::string const& k ) const
+        {
+            return std::hash<std::string>()(k);
+        }
+    };
+
+    // forward
+    template <typename ImplSelector, typename Key, typename Value>
+    struct set_type;
+
+    template <typename Key, typename Value>
+    struct set_type_base
+    {
+        typedef Key     key_type;
+        typedef Value   value_type;
+
+        struct key_val {
+            key_type    key;
+            value_type  val;
+
+            /*explicit*/ key_val( key_type const& k ): key(k), val() {}
+            key_val( key_type const& k, value_type const& v ): key(k), val(v) {}
+
+            template <typename K>
+            explicit key_val( K const& k ): key(k) {}
+
+            template <typename K, typename T>
+            key_val( K const& k, T const& v ): key(k), val(v) {}
+        };
+
+        typedef set::hash<key_type>   key_hash;
+        typedef set::less<key_type>   key_less;
+        typedef set::cmp<key_type>    key_compare;
+
+        struct less {
+            bool operator()( key_val const& k1, key_val const& k2 ) const
+            {
+                return key_less()( k1.key, k2.key );
+            }
+            bool operator()( key_type const& k1, key_val const& k2 ) const
+            {
+                return key_less()( k1, k2.key );
+            }
+            bool operator()( key_val const& k1, key_type const& k2 ) const
+            {
+                return key_less()( k1.key, k2 );
+            }
+        };
+
+        struct compare {
+            int operator()( key_val const& k1, key_val const& k2 ) const
+            {
+                return key_compare()( k1.key, k2.key );
+            }
+            int operator()( key_type const& k1, key_val const& k2 ) const
+            {
+                return key_compare()( k1, k2.key );
+            }
+            int operator()( key_val const& k1, key_type const& k2 ) const
+            {
+                return key_compare()( k1.key, k2 );
+            }
+        };
+
+        struct equal_to {
+            bool operator()( key_val const& k1, key_val const& k2 ) const
+            {
+                return key_compare()( k1.key, k2.key ) == 0;
+            }
+            bool operator()( key_type const& k1, key_val const& k2 ) const
+            {
+                return key_compare()( k1, k2.key ) == 0;
+            }
+            bool operator()( key_val const& k1, key_type const& k2 ) const
+            {
+                return key_compare()( k1.key, k2 ) == 0;
+            }
+        };
+
+
+        struct hash: public key_hash
+        {
+            size_t operator()( key_val const& v ) const
+            {
+                return key_hash::operator()( v.key );
+            }
+            size_t operator()( key_type const& key ) const
+            {
+                return key_hash::operator()( key );
+            }
+            template <typename Q>
+            size_t operator()( Q const& k ) const
+            {
+                return key_hash::operator()( k );
+            }
+        };
+
+        struct hash2: public hash
+        {
+            size_t operator()( key_val const& k ) const
+            {
+                size_t h = hash::operator ()( k.key );
+                size_t seed = ~h;
+                seed ^= h + 0x9e3779b9 + (seed << 6) + (seed >> 2);
+                return seed;
+            }
+            size_t operator()( key_type const& k ) const
+            {
+                size_t h = hash::operator ()( k );
+                size_t seed = ~h;
+                seed ^= h + 0x9e3779b9 + (seed << 6) + (seed >> 2);
+                return seed;
+            }
+            template <typename Q>
+            size_t operator()( Q const& k ) const
+            {
+                return key_hash::operator()( k );
+            }
+        };
+    };
+
+
+    // *************************************************
+    // print_stat
+    // *************************************************
+
+    template <typename Set>
+    static inline void print_stat( cds_test::property_stream&, Set const& /*s*/ )
+    {}
+
+
+    //*******************************************************
+    // additional_check
+    //*******************************************************
+
+    template <typename Set>
+    static inline void additional_check( Set& /*set*/ )
+    {}
+
+    template <typename Set>
+    static inline void additional_cleanup( Set& /*set*/ )
+    {}
+
+    //*******************************************************
+    // check_before_clear
+    //*******************************************************
+
+    template <typename Set>
+    static inline void check_before_clear( Set& /*s*/ )
+    {}
+
+} // namespace set
+
+
+#endif // ifndef CDSUNIT_SET_TYPE_H
diff --git a/test/stress/set/set_type_cuckoo.h b/test/stress/set/set_type_cuckoo.h
new file mode 100644 (file)
index 0000000..5062a77
--- /dev/null
@@ -0,0 +1,244 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TYPE_CUCKOO_H
+#define CDSUNIT_SET_TYPE_CUCKOO_H
+
+#include "set/set_type.h"
+
+#include <cds/container/cuckoo_set.h>
+#include <cds_test/stat_cuckoo_out.h>
+
+namespace set {
+
+    template <typename V, typename Traits>
+    class CuckooSet : public cc::CuckooSet< V, Traits >
+    {
+    public:
+        typedef cc::CuckooSet< V, Traits > cuckoo_base_class;
+
+    public:
+        template <typename Config>
+        CuckooSet( Config const& cfg )
+            : cuckoo_base_class(
+                cfg.s_nCuckooInitialSize,
+                static_cast<unsigned int>( cfg.s_nCuckooProbesetSize ),
+                static_cast<unsigned int>( cfg.s_nCuckooProbesetThreshold )
+            )
+        {}
+
+        template <typename Q, typename Pred>
+        bool erase_with( Q const& key, Pred /*pred*/ )
+        {
+            return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
+        }
+
+        // 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_CuckooSet;
+
+    template <typename Key, typename Val>
+    struct set_type< tag_CuckooSet, Key, Val >: public set_type_base< Key, Val >
+    {
+        typedef set_type_base< Key, Val > base_class;
+        typedef typename base_class::key_val key_val;
+        typedef typename base_class::compare compare;
+        typedef typename base_class::equal_to equal_to;
+        typedef typename base_class::less less;
+        typedef typename base_class::hash hash;
+        typedef typename base_class::hash2 hash2;
+
+        // ***************************************************************************
+        // CuckooSet
+
+        template <typename Traits>
+        struct traits_CuckooStripedSet : public Traits
+        {
+            typedef cc::cuckoo::striping<> mutex_policy;
+        };
+        template <typename Traits>
+        struct traits_CuckooRefinableSet : public Traits
+        {
+            typedef cc::cuckoo::refinable<> mutex_policy;
+        };
+
+        struct traits_CuckooSet_list_unord :
+            public cc::cuckoo::make_traits <
+                cc::cuckoo::probeset_type< cc::cuckoo::list >
+                , co::equal_to< equal_to >
+                , co::hash< std::tuple< hash, hash2 > >
+            > ::type
+        {};
+        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_unord>> CuckooStripedSet_list_unord;
+        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_unord>> CuckooRefinableSet_list_unord;
+
+        struct traits_CuckooSet_list_unord_stat : public traits_CuckooSet_list_unord
+        {
+            typedef cc::cuckoo::stat stat;
+        };
+        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_unord_stat>> CuckooStripedSet_list_unord_stat;
+        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_unord_stat>> CuckooRefinableSet_list_unord_stat;
+
+        struct traits_CuckooSet_list_unord_storehash : public traits_CuckooSet_list_unord
+        {
+            static CDS_CONSTEXPR const bool store_hash = true;
+        };
+        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_unord_storehash>> CuckooStripedSet_list_unord_storehash;
+        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_unord_storehash>> CuckooRefinableSet_list_unord_storehash;
+
+        struct traits_CuckooSet_list_ord :
+            public cc::cuckoo::make_traits <
+                cc::cuckoo::probeset_type< cc::cuckoo::list >
+                , co::compare< compare >
+                , co::hash< std::tuple< hash, hash2 > >
+            > ::type
+        {};
+        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_ord>> CuckooStripedSet_list_ord;
+        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_ord>> CuckooRefinableSet_list_ord;
+
+        struct traits_CuckooSet_list_ord_stat : public traits_CuckooSet_list_ord
+        {
+            typedef cc::cuckoo::stat stat;
+        };
+        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_ord_stat>> CuckooStripedSet_list_ord_stat;
+        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_ord_stat>> CuckooRefinableSet_list_ord_stat;
+
+        struct traits_CuckooSet_list_ord_storehash : public traits_CuckooSet_list_ord
+        {
+            static CDS_CONSTEXPR const bool store_hash = true;
+        };
+        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_ord_storehash>> CuckooStripedSet_list_ord_storehash;
+        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_ord_storehash>> CuckooRefinableSet_list_ord_storehash;
+
+
+        struct traits_CuckooSet_vector_unord :
+            public cc::cuckoo::make_traits <
+                cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
+                , co::equal_to< equal_to >
+                , co::hash< std::tuple< hash, hash2 > >
+            > ::type
+        {};
+        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_unord>> CuckooStripedSet_vector_unord;
+        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_unord>> CuckooRefinableSet_vector_unord;
+
+        struct traits_CuckooSet_vector_unord_stat : public traits_CuckooSet_vector_unord
+        {
+            typedef cc::cuckoo::stat stat;
+        };
+        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_unord_stat>> CuckooStripedSet_vector_unord_stat;
+        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_unord_stat>> CuckooRefinableSet_vector_unord_stat;
+
+        struct traits_CuckooSet_vector_unord_storehash : public traits_CuckooSet_vector_unord
+        {
+            static CDS_CONSTEXPR const bool store_hash = true;
+        };
+        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_unord_storehash>> CuckooStripedSet_vector_unord_storehash;
+        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_unord_storehash>> CuckooRefinableSet_vector_unord_storehash;
+
+        struct traits_CuckooSet_vector_ord :
+            public cc::cuckoo::make_traits <
+                cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
+                , co::compare< compare >
+                , co::hash< std::tuple< hash, hash2 > >
+            > ::type
+        {};
+        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_ord>> CuckooStripedSet_vector_ord;
+        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_ord>> CuckooRefinableSet_vector_ord;
+
+        struct traits_CuckooSet_vector_ord_stat : public traits_CuckooSet_vector_ord
+        {
+            typedef cc::cuckoo::stat stat;
+        };
+        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_ord_stat>> CuckooStripedSet_vector_ord_stat;
+        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_ord_stat>> CuckooRefinableSet_vector_ord_stat;
+
+        struct traits_CuckooSet_vector_ord_storehash : public traits_CuckooSet_vector_ord
+        {
+            static CDS_CONSTEXPR const bool store_hash = true;
+        };
+        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_ord_storehash>> CuckooStripedSet_vector_ord_storehash;
+        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_ord_storehash>> CuckooRefinableSet_vector_ord_storehash;
+
+    };
+
+    template <typename T, typename Traits >
+    static inline void print_stat( cds_test::property_stream& o, cc::CuckooSet< T, Traits > const& s )
+    {
+        o << s.statistics() << s.mutex_policy_statistics();
+    }
+
+    template <typename V, typename Traits>
+    static inline void print_stat( cds_test::property_stream& o, CuckooSet< V, Traits > const& s )
+    {
+        typedef CuckooSet< V, Traits > set_type;
+        print_stat( o, static_cast<typename set_type::cuckoo_base_class const&>(s) );
+    }
+
+} // namespace set
+
+#define CDSSTRESS_CuckooSet_case( fixture, test_case, cuckoo_set_type, key_type, value_type ) \
+    TEST_F( fixture, cuckoo_set_type ) \
+    { \
+        typedef set::set_type< tag_CuckooSet, key_type, value_type >::cuckoo_set_type set_type; \
+        test_case<set_type>(); \
+    }
+
+#define CDSSTRESS_CuckooSet( fixture, test_case, key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooStripedSet_list_unord,                  key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooRefinableSet_list_unord,                key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooStripedSet_list_unord_stat,             key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooRefinableSet_list_unord_stat,           key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooStripedSet_list_unord_storehash,        key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooRefinableSet_list_unord_storehash,      key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooStripedSet_list_ord,                    key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooRefinableSet_list_ord,                  key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooStripedSet_list_ord_stat,               key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooRefinableSet_list_ord_stat,             key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooStripedSet_list_ord_storehash,          key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooRefinableSet_list_ord_storehash,        key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooStripedSet_vector_unord,                key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooRefinableSet_vector_unord,              key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooStripedSet_vector_unord_stat,           key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooRefinableSet_vector_unord_stat,         key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooStripedSet_vector_unord_storehash,      key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooRefinableSet_vector_unord_storehash,    key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooStripedSet_vector_ord,                  key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooRefinableSet_vector_ord,                key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooStripedSet_vector_ord_stat,             key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooRefinableSet_vector_ord_stat,           key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooStripedSet_vector_ord_storehash,        key_type, value_type ) \
+    CDSSTRESS_CuckooSet_case( fixture, test_case, CuckooRefinableSet_vector_ord_storehash,      key_type, value_type ) \
+
+
+#endif // #ifndef CDSUNIT_SET_TYPE_CUCKOO_H
diff --git a/test/stress/set/set_type_ellen_bintree.h b/test/stress/set/set_type_ellen_bintree.h
new file mode 100644 (file)
index 0000000..54afe0b
--- /dev/null
@@ -0,0 +1,361 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TYPE_ELLEN_BINTREE_H
+#define CDSUNIT_SET_TYPE_ELLEN_BINTREE_H
+
+#include "set_type.h"
+
+#include <cds/container/ellen_bintree_set_rcu.h>
+#include <cds/container/ellen_bintree_set_hp.h>
+#include <cds/container/ellen_bintree_set_dhp.h>
+
+#include <cds_test/stat_ellenbintree_out.h>
+#include "framework/ellen_bintree_update_desc_pool.h"
+
+namespace set {
+
+    template <class GC, typename Key, typename T, typename Traits = cc::ellen_bintree::traits >
+    class EllenBinTreeSet : public cc::EllenBinTreeSet< GC, Key, T, Traits >
+    {
+        typedef cc::EllenBinTreeSet< GC, Key, T, Traits > base_class;
+    public:
+        template <typename Config>
+        EllenBinTreeSet( Config const& /*cfg*/ )
+        {}
+
+        // 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_EllenBinTreeSet;
+
+    template <typename Key, typename Val>
+    struct set_type< tag_EllenBinTreeSet, Key, Val >: public set_type_base< Key, Val >
+    {
+        typedef set_type_base< Key, Val > base_class;
+        typedef typename base_class::key_type key_type;
+        typedef typename base_class::key_val key_val;
+        typedef typename base_class::compare compare;
+        typedef typename base_class::less less;
+        typedef typename base_class::key_less key_less;
+
+        struct ellen_bintree_props {
+            struct key_extractor {
+                void operator()( key_type& dest, key_val const& src ) const
+                {
+                    dest = src.key;
+                }
+            };
+
+            struct less {
+                bool operator()( key_val const& v1, key_val const& v2 ) const
+                {
+                    return key_less()( v1.key, v2.key );
+                }
+                bool operator()( key_type const& k, key_val const& v ) const
+                {
+                    return key_less()( k, v.key );
+                }
+                bool operator()( key_val const& v, key_type const& k ) const
+                {
+                    return key_less()( v.key, k );
+                }
+                bool operator()( key_type const& k1, key_type const& k2 ) const
+                {
+                    return key_less()( k1, k2 );
+                }
+            };
+
+            struct hp_gc {
+                typedef cc::ellen_bintree::node<cds::gc::HP, key_val>               leaf_node;
+                typedef cc::ellen_bintree::internal_node< key_type, leaf_node >     internal_node;
+                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
+            };
+
+            struct dhp_gc {
+                typedef cc::ellen_bintree::node<cds::gc::DHP, key_val>              leaf_node;
+                typedef cc::ellen_bintree::internal_node< key_type, leaf_node >     internal_node;
+                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
+            };
+
+            struct gpi {
+                typedef cc::ellen_bintree::node<rcu_gpi, key_val>                   leaf_node;
+                typedef cc::ellen_bintree::internal_node< key_type, leaf_node >     internal_node;
+                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
+            };
+            struct gpb {
+                typedef cc::ellen_bintree::node<rcu_gpb, key_val>                   leaf_node;
+                typedef cc::ellen_bintree::internal_node< key_type, leaf_node >     internal_node;
+                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
+            };
+            struct gpt {
+                typedef cc::ellen_bintree::node<rcu_gpt, key_val>                   leaf_node;
+                typedef cc::ellen_bintree::internal_node< key_type, leaf_node >     internal_node;
+                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
+            };
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+            struct shb {
+                typedef cc::ellen_bintree::node<rcu_shb, key_val>                   leaf_node;
+                typedef cc::ellen_bintree::internal_node< key_type, leaf_node >     internal_node;
+                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
+            };
+            struct sht {
+                typedef cc::ellen_bintree::node<rcu_sht, key_val>                   leaf_node;
+                typedef cc::ellen_bintree::internal_node< key_type, leaf_node >     internal_node;
+                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
+            };
+#endif
+        };
+
+        struct traits_EllenBinTreeSet: public cc::ellen_bintree::make_set_traits<
+            cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
+            ,co::less< typename ellen_bintree_props::less >
+            ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
+        >::type
+        {};
+
+        struct traits_EllenBinTreeSet_hp : public traits_EllenBinTreeSet
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeSet< cds::gc::HP, key_type, key_val, traits_EllenBinTreeSet_hp > EllenBinTreeSet_hp;
+
+        struct traits_EllenBinTreeSet_dhp : public traits_EllenBinTreeSet
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeSet< cds::gc::DHP, key_type, key_val, traits_EllenBinTreeSet_dhp > EllenBinTreeSet_dhp;
+
+        struct traits_EllenBinTreeSet_gpi : public traits_EllenBinTreeSet
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeSet< rcu_gpi, key_type, key_val, traits_EllenBinTreeSet_gpi > EllenBinTreeSet_rcu_gpi;
+
+        struct traits_EllenBinTreeSet_gpb : public traits_EllenBinTreeSet
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeSet< rcu_gpb, key_type, key_val, traits_EllenBinTreeSet_gpb > EllenBinTreeSet_rcu_gpb;
+
+        struct traits_EllenBinTreeSet_gpt : public traits_EllenBinTreeSet
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeSet< rcu_gpt, key_type, key_val, traits_EllenBinTreeSet_gpt > EllenBinTreeSet_rcu_gpt;
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        struct traits_EllenBinTreeSet_shb : public traits_EllenBinTreeSet
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeSet< rcu_shb, key_type, key_val, traits_EllenBinTreeSet_shb > EllenBinTreeSet_rcu_shb;
+
+        struct traits_EllenBinTreeSet_sht : public traits_EllenBinTreeSet
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeSet< rcu_sht, key_type, key_val, traits_EllenBinTreeSet_sht > EllenBinTreeSet_rcu_sht;
+#endif
+
+        //
+        struct traits_EllenBinTreeSet_yield : public traits_EllenBinTreeSet
+        {
+            typedef cds::backoff::yield back_off;
+        };
+
+        struct traits_EllenBinTreeSet_yield_hp : public traits_EllenBinTreeSet_yield
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeSet< cds::gc::HP, key_type, key_val, traits_EllenBinTreeSet_yield_hp > EllenBinTreeSet_yield_hp;
+
+        struct traits_EllenBinTreeSet_yield_dhp : public traits_EllenBinTreeSet_yield
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeSet< cds::gc::DHP, key_type, key_val, traits_EllenBinTreeSet_yield_dhp > EllenBinTreeSet_yield_dhp;
+
+
+        struct traits_EllenBinTreeSet_yield_gpb : public traits_EllenBinTreeSet_yield
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeSet< rcu_gpb, key_type, key_val, traits_EllenBinTreeSet_yield_gpb > EllenBinTreeSet_yield_rcu_gpb;
+
+
+        struct traits_EllenBinTreeSet_stat: public cc::ellen_bintree::make_set_traits<
+            cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
+            ,co::less< typename ellen_bintree_props::less >
+            ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
+            ,co::stat< cc::ellen_bintree::stat<> >
+        >::type
+        {};
+
+        struct traits_EllenBinTreeSet_stat_hp : public traits_EllenBinTreeSet_stat
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeSet< cds::gc::HP, key_type, key_val, traits_EllenBinTreeSet_stat_hp > EllenBinTreeSet_hp_stat;
+
+        struct traits_EllenBinTreeSet_stat_dhp : public traits_EllenBinTreeSet_stat
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeSet< cds::gc::DHP, key_type, key_val, traits_EllenBinTreeSet_stat_dhp > EllenBinTreeSet_dhp_stat;
+
+        struct traits_EllenBinTreeSet_stat_gpi : public traits_EllenBinTreeSet_stat
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeSet< rcu_gpi, key_type, key_val, traits_EllenBinTreeSet_stat_gpi > EllenBinTreeSet_rcu_gpi_stat;
+
+        struct traits_EllenBinTreeSet_stat_gpb : public traits_EllenBinTreeSet_stat
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeSet< rcu_gpb, key_type, key_val, traits_EllenBinTreeSet_stat_gpb > EllenBinTreeSet_rcu_gpb_stat;
+
+        struct traits_EllenBinTreeSet_stat_gpt : public traits_EllenBinTreeSet_stat
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeSet< rcu_gpt, key_type, key_val, traits_EllenBinTreeSet_stat_gpt > EllenBinTreeSet_rcu_gpt_stat;
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        struct traits_EllenBinTreeSet_stat_shb : public traits_EllenBinTreeSet_stat
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeSet< rcu_shb, key_type, key_val, traits_EllenBinTreeSet_stat_shb > EllenBinTreeSet_rcu_shb_stat;
+
+        struct traits_EllenBinTreeSet_stat_sht : public traits_EllenBinTreeSet_stat
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef EllenBinTreeSet< rcu_sht, key_type, key_val, traits_EllenBinTreeSet_stat_sht > EllenBinTreeSet_rcu_sht_stat;
+#endif
+
+    };
+
+    template <typename GC, typename Key, typename T, typename Traits>
+    static inline void print_stat( cds_test::property_stream& o, EllenBinTreeSet<GC, Key, T, Traits> const& s )
+    {
+        o << s.statistics();
+    }
+
+    namespace ellen_bintree_check {
+        static inline void check_stat( cds::intrusive::ellen_bintree::empty_stat const& /*s*/ )
+        {
+            // Not true for threaded RCU
+            /*
+            EXPECT_EQ( ellen_bintree_pool::internal_node_counter::m_nAlloc.get(), ellen_bintree_pool::internal_node_counter::m_nFree.get());
+            */
+        }
+        static inline void check_stat( cds::intrusive::ellen_bintree::stat<> const& stat )
+        {
+            EXPECT_EQ( stat.m_nInternalNodeCreated, stat.m_nInternalNodeDeleted );
+            EXPECT_EQ( stat.m_nUpdateDescCreated, stat.m_nUpdateDescDeleted );
+            //EXPECT_EQ( ellen_bintree_pool::internal_node_counter::m_nAlloc.get(), ellen_bintree_pool::internal_node_counter::m_nFree.get() );
+            EXPECT_EQ( ellen_bintree_pool::internal_node_counter::m_nAlloc.get(), stat.m_nInternalNodeCreated );
+            // true if RCU is not threaded
+            //EXPECT_EQ( stat.m_nInternalNodeDeleted, ellen_bintree_pool::internal_node_counter::m_nFree.get() );
+        }
+    }   // namespace ellen_bintree_check
+
+    template <typename GC, typename Key, typename T, typename Traits>
+    static inline void additional_check( EllenBinTreeSet<GC, Key, T, Traits>& s )
+    {
+        typedef EllenBinTreeSet<GC, Key, T, Traits> set_type;
+        GC::force_dispose();
+        ellen_bintree_check::check_stat( s.statistics());
+/*
+        bool const threaded_rcu = std::is_same<typename set_type::rcu_tag, cds::urcu::general_threaded_tag >::value
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+            || std::is_same<typename set_type::rcu_tag, signal_threaded_tag >::value
+#endif
+        ;
+        if ( !threaded_rcu ) {
+            EXPECT_EQ( ellen_bintree_pool::internal_node_counter::m_nAlloc.get(), ellen_bintree_pool::internal_node_counter::m_nFree.get());
+        }
+*/
+    }
+
+    template <typename GC, typename Key, typename T, typename Traits>
+    static inline void additional_cleanup( EllenBinTreeSet<GC, Key, T, Traits>& /*s*/ )
+    {
+        ellen_bintree_pool::internal_node_counter::reset();
+    }
+
+    template <typename GC, typename Key, typename T, typename Traits>
+    static inline void check_before_clear( cds::container::EllenBinTreeSet<GC, Key, T, Traits>& s )
+    {
+        EXPECT_TRUE( s.check_consistency() );
+    }
+} // namespace set
+
+#define CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, ellen_set_type, key_type, value_type ) \
+    TEST_F( fixture, ellen_set_type ) \
+    { \
+        typedef set::set_type< tag_EllenBinTreeSet, key_type, value_type >::ellen_set_type set_type; \
+        test_case<set_type>(); \
+    }
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+#   define CDSSTRESS_EllenBinTreeSet_SHRCU( fixture, test_case, key_type, value_type ) \
+        CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_rcu_shb,      key_type, value_type ) \
+        CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_rcu_sht,      key_type, value_type ) \
+        CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_rcu_shb_stat, key_type, value_type ) \
+        CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_rcu_sht_stat, key_type, value_type )
+#else
+#   define CDSSTRESS_EllenBinTreeSet_SHRCU( fixture, test_case, key_type, value_type )
+#endif
+
+
+#define CDSSTRESS_EllenBinTreeSet( fixture, test_case, key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_hp,             key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_dhp,            key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_rcu_gpi,        key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_rcu_gpb,        key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_rcu_gpt,        key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_yield_hp,       key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_yield_dhp,      key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_yield_rcu_gpb,  key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_hp_stat,        key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_dhp_stat,       key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_rcu_gpi_stat,   key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_rcu_gpb_stat,   key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_rcu_gpt_stat,   key_type, value_type ) \
+    CDSSTRESS_EllenBinTreeSet_SHRCU( fixture, test_case, key_type, value_type )
+
+#endif // #ifndef CDSUNIT_SET_TYPE_ELLEN_BINTREE_H
diff --git a/test/stress/set/set_type_feldman_hashset.h b/test/stress/set/set_type_feldman_hashset.h
new file mode 100644 (file)
index 0000000..3fa62ed
--- /dev/null
@@ -0,0 +1,416 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TYPE_FELDMAN_HASHSET_H
+#define CDSUNIT_SET_TYPE_FELDMAN_HASHSET_H
+
+#include "set/set_type.h"
+
+#include <cds/container/feldman_hashset_hp.h>
+#include <cds/container/feldman_hashset_dhp.h>
+#include <cds/container/feldman_hashset_rcu.h>
+
+#include <cds_test/stat_feldman_hashset_out.h>
+#include <cds_test/hash_func.h>
+
+namespace set {
+
+    template <class GC, typename T, typename Traits = cc::feldman_hashset::traits>
+    class FeldmanHashSet : public cc::FeldmanHashSet< GC, T, Traits >
+    {
+        typedef cc::FeldmanHashSet< GC, T, Traits > base_class;
+
+        template <typename G>
+        struct get_extracted_ptr
+        {
+            typedef typename base_class::guarded_ptr extracted_ptr;
+        };
+
+        template <typename RCU>
+        struct get_extracted_ptr<cds::urcu::gc<RCU>>
+        {
+            typedef typename base_class::exempt_ptr extracted_ptr;
+        };
+
+    public:
+        typedef typename T::hasher hasher;
+        typedef typename get_extracted_ptr<GC>::extracted_ptr extracted_ptr;
+
+        template <class Config>
+        FeldmanHashSet( Config const& cfg )
+            : base_class( cfg.s_nFeldmanSet_HeadBits, cfg.s_nFeldmanSet_ArrayBits )
+        {}
+
+        template <typename Q>
+        bool erase( Q const& key )
+        {
+            return base_class::erase( hasher()( key ));
+        }
+
+        template <typename Q, typename Func>
+        bool erase( Q const& key, Func f )
+        {
+            return base_class::erase( hasher()( key ), f );
+        }
+
+        template <typename Q>
+        extracted_ptr extract(Q const& key)
+        {
+            return base_class::extract( hasher()(key) );
+        }
+
+        template <typename Q>
+        bool contains( Q const& key )
+        {
+            return base_class::contains( hasher()(key) );
+        }
+
+        // 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_FeldmanHashSet;
+
+    template <typename Key, typename Val>
+    struct set_type< tag_FeldmanHashSet, Key, Val >: public set_type_base< Key, Val >
+    {
+        typedef set_type_base< Key, Val > base_class;
+        typedef typename base_class::compare compare;
+        typedef typename base_class::less less;
+        typedef typename base_class::hash hash;
+        typedef typename base_class::key_type   key_type;
+        typedef typename base_class::value_type value_type;
+
+        template <typename Hasher>
+        struct hash_type
+        {
+            typedef Hasher hasher;
+            typedef typename hasher::hash_type type;
+        };
+
+        template <typename TH>
+        struct hash_type<std::hash<TH>>
+        {
+            typedef std::hash<TH> hasher;
+            typedef size_t type;
+        };
+
+        template <typename Hasher>
+        struct key_val: base_class::key_val
+        {
+            typedef typename base_class::key_val base;
+            typedef Hasher hasher;
+            typedef typename hash_type<hasher>::type hash_type;
+
+            hash_type hash;
+
+            explicit key_val( key_type const& k ): base(k), hash( hasher()( k )) {}
+            key_val( key_type const& k, value_type const& v ): base(k, v), hash( hasher()( k )) {}
+
+            template <typename K>
+            explicit key_val( K const& k ): base(k), hash( hasher()( k )) {}
+
+            template <typename K, typename T>
+            key_val( K const& k, T const& v ): base(k, v), hash( hasher()( k )) {}
+        };
+
+        struct default_traits : public cc::feldman_hashset::traits
+        {
+            struct hash_accessor {
+                template <typename Hasher>
+                typename key_val<Hasher>::hash_type const& operator()( key_val<Hasher> const& kv )
+                {
+                    return kv.hash;
+                }
+            };
+        };
+
+        typedef FeldmanHashSet< cds::gc::HP,  key_val<std::hash<key_type>>, default_traits >    FeldmanHashSet_hp_stdhash;
+        typedef FeldmanHashSet< cds::gc::DHP, key_val<std::hash<key_type>>, default_traits >    FeldmanHashSet_dhp_stdhash;
+        typedef FeldmanHashSet< rcu_gpi, key_val<std::hash<key_type>>, default_traits >    FeldmanHashSet_rcu_gpi_stdhash;
+        typedef FeldmanHashSet< rcu_gpb, key_val<std::hash<key_type>>, default_traits >    FeldmanHashSet_rcu_gpb_stdhash;
+        typedef FeldmanHashSet< rcu_gpt, key_val<std::hash<key_type>>, default_traits >    FeldmanHashSet_rcu_gpt_stdhash;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef FeldmanHashSet< rcu_shb, key_val<std::hash<key_type>>, default_traits >    FeldmanHashSet_rcu_shb_stdhash;
+        typedef FeldmanHashSet< rcu_sht, key_val<std::hash<key_type>>, default_traits >    FeldmanHashSet_rcu_sht_stdhash;
+#endif
+
+        struct traits_FeldmanHashSet_stat: public cc::feldman_hashset::make_traits<
+                co::type_traits< default_traits >,
+                co::stat< cc::feldman_hashset::stat<>>
+            >::type
+        {};
+
+        typedef FeldmanHashSet< cds::gc::HP,  key_val<std::hash<key_type>>, traits_FeldmanHashSet_stat >    FeldmanHashSet_hp_stdhash_stat;
+        typedef FeldmanHashSet< cds::gc::DHP, key_val<std::hash<key_type>>, traits_FeldmanHashSet_stat >    FeldmanHashSet_dhp_stdhash_stat;
+        typedef FeldmanHashSet< rcu_gpi, key_val<std::hash<key_type>>, traits_FeldmanHashSet_stat >    FeldmanHashSet_rcu_gpi_stdhash_stat;
+        typedef FeldmanHashSet< rcu_gpb, key_val<std::hash<key_type>>, traits_FeldmanHashSet_stat >    FeldmanHashSet_rcu_gpb_stdhash_stat;
+        typedef FeldmanHashSet< rcu_gpt, key_val<std::hash<key_type>>, traits_FeldmanHashSet_stat >    FeldmanHashSet_rcu_gpt_stdhash_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef FeldmanHashSet< rcu_shb, key_val<std::hash<key_type>>, traits_FeldmanHashSet_stat >    FeldmanHashSet_rcu_shb_stdhash_stat;
+        typedef FeldmanHashSet< rcu_sht, key_val<std::hash<key_type>>, traits_FeldmanHashSet_stat >    FeldmanHashSet_rcu_sht_stdhash_stat;
+#endif
+
+        // CityHash
+#if CDS_BUILD_BITS == 64
+        struct traits_FeldmanHashSet_city64 : public default_traits
+        {
+            typedef ::cds_test::city64::less less;
+        };
+        typedef FeldmanHashSet< cds::gc::HP,  key_val<::cds_test::city64>, traits_FeldmanHashSet_city64 >    FeldmanHashSet_hp_city64;
+        typedef FeldmanHashSet< cds::gc::DHP, key_val<::cds_test::city64>, traits_FeldmanHashSet_city64 >    FeldmanHashSet_dhp_city64;
+        typedef FeldmanHashSet< rcu_gpi, key_val<::cds_test::city64>, traits_FeldmanHashSet_city64 >    FeldmanHashSet_rcu_gpi_city64;
+        typedef FeldmanHashSet< rcu_gpb, key_val<::cds_test::city64>, traits_FeldmanHashSet_city64 >    FeldmanHashSet_rcu_gpb_city64;
+        typedef FeldmanHashSet< rcu_gpt, key_val<::cds_test::city64>, traits_FeldmanHashSet_city64 >    FeldmanHashSet_rcu_gpt_city64;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef FeldmanHashSet< rcu_shb, key_val<::cds_test::city64>, traits_FeldmanHashSet_city64 >    FeldmanHashSet_rcu_shb_city64;
+        typedef FeldmanHashSet< rcu_sht, key_val<::cds_test::city64>, traits_FeldmanHashSet_city64 >    FeldmanHashSet_rcu_sht_city64;
+#endif
+
+        struct traits_FeldmanHashSet_city64_stat : public traits_FeldmanHashSet_city64
+        {
+            typedef cc::feldman_hashset::stat<> stat;
+        };
+        typedef FeldmanHashSet< cds::gc::HP,  key_val<::cds_test::city64>, traits_FeldmanHashSet_city64_stat >    FeldmanHashSet_hp_city64_stat;
+        typedef FeldmanHashSet< cds::gc::DHP, key_val<::cds_test::city64>, traits_FeldmanHashSet_city64_stat >    FeldmanHashSet_dhp_city64_stat;
+        typedef FeldmanHashSet< rcu_gpi, key_val<::cds_test::city64>, traits_FeldmanHashSet_city64_stat >    FeldmanHashSet_rcu_gpi_city64_stat;
+        typedef FeldmanHashSet< rcu_gpb, key_val<::cds_test::city64>, traits_FeldmanHashSet_city64_stat >    FeldmanHashSet_rcu_gpb_city64_stat;
+        typedef FeldmanHashSet< rcu_gpt, key_val<::cds_test::city64>, traits_FeldmanHashSet_city64_stat >    FeldmanHashSet_rcu_gpt_city64_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef FeldmanHashSet< rcu_shb, key_val<::cds_test::city64>, traits_FeldmanHashSet_city64_stat >    FeldmanHashSet_rcu_shb_city64_stat;
+        typedef FeldmanHashSet< rcu_sht, key_val<::cds_test::city64>, traits_FeldmanHashSet_city64_stat >    FeldmanHashSet_rcu_sht_city64_stat;
+#endif
+
+        struct traits_FeldmanHashSet_city128 : public default_traits
+        {
+            typedef ::cds_test::city128::less less;
+        };
+        typedef FeldmanHashSet< cds::gc::HP,  key_val<::cds_test::city128>, traits_FeldmanHashSet_city128 >    FeldmanHashSet_hp_city128;
+        typedef FeldmanHashSet< cds::gc::DHP, key_val<::cds_test::city128>, traits_FeldmanHashSet_city128 >    FeldmanHashSet_dhp_city128;
+        typedef FeldmanHashSet< rcu_gpi, key_val<::cds_test::city128>, traits_FeldmanHashSet_city128 >    FeldmanHashSet_rcu_gpi_city128;
+        typedef FeldmanHashSet< rcu_gpb, key_val<::cds_test::city128>, traits_FeldmanHashSet_city128 >    FeldmanHashSet_rcu_gpb_city128;
+        typedef FeldmanHashSet< rcu_gpt, key_val<::cds_test::city128>, traits_FeldmanHashSet_city128 >    FeldmanHashSet_rcu_gpt_city128;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef FeldmanHashSet< rcu_shb, key_val<::cds_test::city128>, traits_FeldmanHashSet_city128 >    FeldmanHashSet_rcu_shb_city128;
+        typedef FeldmanHashSet< rcu_sht, key_val<::cds_test::city128>, traits_FeldmanHashSet_city128 >    FeldmanHashSet_rcu_sht_city128;
+#endif
+
+        struct traits_FeldmanHashSet_city128_stat : public traits_FeldmanHashSet_city128
+        {
+            typedef cc::feldman_hashset::stat<> stat;
+        };
+        typedef FeldmanHashSet< cds::gc::HP,  key_val<::cds_test::city128>, traits_FeldmanHashSet_city128_stat >    FeldmanHashSet_hp_city128_stat;
+        typedef FeldmanHashSet< cds::gc::DHP, key_val<::cds_test::city128>, traits_FeldmanHashSet_city128_stat >    FeldmanHashSet_dhp_city128_stat;
+        typedef FeldmanHashSet< rcu_gpi, key_val<::cds_test::city128>, traits_FeldmanHashSet_city128_stat >    FeldmanHashSet_rcu_gpi_city128_stat;
+        typedef FeldmanHashSet< rcu_gpb, key_val<::cds_test::city128>, traits_FeldmanHashSet_city128_stat >    FeldmanHashSet_rcu_gpb_city128_stat;
+        typedef FeldmanHashSet< rcu_gpt, key_val<::cds_test::city128>, traits_FeldmanHashSet_city128_stat >    FeldmanHashSet_rcu_gpt_city128_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef FeldmanHashSet< rcu_shb, key_val<::cds_test::city128>, traits_FeldmanHashSet_city128_stat >    FeldmanHashSet_rcu_shb_city128_stat;
+        typedef FeldmanHashSet< rcu_sht, key_val<::cds_test::city128>, traits_FeldmanHashSet_city128_stat >    FeldmanHashSet_rcu_sht_city128_stat;
+#endif
+
+#endif // #if CDS_BUILD_BITS == 64
+
+
+        // for fixed-sized key
+        // No hash function is necessary
+
+        struct fixed_sized_key
+        {
+            typedef typename set_type_base< Key, Val >::key_type key_type;
+            struct key_val : public set_type_base< Key, Val >::key_val
+            {
+                typedef typename set_type_base< Key, Val >::key_val base_class;
+
+                /*explicit*/ key_val(key_type const& k) : base_class(k) {}
+                key_val(key_type const& k, value_type const& v) : base_class(k, v) {}
+
+                template <typename K>
+                /*explicit*/ key_val(K const& k) : base_class(k) {}
+
+                template <typename K, typename T>
+                key_val(K const& k, T const& v) : base_class(k, v) {}
+
+                // mock hasher
+                struct hasher {
+                template <typename Q>
+                    key_type operator()( Q const& k ) const
+                    {
+                        return key_type( k );
+                    }
+                };
+            };
+
+            struct traits : public cc::feldman_hashset::traits
+            {
+                struct hash_accessor {
+                    key_type operator()(key_val const& kv)
+                    {
+                        return kv.key;
+                    }
+                };
+            };
+
+            struct traits_stat : public traits
+            {
+                typedef cc::feldman_hashset::stat<> stat;
+            };
+        };
+
+        typedef FeldmanHashSet< cds::gc::HP, typename fixed_sized_key::key_val, typename fixed_sized_key::traits >  FeldmanHashSet_hp_fixed;
+        typedef FeldmanHashSet< cds::gc::DHP, typename fixed_sized_key::key_val, typename fixed_sized_key::traits > FeldmanHashSet_dhp_fixed;
+        typedef FeldmanHashSet< rcu_gpi, typename fixed_sized_key::key_val, typename fixed_sized_key::traits >    FeldmanHashSet_rcu_gpi_fixed;
+        typedef FeldmanHashSet< rcu_gpb, typename fixed_sized_key::key_val, typename fixed_sized_key::traits >    FeldmanHashSet_rcu_gpb_fixed;
+        typedef FeldmanHashSet< rcu_gpt, typename fixed_sized_key::key_val, typename fixed_sized_key::traits >    FeldmanHashSet_rcu_gpt_fixed;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef FeldmanHashSet< rcu_shb, typename fixed_sized_key::key_val, typename fixed_sized_key::traits >    FeldmanHashSet_rcu_shb_fixed;
+        typedef FeldmanHashSet< rcu_sht, typename fixed_sized_key::key_val, typename fixed_sized_key::traits >    FeldmanHashSet_rcu_sht_fixed;
+#endif
+
+        typedef FeldmanHashSet< cds::gc::HP, typename fixed_sized_key::key_val, typename fixed_sized_key::traits_stat >    FeldmanHashSet_hp_fixed_stat;
+        typedef FeldmanHashSet< cds::gc::DHP, typename fixed_sized_key::key_val, typename fixed_sized_key::traits_stat >    FeldmanHashSet_dhp_fixed_stat;
+        typedef FeldmanHashSet< rcu_gpi, typename fixed_sized_key::key_val, typename fixed_sized_key::traits_stat >    FeldmanHashSet_rcu_gpi_fixed_stat;
+        typedef FeldmanHashSet< rcu_gpb, typename fixed_sized_key::key_val, typename fixed_sized_key::traits_stat >    FeldmanHashSet_rcu_gpb_fixed_stat;
+        typedef FeldmanHashSet< rcu_gpt, typename fixed_sized_key::key_val, typename fixed_sized_key::traits_stat >    FeldmanHashSet_rcu_gpt_fixed_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef FeldmanHashSet< rcu_shb, typename fixed_sized_key::key_val, typename fixed_sized_key::traits_stat >    FeldmanHashSet_rcu_shb_fixed_stat;
+        typedef FeldmanHashSet< rcu_sht, typename fixed_sized_key::key_val, typename fixed_sized_key::traits_stat >    FeldmanHashSet_rcu_sht_fixed_stat;
+#endif
+
+    };
+
+    template <typename GC, typename T, typename Traits >
+    static inline void print_stat( cds_test::property_stream& o, FeldmanHashSet< GC, T, Traits > const& s )
+    {
+        std::vector< cds::intrusive::feldman_hashset::level_statistics > level_stat;
+        s.get_level_statistics( level_stat );
+
+        o << s.statistics()
+          << level_stat;
+    }
+} // namespace set
+
+#define CDSSTRESS_FeldmanHashSet_case( fixture, test_case, feldman_set_type, key_type, value_type ) \
+    TEST_F( fixture, feldman_set_type ) \
+    { \
+        typedef set::set_type< tag_FeldmanHashSet, key_type, value_type >::feldman_set_type set_type; \
+        test_case<set_type>(); \
+    }
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+#   define CDSSTRESS_FeldmanHashSet_fixed_SHRCU( fixture, test_case, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_shb_fixed,      key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_sht_fixed,      key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_shb_fixed_stat, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_sht_fixed_stat, key_type, value_type )
+
+#   define CDSSTRESS_FeldmanHashSet_stdhash_SHRCU( fixture, test_case, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_shb_stdhash,      key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_sht_stdhash,      key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_shb_stdhash_stat, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_sht_stdhash_stat, key_type, value_type )
+
+#   if CDS_BUILD_BITS == 64
+#       define CDSSTRESS_FeldmanHashSet_city_SHRCU( fixture, test_case, key_type, value_type ) \
+            CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_shb_city64,       key_type, value_type ) \
+            CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_sht_city64,       key_type, value_type ) \
+            CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_shb_city64_stat,  key_type, value_type ) \
+            CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_sht_city64_stat,  key_type, value_type ) \
+            CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_shb_city128,      key_type, value_type ) \
+            CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_sht_city128,      key_type, value_type ) \
+            CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_shb_city128_stat, key_type, value_type ) \
+            CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_sht_city128_stat, key_type, value_type )
+#   else
+#       define CDSSTRESS_FeldmanHashSet_city_SHRCU( fixture, test_case, key_type, value_type )
+#   endif
+
+#else
+#   define CDSSTRESS_FeldmanHashSet_fixed_SHRCU( fixture, test_case, key_type, value_type )
+#   define CDSSTRESS_FeldmanHashSet_stdhash_SHRCU( fixture, test_case, key_type, value_type )
+#   define CDSSTRESS_FeldmanHashSet_city_SHRCU( fixture, test_case, key_type, value_type )
+#endif
+
+
+#define CDSSTRESS_FeldmanHashSet_fixed( fixture, test_case, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_hp_fixed,             key_type, value_type ) \
+    CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_dhp_fixed,            key_type, value_type ) \
+    CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpi_fixed,        key_type, value_type ) \
+    CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpb_fixed,        key_type, value_type ) \
+    CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpt_fixed,        key_type, value_type ) \
+    CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_hp_fixed_stat,        key_type, value_type ) \
+    CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_dhp_fixed_stat,       key_type, value_type ) \
+    CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpi_fixed_stat,   key_type, value_type ) \
+    CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpb_fixed_stat,   key_type, value_type ) \
+    CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpt_fixed_stat,   key_type, value_type ) \
+    CDSSTRESS_FeldmanHashSet_fixed_SHRCU( fixture, test_case, key_type, value_type )
+
+#define CDSSTRESS_FeldmanHashSet_stdhash( fixture, test_case, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_hp_stdhash,           key_type, value_type ) \
+    CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_dhp_stdhash,          key_type, value_type ) \
+    CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpi_stdhash,      key_type, value_type ) \
+    CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpb_stdhash,      key_type, value_type ) \
+    CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpt_stdhash,      key_type, value_type ) \
+    CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_hp_stdhash_stat,      key_type, value_type ) \
+    CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_dhp_stdhash_stat,     key_type, value_type ) \
+    CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpi_stdhash_stat, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpb_stdhash_stat, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpt_stdhash_stat, key_type, value_type ) \
+    CDSSTRESS_FeldmanHashSet_stdhash_SHRCU( fixture, test_case, key_type, value_type )
+
+#if CDS_BUILD_BITS == 64
+#   define CDSSTRESS_FeldmanHashSet_city( fixture, test_case, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_hp_city64,            key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_dhp_city64,           key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpi_city64,       key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpb_city64,       key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpt_city64,       key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_hp_city64_stat,       key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_dhp_city64_stat,      key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpi_city64_stat,  key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpb_city64_stat,  key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpt_city64_stat,  key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_hp_city128,           key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_dhp_city128,          key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpi_city128,      key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpb_city128,      key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpt_city128,      key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_hp_city128_stat,      key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_dhp_city128_stat,     key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpi_city128_stat, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpb_city128_stat, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpt_city128_stat, key_type, value_type ) \
+        CDSSTRESS_FeldmanHashSet_city_SHRCU( fixture, test_case, key_type, value_type )
+#else
+#   define CDSSTRESS_FeldmanHashSet_city( fixture, test_case, key_type, value_type )
+#endif
+
+#endif // #ifndef CDSUNIT_SET_TYPE_FELDMAN_HASHSET_H
diff --git a/test/stress/set/set_type_lazy_list.h b/test/stress/set/set_type_lazy_list.h
new file mode 100644 (file)
index 0000000..05938c4
--- /dev/null
@@ -0,0 +1,144 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TYPE_LAZY_LIST_H
+#define CDSUNIT_SET_TYPE_LAZY_LIST_H
+
+#include "set_type.h"
+
+#include <cds/container/lazy_list_hp.h>
+#include <cds/container/lazy_list_dhp.h>
+#include <cds/container/lazy_list_rcu.h>
+
+namespace set {
+
+    template <typename Key, typename Val>
+    struct lazy_list_type
+    {
+        typedef typename set_type_base< Key, Val >::key_val key_val;
+        typedef typename set_type_base< Key, Val >::compare compare;
+        typedef typename set_type_base< Key, Val >::less    less;
+
+                struct traits_LazyList_cmp_stdAlloc :
+            public cc::lazy_list::make_traits<
+                co::compare< compare >
+            >::type
+        {};
+        typedef cc::LazyList< cds::gc::HP,  key_val, traits_LazyList_cmp_stdAlloc > LazyList_HP_cmp_stdAlloc;
+        typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_cmp_stdAlloc > LazyList_DHP_cmp_stdAlloc;
+        typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPI_cmp_stdAlloc;
+        typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPB_cmp_stdAlloc;
+        typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPT_cmp_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHB_cmp_stdAlloc;
+        typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHT_cmp_stdAlloc;
+#endif
+        struct traits_LazyList_cmp_stdAlloc_seqcst :
+            public cc::lazy_list::make_traits<
+                co::compare< compare >
+                ,co::memory_model< co::v::sequential_consistent >
+            >::type
+        {};
+        typedef cc::LazyList< cds::gc::HP, key_val,  traits_LazyList_cmp_stdAlloc_seqcst > LazyList_HP_cmp_stdAlloc_seqcst;
+        typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_DHP_cmp_stdAlloc_seqcst;
+        typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPI_cmp_stdAlloc_seqcst;
+        typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPB_cmp_stdAlloc_seqcst;
+        typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPT_cmp_stdAlloc_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHB_cmp_stdAlloc_seqcst;
+        typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHT_cmp_stdAlloc_seqcst;
+#endif
+        struct traits_LazyList_cmp_michaelAlloc :
+            public cc::lazy_list::make_traits<
+                co::compare< compare >,
+                co::allocator< memory::MichaelAllocator<int> >
+            >::type
+        {};
+        typedef cc::LazyList< cds::gc::HP,  key_val, traits_LazyList_cmp_michaelAlloc > LazyList_HP_cmp_michaelAlloc;
+        typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_DHP_cmp_michaelAlloc;
+        typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPI_cmp_michaelAlloc;
+        typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPB_cmp_michaelAlloc;
+        typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPT_cmp_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHB_cmp_michaelAlloc;
+        typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHT_cmp_michaelAlloc;
+#endif
+
+        struct traits_LazyList_less_stdAlloc:
+            public cc::lazy_list::make_traits<
+                co::less< less >
+            >::type
+        {};
+        typedef cc::LazyList< cds::gc::HP,  key_val, traits_LazyList_less_stdAlloc > LazyList_HP_less_stdAlloc;
+        typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_less_stdAlloc > LazyList_DHP_less_stdAlloc;
+        typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_GPI_less_stdAlloc;
+        typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_GPB_less_stdAlloc;
+        typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_GPT_less_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_SHB_less_stdAlloc;
+        typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_SHT_less_stdAlloc;
+#endif
+
+        struct traits_LazyList_less_stdAlloc_seqcst :
+            public cc::lazy_list::make_traits<
+                co::less< less >
+                ,co::memory_model< co::v::sequential_consistent >
+            >::type
+        {};
+        typedef cc::LazyList< cds::gc::HP, key_val,  traits_LazyList_less_stdAlloc_seqcst > LazyList_HP_less_stdAlloc_seqcst;
+        typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_DHP_less_stdAlloc_seqcst;
+        typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPI_less_stdAlloc_seqcst;
+        typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPB_less_stdAlloc_seqcst;
+        typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPT_less_stdAlloc_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHB_less_stdAlloc_seqcst;
+        typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHT_less_stdAlloc_seqcst;
+#endif
+
+        struct traits_LazyList_less_michaelAlloc :
+            public cc::lazy_list::make_traits<
+                co::less< less >,
+                co::allocator< memory::MichaelAllocator<int> >
+            >::type
+        {};
+        typedef cc::LazyList< cds::gc::HP,  key_val, traits_LazyList_less_michaelAlloc > LazyList_HP_less_michaelAlloc;
+        typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_less_michaelAlloc > LazyList_DHP_less_michaelAlloc;
+        typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPI_less_michaelAlloc;
+        typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPB_less_michaelAlloc;
+        typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPT_less_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHB_less_michaelAlloc;
+        typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHT_less_michaelAlloc;
+#endif
+    };
+
+} // namespace set
+
+#endif // #ifndef CDSUNIT_SET_TYPE_LAZY_LIST_H
diff --git a/test/stress/set/set_type_michael.h b/test/stress/set/set_type_michael.h
new file mode 100644 (file)
index 0000000..412dfe6
--- /dev/null
@@ -0,0 +1,270 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TYPE_MICHAEL_H
+#define CDSUNIT_SET_TYPE_MICHAEL_H
+
+#include "set_type_michael_list.h"
+#include "set_type_lazy_list.h"
+
+#include <cds/container/michael_set.h>
+#include <cds/container/michael_set_rcu.h>
+
+#include <framework/michael_alloc.h>
+
+namespace set {
+
+    template <class GC, typename List, typename Traits = cc::michael_set::traits>
+    class MichaelHashSet : public cc::MichaelHashSet< GC, List, Traits >
+    {
+        typedef cc::MichaelHashSet< GC, List, Traits > base_class;
+    public:
+        template <class Config>
+        MichaelHashSet( Config const& cfg )
+            : base_class( cfg.s_nSetSize, cfg.s_nLoadFactor )
+        {}
+
+        // 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_MichaelHashSet;
+
+    template <typename Key, typename Val>
+    struct set_type< tag_MichaelHashSet, Key, Val >: public set_type_base< Key, Val >
+    {
+        typedef set_type_base< Key, Val > base_class;
+        typedef typename base_class::key_val key_val;
+        typedef typename base_class::compare compare;
+        typedef typename base_class::less less;
+        typedef typename base_class::hash hash;
+
+        // ***************************************************************************
+        // MichaelHashSet based on MichaelList
+
+        typedef michael_list_type< Key, Val > ml;
+
+        struct traits_MichaelSet_stdAlloc :
+            public cc::michael_set::make_traits<
+                co::hash< hash >
+            >::type
+        {};
+        typedef MichaelHashSet< cds::gc::HP,  typename ml::MichaelList_HP_cmp_stdAlloc,  traits_MichaelSet_stdAlloc > MichaelSet_HP_cmp_stdAlloc;
+        typedef MichaelHashSet< cds::gc::DHP, typename ml::MichaelList_DHP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_DHP_cmp_stdAlloc;
+        typedef MichaelHashSet< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPI_cmp_stdAlloc;
+        typedef MichaelHashSet< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPB_cmp_stdAlloc;
+        typedef MichaelHashSet< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPT_cmp_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MichaelHashSet< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHB_cmp_stdAlloc;
+        typedef MichaelHashSet< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHT_cmp_stdAlloc;
+#endif
+
+        typedef MichaelHashSet< cds::gc::HP, typename ml::MichaelList_HP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_HP_less_stdAlloc;
+        typedef MichaelHashSet< cds::gc::DHP, typename ml::MichaelList_DHP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_DHP_less_stdAlloc;
+        typedef MichaelHashSet< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPI_less_stdAlloc;
+        typedef MichaelHashSet< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPB_less_stdAlloc;
+        typedef MichaelHashSet< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPT_less_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MichaelHashSet< rcu_shb, typename ml::MichaelList_RCU_SHB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHB_less_stdAlloc;
+        typedef MichaelHashSet< rcu_sht, typename ml::MichaelList_RCU_SHT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHT_less_stdAlloc;
+#endif
+
+        typedef MichaelHashSet< cds::gc::HP, typename ml::MichaelList_HP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_HP_less_stdAlloc_seqcst;
+        typedef MichaelHashSet< cds::gc::DHP, typename ml::MichaelList_DHP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_DHP_less_stdAlloc_seqcst;
+        typedef MichaelHashSet< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPI_less_stdAlloc_seqcst;
+        typedef MichaelHashSet< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPB_less_stdAlloc_seqcst;
+        typedef MichaelHashSet< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPT_less_stdAlloc_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MichaelHashSet< rcu_shb, typename ml::MichaelList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHB_less_stdAlloc_seqcst;
+        typedef MichaelHashSet< rcu_sht, typename ml::MichaelList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHT_less_stdAlloc_seqcst;
+#endif
+
+        struct traits_MichaelSet_michaelAlloc :
+            public cc::michael_set::make_traits<
+                co::hash< hash >,
+                co::allocator< memory::MichaelAllocator<int> >
+            >::type
+        {};
+        typedef MichaelHashSet< cds::gc::HP,  typename ml::MichaelList_HP_cmp_michaelAlloc,  traits_MichaelSet_michaelAlloc > MichaelSet_HP_cmp_michaelAlloc;
+        typedef MichaelHashSet< cds::gc::DHP, typename ml::MichaelList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_DHP_cmp_michaelAlloc;
+        typedef MichaelHashSet< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPI_cmp_michaelAlloc;
+        typedef MichaelHashSet< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPB_cmp_michaelAlloc;
+        typedef MichaelHashSet< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPT_cmp_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MichaelHashSet< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHB_cmp_michaelAlloc;
+        typedef MichaelHashSet< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHT_cmp_michaelAlloc;
+#endif
+
+        typedef MichaelHashSet< cds::gc::HP, typename ml::MichaelList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_HP_less_michaelAlloc;
+        typedef MichaelHashSet< cds::gc::DHP, typename ml::MichaelList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_DHP_less_michaelAlloc;
+        typedef MichaelHashSet< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPI_less_michaelAlloc;
+        typedef MichaelHashSet< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPB_less_michaelAlloc;
+        typedef MichaelHashSet< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPT_less_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MichaelHashSet< rcu_shb, typename ml::MichaelList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHB_less_michaelAlloc;
+        typedef MichaelHashSet< rcu_sht, typename ml::MichaelList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHT_less_michaelAlloc;
+#endif
+
+
+        // ***************************************************************************
+        // MichaelHashSet based on LazyList
+
+        typedef lazy_list_type< Key, Val > ll;
+
+        typedef MichaelHashSet< cds::gc::HP, typename ll::LazyList_HP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_HP_cmp_stdAlloc;
+        typedef MichaelHashSet< cds::gc::DHP, typename ll::LazyList_DHP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_DHP_cmp_stdAlloc;
+        typedef MichaelHashSet< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPI_cmp_stdAlloc;
+        typedef MichaelHashSet< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPB_cmp_stdAlloc;
+        typedef MichaelHashSet< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPT_cmp_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MichaelHashSet< rcu_shb, typename ll::LazyList_RCU_SHB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHB_cmp_stdAlloc;
+        typedef MichaelHashSet< rcu_sht, typename ll::LazyList_RCU_SHT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHT_cmp_stdAlloc;
+#endif
+
+        typedef MichaelHashSet< cds::gc::HP, typename ll::LazyList_HP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_HP_less_stdAlloc;
+        typedef MichaelHashSet< cds::gc::DHP, typename ll::LazyList_DHP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_DHP_less_stdAlloc;
+        typedef MichaelHashSet< rcu_gpi, typename ll::LazyList_RCU_GPI_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPI_less_stdAlloc;
+        typedef MichaelHashSet< rcu_gpb, typename ll::LazyList_RCU_GPB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPB_less_stdAlloc;
+        typedef MichaelHashSet< rcu_gpt, typename ll::LazyList_RCU_GPT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPT_less_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MichaelHashSet< rcu_shb, typename ll::LazyList_RCU_SHB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHB_less_stdAlloc;
+        typedef MichaelHashSet< rcu_sht, typename ll::LazyList_RCU_SHT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHT_less_stdAlloc;
+#endif
+
+        typedef MichaelHashSet< cds::gc::HP, typename ll::LazyList_HP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_HP_less_stdAlloc_seqcst;
+        typedef MichaelHashSet< cds::gc::DHP, typename ll::LazyList_DHP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_DHP_less_stdAlloc_seqcst;
+        typedef MichaelHashSet< rcu_gpi, typename ll::LazyList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPI_less_stdAlloc_seqcst;
+        typedef MichaelHashSet< rcu_gpb, typename ll::LazyList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPB_less_stdAlloc_seqcst;
+        typedef MichaelHashSet< rcu_gpt, typename ll::LazyList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPT_less_stdAlloc_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MichaelHashSet< rcu_shb, typename ll::LazyList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHB_less_stdAlloc_seqcst;
+        typedef MichaelHashSet< rcu_sht, typename ll::LazyList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHT_less_stdAlloc_seqcst;
+#endif
+
+        typedef MichaelHashSet< cds::gc::HP, typename ll::LazyList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_HP_cmp_michaelAlloc;
+        typedef MichaelHashSet< cds::gc::DHP, typename ll::LazyList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_DHP_cmp_michaelAlloc;
+        typedef MichaelHashSet< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPI_cmp_michaelAlloc;
+        typedef MichaelHashSet< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPB_cmp_michaelAlloc;
+        typedef MichaelHashSet< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPT_cmp_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MichaelHashSet< rcu_shb, typename ll::LazyList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHB_cmp_michaelAlloc;
+        typedef MichaelHashSet< rcu_sht, typename ll::LazyList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHT_cmp_michaelAlloc;
+#endif
+
+        typedef MichaelHashSet< cds::gc::HP, typename ll::LazyList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_HP_less_michaelAlloc;
+        typedef MichaelHashSet< cds::gc::DHP, typename ll::LazyList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_DHP_less_michaelAlloc;
+        typedef MichaelHashSet< rcu_gpi, typename ll::LazyList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPI_less_michaelAlloc;
+        typedef MichaelHashSet< rcu_gpb, typename ll::LazyList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPB_less_michaelAlloc;
+        typedef MichaelHashSet< rcu_gpt, typename ll::LazyList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPT_less_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MichaelHashSet< rcu_shb, typename ll::LazyList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHB_less_michaelAlloc;
+        typedef MichaelHashSet< rcu_sht, typename ll::LazyList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHT_less_michaelAlloc;
+#endif
+    };
+
+} // namespace set
+
+
+#define CDSSTRESS_MichaelSet_case( fixture, test_case, michael_set_type, key_type, value_type ) \
+    TEST_P( fixture, michael_set_type ) \
+    { \
+        typedef set::set_type< tag_MichaelHashSet, key_type, value_type >::michael_set_type set_type; \
+        test_case<set_type>(); \
+    }
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+#   define CDSSTRESS_MichaelSet_SHRCU( fixture, test_case, key_type, value_type ) \
+        CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHB_cmp_stdAlloc,             key_type, value_type ) \
+        CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHT_cmp_stdAlloc,             key_type, value_type ) \
+        CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHB_less_stdAlloc,            key_type, value_type ) \
+        CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHT_less_stdAlloc,            key_type, value_type ) \
+        CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHB_cmp_michaelAlloc,         key_type, value_type ) \
+        CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHT_cmp_michaelAlloc,         key_type, value_type ) \
+        CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHB_less_michaelAlloc,        key_type, value_type ) \
+        CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHT_less_michaelAlloc,        key_type, value_type ) \
+        CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHB_cmp_stdAlloc,        key_type, value_type ) \
+        CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHT_cmp_stdAlloc,        key_type, value_type ) \
+        CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHB_less_stdAlloc,       key_type, value_type ) \
+        CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHT_less_stdAlloc,       key_type, value_type ) \
+        CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHB_cmp_michaelAlloc,    key_type, value_type ) \
+        CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHT_cmp_michaelAlloc,    key_type, value_type ) \
+        CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHB_less_michaelAlloc,   key_type, value_type ) \
+        CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHT_less_michaelAlloc,   key_type, value_type )
+#else
+#   define CDSSTRESS_MichaelSet_SHRCU( fixture, test_case, key_type, value_type )
+#endif
+
+
+#define CDSSTRESS_MichaelSet( fixture, test_case, key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_HP_cmp_stdAlloc,                  key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_DHP_cmp_stdAlloc,                 key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPI_cmp_stdAlloc,             key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPB_cmp_stdAlloc,             key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPT_cmp_stdAlloc,             key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_HP_less_stdAlloc,                 key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_DHP_less_stdAlloc,                key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPI_less_stdAlloc,            key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPB_less_stdAlloc,            key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPT_less_stdAlloc,            key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_HP_cmp_michaelAlloc,              key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_DHP_cmp_michaelAlloc,             key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPI_cmp_michaelAlloc,         key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPB_cmp_michaelAlloc,         key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPT_cmp_michaelAlloc,         key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_HP_less_michaelAlloc,             key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_DHP_less_michaelAlloc,            key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPI_less_michaelAlloc,        key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPB_less_michaelAlloc,        key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPT_less_michaelAlloc,        key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_HP_cmp_stdAlloc,             key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_DHP_cmp_stdAlloc,            key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPI_cmp_stdAlloc,        key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPB_cmp_stdAlloc,        key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPT_cmp_stdAlloc,        key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_HP_less_stdAlloc,            key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_DHP_less_stdAlloc,           key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPI_less_stdAlloc,       key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPB_less_stdAlloc,       key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPT_less_stdAlloc,       key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_HP_cmp_michaelAlloc,         key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_DHP_cmp_michaelAlloc,        key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPI_cmp_michaelAlloc,    key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPB_cmp_michaelAlloc,    key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPT_cmp_michaelAlloc,    key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_HP_less_michaelAlloc,        key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_DHP_less_michaelAlloc,       key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPI_less_michaelAlloc,   key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPB_less_michaelAlloc,   key_type, value_type ) \
+    CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPT_less_michaelAlloc,   key_type, value_type ) \
+    CDSSTRESS_MichaelSet_SHRCU( fixture, test_case, key_type, value_type )
+
+#endif // #ifndef CDSUNIT_SET_TYPE_MICHAEL_H
diff --git a/test/stress/set/set_type_michael_list.h b/test/stress/set/set_type_michael_list.h
new file mode 100644 (file)
index 0000000..5ba2d55
--- /dev/null
@@ -0,0 +1,144 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TYPE_MICHAEL_LIST_H
+#define CDSUNIT_SET_TYPE_MICHAEL_LIST_H
+
+#include "set_type.h"
+
+#include <cds/container/michael_list_hp.h>
+#include <cds/container/michael_list_dhp.h>
+#include <cds/container/michael_list_rcu.h>
+
+namespace set {
+
+    template <typename Key, typename Val>
+    struct michael_list_type
+    {
+        typedef typename set_type_base< Key, Val >::key_val key_val;
+        typedef typename set_type_base< Key, Val >::compare compare;
+        typedef typename set_type_base< Key, Val >::less    less;
+
+        struct traits_MichaelList_cmp_stdAlloc:
+            public cc::michael_list::make_traits<
+                co::compare< compare >
+            >::type
+        {};
+        typedef cc::MichaelList< cds::gc::HP,  key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_HP_cmp_stdAlloc;
+        typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_DHP_cmp_stdAlloc;
+        typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPI_cmp_stdAlloc;
+        typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPB_cmp_stdAlloc;
+        typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPT_cmp_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHB_cmp_stdAlloc;
+        typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHT_cmp_stdAlloc;
+#endif
+
+        struct traits_MichaelList_cmp_stdAlloc_seqcst : public traits_MichaelList_cmp_stdAlloc
+        {
+            typedef co::v::sequential_consistent memory_model;
+        };
+        typedef cc::MichaelList< cds::gc::HP,  key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_HP_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_DHP_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPI_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPB_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPT_cmp_stdAlloc_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHB_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHT_cmp_stdAlloc_seqcst;
+#endif
+
+        struct traits_MichaelList_less_stdAlloc :
+            public cc::michael_list::make_traits<
+                co::less< less >
+            >::type
+        {};
+        typedef cc::MichaelList< cds::gc::HP,  key_val, traits_MichaelList_less_stdAlloc > MichaelList_HP_less_stdAlloc;
+        typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_less_stdAlloc > MichaelList_DHP_less_stdAlloc;
+        typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPI_less_stdAlloc;
+        typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPB_less_stdAlloc;
+        typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPT_less_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHB_less_stdAlloc;
+        typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHT_less_stdAlloc;
+#endif
+
+        struct traits_MichaelList_less_stdAlloc_seqcst :
+            public cc::michael_list::make_traits<
+                co::less< less >
+                ,co::memory_model< co::v::sequential_consistent >
+            >::type
+        {};
+        typedef cc::MichaelList< cds::gc::HP,  key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_HP_less_stdAlloc_seqcst;
+        typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_DHP_less_stdAlloc_seqcst;
+        typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPI_less_stdAlloc_seqcst;
+        typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPB_less_stdAlloc_seqcst;
+        typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPT_less_stdAlloc_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHB_less_stdAlloc_seqcst;
+        typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHT_less_stdAlloc_seqcst;
+#endif
+
+        struct traits_MichaelList_cmp_michaelAlloc :
+            public cc::michael_list::make_traits<
+                co::compare< compare >,
+                co::allocator< memory::MichaelAllocator<int> >
+            >::type
+        {};
+        typedef cc::MichaelList< cds::gc::HP,  key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_HP_cmp_michaelAlloc;
+        typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_DHP_cmp_michaelAlloc;
+        typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPI_cmp_michaelAlloc;
+        typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPB_cmp_michaelAlloc;
+        typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPT_cmp_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHB_cmp_michaelAlloc;
+        typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHT_cmp_michaelAlloc;
+#endif
+
+        struct traits_MichaelList_less_michaelAlloc :
+            public cc::michael_list::make_traits<
+                co::less< less >,
+                co::allocator< memory::MichaelAllocator<int> >
+            >::type
+        {};
+        typedef cc::MichaelList< cds::gc::HP,  key_val, traits_MichaelList_less_michaelAlloc > MichaelList_HP_less_michaelAlloc;
+        typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_DHP_less_michaelAlloc;
+        typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPI_less_michaelAlloc;
+        typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPB_less_michaelAlloc;
+        typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPT_less_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHB_less_michaelAlloc;
+        typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHT_less_michaelAlloc;
+#endif
+    };
+
+} // namespace set
+
+#endif // #ifndef CDSUNIT_SET_TYPE_MICHAEL_LIST_H
diff --git a/test/stress/set/set_type_skip_list.h b/test/stress/set/set_type_skip_list.h
new file mode 100644 (file)
index 0000000..c1bd325
--- /dev/null
@@ -0,0 +1,307 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TYPE_SKIP_LIST_H
+#define CDSUNIT_SET_TYPE_SKIP_LIST_H
+
+#include "set_type.h"
+
+#include <cds/container/skip_list_set_hp.h>
+#include <cds/container/skip_list_set_dhp.h>
+#include <cds/container/skip_list_set_rcu.h>
+
+#include <cds_test/stat_skiplist_out.h>
+
+namespace set {
+
+    template <typename GC, typename T, typename Traits = cc::skip_list::traits >
+    class SkipListSet : public cc::SkipListSet<GC, T, Traits>
+    {
+        typedef cc::SkipListSet<GC, T, Traits> base_class;
+    public:
+        template <typename Config>
+        SkipListSet( Config const& /*cfg*/ )
+        {}
+
+        // 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_SkipListSet;
+
+    template <typename Key, typename Val>
+    struct set_type< tag_SkipListSet, Key, Val >: public set_type_base< Key, Val >
+    {
+        typedef set_type_base< Key, Val > base_class;
+        typedef typename base_class::key_val key_val;
+        typedef typename base_class::compare compare;
+        typedef typename base_class::less less;
+        typedef typename base_class::hash hash;
+
+        class traits_SkipListSet_less_pascal: public cc::skip_list::make_traits <
+                co::less< less >
+                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_less_pascal > SkipListSet_hp_less_pascal;
+        typedef SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_less_pascal > SkipListSet_dhp_less_pascal;
+        typedef SkipListSet< rcu_gpi, key_val, traits_SkipListSet_less_pascal > SkipListSet_rcu_gpi_less_pascal;
+        typedef SkipListSet< rcu_gpb, key_val, traits_SkipListSet_less_pascal > SkipListSet_rcu_gpb_less_pascal;
+        typedef SkipListSet< rcu_gpt, key_val, traits_SkipListSet_less_pascal > SkipListSet_rcu_gpt_less_pascal;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SkipListSet< rcu_shb, key_val, traits_SkipListSet_less_pascal > SkipListSet_rcu_shb_less_pascal;
+        typedef SkipListSet< rcu_sht, key_val, traits_SkipListSet_less_pascal > SkipListSet_rcu_sht_less_pascal;
+#endif
+
+        class traits_SkipListSet_less_pascal_seqcst: public cc::skip_list::make_traits <
+                co::less< less >
+                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_less_pascal_seqcst > SkipListSet_hp_less_pascal_seqcst;
+        typedef SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_less_pascal_seqcst > SkipListSet_dhp_less_pascal_seqcst;
+        typedef SkipListSet< rcu_gpi, key_val, traits_SkipListSet_less_pascal_seqcst > SkipListSet_rcu_gpi_less_pascal_seqcst;
+        typedef SkipListSet< rcu_gpb, key_val, traits_SkipListSet_less_pascal_seqcst > SkipListSet_rcu_gpb_less_pascal_seqcst;
+        typedef SkipListSet< rcu_gpt, key_val, traits_SkipListSet_less_pascal_seqcst > SkipListSet_rcu_gpt_less_pascal_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SkipListSet< rcu_shb, key_val, traits_SkipListSet_less_pascal_seqcst > SkipListSet_rcu_shb_less_pascal_seqcst;
+        typedef SkipListSet< rcu_sht, key_val, traits_SkipListSet_less_pascal_seqcst > SkipListSet_rcu_sht_less_pascal_seqcst;
+#endif
+
+        class traits_SkipListSet_less_pascal_stat: public cc::skip_list::make_traits <
+                co::less< less >
+                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
+                ,co::stat< cc::skip_list::stat<> >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_less_pascal_stat > SkipListSet_hp_less_pascal_stat;
+        typedef SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_less_pascal_stat > SkipListSet_dhp_less_pascal_stat;
+        typedef SkipListSet< rcu_gpi, key_val, traits_SkipListSet_less_pascal_stat > SkipListSet_rcu_gpi_less_pascal_stat;
+        typedef SkipListSet< rcu_gpb, key_val, traits_SkipListSet_less_pascal_stat > SkipListSet_rcu_gpb_less_pascal_stat;
+        typedef SkipListSet< rcu_gpt, key_val, traits_SkipListSet_less_pascal_stat > SkipListSet_rcu_gpt_less_pascal_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SkipListSet< rcu_shb, key_val, traits_SkipListSet_less_pascal_stat > SkipListSet_rcu_shb_less_pascal_stat;
+        typedef SkipListSet< rcu_sht, key_val, traits_SkipListSet_less_pascal_stat > SkipListSet_rcu_sht_less_pascal_stat;
+#endif
+
+        class traits_SkipListSet_cmp_pascal: public cc::skip_list::make_traits <
+            co::compare< compare >
+            ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
+            ,co::item_counter< cds::atomicity::item_counter >
+        >::type
+        {};
+        typedef SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_cmp_pascal > SkipListSet_hp_cmp_pascal;
+        typedef SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_cmp_pascal > SkipListSet_dhp_cmp_pascal;
+        typedef SkipListSet< rcu_gpi, key_val, traits_SkipListSet_cmp_pascal > SkipListSet_rcu_gpi_cmp_pascal;
+        typedef SkipListSet< rcu_gpb, key_val, traits_SkipListSet_cmp_pascal > SkipListSet_rcu_gpb_cmp_pascal;
+        typedef SkipListSet< rcu_gpt, key_val, traits_SkipListSet_cmp_pascal > SkipListSet_rcu_gpt_cmp_pascal;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SkipListSet< rcu_shb, key_val, traits_SkipListSet_cmp_pascal > SkipListSet_rcu_shb_cmp_pascal;
+        typedef SkipListSet< rcu_sht, key_val, traits_SkipListSet_cmp_pascal > SkipListSet_rcu_sht_cmp_pascal;
+#endif
+
+        class traits_SkipListSet_cmp_pascal_stat: public cc::skip_list::make_traits <
+            co::compare< compare >
+            ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
+            ,co::stat< cc::skip_list::stat<> >
+            ,co::item_counter< cds::atomicity::item_counter >
+        >::type
+        {};
+        typedef SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_cmp_pascal_stat > SkipListSet_hp_cmp_pascal_stat;
+        typedef SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_cmp_pascal_stat > SkipListSet_dhp_cmp_pascal_stat;
+        typedef SkipListSet< rcu_gpi, key_val, traits_SkipListSet_cmp_pascal_stat > SkipListSet_rcu_gpi_cmp_pascal_stat;
+        typedef SkipListSet< rcu_gpb, key_val, traits_SkipListSet_cmp_pascal_stat > SkipListSet_rcu_gpb_cmp_pascal_stat;
+        typedef SkipListSet< rcu_gpt, key_val, traits_SkipListSet_cmp_pascal_stat > SkipListSet_rcu_gpt_cmp_pascal_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SkipListSet< rcu_shb, key_val, traits_SkipListSet_cmp_pascal_stat > SkipListSet_rcu_shb_cmp_pascal_stat;
+        typedef SkipListSet< rcu_sht, key_val, traits_SkipListSet_cmp_pascal_stat > SkipListSet_rcu_sht_cmp_pascal_stat;
+#endif
+
+        class traits_SkipListSet_less_xorshift: public cc::skip_list::make_traits <
+            co::less< less >
+            ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
+            ,co::item_counter< cds::atomicity::item_counter >
+        >::type
+        {};
+        typedef SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_less_xorshift > SkipListSet_hp_less_xorshift;
+        typedef SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_less_xorshift > SkipListSet_dhp_less_xorshift;
+        typedef SkipListSet< rcu_gpi, key_val, traits_SkipListSet_less_xorshift > SkipListSet_rcu_gpi_less_xorshift;
+        typedef SkipListSet< rcu_gpb, key_val, traits_SkipListSet_less_xorshift > SkipListSet_rcu_gpb_less_xorshift;
+        typedef SkipListSet< rcu_gpt, key_val, traits_SkipListSet_less_xorshift > SkipListSet_rcu_gpt_less_xorshift;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SkipListSet< rcu_shb, key_val, traits_SkipListSet_less_xorshift > SkipListSet_rcu_shb_less_xorshift;
+        typedef SkipListSet< rcu_sht, key_val, traits_SkipListSet_less_xorshift > SkipListSet_rcu_sht_less_xorshift;
+#endif
+
+        class traits_SkipListSet_less_xorshift_stat: public cc::skip_list::make_traits <
+            co::less< less >
+            ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
+            ,co::stat< cc::skip_list::stat<> >
+            ,co::item_counter< cds::atomicity::item_counter >
+        >::type
+        {};
+        typedef SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_less_xorshift_stat > SkipListSet_hp_less_xorshift_stat;
+        typedef SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_less_xorshift_stat > SkipListSet_dhp_less_xorshift_stat;
+        typedef SkipListSet< rcu_gpi, key_val, traits_SkipListSet_less_xorshift_stat > SkipListSet_rcu_gpi_less_xorshift_stat;
+        typedef SkipListSet< rcu_gpb, key_val, traits_SkipListSet_less_xorshift_stat > SkipListSet_rcu_gpb_less_xorshift_stat;
+        typedef SkipListSet< rcu_gpt, key_val, traits_SkipListSet_less_xorshift_stat > SkipListSet_rcu_gpt_less_xorshift_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SkipListSet< rcu_shb, key_val, traits_SkipListSet_less_xorshift_stat > SkipListSet_rcu_shb_less_xorshift_stat;
+        typedef SkipListSet< rcu_sht, key_val, traits_SkipListSet_less_xorshift_stat > SkipListSet_rcu_sht_less_xorshift_stat;
+#endif
+
+        class traits_SkipListSet_cmp_xorshift: public cc::skip_list::make_traits <
+            co::compare< compare >
+            ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
+            ,co::item_counter< cds::atomicity::item_counter >
+        >::type
+        {};
+        typedef SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_cmp_xorshift > SkipListSet_hp_cmp_xorshift;
+        typedef SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_cmp_xorshift > SkipListSet_dhp_cmp_xorshift;
+        typedef SkipListSet< rcu_gpi, key_val, traits_SkipListSet_cmp_xorshift > SkipListSet_rcu_gpi_cmp_xorshift;
+        typedef SkipListSet< rcu_gpb, key_val, traits_SkipListSet_cmp_xorshift > SkipListSet_rcu_gpb_cmp_xorshift;
+        typedef SkipListSet< rcu_gpt, key_val, traits_SkipListSet_cmp_xorshift > SkipListSet_rcu_gpt_cmp_xorshift;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SkipListSet< rcu_shb, key_val, traits_SkipListSet_cmp_xorshift > SkipListSet_rcu_shb_cmp_xorshift;
+        typedef SkipListSet< rcu_sht, key_val, traits_SkipListSet_cmp_xorshift > SkipListSet_rcu_sht_cmp_xorshift;
+#endif
+
+        class traits_SkipListSet_cmp_xorshift_stat: public cc::skip_list::make_traits <
+            co::compare< compare >
+            ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
+            ,co::stat< cc::skip_list::stat<> >
+            ,co::item_counter< cds::atomicity::item_counter >
+        >::type
+        {};
+        typedef SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_cmp_xorshift_stat > SkipListSet_hp_cmp_xorshift_stat;
+        typedef SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_cmp_xorshift_stat > SkipListSet_dhp_cmp_xorshift_stat;
+        typedef SkipListSet< rcu_gpi, key_val, traits_SkipListSet_cmp_xorshift_stat > SkipListSet_rcu_gpi_cmp_xorshift_stat;
+        typedef SkipListSet< rcu_gpb, key_val, traits_SkipListSet_cmp_xorshift_stat > SkipListSet_rcu_gpb_cmp_xorshift_stat;
+        typedef SkipListSet< rcu_gpt, key_val, traits_SkipListSet_cmp_xorshift_stat > SkipListSet_rcu_gpt_cmp_xorshift_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SkipListSet< rcu_shb, key_val, traits_SkipListSet_cmp_xorshift_stat > SkipListSet_rcu_shb_cmp_xorshift_stat;
+        typedef SkipListSet< rcu_sht, key_val, traits_SkipListSet_cmp_xorshift_stat > SkipListSet_rcu_sht_cmp_xorshift_stat;
+#endif
+    };
+
+    template <typename GC, typename T, typename Traits>
+    static inline void print_stat( cds_test::property_stream& o, SkipListSet<GC, T, Traits> const& s )
+    {
+        o << s.statistics();
+    }
+
+} // namespace set
+
+#define CDSSTRESS_SkipListSet_case( fixture, test_case, skiplist_set_type, key_type, value_type ) \
+    TEST_F( fixture, skiplist_set_type ) \
+    { \
+        typedef set::set_type< tag_SkipListSet, key_type, value_type >::skiplist_set_type set_type; \
+        test_case<set_type>(); \
+    }
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+#   define CDSSTRESS_SkipListSet_SHRCU( fixture, test_case, key_type, value_type ) \
+        CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_shb_less_pascal,        key_type, value_type) \
+        CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_sht_less_pascal,        key_type, value_type) \
+        CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_shb_less_pascal_seqcst, key_type, value_type) \
+        CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_sht_less_pascal_seqcst, key_type, value_type) \
+        CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_shb_less_pascal_stat,   key_type, value_type) \
+        CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_sht_less_pascal_stat,   key_type, value_type) \
+        CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_shb_cmp_pascal,         key_type, value_type) \
+        CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_sht_cmp_pascal,         key_type, value_type) \
+        CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_shb_cmp_pascal_stat,    key_type, value_type) \
+        CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_sht_cmp_pascal_stat,    key_type, value_type) \
+        CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_shb_less_xorshift,      key_type, value_type) \
+        CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_sht_less_xorshift,      key_type, value_type) \
+        CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_shb_less_xorshift_stat, key_type, value_type) \
+        CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_sht_less_xorshift_stat, key_type, value_type) \
+        CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_shb_cmp_xorshift,       key_type, value_type) \
+        CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_sht_cmp_xorshift,       key_type, value_type) \
+        CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_shb_cmp_xorshift_stat,  key_type, value_type) \
+        CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_sht_cmp_xorshift_stat,  key_type, value_type)
+#else
+#   define CDSSTRESS_SkipListSet_SHRCU( fixture, test_case, key_type, value_type )
+#endif
+
+#define CDSSTRESS_SkipListSet( fixture, test_case, key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_hp_less_pascal,             key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_dhp_less_pascal,            key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpi_less_pascal,        key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpb_less_pascal,        key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpt_less_pascal,        key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_hp_less_pascal_seqcst,      key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_dhp_less_pascal_seqcst,     key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpi_less_pascal_seqcst, key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpb_less_pascal_seqcst, key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpt_less_pascal_seqcst, key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_hp_less_pascal_stat,        key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_dhp_less_pascal_stat,       key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpi_less_pascal_stat,   key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpb_less_pascal_stat,   key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpt_less_pascal_stat,   key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_hp_cmp_pascal,              key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_dhp_cmp_pascal,             key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpi_cmp_pascal,         key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpb_cmp_pascal,         key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpt_cmp_pascal,         key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_hp_cmp_pascal_stat,         key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_dhp_cmp_pascal_stat,        key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpi_cmp_pascal_stat,    key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpb_cmp_pascal_stat,    key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpt_cmp_pascal_stat,    key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_hp_less_xorshift,           key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_dhp_less_xorshift,          key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpi_less_xorshift,      key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpb_less_xorshift,      key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpt_less_xorshift,      key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_hp_less_xorshift_stat,      key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_dhp_less_xorshift_stat,     key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpi_less_xorshift_stat, key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpb_less_xorshift_stat, key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpt_less_xorshift_stat, key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_hp_cmp_xorshift,            key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_dhp_cmp_xorshift,           key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpi_cmp_xorshift,       key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpb_cmp_xorshift,       key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpt_cmp_xorshift,       key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_hp_cmp_xorshift_stat,       key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_dhp_cmp_xorshift_stat,      key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpi_cmp_xorshift_stat,  key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpb_cmp_xorshift_stat,  key_type, value_type ) \
+    CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpt_cmp_xorshift_stat,  key_type, value_type ) \
+    CDSSTRESS_SkipListSet_SHRCU( fixture, test_case, key_type, value_type )
+
+#endif // #ifndef CDSUNIT_SET_TYPE_SKIP_LIST_H
diff --git a/test/stress/set/set_type_split_list.h b/test/stress/set/set_type_split_list.h
new file mode 100644 (file)
index 0000000..0a2c328
--- /dev/null
@@ -0,0 +1,635 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TYPE_SPLIT_LIST_H
+#define CDSUNIT_SET_TYPE_SPLIT_LIST_H
+
+#include "set_type.h"
+
+#include <cds/container/michael_list_hp.h>
+#include <cds/container/michael_list_dhp.h>
+#include <cds/container/michael_list_rcu.h>
+#include <cds/container/lazy_list_hp.h>
+#include <cds/container/lazy_list_dhp.h>
+#include <cds/container/lazy_list_rcu.h>
+
+#include <cds/container/split_list_set.h>
+#include <cds/container/split_list_set_rcu.h>
+
+#include <cds_test/stat_splitlist_out.h>
+
+namespace set {
+
+    template <typename GC, typename T, typename Traits = cc::split_list::traits>
+    class SplitListSet : public cc::SplitListSet< GC, T, Traits >
+    {
+        typedef cc::SplitListSet< GC, T, Traits > base_class;
+    public:
+        template <typename Config>
+        SplitListSet( Config const& cfg )
+            : base_class( cfg.s_nSetSize, cfg.s_nLoadFactor )
+        {}
+
+        // 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_SplitListSet;
+
+    template <typename Key, typename Val>
+    struct set_type< tag_SplitListSet, Key, Val >: public set_type_base< Key, Val >
+    {
+        typedef set_type_base< Key, Val > base_class;
+        typedef typename base_class::key_val key_val;
+        typedef typename base_class::compare compare;
+        typedef typename base_class::less less;
+        typedef typename base_class::hash hash;
+
+        // ***************************************************************************
+        // SplitListSet based on MichaelList
+
+        struct traits_SplitList_Michael_dyn_cmp :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::compare< compare >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_HP_dyn_cmp;
+        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_DHP_dyn_cmp;
+        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPI_dyn_cmp;
+        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPB_dyn_cmp;
+        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPT_dyn_cmp;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHB_dyn_cmp;
+        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHT_dyn_cmp;
+#endif
+
+        struct traits_SplitList_Michael_dyn_cmp_stat :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,co::hash< hash >
+                ,co::stat< cc::split_list::stat<> >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::compare< compare >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_HP_dyn_cmp_stat;
+        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_DHP_dyn_cmp_stat;
+        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPI_dyn_cmp_stat;
+        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPB_dyn_cmp_stat;
+        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPT_dyn_cmp_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHB_dyn_cmp_stat;
+        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHT_dyn_cmp_stat;
+#endif
+
+        struct traits_SplitList_Michael_dyn_cmp_seqcst :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,co::hash< hash >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::compare< compare >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_HP_dyn_cmp_seqcst;
+        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_DHP_dyn_cmp_seqcst;
+        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
+        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
+        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
+        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
+#endif
+
+        struct traits_SplitList_Michael_st_cmp :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::compare< compare >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_HP_st_cmp;
+        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_DHP_st_cmp;
+        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPI_st_cmp;
+        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPB_st_cmp;
+        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPT_st_cmp;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHB_st_cmp;
+        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHT_st_cmp;
+#endif
+
+        struct traits_SplitList_Michael_st_cmp_seqcst :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::compare< compare >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_HP_st_cmp_seqcst;
+        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_DHP_st_cmp_seqcst;
+        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_GPI_st_cmp_seqcst;
+        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_GPB_st_cmp_seqcst;
+        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_GPT_st_cmp_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_SHB_st_cmp_seqcst;
+        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_SHT_st_cmp_seqcst;
+#endif
+
+        //HP + less
+        struct traits_SplitList_Michael_dyn_less :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::less< less >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_HP_dyn_less;
+        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_DHP_dyn_less;
+        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPI_dyn_less;
+        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPB_dyn_less;
+        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPT_dyn_less;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHB_dyn_less;
+        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHT_dyn_less;
+#endif
+
+        struct traits_SplitList_Michael_dyn_less_seqcst :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,co::hash< hash >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::less< less >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListSet< cds::gc::HP, key_val,  traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_HP_dyn_less_seqcst;
+        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_DHP_dyn_less_seqcst;
+        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPI_dyn_less_seqcst;
+        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPB_dyn_less_seqcst;
+        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPT_dyn_less_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHB_dyn_less_seqcst;
+        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHT_dyn_less_seqcst;
+#endif
+
+        struct traits_SplitList_Michael_st_less :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::less< less >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_st_less > SplitList_Michael_HP_st_less;
+        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_DHP_st_less;
+        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPI_st_less;
+        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPB_st_less;
+        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPT_st_less;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHB_st_less;
+        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHT_st_less;
+#endif
+
+        struct traits_SplitList_Michael_st_less_stat :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::hash< hash >
+                ,co::stat< cc::split_list::stat<>>
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::less< less >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_HP_st_less_stat;
+        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_DHP_st_less_stat;
+        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPI_st_less_stat;
+        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPB_st_less_stat;
+        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPT_st_less_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHB_st_less_stat;
+        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHT_st_less_stat;
+#endif
+
+        struct traits_SplitList_Michael_st_less_seqcst :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::less< less >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_HP_st_less_seqcst;
+        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_DHP_st_less_seqcst;
+        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPI_st_less_seqcst;
+        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPB_st_less_seqcst;
+        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPT_st_less_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHB_st_less_seqcst;
+        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHT_st_less_seqcst;
+#endif
+
+        // ***************************************************************************
+        // SplitListSet based on LazyList
+
+        struct traits_SplitList_Lazy_dyn_cmp :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::compare< compare >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_HP_dyn_cmp;
+        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_DHP_dyn_cmp;
+        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPI_dyn_cmp;
+        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPB_dyn_cmp;
+        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPT_dyn_cmp;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp;
+        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp;
+#endif
+
+        struct traits_SplitList_Lazy_dyn_cmp_stat : public traits_SplitList_Lazy_dyn_cmp
+        {
+            typedef cc::split_list::stat<> stat;
+        };
+        typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_HP_dyn_cmp_stat;
+        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_DHP_dyn_cmp_stat;
+        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPI_dyn_cmp_stat;
+        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPB_dyn_cmp_stat;
+        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPT_dyn_cmp_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp_stat;
+        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp_stat;
+#endif
+
+        struct traits_SplitList_Lazy_dyn_cmp_seqcst :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,co::hash< hash >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::compare< compare >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_HP_dyn_cmp_seqcst;
+        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_DHP_dyn_cmp_seqcst;
+        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
+        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
+        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
+        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
+#endif
+
+        struct traits_SplitList_Lazy_st_cmp :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::compare< compare >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_HP_st_cmp;
+        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_DHP_st_cmp;
+        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPI_st_cmp;
+        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPB_st_cmp;
+        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPT_st_cmp;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHB_st_cmp;
+        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHT_st_cmp;
+#endif
+
+        struct traits_SplitList_Lazy_st_cmp_seqcst :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::compare< compare >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_HP_st_cmp_seqcst;
+        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_DHP_st_cmp_seqcst;
+        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_GPI_st_cmp_seqcst;
+        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_GPB_st_cmp_seqcst;
+        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_GPT_st_cmp_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_SHB_st_cmp_seqcst;
+        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_SHT_st_cmp_seqcst;
+#endif
+
+        struct traits_SplitList_Lazy_dyn_less :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::less< less >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_HP_dyn_less;
+        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_DHP_dyn_less;
+        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPI_dyn_less;
+        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPB_dyn_less;
+        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPT_dyn_less;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHB_dyn_less;
+        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHT_dyn_less;
+#endif
+
+        struct traits_SplitList_Lazy_dyn_less_seqcst :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,co::hash< hash >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::less< less >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_HP_dyn_less_seqcst;
+        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_DHP_dyn_less_seqcst;
+        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPI_dyn_less_seqcst;
+        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPB_dyn_less_seqcst;
+        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPT_dyn_less_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHB_dyn_less_seqcst;
+        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHT_dyn_less_seqcst;
+#endif
+
+        struct traits_SplitList_Lazy_st_less :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::less< less >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_HP_st_less;
+        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_DHP_st_less;
+        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPI_st_less;
+        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPB_st_less;
+        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPT_st_less;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHB_st_less;
+        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHT_st_less;
+#endif
+
+        struct traits_SplitList_Lazy_st_less_seqcst :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::less< less >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_HP_st_less_seqcst;
+        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_DHP_st_less_seqcst;
+        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPI_st_less_seqcst;
+        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPB_st_less_seqcst;
+        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPT_st_less_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHB_st_less_seqcst;
+        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHT_st_less_seqcst;
+#endif
+
+        struct traits_SplitList_Lazy_st_less_stat : public traits_SplitList_Lazy_st_less
+        {
+            typedef cc::split_list::stat<> stat;
+        };
+        typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_HP_st_less_stat;
+        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_DHP_st_less_stat;
+        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPI_st_less_stat;
+        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPB_st_less_stat;
+        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPT_st_less_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHB_st_less_stat;
+        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHT_st_less_stat;
+#endif
+    };
+
+    template <typename GC, typename T, typename Traits>
+    static inline void print_stat( cds_test::property_stream& o, SplitListSet<GC, T, Traits> const& s )
+    {
+        o << s.statistics();
+    }
+
+} // namespace set
+
+
+#define CDSSTRESS_SplitListSet_case( fixture, test_case, splitlist_set_type, key_type, value_type ) \
+    TEST_P( fixture, splitlist_set_type ) \
+    { \
+        typedef set::set_type< tag_SplitListSet, key_type, value_type >::splitlist_set_type set_type; \
+        test_case<set_type>(); \
+    }
+
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+#   define CDSSTRESS_SplitListSet_SHRCU( fixture, test_case, key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_dyn_cmp,         key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_dyn_cmp,         key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_dyn_cmp_stat,    key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_dyn_cmp_stat,    key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_dyn_cmp_seqcst,  key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_dyn_cmp_seqcst,  key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_st_cmp,          key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_st_cmp,          key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_dyn_less,        key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_dyn_less,        key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_st_less,         key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_st_less,         key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_st_less_stat,    key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_st_less_stat,    key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_dyn_cmp,            key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_dyn_cmp,            key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_dyn_cmp_stat,       key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_dyn_cmp_stat,       key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_st_cmp,             key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_st_cmp,             key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_dyn_less,           key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_dyn_less,           key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_st_less,            key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_st_less,            key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_st_less_stat,       key_type, value_type ) \
+        CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_st_less_stat,       key_type, value_type )
+#else
+#   define CDSSTRESS_SplitListSet_SHRCU( fixture, test_case, key_type, value_type )
+#endif
+
+#define CDSSTRESS_SplitListSet( fixture, test_case, key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_dyn_cmp,              key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_dyn_cmp,             key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_dyn_cmp,         key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_cmp,         key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_dyn_cmp,         key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_dyn_cmp_stat,         key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_dyn_cmp_stat,        key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_dyn_cmp_stat,    key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_cmp_stat,    key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_dyn_cmp_stat,    key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_dyn_cmp_seqcst,       key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_dyn_cmp_seqcst,      key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_dyn_cmp_seqcst,  key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_cmp_seqcst,  key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_dyn_cmp_seqcst,  key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_st_cmp,               key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_st_cmp,              key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_st_cmp,          key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_st_cmp,          key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_st_cmp,          key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_dyn_less,             key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_dyn_less,            key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_dyn_less,        key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_less,        key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_dyn_less,        key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_st_less,              key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_st_less,             key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_st_less,         key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_st_less,         key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_st_less,         key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_st_less_stat,         key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_st_less_stat,        key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_st_less_stat,    key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_st_less_stat,    key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_st_less_stat,    key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_dyn_cmp,                 key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_dyn_cmp,                key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_dyn_cmp,            key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_dyn_cmp,            key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_dyn_cmp,            key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_dyn_cmp_stat,            key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_dyn_cmp_stat,           key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_dyn_cmp_stat,       key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_dyn_cmp_stat,       key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_dyn_cmp_stat,       key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_st_cmp,                  key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_st_cmp,                 key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_st_cmp,             key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_st_cmp,             key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_st_cmp,             key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_dyn_less,                key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_dyn_less,               key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_dyn_less,           key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_dyn_less,           key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_dyn_less,           key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_st_less,                 key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_st_less,                key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_st_less,            key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_st_less,            key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_st_less,            key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_st_less_stat,            key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_st_less_stat,           key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_st_less_stat,       key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_st_less_stat,       key_type, value_type ) \
+    CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_st_less_stat,       key_type, value_type ) \
+    CDSSTRESS_SplitListSet_SHRCU( fixture, test_case, key_type, value_type )
+
+#endif // #ifndef CDSUNIT_SET_TYPE_SPLIT_LIST_H
diff --git a/test/stress/set/set_type_std.h b/test/stress/set/set_type_std.h
new file mode 100644 (file)
index 0000000..1c24f98
--- /dev/null
@@ -0,0 +1,258 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TYPE_STD_H
+#define CDSUNIT_SET_TYPE_STD_H
+
+#include <unordered_set>
+#include <set>
+#include <mutex>    //unique_lock
+
+#include "set_type.h"
+
+namespace set {
+
+    struct tag_StdSet;
+
+    template <typename Value, typename Hash, typename Less, typename EqualTo, typename Lock,
+        class Alloc = typename CDS_DEFAULT_ALLOCATOR::template rebind<Value>::other
+    >
+    class StdHashSet
+        : public std::unordered_set<
+            Value
+            , Hash
+            , EqualTo
+            , Alloc
+        >
+    {
+    public:
+        Lock m_lock;
+        typedef std::unique_lock<Lock> scoped_lock;
+        typedef std::unordered_set<
+            Value
+            , Hash
+            , EqualTo
+            , Alloc
+        >   base_class;
+
+    public:
+        typedef typename base_class::value_type value_type;
+
+        template <class Config>
+        StdHashSet( Config const& )
+        {}
+
+        template <typename Key>
+        bool contains( const Key& key )
+        {
+            scoped_lock al( m_lock );
+            return base_class::find( value_type(key) ) != base_class::end();
+        }
+
+        template <typename Key>
+        bool insert( Key const& key )
+        {
+            scoped_lock al( m_lock );
+            std::pair<typename base_class::iterator, bool> pRet = base_class::insert( value_type( key ));
+            return pRet.second;
+        }
+
+        template <typename Key, typename Func>
+        bool insert( Key const& key, Func func )
+        {
+            scoped_lock al( m_lock );
+            std::pair<typename base_class::iterator, bool> pRet = base_class::insert( value_type( key ));
+            if ( pRet.second ) {
+                func( *pRet.first );
+                return true;
+            }
+            return false;
+        }
+
+        template <typename T, typename Func>
+        std::pair<bool, bool> ensure( const T& key, Func func )
+        {
+            scoped_lock al( m_lock );
+            std::pair<typename base_class::iterator, bool> pRet = base_class::insert( value_type( key ));
+            if ( pRet.second ) {
+                func( true, *pRet.first, key );
+                return std::make_pair( true, true );
+            }
+            else {
+                func( false, *pRet.first, key );
+                return std::make_pair( true, false );
+            }
+        }
+
+        template <typename Key>
+        bool erase( const Key& key )
+        {
+            scoped_lock al( m_lock );
+            return base_class::erase( value_type(key) ) != 0;
+        }
+
+        template <typename T, typename Func>
+        bool erase( const T& key, Func func )
+        {
+            scoped_lock al( m_lock );
+            typename base_class::iterator it = base_class::find( value_type(key) );
+            if ( it != base_class::end() ) {
+                func( *it );
+                return base_class::erase( it ) != base_class::end();
+            }
+            return false;
+        }
+
+        std::ostream& dump( std::ostream& stm ) { return stm; }
+
+        // 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 = true;
+    };
+
+    template <typename Value, typename Less, typename Lock,
+        class Alloc = typename CDS_DEFAULT_ALLOCATOR::template rebind<Value>::other
+    >
+    class StdSet: public std::set<Value, Less, Alloc>
+    {
+        Lock m_lock;
+        typedef std::unique_lock<Lock> scoped_lock;
+        typedef std::set<Value, Less, Alloc> base_class;
+    public:
+        typedef typename base_class::key_type value_type;
+
+        template <class Config>
+        StdSet( Config const& )
+        {}
+
+        template <typename Key>
+        bool contains( const Key& key )
+        {
+            value_type v( key );
+            scoped_lock al( m_lock );
+            return base_class::find( v ) != base_class::end();
+        }
+
+        bool insert( value_type const& v )
+        {
+            scoped_lock al( m_lock );
+            return base_class::insert( v ).second;
+        }
+
+        template <typename Key, typename Func>
+        bool insert( Key const& key, Func func )
+        {
+            scoped_lock al( m_lock );
+            std::pair<typename base_class::iterator, bool> pRet = base_class::insert( value_type( key ));
+            if ( pRet.second ) {
+                func( *pRet.first );
+                return true;
+            }
+            return false;
+        }
+
+        template <typename T, typename Func>
+        std::pair<bool, bool> ensure( const T& key, Func func )
+        {
+            scoped_lock al( m_lock );
+            std::pair<typename base_class::iterator, bool> pRet = base_class::insert( value_type( key ));
+            if ( pRet.second ) {
+                func( true, *pRet.first, key );
+                return std::make_pair( true, true );
+            }
+            else {
+                func( false, *pRet.first, key );
+                return std::make_pair( true, false );
+            }
+        }
+
+        template <typename Key>
+        bool erase( const Key& key )
+        {
+            scoped_lock al( m_lock );
+            return base_class::erase( value_type(key) ) != 0;
+        }
+
+        template <typename T, typename Func>
+        bool erase( const T& key, Func func )
+        {
+            scoped_lock al( m_lock );
+            typename base_class::iterator it = base_class::find( value_type(key) );
+            if ( it != base_class::end() ) {
+                func( *it );
+
+                base_class::erase( it );
+                return true;
+            }
+            return false;
+        }
+
+        std::ostream& dump( std::ostream& stm ) { return stm; }
+
+        // for testing
+        static CDS_CONSTEXPR bool const c_bExtractSupported = false;
+        static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false;
+    };
+
+    template <typename Key, typename Val>
+    struct set_type< tag_StdSet, Key, Val >: public set_type_base< Key, Val >
+    {
+        typedef set_type_base< Key, Val > base_class;
+        typedef typename base_class::key_val key_val;
+        typedef typename base_class::less less;
+        typedef typename base_class::hash hash;
+        typedef typename base_class::equal_to equal_to;
+
+        typedef StdSet< key_val, less, cds::sync::spin > StdSet_Spin;
+        typedef StdSet< key_val, less, std::mutex > StdSet_Mutex;
+        //typedef StdSet< key_val, less, lock::NoLock>     StdSet_NoLock;
+
+        typedef StdHashSet< key_val, hash, less, equal_to, cds::sync::spin > StdHashSet_Spin;
+        typedef StdHashSet< key_val, hash, less, equal_to, std::mutex > StdHashSet_Mutex;
+        //typedef StdHashSet< key_val, hash, less, equal_to, lock::NoLock >    StdHashSet_NoLock;
+    };
+
+} // namespace set
+
+#define CDSSTRESS_StdSet_case( fixture, test_case, std_set_type, key_type, value_type ) \
+    TEST_F( fixture, std_set_type ) \
+    { \
+        typedef set::set_type< tag_StdSet, key_type, value_type >::std_set_type set_type; \
+        test_case<set_type>(); \
+    }
+
+#define CDSSTRESS_StdSet( fixture, test_case, key_type, value_type ) \
+    CDSSTRESS_StdSet_case( fixture, test_case, StdSet_Spin,      key_type, value_type ) \
+    CDSSTRESS_StdSet_case( fixture, test_case, StdSet_Mutex,     key_type, value_type ) \
+    CDSSTRESS_StdSet_case( fixture, test_case, StdHashSet_Spin,  key_type, value_type ) \
+    CDSSTRESS_StdSet_case( fixture, test_case, StdHashSet_Mutex, key_type, value_type )
+
+#endif // #ifndef CDSUNIT_SET_TYPE_STD_H
diff --git a/test/stress/set/set_type_striped.h b/test/stress/set/set_type_striped.h
new file mode 100644 (file)
index 0000000..97a3955
--- /dev/null
@@ -0,0 +1,604 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TYPE_STRIPED_H
+#define CDSUNIT_SET_TYPE_STRIPED_H
+
+#include "set_type.h"
+
+#include <cds/container/striped_set/std_list.h>
+#include <cds/container/striped_set/std_vector.h>
+#include <cds/container/striped_set/std_set.h>
+#include <cds/container/striped_set/std_hash_set.h>
+#include <cds/container/striped_set/boost_unordered_set.h>
+
+#include <boost/version.hpp>
+#if BOOST_VERSION >= 104800
+#   include <cds/container/striped_set/boost_slist.h>
+#   include <cds/container/striped_set/boost_list.h>
+#   include <cds/container/striped_set/boost_vector.h>
+#   include <cds/container/striped_set/boost_stable_vector.h>
+#   include <cds/container/striped_set/boost_set.h>
+#   include <cds/container/striped_set/boost_flat_set.h>
+#endif
+#include <cds/container/striped_set.h>
+
+namespace set {
+
+    struct tag_StripedSet;
+
+    template <typename Key, typename Val>
+    struct set_type< tag_StripedSet, Key, Val >: public set_type_base< Key, Val >
+    {
+        typedef set_type_base< Key, Val > base_class;
+        typedef typename base_class::key_val key_val;
+        typedef typename base_class::compare compare;
+        typedef typename base_class::less less;
+        typedef typename base_class::equal_to equal_to;
+        typedef typename base_class::hash hash;
+        typedef typename base_class::hash2 hash2;
+
+
+        // ***************************************************************************
+        // StripedSet
+
+        // for sequential containers
+        template <class BucketEntry, typename... Options>
+        class StripedHashSet_seq:
+            public cc::StripedSet< BucketEntry,
+                co::mutex_policy< cc::striped_set::striping<> >
+                ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+                , Options...
+            >
+        {
+            typedef cc::StripedSet< BucketEntry,
+                co::mutex_policy< cc::striped_set::striping<> >
+                ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+                , Options...
+            > base_class;
+            typedef typename base_class::resizing_policy resizing_policy_t;
+
+            resizing_policy_t   m_placeHolder;
+        public:
+            template <class Config>
+            StripedHashSet_seq( Config const& cfg )
+                : base_class( cfg.s_nSetSize / cfg.s_nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( cfg.s_nLoadFactor )) )
+            {}
+
+            /*
+            template <typename Q, typename Less>
+            bool erase_with( Q const& v, Less pred )
+            {
+                return base_class::erase( v );
+            }
+            */
+
+            // for testing
+            static CDS_CONSTEXPR bool const c_bExtractSupported = false;
+            static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
+            static CDS_CONSTEXPR bool const c_bEraseExactKey = false;
+        };
+
+        template <class BucketEntry, typename... Options>
+        class StripedHashSet_seq_rational:
+            public cc::StripedSet< BucketEntry,
+                co::mutex_policy< cc::striped_set::striping<> >
+                ,co::resizing_policy<cc::striped_set::rational_load_factor_resizing<0> >
+                , Options...
+            >
+        {
+            typedef cc::StripedSet< BucketEntry,
+                co::mutex_policy< cc::striped_set::striping<> >
+                ,co::resizing_policy<cc::striped_set::rational_load_factor_resizing<0> >
+                , Options...
+            > base_class;
+            typedef typename base_class::resizing_policy resizing_policy_t;
+
+            resizing_policy_t   m_placeHolder;
+        public:
+            template <class Config>
+            StripedHashSet_seq_rational( Config const& cfg ) // LoadFactor = 1 / nDenominator
+                : base_class( cfg.s_nSetSize / cfg.s_nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( 1, cfg.s_nLoadFactor )) )
+            {}
+
+            /*
+            template <typename Q, typename Less>
+            bool erase_with( Q const& v, Less pred )
+            {
+                return base_class::erase( v );
+            }
+            */
+
+            // for testing
+            static CDS_CONSTEXPR bool const c_bExtractSupported = false;
+            static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
+            static CDS_CONSTEXPR bool const c_bEraseExactKey = false;
+        };
+
+        // for non-sequential ordered containers
+        template <class BucketEntry, typename... Options>
+        class StripedHashSet_ord:
+            public cc::StripedSet< BucketEntry,
+                co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+                ,co::mutex_policy< cc::striped_set::striping<> >
+                , Options...
+            >
+        {
+            typedef cc::StripedSet< BucketEntry,
+               co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+                ,co::mutex_policy< cc::striped_set::striping<> >
+                , Options...
+            > base_class;
+            typedef typename base_class::resizing_policy resizing_policy_t;
+
+            resizing_policy_t   m_placeHolder;
+        public:
+            template <class Config>
+            StripedHashSet_ord( Config const& cfg )
+                : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( cfg.s_nMaxLoadFactor * 1024 )) )
+            {}
+
+            // 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;
+        };
+
+        template <class BucketEntry, typename... Options>
+        class StripedHashSet_ord_rational:
+            public cc::StripedSet< BucketEntry,
+                co::resizing_policy<cc::striped_set::rational_load_factor_resizing<0> >
+                ,co::mutex_policy< cc::striped_set::striping<> >
+                , Options...
+            >
+        {
+            typedef cc::StripedSet< BucketEntry,
+               co::resizing_policy<cc::striped_set::rational_load_factor_resizing<0> >
+                ,co::mutex_policy< cc::striped_set::striping<> >
+                , Options...
+            > base_class;
+            typedef typename base_class::resizing_policy resizing_policy_t;
+
+            resizing_policy_t   m_placeHolder;
+        public:
+            template <class Config>
+            StripedHashSet_ord_rational( Config const& cfg ) // LoadFactor = 1 / nDenominator
+                : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( 1024, cfg.s_nLoadFactor )))
+            {}
+
+            // for testing
+            static CDS_CONSTEXPR bool const c_bExtractSupported = false;
+            static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
+            static CDS_CONSTEXPR bool const c_bEraseExactKey = false;
+        };
+
+        typedef StripedHashSet_seq<
+            std::list< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > StripedSet_list;
+
+        typedef StripedHashSet_seq_rational<
+            std::list< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > StripedSet_rational_list;
+
+        typedef StripedHashSet_seq<
+            std::vector< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > StripedSet_vector;
+
+        typedef StripedHashSet_seq_rational<
+            std::vector< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > StripedSet_rational_vector;
+
+#if BOOST_VERSION >= 104800
+        typedef StripedHashSet_seq<
+            boost::container::slist< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > StripedSet_boost_slist;
+
+        typedef StripedHashSet_seq_rational<
+            boost::container::slist< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > StripedSet_rational_boost_slist;
+
+        typedef StripedHashSet_seq<
+            boost::container::list< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > StripedSet_boost_list;
+
+        typedef StripedHashSet_seq_rational<
+            boost::container::list< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > StripedSet_rational_boost_list;
+
+        typedef StripedHashSet_seq<
+            boost::container::vector< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > StripedSet_boost_vector;
+
+        typedef StripedHashSet_seq_rational<
+            boost::container::vector< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > StripedSet_rational_boost_vector;
+
+        typedef StripedHashSet_seq<
+            boost::container::stable_vector< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > StripedSet_boost_stable_vector;
+
+        typedef StripedHashSet_seq_rational<
+            boost::container::stable_vector< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > StripedSet_rational_boost_stable_vector;
+#endif
+
+        typedef StripedHashSet_ord<
+            std::set< key_val, less >
+            , co::hash< hash2 >
+        > StripedSet_set;
+
+        typedef StripedHashSet_ord_rational<
+            std::set< key_val, less >
+            , co::hash< hash2 >
+        > StripedSet_rational_set;
+
+        typedef StripedHashSet_ord<
+            std::unordered_set< key_val, hash, equal_to >
+            , co::hash< hash2 >
+        > StripedSet_hashset;
+
+        typedef StripedHashSet_ord_rational<
+            std::unordered_set< key_val, hash, equal_to >
+            , co::hash< hash2 >
+        > StripedSet_rational_hashset;
+
+#if BOOST_VERSION >= 104800
+        typedef StripedHashSet_ord<
+            boost::container::set< key_val, less >
+            , co::hash< hash2 >
+        > StripedSet_boost_set;
+
+        typedef StripedHashSet_ord_rational<
+            boost::container::set< key_val, less >
+            , co::hash< hash2 >
+        > StripedSet_rational_boost_set;
+
+        typedef StripedHashSet_ord<
+            boost::container::flat_set< key_val, less >
+            , co::hash< hash2 >
+        > StripedSet_boost_flat_set;
+
+        typedef StripedHashSet_ord_rational<
+            boost::container::flat_set< key_val, less >
+            , co::hash< hash2 >
+        > StripedSet_rational_boost_flat_set;
+#endif
+
+        typedef StripedHashSet_ord<
+            boost::unordered_set< key_val, hash, equal_to >
+            , co::hash< hash2 >
+        > StripedSet_boost_unordered_set;
+
+        typedef StripedHashSet_ord_rational<
+            boost::unordered_set< key_val, hash, equal_to >
+            , co::hash< hash2 >
+        > StripedSet_rational_boost_unordered_set;
+
+
+        // ***************************************************************************
+        // RefinableSet
+
+        // for sequential containers
+        template <class BucketEntry, typename... Options>
+        class RefinableHashSet_seq:
+            public cc::StripedSet< BucketEntry,
+            co::mutex_policy< cc::striped_set::refinable<> >
+            ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+            , Options...
+            >
+        {
+            typedef cc::StripedSet< BucketEntry,
+                co::mutex_policy< cc::striped_set::refinable<> >
+                ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+                , Options...
+            > base_class;
+            typedef typename base_class::resizing_policy resizing_policy_t;
+
+            resizing_policy_t   m_placeHolder;
+        public:
+            template <class Config>
+            RefinableHashSet_seq( Config const& cfg )
+                : base_class( cfg.s_nSetSize / cfg.s_nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( cfg.s_nLoadFactor )) )
+            {}
+
+            /*
+            template <typename Q, typename Less>
+            bool erase_with( Q const& v, Less pred )
+            {
+                return base_class::erase( v );
+            }
+            */
+
+            // for testing
+            static CDS_CONSTEXPR bool const c_bExtractSupported = false;
+            static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
+        };
+
+        template <class BucketEntry, typename... Options>
+        class RefinableHashSet_seq_rational:
+            public cc::StripedSet< BucketEntry,
+            co::mutex_policy< cc::striped_set::refinable<> >
+            ,co::resizing_policy<cc::striped_set::rational_load_factor_resizing<0> >
+            , Options...
+            >
+        {
+            typedef cc::StripedSet< BucketEntry,
+                co::mutex_policy< cc::striped_set::refinable<> >
+                ,co::resizing_policy<cc::striped_set::rational_load_factor_resizing<0> >
+                , Options...
+            > base_class;
+            typedef typename base_class::resizing_policy resizing_policy_t;
+
+            resizing_policy_t   m_placeHolder;
+        public:
+            template <class Config>
+            RefinableHashSet_seq_rational( Config const& cfg ) // LoadFactor = 1 / nDenominator
+                : base_class( cfg.s_nSetSize / cfg.s_nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( 1, cfg.s_nLoadFactor )))
+            {}
+
+            // for testing
+            static CDS_CONSTEXPR bool const c_bExtractSupported = false;
+            static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
+        };
+
+        // for non-sequential ordered containers
+        template <class BucketEntry, typename... Options>
+        class RefinableHashSet_ord:
+            public cc::StripedSet< BucketEntry,
+                co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+                ,co::mutex_policy< cc::striped_set::refinable<> >
+                , Options...
+            >
+        {
+            typedef cc::StripedSet< BucketEntry,
+                co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+                ,co::mutex_policy< cc::striped_set::refinable<> >
+                , Options...
+            > base_class;
+            typedef typename base_class::resizing_policy resizing_policy_t;
+
+            resizing_policy_t   m_placeHolder;
+        public:
+            template <class Config>
+            RefinableHashSet_ord( Config const& cfg )
+                : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( cfg.s_nMaxLoadFactor * 1024 )) )
+            {}
+
+            // for testing
+            static CDS_CONSTEXPR bool const c_bExtractSupported = false;
+            static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false;
+        };
+
+        template <class BucketEntry, typename... Options>
+        class RefinableHashSet_ord_rational:
+            public cc::StripedSet< BucketEntry,
+                co::resizing_policy<cc::striped_set::rational_load_factor_resizing<0> >
+                ,co::mutex_policy< cc::striped_set::refinable<> >
+                , Options...
+            >
+        {
+            typedef cc::StripedSet< BucketEntry,
+                co::resizing_policy<cc::striped_set::rational_load_factor_resizing<0> >
+                ,co::mutex_policy< cc::striped_set::refinable<> >
+                , Options...
+            > base_class;
+            typedef typename base_class::resizing_policy resizing_policy_t;
+
+            resizing_policy_t   m_placeHolder;
+        public:
+            template <class Config>
+            RefinableHashSet_ord_rational( Config const& cfg ) // LoadFactor = 1 / nDenominator
+                : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( 1024, cfg.s_nLoadFactor )))
+            {}
+
+            // for testing
+            static CDS_CONSTEXPR bool const c_bExtractSupported = false;
+            static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
+        };
+
+        typedef RefinableHashSet_seq<
+            std::list< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > RefinableSet_list;
+
+        typedef RefinableHashSet_seq_rational<
+            std::list< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > RefinableSet_rational_list;
+
+        typedef RefinableHashSet_seq<
+            std::vector< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > RefinableSet_vector;
+
+        typedef RefinableHashSet_seq_rational<
+            std::vector< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > RefinableSet_rational_vector;
+
+#if BOOST_VERSION >= 104800
+        typedef RefinableHashSet_seq<
+            boost::container::slist< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > RefinableSet_boost_slist;
+
+        typedef RefinableHashSet_seq_rational<
+            boost::container::slist< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > RefinableSet_rational_boost_slist;
+
+        typedef RefinableHashSet_seq<
+            boost::container::list< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > RefinableSet_boost_list;
+
+        typedef RefinableHashSet_seq_rational<
+            boost::container::list< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > RefinableSet_rational_boost_list;
+
+        typedef RefinableHashSet_seq<
+            boost::container::vector< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > RefinableSet_boost_vector;
+
+        typedef RefinableHashSet_seq_rational<
+            boost::container::vector< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > RefinableSet_rational_boost_vector;
+
+        typedef RefinableHashSet_seq<
+            boost::container::stable_vector< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > RefinableSet_boost_stable_vector;
+
+        typedef RefinableHashSet_seq_rational<
+            boost::container::stable_vector< key_val >
+            , co::hash< hash2 >
+            , co::less< less >
+        > RefinableSet_rational_boost_stable_vector;
+#endif
+
+        typedef RefinableHashSet_ord<
+            std::set< key_val, less >
+            , co::hash< hash2 >
+        > RefinableSet_set;
+
+        typedef RefinableHashSet_ord_rational<
+            std::set< key_val, less >
+            , co::hash< hash2 >
+        > RefinableSet_rational_set;
+
+        typedef RefinableHashSet_ord<
+            std::unordered_set< key_val, hash, equal_to >
+            , co::hash< hash2 >
+        > RefinableSet_hashset;
+
+        typedef RefinableHashSet_ord_rational<
+            std::unordered_set< key_val, hash, equal_to >
+            , co::hash< hash2 >
+        > RefinableSet_rational_hashset;
+
+#if BOOST_VERSION >= 104800
+        typedef RefinableHashSet_ord<
+            boost::container::set< key_val, less >
+            , co::hash< hash2 >
+        > RefinableSet_boost_set;
+
+        typedef RefinableHashSet_ord_rational<
+            boost::container::set< key_val, less >
+            , co::hash< hash2 >
+        > RefinableSet_rational_boost_set;
+
+        typedef RefinableHashSet_ord<
+            boost::container::flat_set< key_val, less >
+            , co::hash< hash2 >
+        > RefinableSet_boost_flat_set;
+
+        typedef RefinableHashSet_ord_rational<
+            boost::container::flat_set< key_val, less >
+            , co::hash< hash2 >
+        > RefinableSet_rational_boost_flat_set;
+#endif
+
+        typedef RefinableHashSet_ord<
+            boost::unordered_set< key_val, hash, equal_to >
+            , co::hash< hash2 >
+        > RefinableSet_boost_unordered_set;
+
+        typedef RefinableHashSet_ord_rational<
+            boost::unordered_set< key_val, hash, equal_to >
+            , co::hash< hash2 >
+        > RefinableSet_rational_boost_unordered_set;
+    };
+
+} // namespace set
+
+#define CDSSTRESS_StripedSet_case( fixture, test_case, striped_set_type, key_type, value_type ) \
+    TEST_P( fixture, striped_set_type ) \
+    { \
+        typedef set::set_type< tag_StripedSet, key_type, value_type >::striped_set_type set_type; \
+        test_case<set_type>(); \
+    }
+
+#define CDSSTRESS_StripedSet( fixture, test_case, key_type, value_type ) \
+    CDSSTRESS_StripedSet_case( fixture, test_case, StripedSet_list,                 key_type, value_type ) \
+    CDSSTRESS_StripedSet_case( fixture, test_case, StripedSet_rational_list,        key_type, value_type ) \
+    CDSSTRESS_StripedSet_case( fixture, test_case, StripedSet_vector,               key_type, value_type ) \
+    CDSSTRESS_StripedSet_case( fixture, test_case, StripedSet_rational_vector,      key_type, value_type ) \
+    CDSSTRESS_StripedSet_case( fixture, test_case, StripedSet_set,                  key_type, value_type ) \
+    CDSSTRESS_StripedSet_case( fixture, test_case, StripedSet_rational_set,         key_type, value_type ) \
+    CDSSTRESS_StripedSet_case( fixture, test_case, StripedSet_hashset,              key_type, value_type ) \
+    CDSSTRESS_StripedSet_case( fixture, test_case, StripedSet_rational_hashset,     key_type, value_type ) \
+    CDSSTRESS_StripedSet_case( fixture, test_case, RefinableSet_list,               key_type, value_type ) \
+    CDSSTRESS_StripedSet_case( fixture, test_case, RefinableSet_rational_list,      key_type, value_type ) \
+    CDSSTRESS_StripedSet_case( fixture, test_case, RefinableSet_vector,             key_type, value_type ) \
+    CDSSTRESS_StripedSet_case( fixture, test_case, RefinableSet_rational_vector,    key_type, value_type ) \
+    CDSSTRESS_StripedSet_case( fixture, test_case, RefinableSet_set,                key_type, value_type ) \
+    CDSSTRESS_StripedSet_case( fixture, test_case, RefinableSet_rational_set,       key_type, value_type ) \
+    CDSSTRESS_StripedSet_case( fixture, test_case, RefinableSet_hashset,            key_type, value_type ) \
+    CDSSTRESS_StripedSet_case( fixture, test_case, RefinableSet_rational_hashset,   key_type, value_type )
+
+#endif // #ifndef CDSUNIT_SET_TYPE_STRIPED_H
diff --git a/test/stress/stack/CMakeLists.txt b/test/stress/stack/CMakeLists.txt
new file mode 100644 (file)
index 0000000..1d1dc5f
--- /dev/null
@@ -0,0 +1,24 @@
+set(PACKAGE_NAME stress-stack)
+
+set(CDSSTRESS_STACK_SOURCES
+    ../main.cpp
+    intrusive_push_pop.cpp
+    intrusive_push_pop_fcstack.cpp
+    push.cpp
+    push_pop.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_executable(${PACKAGE_NAME} ${CDSSTRESS_STACK_SOURCES} $<TARGET_OBJECTS:${CDSSTRESS_FRAMEWORK_LIBRARY}>)
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/stress/stack/intrusive_push_pop.cpp b/test/stress/stack/intrusive_push_pop.cpp
new file mode 100644 (file)
index 0000000..30af880
--- /dev/null
@@ -0,0 +1,182 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "intrusive_stack_push_pop.h"
+
+namespace cds_test {
+    /*static*/ size_t intrusive_stack_push_pop::s_nPushThreadCount = 4;
+    /*static*/ size_t intrusive_stack_push_pop::s_nPopThreadCount = 4;
+    /*static*/ size_t intrusive_stack_push_pop::s_nStackSize = 10000000;
+    /*static*/ size_t intrusive_stack_push_pop::s_nEliminationSize = 4;
+    /*static*/ bool intrusive_stack_push_pop::s_bFCIterative = false;
+    /*static*/ unsigned int intrusive_stack_push_pop::s_nFCCombinePassCount = 64;
+    /*static*/ unsigned int intrusive_stack_push_pop::s_nFCCompactFactor = 1024;
+
+    /*static*/ atomics::atomic<size_t> intrusive_stack_push_pop::s_nWorkingProducers( 0 );
+
+    /*static*/ void intrusive_stack_push_pop::SetUpTestCase()
+    {
+        cds_test::config const& cfg = get_config( "IntrusiveStack_PushPop" );
+
+        s_nPushThreadCount = cfg.get_size_t( "PushThreadCount", s_nPushThreadCount );
+        s_nPopThreadCount = cfg.get_size_t( "PopThreadCount", s_nPopThreadCount );
+        s_nStackSize = cfg.get_size_t( "StackSize", s_nStackSize );
+        s_nEliminationSize = cfg.get_size_t( "EliminationSize", s_nEliminationSize );
+        s_bFCIterative = cfg.get_bool( "FCIterate", s_bFCIterative );
+        s_nFCCombinePassCount = cfg.get_uint( "FCCombinePassCount", s_nFCCombinePassCount );
+        s_nFCCompactFactor = cfg.get_uint( "FCCompactFactor", s_nFCCompactFactor );
+
+        if ( s_nPushThreadCount == 0 )
+            s_nPushThreadCount = 1;
+        if ( s_nPopThreadCount == 0 )
+            s_nPopThreadCount = 1;
+        if ( s_nEliminationSize == 0 )
+            s_nEliminationSize = 1;
+    }
+} // namespace cds_test
+
+namespace {
+    class intrusive_stack_push_pop : public cds_test::intrusive_stack_push_pop
+    {
+        typedef cds_test::intrusive_stack_push_pop base_class;
+    protected:
+        typedef base_class::value_type<> value_type;
+        typedef base_class::value_type< cds::intrusive::treiber_stack::node< cds::gc::HP >> hp_value_type;
+        typedef base_class::value_type< cds::intrusive::treiber_stack::node< cds::gc::DHP >> dhp_value_type;
+
+        template <typename Stack>
+        void test()
+        {
+            value_array<typename Stack::value_type> arrValue( s_nStackSize );
+            {
+                Stack stack;
+                do_test( stack, arrValue );
+            }
+            Stack::gc::force_dispose();
+        }
+
+        void check_elimination_stat( cds::intrusive::treiber_stack::empty_stat const& )
+        {}
+
+        void check_elimination_stat( cds::intrusive::treiber_stack::stat<> const& s )
+        {
+            EXPECT_EQ( s.m_PushCount.get() + s.m_ActivePushCollision.get() + s.m_PassivePushCollision.get(), s_nStackSize );
+            EXPECT_EQ( s.m_PopCount.get() + s.m_ActivePopCollision.get() + s.m_PassivePopCollision.get(), s_nStackSize );
+            EXPECT_EQ( s.m_PushCount.get(), s.m_PopCount.get() );
+            EXPECT_EQ( s.m_ActivePopCollision.get(), s.m_PassivePushCollision.get() );
+            EXPECT_EQ( s.m_ActivePushCollision.get(), s.m_PassivePopCollision.get() );
+        }
+
+        template <typename Stack>
+        void test_elimination()
+        {
+            value_array<typename Stack::value_type> arrValue( s_nStackSize );
+            {
+                Stack stack( s_nEliminationSize );
+                do_test( stack, arrValue );
+                check_elimination_stat( stack.statistics() );
+            }
+            Stack::gc::force_dispose();
+        }
+
+        template <typename Stack>
+        void test_std()
+        {
+            value_array<typename Stack::value_type> arrValue( s_nStackSize );
+            Stack stack;
+            do_test( stack, arrValue );
+        }
+    };
+
+    // TreiberStack<cds::gc::HP>
+#define CDSSTRESS_Stack_F( test_fixture, stack_impl ) \
+    TEST_F( test_fixture, stack_impl ) \
+    { \
+        typedef typename istack::Types<hp_value_type>::stack_impl stack_type; \
+        test< stack_type >(); \
+    }
+
+    CDSSTRESS_TreiberStack_HP( intrusive_stack_push_pop )
+
+#undef CDSSTRESS_Stack_F
+
+    // TreiberStack<cds::gc::DHP>
+#define CDSSTRESS_Stack_F( test_fixture, stack_impl ) \
+    TEST_F( test_fixture, stack_impl ) \
+    { \
+        typedef typename istack::Types<dhp_value_type>::stack_impl stack_type; \
+        test< stack_type >(); \
+    }
+
+    CDSSTRESS_TreiberStack_DHP( intrusive_stack_push_pop )
+
+#undef CDSSTRESS_Stack_F
+
+    // TreiberStack<cds::gc::HP> + elimination enabled
+#define CDSSTRESS_Stack_F( test_fixture, stack_impl ) \
+    TEST_F( test_fixture, stack_impl ) \
+    { \
+        typedef typename istack::Types<hp_value_type>::stack_impl stack_type; \
+        test_elimination< stack_type >(); \
+    }
+
+    CDSSTRESS_EliminationStack_HP( intrusive_stack_push_pop )
+
+#undef CDSSTRESS_Stack_F
+
+
+    // TreiberStack<cds::gc::DHP> + elimination enabled
+#define CDSSTRESS_Stack_F( test_fixture, stack_impl ) \
+    TEST_F( test_fixture, stack_impl ) \
+    { \
+        typedef typename istack::Types<dhp_value_type>::stack_impl stack_type; \
+        test_elimination< stack_type >(); \
+    }
+
+    CDSSTRESS_EliminationStack_DHP( intrusive_stack_push_pop )
+
+#undef CDSSTRESS_Stack_F
+
+
+    // StdStack
+#define CDSSTRESS_Stack_F( test_fixture, stack_impl ) \
+    TEST_F( test_fixture, stack_impl ) \
+    { \
+        typedef typename istack::Types<value_type>::stack_impl stack_type; \
+        test_std< stack_type >(); \
+    }
+
+    CDSSTRESS_StdStack( intrusive_stack_push_pop )
+
+#undef CDSSTRESS_Stack_F
+
+    //INSTANTIATE_TEST_CASE_P( a, intrusive_stack_push_pop, ::testing::Values(1));
+
+} // namespace
diff --git a/test/stress/stack/intrusive_push_pop_fcstack.cpp b/test/stress/stack/intrusive_push_pop_fcstack.cpp
new file mode 100644 (file)
index 0000000..cc5f5e9
--- /dev/null
@@ -0,0 +1,165 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "intrusive_stack_push_pop.h"
+
+namespace {
+
+    struct fc_param
+    {
+        unsigned int nCompactFactor;
+        unsigned int nCombinePassCount;
+    };
+
+    class intrusive_fcstack_push_pop
+        : public cds_test::intrusive_stack_push_pop
+        , public ::testing::WithParamInterface< fc_param >
+    {
+        typedef cds_test::intrusive_stack_push_pop base_class;
+
+    public:
+
+        static std::vector< fc_param > get_test_parameters()
+        {
+            cds_test::config const& cfg = cds_test::stress_fixture::get_config( "IntrusiveStack_PushPop" );
+            bool bFCIterative = cfg.get_bool( "FCIterate", s_bFCIterative );
+            unsigned int nFCCombinePassCount = cfg.get_uint( "FCCombinePassCount", s_nFCCombinePassCount );
+            unsigned int nFCCompactFactor = cfg.get_uint( "FCCompactFactor", s_nFCCompactFactor );
+
+            std::vector< fc_param > args;
+            if ( bFCIterative ) {
+                for ( unsigned int nCompactFactor = 1; nCompactFactor <= nFCCompactFactor; nCompactFactor *= 2 ) {
+                    for ( unsigned int nPass = 1; nPass <= nFCCombinePassCount; nPass *= 2 )
+                        args.push_back( { nCompactFactor, nPass } );
+                }
+            }
+
+            if ( args.empty() ) {
+                if ( nFCCompactFactor && nFCCombinePassCount )
+                    args.push_back( { nFCCompactFactor, nFCCombinePassCount } );
+                else
+                    args.push_back( { 0, 0 } );
+            }
+
+            return args;
+        }
+
+#ifdef CDSTEST_GTEST_INSTANTIATE_TEST_CASE_P_HAS_4TH_ARG
+        static std::string get_test_parameter_name( testing::TestParamInfo<fc_param> const& p )
+        {
+            if ( p.param.nCombinePassCount ) {
+                std::stringstream ss;
+                ss << "compact_factor" << p.param.nCompactFactor
+                   << "__combine_pass_count" << p.param.nCombinePassCount
+                   ;
+                return ss.str();
+            }
+            else {
+                return std::string( "with_defaults" );
+            }
+        }
+#endif
+
+    protected:
+        typedef base_class::value_type<boost::intrusive::slist_base_hook<>> slist_value_type;
+        typedef base_class::value_type<boost::intrusive::list_base_hook<>>  list_value_type;
+
+        template <typename Stack>
+        void test()
+        {
+            value_array<typename Stack::value_type> arrValue( s_nStackSize );
+            if ( s_bFCIterative ) {
+                fc_param arg = GetParam();
+                if ( arg.nCombinePassCount ) {
+                    propout() 
+                        << std::make_pair( "compact_factor", arg.nCompactFactor )
+                        << std::make_pair( "combine_pass_count", arg.nCombinePassCount );
+                    Stack stack( arg.nCompactFactor, arg.nCombinePassCount );
+                    do_test( stack, arrValue );
+                }
+                else {
+                    Stack stack;
+                    do_test( stack, arrValue );
+                }
+            }
+            else {
+                fc_param arg = GetParam();
+                if ( arg.nCombinePassCount ) {
+                    propout()
+                        << std::make_pair( "compact_factor", arg.nCompactFactor )
+                        << std::make_pair( "combine_pass_count", arg.nCombinePassCount );
+                    Stack stack( arg.nCompactFactor, arg.nCombinePassCount );
+                    do_test( stack, arrValue );
+                }
+                else {
+                    Stack stack;
+                    do_test( stack, arrValue );
+                }
+            }
+        }
+    };
+
+    // FCStack based on boost::intrusive::slist
+#define CDSSTRESS_Stack_F( test_fixture, stack_impl ) \
+    TEST_P( test_fixture, stack_impl ) \
+    { \
+        typedef typename istack::Types<slist_value_type>::stack_impl stack_type; \
+        test< stack_type >(); \
+    }
+
+    CDSSTRESS_FCStack_slist( intrusive_fcstack_push_pop )
+
+#undef CDSSTRESS_Stack_F
+
+    // FCStack based on boost::intrusive::list
+#define CDSSTRESS_Stack_F( test_fixture, stack_impl ) \
+    TEST_P( test_fixture, stack_impl ) \
+    { \
+        typedef typename istack::Types<list_value_type>::stack_impl stack_type; \
+        test< stack_type >(); \
+    }
+
+    CDSSTRESS_FCStack_list( intrusive_fcstack_push_pop )
+
+#undef CDSSTRESS_Stack_F
+
+} // namespace
+
+#ifdef CDSTEST_GTEST_INSTANTIATE_TEST_CASE_P_HAS_4TH_ARG
+INSTANTIATE_TEST_CASE_P( FC,
+    intrusive_fcstack_push_pop,
+    ::testing::ValuesIn( intrusive_fcstack_push_pop::get_test_parameters()),
+    intrusive_fcstack_push_pop::get_test_parameter_name );
+#else
+INSTANTIATE_TEST_CASE_P( FC,
+    intrusive_fcstack_push_pop,
+    ::testing::ValuesIn( intrusive_fcstack_push_pop::get_test_parameters()));
+#endif
+
diff --git a/test/stress/stack/intrusive_stack_push_pop.h b/test/stress/stack/intrusive_stack_push_pop.h
new file mode 100644 (file)
index 0000000..7770d47
--- /dev/null
@@ -0,0 +1,297 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "intrusive_stack_type.h"
+
+namespace cds_test {
+
+    class intrusive_stack_push_pop : public cds_test::stress_fixture
+    {
+    protected:
+        static size_t s_nPushThreadCount;
+        static size_t s_nPopThreadCount;
+        static size_t s_nStackSize;
+        static size_t s_nEliminationSize;
+        static bool s_bFCIterative;
+        static unsigned int s_nFCCombinePassCount;
+        static unsigned int s_nFCCompactFactor;
+
+        static atomics::atomic<size_t>  s_nWorkingProducers;
+
+        static constexpr const size_t c_nValArraySize = 1024;
+        static constexpr const size_t c_nBadConsumer = 0xbadc0ffe;
+
+        enum thread_type
+        {
+            producer_thread,
+            consumer_thread
+        };
+
+        struct empty
+        {};
+
+        template <typename Base = empty >
+        struct value_type : public Base
+        {
+            atomics::atomic<size_t> nNo;
+            size_t      nProducer;
+            size_t      nConsumer;
+
+            value_type() {}
+            value_type( size_t n ) : nNo( n ) {}
+        };
+
+
+        template <class Stack>
+        class Producer : public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+        public:
+            Stack&              m_Stack;
+            size_t              m_nPushError;
+            size_t              m_arrPush[c_nValArraySize];
+
+            // Interval in m_arrValue
+            typename Stack::value_type *       m_pStart;
+            typename Stack::value_type *       m_pEnd;
+
+        public:
+            Producer( cds_test::thread_pool& pool, Stack& s )
+                : base_class( pool, producer_thread )
+                , m_Stack( s )
+                , m_nPushError( 0 )
+                , m_pStart( nullptr )
+                , m_pEnd( nullptr )
+            {}
+
+            Producer( Producer& src )
+                : base_class( src )
+                , m_Stack( src.m_Stack )
+                , m_nPushError( 0 )
+                , m_pStart( nullptr )
+                , m_pEnd( nullptr )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Producer( *this );
+            }
+
+            virtual void test()
+            {
+                m_nPushError = 0;
+                memset( m_arrPush, 0, sizeof( m_arrPush ) );
+
+                size_t i = 0;
+                for ( typename Stack::value_type * p = m_pStart; p < m_pEnd; ++p, ++i ) {
+                    p->nProducer = id();
+                    size_t no;
+                    p->nNo.store( no = i % c_nValArraySize, atomics::memory_order_release );
+                    if ( m_Stack.push( *p ) )
+                        ++m_arrPush[no];
+                    else
+                        ++m_nPushError;
+                }
+
+                s_nWorkingProducers.fetch_sub( 1, atomics::memory_order_release );
+            }
+        };
+
+        template <class Stack>
+        class Consumer : public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+        public:
+            Stack&              m_Stack;
+            size_t              m_nPopCount;
+            size_t              m_nPopEmpty;
+            size_t              m_arrPop[c_nValArraySize];
+            size_t              m_nDirtyPop;
+        public:
+            Consumer( cds_test::thread_pool& pool, Stack& s )
+                : base_class( pool, consumer_thread )
+                , m_Stack( s )
+                , m_nPopCount( 0 )
+                , m_nPopEmpty( 0 )
+                , m_nDirtyPop( 0 )
+            {}
+
+            Consumer( Consumer& src )
+                : base_class( src )
+                , m_Stack( src.m_Stack )
+                , m_nPopCount( 0 )
+                , m_nPopEmpty( 0 )
+                , m_nDirtyPop( 0 )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Consumer( *this );
+            }
+
+            virtual void test()
+            {
+                m_nPopEmpty = 0;
+                m_nPopCount = 0;
+                m_nDirtyPop = 0;
+                memset( m_arrPop, 0, sizeof( m_arrPop ) );
+
+                while ( !(s_nWorkingProducers.load( atomics::memory_order_acquire ) == 0 && m_Stack.empty()) ) {
+                    typename Stack::value_type * p = m_Stack.pop();
+                    if ( p ) {
+                        p->nConsumer = id();
+                        ++m_nPopCount;
+                        size_t no = p->nNo.load( atomics::memory_order_acquire );
+                        if ( no < sizeof( m_arrPop ) / sizeof( m_arrPop[0] ) )
+                            ++m_arrPop[no];
+                        else
+                            ++m_nDirtyPop;
+                    }
+                    else
+                        ++m_nPopEmpty;
+                }
+            }
+        };
+
+        template <typename T>
+        class value_array
+        {
+            std::unique_ptr< T[] > m_pArr;
+
+        public:
+            value_array( size_t nSize )
+                : m_pArr( new T[nSize] )
+            {}
+
+            T * get() const { return m_pArr.get(); }
+        };
+
+    public:
+        static void SetUpTestCase();
+        //static void TearDownTestCase();
+
+    protected:
+        template <class Stack>
+        void analyze( Stack& stack )
+        {
+            cds_test::thread_pool& pool = get_pool();
+
+            size_t nPushError = 0;
+            size_t nPopEmpty = 0;
+            size_t nPopCount = 0;
+            size_t arrVal[c_nValArraySize];
+            memset( arrVal, 0, sizeof( arrVal ) );
+            size_t nDirtyPop = 0;
+
+            for ( size_t threadNo = 0; threadNo < pool.size(); ++threadNo ) {
+                cds_test::thread& thread = pool.get( threadNo );
+                if ( thread.type() == producer_thread ) {
+                    Producer<Stack>& producer = static_cast<Producer<Stack>&>(thread);
+                    nPushError += producer.m_nPushError;
+                    for ( size_t i = 0; i < sizeof( arrVal ) / sizeof( arrVal[0] ); ++i )
+                        arrVal[i] += producer.m_arrPush[i];
+                }
+                else {
+                    ASSERT_TRUE( thread.type() == consumer_thread );
+                    Consumer<Stack>& consumer = static_cast<Consumer<Stack>&>(thread);
+                    nPopEmpty += consumer.m_nPopEmpty;
+                    nPopCount += consumer.m_nPopCount;
+                    nDirtyPop += consumer.m_nDirtyPop;
+                    for ( size_t i = 0; i < sizeof( arrVal ) / sizeof( arrVal[0] ); ++i )
+                        arrVal[i] -= consumer.m_arrPop[i];
+                }
+            }
+
+            EXPECT_EQ( nPopCount, s_nStackSize );
+            EXPECT_EQ( nDirtyPop, 0 );
+            EXPECT_EQ( nPushError, 0 );
+
+            for ( size_t i = 0; i < sizeof( arrVal ) / sizeof( arrVal[0] ); ++i ) {
+                EXPECT_EQ( arrVal[i], 0 ) << "i=" << i;
+            }
+
+            propout() << std::make_pair( "push_count", s_nStackSize )
+                << std::make_pair( "push_error", nPushError )
+                << std::make_pair( "pop_count", nPopCount )
+                << std::make_pair( "pop_empty", nPopEmpty )
+                << std::make_pair( "dirty_pop", nDirtyPop )
+                ;
+
+        }
+
+        template <typename Stack>
+        void do_test( Stack& stack, value_array<typename Stack::value_type>& arrValue )
+        {
+            cds_test::thread_pool& pool = get_pool();
+
+            s_nWorkingProducers.store( s_nPushThreadCount, atomics::memory_order_release );
+            size_t const nPushCount = s_nStackSize / s_nPushThreadCount;
+
+            typename Stack::value_type * pValStart = arrValue.get();
+            typename Stack::value_type * pValEnd = pValStart + s_nStackSize;
+
+            pool.add( new Producer<Stack>( pool, stack ), s_nPushThreadCount );
+            {
+                for ( typename Stack::value_type * it = pValStart; it != pValEnd; ++it )
+                    it->nConsumer = c_nBadConsumer;
+
+                typename Stack::value_type * pStart = pValStart;
+                for ( size_t thread_no = 0; thread_no < pool.size(); ++thread_no ) {
+                    static_cast<Producer<Stack>&>(pool.get( thread_no )).m_pStart = pStart;
+                    pStart += nPushCount;
+                    static_cast<Producer<Stack>&>(pool.get( thread_no )).m_pEnd = pStart;
+                }
+            }
+            pool.add( new Consumer<Stack>( pool, stack ), s_nPopThreadCount );
+
+            propout() << std::make_pair( "producer_thread_count", s_nPushThreadCount )
+                << std::make_pair( "consumer_thread_count", s_nPopThreadCount )
+                << std::make_pair( "push_count", nPushCount * s_nPushThreadCount )
+                ;
+
+            std::chrono::milliseconds duration = pool.run();
+
+            propout() << std::make_pair( "duration", duration );
+
+            s_nStackSize = nPushCount * s_nPushThreadCount;
+
+            {
+                typename Stack::value_type * pEnd = pValStart + s_nStackSize;
+                size_t const nBadConsumer = c_nBadConsumer;
+                for ( typename Stack::value_type * it = pValStart; it != pEnd; ++it )
+                    EXPECT_NE( it->nConsumer, nBadConsumer );
+            }
+
+            analyze( stack );
+
+            propout() << stack.statistics();
+        }
+    };
+} // namespace cds_test
\ No newline at end of file
diff --git a/test/stress/stack/intrusive_stack_type.h b/test/stress/stack/intrusive_stack_type.h
new file mode 100644 (file)
index 0000000..570116d
--- /dev/null
@@ -0,0 +1,499 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSSTRESS_INTRUSIVE_STACK_TYPES_H
+#define CDSSTRESS_INTRUSIVE_STACK_TYPES_H
+
+#include <cds/intrusive/treiber_stack.h>
+#include <cds/intrusive/fcstack.h>
+
+#include <cds/gc/hp.h>
+#include <cds/gc/dhp.h>
+
+#include <mutex>
+#include <cds/sync/spinlock.h>
+#include <stack>
+#include <list>
+#include <vector>
+#include <boost/intrusive/list.hpp>
+
+#include <cds_test/stress_test.h>
+
+
+namespace istack {
+
+    namespace details {
+
+        template < typename T, typename Stack, typename Lock>
+        class StdStack
+        {
+            Stack   m_Impl;
+            mutable Lock    m_Lock;
+            cds::intrusive::treiber_stack::empty_stat m_stat;
+
+            typedef std::unique_lock<Lock>  unique_lock;
+
+        public:
+            typedef T value_type;
+
+            bool push( T& v )
+            {
+                unique_lock l( m_Lock );
+                m_Impl.push( &v );
+                return true;
+            }
+
+            T * pop()
+            {
+                unique_lock l( m_Lock );
+                if ( !m_Impl.empty() ) {
+                     T * v = m_Impl.top();
+                    m_Impl.pop();
+                    return v;
+                }
+                return nullptr;
+            }
+
+            bool empty() const
+            {
+                unique_lock l( m_Lock );
+                return m_Impl.empty();
+            }
+
+            cds::intrusive::treiber_stack::empty_stat const& statistics() const
+            {
+                return m_stat;
+            }
+        };
+    }
+
+    template <typename T>
+    struct Types {
+
+        template <class GC>
+        using base_hook = cds::intrusive::treiber_stack::base_hook < cds::opt::gc< GC > >;
+
+    // TreiberStack
+        typedef cds::intrusive::TreiberStack< cds::gc::HP, T > Treiber_HP;
+        struct traits_Treiber_DHP: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<cds::gc::DHP> >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_DHP >Treiber_DHP;
+
+        template <class GC> struct traits_Treiber_seqcst : public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::memory_model<cds::opt::v::sequential_consistent>
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Treiber_seqcst<cds::gc::HP>  > Treiber_HP_seqcst;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_seqcst<cds::gc::DHP> > Treiber_DHP_seqcst;
+
+        template <class GC> struct traits_Treiber_stat: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Treiber_stat<cds::gc::HP>  > Treiber_HP_stat;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_stat<cds::gc::DHP> > Treiber_DHP_stat;
+
+        template <class GC> struct traits_Treiber_yield: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::back_off<cds::backoff::yield>
+                , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Treiber_yield<cds::gc::HP>  > Treiber_HP_yield;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_yield<cds::gc::DHP> > Treiber_DHP_yield;
+
+        template <class GC> struct traits_Treiber_pause: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::back_off<cds::backoff::pause>
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Treiber_pause<cds::gc::HP>  > Treiber_HP_pause;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_pause<cds::gc::DHP> > Treiber_DHP_pause;
+
+        template <class GC> struct traits_Treiber_exp: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                ,cds::opt::back_off<
+                    cds::backoff::exponential<
+                        cds::backoff::pause,
+                        cds::backoff::yield
+                    >
+                >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Treiber_exp<cds::gc::HP>  > Treiber_HP_exp;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_exp<cds::gc::DHP> > Treiber_DHP_exp;
+
+
+    // Elimination stack
+        template <class GC> struct traits_Elimination_on : public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_on<cds::gc::HP>  > Elimination_HP;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_on<cds::gc::DHP> > Elimination_DHP;
+
+        template <class GC> struct traits_Elimination_seqcst : public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                , cds::opt::memory_model< cds::opt::v::sequential_consistent >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_seqcst<cds::gc::HP>  > Elimination_HP_seqcst;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_seqcst<cds::gc::DHP> > Elimination_DHP_seqcst;
+
+        template <class GC> struct traits_Elimination_2ms: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                , cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_2ms<cds::gc::HP>  > Elimination_HP_2ms;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms<cds::gc::DHP> > Elimination_DHP_2ms;
+
+        template <class GC> struct traits_Elimination_2ms_stat: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                , cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
+                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_2ms_stat<cds::gc::HP>  > Elimination_HP_2ms_stat;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms_stat<cds::gc::DHP> > Elimination_DHP_2ms_stat;
+
+        template <class GC> struct traits_Elimination_5ms: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                , cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_5ms<cds::gc::HP>  > Elimination_HP_5ms;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms<cds::gc::DHP> > Elimination_DHP_5ms;
+
+        template <class GC> struct traits_Elimination_5ms_stat: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                , cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
+                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_5ms_stat<cds::gc::HP>  > Elimination_HP_5ms_stat;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms_stat<cds::gc::DHP> > Elimination_DHP_5ms_stat;
+
+        template <class GC> struct traits_Elimination_10ms: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                , cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_10ms<cds::gc::HP>  > Elimination_HP_10ms;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms<cds::gc::DHP> > Elimination_DHP_10ms;
+
+        template <class GC> struct traits_Elimination_10ms_stat: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                , cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
+                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_10ms_stat<cds::gc::HP>  > Elimination_HP_10ms_stat;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms_stat<cds::gc::DHP> > Elimination_DHP_10ms_stat;
+
+        template <class GC> struct traits_Elimination_dyn: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                , cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_dyn<cds::gc::HP>  > Elimination_HP_dyn;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn<cds::gc::DHP> > Elimination_DHP_dyn;
+
+        template <class GC> struct traits_Elimination_stat: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_stat<cds::gc::HP>  > Elimination_HP_stat;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_stat<cds::gc::DHP> > Elimination_DHP_stat;
+
+        template <class GC> struct traits_Elimination_dyn_stat: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                , cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
+                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_dyn_stat<cds::gc::HP>  > Elimination_HP_dyn_stat;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn_stat<cds::gc::DHP> > Elimination_DHP_dyn_stat;
+
+        template <class GC> struct traits_Elimination_yield: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                , cds::opt::back_off<cds::backoff::yield>
+                , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_yield<cds::gc::HP>  > Elimination_HP_yield;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_yield<cds::gc::DHP> > Elimination_DHP_yield;
+
+        template <class GC> struct traits_Elimination_pause: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                , cds::opt::back_off<cds::backoff::pause>
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_pause<cds::gc::HP>  > Elimination_HP_pause;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_pause<cds::gc::DHP> > Elimination_DHP_pause;
+
+        template <class GC> struct traits_Elimination_exp: public
+            cds::intrusive::treiber_stack::make_traits <
+                cds::intrusive::opt::hook< base_hook<GC> >
+                , cds::opt::enable_elimination<true>
+                ,cds::opt::back_off<
+                    cds::backoff::exponential<
+                        cds::backoff::pause,
+                        cds::backoff::yield
+                    >
+                >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_exp<cds::gc::HP>  > Elimination_HP_exp;
+        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_exp<cds::gc::DHP> > Elimination_DHP_exp;
+
+    // FCStack
+        typedef cds::intrusive::FCStack< T > FCStack_slist;
+
+        struct traits_FCStack_stat:
+            public cds::intrusive::fcstack::make_traits<
+                cds::opt::stat< cds::intrusive::fcstack::stat<> >
+            >::type
+        {};
+        struct traits_FCStack_elimination:
+            public cds::intrusive::fcstack::make_traits<
+            cds::opt::enable_elimination< true >
+            >::type
+        {};
+        struct traits_FCStack_elimination_stat:
+            public cds::intrusive::fcstack::make_traits<
+                cds::opt::stat< cds::intrusive::fcstack::stat<> >,
+                cds::opt::enable_elimination< true >
+            >::type
+        {};
+
+        struct traits_FCStack_mutex_stat:
+            public cds::intrusive::fcstack::make_traits<
+                cds::opt::stat< cds::intrusive::fcstack::stat<> >
+                ,cds::opt::lock_type< std::mutex >
+            >::type
+        {};
+        struct traits_FCStack_mutex_elimination:
+            public cds::intrusive::fcstack::make_traits<
+                cds::opt::enable_elimination< true >
+                ,cds::opt::lock_type< std::mutex >
+            >::type
+        {};
+        struct traits_FCStack_mutex_elimination_stat:
+            public cds::intrusive::fcstack::make_traits<
+                cds::opt::stat< cds::intrusive::fcstack::stat<> >
+                ,cds::opt::enable_elimination< true >
+                ,cds::opt::lock_type< std::mutex >
+            >::type
+        {};
+
+        typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_stat > FCStack_slist_stat;
+        typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_elimination > FCStack_slist_elimination;
+        typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_elimination_stat > FCStack_slist_elimination_stat;
+        typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_mutex_stat > FCStack_slist_mutex_stat;
+        typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_mutex_elimination > FCStack_slist_mutex_elimination;
+        typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_mutex_elimination_stat > FCStack_slist_mutex_elimination_stat;
+        typedef cds::intrusive::FCStack< T, boost::intrusive::list< T > > FCStack_list;
+        typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_stat > FCStack_list_stat;
+        typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_elimination > FCStack_list_elimination;
+        typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_elimination_stat > FCStack_list_elimination_stat;
+        typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_mutex_stat > FCStack_list_mutex_stat;
+        typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_mutex_elimination > FCStack_list_mutex_elimination;
+        typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_mutex_elimination_stat > FCStack_list_mutex_elimination_stat;
+
+
+        // std::stack
+        typedef details::StdStack< T, std::stack< T* >, std::mutex >  StdStack_Deque_Mutex;
+        typedef details::StdStack< T, std::stack< T* >, cds::sync::spin > StdStack_Deque_Spin;
+        typedef details::StdStack< T, std::stack< T*, std::vector<T*> >, std::mutex >  StdStack_Vector_Mutex;
+        typedef details::StdStack< T, std::stack< T*, std::vector<T*> >, cds::sync::spin > StdStack_Vector_Spin;
+        typedef details::StdStack< T, std::stack< T*, std::list<T*> >, std::mutex >  StdStack_List_Mutex;
+        typedef details::StdStack< T, std::stack< T*, std::list<T*> >, cds::sync::spin > StdStack_List_Spin;
+
+    };
+} // namespace istack
+
+namespace cds_test {
+
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::treiber_stack::empty_stat const& )
+    {
+        return o;
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::treiber_stack::stat<> const& s )
+    {
+        return o
+            << CDSSTRESS_STAT_OUT( s, m_PushCount )
+            << CDSSTRESS_STAT_OUT( s, m_PopCount )
+            << CDSSTRESS_STAT_OUT( s, m_PushRace )
+            << CDSSTRESS_STAT_OUT( s, m_PopRace )
+            << CDSSTRESS_STAT_OUT( s, m_ActivePushCollision )
+            << CDSSTRESS_STAT_OUT( s, m_PassivePopCollision )
+            << CDSSTRESS_STAT_OUT( s, m_ActivePopCollision )
+            << CDSSTRESS_STAT_OUT( s, m_PassivePushCollision )
+            << CDSSTRESS_STAT_OUT( s, m_EliminationFailed );
+    }
+
+
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::fcstack::empty_stat const& )
+    {
+        return o;
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::intrusive::fcstack::stat<> const& s )
+    {
+        return o
+            << CDSSTRESS_STAT_OUT( s, m_nPush )
+            << CDSSTRESS_STAT_OUT( s, m_nPop )
+            << CDSSTRESS_STAT_OUT( s, m_nFailedPop )
+            << CDSSTRESS_STAT_OUT( s, m_nCollided )
+            << CDSSTRESS_STAT_OUT_( "combining_factor", s.combining_factor() )
+            << CDSSTRESS_STAT_OUT( s, m_nOperationCount )
+            << CDSSTRESS_STAT_OUT( s, m_nCombiningCount )
+            << CDSSTRESS_STAT_OUT( s, m_nCompactPublicationList )
+            << CDSSTRESS_STAT_OUT( s, m_nDeactivatePubRecord )
+            << CDSSTRESS_STAT_OUT( s, m_nActivatePubRecord )
+            << CDSSTRESS_STAT_OUT( s, m_nPubRecordCreated )
+            << CDSSTRESS_STAT_OUT( s, m_nPubRecordDeteted )
+            << CDSSTRESS_STAT_OUT( s, m_nAcquirePubRecCount )
+            << CDSSTRESS_STAT_OUT( s, m_nReleasePubRecCount );
+    }
+
+} // namespace cds_test
+
+#define CDSSTRESS_TreiberStack_HP( test_fixture ) \
+    CDSSTRESS_Stack_F( test_fixture, Treiber_HP        ) \
+    CDSSTRESS_Stack_F( test_fixture, Treiber_HP_seqcst ) \
+    CDSSTRESS_Stack_F( test_fixture, Treiber_HP_pause  ) \
+    CDSSTRESS_Stack_F( test_fixture, Treiber_HP_exp    ) \
+    CDSSTRESS_Stack_F( test_fixture, Treiber_HP_stat   ) \
+
+#define CDSSTRESS_TreiberStack_DHP( test_fixture ) \
+    CDSSTRESS_Stack_F( test_fixture, Treiber_DHP       ) \
+    CDSSTRESS_Stack_F( test_fixture, Treiber_DHP_pause ) \
+    CDSSTRESS_Stack_F( test_fixture, Treiber_DHP_exp   ) \
+    CDSSTRESS_Stack_F( test_fixture, Treiber_DHP_stat  )
+
+
+#define CDSSTRESS_EliminationStack_HP( test_fixture ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_HP ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_HP_2ms ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_HP_2ms_stat ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_HP_5ms ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_HP_5ms_stat ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_HP_10ms ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_HP_10ms_stat ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_HP_seqcst ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_HP_pause ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_HP_exp ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_HP_stat ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_HP_dyn ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_HP_dyn_stat ) \
+
+
+#define CDSSTRESS_EliminationStack_DHP( test_fixture ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_DHP ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_seqcst ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_2ms ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_2ms_stat ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_5ms ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_5ms_stat ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_10ms ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_10ms_stat ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_pause ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_exp ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_stat ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_dyn ) \
+    CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_dyn_stat )
+
+#define CDSSTRESS_FCStack_slist( test_fixture ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_slist ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_slist_stat ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_slist_elimination ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_slist_elimination_stat ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_slist_mutex_stat ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_slist_mutex_elimination ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_slist_mutex_elimination_stat ) \
+
+#define CDSSTRESS_FCStack_list( test_fixture ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_list ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_list_stat ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_list_elimination ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_list_elimination_stat ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_list_mutex_stat ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_list_mutex_elimination ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_list_mutex_elimination_stat )
+
+#define CDSSTRESS_StdStack( test_fixture ) \
+    CDSSTRESS_Stack_F( test_fixture, StdStack_Deque_Mutex  ) \
+    CDSSTRESS_Stack_F( test_fixture, StdStack_Deque_Spin   ) \
+    CDSSTRESS_Stack_F( test_fixture, StdStack_Vector_Mutex ) \
+    CDSSTRESS_Stack_F( test_fixture, StdStack_Vector_Spin  ) \
+    CDSSTRESS_Stack_F( test_fixture, StdStack_List_Mutex   ) \
+    CDSSTRESS_Stack_F( test_fixture, StdStack_List_Spin    )
+
+#endif // #ifndef CDSSTRESS_INTRUSIVE_STACK_TYPES_H
diff --git a/test/stress/stack/push.cpp b/test/stress/stack/push.cpp
new file mode 100644 (file)
index 0000000..98fc55c
--- /dev/null
@@ -0,0 +1,208 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "stack_type.h"
+
+namespace {
+
+    static size_t s_nThreadCount = 8;
+    static size_t s_nStackSize = 10000000;
+    static size_t s_nEliminationSize = 4;
+
+    class stack_push : public cds_test::stress_fixture
+    {
+    protected:
+
+        struct value_type {
+            size_t      nNo;
+            size_t      nThread;
+
+            value_type() 
+                : nNo( 0 )
+                , nThread( 0 ) 
+            {}
+            value_type( size_t n ) 
+                : nNo( n )
+                , nThread( 0 ) 
+            {}
+        };
+
+        template <class Stack>
+        class Producer: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+
+        public:
+            Producer( cds_test::thread_pool& pool, Stack& stack )
+                : base_class( pool )
+                , m_stack( stack )
+                , m_nStartItem( 0 )
+                , m_nEndItem( 0 )
+                , m_nPushError( 0 )
+            {}
+
+            Producer( Producer& src )
+                : base_class( src )
+                , m_stack( src.m_stack )
+                , m_nStartItem( 0 )
+                , m_nEndItem( 0 )
+                , m_nPushError( 0 )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Producer( *this );
+            }
+
+            virtual void test()
+            {
+                value_type v;
+                v.nThread = id();
+                for ( v.nNo = m_nStartItem; v.nNo < m_nEndItem; ++v.nNo ) {
+                    if ( !m_stack.push( v ) )
+                        ++m_nPushError;
+                }
+            }
+
+        public:
+            Stack&  m_stack;
+            size_t  m_nStartItem;
+            size_t  m_nEndItem;
+            size_t  m_nPushError;
+        };
+
+    protected:
+        static void SetUpTestCase()\r
+        {\r
+            cds_test::config const& cfg = get_config("Stack_Push");\r
+\r
+            s_nThreadCount     = cfg.get_size_t( "ThreadCount",     s_nThreadCount );
+            s_nStackSize       = cfg.get_size_t( "StackSize",       s_nStackSize );
+            s_nEliminationSize = cfg.get_size_t( "EliminationSize", s_nEliminationSize );
+
+            if ( s_nThreadCount == 0 )
+                s_nThreadCount = 1;
+        }\r
+\r
+        //static void TearDownTestCase();\r
+
+        template <typename Stack>
+        void test( Stack& stack )
+        {
+            cds_test::thread_pool& pool = get_pool();
+
+            pool.add( new Producer<Stack>( pool, stack ), s_nThreadCount );
+
+            size_t nStart = 0;
+            size_t nThreadItemCount = s_nStackSize / s_nThreadCount;
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                Producer<Stack>& thread = static_cast<Producer<Stack>&>( pool.get( i ));
+                thread.m_nStartItem = nStart;
+                nStart += nThreadItemCount;
+                thread.m_nEndItem = nStart;
+            }
+
+            propout() << std::make_pair( "thread_count", s_nThreadCount )
+                << std::make_pair( "push_count", s_nStackSize );
+
+            std::chrono::milliseconds duration = pool.run();
+
+            propout() << std::make_pair( "duration", duration );
+
+            analyze( stack );
+
+            propout() << stack.statistics();
+        }
+
+        template <typename Stack>
+        void test_elimination( Stack& stack )
+        {
+            test( stack );
+            check_elimination_stat( stack.statistics() );
+        }
+
+        void check_elimination_stat( cds::container::treiber_stack::empty_stat const& )
+        {}
+
+        void check_elimination_stat( cds::container::treiber_stack::stat<> const& s )
+        {
+            EXPECT_EQ( s.m_PushCount.get(), s.m_PopCount.get() );
+        }
+
+        template <class Stack>
+        void analyze( Stack& testStack )
+        {
+            cds_test::thread_pool& pool = get_pool();
+
+            size_t nThreadItems = s_nStackSize / s_nThreadCount;
+            std::vector<size_t> aThread;
+            aThread.resize( s_nThreadCount );
+
+            for ( size_t i = 0; i < pool.size(); ++i ) {
+                Producer<Stack>& producer = static_cast<Producer<Stack>&>( pool.get( i ));
+                EXPECT_EQ( producer.m_nPushError, 0 ) << "Producer=" << i;
+                aThread[producer.id()] = producer.m_nEndItem - 1;
+            }
+            EXPECT_FALSE( testStack.empty());
+
+            std::unique_ptr< uint8_t[] > uarr( new uint8_t[s_nStackSize] );
+            uint8_t * arr = uarr.get();
+            memset( arr, 0, sizeof( arr[0] ) * s_nStackSize );
+
+            auto time_start = std::chrono::steady_clock::now();
+            size_t nPopped = 0;
+            value_type val;
+            while ( testStack.pop( val )) {
+                nPopped++;
+                ASSERT_LT( val.nNo, s_nStackSize );
+                ++arr[val.nNo];
+                ASSERT_LT( val.nThread, s_nThreadCount );
+                ASSERT_EQ( aThread[val.nThread], val.nNo );
+                aThread[val.nThread]--;
+            }
+            propout() << std::make_pair( "pop_duration", std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() - time_start));
+
+            size_t nTotalItems = nThreadItems * s_nThreadCount;
+            size_t nError = 0;
+            for ( size_t i = 0; i < nTotalItems; ++i ) {
+                EXPECT_EQ( arr[i], 1 ) << "i=" << i;
+                if ( ++nError > 10 )
+                    ASSERT_EQ( arr[i], 1 );
+            }
+        }
+    };
+
+    CDSSTRESS_TreiberStack( stack_push )
+    CDSSTRESS_EliminationStack( stack_push )
+    CDSSTRESS_FCStack( stack_push )
+    CDSSTRESS_FCDeque( stack_push )
+    CDSSTRESS_StdStack( stack_push )
+
+} // namespace
diff --git a/test/stress/stack/push_pop.cpp b/test/stress/stack/push_pop.cpp
new file mode 100644 (file)
index 0000000..c2222f4
--- /dev/null
@@ -0,0 +1,286 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "stack_type.h"
+
+namespace {
+
+    static size_t s_nPushThreadCount = 4;
+    static size_t s_nPopThreadCount = 4;
+    static size_t s_nStackSize = 1000000;
+    static size_t s_nEliminationSize = 4;
+
+    static atomics::atomic<size_t>  s_nWorkingProducers( 0 );
+
+    class stack_push_pop : public cds_test::stress_fixture
+    {
+    protected:
+        enum thread_type
+        {
+            producer_thread,
+            consumer_thread
+        };
+
+        struct value_type {
+            size_t      nNo;
+            size_t      nThread;
+
+            value_type() 
+                : nNo( 0 )
+                , nThread( 0 ) 
+            {}
+            value_type( size_t n ) 
+                : nNo( n )
+                , nThread( 0 ) 
+            {}
+        };
+
+        static size_t const c_nValArraySize = 1024;
+
+        template <class Stack>
+        class Producer: public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+
+        public:
+            Producer( cds_test::thread_pool& pool, Stack& stack, size_t push_count )
+                : base_class( pool, producer_thread )
+                , m_stack( stack )
+                , m_nItemCount( push_count )
+                , m_nPushError( 0 )
+            {}
+
+            Producer( Producer& src )
+                : base_class( src )
+                , m_stack( src.m_stack )
+                , m_nItemCount( src.m_nItemCount )
+                , m_nPushError( 0 )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Producer( *this );
+            }
+
+            virtual void test()
+            {
+                memset( m_arrPush, 0, sizeof( m_arrPush ) );
+
+                value_type v;
+                v.nThread = id();
+                for ( size_t i = 0; i < m_nItemCount; ++i ) {
+                    v.nNo = i % c_nValArraySize;
+                    if ( m_stack.push( v ) )
+                        ++m_arrPush[v.nNo];
+                    else
+                        ++m_nPushError;
+                }
+
+                s_nWorkingProducers.fetch_sub( 1, atomics::memory_order_release );
+            }
+
+        public:
+            Stack&  m_stack;
+            size_t const m_nItemCount;
+            size_t  m_nPushError;
+            size_t  m_arrPush[c_nValArraySize];
+        };
+
+        template <class Stack>
+        class Consumer : public cds_test::thread
+        {
+            typedef cds_test::thread base_class;
+
+        public:
+            Consumer( cds_test::thread_pool& pool, Stack& stack )
+                : base_class( pool, consumer_thread )
+                , m_stack( stack )
+                , m_nPopCount( 0 )
+                , m_nPopEmpty( 0 )
+                , m_nDirtyPop( 0 )
+            {}
+
+            Consumer( Consumer& src )
+                : base_class( src )
+                , m_stack( src.m_stack )
+                , m_nPopCount( 0 )
+                , m_nPopEmpty( 0 )
+                , m_nDirtyPop( 0 )
+            {}
+
+            virtual thread * clone()
+            {
+                return new Consumer( *this );
+            }
+
+            virtual void test()
+            {
+                memset( m_arrPop, 0, sizeof( m_arrPop ) );
+
+                value_type v;
+                while ( !( s_nWorkingProducers.load( atomics::memory_order_acquire ) == 0 && m_stack.empty()) ) {
+                    if ( m_stack.pop( v ) ) {
+                        ++m_nPopCount;
+                        if ( v.nNo < sizeof( m_arrPop ) / sizeof( m_arrPop[0] ) )
+                            ++m_arrPop[v.nNo];
+                        else
+                            ++m_nDirtyPop;
+                    }
+                    else
+                        ++m_nPopEmpty;
+                }
+            }
+
+        public:
+            Stack& m_stack;
+            size_t m_nPopCount;
+            size_t m_nPopEmpty;
+            size_t m_arrPop[c_nValArraySize];
+            size_t m_nDirtyPop;
+        };
+
+    protected:
+        static void SetUpTestCase()\r
+        {\r
+            cds_test::config const& cfg = get_config("Stack_PushPop");\r
+\r
+            s_nPushThreadCount = cfg.get_size_t( "PushThreadCount", s_nPushThreadCount );
+            s_nPopThreadCount  = cfg.get_size_t( "PopThreadCount",  s_nPopThreadCount );
+            s_nStackSize       = cfg.get_size_t( "StackSize",       s_nStackSize );
+            s_nEliminationSize = cfg.get_size_t( "EliminationSize", s_nEliminationSize );
+
+            if ( s_nPushThreadCount == 0 )
+                s_nPushThreadCount = 1;
+            if ( s_nPopThreadCount == 0 )
+                s_nPopThreadCount = 1;
+        }\r
+\r
+        //static void TearDownTestCase();\r
+
+        template <typename Stack>
+        void test( Stack& stack )
+        {
+            cds_test::thread_pool& pool = get_pool();
+            size_t const nPushCount = s_nStackSize / s_nPushThreadCount;
+
+            pool.add( new Producer<Stack>( pool, stack, nPushCount ), s_nPushThreadCount );
+            pool.add( new Consumer<Stack>( pool, stack ), s_nPopThreadCount );
+
+            s_nWorkingProducers.store( s_nPushThreadCount );
+            s_nStackSize = nPushCount * s_nPushThreadCount;
+
+            propout() << std::make_pair( "producer_thread_count", s_nPushThreadCount )
+                << std::make_pair( "consumer_thread_count", s_nPopThreadCount )
+                << std::make_pair( "push_count", s_nStackSize )
+                ;
+
+            std::chrono::milliseconds duration = pool.run();
+
+            propout() << std::make_pair( "duration", duration );
+
+            analyze( stack );
+
+            propout() << stack.statistics();
+        }
+
+        template <typename Stack>
+        void test_elimination( Stack& stack )
+        {
+            test( stack );
+            check_elimination_stat( stack.statistics() );
+        }
+
+        void check_elimination_stat( cds::container::treiber_stack::empty_stat const& )
+        {}
+
+        void check_elimination_stat( cds::container::treiber_stack::stat<> const& s )
+        {
+            EXPECT_EQ( s.m_PushCount.get() + s.m_ActivePushCollision.get() + s.m_PassivePushCollision.get(), s_nStackSize );
+            EXPECT_EQ( s.m_PopCount.get() + s.m_ActivePopCollision.get() + s.m_PassivePopCollision.get(), s_nStackSize );
+            EXPECT_EQ( s.m_PushCount.get(), s.m_PopCount.get() );
+            EXPECT_EQ( s.m_ActivePopCollision.get(), s.m_PassivePushCollision.get() );
+            EXPECT_EQ( s.m_ActivePushCollision.get(), s.m_PassivePopCollision.get() );
+        }
+
+        template< class Stack>
+        void analyze( Stack& stack )
+        {
+            cds_test::thread_pool& pool = get_pool();
+
+            size_t nPushError = 0;
+            size_t nPopEmpty = 0;
+            size_t nPopCount = 0;
+            size_t arrVal[c_nValArraySize];
+            memset( arrVal, 0, sizeof( arrVal ) );
+            size_t nDirtyPop = 0;
+
+            for ( size_t threadNo = 0; threadNo < pool.size(); ++threadNo ) {
+                cds_test::thread& thread = pool.get( threadNo );
+                if ( thread.type() == producer_thread ) {
+                    Producer<Stack>& producer = static_cast<Producer<Stack>&>( thread );
+
+                    nPushError += producer.m_nPushError;
+                    for ( size_t i = 0; i < c_nValArraySize; ++i )
+                        arrVal[i] += producer.m_arrPush[i];
+                }
+                else {
+                    ASSERT_EQ( thread.type(), consumer_thread );
+                    Consumer<Stack>& consumer = static_cast<Consumer<Stack>&>(thread);
+
+                    nPopEmpty += consumer.m_nPopEmpty;
+                    nPopCount += consumer.m_nPopCount;
+                    nDirtyPop += consumer.m_nDirtyPop;
+                    for ( size_t i = 0; i < c_nValArraySize; ++i )
+                        arrVal[i] -= consumer.m_arrPop[i];
+                }
+            }
+
+            EXPECT_EQ( nPopCount, s_nStackSize );
+            EXPECT_EQ( nDirtyPop, 0 );
+
+            for ( size_t i = 0; i < sizeof( arrVal ) / sizeof( arrVal[0] ); ++i ) {
+                EXPECT_EQ( arrVal[i], 0 );
+            }
+
+            propout() << std::make_pair( "push_count", s_nStackSize )
+                      << std::make_pair( "push_error", nPushError )
+                      << std::make_pair( "pop_empty", nPopEmpty )
+                      << std::make_pair( "dirty_pop", nDirtyPop )
+                      ;
+        }
+    };
+
+    CDSSTRESS_TreiberStack( stack_push_pop )
+    CDSSTRESS_EliminationStack( stack_push_pop )
+    CDSSTRESS_FCStack( stack_push_pop )
+    CDSSTRESS_FCDeque( stack_push_pop )
+    CDSSTRESS_StdStack( stack_push_pop )
+
+} // namespace
diff --git a/test/stress/stack/stack_type.h b/test/stress/stack/stack_type.h
new file mode 100644 (file)
index 0000000..43aee44
--- /dev/null
@@ -0,0 +1,592 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSSTRESS_STACK_TYPES_H
+#define CDSSTRESS_STACK_TYPES_H
+
+#include <cds/container/treiber_stack.h>
+#include <cds/container/fcstack.h>
+#include <cds/container/fcdeque.h>
+
+#include <cds/gc/hp.h>
+#include <cds/gc/dhp.h>
+
+#include <mutex>
+#include <cds/sync/spinlock.h>
+#include <stack>
+#include <list>
+#include <vector>
+
+#include <cds_test/stress_test.h>
+
+namespace stack {
+
+    namespace details {
+
+        template <typename T, typename Traits=cds::container::fcdeque::traits>
+        class FCDequeL: public cds::container::FCDeque<T, std::deque<T>, Traits >
+        {
+            typedef cds::container::FCDeque<T, std::deque<T>, Traits > base_class;
+        public:
+            FCDequeL()
+            {}
+
+            FCDequeL(
+                unsigned int nCompactFactor     ///< Flat combining: publication list compacting factor
+                ,unsigned int nCombinePassCount ///< Flat combining: number of combining passes for combiner thread
+                )
+                : base_class( nCompactFactor, nCombinePassCount )
+            {}
+
+            bool push( T const& v )
+            {
+                return base_class::push_front( v );
+            }
+
+            bool pop( T& v )
+            {
+                return base_class::pop_front( v );
+            }
+        };
+
+        template <typename T, typename Traits=cds::container::fcdeque::traits>
+        class FCDequeR: public cds::container::FCDeque<T, std::deque<T>, Traits >
+        {
+            typedef cds::container::FCDeque<T, std::deque<T>, Traits > base_class;
+        public:
+            FCDequeR()
+            {}
+
+            FCDequeR(
+                unsigned int nCompactFactor     ///< Flat combining: publication list compacting factor
+                ,unsigned int nCombinePassCount ///< Flat combining: number of combining passes for combiner thread
+                )
+                : base_class( nCompactFactor, nCombinePassCount )
+            {}
+
+            bool push( T const& v )
+            {
+                return base_class::push_back( v );
+            }
+
+            bool pop( T& v )
+            {
+                return base_class::pop_back( v );
+            }
+        };
+
+        template < typename T, typename Stack, typename Lock>
+        class StdStack
+        {
+            Stack   m_Impl;
+            mutable Lock    m_Lock;
+            cds::container::treiber_stack::empty_stat m_stat;
+
+            typedef std::unique_lock<Lock>  unique_lock;
+
+        public:
+            bool push( T const& v )
+            {
+                unique_lock l( m_Lock );
+                m_Impl.push( v );
+                return true;
+            }
+
+            bool pop( T& v )
+            {
+                unique_lock l( m_Lock );
+                if ( !m_Impl.empty() ) {
+                    v = m_Impl.top();
+                    m_Impl.pop();
+                    return true;
+                }
+                return false;
+            }
+
+            bool empty() const
+            {
+                unique_lock l( m_Lock );
+                return m_Impl.empty();
+            }
+
+            cds::container::treiber_stack::empty_stat const& statistics() const
+            {
+                return m_stat;
+            }
+        };
+    }
+
+    template <typename T>
+    struct Types {
+
+    // TreiberStack
+        typedef cds::container::TreiberStack< cds::gc::HP,  T > Treiber_HP;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T > Treiber_DHP;
+
+        struct traits_Treiber_seqcst: public
+            cds::container::treiber_stack::make_traits<
+                cds::opt::memory_model<cds::opt::v::sequential_consistent>
+            >::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Treiber_seqcst > Treiber_HP_seqcst;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_seqcst > Treiber_DHP_seqcst;
+
+        struct traits_Treiber_stat: public
+            cds::container::treiber_stack::make_traits<
+                cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+            >::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Treiber_stat > Treiber_HP_stat;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_stat > Treiber_DHP_stat;
+
+        struct traits_Treiber_yield: public
+            cds::container::treiber_stack::make_traits<
+                cds::opt::back_off<cds::backoff::yield>
+                , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+            >::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Treiber_yield > Treiber_HP_yield;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_yield > Treiber_DHP_yield;
+
+        struct traits_Treiber_pause: public
+            cds::container::treiber_stack::make_traits<
+                cds::opt::back_off<cds::backoff::pause>
+            >::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Treiber_pause > Treiber_HP_pause;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_pause > Treiber_DHP_pause;
+
+        struct traits_Treiber_exp: public
+            cds::container::treiber_stack::make_traits<
+                cds::opt::back_off<
+                    cds::backoff::exponential<
+                        cds::backoff::pause,
+                        cds::backoff::yield
+                    >
+                >
+            >::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Treiber_exp > Treiber_HP_exp;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_exp > Treiber_DHP_exp;
+
+
+    // Elimination stack
+        struct traits_Elimination_on : public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_on > Elimination_HP;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_on > Elimination_DHP;
+
+        struct traits_Elimination_stat : public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_stat > Elimination_HP_stat;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_stat > Elimination_DHP_stat;
+
+        struct traits_Elimination_2ms: public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_2ms >  Elimination_HP_2ms;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms >  Elimination_DHP_2ms;
+
+        struct traits_Elimination_2ms_stat : public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                , cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
+                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_2ms_stat > Elimination_HP_2ms_stat;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms_stat > Elimination_DHP_2ms_stat;
+
+        struct traits_Elimination_5ms : public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                , cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_5ms > Elimination_HP_5ms;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms > Elimination_DHP_5ms;
+
+        struct traits_Elimination_5ms_stat : public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                , cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
+                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_5ms_stat > Elimination_HP_5ms_stat;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms_stat > Elimination_DHP_5ms_stat;
+
+        struct traits_Elimination_10ms : public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                , cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_10ms > Elimination_HP_10ms;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms > Elimination_DHP_10ms;
+
+        struct traits_Elimination_10ms_stat : public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                , cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
+                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_10ms_stat > Elimination_HP_10ms_stat;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms_stat > Elimination_DHP_10ms_stat;
+
+        struct traits_Elimination_dyn: public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                , cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_dyn > Elimination_HP_dyn;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn > Elimination_DHP_dyn;
+
+        struct traits_Elimination_seqcst: public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                , cds::opt::memory_model<cds::opt::v::sequential_consistent>
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_seqcst > Elimination_HP_seqcst;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_seqcst > Elimination_DHP_seqcst;
+
+        struct traits_Elimination_dyn_stat: public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
+                , cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_dyn_stat > Elimination_HP_dyn_stat;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn_stat > Elimination_DHP_dyn_stat;
+
+        struct traits_Elimination_yield: public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                , cds::opt::back_off<cds::backoff::yield>
+                , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_yield > Elimination_HP_yield;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_yield > Elimination_DHP_yield;
+
+        struct traits_Elimination_pause: public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                , cds::opt::back_off<cds::backoff::pause>
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_pause > Elimination_HP_pause;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_pause > Elimination_DHP_pause;
+
+        struct traits_Elimination_exp: public
+            cds::container::treiber_stack::make_traits <
+                cds::opt::enable_elimination<true>
+                ,cds::opt::back_off<
+                    cds::backoff::exponential<
+                        cds::backoff::pause,
+                        cds::backoff::yield
+                    >
+                >
+            > ::type
+        {};
+        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_exp > Elimination_HP_exp;
+        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_exp > Elimination_DHP_exp;
+
+
+    // FCStack
+        typedef cds::container::FCStack< T > FCStack_deque;
+
+        struct traits_FCStack_stat:
+            public cds::container::fcstack::make_traits<
+                cds::opt::stat< cds::container::fcstack::stat<> >
+            >::type
+        {};
+        struct traits_FCStack_elimination:
+            public cds::container::fcstack::make_traits<
+            cds::opt::enable_elimination< true >
+            >::type
+        {};
+        struct traits_FCStack_elimination_stat:
+            public cds::container::fcstack::make_traits<
+                cds::opt::stat< cds::container::fcstack::stat<> >,
+                cds::opt::enable_elimination< true >
+            >::type
+        {};
+        struct traits_FCStack_mutex:
+            public cds::container::fcstack::make_traits<
+                cds::opt::lock_type< std::mutex >
+            >::type
+        {};
+
+        typedef cds::container::FCStack< T, std::stack<T, std::deque<T> >, traits_FCStack_mutex > FCStack_deque_mutex;
+        typedef cds::container::FCStack< T, std::stack<T, std::deque<T> >, traits_FCStack_stat > FCStack_deque_stat;
+        typedef cds::container::FCStack< T, std::stack<T, std::deque<T> >, traits_FCStack_elimination > FCStack_deque_elimination;
+        typedef cds::container::FCStack< T, std::stack<T, std::deque<T> >, traits_FCStack_elimination_stat > FCStack_deque_elimination_stat;
+        typedef cds::container::FCStack< T, std::stack<T, std::vector<T> > > FCStack_vector;
+        typedef cds::container::FCStack< T, std::stack<T, std::vector<T> >, traits_FCStack_mutex > FCStack_vector_mutex;
+        typedef cds::container::FCStack< T, std::stack<T, std::vector<T> >, traits_FCStack_stat > FCStack_vector_stat;
+        typedef cds::container::FCStack< T, std::stack<T, std::vector<T> >, traits_FCStack_elimination > FCStack_vector_elimination;
+        typedef cds::container::FCStack< T, std::stack<T, std::vector<T> >, traits_FCStack_elimination_stat > FCStack_vector_elimination_stat;
+        typedef cds::container::FCStack< T, std::stack<T, std::list<T> > > FCStack_list;
+        typedef cds::container::FCStack< T, std::stack<T, std::list<T> >, traits_FCStack_mutex > FCStack_list_mutex;
+        typedef cds::container::FCStack< T, std::stack<T, std::list<T> >, traits_FCStack_stat > FCStack_list_stat;
+        typedef cds::container::FCStack< T, std::stack<T, std::list<T> >, traits_FCStack_elimination > FCStack_list_elimination;
+        typedef cds::container::FCStack< T, std::stack<T, std::list<T> >, traits_FCStack_elimination_stat > FCStack_list_elimination_stat;
+
+   // FCDeque
+        struct traits_FCDeque_stat:
+            public cds::container::fcdeque::make_traits<
+                cds::opt::stat< cds::container::fcdeque::stat<> >
+            >::type
+        {};
+        struct traits_FCDeque_elimination:
+            public cds::container::fcdeque::make_traits<
+                cds::opt::enable_elimination< true >
+            >::type
+        {};
+        struct traits_FCDeque_elimination_stat:
+            public cds::container::fcdeque::make_traits<
+                cds::opt::stat< cds::container::fcdeque::stat<> >,
+                cds::opt::enable_elimination< true >
+            >::type
+        {};
+        struct traits_FCDeque_mutex:
+            public cds::container::fcdeque::make_traits<
+                cds::opt::lock_type< std::mutex >
+            >::type
+        {};
+
+
+        typedef details::FCDequeL< T > FCDequeL_default;
+        typedef details::FCDequeL< T, traits_FCDeque_mutex > FCDequeL_mutex;
+        typedef details::FCDequeL< T, traits_FCDeque_stat > FCDequeL_stat;
+        typedef details::FCDequeL< T, traits_FCDeque_elimination > FCDequeL_elimination;
+        typedef details::FCDequeL< T, traits_FCDeque_elimination_stat > FCDequeL_elimination_stat;
+
+        typedef details::FCDequeR< T > FCDequeR_default;
+        typedef details::FCDequeR< T, traits_FCDeque_mutex > FCDequeR_mutex;
+        typedef details::FCDequeR< T, traits_FCDeque_stat > FCDequeR_stat;
+        typedef details::FCDequeR< T, traits_FCDeque_elimination > FCDequeR_elimination;
+        typedef details::FCDequeR< T, traits_FCDeque_elimination_stat > FCDequeR_elimination_stat;
+
+
+        // std::stack
+        typedef details::StdStack< T, std::stack< T >, std::mutex >  StdStack_Deque_Mutex;
+        typedef details::StdStack< T, std::stack< T >, cds::sync::spin > StdStack_Deque_Spin;
+        typedef details::StdStack< T, std::stack< T, std::vector<T> >, std::mutex >  StdStack_Vector_Mutex;
+        typedef details::StdStack< T, std::stack< T, std::vector<T> >, cds::sync::spin > StdStack_Vector_Spin;
+        typedef details::StdStack< T, std::stack< T, std::list<T> >, std::mutex >  StdStack_List_Mutex;
+        typedef details::StdStack< T, std::stack< T, std::list<T> >, cds::sync::spin > StdStack_List_Spin;
+
+    };
+} // namespace stack
+
+namespace cds_test {
+    static inline property_stream& operator <<( property_stream& o, cds::container::treiber_stack::empty_stat const& )
+    {
+        return o;
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::container::treiber_stack::stat<> const& s )
+    {
+        return o
+            << CDSSTRESS_STAT_OUT( s, m_PushCount )
+            << CDSSTRESS_STAT_OUT( s, m_PopCount  )
+            << CDSSTRESS_STAT_OUT( s, m_PushRace  )
+            << CDSSTRESS_STAT_OUT( s, m_PopRace   )
+            << CDSSTRESS_STAT_OUT( s, m_ActivePushCollision  )
+            << CDSSTRESS_STAT_OUT( s, m_PassivePopCollision  )
+            << CDSSTRESS_STAT_OUT( s, m_ActivePopCollision   )
+            << CDSSTRESS_STAT_OUT( s, m_PassivePushCollision )
+            << CDSSTRESS_STAT_OUT( s, m_EliminationFailed    );
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::container::fcstack::empty_stat const& /*s*/ )
+    {
+        return o;
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::container::fcstack::stat<> const& s )
+    {
+        return o
+            << CDSSTRESS_STAT_OUT( s, m_nPush )
+            << CDSSTRESS_STAT_OUT( s, m_nPushMove )
+            << CDSSTRESS_STAT_OUT( s, m_nPop )
+            << CDSSTRESS_STAT_OUT( s, m_nFailedPop )
+            << CDSSTRESS_STAT_OUT( s, m_nCollided )
+            << CDSSTRESS_STAT_OUT_( "combining_factor", s.combining_factor())
+            << CDSSTRESS_STAT_OUT( s, m_nOperationCount )
+            << CDSSTRESS_STAT_OUT( s, m_nCombiningCount )
+            << CDSSTRESS_STAT_OUT( s, m_nCompactPublicationList )
+            << CDSSTRESS_STAT_OUT( s, m_nDeactivatePubRecord )
+            << CDSSTRESS_STAT_OUT( s, m_nActivatePubRecord )
+            << CDSSTRESS_STAT_OUT( s, m_nPubRecordCreated )
+            << CDSSTRESS_STAT_OUT( s, m_nPubRecordDeteted )
+            << CDSSTRESS_STAT_OUT( s, m_nAcquirePubRecCount )
+            << CDSSTRESS_STAT_OUT( s, m_nReleasePubRecCount );
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::container::fcdeque::empty_stat const& /*s*/ )
+    {
+        return o;
+    }
+
+    static inline property_stream& operator <<( property_stream& o, cds::container::fcdeque::stat<> const& s )
+    {
+        return o
+            << CDSSTRESS_STAT_OUT( s, m_nPushFront )
+            << CDSSTRESS_STAT_OUT( s, m_nPushFrontMove )
+            << CDSSTRESS_STAT_OUT( s, m_nPushBack )
+            << CDSSTRESS_STAT_OUT( s, m_nPushBackMove )
+            << CDSSTRESS_STAT_OUT( s, m_nPopFront )
+            << CDSSTRESS_STAT_OUT( s, m_nFailedPopFront )
+            << CDSSTRESS_STAT_OUT( s, m_nPopBack )
+            << CDSSTRESS_STAT_OUT( s, m_nFailedPopBack )
+            << CDSSTRESS_STAT_OUT( s, m_nCollided )
+            << CDSSTRESS_STAT_OUT_( "combining_factor", s.combining_factor() )
+            << CDSSTRESS_STAT_OUT( s, m_nOperationCount )
+            << CDSSTRESS_STAT_OUT( s, m_nCombiningCount )
+            << CDSSTRESS_STAT_OUT( s, m_nCompactPublicationList )
+            << CDSSTRESS_STAT_OUT( s, m_nDeactivatePubRecord )
+            << CDSSTRESS_STAT_OUT( s, m_nActivatePubRecord )
+            << CDSSTRESS_STAT_OUT( s, m_nPubRecordCreated )
+            << CDSSTRESS_STAT_OUT( s, m_nPubRecordDeteted )
+            << CDSSTRESS_STAT_OUT( s, m_nAcquirePubRecCount )
+            << CDSSTRESS_STAT_OUT( s, m_nReleasePubRecCount );
+    }
+} // namespace cds_test
+
+#define CDSSTRESS_Stack_F( test_fixture, type_name ) \
+    TEST_F( test_fixture, type_name ) \
+    { \
+        typedef stack::Types< value_type >::type_name stack_type; \
+        stack_type stack; \
+        test( stack ); \
+    }
+
+#define CDSSTRESS_EliminationStack_F( test_fixture, type_name ) \
+    TEST_F( test_fixture, type_name ) \
+    { \
+        typedef stack::Types< value_type >::type_name stack_type; \
+        stack_type stack( s_nEliminationSize ); \
+        test_elimination( stack ); \
+    }
+
+#define CDSSTRESS_TreiberStack( test_fixture ) \
+    CDSSTRESS_Stack_F( test_fixture, Treiber_HP )        \
+    CDSSTRESS_Stack_F( test_fixture, Treiber_HP_seqcst ) \
+    CDSSTRESS_Stack_F( test_fixture, Treiber_HP_pause )  \
+    CDSSTRESS_Stack_F( test_fixture, Treiber_HP_exp )    \
+    CDSSTRESS_Stack_F( test_fixture, Treiber_HP_stat   ) \
+    CDSSTRESS_Stack_F( test_fixture, Treiber_DHP       ) \
+    CDSSTRESS_Stack_F( test_fixture, Treiber_DHP_pause ) \
+    CDSSTRESS_Stack_F( test_fixture, Treiber_DHP_exp   ) \
+    CDSSTRESS_Stack_F( test_fixture, Treiber_DHP_stat  ) \
+
+#define CDSSTRESS_EliminationStack( test_fixture ) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_HP        ) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_HP_2ms    ) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_HP_2ms_stat) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_HP_5ms    ) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_HP_5ms_stat) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_HP_10ms    ) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_HP_10ms_stat) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_HP_seqcst ) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_HP_pause  ) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_HP_exp    ) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_HP_stat   ) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_HP_dyn    ) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_HP_dyn_stat) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_DHP       ) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_DHP_2ms    ) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_DHP_2ms_stat) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_DHP_5ms    ) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_DHP_5ms_stat) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_DHP_10ms    ) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_DHP_10ms_stat) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_DHP_pause ) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_DHP_exp   ) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_DHP_stat  ) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_DHP_dyn   ) \
+    CDSSTRESS_EliminationStack_F( test_fixture, Elimination_DHP_dyn_stat)
+
+#define CDSSTRESS_FCStack( test_fixture ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_deque ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_deque_mutex ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_deque_stat ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_deque_elimination ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_deque_elimination_stat ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_vector ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_vector_mutex ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_vector_stat ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_vector_elimination ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_vector_elimination_stat ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_list ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_list_mutex ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_list_stat ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_list_elimination ) \
+    CDSSTRESS_Stack_F( test_fixture, FCStack_list_elimination_stat )
+
+#define CDSSTRESS_FCDeque( test_fixture ) \
+    CDSSTRESS_Stack_F( test_fixture, FCDequeL_default ) \
+    CDSSTRESS_Stack_F( test_fixture, FCDequeL_mutex ) \
+    CDSSTRESS_Stack_F( test_fixture, FCDequeL_stat ) \
+    CDSSTRESS_Stack_F( test_fixture, FCDequeL_elimination ) \
+    CDSSTRESS_Stack_F( test_fixture, FCDequeL_elimination_stat ) \
+    CDSSTRESS_Stack_F( test_fixture, FCDequeR_default ) \
+    CDSSTRESS_Stack_F( test_fixture, FCDequeR_mutex ) \
+    CDSSTRESS_Stack_F( test_fixture, FCDequeR_stat ) \
+    CDSSTRESS_Stack_F( test_fixture, FCDequeR_elimination ) \
+    CDSSTRESS_Stack_F( test_fixture, FCDequeR_elimination_stat )
+
+#define CDSSTRESS_StdStack( test_fixture ) \
+    CDSSTRESS_Stack_F( test_fixture, StdStack_Deque_Mutex  ) \
+    CDSSTRESS_Stack_F( test_fixture, StdStack_Deque_Spin   ) \
+    CDSSTRESS_Stack_F( test_fixture, StdStack_Vector_Mutex ) \
+    CDSSTRESS_Stack_F( test_fixture, StdStack_Vector_Spin  ) \
+    CDSSTRESS_Stack_F( test_fixture, StdStack_List_Mutex   ) \
+    CDSSTRESS_Stack_F( test_fixture, StdStack_List_Spin    )
+
+
+#endif // #ifndef CDSSTRESS_STACK_TYPES_H
diff --git a/test/unit/CMakeLists.txt b/test/unit/CMakeLists.txt
new file mode 100644 (file)
index 0000000..46432de
--- /dev/null
@@ -0,0 +1,27 @@
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/deque)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/list)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/map)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/misc)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/pqueue)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/queue)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/intrusive-set)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/set)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/striped-map)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/striped-set)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/stack)
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/tree)
+
+add_custom_target(unit-all
+    DEPENDS 
+        unit-deque
+        unit-list
+        unit-map
+        unit-misc
+        unit-pqueue
+        unit-queue
+        unit-intrusive-set
+        unit-set
+        unit-striped-set
+        unit-stack
+        unit-tree
+)
diff --git a/test/unit/deque/CMakeLists.txt b/test/unit/deque/CMakeLists.txt
new file mode 100644 (file)
index 0000000..462d6c6
--- /dev/null
@@ -0,0 +1,21 @@
+set(PACKAGE_NAME unit-deque)
+
+set(CDSGTEST_DEQUE_SOURCES
+    ../main.cpp
+    fcdeque.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_executable(${PACKAGE_NAME} ${CDSGTEST_DEQUE_SOURCES})
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/unit/deque/fcdeque.cpp b/test/unit/deque/fcdeque.cpp
new file mode 100644 (file)
index 0000000..3c6ad1a
--- /dev/null
@@ -0,0 +1,201 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include <gtest/gtest.h>
+#include <cds/container/fcdeque.h>
+#include <boost/container/deque.hpp>
+
+namespace {
+
+    class FCDeque: public ::testing::Test
+    {
+    protected:
+        template <class Deque>
+        void test( Deque& dq )
+        {
+            size_t const c_nSize = 100;
+
+            // push_front/pop_front
+            for ( int i = 0; i < static_cast<int>( c_nSize ); ++i )
+                EXPECT_TRUE( dq.push_front( i ) );
+            EXPECT_EQ( dq.size(), c_nSize );
+
+            size_t nCount = 0;
+            int val;
+            while ( !dq.empty() ) {
+                EXPECT_TRUE( dq.pop_front( val ) );
+                ++nCount;
+                EXPECT_EQ( static_cast<int>(c_nSize - nCount), val );
+            }
+            EXPECT_EQ( nCount, c_nSize );
+
+            // push_back/pop_back
+            for ( int i = 0; i < static_cast<int>( c_nSize ); ++i )
+                EXPECT_TRUE( dq.push_back( i ) );
+            EXPECT_EQ( dq.size(), c_nSize );
+
+            nCount = 0;
+            while ( !dq.empty() ) {
+                EXPECT_TRUE( dq.pop_back( val ) );
+                ++nCount;
+                EXPECT_EQ( static_cast<int>(c_nSize - nCount), val );
+            }
+            EXPECT_EQ( nCount, c_nSize );
+
+            // push_back/pop_front
+            for ( int i = 0; i < static_cast<int>( c_nSize ); ++i )
+                EXPECT_TRUE( dq.push_back( i ) );
+            EXPECT_EQ( dq.size(), c_nSize );
+
+            nCount = 0;
+            while ( !dq.empty() ) {
+                EXPECT_TRUE( dq.pop_front( val ) );
+                EXPECT_EQ( static_cast<int>( nCount ), val );
+                ++nCount;
+            }
+            EXPECT_EQ( nCount, c_nSize );
+
+            // push_front/pop_back
+            for ( int i = 0; i < static_cast<int>( c_nSize ); ++i )
+                EXPECT_TRUE( dq.push_front( i ) );
+            EXPECT_EQ( dq.size(), c_nSize );
+
+            nCount = 0;
+            while ( !dq.empty() ) {
+                EXPECT_TRUE( dq.pop_back( val ) );
+                EXPECT_EQ( static_cast<int>( nCount ), val );
+                ++nCount;
+            }
+            EXPECT_EQ( nCount, c_nSize );
+
+            // clear
+            for ( int i = 0; i < static_cast<int>( c_nSize ); ++i )
+                EXPECT_TRUE( dq.push_front( i ) );
+            EXPECT_EQ( dq.size(), c_nSize );
+
+            EXPECT_FALSE( dq.empty() );
+            dq.clear();
+            EXPECT_TRUE( dq.empty() );
+        }
+    };
+
+    TEST_F( FCDeque, std )
+    {
+        typedef cds::container::FCDeque<int> deque_type;
+
+        deque_type dq;
+        test( dq );
+    }
+
+    TEST_F( FCDeque, std_elimination )
+    {
+        typedef cds::container::FCDeque<int, std::deque<int>,
+            cds::container::fcdeque::make_traits<
+                cds::opt::enable_elimination< true >
+            >::type
+        > deque_type;
+
+        deque_type dq;
+        test( dq );
+    }
+
+    TEST_F( FCDeque, std_statistics )
+    {
+        typedef cds::container::FCDeque<int, std::deque<int>,
+            cds::container::fcdeque::make_traits<
+                cds::opt::stat< cds::container::fcdeque::stat<> >
+            >::type
+        > deque_type;
+
+        deque_type dq;
+        test( dq );
+    }
+
+    TEST_F( FCDeque, std_mutex )
+    {
+        struct deque_traits : public
+            cds::container::fcdeque::make_traits<
+                cds::opt::enable_elimination< true >
+            >::type
+        {
+            typedef std::mutex lock_type;
+        };
+        typedef cds::container::FCDeque<int, std::deque<int>, deque_traits > deque_type;
+
+        deque_type dq;
+        test( dq );
+    }
+
+    TEST_F( FCDeque, boost )
+    {
+        typedef cds::container::FCDeque<int, boost::container::deque<int> > deque_type;
+
+        deque_type dq;
+        test( dq );
+    }
+
+    TEST_F( FCDeque, boost_elimination )
+    {
+        typedef cds::container::FCDeque<int, boost::container::deque<int>,
+            cds::container::fcdeque::make_traits<
+                cds::opt::enable_elimination< true >
+            >::type
+        > deque_type;
+
+        deque_type dq;
+        test( dq );
+    }
+
+    TEST_F( FCDeque, boost_statistics )
+    {
+        typedef cds::container::FCDeque<int, boost::container::deque<int>,
+            cds::container::fcdeque::make_traits<
+                cds::opt::stat< cds::container::fcdeque::stat<> >
+            >::type
+        > deque_type;
+
+        deque_type dq;
+        test( dq );
+    }
+
+    TEST_F( FCDeque, boost_mutex )
+    {
+        typedef cds::container::FCDeque<int, boost::container::deque<int>,
+            cds::container::fcdeque::make_traits<
+                cds::opt::enable_elimination< true >
+                ,cds::opt::lock_type< std::mutex >
+            >::type
+        > deque_type;
+
+        deque_type dq;
+        test( dq );
+    }
+
+} // namespace
diff --git a/test/unit/intrusive-set/CMakeLists.txt b/test/unit/intrusive-set/CMakeLists.txt
new file mode 100644 (file)
index 0000000..a05cce6
--- /dev/null
@@ -0,0 +1,69 @@
+set(PACKAGE_NAME unit-intrusive-set)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof")
+
+set(CDSGTEST_SET_SOURCES
+    ../main.cpp
+    intrusive_feldman_hashset_hp.cpp
+    intrusive_feldman_hashset_dhp.cpp
+    intrusive_feldman_hashset_rcu_gpb.cpp
+    intrusive_feldman_hashset_rcu_gpi.cpp
+    intrusive_feldman_hashset_rcu_gpt.cpp
+    intrusive_feldman_hashset_rcu_shb.cpp
+    intrusive_feldman_hashset_rcu_sht.cpp
+    intrusive_michael_lazy_hp.cpp
+    intrusive_michael_lazy_dhp.cpp
+    intrusive_michael_lazy_nogc.cpp
+    intrusive_michael_lazy_rcu_gpb.cpp
+    intrusive_michael_lazy_rcu_gpi.cpp
+    intrusive_michael_lazy_rcu_gpt.cpp
+    intrusive_michael_lazy_rcu_shb.cpp
+    intrusive_michael_lazy_rcu_sht.cpp
+    intrusive_michael_michael_hp.cpp
+    intrusive_michael_michael_dhp.cpp
+    intrusive_michael_michael_nogc.cpp
+    intrusive_michael_michael_rcu_gpb.cpp
+    intrusive_michael_michael_rcu_gpi.cpp
+    intrusive_michael_michael_rcu_gpt.cpp
+    intrusive_michael_michael_rcu_shb.cpp
+    intrusive_michael_michael_rcu_sht.cpp
+    intrusive_skiplist_hp.cpp
+    intrusive_skiplist_dhp.cpp
+    intrusive_skiplist_nogc.cpp
+    intrusive_skiplist_rcu_gpb.cpp
+    intrusive_skiplist_rcu_gpi.cpp
+    intrusive_skiplist_rcu_gpt.cpp
+    intrusive_skiplist_rcu_shb.cpp
+    intrusive_skiplist_rcu_sht.cpp
+    intrusive_split_lazy_hp.cpp
+    intrusive_split_lazy_dhp.cpp
+    intrusive_split_lazy_nogc.cpp
+    intrusive_split_lazy_rcu_gpb.cpp
+    intrusive_split_lazy_rcu_gpi.cpp
+    intrusive_split_lazy_rcu_gpt.cpp
+    intrusive_split_lazy_rcu_shb.cpp
+    intrusive_split_lazy_rcu_sht.cpp
+    intrusive_split_michael_hp.cpp
+    intrusive_split_michael_dhp.cpp
+    intrusive_split_michael_nogc.cpp
+    intrusive_split_michael_rcu_gpb.cpp
+    intrusive_split_michael_rcu_gpi.cpp
+    intrusive_split_michael_rcu_gpt.cpp
+    intrusive_split_michael_rcu_shb.cpp
+    intrusive_split_michael_rcu_sht.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_executable(${PACKAGE_NAME} ${CDSGTEST_SET_SOURCES})
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/unit/intrusive-set/intrusive_feldman_hashset_dhp.cpp b/test/unit/intrusive-set/intrusive_feldman_hashset_dhp.cpp
new file mode 100644 (file)
index 0000000..c2e6a6b
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_feldman_hashset_hp.h"
+
+#include <cds/intrusive/feldman_hashset_dhp.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::DHP gc_type;
+
+    class IntrusiveFeldmanHashSet_DHP : public cds_test::intrusive_feldman_hashset_hp
+    {
+    protected:
+        typedef cds_test::intrusive_feldman_hashset_hp base_class;
+
+    protected:
+
+        void SetUp()
+        {
+            typedef ci::FeldmanHashSet< gc_type, int_item, 
+                typename ci::feldman_hashset::make_traits<
+                    ci::feldman_hashset::hash_accessor< hash_accessor >
+                    ,ci::opt::less< std::less<int>>
+                    ,ci::opt::disposer<mock_disposer>
+                >::type
+            > set_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( IntrusiveFeldmanHashSet_DHP, compare )
+    {
+        struct traits : public ci::feldman_hashset::traits
+        {
+            typedef base_class::hash_accessor hash_accessor;
+            typedef cmp compare;
+            typedef mock_disposer disposer;
+        };
+
+        typedef ci::FeldmanHashSet< gc_type, int_item, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( IntrusiveFeldmanHashSet_DHP, less )
+    {
+        typedef ci::FeldmanHashSet< gc_type, int_item,
+            typename ci::feldman_hashset::make_traits<
+                ci::feldman_hashset::hash_accessor< hash_accessor >
+                , ci::opt::less< std::less<int>>
+                , ci::opt::disposer<mock_disposer>
+            >::type
+        > set_type;
+
+        set_type s( 5, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveFeldmanHashSet_DHP, cmpmix )
+    {
+        struct traits : public ci::feldman_hashset::traits
+        {
+            typedef base_class::hash_accessor hash_accessor;
+            typedef cmp compare;
+            typedef std::less<int> less;
+            typedef mock_disposer disposer;
+            typedef simple_item_counter item_counter;
+        };
+
+        typedef ci::FeldmanHashSet< gc_type, int_item, traits > set_type;
+
+        set_type s( 3, 4 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveFeldmanHashSet_DHP, backoff )
+    {
+        struct traits : public ci::feldman_hashset::traits
+        {
+            typedef base_class::hash_accessor hash_accessor;
+            typedef cmp compare;
+            typedef mock_disposer disposer;
+            typedef cds::backoff::empty back_off;
+            typedef ci::opt::v::sequential_consistent memory_model;
+        };
+
+        typedef ci::FeldmanHashSet< gc_type, int_item, traits > set_type;
+
+        set_type s( 8, 3 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveFeldmanHashSet_DHP, stat )
+    {
+        struct traits : public ci::feldman_hashset::traits
+        {
+            typedef base_class::hash_accessor hash_accessor;
+            typedef cmp compare;
+            typedef mock_disposer disposer;
+            typedef ci::feldman_hashset::stat<> stat;
+        };
+
+        typedef ci::FeldmanHashSet< gc_type, int_item, traits > set_type;
+
+        set_type s( 8, 3 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/intrusive-set/intrusive_feldman_hashset_hp.cpp b/test/unit/intrusive-set/intrusive_feldman_hashset_hp.cpp
new file mode 100644 (file)
index 0000000..e9ca7b5
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_feldman_hashset_hp.h"
+
+#include <cds/intrusive/feldman_hashset_hp.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::HP gc_type;
+
+    class IntrusiveFeldmanHashSet_HP : public cds_test::intrusive_feldman_hashset_hp
+    {
+    protected:
+        typedef cds_test::intrusive_feldman_hashset_hp base_class;
+
+    protected:
+
+        void SetUp()
+        {
+            typedef ci::FeldmanHashSet< gc_type, int_item, 
+                typename ci::feldman_hashset::make_traits<
+                    ci::feldman_hashset::hash_accessor< hash_accessor >
+                    ,ci::opt::less< std::less<int>>
+                    ,ci::opt::disposer<mock_disposer>
+                >::type
+            > set_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( set_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( IntrusiveFeldmanHashSet_HP, compare )
+    {
+        struct traits : public ci::feldman_hashset::traits
+        {
+            typedef base_class::hash_accessor hash_accessor;
+            typedef cmp compare;
+            typedef mock_disposer disposer;
+        };
+
+        typedef ci::FeldmanHashSet< gc_type, int_item, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( IntrusiveFeldmanHashSet_HP, less )
+    {
+        typedef ci::FeldmanHashSet< gc_type, int_item,
+            typename ci::feldman_hashset::make_traits<
+                ci::feldman_hashset::hash_accessor< hash_accessor >
+                , ci::opt::less< std::less<int>>
+                , ci::opt::disposer<mock_disposer>
+            >::type
+        > set_type;
+
+        set_type s( 5, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveFeldmanHashSet_HP, cmpmix )
+    {
+        struct traits : public ci::feldman_hashset::traits
+        {
+            typedef base_class::hash_accessor hash_accessor;
+            typedef cmp compare;
+            typedef std::less<int> less;
+            typedef mock_disposer disposer;
+            typedef simple_item_counter item_counter;
+        };
+
+        typedef ci::FeldmanHashSet< gc_type, int_item, traits > set_type;
+
+        set_type s( 3, 4 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveFeldmanHashSet_HP, backoff )
+    {
+        struct traits : public ci::feldman_hashset::traits
+        {
+            typedef base_class::hash_accessor hash_accessor;
+            typedef cmp compare;
+            typedef mock_disposer disposer;
+            typedef cds::backoff::empty back_off;
+            typedef ci::opt::v::sequential_consistent memory_model;
+        };
+
+        typedef ci::FeldmanHashSet< gc_type, int_item, traits > set_type;
+
+        set_type s( 8, 3 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveFeldmanHashSet_HP, stat )
+    {
+        struct traits : public ci::feldman_hashset::traits
+        {
+            typedef base_class::hash_accessor hash_accessor;
+            typedef cmp compare;
+            typedef mock_disposer disposer;
+            typedef ci::feldman_hashset::stat<> stat;
+        };
+
+        typedef ci::FeldmanHashSet< gc_type, int_item, traits > set_type;
+
+        set_type s( 8, 3 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_gpb.cpp b/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..35c432e
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_intrusive_feldman_hashset_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, IntrusiveFeldmanHashSet, rcu_implementation );
diff --git a/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_gpi.cpp b/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..e0114f8
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_intrusive_feldman_hashset_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, IntrusiveFeldmanHashSet, rcu_implementation );
diff --git a/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_gpt.cpp b/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..a152be5
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_intrusive_feldman_hashset_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, IntrusiveFeldmanHashSet, rcu_implementation );
diff --git a/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_shb.cpp b/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..93e357d
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_intrusive_feldman_hashset_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, IntrusiveFeldmanHashSet, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_sht.cpp b/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..ecd281a
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_intrusive_feldman_hashset_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, IntrusiveFeldmanHashSet, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/intrusive-set/intrusive_michael_lazy_dhp.cpp b/test/unit/intrusive-set/intrusive_michael_lazy_dhp.cpp
new file mode 100644 (file)
index 0000000..633001a
--- /dev/null
@@ -0,0 +1,254 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_set_hp.h"
+
+#include <cds/intrusive/lazy_list_dhp.h>
+#include <cds/intrusive/michael_set.h>
+
+#include <mutex>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::DHP gc_type;
+
+    class IntrusiveMichaelLazySet_DHP : public cds_test::intrusive_set_hp
+    {
+    protected:
+        typedef cds_test::intrusive_set_hp base_class;
+
+    protected:
+        typedef typename base_class::base_int_item< ci::lazy_list::node<gc_type>>   base_item_type;
+        typedef typename base_class::base_int_item< ci::lazy_list::node<gc_type, std::mutex>>   base_mutex_item_type;
+        typedef typename base_class::member_int_item< ci::lazy_list::node<gc_type>> member_item_type;
+        typedef typename base_class::member_int_item< ci::lazy_list::node<gc_type, std::mutex>> member_mutex_item_type;
+
+        void SetUp()
+        {
+            struct list_traits : public ci::lazy_list::traits
+            {
+                typedef ci::lazy_list::base_hook< ci::opt::gc<gc_type>> hook;
+            };
+            typedef ci::LazyList< gc_type, base_item_type, list_traits > list_type;
+            typedef ci::MichaelHashSet< gc_type, list_type >   set_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+    };
+
+
+    TEST_F( IntrusiveMichaelLazySet_DHP, base_cmp )
+    {
+        typedef ci::LazyList< gc_type
+            , base_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::base_hook< ci::opt::gc< gc_type > > >
+                ,ci::opt::compare< cmp<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+                ,ci::opt::back_off< cds::backoff::pause >
+            >::type
+        > bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelLazySet_DHP, base_less )
+    {
+        typedef ci::LazyList< gc_type
+            , base_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::base_hook< ci::opt::gc< gc_type >>>
+                ,ci::opt::less< less<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelLazySet_DHP, base_cmpmix )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::base_hook< ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<base_item_type> less;
+            typedef cmp<base_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, base_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::MichaelHashSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelLazySet_DHP, base_mutex )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::base_hook< ci::opt::gc<gc_type>, ci::opt::lock_type<std::mutex>> hook;
+            typedef base_class::less<base_mutex_item_type> less;
+            typedef cmp<base_mutex_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, base_mutex_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::MichaelHashSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+
+    TEST_F( IntrusiveMichaelLazySet_DHP, member_cmp )
+    {
+        typedef ci::LazyList< gc_type
+            ,member_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::compare< cmp<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        >    bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelLazySet_DHP, member_less )
+    {
+        typedef ci::LazyList< gc_type
+            , member_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::less< less<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelLazySet_DHP, member_cmpmix )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<member_item_type> less;
+            typedef cmp<member_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, member_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::MichaelHashSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelLazySet_DHP, member_mutex )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::member_hook< offsetof( member_mutex_item_type, hMember ), ci::opt::gc<gc_type>, ci::opt::lock_type<std::mutex>> hook;
+            typedef base_class::less<member_mutex_item_type> less;
+            typedef cmp<member_mutex_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, member_mutex_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::MichaelHashSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/intrusive-set/intrusive_michael_lazy_hp.cpp b/test/unit/intrusive-set/intrusive_michael_lazy_hp.cpp
new file mode 100644 (file)
index 0000000..6583d32
--- /dev/null
@@ -0,0 +1,255 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_set_hp.h"
+
+#include <cds/intrusive/lazy_list_hp.h>
+#include <cds/intrusive/michael_set.h>
+
+#include <mutex>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::HP gc_type;
+
+    class IntrusiveMichaelLazySet_HP : public cds_test::intrusive_set_hp
+    {
+    protected:
+        typedef cds_test::intrusive_set_hp base_class;
+
+    protected:
+        typedef typename base_class::base_int_item< ci::lazy_list::node<gc_type>>   base_item_type;
+        typedef typename base_class::base_int_item< ci::lazy_list::node<gc_type, std::mutex>>   base_mutex_item_type;
+        typedef typename base_class::member_int_item< ci::lazy_list::node<gc_type>> member_item_type;
+        typedef typename base_class::member_int_item< ci::lazy_list::node<gc_type, std::mutex>> member_mutex_item_type;
+
+        void SetUp()
+        {
+            struct list_traits : public ci::lazy_list::traits
+            {
+                typedef ci::lazy_list::base_hook< ci::opt::gc<gc_type>> hook;
+            };
+            typedef ci::LazyList< gc_type, base_item_type, list_traits > list_type;
+            typedef ci::MichaelHashSet< gc_type, list_type >   set_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( set_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+
+    TEST_F( IntrusiveMichaelLazySet_HP, base_cmp )
+    {
+        typedef ci::LazyList< gc_type
+            , base_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::base_hook< ci::opt::gc< gc_type > > >
+                ,ci::opt::compare< cmp<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+                ,ci::opt::back_off< cds::backoff::pause >
+            >::type
+        > bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelLazySet_HP, base_less )
+    {
+        typedef ci::LazyList< gc_type
+            , base_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::base_hook< ci::opt::gc< gc_type >>>
+                ,ci::opt::less< less<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelLazySet_HP, base_cmpmix )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::base_hook< ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<base_item_type> less;
+            typedef cmp<base_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, base_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::MichaelHashSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelLazySet_HP, base_mutex )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::base_hook< ci::opt::gc<gc_type>, ci::opt::lock_type<std::mutex>> hook;
+            typedef base_class::less<base_mutex_item_type> less;
+            typedef cmp<base_mutex_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, base_mutex_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::MichaelHashSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+
+    TEST_F( IntrusiveMichaelLazySet_HP, member_cmp )
+    {
+        typedef ci::LazyList< gc_type
+            ,member_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::compare< cmp<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        >    bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelLazySet_HP, member_less )
+    {
+        typedef ci::LazyList< gc_type
+            , member_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::less< less<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelLazySet_HP, member_cmpmix )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<member_item_type> less;
+            typedef cmp<member_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, member_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::MichaelHashSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelLazySet_HP, member_mutex )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::member_hook< offsetof( member_mutex_item_type, hMember ), ci::opt::gc<gc_type>, ci::opt::lock_type<std::mutex>> hook;
+            typedef base_class::less<member_mutex_item_type> less;
+            typedef cmp<member_mutex_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, member_mutex_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::MichaelHashSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/intrusive-set/intrusive_michael_lazy_nogc.cpp b/test/unit/intrusive-set/intrusive_michael_lazy_nogc.cpp
new file mode 100644 (file)
index 0000000..c183de4
--- /dev/null
@@ -0,0 +1,241 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_set_nogc.h"
+
+#include <cds/intrusive/lazy_list_nogc.h>
+#include <cds/intrusive/michael_set_nogc.h>
+
+#include <mutex>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::nogc gc_type;
+
+    class IntrusiveMichaelLazySet_NoGC : public cds_test::intrusive_set_nogc
+    {
+    protected:
+        typedef cds_test::intrusive_set_nogc base_class;
+
+    protected:
+        typedef typename base_class::base_int_item< ci::lazy_list::node<gc_type>>   base_item_type;
+        typedef typename base_class::base_int_item< ci::lazy_list::node<gc_type, std::mutex>>   base_mutex_item_type;
+        typedef typename base_class::member_int_item< ci::lazy_list::node<gc_type>> member_item_type;
+        typedef typename base_class::member_int_item< ci::lazy_list::node<gc_type, std::mutex>> member_mutex_item_type;
+
+        //void SetUp()
+        //{}
+
+        //void TearDown()
+        //{}
+    };
+
+
+    TEST_F( IntrusiveMichaelLazySet_NoGC, base_cmp )
+    {
+        typedef ci::LazyList< gc_type
+            , base_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::base_hook< ci::opt::gc< gc_type > > >
+                ,ci::opt::compare< cmp<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+                ,ci::opt::back_off< cds::backoff::pause >
+            >::type
+        > bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelLazySet_NoGC, base_less )
+    {
+        typedef ci::LazyList< gc_type
+            , base_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::base_hook< ci::opt::gc< gc_type >>>
+                ,ci::opt::less< less<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelLazySet_NoGC, base_cmpmix )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::base_hook< ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<base_item_type> less;
+            typedef cmp<base_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, base_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::MichaelHashSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelLazySet_NoGC, base_mutex )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::base_hook< ci::opt::gc<gc_type>, ci::opt::lock_type<std::mutex>> hook;
+            typedef base_class::less<base_mutex_item_type> less;
+            typedef cmp<base_mutex_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, base_mutex_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::MichaelHashSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+
+    TEST_F( IntrusiveMichaelLazySet_NoGC, member_cmp )
+    {
+        typedef ci::LazyList< gc_type
+            ,member_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::compare< cmp<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        >    bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelLazySet_NoGC, member_less )
+    {
+        typedef ci::LazyList< gc_type
+            , member_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::less< less<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelLazySet_NoGC, member_cmpmix )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<member_item_type> less;
+            typedef cmp<member_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, member_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::MichaelHashSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelLazySet_NoGC, member_mutex )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::member_hook< offsetof( member_mutex_item_type, hMember ), ci::opt::gc<gc_type>, ci::opt::lock_type<std::mutex>> hook;
+            typedef base_class::less<member_mutex_item_type> less;
+            typedef cmp<member_mutex_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, member_mutex_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::MichaelHashSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/intrusive-set/intrusive_michael_lazy_rcu_gpb.cpp b/test/unit/intrusive-set/intrusive_michael_lazy_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..f2662d2
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_intrusive_michael_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, IntrusiveMichaelLazySet, rcu_implementation );
diff --git a/test/unit/intrusive-set/intrusive_michael_lazy_rcu_gpi.cpp b/test/unit/intrusive-set/intrusive_michael_lazy_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..b35171a
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_intrusive_michael_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, IntrusiveMichaelLazySet, rcu_implementation );
diff --git a/test/unit/intrusive-set/intrusive_michael_lazy_rcu_gpt.cpp b/test/unit/intrusive-set/intrusive_michael_lazy_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..76ff2f0
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_intrusive_michael_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, IntrusiveMichaelLazySet, rcu_implementation );
diff --git a/test/unit/intrusive-set/intrusive_michael_lazy_rcu_shb.cpp b/test/unit/intrusive-set/intrusive_michael_lazy_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..a7728a2
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_intrusive_michael_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, IntrusiveMichaelLazySet, rcu_implementation );
+
+#endif // #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
diff --git a/test/unit/intrusive-set/intrusive_michael_lazy_rcu_sht.cpp b/test/unit/intrusive-set/intrusive_michael_lazy_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..16c00ba
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_intrusive_michael_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, IntrusiveMichaelLazySet, rcu_implementation );
+
+#endif // #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
diff --git a/test/unit/intrusive-set/intrusive_michael_michael_dhp.cpp b/test/unit/intrusive-set/intrusive_michael_michael_dhp.cpp
new file mode 100644 (file)
index 0000000..035c21f
--- /dev/null
@@ -0,0 +1,205 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_set_hp.h"
+
+#include <cds/intrusive/michael_list_dhp.h>
+#include <cds/intrusive/michael_set.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::DHP gc_type;
+
+    class IntrusiveMichaelSet_DHP : public cds_test::intrusive_set_hp
+    {
+    protected:
+        typedef cds_test::intrusive_set_hp base_class;
+
+    protected:
+        typedef typename base_class::base_int_item< ci::michael_list::node<gc_type>>   base_item_type;
+        typedef typename base_class::member_int_item< ci::michael_list::node<gc_type>> member_item_type;
+
+        void SetUp()
+        {
+            struct list_traits : public ci::michael_list::traits
+            {
+                typedef ci::michael_list::base_hook< ci::opt::gc<gc_type>> hook;
+            };
+            typedef ci::MichaelList< gc_type, base_item_type, list_traits > list_type;
+            typedef ci::MichaelHashSet< gc_type, list_type >   set_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+    };
+
+
+    TEST_F( IntrusiveMichaelSet_DHP, base_cmp )
+    {
+        typedef ci::MichaelList< gc_type
+            , base_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::base_hook< ci::opt::gc< gc_type >>>
+                ,ci::opt::compare< cmp<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelSet_DHP, base_less )
+    {
+        typedef ci::MichaelList< gc_type
+            , base_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::base_hook< ci::opt::gc< gc_type >>>
+                ,ci::opt::less< less<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelSet_DHP, base_cmpmix )
+    {
+        struct list_traits : public ci::michael_list::traits
+        {
+            typedef ci::michael_list::base_hook< ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<base_item_type> less;
+            typedef cmp<base_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::MichaelList< gc_type, base_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::MichaelHashSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+
+    TEST_F( IntrusiveMichaelSet_DHP, member_cmp )
+    {
+        typedef ci::MichaelList< gc_type
+            ,member_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::compare< cmp<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        >    bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelSet_DHP, member_less )
+    {
+        typedef ci::MichaelList< gc_type
+            , member_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::less< less<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelSet_DHP, member_cmpmix )
+    {
+        struct list_traits : public ci::michael_list::traits
+        {
+            typedef ci::michael_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<member_item_type> less;
+            typedef cmp<member_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::MichaelList< gc_type, member_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::MichaelHashSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/intrusive-set/intrusive_michael_michael_hp.cpp b/test/unit/intrusive-set/intrusive_michael_michael_hp.cpp
new file mode 100644 (file)
index 0000000..a97824d
--- /dev/null
@@ -0,0 +1,206 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_set_hp.h"
+
+#include <cds/intrusive/michael_list_hp.h>
+#include <cds/intrusive/michael_set.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::HP gc_type;
+
+    class IntrusiveMichaelSet_HP : public cds_test::intrusive_set_hp
+    {
+    protected:
+        typedef cds_test::intrusive_set_hp base_class;
+
+    protected:
+        typedef typename base_class::base_int_item< ci::michael_list::node<gc_type>>   base_item_type;
+        typedef typename base_class::member_int_item< ci::michael_list::node<gc_type>> member_item_type;
+
+        void SetUp()
+        {
+            struct list_traits : public ci::michael_list::traits
+            {
+                typedef ci::michael_list::base_hook< ci::opt::gc<gc_type>> hook;
+            };
+            typedef ci::MichaelList< gc_type, base_item_type, list_traits > list_type;
+            typedef ci::MichaelHashSet< gc_type, list_type >   set_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( set_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+
+    TEST_F( IntrusiveMichaelSet_HP, base_cmp )
+    {
+        typedef ci::MichaelList< gc_type
+            , base_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::base_hook< ci::opt::gc< gc_type > > >
+                ,ci::opt::compare< cmp<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelSet_HP, base_less )
+    {
+        typedef ci::MichaelList< gc_type
+            , base_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::base_hook< ci::opt::gc< gc_type >>>
+                ,ci::opt::less< less<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelSet_HP, base_cmpmix )
+    {
+        struct list_traits : public ci::michael_list::traits
+        {
+            typedef ci::michael_list::base_hook< ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<base_item_type> less;
+            typedef cmp<base_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::MichaelList< gc_type, base_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::MichaelHashSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+
+    TEST_F( IntrusiveMichaelSet_HP, member_cmp )
+    {
+        typedef ci::MichaelList< gc_type
+            ,member_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::compare< cmp<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        >    bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelSet_HP, member_less )
+    {
+        typedef ci::MichaelList< gc_type
+            , member_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::less< less<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelSet_HP, member_cmpmix )
+    {
+        struct list_traits : public ci::michael_list::traits
+        {
+            typedef ci::michael_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<member_item_type> less;
+            typedef cmp<member_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::MichaelList< gc_type, member_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::MichaelHashSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/intrusive-set/intrusive_michael_michael_nogc.cpp b/test/unit/intrusive-set/intrusive_michael_michael_nogc.cpp
new file mode 100644 (file)
index 0000000..2ce9e2b
--- /dev/null
@@ -0,0 +1,192 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_set_nogc.h"
+
+#include <cds/intrusive/michael_list_nogc.h>
+#include <cds/intrusive/michael_set_nogc.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::nogc gc_type;
+
+    class IntrusiveMichaelSet_NoGC : public cds_test::intrusive_set_nogc
+    {
+    protected:
+        typedef cds_test::intrusive_set_nogc base_class;
+
+    protected:
+        typedef typename base_class::base_int_item< ci::michael_list::node<gc_type>>   base_item_type;
+        typedef typename base_class::member_int_item< ci::michael_list::node<gc_type>> member_item_type;
+
+        //void SetUp()
+        //{}
+
+        //void TearDown()
+        //{}
+    };
+
+
+    TEST_F( IntrusiveMichaelSet_NoGC, base_cmp )
+    {
+        typedef ci::MichaelList< gc_type
+            , base_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::base_hook< ci::opt::gc< gc_type > > >
+                ,ci::opt::compare< cmp<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelSet_NoGC, base_less )
+    {
+        typedef ci::MichaelList< gc_type
+            , base_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::base_hook< ci::opt::gc< gc_type >>>
+                ,ci::opt::less< less<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelSet_NoGC, base_cmpmix )
+    {
+        struct list_traits : public ci::michael_list::traits
+        {
+            typedef ci::michael_list::base_hook< ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<base_item_type> less;
+            typedef cmp<base_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::MichaelList< gc_type, base_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::MichaelHashSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+
+    TEST_F( IntrusiveMichaelSet_NoGC, member_cmp )
+    {
+        typedef ci::MichaelList< gc_type
+            ,member_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::compare< cmp<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        >    bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelSet_NoGC, member_less )
+    {
+        typedef ci::MichaelList< gc_type
+            , member_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::less< less<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::MichaelHashSet< gc_type, bucket_type,
+            ci::michael_set::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveMichaelSet_NoGC, member_cmpmix )
+    {
+        struct list_traits : public ci::michael_list::traits
+        {
+            typedef ci::michael_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<member_item_type> less;
+            typedef cmp<member_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::MichaelList< gc_type, member_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::MichaelHashSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/intrusive-set/intrusive_michael_michael_rcu_gpb.cpp b/test/unit/intrusive-set/intrusive_michael_michael_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..e8d6f68
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_intrusive_michael_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, IntrusiveMichaelSet, rcu_implementation );
diff --git a/test/unit/intrusive-set/intrusive_michael_michael_rcu_gpi.cpp b/test/unit/intrusive-set/intrusive_michael_michael_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..3e65ce1
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_intrusive_michael_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, IntrusiveMichaelSet, rcu_implementation );
diff --git a/test/unit/intrusive-set/intrusive_michael_michael_rcu_gpt.cpp b/test/unit/intrusive-set/intrusive_michael_michael_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..b397529
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_intrusive_michael_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, IntrusiveMichaelSet, rcu_implementation );
diff --git a/test/unit/intrusive-set/intrusive_michael_michael_rcu_shb.cpp b/test/unit/intrusive-set/intrusive_michael_michael_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..6f5be5a
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_intrusive_michael_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, IntrusiveMichaelSet, rcu_implementation );
+
+#endif // #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
diff --git a/test/unit/intrusive-set/intrusive_michael_michael_rcu_sht.cpp b/test/unit/intrusive-set/intrusive_michael_michael_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..a2e76b5
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_intrusive_michael_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, IntrusiveMichaelSet, rcu_implementation );
+
+#endif // #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
diff --git a/test/unit/intrusive-set/intrusive_skiplist_dhp.cpp b/test/unit/intrusive-set/intrusive_skiplist_dhp.cpp
new file mode 100644 (file)
index 0000000..555e595
--- /dev/null
@@ -0,0 +1,200 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_set_hp.h"
+
+#include <cds/intrusive/skip_list_dhp.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::DHP gc_type;
+
+    class IntrusiveSkipListSet_DHP : public cds_test::intrusive_set_hp
+    {
+    protected:
+        typedef cds_test::intrusive_set_hp base_class;
+
+    protected:
+        typedef typename base_class::base_int_item< ci::skip_list::node< gc_type>>   base_item_type;
+        typedef typename base_class::member_int_item< ci::skip_list::node< gc_type>> member_item_type;
+
+        void SetUp()
+        {
+            typedef ci::SkipListSet< gc_type, base_item_type,
+                typename ci::skip_list::make_traits<
+                    ci::opt::hook<ci::skip_list::base_hook< ci::opt::gc< gc_type >>>
+                    ,ci::opt::disposer<mock_disposer>
+                    ,ci::opt::compare<mock_disposer>
+                >::type
+            > set_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+    };
+
+
+    TEST_F( IntrusiveSkipListSet_DHP, base_cmp )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::base_hook< ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp<base_item_type> compare;
+        };
+
+        typedef ci::SkipListSet< gc_type, base_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( IntrusiveSkipListSet_DHP, base_less )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::base_hook< ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef base_class::less<base_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+
+        typedef ci::SkipListSet< gc_type, base_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( IntrusiveSkipListSet_DHP, base_cmpmix )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::base_hook< ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp<base_item_type> compare;
+            typedef base_class::less<base_item_type> less;
+            typedef ci::skip_list::stat<> stat;
+        };
+
+        typedef ci::SkipListSet< gc_type, base_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( IntrusiveSkipListSet_DHP, base_xorshift )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::base_hook< ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp<base_item_type> compare;
+            typedef ci::skip_list::xorshift random_level_generator;
+        };
+
+        typedef ci::SkipListSet< gc_type, base_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+
+    TEST_F( IntrusiveSkipListSet_DHP, member_cmp )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::member_hook< offsetof(member_item_type, hMember), ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp<member_item_type> compare;
+        };
+
+        typedef ci::SkipListSet< gc_type, member_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( IntrusiveSkipListSet_DHP, member_less )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef base_class::less<member_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef ci::opt::v::sequential_consistent memory_model;
+        };
+
+        typedef ci::SkipListSet< gc_type, member_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( IntrusiveSkipListSet_DHP, member_cmpmix )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp<member_item_type> compare;
+            typedef base_class::less<member_item_type> less;
+            typedef ci::skip_list::stat<> stat;
+        };
+
+        typedef ci::SkipListSet< gc_type, member_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( IntrusiveSkipListSet_DHP, member_xorshift )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp<member_item_type> compare;
+            typedef ci::skip_list::xorshift random_level_generator;
+        };
+
+        typedef ci::SkipListSet< gc_type, member_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/intrusive-set/intrusive_skiplist_hp.cpp b/test/unit/intrusive-set/intrusive_skiplist_hp.cpp
new file mode 100644 (file)
index 0000000..c3f40e2
--- /dev/null
@@ -0,0 +1,201 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_set_hp.h"
+
+#include <cds/intrusive/skip_list_hp.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::HP gc_type;
+
+    class IntrusiveSkipListSet_HP : public cds_test::intrusive_set_hp
+    {
+    protected:
+        typedef cds_test::intrusive_set_hp base_class;
+
+    protected:
+        typedef typename base_class::base_int_item< ci::skip_list::node< gc_type>>   base_item_type;
+        typedef typename base_class::member_int_item< ci::skip_list::node< gc_type>> member_item_type;
+
+        void SetUp()
+        {
+            typedef ci::SkipListSet< gc_type, base_item_type,
+                typename ci::skip_list::make_traits<
+                    ci::opt::hook<ci::skip_list::base_hook< ci::opt::gc< gc_type >>>
+                    ,ci::opt::disposer<mock_disposer>
+                    ,ci::opt::compare<mock_disposer>
+                >::type
+            > set_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( set_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+
+    TEST_F( IntrusiveSkipListSet_HP, base_cmp )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::base_hook< ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp<base_item_type> compare;
+        };
+
+        typedef ci::SkipListSet< gc_type, base_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( IntrusiveSkipListSet_HP, base_less )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::base_hook< ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef base_class::less<base_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+
+        typedef ci::SkipListSet< gc_type, base_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( IntrusiveSkipListSet_HP, base_cmpmix )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::base_hook< ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp<base_item_type> compare;
+            typedef base_class::less<base_item_type> less;
+            typedef ci::skip_list::stat<> stat;
+        };
+
+        typedef ci::SkipListSet< gc_type, base_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( IntrusiveSkipListSet_HP, base_xorshift )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::base_hook< ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp<base_item_type> compare;
+            typedef ci::skip_list::xorshift random_level_generator;
+        };
+
+        typedef ci::SkipListSet< gc_type, base_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+
+    TEST_F( IntrusiveSkipListSet_HP, member_cmp )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::member_hook< offsetof(member_item_type, hMember), ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp<member_item_type> compare;
+        };
+
+        typedef ci::SkipListSet< gc_type, member_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( IntrusiveSkipListSet_HP, member_less )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef base_class::less<member_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef ci::opt::v::sequential_consistent memory_model;
+        };
+
+        typedef ci::SkipListSet< gc_type, member_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( IntrusiveSkipListSet_HP, member_cmpmix )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp<member_item_type> compare;
+            typedef base_class::less<member_item_type> less;
+            typedef ci::skip_list::stat<> stat;
+        };
+
+        typedef ci::SkipListSet< gc_type, member_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( IntrusiveSkipListSet_HP, member_xorshift )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp<member_item_type> compare;
+            typedef ci::skip_list::xorshift random_level_generator;
+        };
+
+        typedef ci::SkipListSet< gc_type, member_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/intrusive-set/intrusive_skiplist_nogc.cpp b/test/unit/intrusive-set/intrusive_skiplist_nogc.cpp
new file mode 100644 (file)
index 0000000..e2c7ec7
--- /dev/null
@@ -0,0 +1,186 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_set_nogc.h"
+
+#include <cds/intrusive/skip_list_nogc.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::nogc gc_type;
+
+    class IntrusiveSkipListSet_NoGC : public cds_test::intrusive_set_nogc
+    {
+    protected:
+        typedef cds_test::intrusive_set_nogc base_class;
+
+    protected:
+        typedef typename base_class::base_int_item< ci::skip_list::node< gc_type>>   base_item_type;
+        typedef typename base_class::member_int_item< ci::skip_list::node< gc_type>> member_item_type;
+
+        //void SetUp()
+        //{}
+
+        //void TearDown()
+        //{}
+    };
+
+
+    TEST_F( IntrusiveSkipListSet_NoGC, base_cmp )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::base_hook< ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp<base_item_type> compare;
+        };
+
+        typedef ci::SkipListSet< gc_type, base_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( IntrusiveSkipListSet_NoGC, base_less )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::base_hook< ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef base_class::less<base_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+
+        typedef ci::SkipListSet< gc_type, base_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( IntrusiveSkipListSet_NoGC, base_cmpmix )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::base_hook< ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp<base_item_type> compare;
+            typedef base_class::less<base_item_type> less;
+            typedef ci::skip_list::stat<> stat;
+        };
+
+        typedef ci::SkipListSet< gc_type, base_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( IntrusiveSkipListSet_NoGC, base_xorshift )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::base_hook< ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp<base_item_type> compare;
+            typedef ci::skip_list::xorshift random_level_generator;
+        };
+
+        typedef ci::SkipListSet< gc_type, base_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+
+    TEST_F( IntrusiveSkipListSet_NoGC, member_cmp )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::member_hook< offsetof(member_item_type, hMember), ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp<member_item_type> compare;
+        };
+
+        typedef ci::SkipListSet< gc_type, member_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( IntrusiveSkipListSet_NoGC, member_less )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef base_class::less<member_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef ci::opt::v::sequential_consistent memory_model;
+        };
+
+        typedef ci::SkipListSet< gc_type, member_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( IntrusiveSkipListSet_NoGC, member_cmpmix )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp<member_item_type> compare;
+            typedef base_class::less<member_item_type> less;
+            typedef ci::skip_list::stat<> stat;
+        };
+
+        typedef ci::SkipListSet< gc_type, member_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( IntrusiveSkipListSet_NoGC, member_xorshift )
+    {
+        struct traits : public ci::skip_list::traits
+        {
+            typedef ci::skip_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp<member_item_type> compare;
+            typedef ci::skip_list::xorshift random_level_generator;
+        };
+
+        typedef ci::SkipListSet< gc_type, member_item_type, traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/intrusive-set/intrusive_skiplist_rcu_gpb.cpp b/test/unit/intrusive-set/intrusive_skiplist_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..a80370b
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_intrusive_skiplist_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, IntrusiveSkipListSet, rcu_implementation );
diff --git a/test/unit/intrusive-set/intrusive_skiplist_rcu_gpi.cpp b/test/unit/intrusive-set/intrusive_skiplist_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..e8b9715
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_intrusive_skiplist_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, IntrusiveSkipListSet, rcu_implementation );
diff --git a/test/unit/intrusive-set/intrusive_skiplist_rcu_gpt.cpp b/test/unit/intrusive-set/intrusive_skiplist_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..beeeca0
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_intrusive_skiplist_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, IntrusiveSkipListSet, rcu_implementation );
diff --git a/test/unit/intrusive-set/intrusive_skiplist_rcu_shb.cpp b/test/unit/intrusive-set/intrusive_skiplist_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..334cf99
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_intrusive_skiplist_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, IntrusiveSkipListSet, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/intrusive-set/intrusive_skiplist_rcu_sht.cpp b/test/unit/intrusive-set/intrusive_skiplist_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..04a52d6
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_intrusive_skiplist_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, IntrusiveSkipListSet, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/intrusive-set/intrusive_split_lazy_dhp.cpp b/test/unit/intrusive-set/intrusive_split_lazy_dhp.cpp
new file mode 100644 (file)
index 0000000..aad8207
--- /dev/null
@@ -0,0 +1,258 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_set_hp.h"
+
+#include <cds/intrusive/lazy_list_dhp.h>
+#include <cds/intrusive/split_list.h>
+
+#include <mutex>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::DHP gc_type;
+
+    class IntrusiveSplitListLazySet_DHP : public cds_test::intrusive_set_hp
+    {
+    protected:
+        typedef cds_test::intrusive_set_hp base_class;
+
+    protected:
+        typedef typename base_class::base_int_item< ci::split_list::node< ci::lazy_list::node<gc_type>>>   base_item_type;
+        typedef typename base_class::base_int_item< ci::split_list::node< ci::lazy_list::node<gc_type, std::mutex>>>   base_mutex_item_type;
+        typedef typename base_class::member_int_item< ci::split_list::node< ci::lazy_list::node<gc_type>>> member_item_type;
+        typedef typename base_class::member_int_item< ci::split_list::node< ci::lazy_list::node<gc_type, std::mutex>>> member_mutex_item_type;
+
+        void SetUp()
+        {
+            struct list_traits : public ci::lazy_list::traits
+            {
+                typedef ci::lazy_list::base_hook< ci::opt::gc<gc_type>> hook;
+            };
+            typedef ci::LazyList< gc_type, base_item_type, list_traits > list_type;
+            typedef ci::SplitListSet< gc_type, list_type >   set_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+    };
+
+
+    TEST_F( IntrusiveSplitListLazySet_DHP, base_cmp )
+    {
+        typedef ci::LazyList< gc_type
+            , base_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::base_hook< ci::opt::gc< gc_type > > >
+                ,ci::opt::compare< cmp<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+                ,ci::opt::back_off< cds::backoff::pause >
+            >::type
+        > bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListLazySet_DHP, base_less )
+    {
+        typedef ci::LazyList< gc_type
+            , base_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::base_hook< ci::opt::gc< gc_type >>>
+                ,ci::opt::less< less<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+                , ci::opt::item_counter< cds::atomicity::item_counter >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListLazySet_DHP, base_cmpmix )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::base_hook< ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<base_item_type> less;
+            typedef cmp<base_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, base_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::split_list::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+            typedef ci::split_list::stat<> stat;
+        };
+        typedef ci::SplitListSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListLazySet_DHP, base_mutex )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::base_hook< ci::opt::gc<gc_type>, ci::opt::lock_type<std::mutex>> hook;
+            typedef base_class::less<base_mutex_item_type> less;
+            typedef cmp<base_mutex_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, base_mutex_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::split_list::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+            typedef cds::backoff::empty back_off;
+        };
+        typedef ci::SplitListSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+
+    TEST_F( IntrusiveSplitListLazySet_DHP, member_cmp )
+    {
+        typedef ci::LazyList< gc_type
+            ,member_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::compare< cmp<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        >    bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListLazySet_DHP, member_less )
+    {
+        typedef ci::LazyList< gc_type
+            , member_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::less< less<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+                , ci::opt::back_off< cds::backoff::pause >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListLazySet_DHP, member_cmpmix )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<member_item_type> less;
+            typedef cmp<member_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, member_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::split_list::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::SplitListSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListLazySet_DHP, member_mutex )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::member_hook< offsetof( member_mutex_item_type, hMember ), ci::opt::gc<gc_type>, ci::opt::lock_type<std::mutex>> hook;
+            typedef base_class::less<member_mutex_item_type> less;
+            typedef cmp<member_mutex_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, member_mutex_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::split_list::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::SplitListSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/intrusive-set/intrusive_split_lazy_hp.cpp b/test/unit/intrusive-set/intrusive_split_lazy_hp.cpp
new file mode 100644 (file)
index 0000000..eadc023
--- /dev/null
@@ -0,0 +1,259 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_set_hp.h"
+
+#include <cds/intrusive/lazy_list_hp.h>
+#include <cds/intrusive/split_list.h>
+
+#include <mutex>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::HP gc_type;
+
+    class IntrusiveSplitListLazySet_HP : public cds_test::intrusive_set_hp
+    {
+    protected:
+        typedef cds_test::intrusive_set_hp base_class;
+
+    protected:
+        typedef typename base_class::base_int_item< ci::split_list::node< ci::lazy_list::node<gc_type>>>   base_item_type;
+        typedef typename base_class::base_int_item< ci::split_list::node< ci::lazy_list::node<gc_type, std::mutex >>>   base_mutex_item_type;
+        typedef typename base_class::member_int_item< ci::split_list::node< ci::lazy_list::node<gc_type>>> member_item_type;
+        typedef typename base_class::member_int_item< ci::split_list::node< ci::lazy_list::node<gc_type, std::mutex>>> member_mutex_item_type;
+
+        void SetUp()
+        {
+            struct list_traits : public ci::lazy_list::traits
+            {
+                typedef ci::lazy_list::base_hook< ci::opt::gc<gc_type>> hook;
+            };
+            typedef ci::LazyList< gc_type, base_item_type, list_traits > list_type;
+            typedef ci::SplitListSet< gc_type, list_type >   set_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( set_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+
+    TEST_F( IntrusiveSplitListLazySet_HP, base_cmp )
+    {
+        typedef ci::LazyList< gc_type
+            , base_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::base_hook< ci::opt::gc< gc_type > > >
+                ,ci::opt::compare< cmp<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+                ,ci::opt::back_off< cds::backoff::pause >
+            >::type
+        > bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListLazySet_HP, base_less )
+    {
+        typedef ci::LazyList< gc_type
+            , base_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::base_hook< ci::opt::gc< gc_type >>>
+                ,ci::opt::less< less<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+                , ci::opt::item_counter< cds::atomicity::item_counter >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListLazySet_HP, base_cmpmix )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::base_hook< ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<base_item_type> less;
+            typedef cmp<base_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, base_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::split_list::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+            typedef ci::split_list::stat<> stat;
+        };
+        typedef ci::SplitListSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListLazySet_HP, base_mutex )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::base_hook< ci::opt::gc<gc_type>, ci::opt::lock_type<std::mutex>> hook;
+            typedef base_class::less<base_mutex_item_type> less;
+            typedef cmp<base_mutex_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, base_mutex_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::split_list::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+            typedef cds::backoff::empty back_off;
+        };
+        typedef ci::SplitListSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+
+    TEST_F( IntrusiveSplitListLazySet_HP, member_cmp )
+    {
+        typedef ci::LazyList< gc_type
+            ,member_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::compare< cmp<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        >    bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListLazySet_HP, member_less )
+    {
+        typedef ci::LazyList< gc_type
+            , member_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::less< less<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+                , ci::opt::back_off< cds::backoff::pause >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListLazySet_HP, member_cmpmix )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<member_item_type> less;
+            typedef cmp<member_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, member_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::split_list::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::SplitListSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListLazySet_HP, member_mutex )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::member_hook< offsetof( member_mutex_item_type, hMember ), ci::opt::gc<gc_type>, ci::opt::lock_type<std::mutex>> hook;
+            typedef base_class::less<member_mutex_item_type> less;
+            typedef cmp<member_mutex_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, member_mutex_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::split_list::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::SplitListSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/intrusive-set/intrusive_split_lazy_nogc.cpp b/test/unit/intrusive-set/intrusive_split_lazy_nogc.cpp
new file mode 100644 (file)
index 0000000..a832f38
--- /dev/null
@@ -0,0 +1,245 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_set_nogc.h"
+
+#include <cds/intrusive/lazy_list_nogc.h>
+#include <cds/intrusive/split_list_nogc.h>
+
+#include <mutex>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::nogc gc_type;
+
+    class IntrusiveSplitListLazySet_NoGC : public cds_test::intrusive_set_nogc
+    {
+    protected:
+        typedef cds_test::intrusive_set_nogc base_class;
+
+    protected:
+        typedef typename base_class::base_int_item< ci::split_list::node< ci::lazy_list::node<gc_type>>>   base_item_type;
+        typedef typename base_class::base_int_item< ci::split_list::node< ci::lazy_list::node<gc_type, std::mutex >>>   base_mutex_item_type;
+        typedef typename base_class::member_int_item< ci::split_list::node< ci::lazy_list::node<gc_type>>> member_item_type;
+        typedef typename base_class::member_int_item< ci::split_list::node< ci::lazy_list::node<gc_type, std::mutex>>> member_mutex_item_type;
+
+        //void SetUp()
+        //{}
+
+        //void TearDown()
+        //{}
+    };
+
+
+    TEST_F( IntrusiveSplitListLazySet_NoGC, base_cmp )
+    {
+        typedef ci::LazyList< gc_type
+            , base_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::base_hook< ci::opt::gc< gc_type > > >
+                ,ci::opt::compare< cmp<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+                ,ci::opt::back_off< cds::backoff::pause >
+            >::type
+        > bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListLazySet_NoGC, base_less )
+    {
+        typedef ci::LazyList< gc_type
+            , base_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::base_hook< ci::opt::gc< gc_type >>>
+                ,ci::opt::less< less<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+                , ci::opt::item_counter< cds::atomicity::item_counter >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListLazySet_NoGC, base_cmpmix )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::base_hook< ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<base_item_type> less;
+            typedef cmp<base_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, base_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::split_list::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+            typedef ci::split_list::stat<> stat;
+        };
+        typedef ci::SplitListSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListLazySet_NoGC, base_mutex )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::base_hook< ci::opt::gc<gc_type>, ci::opt::lock_type<std::mutex>> hook;
+            typedef base_class::less<base_mutex_item_type> less;
+            typedef cmp<base_mutex_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, base_mutex_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::split_list::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+            typedef cds::backoff::empty back_off;
+        };
+        typedef ci::SplitListSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+
+    TEST_F( IntrusiveSplitListLazySet_NoGC, member_cmp )
+    {
+        typedef ci::LazyList< gc_type
+            ,member_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::compare< cmp<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        >    bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListLazySet_NoGC, member_less )
+    {
+        typedef ci::LazyList< gc_type
+            , member_item_type
+            ,ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::less< less<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+                , ci::opt::back_off< cds::backoff::pause >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListLazySet_NoGC, member_cmpmix )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<member_item_type> less;
+            typedef cmp<member_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, member_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::split_list::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::SplitListSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListLazySet_NoGC, member_mutex )
+    {
+        struct list_traits : public ci::lazy_list::traits
+        {
+            typedef ci::lazy_list::member_hook< offsetof( member_mutex_item_type, hMember ), ci::opt::gc<gc_type>, ci::opt::lock_type<std::mutex>> hook;
+            typedef base_class::less<member_mutex_item_type> less;
+            typedef cmp<member_mutex_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::LazyList< gc_type, member_mutex_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::split_list::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::SplitListSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/intrusive-set/intrusive_split_lazy_rcu_gpb.cpp b/test/unit/intrusive-set/intrusive_split_lazy_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..5bdac58
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_intrusive_split_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, IntrusiveSplitLazySet, rcu_implementation );
diff --git a/test/unit/intrusive-set/intrusive_split_lazy_rcu_gpi.cpp b/test/unit/intrusive-set/intrusive_split_lazy_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..2008d87
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_intrusive_split_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, IntrusiveSplitLazySet, rcu_implementation );
diff --git a/test/unit/intrusive-set/intrusive_split_lazy_rcu_gpt.cpp b/test/unit/intrusive-set/intrusive_split_lazy_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..ae833f1
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_intrusive_split_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, IntrusiveSplitLazySet, rcu_implementation );
diff --git a/test/unit/intrusive-set/intrusive_split_lazy_rcu_shb.cpp b/test/unit/intrusive-set/intrusive_split_lazy_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..3968e5d
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_intrusive_split_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, IntrusiveSplitLazySet, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/intrusive-set/intrusive_split_lazy_rcu_sht.cpp b/test/unit/intrusive-set/intrusive_split_lazy_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..afa910c
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_intrusive_split_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, IntrusiveSplitLazySet, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/intrusive-set/intrusive_split_michael_dhp.cpp b/test/unit/intrusive-set/intrusive_split_michael_dhp.cpp
new file mode 100644 (file)
index 0000000..5d067b7
--- /dev/null
@@ -0,0 +1,208 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_set_hp.h"
+
+#include <cds/intrusive/michael_list_dhp.h>
+#include <cds/intrusive/split_list.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::DHP gc_type;
+
+    class IntrusiveSplitListSet_DHP : public cds_test::intrusive_set_hp
+    {
+    protected:
+        typedef cds_test::intrusive_set_hp base_class;
+
+    protected:
+        typedef typename base_class::base_int_item< ci::split_list::node< ci::michael_list::node<gc_type>>>   base_item_type;
+        typedef typename base_class::member_int_item< ci::split_list::node< ci::michael_list::node<gc_type>>> member_item_type;
+
+        void SetUp()
+        {
+            struct list_traits : public ci::michael_list::traits
+            {
+                typedef ci::michael_list::base_hook< ci::opt::gc<gc_type>> hook;
+            };
+            typedef ci::MichaelList< gc_type, base_item_type, list_traits > list_type;
+            typedef ci::SplitListSet< gc_type, list_type >   set_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+    };
+
+
+    TEST_F( IntrusiveSplitListSet_DHP, base_cmp )
+    {
+        typedef ci::MichaelList< gc_type
+            , base_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::base_hook< ci::opt::gc< gc_type > > >
+                ,ci::opt::compare< cmp<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListSet_DHP, base_less )
+    {
+        typedef ci::MichaelList< gc_type
+            , base_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::base_hook< ci::opt::gc< gc_type >>>
+                ,ci::opt::less< less<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+                ,ci::opt::item_counter< cds::atomicity::item_counter >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListSet_DHP, base_cmpmix )
+    {
+        struct list_traits : public ci::michael_list::traits
+        {
+            typedef ci::michael_list::base_hook< ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<base_item_type> less;
+            typedef cmp<base_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::MichaelList< gc_type, base_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::split_list::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+            typedef ci::split_list::stat<> stat;
+        };
+        typedef ci::SplitListSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+
+    TEST_F( IntrusiveSplitListSet_DHP, member_cmp )
+    {
+        typedef ci::MichaelList< gc_type
+            ,member_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::compare< cmp<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        >    bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListSet_DHP, member_less )
+    {
+        typedef ci::MichaelList< gc_type
+            , member_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::less< less<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+                ,ci::opt::back_off< cds::backoff::pause >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListSet_DHP, member_cmpmix )
+    {
+        struct list_traits : public ci::michael_list::traits
+        {
+            typedef ci::michael_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<member_item_type> less;
+            typedef cmp<member_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::MichaelList< gc_type, member_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::split_list::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::SplitListSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/intrusive-set/intrusive_split_michael_hp.cpp b/test/unit/intrusive-set/intrusive_split_michael_hp.cpp
new file mode 100644 (file)
index 0000000..c904eeb
--- /dev/null
@@ -0,0 +1,209 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_set_hp.h"
+
+#include <cds/intrusive/michael_list_hp.h>
+#include <cds/intrusive/split_list.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::HP gc_type;
+
+    class IntrusiveSplitListSet_HP : public cds_test::intrusive_set_hp
+    {
+    protected:
+        typedef cds_test::intrusive_set_hp base_class;
+
+    protected:
+        typedef typename base_class::base_int_item< ci::split_list::node< ci::michael_list::node<gc_type>>>   base_item_type;
+        typedef typename base_class::member_int_item< ci::split_list::node< ci::michael_list::node<gc_type>>> member_item_type;
+
+        void SetUp()
+        {
+            struct list_traits : public ci::michael_list::traits
+            {
+                typedef ci::michael_list::base_hook< ci::opt::gc<gc_type>> hook;
+            };
+            typedef ci::MichaelList< gc_type, base_item_type, list_traits > list_type;
+            typedef ci::SplitListSet< gc_type, list_type >   set_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( set_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+
+    TEST_F( IntrusiveSplitListSet_HP, base_cmp )
+    {
+        typedef ci::MichaelList< gc_type
+            , base_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::base_hook< ci::opt::gc< gc_type > > >
+                ,ci::opt::compare< cmp<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListSet_HP, base_less )
+    {
+        typedef ci::MichaelList< gc_type
+            , base_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::base_hook< ci::opt::gc< gc_type >>>
+                ,ci::opt::less< less<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+                ,ci::opt::item_counter< cds::atomicity::item_counter >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListSet_HP, base_cmpmix )
+    {
+        struct list_traits : public ci::michael_list::traits
+        {
+            typedef ci::michael_list::base_hook< ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<base_item_type> less;
+            typedef cmp<base_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::MichaelList< gc_type, base_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::split_list::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+            typedef ci::split_list::stat<> stat;
+        };
+        typedef ci::SplitListSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+
+    TEST_F( IntrusiveSplitListSet_HP, member_cmp )
+    {
+        typedef ci::MichaelList< gc_type
+            ,member_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::compare< cmp<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        >    bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListSet_HP, member_less )
+    {
+        typedef ci::MichaelList< gc_type
+            , member_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::less< less<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+                ,ci::opt::back_off< cds::backoff::pause >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListSet_HP, member_cmpmix )
+    {
+        struct list_traits : public ci::michael_list::traits
+        {
+            typedef ci::michael_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<member_item_type> less;
+            typedef cmp<member_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::MichaelList< gc_type, member_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::split_list::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::SplitListSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/intrusive-set/intrusive_split_michael_nogc.cpp b/test/unit/intrusive-set/intrusive_split_michael_nogc.cpp
new file mode 100644 (file)
index 0000000..ed7c0c3
--- /dev/null
@@ -0,0 +1,195 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_set_nogc.h"
+
+#include <cds/intrusive/michael_list_nogc.h>
+#include <cds/intrusive/split_list_nogc.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::nogc gc_type;
+
+    class IntrusiveSplitListSet_NoGC : public cds_test::intrusive_set_nogc
+    {
+    protected:
+        typedef cds_test::intrusive_set_nogc base_class;
+
+    protected:
+        typedef typename base_class::base_int_item< ci::split_list::node< ci::michael_list::node<gc_type>>>   base_item_type;
+        typedef typename base_class::member_int_item< ci::split_list::node< ci::michael_list::node<gc_type>>> member_item_type;
+
+        //void SetUp()
+        //{}
+
+        //void TearDown()
+        //{}
+    };
+
+
+    TEST_F( IntrusiveSplitListSet_NoGC, base_cmp )
+    {
+        typedef ci::MichaelList< gc_type
+            , base_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::base_hook< ci::opt::gc< gc_type > > >
+                ,ci::opt::compare< cmp<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListSet_NoGC, base_less )
+    {
+        typedef ci::MichaelList< gc_type
+            , base_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::base_hook< ci::opt::gc< gc_type >>>
+                ,ci::opt::less< less<base_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+                , ci::opt::item_counter< cds::atomicity::item_counter >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListSet_NoGC, base_cmpmix )
+    {
+        struct list_traits : public ci::michael_list::traits
+        {
+            typedef ci::michael_list::base_hook< ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<base_item_type> less;
+            typedef cmp<base_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::MichaelList< gc_type, base_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::split_list::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+            typedef ci::split_list::stat<> stat;
+        };
+        typedef ci::SplitListSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+
+    TEST_F( IntrusiveSplitListSet_NoGC, member_cmp )
+    {
+        typedef ci::MichaelList< gc_type
+            ,member_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::compare< cmp<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        >    bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListSet_NoGC, member_less )
+    {
+        typedef ci::MichaelList< gc_type
+            , member_item_type
+            ,ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                > >
+                ,ci::opt::less< less<member_item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > bucket_type;
+
+        typedef ci::SplitListSet< gc_type, bucket_type,
+            ci::split_list::make_traits<
+                ci::opt::hash< hash_int >
+                , ci::opt::back_off< cds::backoff::pause >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( IntrusiveSplitListSet_NoGC, member_cmpmix )
+    {
+        struct list_traits : public ci::michael_list::traits
+        {
+            typedef ci::michael_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc<gc_type>> hook;
+            typedef base_class::less<member_item_type> less;
+            typedef cmp<member_item_type> compare;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::MichaelList< gc_type, member_item_type, list_traits > bucket_type;
+
+        struct set_traits : public ci::split_list::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef ci::SplitListSet< gc_type, bucket_type, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/intrusive-set/intrusive_split_michael_rcu_gpb.cpp b/test/unit/intrusive-set/intrusive_split_michael_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..bf92396
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_intrusive_split_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, IntrusiveSplitMichaelSet, rcu_implementation );
diff --git a/test/unit/intrusive-set/intrusive_split_michael_rcu_gpi.cpp b/test/unit/intrusive-set/intrusive_split_michael_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..a62aa08
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_intrusive_split_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, IntrusiveSplitMichaelSet, rcu_implementation );
diff --git a/test/unit/intrusive-set/intrusive_split_michael_rcu_gpt.cpp b/test/unit/intrusive-set/intrusive_split_michael_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..56a7bc1
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_intrusive_split_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, IntrusiveSplitMichaelSet, rcu_implementation );
diff --git a/test/unit/intrusive-set/intrusive_split_michael_rcu_shb.cpp b/test/unit/intrusive-set/intrusive_split_michael_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..81f4538
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_intrusive_split_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, IntrusiveSplitMichaelSet, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/intrusive-set/intrusive_split_michael_rcu_sht.cpp b/test/unit/intrusive-set/intrusive_split_michael_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..cb646b9
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_intrusive_split_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, IntrusiveSplitMichaelSet, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/intrusive-set/test_intrusive_feldman_hashset.h b/test/unit/intrusive-set/test_intrusive_feldman_hashset.h
new file mode 100644 (file)
index 0000000..bb3ae72
--- /dev/null
@@ -0,0 +1,313 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TEST_INTRUSIVE_FELDMAN_HASHSET_H
+#define CDSUNIT_SET_TEST_INTRUSIVE_FELDMAN_HASHSET_H
+
+#include <cds_test/check_size.h>
+#include <cds_test/fixture.h>
+
+#include <cds/opt/hash.h>
+#include <functional>   // ref
+
+// forward declaration
+namespace cds { namespace intrusive {}}
+namespace ci = cds::intrusive;
+
+namespace cds_test {
+    class intrusive_feldman_hashset: public fixture
+    {
+    public:
+        struct stat
+        {
+            unsigned int nDisposeCount  ;   // count of disposer calling
+            unsigned int nFindCount     ;   // count of find-functor calling
+            unsigned int nInsertCount   ;
+            mutable unsigned int nEraseCount;
+
+            stat()
+            {
+                clear_stat();
+            }
+
+            void clear_stat()
+            {
+                memset( this, 0, sizeof( *this ) );
+            }
+        };
+
+        struct int_item: public stat
+        {
+            int nKey;
+            int nVal;
+
+            int_item()
+            {}
+
+            explicit int_item( int key )
+                : nKey( key )
+                , nVal( key )
+            {}
+
+            int_item(int key, int val)
+                : nKey( key )
+                , nVal(val)
+            {}
+
+            int_item( int_item const& v )
+                : stat()
+                , nKey( v.nKey )
+                , nVal( v.nVal )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        struct hash_accessor {
+            int operator()( int_item const& v ) const
+            {
+                return v.key();
+            }
+        };
+
+        struct simple_item_counter {
+            size_t  m_nCount;
+
+            simple_item_counter()
+                : m_nCount(0)
+            {}
+
+            size_t operator ++()
+            {
+                return ++m_nCount;
+            }
+
+            size_t operator --()
+            {
+                return --m_nCount;
+            }
+
+            void reset()
+            {
+                m_nCount = 0;
+            }
+
+            operator size_t() const
+            {
+                return m_nCount;
+            }
+        };
+
+        struct cmp {
+            int operator ()( int lhs, int rhs ) const
+            {
+                if ( lhs < rhs )
+                    return -1;
+                return lhs > rhs ? 1 : 0;
+            }
+        };
+
+        struct mock_disposer
+        {
+            template <typename T>
+            void operator ()( T * p )
+            {
+                ++p->nDisposeCount;
+            }
+        };
+
+    protected:
+        template <class Set>
+        void test( Set& s )
+        {
+            // Precondition: set is empty
+            // Postcondition: set is empty
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+            size_t const nSetSize = std::max( s.head_size() * 2, static_cast<size_t>(100) );
+
+            typedef typename Set::value_type value_type;
+
+            std::vector< value_type > data;
+            std::vector< size_t> indices;
+            data.reserve( nSetSize );
+            indices.reserve( nSetSize );
+            for ( size_t key = 0; key < nSetSize; ++key ) {
+                data.push_back( value_type( static_cast<int>( key )));
+                indices.push_back( key );
+            }
+            shuffle( indices.begin(), indices.end() );
+
+            // insert/find
+            for ( auto idx : indices ) {
+                auto& i = data[ idx ];
+
+                ASSERT_FALSE( s.contains( i.nKey ));
+                ASSERT_FALSE( s.find( i.nKey, []( value_type& ) {} ));
+
+                std::pair<bool, bool> updResult;
+
+                updResult = s.update( i, false );
+                EXPECT_FALSE( updResult.first );
+                EXPECT_FALSE( updResult.second );
+
+                switch ( i.key() % 3 ) {
+                case 0:
+                    ASSERT_TRUE( s.insert( i ));
+                    ASSERT_FALSE( s.insert( i ));
+                    updResult = s.update( i, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+                    break;
+                case 1:
+                    EXPECT_EQ( i.nInsertCount, 0 );
+                    ASSERT_TRUE( s.insert( i, []( value_type& v ) { ++v.nInsertCount;} ));
+                    EXPECT_EQ( i.nInsertCount, 1 );
+                    ASSERT_FALSE( s.insert( i, []( value_type& v ) { ++v.nInsertCount;} ) );
+                    EXPECT_EQ( i.nInsertCount, 1 );
+                    i.nInsertCount = 0;
+                    break;
+                case 2:
+                    updResult = s.update( i );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_TRUE( updResult.second );
+                    break;
+                }
+
+                ASSERT_TRUE( s.contains( i.nKey ) );
+                EXPECT_EQ( i.nFindCount, 0 );
+                ASSERT_TRUE( s.find( i.nKey, []( value_type& v ) { ++v.nFindCount; } ));
+                EXPECT_EQ( i.nFindCount, 1 );
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            std::for_each( data.begin(), data.end(), []( value_type& v ) { v.clear_stat(); });
+
+            // get_level_statistics
+            {
+                std::vector< typename Set::level_statistics > level_stat;
+                s.get_level_statistics( level_stat );
+                EXPECT_GT( level_stat.size(), 0 );
+            }
+
+            // erase
+            shuffle( indices.begin(), indices.end() );
+            for ( auto idx : indices ) {
+                auto& i = data[ idx ];
+
+                ASSERT_TRUE( s.contains( i.nKey ) );
+                EXPECT_EQ( i.nFindCount, 0 );
+                ASSERT_TRUE( s.find( i.nKey, []( value_type& v ) { ++v.nFindCount; } ) );
+                EXPECT_EQ( i.nFindCount, 1 );
+
+                value_type v( i );
+                switch ( i.key() % 3 ) {
+                case 0:
+                    ASSERT_FALSE( s.unlink( v ));
+                    ASSERT_TRUE( s.unlink( i ));
+                    ASSERT_FALSE( s.unlink( i ) );
+                    break;
+                case 1:
+                    ASSERT_TRUE( s.erase( i.key()));
+                    ASSERT_FALSE( s.erase( i.key() ) );
+                    break;
+                case 2:
+                    EXPECT_EQ( i.nEraseCount, 0 );
+                    ASSERT_TRUE( s.erase( v.key(), []( value_type& val ) { ++val.nEraseCount; } ));
+                    EXPECT_EQ( i.nEraseCount, 1 );
+                    ASSERT_FALSE( s.erase( v.key(), []( value_type& val ) { ++val.nEraseCount; } ));
+                    EXPECT_EQ( i.nEraseCount, 1 );
+                    break;
+                }
+
+                ASSERT_FALSE( s.contains( i.nKey ));
+                ASSERT_FALSE( s.find( i.nKey, []( value_type const& ) {} ));
+            }
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            // Force retiring cycle
+            Set::gc::force_dispose();
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nDisposeCount, 1 );
+            }
+
+            // clear
+            for ( auto& i : data ) {
+                i.clear_stat();
+                ASSERT_TRUE( s.insert( i ));
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            // Forward iterator test
+            for ( auto it = s.begin(); it != s.end(); ++it ) {
+                ++it->nFindCount;
+            }
+            for ( auto it = s.cbegin(); it != s.cend(); ++it ) {
+                EXPECT_EQ( it->nFindCount, 1 );
+            }
+
+            // Reverse iterator test
+            for ( auto it = s.rbegin(); it != s.rend(); ++it ) {
+                ++it->nFindCount;
+            }
+            for ( auto it = s.crbegin(); it != s.crend(); ++it ) {
+                EXPECT_EQ( it->nFindCount, 2 );
+            }
+
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nFindCount, 2 );
+            }
+
+            // clear test
+            s.clear();
+
+            ASSERT_TRUE( s.empty());
+            ASSERT_CONTAINER_SIZE( s, 0 );
+            ASSERT_TRUE( s.begin() == s.end() );
+            ASSERT_TRUE( s.cbegin() == s.cend() );
+
+            // Force retiring cycle
+            Set::gc::force_dispose();
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nDisposeCount, 1 );
+            }
+        }
+    };
+
+} // namespace cds_test
+
+#endif // #ifndef CDSUNIT_SET_TEST_INTRUSIVE_FELDMAN_HASHSET_H
diff --git a/test/unit/intrusive-set/test_intrusive_feldman_hashset_hp.h b/test/unit/intrusive-set/test_intrusive_feldman_hashset_hp.h
new file mode 100644 (file)
index 0000000..17dd9ec
--- /dev/null
@@ -0,0 +1,165 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TEST_INTRUSIVE_FELDMAN_HASHSET_HP_H
+#define CDSUNIT_SET_TEST_INTRUSIVE_FELDMAN_HASHSET_HP_H
+
+#include "test_intrusive_feldman_hashset.h"
+
+namespace cds_test {
+
+    class intrusive_feldman_hashset_hp: public intrusive_feldman_hashset
+    {
+        typedef intrusive_feldman_hashset base_class;
+
+    protected:
+
+        template <class Set>
+        void test( Set& s )
+        {
+            // Precondition: set is empty
+            // Postcondition: set is empty
+
+            base_class::test( s );
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            typedef typename Set::value_type value_type;
+            size_t const nSetSize = std::max( s.head_size() * 2, static_cast<size_t>( 100 ));
+
+            std::vector< value_type > data;
+            std::vector< size_t> indices;
+            data.reserve( nSetSize );
+            indices.reserve( nSetSize );
+            for ( size_t key = 0; key < nSetSize; ++key ) {
+                data.push_back( value_type( static_cast<int>(key) ) );
+                indices.push_back( key );
+            }
+            shuffle( indices.begin(), indices.end() );
+
+            typename Set::guarded_ptr gp;
+
+            // get/extract from empty set
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                gp = s.get( i.key() );
+                ASSERT_TRUE( !gp );
+
+                gp = s.extract( i.key());
+                ASSERT_TRUE( !gp );
+            }
+
+            // fill set
+            for ( auto& i : data ) {
+                i.nDisposeCount = 0;
+                ASSERT_TRUE( s.insert( i ) );
+            }
+
+            // get/extract
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                EXPECT_EQ( i.nFindCount, 0 );
+                gp = s.get( i.key() );
+                ASSERT_FALSE( !gp );
+                ++gp->nFindCount;
+                EXPECT_EQ( i.nFindCount, 1 );
+
+                gp = s.extract( i.key());
+                ASSERT_FALSE( !gp );
+                ++gp->nEraseCount;
+                EXPECT_EQ( i.nEraseCount, 1 );
+
+                gp = s.extract( i.key() );
+                ASSERT_TRUE( !gp );
+
+                gp = s.get( i.key() );
+                ASSERT_TRUE( !gp );
+            }
+            gp.release();
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            // Force retiring cycle
+            Set::gc::force_dispose();
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nDisposeCount, 1 );
+            }
+
+            // erase_at( iterator )
+            for ( auto& i : data ) {
+                i.clear_stat();
+                ASSERT_TRUE( s.insert( i ) );
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            for ( auto it = s.begin(); it != s.end(); ++it ) {
+                ASSERT_TRUE( s.erase_at( it ) );
+                ASSERT_FALSE( s.erase_at( it ) );
+            }
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            // Force retiring cycle
+            Set::gc::force_dispose();
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nDisposeCount, 1 );
+            }
+
+            // erase_at( reverse_iterator )
+            for ( auto& i : data ) {
+                i.clear_stat();
+                ASSERT_TRUE( s.insert( i ) );
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            for ( auto it = s.rbegin(); it != s.rend(); ++it ) {
+                ASSERT_TRUE( s.erase_at( it ) );
+                ASSERT_FALSE( s.erase_at( it ) );
+            }
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            // Force retiring cycle
+            Set::gc::force_dispose();
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nDisposeCount, 1 );
+            }
+        }
+    };
+
+} // namespace cds_test
+
+#endif // #ifndef CDSUNIT_SET_TEST_INTRUSIVE_FELDMAN_HASHSET_HP_H
diff --git a/test/unit/intrusive-set/test_intrusive_feldman_hashset_rcu.h b/test/unit/intrusive-set/test_intrusive_feldman_hashset_rcu.h
new file mode 100644 (file)
index 0000000..a8db543
--- /dev/null
@@ -0,0 +1,233 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TEST_INTRUSIVE_FELDMAN_HASHSET_RCU_H
+#define CDSUNIT_SET_TEST_INTRUSIVE_FELDMAN_HASHSET_RCU_H
+
+#include "test_intrusive_feldman_hashset.h"
+
+#include <cds/intrusive/feldman_hashset_rcu.h>
+
+namespace ci = cds::intrusive;
+namespace co = cds::opt;
+
+template <class RCU>
+class IntrusiveFeldmanHashSet : public cds_test::intrusive_feldman_hashset
+{
+    typedef cds_test::intrusive_feldman_hashset base_class;
+
+protected:
+    typedef cds::urcu::gc<RCU> rcu_type;
+
+    template <class Set>
+    void test( Set& s )
+    {
+        // Precondition: set is empty
+        // Postcondition: set is empty
+
+        base_class::test( s );
+
+        ASSERT_TRUE( s.empty() );
+        ASSERT_CONTAINER_SIZE( s, 0 );
+
+        typedef typename Set::value_type value_type;
+        size_t const nSetSize = std::max( s.head_size() * 2, static_cast<size_t>(100) );
+
+        std::vector< value_type > data;
+        std::vector< size_t> indices;
+        data.reserve( nSetSize );
+        indices.reserve( nSetSize );
+        for ( size_t key = 0; key < nSetSize; ++key ) {
+            data.push_back( value_type( static_cast<int>(key) ) );
+            indices.push_back( key );
+        }
+        shuffle( indices.begin(), indices.end() );
+
+        typename Set::exempt_ptr xp;
+        value_type * rp;
+        typedef typename Set::rcu_lock rcu_lock;
+
+        // get/extract from empty set
+        for ( auto idx : indices ) {
+            auto& i = data[idx];
+
+            {
+                rcu_lock l;
+                rp = s.get( i.key() );
+                ASSERT_TRUE( !rp );
+            }
+
+            xp = s.extract( i.key() );
+            ASSERT_TRUE( !xp );
+        }
+
+        // fill set
+        for ( auto& i : data ) {
+            i.nDisposeCount = 0;
+            ASSERT_TRUE( s.insert( i ) );
+        }
+
+        // get/extract
+        for ( auto idx : indices ) {
+            auto& i = data[idx];
+
+            {
+                rcu_lock l;
+                EXPECT_EQ( i.nFindCount, 0 );
+                rp = s.get( i.key() );
+                ASSERT_FALSE( !rp );
+                ++rp->nFindCount;
+                EXPECT_EQ( i.nFindCount, 1 );
+            }
+
+            EXPECT_EQ( i.nEraseCount, 0 );
+            xp = s.extract( i.key());
+            ASSERT_FALSE( !xp );
+            ++xp->nEraseCount;
+            EXPECT_EQ( i.nEraseCount, 1 );
+
+            xp = s.extract( i.key() );
+            ASSERT_TRUE( !xp );
+        }
+
+        ASSERT_TRUE( s.empty() );
+        ASSERT_CONTAINER_SIZE( s, 0 );
+
+        // Force retiring cycle
+        Set::gc::force_dispose();
+        for ( auto& i : data ) {
+            EXPECT_EQ( i.nDisposeCount, 1 );
+        }
+    }
+
+    void SetUp()
+    {
+        RCU::Construct();
+        cds::threading::Manager::attachThread();
+    }
+
+    void TearDown()
+    {
+        cds::threading::Manager::detachThread();
+        RCU::Destruct();
+    }
+};
+
+TYPED_TEST_CASE_P( IntrusiveFeldmanHashSet );
+
+TYPED_TEST_P( IntrusiveFeldmanHashSet, compare )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+
+    struct traits : public ci::feldman_hashset::traits
+    {
+        typedef typename TestFixture::hash_accessor hash_accessor;
+        typedef typename TestFixture::cmp compare;
+        typedef typename TestFixture::mock_disposer disposer;
+    };
+
+    typedef ci::FeldmanHashSet< rcu_type, typename TestFixture::int_item, traits > set_type;
+
+    set_type s;
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveFeldmanHashSet, less )
+{
+    typedef ci::FeldmanHashSet< typename TestFixture::rcu_type, typename TestFixture::int_item,
+        typename ci::feldman_hashset::make_traits<
+            ci::feldman_hashset::hash_accessor< typename TestFixture::hash_accessor >
+            , ci::opt::less< std::less<int>>
+            , ci::opt::disposer< typename TestFixture::mock_disposer>
+        >::type
+    > set_type;
+
+    set_type s( 5, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveFeldmanHashSet, cmpmix )
+{
+    struct traits : public ci::feldman_hashset::traits
+    {
+        typedef typename TestFixture::hash_accessor hash_accessor;
+        typedef typename TestFixture::cmp compare;
+        typedef std::less<int> less;
+        typedef typename TestFixture::mock_disposer disposer;
+        typedef typename TestFixture::simple_item_counter item_counter;
+    };
+
+    typedef ci::FeldmanHashSet< typename TestFixture::rcu_type, typename TestFixture::int_item, traits > set_type;
+
+    set_type s( 3, 4 );
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveFeldmanHashSet, backoff )
+{
+    struct traits : public ci::feldman_hashset::traits
+    {
+        typedef typename TestFixture::hash_accessor hash_accessor;
+        typedef typename TestFixture::cmp compare;
+        typedef typename TestFixture::mock_disposer disposer;
+        typedef cds::backoff::empty back_off;
+        typedef ci::opt::v::sequential_consistent memory_model;
+    };
+
+    typedef ci::FeldmanHashSet< typename TestFixture::rcu_type, typename TestFixture::int_item, traits > set_type;
+
+    set_type s( 8, 3 );
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveFeldmanHashSet, stat )
+{
+    struct traits : public ci::feldman_hashset::traits
+    {
+        typedef typename TestFixture::hash_accessor hash_accessor;
+        typedef typename TestFixture::cmp compare;
+        typedef typename TestFixture::mock_disposer disposer;
+        typedef ci::feldman_hashset::stat<> stat;
+    };
+
+    typedef ci::FeldmanHashSet< typename TestFixture::rcu_type, typename TestFixture::int_item, traits > set_type;
+
+    set_type s( 8, 3 );
+    this->test( s );
+}
+
+// GCC 5: All test names should be written on single line, otherwise a runtime error will be encountered like as
+// "No test named <test_name> can be found in this test case"
+REGISTER_TYPED_TEST_CASE_P( IntrusiveFeldmanHashSet,
+    compare, less, cmpmix, backoff, stat
+    );
+
+
+#endif // #ifndef CDSUNIT_SET_TEST_INTRUSIVE_FELDMAN_HASHSET_RCU_H
diff --git a/test/unit/intrusive-set/test_intrusive_michael_lazy_rcu.h b/test/unit/intrusive-set/test_intrusive_michael_lazy_rcu.h
new file mode 100644 (file)
index 0000000..c32fdb6
--- /dev/null
@@ -0,0 +1,298 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_SET_TEST_INTRUSIVE_MICHAEL_LAZY_RCU_H
+#define CDSUNIT_SET_TEST_INTRUSIVE_MICHAEL_LAZY_RCU_H
+
+#include "test_intrusive_set_rcu.h"
+#include <cds/intrusive/lazy_list_rcu.h>
+#include <cds/intrusive/michael_set_rcu.h>
+
+namespace ci = cds::intrusive;
+
+template <class RCU>
+class IntrusiveMichaelLazySet: public cds_test::intrusive_set_rcu
+{
+    typedef cds_test::intrusive_set_rcu base_class;
+public:
+    typedef cds::urcu::gc<RCU> rcu_type;
+    typedef typename base_class::base_int_item< ci::lazy_list::node<rcu_type>>   base_item_type;
+    typedef typename base_class::base_int_item< ci::lazy_list::node<rcu_type, std::mutex>>   base_mutex_item_type;
+    typedef typename base_class::member_int_item< ci::lazy_list::node<rcu_type>> member_item_type;
+    typedef typename base_class::member_int_item< ci::lazy_list::node<rcu_type, std::mutex>> member_mutex_item_type;
+
+protected:
+    void SetUp()
+    {
+        RCU::Construct();
+        cds::threading::Manager::attachThread();
+    }
+
+    void TearDown()
+    {
+        cds::threading::Manager::detachThread();
+        RCU::Destruct();
+    }
+};
+
+TYPED_TEST_CASE_P( IntrusiveMichaelLazySet );
+
+TYPED_TEST_P( IntrusiveMichaelLazySet, base_cmp )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::base_item_type base_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template cmp<base_item_type> cmp;
+    typedef typename TestFixture::hash_int hash_int;
+
+    typedef ci::LazyList< rcu_type
+        , base_item_type
+        , typename ci::lazy_list::make_traits<
+            ci::opt::hook< ci::lazy_list::base_hook< ci::opt::gc< rcu_type > > >
+            , ci::opt::compare< cmp >
+            , ci::opt::disposer< mock_disposer >
+        >::type
+    > bucket_type;
+
+    typedef ci::MichaelHashSet< rcu_type, bucket_type,
+        typename ci::michael_set::make_traits<
+            ci::opt::hash< hash_int >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveMichaelLazySet, base_less )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::base_item_type base_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template less<base_item_type> less;
+    typedef typename TestFixture::hash_int hash_int;
+
+    typedef ci::LazyList< rcu_type
+        , base_item_type
+        , typename ci::lazy_list::make_traits<
+            ci::opt::hook< ci::lazy_list::base_hook< ci::opt::gc< rcu_type >>>
+            , ci::opt::less< less >
+            , ci::opt::disposer< mock_disposer >
+        >::type
+    > bucket_type;
+
+    typedef ci::MichaelHashSet< rcu_type, bucket_type,
+        typename ci::michael_set::make_traits<
+            ci::opt::hash< hash_int >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveMichaelLazySet, base_cmpmix )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::base_item_type base_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::hash_int hash_int;
+
+    struct list_traits : public ci::lazy_list::traits
+    {
+        typedef ci::lazy_list::base_hook< ci::opt::gc<rcu_type>> hook;
+        typedef typename TestFixture::template less<base_item_type> less;
+        typedef typename TestFixture::template cmp<base_item_type> compare;
+        typedef mock_disposer disposer;
+    };
+    typedef ci::LazyList< rcu_type, base_item_type, list_traits > bucket_type;
+
+    struct set_traits : public ci::michael_set::traits
+    {
+        typedef hash_int hash;
+        typedef typename TestFixture::simple_item_counter item_counter;
+    };
+    typedef ci::MichaelHashSet< rcu_type, bucket_type, set_traits > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveMichaelLazySet, base_mutex )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::base_mutex_item_type base_mutex_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::hash_int hash_int;
+
+    struct list_traits : public ci::lazy_list::traits
+    {
+        typedef ci::lazy_list::base_hook< ci::opt::gc<rcu_type>, ci::opt::lock_type<std::mutex>> hook;
+        typedef typename TestFixture::template less<base_mutex_item_type> less;
+        typedef typename TestFixture::template cmp<base_mutex_item_type> compare;
+        typedef mock_disposer disposer;
+    };
+    typedef ci::LazyList< rcu_type, base_mutex_item_type, list_traits > bucket_type;
+
+    struct set_traits : public ci::michael_set::traits
+    {
+        typedef hash_int hash;
+        typedef typename TestFixture::simple_item_counter item_counter;
+    };
+    typedef ci::MichaelHashSet< rcu_type, bucket_type, set_traits > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+
+TYPED_TEST_P( IntrusiveMichaelLazySet, member_cmp )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::member_item_type member_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template cmp<member_item_type> cmp;
+    typedef typename TestFixture::hash_int hash_int;
+
+    typedef ci::LazyList< rcu_type
+        , member_item_type
+        , typename ci::lazy_list::make_traits<
+            ci::opt::hook< ci::lazy_list::member_hook<
+                offsetof( member_item_type, hMember ),
+                ci::opt::gc<rcu_type>
+            >>
+            , ci::opt::compare< cmp >
+            , ci::opt::disposer< mock_disposer >
+        >::type
+    >    bucket_type;
+
+    typedef ci::MichaelHashSet< rcu_type, bucket_type,
+        typename ci::michael_set::make_traits<
+            ci::opt::hash< hash_int >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveMichaelLazySet, member_less )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::member_item_type member_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template less<member_item_type> less;
+    typedef typename TestFixture::hash_int hash_int;
+
+    typedef ci::LazyList< rcu_type
+        , member_item_type
+        , typename ci::lazy_list::make_traits<
+            ci::opt::hook< ci::lazy_list::member_hook<
+                offsetof( member_item_type, hMember ),
+                ci::opt::gc<rcu_type>
+            > >
+            , ci::opt::less< less >
+            , ci::opt::disposer< mock_disposer >
+        >::type
+    > bucket_type;
+
+    typedef ci::MichaelHashSet< rcu_type, bucket_type,
+        typename ci::michael_set::make_traits<
+            ci::opt::hash< hash_int >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveMichaelLazySet, member_cmpmix )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::member_item_type member_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::hash_int hash_int;
+
+    struct list_traits : public ci::lazy_list::traits
+    {
+        typedef ci::lazy_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc<rcu_type>> hook;
+        typedef typename TestFixture::template less<member_item_type> less;
+        typedef typename TestFixture::template cmp<member_item_type> compare;
+        typedef mock_disposer disposer;
+    };
+    typedef ci::LazyList< rcu_type, member_item_type, list_traits > bucket_type;
+
+    struct set_traits : public ci::michael_set::traits
+    {
+        typedef hash_int hash;
+        typedef typename TestFixture::simple_item_counter item_counter;
+    };
+    typedef ci::MichaelHashSet< rcu_type, bucket_type, set_traits > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveMichaelLazySet, member_mutex )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::member_mutex_item_type member_mutex_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::hash_int hash_int;
+
+    struct list_traits : public ci::lazy_list::traits
+    {
+        typedef ci::lazy_list::member_hook< offsetof( member_mutex_item_type, hMember ), ci::opt::gc<rcu_type>, ci::opt::lock_type<std::mutex>> hook;
+        typedef typename TestFixture::template less<member_mutex_item_type> less;
+        typedef typename TestFixture::template cmp<member_mutex_item_type> compare;
+        typedef mock_disposer disposer;
+    };
+    typedef ci::LazyList< rcu_type, member_mutex_item_type, list_traits > bucket_type;
+
+    struct set_traits : public ci::michael_set::traits
+    {
+        typedef hash_int hash;
+        typedef typename TestFixture::simple_item_counter item_counter;
+    };
+    typedef ci::MichaelHashSet< rcu_type, bucket_type, set_traits > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+
+// GCC 5: All test names should be written on single line, otherwise a runtime error will be encountered like as
+// "No test named <test_name> can be found in this test case"
+REGISTER_TYPED_TEST_CASE_P( IntrusiveMichaelLazySet,
+    base_cmp, base_less, base_cmpmix, base_mutex, member_cmp, member_less, member_cmpmix, member_mutex
+);
+
+
+#endif // CDSUNIT_SET_TEST_INTRUSIVE_MICHAEL_LAZY_RCU_H
\ No newline at end of file
diff --git a/test/unit/intrusive-set/test_intrusive_michael_michael_rcu.h b/test/unit/intrusive-set/test_intrusive_michael_michael_rcu.h
new file mode 100644 (file)
index 0000000..199fef5
--- /dev/null
@@ -0,0 +1,243 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_SET_TEST_INTRUSIVE_MICHAEL_MICHAEL_RCU_H
+#define CDSUNIT_SET_TEST_INTRUSIVE_MICHAEL_MICHAEL_RCU_H
+
+#include "test_intrusive_set_rcu.h"
+#include <cds/intrusive/michael_list_rcu.h>
+#include <cds/intrusive/michael_set_rcu.h>
+
+namespace ci = cds::intrusive;
+
+template <class RCU>
+class IntrusiveMichaelSet: public cds_test::intrusive_set_rcu
+{
+    typedef cds_test::intrusive_set_rcu base_class;
+public:
+    typedef cds::urcu::gc<RCU> rcu_type;
+    typedef typename base_class::base_int_item< ci::michael_list::node<rcu_type>>   base_item_type;
+    typedef typename base_class::member_int_item< ci::michael_list::node<rcu_type>> member_item_type;
+
+protected:
+    void SetUp()
+    {
+        RCU::Construct();
+        cds::threading::Manager::attachThread();
+    }
+
+    void TearDown()
+    {
+        cds::threading::Manager::detachThread();
+        RCU::Destruct();
+    }
+};
+
+TYPED_TEST_CASE_P( IntrusiveMichaelSet );
+
+TYPED_TEST_P( IntrusiveMichaelSet, base_cmp )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::base_item_type base_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template cmp<base_item_type> cmp;
+    typedef typename TestFixture::hash_int hash_int;
+
+    typedef ci::MichaelList< rcu_type
+        , base_item_type
+        , typename ci::michael_list::make_traits<
+            ci::opt::hook< ci::michael_list::base_hook< ci::opt::gc< rcu_type > > >
+            , ci::opt::compare< cmp >
+            , ci::opt::disposer< mock_disposer >
+        >::type
+    > bucket_type;
+
+    typedef ci::MichaelHashSet< rcu_type, bucket_type,
+        typename ci::michael_set::make_traits<
+            ci::opt::hash< hash_int >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveMichaelSet, base_less )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::base_item_type base_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template less<base_item_type> less;
+    typedef typename TestFixture::hash_int hash_int;
+
+    typedef ci::MichaelList< rcu_type
+        , base_item_type
+        , typename ci::michael_list::make_traits<
+            ci::opt::hook< ci::michael_list::base_hook< ci::opt::gc< rcu_type >>>
+            , ci::opt::less< less >
+            , ci::opt::disposer< mock_disposer >
+        >::type
+    > bucket_type;
+
+    typedef ci::MichaelHashSet< rcu_type, bucket_type,
+        typename ci::michael_set::make_traits<
+            ci::opt::hash< hash_int >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveMichaelSet, base_cmpmix )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::base_item_type base_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::hash_int hash_int;
+
+    struct list_traits : public ci::michael_list::traits
+    {
+        typedef ci::michael_list::base_hook< ci::opt::gc<rcu_type>> hook;
+        typedef typename TestFixture::template less<base_item_type> less;
+        typedef typename TestFixture::template cmp<base_item_type> compare;
+        typedef mock_disposer disposer;
+    };
+    typedef ci::MichaelList< rcu_type, base_item_type, list_traits > bucket_type;
+
+    struct set_traits : public ci::michael_set::traits
+    {
+        typedef hash_int hash;
+        typedef typename TestFixture::simple_item_counter item_counter;
+    };
+    typedef ci::MichaelHashSet< rcu_type, bucket_type, set_traits > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+
+TYPED_TEST_P( IntrusiveMichaelSet, member_cmp )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::member_item_type member_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template cmp<member_item_type> cmp;
+    typedef typename TestFixture::hash_int hash_int;
+
+    typedef ci::MichaelList< rcu_type
+        , member_item_type
+        , typename ci::michael_list::make_traits<
+            ci::opt::hook< ci::michael_list::member_hook<
+                offsetof( member_item_type, hMember ),
+                ci::opt::gc<rcu_type>
+            >>
+            , ci::opt::compare< cmp >
+            , ci::opt::disposer< mock_disposer >
+        >::type
+    >    bucket_type;
+
+    typedef ci::MichaelHashSet< rcu_type, bucket_type,
+        typename ci::michael_set::make_traits<
+            ci::opt::hash< hash_int >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveMichaelSet, member_less )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::member_item_type member_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template less<member_item_type> less;
+    typedef typename TestFixture::hash_int hash_int;
+
+    typedef ci::MichaelList< rcu_type
+        , member_item_type
+        , typename ci::michael_list::make_traits<
+            ci::opt::hook< ci::michael_list::member_hook<
+                offsetof( member_item_type, hMember ),
+                ci::opt::gc<rcu_type>
+            > >
+            , ci::opt::less< less >
+            , ci::opt::disposer< mock_disposer >
+        >::type
+    > bucket_type;
+
+    typedef ci::MichaelHashSet< rcu_type, bucket_type,
+        typename ci::michael_set::make_traits<
+            ci::opt::hash< hash_int >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveMichaelSet, member_cmpmix )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::member_item_type member_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::hash_int hash_int;
+
+    struct list_traits : public ci::michael_list::traits
+    {
+        typedef ci::michael_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc<rcu_type>> hook;
+        typedef typename TestFixture::template less<member_item_type> less;
+        typedef typename TestFixture::template cmp<member_item_type> compare;
+        typedef mock_disposer disposer;
+    };
+    typedef ci::MichaelList< rcu_type, member_item_type, list_traits > bucket_type;
+
+    struct set_traits : public ci::michael_set::traits
+    {
+        typedef hash_int hash;
+        typedef typename TestFixture::simple_item_counter item_counter;
+    };
+    typedef ci::MichaelHashSet< rcu_type, bucket_type, set_traits > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+
+
+// GCC 5: All test names should be written on single line, otherwise a runtime error will be encountered like as
+// "No test named <test_name> can be found in this test case"
+REGISTER_TYPED_TEST_CASE_P( IntrusiveMichaelSet,
+    base_cmp, base_less, base_cmpmix, member_cmp, member_less, member_cmpmix
+);
+
+
+#endif // CDSUNIT_SET_TEST_INTRUSIVE_MICHAEL_MICHAEL_RCU_H
\ No newline at end of file
diff --git a/test/unit/intrusive-set/test_intrusive_set.h b/test/unit/intrusive-set/test_intrusive_set.h
new file mode 100644 (file)
index 0000000..d4ed303
--- /dev/null
@@ -0,0 +1,450 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TEST_INTRUSIVE_SET_H
+#define CDSUNIT_SET_TEST_INTRUSIVE_SET_H
+
+#include <cds_test/check_size.h>
+#include <cds_test/fixture.h>
+
+#include <cds/opt/hash.h>
+#include <functional>   // ref
+
+// forward declaration
+namespace cds { namespace intrusive {}}
+
+namespace cds_test {
+
+    namespace ci = cds::intrusive;
+    namespace co = cds::opt;
+
+    class intrusive_set: public fixture
+    {
+    public:
+        static size_t const kSize = 100;
+
+        struct stat
+        {
+            unsigned int nDisposeCount  ;   // count of disposer calling
+            unsigned int nFindCount     ;   // count of find-functor calling
+            unsigned int nUpdateNewCount;
+            unsigned int nUpdateCount;
+            mutable unsigned int nEraseCount;
+
+            stat()
+            {
+                clear_stat();
+            }
+
+            void clear_stat()
+            {
+                memset( this, 0, sizeof( *this ) );
+            }
+        };
+
+        template <typename Node>
+        struct base_int_item
+            : public Node
+            , public stat
+
+        {
+            int nKey;
+            int nVal;
+
+            base_int_item()
+            {}
+
+            explicit base_int_item( int key )
+                : nKey( key )
+                , nVal( key )
+            {}
+
+            base_int_item(int key, int val)
+                : nKey( key )
+                , nVal(val)
+            {}
+
+            base_int_item( base_int_item const& v )
+                : Node()
+                , stat()
+                , nKey( v.nKey )
+                , nVal( v.nVal )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        template <typename Node>
+        struct member_int_item: public stat
+        {
+            int nKey;
+            int nVal;
+
+            Node hMember;
+
+            stat s;
+
+            member_int_item()
+            {}
+
+            explicit member_int_item( int key )
+                : nKey( key )
+                , nVal( key )
+            {}
+
+            member_int_item(int key, int val)
+                : nKey( key )
+                , nVal(val)
+            {}
+
+            member_int_item(member_int_item const& v )
+                : stat()
+                , nKey( v.nKey )
+                , nVal( v.nVal )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        struct hash_int {
+            size_t operator()( int i ) const
+            {
+                return co::v::hash<int>()( i );
+            }
+            template <typename Item>
+            size_t operator()( const Item& i ) const
+            {
+                return (*this)( i.key() );
+            }
+        };
+
+        struct simple_item_counter {
+            size_t  m_nCount;
+
+            simple_item_counter()
+                : m_nCount(0)
+            {}
+
+            size_t operator ++()
+            {
+                return ++m_nCount;
+            }
+
+            size_t operator --()
+            {
+                return --m_nCount;
+            }
+
+            void reset()
+            {
+                m_nCount = 0;
+            }
+
+            operator size_t() const
+            {
+                return m_nCount;
+            }
+
+        };
+
+
+        template <typename T>
+        struct less
+        {
+            bool operator ()(const T& v1, const T& v2 ) const
+            {
+                return v1.key() < v2.key();
+            }
+
+            template <typename Q>
+            bool operator ()(const T& v1, const Q& v2 ) const
+            {
+                return v1.key() < v2;
+            }
+
+            template <typename Q>
+            bool operator ()(const Q& v1, const T& v2 ) const
+            {
+                return v1 < v2.key();
+            }
+        };
+
+        template <typename T>
+        struct cmp {
+            int operator ()(const T& v1, const T& v2 ) const
+            {
+                if ( v1.key() < v2.key() )
+                    return -1;
+                return v1.key() > v2.key() ? 1 : 0;
+            }
+
+            template <typename Q>
+            int operator ()(const T& v1, const Q& v2 ) const
+            {
+                if ( v1.key() < v2 )
+                    return -1;
+                return v1.key() > v2 ? 1 : 0;
+            }
+
+            template <typename Q>
+            int operator ()(const Q& v1, const T& v2 ) const
+            {
+                if ( v1 < v2.key() )
+                    return -1;
+                return v1 > v2.key() ? 1 : 0;
+            }
+        };
+
+        struct other_item {
+            int nKey;
+
+            explicit other_item( int k )
+                : nKey( k )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        struct other_less {
+            template <typename Q, typename T>
+            bool operator()( Q const& lhs, T const& rhs ) const
+            {
+                return lhs.key() < rhs.key();
+            }
+        };
+
+        struct mock_disposer
+        {
+            template <typename T>
+            void operator ()( T * p )
+            {
+                ++p->nDisposeCount;
+            }
+        };
+
+    protected:
+        template <class Set>
+        void test( Set& s )
+        {
+            // Precondition: set is empty
+            // Postcondition: set is empty
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+            size_t const nSetSize = kSize;
+
+            typedef typename Set::value_type value_type;
+
+            std::vector< value_type > data;
+            std::vector< size_t> indices;
+            data.reserve( kSize );
+            indices.reserve( kSize );
+            for ( size_t key = 0; key < kSize; ++key ) {
+                data.push_back( value_type( static_cast<int>( key )));
+                indices.push_back( key );
+            }
+            shuffle( indices.begin(), indices.end() );
+
+            // insert/find
+            for ( auto idx : indices ) {
+                auto& i = data[ idx ];
+
+                ASSERT_FALSE( s.contains( i.nKey ));
+                ASSERT_FALSE( s.contains( i ));
+                ASSERT_FALSE( s.contains( other_item( i.key()), other_less()));
+                ASSERT_FALSE( s.find( i.nKey, []( value_type&, int ) {} ));
+                ASSERT_FALSE( s.find_with( other_item( i.key()), other_less(), []( value_type&, other_item const& ) {} ));
+
+                std::pair<bool, bool> updResult;
+
+                updResult = s.update( i, []( bool bNew, value_type&, value_type& )
+                {
+                    ASSERT_TRUE( false );
+                }, false );
+                EXPECT_FALSE( updResult.first );
+                EXPECT_FALSE( updResult.second );
+
+                switch ( i.key() % 3 ) {
+                case 0:
+                    ASSERT_TRUE( s.insert( i ));
+                    ASSERT_FALSE( s.insert( i ));
+                    updResult = s.update( i, []( bool bNew, value_type& val, value_type& arg) 
+                        {
+                            EXPECT_FALSE( bNew );
+                            EXPECT_EQ( &val, &arg );
+                        }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+                    break;
+                case 1:
+                    EXPECT_EQ( i.nUpdateNewCount, 0 );
+                    ASSERT_TRUE( s.insert( i, []( value_type& v ) { ++v.nUpdateNewCount;} ));
+                    EXPECT_EQ( i.nUpdateNewCount, 1 );
+                    ASSERT_FALSE( s.insert( i, []( value_type& v ) { ++v.nUpdateNewCount;} ) );
+                    EXPECT_EQ( i.nUpdateNewCount, 1 );
+                    i.nUpdateNewCount = 0;
+                    break;
+                case 2:
+                    updResult = s.update( i, []( bool bNew, value_type& val, value_type& arg )
+                    {
+                        EXPECT_TRUE( bNew );
+                        EXPECT_EQ( &val, &arg );
+                    });
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_TRUE( updResult.second );
+                    break;
+                }
+
+                ASSERT_TRUE( s.contains( i.nKey ) );
+                ASSERT_TRUE( s.contains( i ) );
+                ASSERT_TRUE( s.contains( other_item( i.key() ), other_less()));
+                EXPECT_EQ( i.nFindCount, 0 );
+                ASSERT_TRUE( s.find( i.nKey, []( value_type& v, int ) { ++v.nFindCount; } ));
+                EXPECT_EQ( i.nFindCount, 1 );
+                ASSERT_TRUE( s.find_with( other_item( i.key() ), other_less(), []( value_type& v, other_item const& ) { ++v.nFindCount; } ));
+                EXPECT_EQ( i.nFindCount, 2 );
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            std::for_each( data.begin(), data.end(), []( value_type& v ) { v.clear_stat(); });
+
+            // erase
+            shuffle( indices.begin(), indices.end() );
+            for ( auto idx : indices ) {
+                auto& i = data[ idx ];
+
+                ASSERT_TRUE( s.contains( i.nKey ) );
+                ASSERT_TRUE( s.contains( i ) );
+                ASSERT_TRUE( s.contains( other_item( i.key() ), other_less() ) );
+                EXPECT_EQ( i.nFindCount, 0 );
+                ASSERT_TRUE( s.find( i.nKey, []( value_type& v, int ) { ++v.nFindCount; } ) );
+                EXPECT_EQ( i.nFindCount, 1 );
+                ASSERT_TRUE( s.find_with( other_item( i.key() ), other_less(), []( value_type& v, other_item const& ) { ++v.nFindCount; } ) );
+                EXPECT_EQ( i.nFindCount, 2 );
+
+                value_type v( i );
+                switch ( i.key() % 6 ) {
+                case 0:
+                    ASSERT_FALSE( s.unlink( v ));
+                    ASSERT_TRUE( s.unlink( i ));
+                    ASSERT_FALSE( s.unlink( i ) );
+                    break;
+                case 1:
+                    ASSERT_TRUE( s.erase( i.key()));
+                    ASSERT_FALSE( s.erase( i.key() ) );
+                    break;
+                case 2:
+                    ASSERT_TRUE( s.erase( v ));
+                    ASSERT_FALSE( s.erase( v ) );
+                    break;
+                case 3:
+                    ASSERT_TRUE( s.erase_with( other_item( i.key()), other_less()));
+                    ASSERT_FALSE( s.erase_with( other_item( i.key() ), other_less() ) );
+                    break;
+                case 4:
+                    EXPECT_EQ( i.nEraseCount, 0 );
+                    ASSERT_TRUE( s.erase( v, []( value_type& val ) { ++val.nEraseCount; } ));
+                    EXPECT_EQ( i.nEraseCount, 1 );
+                    ASSERT_FALSE( s.erase( v, []( value_type& val ) { ++val.nEraseCount; } ));
+                    EXPECT_EQ( i.nEraseCount, 1 );
+                    break;
+                case 5:
+                    EXPECT_EQ( i.nEraseCount, 0 );
+                    ASSERT_TRUE( s.erase_with( other_item( i.key() ), other_less(), []( value_type& val ) { ++val.nEraseCount; } ));
+                    EXPECT_EQ( i.nEraseCount, 1 );
+                    ASSERT_FALSE( s.erase_with( other_item( i.key() ), other_less(), []( value_type& val ) { ++val.nEraseCount; } ));
+                    EXPECT_EQ( i.nEraseCount, 1 );
+                    break;
+                }
+
+                ASSERT_FALSE( s.contains( i.nKey ));
+                ASSERT_FALSE( s.contains( i ));
+                ASSERT_FALSE( s.contains( other_item( i.key()), other_less()));
+                ASSERT_FALSE( s.find( i.nKey, []( value_type&, int ) {} ));
+                ASSERT_FALSE( s.find_with( other_item( i.key()), other_less(), []( value_type&, other_item const& ) {} ));
+            }
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            // Force retiring cycle
+            Set::gc::force_dispose();
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nDisposeCount, 1 );
+            }
+
+            // clear
+            for ( auto& i : data ) {
+                i.clear_stat();
+                ASSERT_TRUE( s.insert( i ));
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            // Iterator test
+            for ( auto it = s.begin(); it != s.end(); ++it ) {
+                ++it->nFindCount;
+            }
+            for ( auto it = s.cbegin(); it != s.cend(); ++it ) {
+                EXPECT_EQ( it->nFindCount, 1 );
+            }
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nFindCount, 1 );
+            }
+
+            // clear test
+            s.clear();
+
+            ASSERT_TRUE( s.empty());
+            ASSERT_CONTAINER_SIZE( s, 0 );
+            ASSERT_TRUE( s.begin() == s.end() );
+            ASSERT_TRUE( s.cbegin() == s.cend() );
+
+            // Force retiring cycle
+            Set::gc::force_dispose();
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nDisposeCount, 1 );
+            }
+
+        }
+    };
+
+} // namespace cds_test
+
+#endif // #ifndef CDSUNIT_SET_TEST_INTRUSIVE_SET_H
diff --git a/test/unit/intrusive-set/test_intrusive_set_hp.h b/test/unit/intrusive-set/test_intrusive_set_hp.h
new file mode 100644 (file)
index 0000000..7ae09c7
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TEST_INTRUSIVE_SET_HP_H
+#define CDSUNIT_SET_TEST_INTRUSIVE_SET_HP_H
+
+#include "test_intrusive_set.h"
+
+// forward declaration
+namespace cds { namespace intrusive {}}
+
+namespace cds_test {
+
+    namespace ci = cds::intrusive;
+    namespace co = cds::opt;
+
+    class intrusive_set_hp: public intrusive_set
+    {
+        typedef intrusive_set base_class;
+
+    protected:
+
+        template <class Set>
+        void test( Set& s )
+        {
+            // Precondition: set is empty
+            // Postcondition: set is empty
+
+            base_class::test( s );
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            typedef typename Set::value_type value_type;
+
+            std::vector< value_type > data;
+            std::vector< size_t> indices;
+            data.reserve( kSize );
+            indices.reserve( kSize );
+            for ( size_t key = 0; key < kSize; ++key ) {
+                data.push_back( value_type( static_cast<int>(key) ) );
+                indices.push_back( key );
+            }
+            shuffle( indices.begin(), indices.end() );
+
+            typename Set::guarded_ptr gp;
+
+            // get/extract from empty set
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                gp = s.get( i );
+                ASSERT_TRUE( !gp );
+                gp = s.get( i.key() );
+                ASSERT_TRUE( !gp );
+                gp = s.get_with( other_item( i.key()), other_less());
+                ASSERT_TRUE( !gp );
+
+                gp = s.extract( i );
+                ASSERT_TRUE( !gp );
+                gp = s.extract( i.key());
+                ASSERT_TRUE( !gp );
+                gp = s.extract_with( other_item( i.key()), other_less());
+                ASSERT_TRUE( !gp );
+            }
+
+            // fill set
+            for ( auto& i : data ) {
+                i.nDisposeCount = 0;
+                ASSERT_TRUE( s.insert( i ) );
+            }
+
+            // get/extract
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                EXPECT_EQ( i.nFindCount, 0 );
+                gp = s.get( i );
+                ASSERT_FALSE( !gp );
+                ++gp->nFindCount;
+                EXPECT_EQ( i.nFindCount, 1 );
+
+                gp = s.get( i.key() );
+                ASSERT_FALSE( !gp );
+                ++gp->nFindCount;
+                EXPECT_EQ( i.nFindCount, 2 );
+
+                gp = s.get_with( other_item( i.key()), other_less());
+                ASSERT_FALSE( !gp );
+                ++gp->nFindCount;
+                EXPECT_EQ( i.nFindCount, 3 );
+
+                EXPECT_EQ( i.nEraseCount, 0 );
+                switch ( i.key() % 3 ) {
+                case 0:
+                    gp = s.extract( i.key());
+                    break;
+                case 1:
+                    gp = s.extract( i );
+                    break;
+                case 2:
+                    gp = s.extract_with( other_item( i.key() ), other_less() );
+                    break;
+                }
+                ASSERT_FALSE( !gp );
+                ++gp->nEraseCount;
+                EXPECT_EQ( i.nEraseCount, 1 );
+
+                gp = s.extract( i );
+                ASSERT_TRUE( !gp );
+                gp = s.extract( i.key() );
+                ASSERT_TRUE( !gp );
+                gp = s.extract_with( other_item( i.key() ), other_less() );
+                ASSERT_TRUE( !gp );
+            }
+
+            gp.release();
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            // Force retiring cycle
+            Set::gc::force_dispose();
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nDisposeCount, 1 );
+            }
+
+        }
+    };
+
+} // namespace cds_test
+
+#endif // #ifndef CDSUNIT_SET_TEST_INTRUSIVE_SET_HP_H
diff --git a/test/unit/intrusive-set/test_intrusive_set_nogc.h b/test/unit/intrusive-set/test_intrusive_set_nogc.h
new file mode 100644 (file)
index 0000000..46e06a5
--- /dev/null
@@ -0,0 +1,374 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TEST_INTRUSIVE_SET_NOGC_H
+#define CDSUNIT_SET_TEST_INTRUSIVE_SET_NOGC_H
+
+#include <cds_test/check_size.h>
+#include <cds_test/fixture.h>
+
+#include <cds/opt/hash.h>
+#include <functional>   // ref
+
+// forward declaration
+namespace cds { namespace intrusive {}}
+
+namespace cds_test {
+
+    namespace ci = cds::intrusive;
+    namespace co = cds::opt;
+
+    class intrusive_set_nogc: public fixture
+    {
+    public:
+        static size_t const kSize = 100;
+
+        struct stat
+        {
+            unsigned int nFindCount     ;   // count of find-functor calling
+            unsigned int nUpdateNewCount;
+            unsigned int nUpdateCount;
+            unsigned int nDisposeCount;
+
+            stat()
+            {
+                clear_stat();
+            }
+
+            void clear_stat()
+            {
+                memset( this, 0, sizeof( *this ) );
+            }
+        };
+
+        template <typename Node>
+        struct base_int_item
+            : public Node
+            , public stat
+
+        {
+            int nKey;
+            int nVal;
+
+            base_int_item()
+            {}
+
+            explicit base_int_item( int key )
+                : nKey( key )
+                , nVal( key )
+            {}
+
+            base_int_item(int key, int val)
+                : nKey( key )
+                , nVal(val)
+            {}
+
+            base_int_item( base_int_item const& v )
+                : Node()
+                , stat()
+                , nKey( v.nKey )
+                , nVal( v.nVal )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        template <typename Node>
+        struct member_int_item: public stat
+        {
+            int nKey;
+            int nVal;
+
+            Node hMember;
+
+            stat s;
+
+            member_int_item()
+            {}
+
+            explicit member_int_item( int key )
+                : nKey( key )
+                , nVal( key )
+            {}
+
+            member_int_item(int key, int val)
+                : nKey( key )
+                , nVal(val)
+            {}
+
+            member_int_item(member_int_item const& v )
+                : stat()
+                , nKey( v.nKey )
+                , nVal( v.nVal )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        struct hash_int {
+            size_t operator()( int i ) const
+            {
+                return co::v::hash<int>()( i );
+            }
+            template <typename Item>
+            size_t operator()( const Item& i ) const
+            {
+                return (*this)( i.key() );
+            }
+        };
+
+        struct simple_item_counter {
+            size_t  m_nCount;
+
+            simple_item_counter()
+                : m_nCount(0)
+            {}
+
+            size_t operator ++()
+            {
+                return ++m_nCount;
+            }
+
+            size_t operator --()
+            {
+                return --m_nCount;
+            }
+
+            void reset()
+            {
+                m_nCount = 0;
+            }
+
+            operator size_t() const
+            {
+                return m_nCount;
+            }
+
+        };
+
+
+        template <typename T>
+        struct less
+        {
+            bool operator ()(const T& v1, const T& v2 ) const
+            {
+                return v1.key() < v2.key();
+            }
+
+            template <typename Q>
+            bool operator ()(const T& v1, const Q& v2 ) const
+            {
+                return v1.key() < v2;
+            }
+
+            template <typename Q>
+            bool operator ()(const Q& v1, const T& v2 ) const
+            {
+                return v1 < v2.key();
+            }
+        };
+
+        template <typename T>
+        struct cmp {
+            int operator ()(const T& v1, const T& v2 ) const
+            {
+                if ( v1.key() < v2.key() )
+                    return -1;
+                return v1.key() > v2.key() ? 1 : 0;
+            }
+
+            template <typename Q>
+            int operator ()(const T& v1, const Q& v2 ) const
+            {
+                if ( v1.key() < v2 )
+                    return -1;
+                return v1.key() > v2 ? 1 : 0;
+            }
+
+            template <typename Q>
+            int operator ()(const Q& v1, const T& v2 ) const
+            {
+                if ( v1 < v2.key() )
+                    return -1;
+                return v1 > v2.key() ? 1 : 0;
+            }
+        };
+
+        struct other_item {
+            int nKey;
+
+            explicit other_item( int k )
+                : nKey( k )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        struct other_less {
+            template <typename Q, typename T>
+            bool operator()( Q const& lhs, T const& rhs ) const
+            {
+                return lhs.key() < rhs.key();
+            }
+        };
+
+        struct mock_disposer
+        {
+            template <typename T>
+            void operator ()( T * p )
+            {
+                ++p->nDisposeCount;
+            }
+        };
+
+    protected:
+        template <class Set>
+        void test( Set& s )
+        {
+            // Precondition: set is empty
+            // Postcondition: set is empty
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+            size_t const nSetSize = kSize;
+
+            typedef typename Set::value_type value_type;
+
+            std::vector< value_type > data;
+            std::vector< size_t> indices;
+            data.reserve( kSize );
+            indices.reserve( kSize );
+            for ( size_t key = 0; key < kSize; ++key ) {
+                data.push_back( value_type( static_cast<int>( key )));
+                indices.push_back( key );
+            }
+            shuffle( indices.begin(), indices.end() );
+
+            // insert/find
+            for ( auto idx : indices ) {
+                auto& i = data[ idx ];
+
+                ASSERT_TRUE( s.contains( i.nKey ) == nullptr );
+                ASSERT_TRUE( s.contains( i ) == nullptr );
+                ASSERT_TRUE( s.contains( other_item( i.key()), other_less()) == nullptr );
+                ASSERT_FALSE( s.find( i.nKey, []( value_type&, int ) {} ));
+                ASSERT_FALSE( s.find_with( other_item( i.key()), other_less(), []( value_type&, other_item const& ) {} ));
+
+                std::pair<bool, bool> updResult;
+
+                updResult = s.update( i, []( bool bNew, value_type&, value_type& )
+                {
+                    ASSERT_TRUE( false );
+                }, false );
+                EXPECT_FALSE( updResult.first );
+                EXPECT_FALSE( updResult.second );
+
+                switch ( i.key() % 2 ) {
+                case 0:
+                    ASSERT_TRUE( s.insert( i ));
+                    ASSERT_FALSE( s.insert( i ));
+                    EXPECT_EQ( i.nUpdateCount, 0 );
+                    updResult = s.update( i, []( bool bNew, value_type& val, value_type& arg) 
+                        {
+                            EXPECT_FALSE( bNew );
+                            EXPECT_EQ( &val, &arg );
+                            ++val.nUpdateCount;
+                        }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+                    EXPECT_EQ( i.nUpdateCount, 1 );
+                    break;
+                case 1:
+                    EXPECT_EQ( i.nUpdateNewCount, 0 );
+                    updResult = s.update( i, []( bool bNew, value_type& val, value_type& arg )
+                    {
+                        EXPECT_TRUE( bNew );
+                        EXPECT_EQ( &val, &arg );
+                        ++val.nUpdateNewCount;
+                    });
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_TRUE( updResult.second );
+                    EXPECT_EQ( i.nUpdateNewCount, 1 );
+                    break;
+                }
+
+                ASSERT_TRUE( s.contains( i.nKey ) == &i );
+                ASSERT_TRUE( s.contains( i ) == &i );
+                ASSERT_TRUE( s.contains( other_item( i.key() ), other_less()) == &i );
+                EXPECT_EQ( i.nFindCount, 0 );
+                ASSERT_TRUE( s.find( i.nKey, []( value_type& v, int ) { ++v.nFindCount; } ));
+                EXPECT_EQ( i.nFindCount, 1 );
+                ASSERT_TRUE( s.find_with( other_item( i.key() ), other_less(), []( value_type& v, other_item const& ) { ++v.nFindCount; } ));
+                EXPECT_EQ( i.nFindCount, 2 );
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            std::for_each( data.begin(), data.end(), []( value_type& v ) { v.clear_stat(); });
+
+            // Iterator test
+            for ( auto it = s.begin(); it != s.end(); ++it ) {
+                ++it->nFindCount;
+            }
+            for ( auto it = s.cbegin(); it != s.cend(); ++it ) {
+                EXPECT_EQ( it->nFindCount, 1 );
+            }
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nFindCount, 1 );
+            }
+
+            // clear test
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nDisposeCount, 0 );
+            }
+            s.clear();
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nDisposeCount, 1 );
+            }
+
+            ASSERT_TRUE( s.empty());
+            ASSERT_CONTAINER_SIZE( s, 0 );
+            ASSERT_TRUE( s.begin() == s.end() );
+            ASSERT_TRUE( s.cbegin() == s.cend() );
+        }
+    };
+
+} // namespace cds_test
+
+#endif // #ifndef CDSUNIT_SET_TEST_INTRUSIVE_SET_NOGC_H
diff --git a/test/unit/intrusive-set/test_intrusive_set_rcu.h b/test/unit/intrusive-set/test_intrusive_set_rcu.h
new file mode 100644 (file)
index 0000000..ff28bef
--- /dev/null
@@ -0,0 +1,212 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TEST_INTRUSIVE_SET_RCU_H
+#define CDSUNIT_SET_TEST_INTRUSIVE_SET_RCU_H
+
+#include "test_intrusive_set.h"
+
+// forward declaration
+namespace cds { namespace intrusive {}}
+
+namespace cds_test {
+
+    namespace ci = cds::intrusive;
+    namespace co = cds::opt;
+
+    class intrusive_set_rcu: public intrusive_set
+    {
+        typedef intrusive_set base_class;
+
+    protected:
+
+        template <class Set>
+        void test( Set& s )
+        {
+            // Precondition: set is empty
+            // Postcondition: set is empty
+
+            base_class::test( s );
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            typedef typename Set::value_type value_type;
+
+            std::vector< value_type > data;
+            std::vector< size_t> indices;
+            data.reserve( kSize );
+            indices.reserve( kSize );
+            for ( size_t key = 0; key < kSize; ++key ) {
+                data.push_back( value_type( static_cast<int>(key) ) );
+                indices.push_back( key );
+            }
+            shuffle( indices.begin(), indices.end() );
+
+            typename Set::exempt_ptr xp;
+            typename Set::raw_ptr rp;
+            typedef typename Set::rcu_lock rcu_lock;
+
+            // get/extract from empty set
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                {
+                    rcu_lock l;
+                    rp = s.get( i );
+                    ASSERT_TRUE( !rp );
+                    rp = s.get( i.key() );
+                    ASSERT_TRUE( !rp );
+                    rp = s.get_with( other_item( i.key()), other_less());
+                    ASSERT_TRUE( !rp );
+                }
+
+                if ( Set::c_bExtractLockExternal ) {
+                    rcu_lock l;
+
+                    xp = s.extract( i );
+                    ASSERT_TRUE( !xp );
+                    xp = s.extract( i.key() );
+                    ASSERT_TRUE( !xp );
+                    xp = s.extract_with( other_item( i.key() ), other_less() );
+                    ASSERT_TRUE( !xp );
+                }
+                else {
+                    xp = s.extract( i );
+                    ASSERT_TRUE( !xp );
+                    xp = s.extract( i.key() );
+                    ASSERT_TRUE( !xp );
+                    xp = s.extract_with( other_item( i.key() ), other_less() );
+                    ASSERT_TRUE( !xp );
+                }
+            }
+
+            // fill set
+            for ( auto& i : data ) {
+                i.nDisposeCount = 0;
+                ASSERT_TRUE( s.insert( i ) );
+            }
+
+            // get/extract
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                {
+                    rcu_lock l;
+                    EXPECT_EQ( i.nFindCount, 0 );
+                    rp = s.get( i );
+                    ASSERT_FALSE( !rp );
+                    ++rp->nFindCount;
+                    EXPECT_EQ( i.nFindCount, 1 );
+
+                    rp = s.get( i.key() );
+                    ASSERT_FALSE( !rp );
+                    ++rp->nFindCount;
+                    EXPECT_EQ( i.nFindCount, 2 );
+
+                    rp = s.get_with( other_item( i.key()), other_less());
+                    ASSERT_FALSE( !rp );
+                    ++rp->nFindCount;
+                    EXPECT_EQ( i.nFindCount, 3 );
+                }
+
+                if ( Set::c_bExtractLockExternal ) {
+                    {
+                        rcu_lock l;
+
+                        EXPECT_EQ( i.nEraseCount, 0 );
+                        switch ( i.key() % 3 ) {
+                        case 0:
+                            xp = s.extract( i.key());
+                            break;
+                        case 1:
+                            xp = s.extract( i );
+                            break;
+                        case 2:
+                            xp = s.extract_with( other_item( i.key() ), other_less() );
+                            break;
+                        }
+                        ASSERT_FALSE( !xp );
+                        ++xp->nEraseCount;
+                    }
+                    EXPECT_EQ( i.nEraseCount, 1 );
+                    xp.release();
+
+                    {
+                        rcu_lock l;
+
+                        xp = s.extract( i );
+                        ASSERT_TRUE( !xp );
+                        xp = s.extract( i.key() );
+                        ASSERT_TRUE( !xp );
+                        xp = s.extract_with( other_item( i.key() ), other_less() );
+                        ASSERT_TRUE( !xp );
+                    }
+                }
+                else {
+                    EXPECT_EQ( i.nEraseCount, 0 );
+                    switch ( i.key() % 3 ) {
+                    case 0:
+                        xp = s.extract( i.key());
+                        break;
+                    case 1:
+                        xp = s.extract( i );
+                        break;
+                    case 2:
+                        xp = s.extract_with( other_item( i.key() ), other_less() );
+                        break;
+                    }
+                    ASSERT_FALSE( !xp );
+                    ++xp->nEraseCount;
+                    EXPECT_EQ( i.nEraseCount, 1 );
+
+                    xp = s.extract( i );
+                    ASSERT_TRUE( !xp );
+                    xp = s.extract( i.key() );
+                    ASSERT_TRUE( !xp );
+                    xp = s.extract_with( other_item( i.key() ), other_less() );
+                    ASSERT_TRUE( !xp );
+                }
+            }
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            // Force retiring cycle
+            Set::gc::force_dispose();
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nDisposeCount, 1 );
+            }
+        }
+    };
+
+} // namespace cds_test
+
+#endif // #ifndef CDSUNIT_SET_TEST_INTRUSIVE_SET_RCU_H
diff --git a/test/unit/intrusive-set/test_intrusive_skiplist_rcu.h b/test/unit/intrusive-set/test_intrusive_skiplist_rcu.h
new file mode 100644 (file)
index 0000000..ddaa8dd
--- /dev/null
@@ -0,0 +1,248 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_SET_TEST_INTRUSIVE_SKIPLIST_RCU_H
+#define CDSUNIT_SET_TEST_INTRUSIVE_SKIPLIST_RCU_H
+
+#include "test_intrusive_set_rcu.h"
+#include <cds/intrusive/skip_list_rcu.h>
+
+namespace ci = cds::intrusive;
+
+template <class RCU>
+class IntrusiveSkipListSet: public cds_test::intrusive_set_rcu
+{
+    typedef cds_test::intrusive_set_rcu base_class;
+public:
+    typedef cds::urcu::gc<RCU> rcu_type;
+    typedef typename base_class::base_int_item< ci::skip_list::node<rcu_type>>   base_item_type;
+    typedef typename base_class::member_int_item< ci::skip_list::node<rcu_type>> member_item_type;
+
+protected:
+    void SetUp()
+    {
+        RCU::Construct();
+        cds::threading::Manager::attachThread();
+    }
+
+    void TearDown()
+    {
+        cds::threading::Manager::detachThread();
+        RCU::Destruct();
+    }
+};
+
+TYPED_TEST_CASE_P( IntrusiveSkipListSet );
+
+TYPED_TEST_P( IntrusiveSkipListSet, base_cmp )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::base_item_type base_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template cmp<base_item_type> cmp;
+
+    struct traits : public ci::skip_list::traits
+    {
+        typedef ci::skip_list::base_hook< ci::opt::gc< rcu_type >> hook;
+        typedef mock_disposer disposer;
+        typedef cmp compare;
+    };
+
+    typedef ci::SkipListSet< rcu_type, base_item_type, traits > set_type;
+
+    set_type s;
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveSkipListSet, base_less )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::base_item_type base_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template less<base_item_type> less_predicate;
+
+    struct traits : public ci::skip_list::traits
+    {
+        typedef ci::skip_list::base_hook< ci::opt::gc< rcu_type >> hook;
+        typedef mock_disposer disposer;
+        typedef less_predicate less;
+        typedef cds::atomicity::item_counter item_counter;
+    };
+
+    typedef ci::SkipListSet< rcu_type, base_item_type, traits > set_type;
+
+    set_type s;
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveSkipListSet, base_cmpmix )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::base_item_type base_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template cmp<base_item_type> cmp;
+    typedef typename TestFixture::template less<base_item_type> less_predicate;
+
+    struct traits : public ci::skip_list::traits
+    {
+        typedef ci::skip_list::base_hook< ci::opt::gc< rcu_type >> hook;
+        typedef mock_disposer disposer;
+        typedef cmp compare;
+        typedef less_predicate less;
+        typedef ci::skip_list::stat<> stat;
+    };
+
+    typedef ci::SkipListSet< rcu_type, base_item_type, traits > set_type;
+
+    set_type s;
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveSkipListSet, base_xorshift )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::base_item_type base_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template cmp<base_item_type> cmp;
+
+    struct traits : public ci::skip_list::traits
+    {
+        typedef ci::skip_list::base_hook< ci::opt::gc< rcu_type >> hook;
+        typedef mock_disposer disposer;
+        typedef cmp compare;
+        typedef ci::skip_list::xorshift random_level_generator;
+    };
+
+    typedef ci::SkipListSet< rcu_type, base_item_type, traits > set_type;
+
+    set_type s;
+    this->test( s );
+}
+
+
+TYPED_TEST_P( IntrusiveSkipListSet, member_cmp )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::member_item_type member_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template cmp<member_item_type> cmp;
+
+    struct traits : public ci::skip_list::traits
+    {
+        typedef ci::skip_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< rcu_type >> hook;
+        typedef mock_disposer disposer;
+        typedef cmp compare;
+    };
+
+    typedef ci::SkipListSet< rcu_type, member_item_type, traits > set_type;
+
+    set_type s;
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveSkipListSet, member_less )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::member_item_type member_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template less<member_item_type> less_predicate;
+    typedef typename TestFixture::hash_int hash_int;
+
+    struct traits : public ci::skip_list::traits
+    {
+        typedef ci::skip_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< rcu_type >> hook;
+        typedef mock_disposer disposer;
+        typedef less_predicate less;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef ci::opt::v::sequential_consistent memory_model;
+    };
+
+    typedef ci::SkipListSet< rcu_type, member_item_type, traits > set_type;
+
+    set_type s;
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveSkipListSet, member_cmpmix )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::member_item_type member_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template less<member_item_type> less_predicate;
+    typedef typename TestFixture::template cmp<member_item_type> cmp;
+
+    struct traits : public ci::skip_list::traits
+    {
+        typedef ci::skip_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< rcu_type >> hook;
+        typedef mock_disposer disposer;
+        typedef cmp compare;
+        typedef less_predicate less;
+        typedef ci::skip_list::stat<> stat;
+    };
+
+    typedef ci::SkipListSet< rcu_type, member_item_type, traits > set_type;
+
+    set_type s;
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveSkipListSet, member_xorshift )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::member_item_type member_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template less<member_item_type> less_predicate;
+    typedef typename TestFixture::template cmp<member_item_type> cmp;
+
+    struct traits : public ci::skip_list::traits
+    {
+        typedef ci::skip_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< rcu_type >> hook;
+        typedef mock_disposer disposer;
+        typedef cmp compare;
+        typedef less_predicate less;
+        typedef ci::skip_list::stat<> stat;
+        typedef ci::skip_list::xorshift random_level_generator;
+    };
+
+    typedef ci::SkipListSet< rcu_type, member_item_type, traits > set_type;
+
+    set_type s;
+    this->test( s );
+}
+
+
+// GCC 5: All test names should be written on single line, otherwise a runtime error will be encountered like as
+// "No test named <test_name> can be found in this test case"
+REGISTER_TYPED_TEST_CASE_P( IntrusiveSkipListSet,
+    base_cmp, base_less, base_cmpmix, base_xorshift, member_cmp, member_less, member_cmpmix, member_xorshift
+);
+
+
+#endif // CDSUNIT_SET_TEST_INTRUSIVE_SKIPLIST_RCU_H
\ No newline at end of file
diff --git a/test/unit/intrusive-set/test_intrusive_split_lazy_rcu.h b/test/unit/intrusive-set/test_intrusive_split_lazy_rcu.h
new file mode 100644 (file)
index 0000000..33ab6fd
--- /dev/null
@@ -0,0 +1,302 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_SET_TEST_INTRUSIVE_SPLIT_LAZY_RCU_H
+#define CDSUNIT_SET_TEST_INTRUSIVE_SPLIT_LAZY_RCU_H
+
+#include "test_intrusive_set_rcu.h"
+#include <cds/intrusive/lazy_list_rcu.h>
+#include <cds/intrusive/split_list_rcu.h>
+
+namespace ci = cds::intrusive;
+
+template <class RCU>
+class IntrusiveSplitLazySet: public cds_test::intrusive_set_rcu
+{
+    typedef cds_test::intrusive_set_rcu base_class;
+public:
+    typedef cds::urcu::gc<RCU> rcu_type;
+    typedef typename base_class::base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type>>>   base_item_type;
+    typedef typename base_class::base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type, std::mutex>>>   base_mutex_item_type;
+    typedef typename base_class::member_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type>>> member_item_type;
+    typedef typename base_class::member_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type, std::mutex>>> member_mutex_item_type;
+
+protected:
+    void SetUp()
+    {
+        RCU::Construct();
+        cds::threading::Manager::attachThread();
+    }
+
+    void TearDown()
+    {
+        cds::threading::Manager::detachThread();
+        RCU::Destruct();
+    }
+};
+
+TYPED_TEST_CASE_P( IntrusiveSplitLazySet );
+
+TYPED_TEST_P( IntrusiveSplitLazySet, base_cmp )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::base_item_type base_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template cmp<base_item_type> cmp;
+    typedef typename TestFixture::hash_int hash_int;
+
+    typedef ci::LazyList< rcu_type
+        , base_item_type
+        , typename ci::lazy_list::make_traits<
+            ci::opt::hook< ci::lazy_list::base_hook< ci::opt::gc< rcu_type > > >
+            , ci::opt::compare< cmp >
+            , ci::opt::disposer< mock_disposer >
+        >::type
+    > bucket_type;
+
+    typedef ci::SplitListSet< rcu_type, bucket_type,
+        typename ci::split_list::make_traits<
+            ci::opt::hash< hash_int >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveSplitLazySet, base_less )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::base_item_type base_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template less<base_item_type> less;
+    typedef typename TestFixture::hash_int hash_int;
+
+    typedef ci::LazyList< rcu_type
+        , base_item_type
+        , typename ci::lazy_list::make_traits<
+            ci::opt::hook< ci::lazy_list::base_hook< ci::opt::gc< rcu_type >>>
+            , ci::opt::less< less >
+            , ci::opt::disposer< mock_disposer >
+        >::type
+    > bucket_type;
+
+    typedef ci::SplitListSet< rcu_type, bucket_type,
+        typename ci::split_list::make_traits<
+            ci::opt::hash< hash_int >
+            , ci::opt::item_counter< cds::atomicity::item_counter >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveSplitLazySet, base_cmpmix )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::base_item_type base_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::hash_int hash_int;
+
+    struct list_traits : public ci::lazy_list::traits
+    {
+        typedef ci::lazy_list::base_hook< ci::opt::gc<rcu_type>> hook;
+        typedef typename TestFixture::template less<base_item_type> less;
+        typedef typename TestFixture::template cmp<base_item_type> compare;
+        typedef mock_disposer disposer;
+    };
+    typedef ci::LazyList< rcu_type, base_item_type, list_traits > bucket_type;
+
+    struct set_traits : public ci::split_list::traits
+    {
+        typedef hash_int hash;
+        typedef typename TestFixture::simple_item_counter item_counter;
+        typedef ci::split_list::stat<> stat;
+    };
+    typedef ci::SplitListSet< rcu_type, bucket_type, set_traits > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveSplitLazySet, base_mutex )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::base_mutex_item_type base_mutex_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::hash_int hash_int;
+
+    struct list_traits : public ci::lazy_list::traits
+    {
+        typedef ci::lazy_list::base_hook< ci::opt::gc<rcu_type>, ci::opt::lock_type<std::mutex>> hook;
+        typedef typename TestFixture::template less<base_mutex_item_type> less;
+        typedef typename TestFixture::template cmp<base_mutex_item_type> compare;
+        typedef mock_disposer disposer;
+    };
+    typedef ci::LazyList< rcu_type, base_mutex_item_type, list_traits > bucket_type;
+
+    struct set_traits : public ci::split_list::traits
+    {
+        typedef hash_int hash;
+        typedef typename TestFixture::simple_item_counter item_counter;
+        typedef cds::backoff::empty back_off;
+    };
+    typedef ci::SplitListSet< rcu_type, bucket_type, set_traits > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+
+TYPED_TEST_P( IntrusiveSplitLazySet, member_cmp )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::member_item_type member_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template cmp<member_item_type> cmp;
+    typedef typename TestFixture::hash_int hash_int;
+
+    typedef ci::LazyList< rcu_type
+        , member_item_type
+        , typename ci::lazy_list::make_traits<
+            ci::opt::hook< ci::lazy_list::member_hook<
+                offsetof( member_item_type, hMember ),
+                ci::opt::gc<rcu_type>
+            >>
+            , ci::opt::compare< cmp >
+            , ci::opt::disposer< mock_disposer >
+        >::type
+    >    bucket_type;
+
+    typedef ci::SplitListSet< rcu_type, bucket_type,
+        typename ci::split_list::make_traits<
+            ci::opt::hash< hash_int >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveSplitLazySet, member_less )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::member_item_type member_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template less<member_item_type> less;
+    typedef typename TestFixture::hash_int hash_int;
+
+    typedef ci::LazyList< rcu_type
+        , member_item_type
+        , typename ci::lazy_list::make_traits<
+            ci::opt::hook< ci::lazy_list::member_hook<
+                offsetof( member_item_type, hMember ),
+                ci::opt::gc<rcu_type>
+            > >
+            , ci::opt::less< less >
+            , ci::opt::disposer< mock_disposer >
+        >::type
+    > bucket_type;
+
+    typedef ci::SplitListSet< rcu_type, bucket_type,
+        typename ci::split_list::make_traits<
+            ci::opt::hash< hash_int >
+            , ci::opt::back_off< cds::backoff::pause >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveSplitLazySet, member_cmpmix )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::member_item_type member_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::hash_int hash_int;
+
+    struct list_traits : public ci::lazy_list::traits
+    {
+        typedef ci::lazy_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc<rcu_type>> hook;
+        typedef typename TestFixture::template less<member_item_type> less;
+        typedef typename TestFixture::template cmp<member_item_type> compare;
+        typedef mock_disposer disposer;
+    };
+    typedef ci::LazyList< rcu_type, member_item_type, list_traits > bucket_type;
+
+    struct set_traits : public ci::split_list::traits
+    {
+        typedef hash_int hash;
+        typedef typename TestFixture::simple_item_counter item_counter;
+    };
+    typedef ci::SplitListSet< rcu_type, bucket_type, set_traits > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveSplitLazySet, member_mutex )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::member_mutex_item_type member_mutex_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::hash_int hash_int;
+
+    struct list_traits : public ci::lazy_list::traits
+    {
+        typedef ci::lazy_list::member_hook< offsetof( member_mutex_item_type, hMember ), ci::opt::gc<rcu_type>, ci::opt::lock_type<std::mutex>> hook;
+        typedef typename TestFixture::template less<member_mutex_item_type> less;
+        typedef typename TestFixture::template cmp<member_mutex_item_type> compare;
+        typedef mock_disposer disposer;
+    };
+    typedef ci::LazyList< rcu_type, member_mutex_item_type, list_traits > bucket_type;
+
+    struct set_traits : public ci::split_list::traits
+    {
+        typedef hash_int hash;
+        typedef typename TestFixture::simple_item_counter item_counter;
+    };
+    typedef ci::SplitListSet< rcu_type, bucket_type, set_traits > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+
+// GCC 5: All test names should be written on single line, otherwise a runtime error will be encountered like as
+// "No test named <test_name> can be found in this test case"
+REGISTER_TYPED_TEST_CASE_P( IntrusiveSplitLazySet,
+    base_cmp, base_less, base_cmpmix, base_mutex, member_cmp, member_less, member_cmpmix, member_mutex
+);
+
+
+#endif // CDSUNIT_SET_TEST_INTRUSIVE_MICHAEL_LAZY_RCU_H
\ No newline at end of file
diff --git a/test/unit/intrusive-set/test_intrusive_split_michael_rcu.h b/test/unit/intrusive-set/test_intrusive_split_michael_rcu.h
new file mode 100644 (file)
index 0000000..e67097f
--- /dev/null
@@ -0,0 +1,246 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_SET_TEST_INTRUSIVE_SPLIT_MICHAEL_RCU_H
+#define CDSUNIT_SET_TEST_INTRUSIVE_SPLIT_MICHAEL_RCU_H
+
+#include "test_intrusive_set_rcu.h"
+#include <cds/intrusive/michael_list_rcu.h>
+#include <cds/intrusive/split_list_rcu.h>
+
+namespace ci = cds::intrusive;
+
+template <class RCU>
+class IntrusiveSplitMichaelSet: public cds_test::intrusive_set_rcu
+{
+    typedef cds_test::intrusive_set_rcu base_class;
+public:
+    typedef cds::urcu::gc<RCU> rcu_type;
+    typedef typename base_class::base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type>>>   base_item_type;
+    typedef typename base_class::member_int_item< ci::split_list::node<ci::michael_list::node<rcu_type>>> member_item_type;
+
+protected:
+    void SetUp()
+    {
+        RCU::Construct();
+        cds::threading::Manager::attachThread();
+    }
+
+    void TearDown()
+    {
+        cds::threading::Manager::detachThread();
+        RCU::Destruct();
+    }
+};
+
+TYPED_TEST_CASE_P( IntrusiveSplitMichaelSet );
+
+TYPED_TEST_P( IntrusiveSplitMichaelSet, base_cmp )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::base_item_type base_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template cmp<base_item_type> cmp;
+    typedef typename TestFixture::hash_int hash_int;
+
+    typedef ci::MichaelList< rcu_type
+        , base_item_type
+        , typename ci::michael_list::make_traits<
+            ci::opt::hook< ci::michael_list::base_hook< ci::opt::gc< rcu_type > > >
+            , ci::opt::compare< cmp >
+            , ci::opt::disposer< mock_disposer >
+        >::type
+    > bucket_type;
+
+    typedef ci::SplitListSet< rcu_type, bucket_type,
+        typename ci::split_list::make_traits<
+            ci::opt::hash< hash_int >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveSplitMichaelSet, base_less )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::base_item_type base_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template less<base_item_type> less;
+    typedef typename TestFixture::hash_int hash_int;
+
+    typedef ci::MichaelList< rcu_type
+        , base_item_type
+        , typename ci::michael_list::make_traits<
+            ci::opt::hook< ci::michael_list::base_hook< ci::opt::gc< rcu_type >>>
+            , ci::opt::less< less >
+            , ci::opt::disposer< mock_disposer >
+        >::type
+    > bucket_type;
+
+    typedef ci::SplitListSet< rcu_type, bucket_type,
+        typename ci::split_list::make_traits<
+            ci::opt::hash< hash_int >
+            , ci::opt::item_counter< cds::atomicity::item_counter >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveSplitMichaelSet, base_cmpmix )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::base_item_type base_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::hash_int hash_int;
+
+    struct list_traits : public ci::michael_list::traits
+    {
+        typedef ci::michael_list::base_hook< ci::opt::gc<rcu_type>> hook;
+        typedef typename TestFixture::template less<base_item_type> less;
+        typedef typename TestFixture::template cmp<base_item_type> compare;
+        typedef mock_disposer disposer;
+    };
+    typedef ci::MichaelList< rcu_type, base_item_type, list_traits > bucket_type;
+
+    struct set_traits : public ci::split_list::traits
+    {
+        typedef hash_int hash;
+        typedef typename TestFixture::simple_item_counter item_counter;
+        typedef ci::split_list::stat<> stat;
+    };
+    typedef ci::SplitListSet< rcu_type, bucket_type, set_traits > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+
+TYPED_TEST_P( IntrusiveSplitMichaelSet, member_cmp )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::member_item_type member_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template cmp<member_item_type> cmp;
+    typedef typename TestFixture::hash_int hash_int;
+
+    typedef ci::MichaelList< rcu_type
+        , member_item_type
+        , typename ci::michael_list::make_traits<
+            ci::opt::hook< ci::michael_list::member_hook<
+                offsetof( member_item_type, hMember ),
+                ci::opt::gc<rcu_type>
+            >>
+            , ci::opt::compare< cmp >
+            , ci::opt::disposer< mock_disposer >
+        >::type
+    >    bucket_type;
+
+    typedef ci::SplitListSet< rcu_type, bucket_type,
+        typename ci::split_list::make_traits<
+            ci::opt::hash< hash_int >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveSplitMichaelSet, member_less )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::member_item_type member_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::template less<member_item_type> less;
+    typedef typename TestFixture::hash_int hash_int;
+
+    typedef ci::MichaelList< rcu_type
+        , member_item_type
+        , typename ci::michael_list::make_traits<
+            ci::opt::hook< ci::michael_list::member_hook<
+                offsetof( member_item_type, hMember ),
+                ci::opt::gc<rcu_type>
+            > >
+            , ci::opt::less< less >
+            , ci::opt::disposer< mock_disposer >
+        >::type
+    > bucket_type;
+
+    typedef ci::SplitListSet< rcu_type, bucket_type,
+        typename ci::split_list::make_traits<
+            ci::opt::hash< hash_int >
+            , ci::opt::back_off< cds::backoff::pause >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( IntrusiveSplitMichaelSet, member_cmpmix )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::member_item_type member_item_type;
+    typedef typename TestFixture::mock_disposer mock_disposer;
+    typedef typename TestFixture::hash_int hash_int;
+
+    struct list_traits : public ci::michael_list::traits
+    {
+        typedef ci::michael_list::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc<rcu_type>> hook;
+        typedef typename TestFixture::template less<member_item_type> less;
+        typedef typename TestFixture::template cmp<member_item_type> compare;
+        typedef mock_disposer disposer;
+    };
+    typedef ci::MichaelList< rcu_type, member_item_type, list_traits > bucket_type;
+
+    struct set_traits : public ci::split_list::traits
+    {
+        typedef hash_int hash;
+        typedef typename TestFixture::simple_item_counter item_counter;
+    };
+    typedef ci::SplitListSet< rcu_type, bucket_type, set_traits > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+
+
+// GCC 5: All test names should be written on single line, otherwise a runtime error will be encountered like as
+// "No test named <test_name> can be found in this test case"
+REGISTER_TYPED_TEST_CASE_P( IntrusiveSplitMichaelSet,
+    base_cmp, base_less, base_cmpmix, member_cmp, member_less, member_cmpmix
+);
+
+
+#endif // CDSUNIT_SET_TEST_INTRUSIVE_SPLIT_MICHAEL_RCU_H
\ No newline at end of file
diff --git a/test/unit/list/CMakeLists.txt b/test/unit/list/CMakeLists.txt
new file mode 100644 (file)
index 0000000..8ecf2d4
--- /dev/null
@@ -0,0 +1,68 @@
+set(PACKAGE_NAME unit-list)
+
+set(CDSGTEST_LIST_SOURCES
+    ../main.cpp
+    intrusive_lazy_hp.cpp
+    intrusive_lazy_dhp.cpp
+    intrusive_lazy_nogc.cpp
+    intrusive_lazy_rcu_gpb.cpp
+    intrusive_lazy_rcu_gpi.cpp
+    intrusive_lazy_rcu_gpt.cpp
+    intrusive_lazy_rcu_shb.cpp
+    intrusive_lazy_rcu_sht.cpp
+    intrusive_michael_hp.cpp
+    intrusive_michael_dhp.cpp
+    intrusive_michael_nogc.cpp
+    intrusive_michael_rcu_gpb.cpp
+    intrusive_michael_rcu_gpi.cpp
+    intrusive_michael_rcu_gpt.cpp
+    intrusive_michael_rcu_shb.cpp
+    intrusive_michael_rcu_sht.cpp
+    kv_lazy_hp.cpp
+    kv_lazy_dhp.cpp
+    kv_lazy_nogc.cpp
+    kv_lazy_rcu_gpb.cpp
+    kv_lazy_rcu_gpi.cpp
+    kv_lazy_rcu_gpt.cpp
+    kv_lazy_rcu_shb.cpp
+    kv_lazy_rcu_sht.cpp
+    kv_michael_hp.cpp
+    kv_michael_dhp.cpp
+    kv_michael_nogc.cpp
+    kv_michael_rcu_gpb.cpp
+    kv_michael_rcu_gpi.cpp
+    kv_michael_rcu_gpt.cpp
+    kv_michael_rcu_shb.cpp
+    kv_michael_rcu_sht.cpp
+    lazy_hp.cpp
+    lazy_dhp.cpp
+    lazy_nogc.cpp
+    lazy_rcu_gpb.cpp
+    lazy_rcu_gpi.cpp
+    lazy_rcu_gpt.cpp
+    lazy_rcu_shb.cpp
+    lazy_rcu_sht.cpp
+    michael_hp.cpp
+    michael_dhp.cpp
+    michael_nogc.cpp
+    michael_rcu_gpb.cpp
+    michael_rcu_gpi.cpp
+    michael_rcu_gpt.cpp
+    michael_rcu_shb.cpp
+    michael_rcu_sht.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_executable(${PACKAGE_NAME} ${CDSGTEST_LIST_SOURCES})
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/unit/list/intrusive_lazy_dhp.cpp b/test/unit/list/intrusive_lazy_dhp.cpp
new file mode 100644 (file)
index 0000000..a443b00
--- /dev/null
@@ -0,0 +1,272 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_list_hp.h"
+#include <cds/intrusive/lazy_list_dhp.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::DHP gc_type;
+
+    class IntrusiveLazyList_DHP : public cds_test::intrusive_list_hp
+    {
+    public:
+        typedef cds_test::intrusive_list_hp::base_item< ci::lazy_list::node< gc_type>> base_item;
+        typedef cds_test::intrusive_list_hp::member_item< ci::lazy_list::node< gc_type>> member_item;
+
+        typedef cds_test::intrusive_list_hp::base_item< ci::lazy_list::node< gc_type, std::mutex>> base_mutex_item;
+        typedef cds_test::intrusive_list_hp::member_item< ci::lazy_list::node< gc_type, std::mutex>> member_mutex_item;
+
+    protected:
+        void SetUp()
+        {
+            struct traits: public ci::lazy_list::traits
+            {
+                typedef ci::lazy_list::base_hook< cds::opt::gc< gc_type >> hook;
+            };
+            typedef ci::LazyList< gc_type, base_item, traits > list_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, list_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( IntrusiveLazyList_DHP, base_hook )
+    {
+        typedef ci::LazyList< gc_type, base_item,
+            typename ci::lazy_list::make_traits< 
+                ci::opt::hook< ci::lazy_list::base_hook< cds::opt::gc< gc_type >>>
+                ,ci::opt::disposer< mock_disposer >
+                ,cds::opt::less< less< base_item >>
+            >::type 
+       > list_type;
+
+       list_type l;
+       test_common( l );
+       test_ordered_iterator( l );
+       test_hp( l );
+    }
+
+    TEST_F( IntrusiveLazyList_DHP, base_hook_cmp )
+    {
+        typedef ci::LazyList< gc_type, base_item,
+            typename ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::base_hook< cds::opt::gc< gc_type >>>
+                , ci::opt::disposer< mock_disposer >
+                , cds::opt::compare< cmp< base_item >>
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveLazyList_DHP, base_hook_item_counting )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::base_hook< cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< base_item > compare;
+            typedef intrusive_list_common::less< base_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef ci::LazyList< gc_type, base_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveLazyList_DHP, base_hook_mutex )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::base_hook< cds::opt::gc< gc_type >, cds::opt::lock_type< std::mutex>> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< base_mutex_item > compare;
+            typedef intrusive_list_common::less< base_mutex_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef ci::LazyList< gc_type, base_mutex_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveLazyList_DHP, base_hook_backoff )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::base_hook< cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< base_item > compare;
+            typedef intrusive_list_common::less< base_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::pause back_off;
+        };
+        typedef ci::LazyList< gc_type, base_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveLazyList_DHP, base_hook_seqcst )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::base_hook< cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< base_item > compare;
+            typedef intrusive_list_common::less< base_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef ci::LazyList< gc_type, base_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveLazyList_DHP, member_hook )
+    {
+        typedef ci::LazyList< gc_type, member_item,
+            typename ci::lazy_list::make_traits< 
+                ci::opt::hook< ci::lazy_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >>>
+                ,ci::opt::disposer< mock_disposer >
+                ,cds::opt::less< less< member_item >>
+            >::type 
+       > list_type;
+
+       list_type l;
+       test_common( l );
+       test_ordered_iterator( l );
+       test_hp( l );
+    }
+
+    TEST_F( IntrusiveLazyList_DHP, member_hook_cmp )
+    {
+        typedef ci::LazyList< gc_type, member_item,
+            typename ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >>>
+                ,ci::opt::disposer< mock_disposer >
+                ,cds::opt::compare< cmp< member_item >>
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveLazyList_DHP, member_hook_item_counting )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< member_item > compare;
+            typedef intrusive_list_common::less< member_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef ci::LazyList< gc_type, member_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveLazyList_DHP, member_hook_seqcst )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< member_item > compare;
+            typedef intrusive_list_common::less< member_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef ci::LazyList< gc_type, member_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveLazyList_DHP, member_hook_mutex )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::member_hook< offsetof( member_mutex_item, hMember ), cds::opt::gc< gc_type >, cds::opt::lock_type< std::mutex >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< member_mutex_item > compare;
+            typedef intrusive_list_common::less< member_mutex_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef ci::LazyList< gc_type, member_mutex_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveLazyList_DHP, member_hook_back_off )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< member_item > compare;
+            typedef intrusive_list_common::less< member_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::empty back_off;
+        };
+        typedef ci::LazyList< gc_type, member_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+} // namespace
diff --git a/test/unit/list/intrusive_lazy_hp.cpp b/test/unit/list/intrusive_lazy_hp.cpp
new file mode 100644 (file)
index 0000000..bddb5d4
--- /dev/null
@@ -0,0 +1,273 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_list_hp.h"
+#include <cds/intrusive/lazy_list_hp.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::HP gc_type;
+
+    class IntrusiveLazyList_HP : public cds_test::intrusive_list_hp
+    {
+    public:
+        typedef cds_test::intrusive_list_hp::base_item< ci::lazy_list::node< gc_type>> base_item;
+        typedef cds_test::intrusive_list_hp::member_item< ci::lazy_list::node< gc_type>> member_item;
+
+        typedef cds_test::intrusive_list_hp::base_item< ci::lazy_list::node< gc_type, std::mutex>> base_mutex_item;
+        typedef cds_test::intrusive_list_hp::member_item< ci::lazy_list::node< gc_type, std::mutex>> member_mutex_item;
+
+    protected:
+        void SetUp()
+        {
+            struct traits: public ci::lazy_list::traits
+            {
+                typedef ci::lazy_list::base_hook< cds::opt::gc< gc_type >> hook;
+            };
+            typedef ci::LazyList< gc_type, base_item, traits > list_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( list_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( IntrusiveLazyList_HP, base_hook )
+    {
+        typedef ci::LazyList< gc_type, base_item,
+            typename ci::lazy_list::make_traits< 
+                ci::opt::hook< ci::lazy_list::base_hook< cds::opt::gc< gc_type >>>
+                ,ci::opt::disposer< mock_disposer >
+                ,cds::opt::less< less< base_item >>
+            >::type 
+       > list_type;
+
+       list_type l;
+       test_common( l );
+       test_ordered_iterator( l );
+       test_hp( l );
+    }
+
+    TEST_F( IntrusiveLazyList_HP, base_hook_cmp )
+    {
+        typedef ci::LazyList< gc_type, base_item,
+            typename ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::base_hook< cds::opt::gc< gc_type >>>
+                , ci::opt::disposer< mock_disposer >
+                , cds::opt::compare< cmp< base_item >>
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveLazyList_HP, base_hook_item_counting )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::base_hook< cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< base_item > compare;
+            typedef intrusive_list_common::less< base_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef ci::LazyList< gc_type, base_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveLazyList_HP, base_hook_mutex )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::base_hook< cds::opt::gc< gc_type >, cds::opt::lock_type< std::mutex>> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< base_mutex_item > compare;
+            typedef intrusive_list_common::less< base_mutex_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef ci::LazyList< gc_type, base_mutex_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveLazyList_HP, base_hook_backoff )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::base_hook< cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< base_item > compare;
+            typedef intrusive_list_common::less< base_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::pause back_off;
+        };
+        typedef ci::LazyList< gc_type, base_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveLazyList_HP, base_hook_seqcst )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::base_hook< cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< base_item > compare;
+            typedef intrusive_list_common::less< base_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef ci::LazyList< gc_type, base_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveLazyList_HP, member_hook )
+    {
+        typedef ci::LazyList< gc_type, member_item,
+            typename ci::lazy_list::make_traits< 
+                ci::opt::hook< ci::lazy_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >>>
+                ,ci::opt::disposer< mock_disposer >
+                ,cds::opt::less< less< member_item >>
+            >::type 
+       > list_type;
+
+       list_type l;
+       test_common( l );
+       test_ordered_iterator( l );
+       test_hp( l );
+    }
+
+    TEST_F( IntrusiveLazyList_HP, member_hook_cmp )
+    {
+        typedef ci::LazyList< gc_type, member_item,
+            typename ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >>>
+                ,ci::opt::disposer< mock_disposer >
+                ,cds::opt::compare< cmp< member_item >>
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveLazyList_HP, member_hook_item_counting )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< member_item > compare;
+            typedef intrusive_list_common::less< member_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef ci::LazyList< gc_type, member_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveLazyList_HP, member_hook_seqcst )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< member_item > compare;
+            typedef intrusive_list_common::less< member_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef ci::LazyList< gc_type, member_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveLazyList_HP, member_hook_mutex )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::member_hook< offsetof( member_mutex_item, hMember ), cds::opt::gc< gc_type >, cds::opt::lock_type< std::mutex >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< member_mutex_item > compare;
+            typedef intrusive_list_common::less< member_mutex_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef ci::LazyList< gc_type, member_mutex_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveLazyList_HP, member_hook_back_off )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< member_item > compare;
+            typedef intrusive_list_common::less< member_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::empty back_off;
+        };
+        typedef ci::LazyList< gc_type, member_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+} // namespace
diff --git a/test/unit/list/intrusive_lazy_nogc.cpp b/test/unit/list/intrusive_lazy_nogc.cpp
new file mode 100644 (file)
index 0000000..bd97556
--- /dev/null
@@ -0,0 +1,241 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_list_nogc.h"
+#include <cds/intrusive/lazy_list_nogc.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::nogc gc_type;
+
+    class IntrusiveLazyList_NOGC : public cds_test::intrusive_list_nogc
+    {
+    public:
+        typedef cds_test::intrusive_list_nogc::base_item< ci::lazy_list::node< gc_type>> base_item;
+        typedef cds_test::intrusive_list_nogc::member_item< ci::lazy_list::node< gc_type>> member_item;
+
+        typedef cds_test::intrusive_list_nogc::base_item< ci::lazy_list::node< gc_type, std::mutex>> base_mutex_item;
+        typedef cds_test::intrusive_list_nogc::member_item< ci::lazy_list::node< gc_type, std::mutex>> member_mutex_item;
+    };
+
+    TEST_F( IntrusiveLazyList_NOGC, base_hook )
+    {
+        typedef ci::LazyList< gc_type, base_item,
+            typename ci::lazy_list::make_traits< 
+                ci::opt::hook< ci::lazy_list::base_hook< cds::opt::gc< gc_type >>>
+                ,ci::opt::disposer< mock_disposer >
+                ,cds::opt::less< less< base_item >>
+            >::type 
+       > list_type;
+
+       list_type l;
+       test_common( l );
+       test_ordered_iterator( l );
+    }
+
+    TEST_F( IntrusiveLazyList_NOGC, base_hook_cmp )
+    {
+        typedef ci::LazyList< gc_type, base_item,
+            typename ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::base_hook< cds::opt::gc< gc_type >>>
+                , ci::opt::disposer< mock_disposer >
+                , cds::opt::compare< cmp< base_item >>
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( IntrusiveLazyList_NOGC, base_hook_item_counting )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::base_hook< cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< base_item > compare;
+            typedef intrusive_list_nogc::less< base_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef ci::LazyList< gc_type, base_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( IntrusiveLazyList_NOGC, base_hook_mutex )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::base_hook< cds::opt::gc< gc_type >, cds::opt::lock_type< std::mutex>> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< base_mutex_item > compare;
+            typedef intrusive_list_nogc::less< base_mutex_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef ci::LazyList< gc_type, base_mutex_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( IntrusiveLazyList_NOGC, base_hook_backoff )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::base_hook< cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< base_item > compare;
+            typedef intrusive_list_nogc::less< base_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::pause back_off;
+        };
+        typedef ci::LazyList< gc_type, base_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( IntrusiveLazyList_NOGC, base_hook_seqcst )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::base_hook< cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< base_item > compare;
+            typedef intrusive_list_nogc::less< base_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef ci::LazyList< gc_type, base_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( IntrusiveLazyList_NOGC, member_hook )
+    {
+        typedef ci::LazyList< gc_type, member_item,
+            typename ci::lazy_list::make_traits< 
+                ci::opt::hook< ci::lazy_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >>>
+                ,ci::opt::disposer< mock_disposer >
+                ,cds::opt::less< less< member_item >>
+            >::type 
+       > list_type;
+
+       list_type l;
+       test_common( l );
+       test_ordered_iterator( l );
+    }
+
+    TEST_F( IntrusiveLazyList_NOGC, member_hook_cmp )
+    {
+        typedef ci::LazyList< gc_type, member_item,
+            typename ci::lazy_list::make_traits<
+                ci::opt::hook< ci::lazy_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >>>
+                ,ci::opt::disposer< mock_disposer >
+                ,cds::opt::compare< cmp< member_item >>
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( IntrusiveLazyList_NOGC, member_hook_item_counting )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< member_item > compare;
+            typedef intrusive_list_nogc::less< member_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef ci::LazyList< gc_type, member_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( IntrusiveLazyList_NOGC, member_hook_seqcst )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< member_item > compare;
+            typedef intrusive_list_nogc::less< member_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef ci::LazyList< gc_type, member_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( IntrusiveLazyList_NOGC, member_hook_mutex )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::member_hook< offsetof( member_mutex_item, hMember ), cds::opt::gc< gc_type >, cds::opt::lock_type< std::mutex >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< member_mutex_item > compare;
+            typedef intrusive_list_nogc::less< member_mutex_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef ci::LazyList< gc_type, member_mutex_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( IntrusiveLazyList_NOGC, member_hook_back_off )
+    {
+        struct traits : public ci::lazy_list::traits {
+            typedef ci::lazy_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< member_item > compare;
+            typedef intrusive_list_nogc::less< member_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::empty back_off;
+        };
+        typedef ci::LazyList< gc_type, member_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+    }
+
+} // namespace
diff --git a/test/unit/list/intrusive_lazy_rcu_gpb.cpp b/test/unit/list/intrusive_lazy_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..90cc5fe
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_intrusive_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, IntrusiveLazyList, rcu_implementation );
diff --git a/test/unit/list/intrusive_lazy_rcu_gpi.cpp b/test/unit/list/intrusive_lazy_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..4d889b5
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_intrusive_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, IntrusiveLazyList, rcu_implementation );
diff --git a/test/unit/list/intrusive_lazy_rcu_gpt.cpp b/test/unit/list/intrusive_lazy_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..dd8b1ab
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_intrusive_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, IntrusiveLazyList, rcu_implementation );
diff --git a/test/unit/list/intrusive_lazy_rcu_shb.cpp b/test/unit/list/intrusive_lazy_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..9a1e7c1
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_intrusive_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, IntrusiveLazyList, rcu_implementation );
+
+#endif // #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/list/intrusive_lazy_rcu_sht.cpp b/test/unit/list/intrusive_lazy_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..5a2d57f
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_intrusive_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, IntrusiveLazyList, rcu_implementation );
+
+#endif // #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/list/intrusive_michael_dhp.cpp b/test/unit/list/intrusive_michael_dhp.cpp
new file mode 100644 (file)
index 0000000..d6de7f0
--- /dev/null
@@ -0,0 +1,234 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_list_hp.h"
+#include <cds/intrusive/michael_list_dhp.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::DHP gc_type;
+
+    class IntrusiveMichaelList_DHP : public cds_test::intrusive_list_hp
+    {
+    public:
+        typedef cds_test::intrusive_list_hp::base_item< ci::michael_list::node< gc_type>> base_item;
+        typedef cds_test::intrusive_list_hp::member_item< ci::michael_list::node< gc_type>> member_item;
+
+    protected:
+        void SetUp()
+        {
+            struct traits: public ci::michael_list::traits
+            {
+                typedef ci::michael_list::base_hook< cds::opt::gc< gc_type >> hook;
+            };
+            typedef ci::MichaelList< gc_type, base_item, traits > list_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, list_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( IntrusiveMichaelList_DHP, base_hook )
+    {
+        typedef ci::MichaelList< gc_type, base_item,
+            typename ci::michael_list::make_traits< 
+                ci::opt::hook< ci::michael_list::base_hook< cds::opt::gc< gc_type >>>
+                ,ci::opt::disposer< mock_disposer >
+                ,cds::opt::less< less< base_item >>
+            >::type 
+       > list_type;
+
+       list_type l;
+       test_common( l );
+       test_ordered_iterator( l );
+       test_hp( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_DHP, base_hook_cmp )
+    {
+        typedef ci::MichaelList< gc_type, base_item,
+            typename ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::base_hook< cds::opt::gc< gc_type >>>
+                , ci::opt::disposer< mock_disposer >
+                , cds::opt::compare< cmp< base_item >>
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_DHP, base_hook_item_counting )
+    {
+        struct traits : public ci::michael_list::traits {
+            typedef ci::michael_list::base_hook< cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< base_item > compare;
+            typedef intrusive_list_common::less< base_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef ci::MichaelList< gc_type, base_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_DHP, base_hook_backoff )
+    {
+        struct traits : public ci::michael_list::traits {
+            typedef ci::michael_list::base_hook< cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< base_item > compare;
+            typedef intrusive_list_common::less< base_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::pause back_off;
+        };
+        typedef ci::MichaelList< gc_type, base_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_DHP, base_hook_seqcst )
+    {
+        struct traits : public ci::michael_list::traits {
+            typedef ci::michael_list::base_hook< cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< base_item > compare;
+            typedef intrusive_list_common::less< base_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef ci::MichaelList< gc_type, base_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_DHP, member_hook )
+    {
+        typedef ci::MichaelList< gc_type, member_item,
+            typename ci::michael_list::make_traits< 
+                ci::opt::hook< ci::michael_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >>>
+                ,ci::opt::disposer< mock_disposer >
+                ,cds::opt::less< less< member_item >>
+            >::type 
+       > list_type;
+
+       list_type l;
+       test_common( l );
+       test_ordered_iterator( l );
+       test_hp( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_DHP, member_hook_cmp )
+    {
+        typedef ci::MichaelList< gc_type, member_item,
+            typename ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >>>
+                ,ci::opt::disposer< mock_disposer >
+                ,cds::opt::compare< cmp< member_item >>
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_DHP, member_hook_item_counting )
+    {
+        struct traits : public ci::michael_list::traits {
+            typedef ci::michael_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< member_item > compare;
+            typedef intrusive_list_common::less< member_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef ci::MichaelList< gc_type, member_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_DHP, member_hook_seqcst )
+    {
+        struct traits : public ci::michael_list::traits {
+            typedef ci::michael_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< member_item > compare;
+            typedef intrusive_list_common::less< member_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef ci::MichaelList< gc_type, member_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_DHP, member_hook_back_off )
+    {
+        struct traits : public ci::michael_list::traits {
+            typedef ci::michael_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< member_item > compare;
+            typedef intrusive_list_common::less< member_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::empty back_off;
+        };
+        typedef ci::MichaelList< gc_type, member_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+} // namespace
diff --git a/test/unit/list/intrusive_michael_hp.cpp b/test/unit/list/intrusive_michael_hp.cpp
new file mode 100644 (file)
index 0000000..26b0bb5
--- /dev/null
@@ -0,0 +1,235 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_list_hp.h"
+#include <cds/intrusive/michael_list_hp.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::HP gc_type;
+
+    class IntrusiveMichaelList_HP : public cds_test::intrusive_list_hp
+    {
+    public:
+        typedef cds_test::intrusive_list_hp::base_item< ci::michael_list::node< gc_type>> base_item;
+        typedef cds_test::intrusive_list_hp::member_item< ci::michael_list::node< gc_type>> member_item;
+
+    protected:
+        void SetUp()
+        {
+            struct traits: public ci::michael_list::traits
+            {
+                typedef ci::michael_list::base_hook< cds::opt::gc< gc_type >> hook;
+            };
+            typedef ci::MichaelList< gc_type, base_item, traits > list_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( list_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( IntrusiveMichaelList_HP, base_hook )
+    {
+        typedef ci::MichaelList< gc_type, base_item,
+            typename ci::michael_list::make_traits< 
+                ci::opt::hook< ci::michael_list::base_hook< cds::opt::gc< gc_type >>>
+                ,ci::opt::disposer< mock_disposer >
+                ,cds::opt::less< less< base_item >>
+            >::type 
+       > list_type;
+
+       list_type l;
+       test_common( l );
+       test_ordered_iterator( l );
+       test_hp( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_HP, base_hook_cmp )
+    {
+        typedef ci::MichaelList< gc_type, base_item,
+            typename ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::base_hook< cds::opt::gc< gc_type >>>
+                , ci::opt::disposer< mock_disposer >
+                , cds::opt::compare< cmp< base_item >>
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_HP, base_hook_item_counting )
+    {
+        struct traits : public ci::michael_list::traits {
+            typedef ci::michael_list::base_hook< cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< base_item > compare;
+            typedef intrusive_list_common::less< base_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef ci::MichaelList< gc_type, base_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_HP, base_hook_backoff )
+    {
+        struct traits : public ci::michael_list::traits {
+            typedef ci::michael_list::base_hook< cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< base_item > compare;
+            typedef intrusive_list_common::less< base_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::pause back_off;
+        };
+        typedef ci::MichaelList< gc_type, base_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_HP, base_hook_seqcst )
+    {
+        struct traits : public ci::michael_list::traits {
+            typedef ci::michael_list::base_hook< cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< base_item > compare;
+            typedef intrusive_list_common::less< base_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef ci::MichaelList< gc_type, base_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_HP, member_hook )
+    {
+        typedef ci::MichaelList< gc_type, member_item,
+            typename ci::michael_list::make_traits< 
+                ci::opt::hook< ci::michael_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >>>
+                ,ci::opt::disposer< mock_disposer >
+                ,cds::opt::less< less< member_item >>
+            >::type 
+       > list_type;
+
+       list_type l;
+       test_common( l );
+       test_ordered_iterator( l );
+       test_hp( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_HP, member_hook_cmp )
+    {
+        typedef ci::MichaelList< gc_type, member_item,
+            typename ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >>>
+                ,ci::opt::disposer< mock_disposer >
+                ,cds::opt::compare< cmp< member_item >>
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_HP, member_hook_item_counting )
+    {
+        struct traits : public ci::michael_list::traits {
+            typedef ci::michael_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< member_item > compare;
+            typedef intrusive_list_common::less< member_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef ci::MichaelList< gc_type, member_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_HP, member_hook_seqcst )
+    {
+        struct traits : public ci::michael_list::traits {
+            typedef ci::michael_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< member_item > compare;
+            typedef intrusive_list_common::less< member_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef ci::MichaelList< gc_type, member_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_HP, member_hook_back_off )
+    {
+        struct traits : public ci::michael_list::traits {
+            typedef ci::michael_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< member_item > compare;
+            typedef intrusive_list_common::less< member_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::empty back_off;
+        };
+        typedef ci::MichaelList< gc_type, member_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+} // namespace
diff --git a/test/unit/list/intrusive_michael_nogc.cpp b/test/unit/list/intrusive_michael_nogc.cpp
new file mode 100644 (file)
index 0000000..21a3ff2
--- /dev/null
@@ -0,0 +1,205 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_list_nogc.h"
+#include <cds/intrusive/michael_list_nogc.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::nogc gc_type;
+
+    class IntrusiveMichaelList_NOGC : public cds_test::intrusive_list_nogc
+    {
+    public:
+        typedef cds_test::intrusive_list_nogc::base_item< ci::michael_list::node< gc_type>> base_item;
+        typedef cds_test::intrusive_list_nogc::member_item< ci::michael_list::node< gc_type>> member_item;
+    };
+
+    TEST_F( IntrusiveMichaelList_NOGC, base_hook )
+    {
+        typedef ci::MichaelList< gc_type, base_item,
+            typename ci::michael_list::make_traits< 
+                ci::opt::hook< ci::michael_list::base_hook< cds::opt::gc< gc_type >>>
+                ,ci::opt::disposer< mock_disposer >
+                ,cds::opt::less< less< base_item >>
+            >::type 
+       > list_type;
+
+       list_type l;
+       test_common( l );
+       test_ordered_iterator( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_NOGC, base_hook_cmp )
+    {
+        typedef ci::MichaelList< gc_type, base_item,
+            typename ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::base_hook< cds::opt::gc< gc_type >>>
+                , ci::opt::disposer< mock_disposer >
+                , cds::opt::compare< cmp< base_item >>
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_NOGC, base_hook_item_counting )
+    {
+        struct traits : public ci::michael_list::traits {
+            typedef ci::michael_list::base_hook< cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< base_item > compare;
+            typedef intrusive_list_nogc::less< base_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef ci::MichaelList< gc_type, base_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_NOGC, base_hook_backoff )
+    {
+        struct traits : public ci::michael_list::traits {
+            typedef ci::michael_list::base_hook< cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< base_item > compare;
+            typedef intrusive_list_nogc::less< base_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::pause back_off;
+        };
+        typedef ci::MichaelList< gc_type, base_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_NOGC, base_hook_seqcst )
+    {
+        struct traits : public ci::michael_list::traits {
+            typedef ci::michael_list::base_hook< cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< base_item > compare;
+            typedef intrusive_list_nogc::less< base_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef ci::MichaelList< gc_type, base_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_NOGC, member_hook )
+    {
+        typedef ci::MichaelList< gc_type, member_item,
+            typename ci::michael_list::make_traits< 
+                ci::opt::hook< ci::michael_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >>>
+                ,ci::opt::disposer< mock_disposer >
+                ,cds::opt::less< less< member_item >>
+            >::type 
+       > list_type;
+
+       list_type l;
+       test_common( l );
+       test_ordered_iterator( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_NOGC, member_hook_cmp )
+    {
+        typedef ci::MichaelList< gc_type, member_item,
+            typename ci::michael_list::make_traits<
+                ci::opt::hook< ci::michael_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >>>
+                ,ci::opt::disposer< mock_disposer >
+                ,cds::opt::compare< cmp< member_item >>
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_NOGC, member_hook_item_counting )
+    {
+        struct traits : public ci::michael_list::traits {
+            typedef ci::michael_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< member_item > compare;
+            typedef intrusive_list_nogc::less< member_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef ci::MichaelList< gc_type, member_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_NOGC, member_hook_seqcst )
+    {
+        struct traits : public ci::michael_list::traits {
+            typedef ci::michael_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< member_item > compare;
+            typedef intrusive_list_nogc::less< member_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef ci::MichaelList< gc_type, member_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( IntrusiveMichaelList_NOGC, member_hook_back_off )
+    {
+        struct traits : public ci::michael_list::traits {
+            typedef ci::michael_list::member_hook< offsetof( member_item, hMember ), cds::opt::gc< gc_type >> hook;
+            typedef mock_disposer disposer;
+            typedef cmp< member_item > compare;
+            typedef intrusive_list_nogc::less< member_item > less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::empty back_off;
+        };
+        typedef ci::MichaelList< gc_type, member_item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+    }
+
+} // namespace
diff --git a/test/unit/list/intrusive_michael_rcu_gpb.cpp b/test/unit/list/intrusive_michael_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..4b494c9
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_intrusive_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, IntrusiveMichaelList, rcu_implementation );
diff --git a/test/unit/list/intrusive_michael_rcu_gpi.cpp b/test/unit/list/intrusive_michael_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..14465f3
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_intrusive_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, IntrusiveMichaelList, rcu_implementation );
diff --git a/test/unit/list/intrusive_michael_rcu_gpt.cpp b/test/unit/list/intrusive_michael_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..1d2d767
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_intrusive_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, IntrusiveMichaelList, rcu_implementation );
diff --git a/test/unit/list/intrusive_michael_rcu_shb.cpp b/test/unit/list/intrusive_michael_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..7c408bb
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_intrusive_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, IntrusiveMichaelList, rcu_implementation );
+
+#endif // #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/list/intrusive_michael_rcu_sht.cpp b/test/unit/list/intrusive_michael_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..8d96f6f
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_intrusive_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, IntrusiveMichaelList, rcu_implementation );
+
+#endif // #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/list/kv_lazy_dhp.cpp b/test/unit/list/kv_lazy_dhp.cpp
new file mode 100644 (file)
index 0000000..9b24297
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_kv_list_hp.h"
+#include <cds/container/lazy_kvlist_dhp.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+    class LazyKVList_DHP : public cds_test::kv_list_hp
+    {
+    protected:
+        void SetUp()
+        {
+            typedef cc::LazyKVList< gc_type, key_type, value_type > list_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, list_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( LazyKVList_DHP, less_ordered )
+    {
+        typedef cc::LazyKVList< gc_type, key_type, value_type,
+            typename cc::lazy_list::make_traits<
+                cds::opt::less< lt >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyKVList_DHP, compare_ordered )
+    {
+        typedef cc::LazyKVList< gc_type, key_type, value_type,
+            typename cc::lazy_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyKVList_DHP, mix_ordered )
+    {
+        typedef cc::LazyKVList< gc_type, key_type, value_type,
+            typename cc::lazy_list::make_traits<
+                cds::opt::compare< cmp >
+                ,cds::opt::less< lt >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyKVList_DHP, item_counting )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::LazyKVList<gc_type, key_type, value_type, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyKVList_DHP, backoff )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::empty back_off;
+        };
+        typedef cc::LazyKVList<gc_type, key_type, value_type, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyKVList_DHP, seq_cst )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::LazyKVList<gc_type, key_type, value_type, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyKVList_DHP, mutex )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef std::mutex lock_type;
+        };
+        typedef cc::LazyKVList<gc_type, key_type, value_type, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+} // namespace
diff --git a/test/unit/list/kv_lazy_hp.cpp b/test/unit/list/kv_lazy_hp.cpp
new file mode 100644 (file)
index 0000000..fd5f0c8
--- /dev/null
@@ -0,0 +1,163 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_kv_list_hp.h"
+#include <cds/container/lazy_kvlist_hp.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+    class LazyKVList_HP : public cds_test::kv_list_hp
+    {
+    protected:
+        void SetUp()
+        {
+            typedef cc::LazyKVList< gc_type, key_type, value_type > list_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( list_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( LazyKVList_HP, less_ordered )
+    {
+        typedef cc::LazyKVList< gc_type, key_type, value_type,
+            typename cc::lazy_list::make_traits<
+                cds::opt::less< lt >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyKVList_HP, compare_ordered )
+    {
+        typedef cc::LazyKVList< gc_type, key_type, value_type,
+            typename cc::lazy_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyKVList_HP, mix_ordered )
+    {
+        typedef cc::LazyKVList< gc_type, key_type, value_type,
+            typename cc::lazy_list::make_traits<
+                cds::opt::compare< cmp >
+                ,cds::opt::less< lt >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyKVList_HP, item_counting )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::LazyKVList<gc_type, key_type, value_type, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyKVList_HP, backoff )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::empty back_off;
+        };
+        typedef cc::LazyKVList<gc_type, key_type, value_type, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyKVList_HP, seq_cst )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::LazyKVList<gc_type, key_type, value_type, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyKVList_HP, mutex )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef std::mutex lock_type;
+        };
+        typedef cc::LazyKVList<gc_type, key_type, value_type, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+} // namespace
diff --git a/test/unit/list/kv_lazy_nogc.cpp b/test/unit/list/kv_lazy_nogc.cpp
new file mode 100644 (file)
index 0000000..db732cb
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_kv_list_nogc.h"
+#include <cds/container/lazy_kvlist_nogc.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::nogc gc_type;
+
+    class LazyKVList_NOGC : public cds_test::kv_list_nogc
+    {};
+
+    TEST_F( LazyKVList_NOGC, less_ordered )
+    {
+        typedef cc::LazyKVList< gc_type, key_type, value_type,
+            typename cc::lazy_list::make_traits<
+                cds::opt::less< lt >
+            >::type
+        > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( LazyKVList_NOGC, compare_ordered )
+    {
+        typedef cc::LazyKVList< gc_type, key_type, value_type,
+            typename cc::lazy_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( LazyKVList_NOGC, mix_ordered )
+    {
+        typedef cc::LazyKVList< gc_type, key_type, value_type,
+            typename cc::lazy_list::make_traits<
+                cds::opt::compare< cmp >
+                ,cds::opt::less< lt >
+            >::type
+        > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( LazyKVList_NOGC, item_counting )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::LazyKVList<gc_type, key_type, value_type, traits > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( LazyKVList_NOGC, backoff )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::empty back_off;
+        };
+        typedef cc::LazyKVList<gc_type, key_type, value_type, traits > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( LazyKVList_NOGC, seq_cst )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::LazyKVList<gc_type, key_type, value_type, traits > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( LazyKVList_NOGC, mutex )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef std::mutex lock_type;
+        };
+        typedef cc::LazyKVList<gc_type, key_type, value_type, traits > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+} // namespace
diff --git a/test/unit/list/kv_lazy_rcu_gpb.cpp b/test/unit/list/kv_lazy_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..c518091
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_kv_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, LazyKVList, rcu_implementation );
diff --git a/test/unit/list/kv_lazy_rcu_gpi.cpp b/test/unit/list/kv_lazy_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..afc8989
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_kv_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, LazyKVList, rcu_implementation );
diff --git a/test/unit/list/kv_lazy_rcu_gpt.cpp b/test/unit/list/kv_lazy_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..48ba2e8
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_kv_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, LazyKVList, rcu_implementation );
diff --git a/test/unit/list/kv_lazy_rcu_shb.cpp b/test/unit/list/kv_lazy_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..e1830aa
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_kv_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, LazyKVList, rcu_implementation );
+
+#endif
diff --git a/test/unit/list/kv_lazy_rcu_sht.cpp b/test/unit/list/kv_lazy_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..8843e25
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+#include "test_kv_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, LazyKVList, rcu_implementation );
+
+#endif
diff --git a/test/unit/list/kv_michael_dhp.cpp b/test/unit/list/kv_michael_dhp.cpp
new file mode 100644 (file)
index 0000000..f942b96
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_kv_list_hp.h"
+#include <cds/container/michael_kvlist_dhp.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+    class MichaelKVList_DHP : public cds_test::kv_list_hp
+    {
+    protected:
+        void SetUp()
+        {
+            typedef cc::MichaelKVList< gc_type, key_type, value_type > list_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, list_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( MichaelKVList_DHP, less_ordered )
+    {
+        typedef cc::MichaelKVList< gc_type, key_type, value_type,
+            typename cc::michael_list::make_traits<
+                cds::opt::less< lt >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( MichaelKVList_DHP, compare_ordered )
+    {
+        typedef cc::MichaelKVList< gc_type, key_type, value_type,
+            typename cc::michael_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( MichaelKVList_DHP, mix_ordered )
+    {
+        typedef cc::MichaelKVList< gc_type, key_type, value_type,
+            typename cc::michael_list::make_traits<
+                cds::opt::compare< cmp >
+                ,cds::opt::less< lt >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( MichaelKVList_DHP, item_counting )
+    {
+        struct traits : public cc::michael_list::traits
+        {
+            typedef lt less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelKVList<gc_type, key_type, value_type, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( MichaelKVList_DHP, backoff )
+    {
+        struct traits : public cc::michael_list::traits
+        {
+            typedef lt less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::empty back_off;
+        };
+        typedef cc::MichaelKVList<gc_type, key_type, value_type, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( MichaelKVList_DHP, seq_cst )
+    {
+        struct traits : public cc::michael_list::traits
+        {
+            typedef lt less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::MichaelKVList<gc_type, key_type, value_type, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+} // namespace
diff --git a/test/unit/list/kv_michael_hp.cpp b/test/unit/list/kv_michael_hp.cpp
new file mode 100644 (file)
index 0000000..baca4a3
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_kv_list_hp.h"
+#include <cds/container/michael_kvlist_hp.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+    class MichaelKVList_HP : public cds_test::kv_list_hp
+    {
+    protected:
+        void SetUp()
+        {
+            typedef cc::MichaelKVList< gc_type, key_type, value_type > list_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( list_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( MichaelKVList_HP, less_ordered )
+    {
+        typedef cc::MichaelKVList< gc_type, key_type, value_type,
+            typename cc::michael_list::make_traits<
+                cds::opt::less< lt >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( MichaelKVList_HP, compare_ordered )
+    {
+        typedef cc::MichaelKVList< gc_type, key_type, value_type,
+            typename cc::michael_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( MichaelKVList_HP, mix_ordered )
+    {
+        typedef cc::MichaelKVList< gc_type, key_type, value_type,
+            typename cc::michael_list::make_traits<
+                cds::opt::compare< cmp >
+                ,cds::opt::less< lt >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( MichaelKVList_HP, item_counting )
+    {
+        struct traits : public cc::michael_list::traits
+        {
+            typedef lt less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelKVList<gc_type, key_type, value_type, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( MichaelKVList_HP, backoff )
+    {
+        struct traits : public cc::michael_list::traits
+        {
+            typedef lt less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::empty back_off;
+        };
+        typedef cc::MichaelKVList<gc_type, key_type, value_type, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( MichaelKVList_HP, seq_cst )
+    {
+        struct traits : public cc::michael_list::traits
+        {
+            typedef lt less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::MichaelKVList<gc_type, key_type, value_type, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+} // namespace
diff --git a/test/unit/list/kv_michael_nogc.cpp b/test/unit/list/kv_michael_nogc.cpp
new file mode 100644 (file)
index 0000000..083aa6d
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_kv_list_nogc.h"
+#include <cds/container/michael_kvlist_nogc.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::nogc gc_type;
+
+    class MichaelKVList_NOGC : public cds_test::kv_list_nogc
+    {};
+
+    TEST_F( MichaelKVList_NOGC, less_ordered )
+    {
+        typedef cc::MichaelKVList< gc_type, key_type, value_type,
+            typename cc::michael_list::make_traits<
+                cds::opt::less< lt >
+            >::type
+        > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( MichaelKVList_NOGC, compare_ordered )
+    {
+        typedef cc::MichaelKVList< gc_type, key_type, value_type,
+            typename cc::michael_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( MichaelKVList_NOGC, mix_ordered )
+    {
+        typedef cc::MichaelKVList< gc_type, key_type, value_type,
+            typename cc::michael_list::make_traits<
+                cds::opt::compare< cmp >
+                ,cds::opt::less< lt >
+            >::type
+        > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( MichaelKVList_NOGC, item_counting )
+    {
+        struct traits : public cc::michael_list::traits
+        {
+            typedef lt less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelKVList<gc_type, key_type, value_type, traits > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( MichaelKVList_NOGC, backoff )
+    {
+        struct traits : public cc::michael_list::traits
+        {
+            typedef lt less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::empty back_off;
+        };
+        typedef cc::MichaelKVList<gc_type, key_type, value_type, traits > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( MichaelKVList_NOGC, seq_cst )
+    {
+        struct traits : public cc::michael_list::traits
+        {
+            typedef lt less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::MichaelKVList<gc_type, key_type, value_type, traits > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+} // namespace
diff --git a/test/unit/list/kv_michael_rcu_gpb.cpp b/test/unit/list/kv_michael_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..29805aa
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_kv_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, MichaelKVList, rcu_implementation );
diff --git a/test/unit/list/kv_michael_rcu_gpi.cpp b/test/unit/list/kv_michael_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..f419bd6
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_kv_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, MichaelKVList, rcu_implementation );
diff --git a/test/unit/list/kv_michael_rcu_gpt.cpp b/test/unit/list/kv_michael_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..669e856
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_kv_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, MichaelKVList, rcu_implementation );
diff --git a/test/unit/list/kv_michael_rcu_shb.cpp b/test/unit/list/kv_michael_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..e7b376c
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_kv_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, MichaelKVList, rcu_implementation );
+
+#endif
diff --git a/test/unit/list/kv_michael_rcu_sht.cpp b/test/unit/list/kv_michael_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..0fc1f41
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+#include "test_kv_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, MichaelKVList, rcu_implementation );
+
+#endif
diff --git a/test/unit/list/lazy_dhp.cpp b/test/unit/list/lazy_dhp.cpp
new file mode 100644 (file)
index 0000000..da84906
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_list_hp.h"
+#include <cds/container/lazy_list_dhp.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+    class LazyList_DHP : public cds_test::list_hp
+    {
+    protected:
+        void SetUp()
+        {
+            typedef cc::LazyList< gc_type, item > list_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, list_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( LazyList_DHP, less_ordered )
+    {
+        typedef cc::LazyList< gc_type, item,
+            typename cc::lazy_list::make_traits<
+                cds::opt::less< lt<item> >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyList_DHP, compare_ordered )
+    {
+        typedef cc::LazyList< gc_type, item,
+            typename cc::lazy_list::make_traits<
+                cds::opt::compare< cmp<item> >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyList_DHP, mix_ordered )
+    {
+        typedef cc::LazyList< gc_type, item,
+            typename cc::lazy_list::make_traits<
+                cds::opt::compare< cmp<item> >
+                ,cds::opt::less< lt<item> >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyList_DHP, item_counting )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt<item> less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::LazyList<gc_type, item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyList_DHP, backoff )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt<item> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::empty back_off;
+        };
+        typedef cc::LazyList<gc_type, item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyList_DHP, seq_cst )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt<item> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::LazyList<gc_type, item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyList_DHP, mutex )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt<item> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef std::mutex lock_type;
+        };
+        typedef cc::LazyList<gc_type, item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+} // namespace
diff --git a/test/unit/list/lazy_hp.cpp b/test/unit/list/lazy_hp.cpp
new file mode 100644 (file)
index 0000000..9189906
--- /dev/null
@@ -0,0 +1,163 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_list_hp.h"
+#include <cds/container/lazy_list_hp.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+    class LazyList_HP : public cds_test::list_hp
+    {
+    protected:
+        void SetUp()
+        {
+            typedef cc::LazyList< gc_type, item > list_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( list_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( LazyList_HP, less_ordered )
+    {
+        typedef cc::LazyList< gc_type, item,
+            typename cc::lazy_list::make_traits<
+                cds::opt::less< lt<item> >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyList_HP, compare_ordered )
+    {
+        typedef cc::LazyList< gc_type, item,
+            typename cc::lazy_list::make_traits<
+                cds::opt::compare< cmp<item> >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyList_HP, mix_ordered )
+    {
+        typedef cc::LazyList< gc_type, item,
+            typename cc::lazy_list::make_traits<
+                cds::opt::compare< cmp<item> >
+                ,cds::opt::less< lt<item> >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyList_HP, item_counting )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt<item> less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::LazyList<gc_type, item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyList_HP, backoff )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt<item> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::empty back_off;
+        };
+        typedef cc::LazyList<gc_type, item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyList_HP, seq_cst )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt<item> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::LazyList<gc_type, item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( LazyList_HP, mutex )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt<item> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef std::mutex lock_type;
+        };
+        typedef cc::LazyList<gc_type, item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+} // namespace
diff --git a/test/unit/list/lazy_nogc.cpp b/test/unit/list/lazy_nogc.cpp
new file mode 100644 (file)
index 0000000..c150744
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_list_nogc.h"
+#include <cds/container/lazy_list_nogc.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::nogc gc_type;
+
+    class LazyList_NOGC : public cds_test::list_nogc
+    {};
+
+    TEST_F( LazyList_NOGC, less_ordered )
+    {
+        typedef cc::LazyList< gc_type, item,
+            typename cc::lazy_list::make_traits<
+                cds::opt::less< lt<item> >
+            >::type
+        > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( LazyList_NOGC, compare_ordered )
+    {
+        typedef cc::LazyList< gc_type, item,
+            typename cc::lazy_list::make_traits<
+                cds::opt::compare< cmp<item> >
+            >::type
+        > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( LazyList_NOGC, mix_ordered )
+    {
+        typedef cc::LazyList< gc_type, item,
+            typename cc::lazy_list::make_traits<
+                cds::opt::compare< cmp<item> >
+                ,cds::opt::less< lt<item> >
+            >::type
+        > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( LazyList_NOGC, item_counting )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt<item> less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::LazyList<gc_type, item, traits > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( LazyList_NOGC, backoff )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt<item> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::empty back_off;
+        };
+        typedef cc::LazyList<gc_type, item, traits > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( LazyList_NOGC, seq_cst )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt<item> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::LazyList<gc_type, item, traits > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( LazyList_NOGC, mutex )
+    {
+        struct traits : public cc::lazy_list::traits
+        {
+            typedef lt<item> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef std::mutex lock_type;
+        };
+        typedef cc::LazyList<gc_type, item, traits > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+} // namespace
diff --git a/test/unit/list/lazy_rcu_gpb.cpp b/test/unit/list/lazy_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..adc4c4e
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, LazyList, rcu_implementation );
diff --git a/test/unit/list/lazy_rcu_gpi.cpp b/test/unit/list/lazy_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..8514ff1
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, LazyList, rcu_implementation );
diff --git a/test/unit/list/lazy_rcu_gpt.cpp b/test/unit/list/lazy_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..6748d6c
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, LazyList, rcu_implementation );
diff --git a/test/unit/list/lazy_rcu_shb.cpp b/test/unit/list/lazy_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..dd9da15
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, LazyList, rcu_implementation );
+
+#endif
diff --git a/test/unit/list/lazy_rcu_sht.cpp b/test/unit/list/lazy_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..aae8016
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+#include "test_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, LazyList, rcu_implementation );
+
+#endif
diff --git a/test/unit/list/michael_dhp.cpp b/test/unit/list/michael_dhp.cpp
new file mode 100644 (file)
index 0000000..1ecabe2
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_list_hp.h"
+#include <cds/container/michael_list_dhp.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+    class MichaelList_DHP : public cds_test::list_hp
+    {
+    protected:
+        void SetUp()
+        {
+            typedef cc::MichaelList< gc_type, item > list_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, list_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( MichaelList_DHP, less_ordered )
+    {
+        typedef cc::MichaelList< gc_type, item,
+            typename cc::michael_list::make_traits<
+                cds::opt::less< lt<item> >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( MichaelList_DHP, compare_ordered )
+    {
+        typedef cc::MichaelList< gc_type, item,
+            typename cc::michael_list::make_traits<
+                cds::opt::compare< cmp<item> >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( MichaelList_DHP, mix_ordered )
+    {
+        typedef cc::MichaelList< gc_type, item,
+            typename cc::michael_list::make_traits<
+                cds::opt::compare< cmp<item> >
+                ,cds::opt::less< lt<item> >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( MichaelList_DHP, item_counting )
+    {
+        struct traits : public cc::michael_list::traits
+        {
+            typedef lt<item> less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelList<gc_type, item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( MichaelList_DHP, backoff )
+    {
+        struct traits : public cc::michael_list::traits
+        {
+            typedef lt<item> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::empty back_off;
+        };
+        typedef cc::MichaelList<gc_type, item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( MichaelList_DHP, seq_cst )
+    {
+        struct traits : public cc::michael_list::traits
+        {
+            typedef lt<item> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::MichaelList<gc_type, item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+} // namespace
diff --git a/test/unit/list/michael_hp.cpp b/test/unit/list/michael_hp.cpp
new file mode 100644 (file)
index 0000000..6a2261b
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_list_hp.h"
+#include <cds/container/michael_list_hp.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+    class MichaelList_HP : public cds_test::list_hp
+    {
+    protected:
+        void SetUp()
+        {
+            typedef cc::MichaelList< gc_type, item > list_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( list_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( MichaelList_HP, less_ordered )
+    {
+        typedef cc::MichaelList< gc_type, item,
+            typename cc::michael_list::make_traits<
+                cds::opt::less< lt<item> >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( MichaelList_HP, compare_ordered )
+    {
+        typedef cc::MichaelList< gc_type, item,
+            typename cc::michael_list::make_traits<
+                cds::opt::compare< cmp<item> >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( MichaelList_HP, mix_ordered )
+    {
+        typedef cc::MichaelList< gc_type, item,
+            typename cc::michael_list::make_traits<
+                cds::opt::compare< cmp<item> >
+                ,cds::opt::less< lt<item> >
+            >::type
+        > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( MichaelList_HP, item_counting )
+    {
+        struct traits : public cc::michael_list::traits
+        {
+            typedef lt<item> less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelList<gc_type, item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( MichaelList_HP, backoff )
+    {
+        struct traits : public cc::michael_list::traits
+        {
+            typedef lt<item> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::empty back_off;
+        };
+        typedef cc::MichaelList<gc_type, item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+    TEST_F( MichaelList_HP, seq_cst )
+    {
+        struct traits : public cc::michael_list::traits
+        {
+            typedef lt<item> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::MichaelList<gc_type, item, traits > list_type;
+
+        list_type l;
+        test_common( l );
+        test_ordered_iterator( l );
+        test_hp( l );
+    }
+
+} // namespace
diff --git a/test/unit/list/michael_nogc.cpp b/test/unit/list/michael_nogc.cpp
new file mode 100644 (file)
index 0000000..88331cb
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_list_nogc.h"
+#include <cds/container/michael_list_nogc.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::nogc gc_type;
+
+    class MichaelList_NOGC : public cds_test::list_nogc
+    {};
+
+    TEST_F( MichaelList_NOGC, less_ordered )
+    {
+        typedef cc::MichaelList< gc_type, item,
+            typename cc::michael_list::make_traits<
+                cds::opt::less< lt<item> >
+            >::type
+        > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( MichaelList_NOGC, compare_ordered )
+    {
+        typedef cc::MichaelList< gc_type, item,
+            typename cc::michael_list::make_traits<
+                cds::opt::compare< cmp<item> >
+            >::type
+        > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( MichaelList_NOGC, mix_ordered )
+    {
+        typedef cc::MichaelList< gc_type, item,
+            typename cc::michael_list::make_traits<
+                cds::opt::compare< cmp<item> >
+                ,cds::opt::less< lt<item> >
+            >::type
+        > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( MichaelList_NOGC, item_counting )
+    {
+        struct traits : public cc::michael_list::traits
+        {
+            typedef lt<item> less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelList<gc_type, item, traits > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( MichaelList_NOGC, backoff )
+    {
+        struct traits : public cc::michael_list::traits
+        {
+            typedef lt<item> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::empty back_off;
+        };
+        typedef cc::MichaelList<gc_type, item, traits > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+    TEST_F( MichaelList_NOGC, seq_cst )
+    {
+        struct traits : public cc::michael_list::traits
+        {
+            typedef lt<item> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::MichaelList<gc_type, item, traits > list_type;
+
+        list_type l;
+        test( l );
+        test_ordered_iterator( l );
+    }
+
+} // namespace
diff --git a/test/unit/list/michael_rcu_gpb.cpp b/test/unit/list/michael_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..23b5389
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, MichaelList, rcu_implementation );
diff --git a/test/unit/list/michael_rcu_gpi.cpp b/test/unit/list/michael_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..c045ec2
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, MichaelList, rcu_implementation );
diff --git a/test/unit/list/michael_rcu_gpt.cpp b/test/unit/list/michael_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..c64db00
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, MichaelList, rcu_implementation );
diff --git a/test/unit/list/michael_rcu_shb.cpp b/test/unit/list/michael_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..820b8a3
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, MichaelList, rcu_implementation );
+
+#endif
diff --git a/test/unit/list/michael_rcu_sht.cpp b/test/unit/list/michael_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..d80ee86
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+#include "test_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, MichaelList, rcu_implementation );
+
+#endif
diff --git a/test/unit/list/test_intrusive_lazy_rcu.h b/test/unit/list/test_intrusive_lazy_rcu.h
new file mode 100644 (file)
index 0000000..6dfe773
--- /dev/null
@@ -0,0 +1,240 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_LIST_TEST_INTRUSIVE_LAZY_LIST_RCU_H
+#define CDSUNIT_LIST_TEST_INTRUSIVE_LAZY_LIST_RCU_H
+
+#include "test_intrusive_list_rcu.h"
+#include <cds/intrusive/lazy_list_rcu.h>
+
+namespace ci = cds::intrusive;
+
+template <class RCU>
+class IntrusiveLazyList : public cds_test::intrusive_list_rcu
+{
+    typedef cds_test::intrusive_list_rcu base_class;
+public:
+    typedef cds::urcu::gc<RCU> rcu_type;
+    typedef typename base_class::base_item< ci::lazy_list::node< rcu_type >> base_item;
+    typedef typename base_class::member_item< ci::lazy_list::node< rcu_type >> member_item;
+
+protected:
+    void SetUp()
+    {
+        RCU::Construct();
+        cds::threading::Manager::attachThread();
+    }
+
+    void TearDown()
+    {
+        cds::threading::Manager::detachThread();
+        RCU::Destruct();
+    }
+};
+
+TYPED_TEST_CASE_P( IntrusiveLazyList );
+
+TYPED_TEST_P( IntrusiveLazyList, base_hook )
+{
+    typedef ci::LazyList< typename TestFixture::rcu_type, typename TestFixture::base_item,
+        typename ci::lazy_list::make_traits<
+            ci::opt::hook< ci::lazy_list::base_hook< cds::opt::gc< typename TestFixture::rcu_type >>>
+            , ci::opt::disposer< typename TestFixture::mock_disposer >
+            , cds::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>
+        >::type
+    > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( IntrusiveLazyList, base_hook_cmp )
+{
+    typedef ci::LazyList< typename TestFixture::rcu_type, typename TestFixture::base_item,
+        typename ci::lazy_list::make_traits<
+            ci::opt::hook< ci::lazy_list::base_hook< cds::opt::gc< typename TestFixture::rcu_type >>>
+            , ci::opt::disposer< typename TestFixture::mock_disposer >
+            , cds::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>
+        >::type
+    > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( IntrusiveLazyList, base_hook_item_counting )
+{
+    struct traits : public ci::lazy_list::traits {
+        typedef ci::lazy_list::base_hook< cds::opt::gc< typename TestFixture::rcu_type >> hook;
+        typedef typename TestFixture::mock_disposer disposer;
+        typedef typename TestFixture::template cmp< typename TestFixture::base_item > compare;
+        typedef typename TestFixture::template less< typename TestFixture::base_item > less;
+        typedef cds::atomicity::item_counter item_counter;
+    };
+    typedef ci::LazyList< typename TestFixture::rcu_type, typename TestFixture::base_item, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( IntrusiveLazyList, base_hook_backoff )
+{
+    struct traits : public ci::lazy_list::traits {
+        typedef ci::lazy_list::base_hook< cds::opt::gc< typename TestFixture::rcu_type >> hook;
+        typedef typename TestFixture::mock_disposer disposer;
+        typedef typename TestFixture::template cmp< typename TestFixture::base_item > compare;
+        typedef typename TestFixture::template less< typename TestFixture::base_item > less;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::backoff::pause back_off;
+    };
+    typedef ci::LazyList< typename TestFixture::rcu_type, typename TestFixture::base_item, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( IntrusiveLazyList, base_hook_seqcst )
+{
+    struct traits : public ci::lazy_list::traits {
+        typedef ci::lazy_list::base_hook< cds::opt::gc< typename TestFixture::rcu_type >> hook;
+        typedef typename TestFixture::mock_disposer disposer;
+        typedef typename TestFixture::template cmp< typename TestFixture::base_item > compare;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::opt::v::sequential_consistent memory_model;
+    };
+    typedef ci::LazyList< typename TestFixture::rcu_type, typename TestFixture::base_item, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( IntrusiveLazyList, member_hook )
+{
+    typedef ci::LazyList< typename TestFixture::rcu_type, typename TestFixture::member_item,
+        typename ci::lazy_list::make_traits< 
+            ci::opt::hook< ci::lazy_list::member_hook< offsetof( typename TestFixture::member_item, hMember ), cds::opt::gc< typename TestFixture::rcu_type >>>
+            ,ci::opt::disposer< typename TestFixture::mock_disposer >
+            ,cds::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>
+        >::type 
+    > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( IntrusiveLazyList, member_hook_cmp )
+{
+    typedef ci::LazyList< typename TestFixture::rcu_type, typename TestFixture::member_item,
+        typename ci::lazy_list::make_traits<
+            ci::opt::hook< ci::lazy_list::member_hook< offsetof( typename TestFixture::member_item, hMember ), cds::opt::gc< typename TestFixture::rcu_type >>>
+            ,ci::opt::disposer< typename TestFixture::mock_disposer >
+            ,cds::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>
+        >::type
+    > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( IntrusiveLazyList, member_hook_item_counting )
+{
+    struct traits : public ci::lazy_list::traits {
+        typedef ci::lazy_list::member_hook< offsetof( typename TestFixture::member_item, hMember ), cds::opt::gc< typename TestFixture::rcu_type >> hook;
+        typedef typename TestFixture::mock_disposer disposer;
+        typedef typename TestFixture::template cmp< typename TestFixture::member_item > compare;
+        typedef typename TestFixture::template less< typename TestFixture::member_item > less;
+        typedef cds::atomicity::item_counter item_counter;
+    };
+    typedef ci::LazyList< typename TestFixture::rcu_type, typename TestFixture::member_item, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( IntrusiveLazyList, member_hook_seqcst )
+{
+    struct traits : public ci::lazy_list::traits {
+        typedef ci::lazy_list::member_hook< offsetof( typename TestFixture::member_item, hMember ), cds::opt::gc< typename TestFixture::rcu_type >> hook;
+        typedef typename TestFixture::mock_disposer disposer;
+        typedef typename TestFixture::template less< typename TestFixture::member_item > less;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::opt::v::sequential_consistent memory_model;
+    };
+    typedef ci::LazyList< typename TestFixture::rcu_type, typename TestFixture::member_item, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( IntrusiveLazyList, member_hook_back_off )
+{
+    struct traits : public ci::lazy_list::traits {
+        typedef ci::lazy_list::member_hook< offsetof( typename TestFixture::member_item, hMember ), cds::opt::gc< typename TestFixture::rcu_type >> hook;
+        typedef typename TestFixture::mock_disposer disposer;
+        typedef typename TestFixture::template cmp< typename TestFixture::member_item > compare;
+        typedef typename TestFixture::template less< typename TestFixture::member_item > less;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::backoff::empty back_off;
+    };
+    typedef ci::LazyList< typename TestFixture::rcu_type, typename TestFixture::member_item, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+
+// GCC 5: All test names should be written on single line, otherwise a runtime error will be encountered like as
+// "No test named <test_name> can be found in this test case"
+REGISTER_TYPED_TEST_CASE_P( IntrusiveLazyList,
+    base_hook, base_hook_cmp, base_hook_item_counting, base_hook_backoff, base_hook_seqcst, member_hook, member_hook_cmp, member_hook_item_counting, member_hook_seqcst, member_hook_back_off
+);
+
+
+#endif // CDSUNIT_LIST_TEST_INTRUSIVE_LAZY_LIST_RCU_H 
\ No newline at end of file
diff --git a/test/unit/list/test_intrusive_list.h b/test/unit/list/test_intrusive_list.h
new file mode 100644 (file)
index 0000000..fc3fe80
--- /dev/null
@@ -0,0 +1,506 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_LIST_TEST_INTRUSIVE_LIST_H
+#define CDSUNIT_LIST_TEST_INTRUSIVE_LIST_H
+
+#include <cds_test/check_size.h>
+#include <cds_test/fixture.h>
+
+namespace cds_test {
+
+    class intrusive_list_common : public fixture
+    {
+    public:
+        struct stat {
+            int nDisposeCount;
+            int nUpdateExistsCall;
+            int nUpdateNewCall;
+            int nFindCall;
+            int nEraseCall;
+            int nInsertCall;
+
+            stat()
+                : nDisposeCount( 0 )
+                , nUpdateExistsCall( 0 )
+                , nUpdateNewCall( 0 )
+                , nFindCall( 0 )
+                , nEraseCall( 0 )
+                , nInsertCall( 0 )
+            {}
+
+            stat( const stat& s )
+            {
+                *this = s;
+            }
+
+            stat& operator =( const stat& s )
+            {
+                memcpy( this, &s, sizeof( s ) );
+                return *this;
+            }
+        };
+
+        template <typename Node>
+        struct base_item : public Node
+        {
+            int nKey;
+            int nVal;
+
+            mutable stat    s;
+
+            base_item()
+            {}
+
+            base_item( int key, int val )
+                : nKey( key )
+                , nVal( val )
+                , s()
+            {}
+
+            base_item( const base_item& v )
+                : nKey( v.nKey )
+                , nVal( v.nVal )
+                , s()
+            {}
+
+            const int& key() const
+            {
+                return nKey;
+            }
+
+            base_item& operator=( base_item const& src )
+            {
+                nKey = src.nKey;
+                nVal = src.nVal;
+                return *this;
+            }
+
+            base_item& operator=( base_item&& src )
+            {
+                nKey = src.nKey;
+                nVal = src.nVal;
+                return *this;
+            }
+        };
+
+        template <typename Node>
+        struct member_item
+        {
+            int nKey;
+            int nVal;
+            Node hMember;
+            mutable stat s;
+
+            member_item()
+            {}
+
+            member_item( int key, int val )
+                : nKey( key )
+                , nVal( val )
+                , s()
+            {}
+
+            member_item( const member_item& v )
+                : nKey( v.nKey )
+                , nVal( v.nVal )
+                , s()
+            {}
+
+            const int& key() const
+            {
+                return nKey;
+            }
+
+            member_item& operator =( member_item const& src )
+            {
+                nKey = src.nKey;
+                nVal = src.nVal;
+                return *this;
+            }
+
+            member_item& operator=( member_item&& src )
+            {
+                nKey = src.nKey;
+                nVal = src.nVal;
+                return *this;
+            }
+        };
+
+        template <typename T>
+        struct less
+        {
+            bool operator ()( const T& v1, const T& v2 ) const
+            {
+                return v1.key() < v2.key();
+            }
+
+            template <typename Q>
+            bool operator ()( const T& v1, const Q& v2 ) const
+            {
+                return v1.key() < v2;
+            }
+
+            template <typename Q>
+            bool operator ()( const Q& v1, const T& v2 ) const
+            {
+                return v1 < v2.key();
+            }
+        };
+
+        struct other_item {
+            int nKey;
+
+            other_item( int n )
+                : nKey( n )
+            {}
+        };
+
+        struct other_less {
+            template <typename T, typename Q>
+            bool operator()( T const& i1, Q const& i2 ) const
+            {
+                return i1.nKey < i2.nKey;
+            }
+        };
+
+        template <typename T>
+        struct cmp {
+            int operator ()( const T& v1, const T& v2 ) const
+            {
+                if ( v1.key() < v2.key() )
+                    return -1;
+                return v1.key() > v2.key() ? 1 : 0;
+            }
+
+            template <typename Q>
+            int operator ()( const T& v1, const Q& v2 ) const
+            {
+                if ( v1.key() < v2 )
+                    return -1;
+                return v1.key() > v2 ? 1 : 0;
+            }
+
+            template <typename Q>
+            int operator ()( const Q& v1, const T& v2 ) const
+            {
+                if ( v1 < v2.key() )
+                    return -1;
+                return v1 > v2.key() ? 1 : 0;
+            }
+        };
+
+        struct mock_disposer
+        {
+            template <typename T>
+            void operator ()( T * p )
+            {
+                ++p->s.nDisposeCount;
+            }
+        };
+
+        struct update_functor
+        {
+            template <typename T>
+            void operator ()( bool bNew, T& item, T& /*val*/ )
+            {
+                if ( bNew )
+                    ++item.s.nUpdateNewCall;
+                else
+                    ++item.s.nUpdateExistsCall;
+            }
+        };
+
+        struct find_functor
+        {
+            template <typename T, typename Q>
+            void operator ()( T& item, Q& /*val*/ )
+            {
+                ++item.s.nFindCall;
+            }
+        };
+
+        struct erase_functor
+        {
+            template <typename T>
+            void operator()( T const& item )
+            {
+                item.s.nEraseCall++;
+            }
+        };
+
+    protected:
+        template <typename List>
+        void test_common( List& l )
+        {
+            // Precondition: list is empty
+            // Postcondition: list is empty
+
+            static const size_t nSize = 20;
+            typedef typename List::value_type value_type;
+            value_type arr[ nSize ];
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                arr[i].nKey = static_cast<int>( i );
+                arr[i].nVal = arr[i].nKey * 10;
+            }
+            shuffle( arr, arr + nSize );
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+
+            // insert / find
+            for ( auto& i : arr ) {
+                EXPECT_FALSE( l.contains( i.nKey ));
+                EXPECT_FALSE( l.contains( other_item( i.nKey ), other_less()));
+                EXPECT_FALSE( l.find( i.nKey, []( value_type& item, int ) { ++item.s.nFindCall; } ));
+                EXPECT_EQ( i.s.nFindCall, 0 );
+                EXPECT_FALSE( l.find_with( other_item( i.nKey ), other_less(), []( value_type& item, other_item const& ) { ++item.s.nFindCall; } ));
+                EXPECT_EQ( i.s.nFindCall, 0 );
+
+                if ( i.nKey & 1 )
+                    EXPECT_TRUE( l.insert( i ));
+                else {
+                    EXPECT_EQ( i.s.nInsertCall, 0 );
+                    EXPECT_TRUE( l.insert( i, []( value_type& i ) { ++i.s.nInsertCall; } ));
+                    EXPECT_EQ( i.s.nInsertCall, 1 );
+                }
+
+                EXPECT_TRUE( l.contains( i.nKey ));
+                EXPECT_TRUE( l.contains( i ));
+                EXPECT_TRUE( l.contains( other_item( i.nKey ), other_less()));
+                EXPECT_TRUE( l.find( i.nKey, []( value_type& item, int ) { ++item.s.nFindCall; } ));
+                EXPECT_EQ( i.s.nFindCall, 1 );
+                EXPECT_TRUE( l.find( i, []( value_type& item, value_type const& ) { ++item.s.nFindCall; } ));
+                EXPECT_EQ( i.s.nFindCall, 2 );
+                EXPECT_TRUE( l.find_with( other_item( i.nKey ), other_less(), []( value_type& item, other_item const& ) { ++item.s.nFindCall; } ));
+                EXPECT_EQ( i.s.nFindCall, 3 );
+
+                EXPECT_FALSE( l.insert( i ) );
+                ASSERT_FALSE( l.empty() );
+            }
+            ASSERT_CONTAINER_SIZE( l, nSize );
+
+            // check all items
+            for ( auto const& i : arr ) {
+                EXPECT_TRUE( l.contains( i.nKey ));
+                EXPECT_TRUE( l.contains( i ));
+                EXPECT_TRUE( l.contains( other_item( i.nKey ), other_less()));
+                EXPECT_TRUE( l.find( i.nKey, []( value_type& item, int ) { ++item.s.nFindCall; } ));
+                EXPECT_EQ( i.s.nFindCall, 4 );
+                EXPECT_TRUE( l.find( i, []( value_type& item, value_type const& ) { ++item.s.nFindCall; } ));
+                EXPECT_EQ( i.s.nFindCall, 5 );
+                EXPECT_TRUE( l.find_with( other_item( i.nKey ), other_less(), []( value_type& item, other_item const& ) { ++item.s.nFindCall; } ));
+                EXPECT_EQ( i.s.nFindCall, 6 );
+            }
+            ASSERT_FALSE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, nSize );
+
+            // update existing test
+            for ( auto& i : arr ) {
+                EXPECT_EQ( i.s.nUpdateExistsCall, 0 );
+                std::pair<bool, bool> ret = l.update( i, update_functor() );
+                EXPECT_TRUE( ret.first );
+                EXPECT_FALSE( ret.second );
+                EXPECT_EQ( i.s.nUpdateExistsCall, 1 );
+
+                ret = l.update( i, []( bool bNew, value_type& i, value_type& arg ) {
+                    EXPECT_FALSE( bNew );
+                    EXPECT_EQ( i.s.nUpdateExistsCall, 1 );
+                    EXPECT_TRUE( &i == &arg );
+                    ++i.s.nUpdateExistsCall;
+                });
+                EXPECT_TRUE( ret.first );
+                EXPECT_FALSE( ret.second );
+                EXPECT_EQ( i.s.nUpdateExistsCall, 2 );
+            }
+
+            // erase test
+            for ( auto const& i : arr ) {
+                if ( i.nKey & 1 )
+                    EXPECT_TRUE( l.erase( i.nKey ));
+                else
+                    EXPECT_TRUE( l.erase_with( other_item( i.nKey ), other_less() ));
+
+                EXPECT_FALSE( l.contains( i ));
+            }
+            EXPECT_TRUE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, 0 );
+
+            // Apply retired pointer to clean links
+            List::gc::force_dispose();
+
+            for ( auto const& i : arr )
+                EXPECT_EQ( i.s.nDisposeCount, 1 );
+
+            // erase with functor
+            for ( auto& i : arr ) {
+                std::pair<bool, bool> ret = l.update( i, update_functor(), false );
+                EXPECT_FALSE( ret.first );
+                EXPECT_FALSE( ret.second );
+
+                ret = l.update( i, update_functor(), true );
+                EXPECT_TRUE( ret.first );
+                EXPECT_TRUE( ret.second );
+                EXPECT_EQ( i.s.nUpdateNewCall, 1 );
+            }
+            EXPECT_FALSE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, nSize );
+
+            for ( auto const& i : arr ) {
+                EXPECT_EQ( i.s.nEraseCall, 0 );
+                if ( i.nKey & 1 ) {
+                    EXPECT_TRUE( l.erase_with( other_item( i.nKey ), other_less(), erase_functor()));
+                    EXPECT_FALSE( l.erase_with( other_item( i.nKey ), other_less(), erase_functor()));
+                }
+                else {
+                    EXPECT_TRUE( l.erase( i.nKey, []( value_type& item) { ++item.s.nEraseCall; } ));
+                    EXPECT_FALSE( l.erase( i.nKey, []( value_type& item) { ++item.s.nEraseCall; } ));
+                }
+                EXPECT_EQ( i.s.nEraseCall, 1 );
+                EXPECT_FALSE( l.contains( i.nKey ));
+            }
+            EXPECT_TRUE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, 0 );
+
+            // Apply retired pointer to clean links
+            List::gc::force_dispose();
+
+            for ( auto const& i : arr )
+                EXPECT_EQ( i.s.nDisposeCount, 2 );
+
+            // clear test
+            for ( auto& i : arr )
+                EXPECT_TRUE( l.insert( i ));
+
+            EXPECT_FALSE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, nSize );
+
+            l.clear();
+
+            EXPECT_TRUE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, 0 );
+
+            // Apply retired pointer to clean links
+            List::gc::force_dispose();
+            for ( auto const& i : arr ) {
+                EXPECT_EQ( i.s.nDisposeCount, 3 );
+                EXPECT_FALSE( l.contains( i ));
+            }
+
+            // unlink test
+            for ( auto& i : arr )
+                EXPECT_TRUE( l.insert( i ) );
+            for ( auto& i : arr ) {
+                value_type val( i );
+                EXPECT_TRUE( l.contains( val ));
+                EXPECT_FALSE( l.unlink( val ));
+                EXPECT_TRUE( l.contains( val ) );
+                EXPECT_TRUE( l.unlink( i ));
+                EXPECT_FALSE( l.unlink( i ));
+                EXPECT_FALSE( l.contains( i ) );
+            }
+            EXPECT_TRUE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, 0 );
+
+            // Apply retired pointer to clean links
+            List::gc::force_dispose();
+            for ( auto const& i : arr ) {
+                EXPECT_EQ( i.s.nDisposeCount, 4 );
+                EXPECT_FALSE( l.contains( i ) );
+            }
+
+            // Iterators on empty list
+            {
+                auto it = l.begin();
+                auto itEnd = l.end();
+                auto cit = l.cbegin();
+                auto citEnd = l.cend();
+
+                EXPECT_TRUE( it == itEnd );
+                EXPECT_TRUE( it == cit );
+                EXPECT_TRUE( cit == citEnd );
+
+                ++it;
+                ++cit;
+
+                EXPECT_TRUE( it == itEnd );
+                EXPECT_TRUE( it == cit );
+                EXPECT_TRUE( cit == citEnd );
+            }
+        }
+
+        template <typename List>
+        void test_ordered_iterator( List& l )
+        {
+            // Precondition: list is empty
+            // Postcondition: list is empty
+
+            static const size_t nSize = 20;
+            typedef typename List::value_type value_type;
+            value_type arr[nSize];
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                arr[i].nKey = static_cast<int>(i);
+                arr[i].nVal = arr[i].nKey * 10;
+            }
+            shuffle( arr, arr + nSize );
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+
+            for ( auto& i : arr )
+                EXPECT_TRUE( l.insert( i ) );
+
+            int key = 0;
+            for ( auto it = l.begin(); it != l.end(); ++it ) {
+                EXPECT_EQ( it->nKey, key );
+                EXPECT_EQ( (*it).nKey, key );
+                ++key;
+            }
+
+            key = 0;
+            for ( auto it = l.cbegin(); it != l.cend(); ++it ) {
+                EXPECT_EQ( it->nKey, key );
+                EXPECT_EQ( (*it).nKey, key );
+                ++key;
+            }
+
+            l.clear();
+            List::gc::force_dispose();
+            for ( auto const& i : arr ) {
+                EXPECT_EQ( i.s.nDisposeCount, 1 );
+                EXPECT_FALSE( l.contains( i ) );
+            }
+        }
+    };
+
+} // namespace cds_test
+
+#endif // CDSUNIT_LIST_TEST_INTRUSIVE_LIST_H 
diff --git a/test/unit/list/test_intrusive_list_hp.h b/test/unit/list/test_intrusive_list_hp.h
new file mode 100644 (file)
index 0000000..b5a9581
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_LIST_TEST_INTRUSIVE_LIST_HP_H
+#define CDSUNIT_LIST_TEST_INTRUSIVE_LIST_HP_H
+
+#include "test_intrusive_list.h"
+
+namespace cds_test {
+
+    class intrusive_list_hp : public intrusive_list_common
+    {
+    protected:
+        template <typename List>
+        void test_hp( List& l )
+        {
+            // Precondition: list is empty
+            // Postcondition: list is empty
+
+            static const size_t nSize = 20;
+            typedef typename List::value_type value_type;
+            value_type arr[ nSize ];
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                arr[i].nKey = static_cast<int>( i );
+                arr[i].nVal = arr[i].nKey * 10;
+            }
+            shuffle( arr, arr + nSize );
+
+            typedef typename List::guarded_ptr guarded_ptr;
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+
+            guarded_ptr gp;
+
+            // get() test
+            for ( auto& i : arr ) {
+                gp = l.get( i.nKey );
+                EXPECT_TRUE( !gp );
+                gp = l.get_with( other_item( i.nKey ), other_less());
+                EXPECT_TRUE( !gp );
+
+                EXPECT_TRUE( l.insert( i ));
+
+                gp = l.get( i.nKey );
+                ASSERT_FALSE( !gp );
+                EXPECT_EQ( gp->nKey, i.nKey );
+                EXPECT_EQ( gp->nVal, i.nVal );
+                gp = l.get_with( other_item( i.nKey ), other_less() );
+                ASSERT_FALSE( !gp );
+                EXPECT_EQ( gp->nKey, i.nKey );
+                EXPECT_EQ( gp->nVal, i.nVal );
+            }
+
+            // extract() test
+            for ( int i = 0; i < static_cast<int>(nSize); ++i ) {
+                if ( i & 1 )
+                    gp = l.extract( i );
+                else
+                    gp = l.extract_with( other_item(i), other_less());
+                ASSERT_FALSE( !gp );
+                EXPECT_EQ( gp->nKey, i );
+
+                gp = l.extract( i );
+                EXPECT_TRUE( !gp );
+                gp = l.extract_with( other_item( i ), other_less() );
+                EXPECT_TRUE( !gp );
+            }
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+
+            List::gc::force_dispose();
+            for ( auto const& i : arr ) {
+                EXPECT_EQ( i.s.nDisposeCount, 1 );
+                EXPECT_FALSE( l.contains( i ) );
+            }
+        }
+    };
+
+} // namespace cds_test
+
+#endif // CDSUNIT_LIST_TEST_INTRUSIVE_LIST_HP_H 
diff --git a/test/unit/list/test_intrusive_list_nogc.h b/test/unit/list/test_intrusive_list_nogc.h
new file mode 100644 (file)
index 0000000..c9298c8
--- /dev/null
@@ -0,0 +1,493 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_LIST_TEST_INTRUSIVE_LIST_NOGC_H
+#define CDSUNIT_LIST_TEST_INTRUSIVE_LIST_NOGC_H
+
+#include <cds_test/check_size.h>
+#include <cds_test/fixture.h>
+
+namespace cds_test {
+
+    class intrusive_list_nogc : public fixture
+    {
+    public:
+        struct stat {
+            int nDisposeCount;
+            int nUpdateExistsCall;
+            int nUpdateNewCall;
+            int nFindCall;
+
+            stat()
+                : nDisposeCount( 0 )
+                , nUpdateExistsCall( 0 )
+                , nUpdateNewCall( 0 )
+                , nFindCall( 0 )
+            {}
+
+            stat( const stat& s )
+            {
+                *this = s;
+            }
+
+            stat& operator =( const stat& s )
+            {
+                memcpy( this, &s, sizeof( s ) );
+                return *this;
+            }
+        };
+
+        template <typename Node>
+        struct base_item : public Node
+        {
+            int nKey;
+            int nVal;
+
+            mutable stat    s;
+
+            base_item()
+            {}
+
+            base_item( int key, int val )
+                : nKey( key )
+                , nVal( val )
+                , s()
+            {}
+
+            base_item( const base_item& v )
+                : nKey( v.nKey )
+                , nVal( v.nVal )
+                , s()
+            {}
+
+            const int& key() const
+            {
+                return nKey;
+            }
+
+            base_item& operator=( base_item const& src )
+            {
+                nKey = src.nKey;
+                nVal = src.nVal;
+                return *this;
+            }
+
+            base_item& operator=( base_item&& src )
+            {
+                nKey = src.nKey;
+                nVal = src.nVal;
+                return *this;
+            }
+        };
+
+        template <typename Node>
+        struct member_item
+        {
+            int nKey;
+            int nVal;
+            Node hMember;
+            mutable stat s;
+
+            member_item()
+            {}
+
+            member_item( int key, int val )
+                : nKey( key )
+                , nVal( val )
+                , s()
+            {}
+
+            member_item( const member_item& v )
+                : nKey( v.nKey )
+                , nVal( v.nVal )
+                , s()
+            {}
+
+            const int& key() const
+            {
+                return nKey;
+            }
+
+            member_item& operator =( member_item const& src )
+            {
+                nKey = src.nKey;
+                nVal = src.nVal;
+                return *this;
+            }
+
+            member_item& operator=( member_item&& src )
+            {
+                nKey = src.nKey;
+                nVal = src.nVal;
+                return *this;
+            }
+        };
+
+        template <typename T>
+        struct less
+        {
+            bool operator ()( const T& v1, const T& v2 ) const
+            {
+                return v1.key() < v2.key();
+            }
+
+            template <typename Q>
+            bool operator ()( const T& v1, const Q& v2 ) const
+            {
+                return v1.key() < v2;
+            }
+
+            template <typename Q>
+            bool operator ()( const Q& v1, const T& v2 ) const
+            {
+                return v1 < v2.key();
+            }
+        };
+
+        struct other_item {
+            int nKey;
+
+            other_item( int n )
+                : nKey( n )
+            {}
+        };
+
+        struct other_less {
+            template <typename T, typename Q>
+            bool operator()( T const& i1, Q const& i2 ) const
+            {
+                return i1.nKey < i2.nKey;
+            }
+        };
+
+        template <typename T>
+        struct cmp {
+            int operator ()( const T& v1, const T& v2 ) const
+            {
+                if ( v1.key() < v2.key() )
+                    return -1;
+                return v1.key() > v2.key() ? 1 : 0;
+            }
+
+            template <typename Q>
+            int operator ()( const T& v1, const Q& v2 ) const
+            {
+                if ( v1.key() < v2 )
+                    return -1;
+                return v1.key() > v2 ? 1 : 0;
+            }
+
+            template <typename Q>
+            int operator ()( const Q& v1, const T& v2 ) const
+            {
+                if ( v1 < v2.key() )
+                    return -1;
+                return v1 > v2.key() ? 1 : 0;
+            }
+        };
+
+        struct mock_disposer
+        {
+            template <typename T>
+            void operator ()( T * p )
+            {
+                ++p->s.nDisposeCount;
+            }
+        };
+
+        struct mock_disposer2
+        {
+            template <typename T>
+            void operator ()( T * p )
+            {
+                p->s.nDisposeCount += 10;
+            }
+        };
+
+        struct update_functor
+        {
+            template <typename T>
+            void operator ()( bool bNew, T& item, T& /*val*/ )
+            {
+                if ( bNew )
+                    ++item.s.nUpdateNewCall;
+                else
+                    ++item.s.nUpdateExistsCall;
+            }
+        };
+
+        struct find_functor
+        {
+            template <typename T, typename Q>
+            void operator ()( T& item, Q& /*val*/ )
+            {
+                ++item.s.nFindCall;
+            }
+        };
+
+        struct erase_functor
+        {
+            template <typename T>
+            void operator()( T const& item )
+            {
+                item.s.nEraseCall++;
+            }
+        };
+
+    protected:
+        template <typename List>
+        void test_common( List& l )
+        {
+            // Precondition: list is empty
+            // Postcondition: list is empty
+
+            static const size_t nSize = 20;
+            typedef typename List::value_type value_type;
+            value_type arr[ nSize ];
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                arr[i].nKey = static_cast<int>( i );
+                arr[i].nVal = arr[i].nKey * 10;
+            }
+            shuffle( arr, arr + nSize );
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+
+            // insert / find
+            for ( auto& i : arr ) {
+                EXPECT_FALSE( l.contains( i.nKey ));
+                EXPECT_FALSE( l.contains( other_item( i.nKey ), other_less()));
+                EXPECT_FALSE( l.find( i.nKey, []( value_type& item, int ) { ++item.s.nFindCall; } ));
+                EXPECT_EQ( i.s.nFindCall, 0 );
+                EXPECT_FALSE( l.find_with( other_item( i.nKey ), other_less(), []( value_type& item, other_item const& ) { ++item.s.nFindCall; } ));
+                EXPECT_EQ( i.s.nFindCall, 0 );
+
+                EXPECT_TRUE( l.insert( i ));
+
+                EXPECT_TRUE( l.contains( i.nKey ));
+                EXPECT_TRUE( l.contains( i ));
+                EXPECT_TRUE( l.contains( other_item( i.nKey ), other_less()));
+                EXPECT_TRUE( l.find( i.nKey, []( value_type& item, int ) { ++item.s.nFindCall; } ));
+                EXPECT_EQ( i.s.nFindCall, 1 );
+                EXPECT_TRUE( l.find( i, []( value_type& item, value_type const& ) { ++item.s.nFindCall; } ));
+                EXPECT_EQ( i.s.nFindCall, 2 );
+                EXPECT_TRUE( l.find_with( other_item( i.nKey ), other_less(), []( value_type& item, other_item const& ) { ++item.s.nFindCall; } ));
+                EXPECT_EQ( i.s.nFindCall, 3 );
+
+                EXPECT_FALSE( l.insert( i ) );
+                ASSERT_FALSE( l.empty() );
+            }
+            ASSERT_CONTAINER_SIZE( l, nSize );
+
+            // check all items
+            for ( auto const& i : arr ) {
+                EXPECT_TRUE( l.contains( i.nKey ));
+                EXPECT_TRUE( l.contains( i ));
+                EXPECT_TRUE( l.contains( other_item( i.nKey ), other_less()));
+                EXPECT_TRUE( l.find( i.nKey, []( value_type& item, int ) { ++item.s.nFindCall; } ));
+                EXPECT_EQ( i.s.nFindCall, 4 );
+                EXPECT_TRUE( l.find( i, []( value_type& item, value_type const& ) { ++item.s.nFindCall; } ));
+                EXPECT_EQ( i.s.nFindCall, 5 );
+                EXPECT_TRUE( l.find_with( other_item( i.nKey ), other_less(), []( value_type& item, other_item const& ) { ++item.s.nFindCall; } ));
+                EXPECT_EQ( i.s.nFindCall, 6 );
+            }
+            ASSERT_FALSE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, nSize );
+
+            // update existing test
+            for ( auto& i : arr ) {
+                EXPECT_EQ( i.s.nUpdateExistsCall, 0 );
+                std::pair<bool, bool> ret = l.update( i, update_functor() );
+                EXPECT_TRUE( ret.first );
+                EXPECT_FALSE( ret.second );
+                EXPECT_EQ( i.s.nUpdateExistsCall, 1 );
+
+                ret = l.update( i, []( bool bNew, value_type& i, value_type& arg ) {
+                    EXPECT_FALSE( bNew );
+                    EXPECT_EQ( i.s.nUpdateExistsCall, 1 );
+                    EXPECT_TRUE( &i == &arg );
+                    ++i.s.nUpdateExistsCall;
+                });
+                EXPECT_TRUE( ret.first );
+                EXPECT_FALSE( ret.second );
+                EXPECT_EQ( i.s.nUpdateExistsCall, 2 );
+            }
+
+            // clear() test
+            l.clear();
+            EXPECT_TRUE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, 0 );
+
+            // Apply retired pointer to clean links
+            List::gc::force_dispose();
+            for ( auto const& i : arr ) {
+                EXPECT_EQ( i.s.nDisposeCount, 1 );
+                EXPECT_FALSE( l.contains( i ) );
+            }
+
+
+            for ( auto& i : arr ) {
+                std::pair<bool, bool> ret = l.update( i, update_functor(), false );
+                EXPECT_FALSE( ret.first );
+                EXPECT_FALSE( ret.second );
+
+                ret = l.update( i, update_functor(), true );
+                EXPECT_TRUE( ret.first );
+                EXPECT_TRUE( ret.second );
+                EXPECT_EQ( i.s.nUpdateNewCall, 1 );
+            }
+
+            EXPECT_FALSE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, nSize );
+
+            l.clear( mock_disposer2());
+
+            EXPECT_TRUE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, 0 );
+
+            // Apply retired pointer to clean links
+            List::gc::force_dispose();
+            for ( auto const& i : arr ) {
+                EXPECT_EQ( i.s.nDisposeCount, 11 );
+                EXPECT_FALSE( l.contains( i ));
+            }
+
+            // Iterators on empty list
+            {
+                auto it = l.begin();
+                auto itEnd = l.end();
+                auto cit = l.cbegin();
+                auto citEnd = l.cend();
+
+                EXPECT_TRUE( it == itEnd );
+                EXPECT_TRUE( it == cit );
+                EXPECT_TRUE( cit == citEnd );
+
+                ++it;
+                ++cit;
+
+                EXPECT_TRUE( it == itEnd );
+                EXPECT_TRUE( it == cit );
+                EXPECT_TRUE( cit == citEnd );
+            }
+        }
+
+        template <typename List>
+        void test_ordered_iterator( List& l )
+        {
+            // Precondition: list is empty
+            // Postcondition: list is empty
+
+            static const size_t nSize = 20;
+            typedef typename List::value_type value_type;
+            value_type arr[nSize];
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                arr[i].nKey = static_cast<int>(i);
+                arr[i].nVal = arr[i].nKey * 10;
+            }
+            shuffle( arr, arr + nSize );
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+
+            for ( auto& i : arr )
+                EXPECT_TRUE( l.insert( i ) );
+
+            int key = 0;
+            for ( auto it = l.begin(); it != l.end(); ++it ) {
+                EXPECT_EQ( it->nKey, key );
+                EXPECT_EQ( (*it).nKey, key );
+                ++key;
+            }
+
+            key = 0;
+            for ( auto it = l.cbegin(); it != l.cend(); ++it ) {
+                EXPECT_EQ( it->nKey, key );
+                EXPECT_EQ( (*it).nKey, key );
+                ++key;
+            }
+
+            l.clear();
+            List::gc::force_dispose();
+            for ( auto const& i : arr ) {
+                EXPECT_EQ( i.s.nDisposeCount, 1 );
+                EXPECT_FALSE( l.contains( i ) );
+            }
+        }
+
+        template <typename List>
+        void test_unordered_iterator( List& l )
+        {
+            // Precondition: list is empty
+            // Postcondition: list is empty
+
+            static const size_t nSize = 20;
+            typedef typename List::value_type value_type;
+            value_type arr[nSize];
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                arr[i].nKey = static_cast<int>(i);
+                arr[i].nVal = arr[i].nKey * 10;
+            }
+            shuffle( arr, arr + nSize );
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+
+            for ( auto& i : arr )
+                EXPECT_TRUE( l.insert( i ) );
+
+            size_t idx = 0;
+            for ( auto it = l.begin(); it != l.end(); ++it, ++idx ) {
+                ASSERT_LT( idx, nSize );
+                EXPECT_EQ( it->nKey, arr[idx].nKey );
+                EXPECT_EQ( (*it).nKey, arr[idx].nKey );
+            }
+
+            idx = 0;
+            for ( auto it = l.cbegin(); it != l.cend(); ++it, ++idx ) {
+                ASSERT_LT( idx, nSize );
+                EXPECT_EQ( it->nKey, arr[idx].nKey );
+                EXPECT_EQ( (*it).nKey, arr[idx].nKey );
+            }
+
+            l.clear();
+            List::gc::force_dispose();
+            for ( auto const& i : arr ) {
+                EXPECT_EQ( i.s.nDisposeCount, 1 );
+                EXPECT_FALSE( l.contains( i ) );
+            }
+        }
+    };
+
+} // namespace cds_test
+
+#endif // CDSUNIT_LIST_TEST_INTRUSIVE_LIST_NOGC_H 
diff --git a/test/unit/list/test_intrusive_list_rcu.h b/test/unit/list/test_intrusive_list_rcu.h
new file mode 100644 (file)
index 0000000..9df7037
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_LIST_TEST_INTRUSIVE_LIST_RCU_H
+#define CDSUNIT_LIST_TEST_INTRUSIVE_LIST_RCU_H
+
+#include "test_intrusive_list.h"
+
+namespace cds_test {
+
+    class intrusive_list_rcu : public intrusive_list_common
+    {
+    protected:
+        template <typename List>
+        void test_rcu( List& l )
+        {
+            // Precondition: list is empty
+            // Postcondition: list is empty
+
+            static const size_t nSize = 20;
+            typedef typename List::value_type value_type;
+            value_type arr[ nSize ];
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                arr[i].nKey = static_cast<int>( i );
+                arr[i].nVal = arr[i].nKey * 10;
+            }
+            shuffle( arr, arr + nSize );
+
+            typedef typename List::exempt_ptr exempt_ptr;
+            typedef typename List::raw_ptr    raw_ptr;
+            typedef typename List::rcu_lock   rcu_lock;
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+
+            // get() test
+            for ( auto& i : arr ) {
+                {
+                    rcu_lock lock;
+                    raw_ptr rp = l.get( i.nKey );
+                    EXPECT_TRUE( !rp );
+                    rp = l.get_with( other_item( i.nKey ), other_less());
+                    EXPECT_TRUE( !rp );
+                }
+
+                EXPECT_TRUE( l.insert( i ));
+
+                {
+                    rcu_lock lock;
+                    raw_ptr rp = l.get( i.nKey );
+                    ASSERT_FALSE( !rp );
+                    EXPECT_EQ( rp->nKey, i.nKey );
+                    EXPECT_EQ( rp->nVal, i.nVal );
+                }
+                {
+                    rcu_lock lock;
+                    raw_ptr rp = l.get_with( other_item( i.nKey ), other_less() );
+                    ASSERT_FALSE( !rp );
+                    EXPECT_EQ( rp->nKey, i.nKey );
+                    EXPECT_EQ( rp->nVal, i.nVal );
+                }
+            }
+
+            exempt_ptr gp;
+
+            // extract() test
+            if ( List::c_bExtractLockExternal ) {
+                for ( int i = 0; i < static_cast<int>(nSize); ++i ) {
+                    {
+                        rcu_lock lock;
+
+                        if ( i & 1 )
+                            gp = l.extract( i );
+                        else
+                            gp = l.extract_with( other_item(i), other_less());
+                        ASSERT_FALSE( !gp );
+                        EXPECT_EQ( gp->nKey, i );
+                    }
+                    gp.release();
+                    {
+                        rcu_lock lock;
+
+                        gp = l.extract( i );
+                        EXPECT_TRUE( !gp );
+                        gp = l.extract_with( other_item( i ), other_less() );
+                        EXPECT_TRUE( !gp );
+                    }
+                }
+            }
+            else {
+                for ( int i = 0; i < static_cast<int>(nSize); ++i ) {
+                    if ( i & 1 )
+                        gp = l.extract( i );
+                    else
+                        gp = l.extract_with( other_item( i ), other_less() );
+                    ASSERT_FALSE( !gp );
+                    EXPECT_EQ( gp->nKey, i );
+
+                    gp = l.extract( i );
+                    EXPECT_TRUE( !gp );
+                    gp = l.extract_with( other_item( i ), other_less() );
+                    EXPECT_TRUE( !gp );
+                }
+            }
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+
+            List::gc::force_dispose();
+            for ( auto const& i : arr ) {
+                EXPECT_EQ( i.s.nDisposeCount, 1 );
+                EXPECT_FALSE( l.contains( i ) );
+            }
+        }
+    };
+
+} // namespace cds_test
+
+#endif // CDSUNIT_LIST_TEST_INTRUSIVE_LIST_RCU_H 
diff --git a/test/unit/list/test_intrusive_michael_rcu.h b/test/unit/list/test_intrusive_michael_rcu.h
new file mode 100644 (file)
index 0000000..45b0b2a
--- /dev/null
@@ -0,0 +1,240 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_LIST_TEST_INTRUSIVE_MICHAEL_LIST_RCU_H
+#define CDSUNIT_LIST_TEST_INTRUSIVE_MICHAEL_LIST_RCU_H
+
+#include "test_intrusive_list_rcu.h"
+#include <cds/intrusive/michael_list_rcu.h>
+
+namespace ci = cds::intrusive;
+
+template <class RCU>
+class IntrusiveMichaelList : public cds_test::intrusive_list_rcu
+{
+    typedef cds_test::intrusive_list_rcu base_class;
+public:
+    typedef cds::urcu::gc<RCU> rcu_type;
+    typedef typename base_class::base_item< ci::michael_list::node< rcu_type >> base_item;
+    typedef typename base_class::member_item< ci::michael_list::node< rcu_type >> member_item;
+
+protected:
+    void SetUp()
+    {
+        RCU::Construct();
+        cds::threading::Manager::attachThread();
+    }
+
+    void TearDown()
+    {
+        cds::threading::Manager::detachThread();
+        RCU::Destruct();
+    }
+};
+
+TYPED_TEST_CASE_P( IntrusiveMichaelList );
+
+TYPED_TEST_P( IntrusiveMichaelList, base_hook )
+{
+    typedef ci::MichaelList< typename TestFixture::rcu_type, typename TestFixture::base_item,
+        typename ci::michael_list::make_traits<
+            ci::opt::hook< ci::michael_list::base_hook< cds::opt::gc< typename TestFixture::rcu_type >>>
+            , ci::opt::disposer< typename TestFixture::mock_disposer >
+            , cds::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>
+        >::type
+    > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( IntrusiveMichaelList, base_hook_cmp )
+{
+    typedef ci::MichaelList< typename TestFixture::rcu_type, typename TestFixture::base_item,
+        typename ci::michael_list::make_traits<
+            ci::opt::hook< ci::michael_list::base_hook< cds::opt::gc< typename TestFixture::rcu_type >>>
+            , ci::opt::disposer< typename TestFixture::mock_disposer >
+            , cds::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>
+        >::type
+    > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( IntrusiveMichaelList, base_hook_item_counting )
+{
+    struct traits : public ci::michael_list::traits {
+        typedef ci::michael_list::base_hook< cds::opt::gc< typename TestFixture::rcu_type >> hook;
+        typedef typename TestFixture::mock_disposer disposer;
+        typedef typename TestFixture::template cmp< typename TestFixture::base_item > compare;
+        typedef typename TestFixture::template less< typename TestFixture::base_item > less;
+        typedef cds::atomicity::item_counter item_counter;
+    };
+    typedef ci::MichaelList< typename TestFixture::rcu_type, typename TestFixture::base_item, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( IntrusiveMichaelList, base_hook_backoff )
+{
+    struct traits : public ci::michael_list::traits {
+        typedef ci::michael_list::base_hook< cds::opt::gc< typename TestFixture::rcu_type >> hook;
+        typedef typename TestFixture::mock_disposer disposer;
+        typedef typename TestFixture::template cmp< typename TestFixture::base_item > compare;
+        typedef typename TestFixture::template less< typename TestFixture::base_item > less;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::backoff::pause back_off;
+    };
+    typedef ci::MichaelList< typename TestFixture::rcu_type, typename TestFixture::base_item, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( IntrusiveMichaelList, base_hook_seqcst )
+{
+    struct traits : public ci::michael_list::traits {
+        typedef ci::michael_list::base_hook< cds::opt::gc< typename TestFixture::rcu_type >> hook;
+        typedef typename TestFixture::mock_disposer disposer;
+        typedef typename TestFixture::template cmp< typename TestFixture::base_item > compare;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::opt::v::sequential_consistent memory_model;
+    };
+    typedef ci::MichaelList< typename TestFixture::rcu_type, typename TestFixture::base_item, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( IntrusiveMichaelList, member_hook )
+{
+    typedef ci::MichaelList< typename TestFixture::rcu_type, typename TestFixture::member_item,
+        typename ci::michael_list::make_traits< 
+            ci::opt::hook< ci::michael_list::member_hook< offsetof( typename TestFixture::member_item, hMember ), cds::opt::gc< typename TestFixture::rcu_type >>>
+            ,ci::opt::disposer< typename TestFixture::mock_disposer >
+            ,cds::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>
+        >::type 
+    > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( IntrusiveMichaelList, member_hook_cmp )
+{
+    typedef ci::MichaelList< typename TestFixture::rcu_type, typename TestFixture::member_item,
+        typename ci::michael_list::make_traits<
+            ci::opt::hook< ci::michael_list::member_hook< offsetof( typename TestFixture::member_item, hMember ), cds::opt::gc< typename TestFixture::rcu_type >>>
+            ,ci::opt::disposer< typename TestFixture::mock_disposer >
+            ,cds::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>
+        >::type
+    > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( IntrusiveMichaelList, member_hook_item_counting )
+{
+    struct traits : public ci::michael_list::traits {
+        typedef ci::michael_list::member_hook< offsetof( typename TestFixture::member_item, hMember ), cds::opt::gc< typename TestFixture::rcu_type >> hook;
+        typedef typename TestFixture::mock_disposer disposer;
+        typedef typename TestFixture::template cmp< typename TestFixture::member_item > compare;
+        typedef typename TestFixture::template less< typename TestFixture::member_item > less;
+        typedef cds::atomicity::item_counter item_counter;
+    };
+    typedef ci::MichaelList< typename TestFixture::rcu_type, typename TestFixture::member_item, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( IntrusiveMichaelList, member_hook_seqcst )
+{
+    struct traits : public ci::michael_list::traits {
+        typedef ci::michael_list::member_hook< offsetof( typename TestFixture::member_item, hMember ), cds::opt::gc< typename TestFixture::rcu_type >> hook;
+        typedef typename TestFixture::mock_disposer disposer;
+        typedef typename TestFixture::template less< typename TestFixture::member_item > less;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::opt::v::sequential_consistent memory_model;
+    };
+    typedef ci::MichaelList< typename TestFixture::rcu_type, typename TestFixture::member_item, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( IntrusiveMichaelList, member_hook_back_off )
+{
+    struct traits : public ci::michael_list::traits {
+        typedef ci::michael_list::member_hook< offsetof( typename TestFixture::member_item, hMember ), cds::opt::gc< typename TestFixture::rcu_type >> hook;
+        typedef typename TestFixture::mock_disposer disposer;
+        typedef typename TestFixture::template cmp< typename TestFixture::member_item > compare;
+        typedef typename TestFixture::template less< typename TestFixture::member_item > less;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::backoff::empty back_off;
+    };
+    typedef ci::MichaelList< typename TestFixture::rcu_type, typename TestFixture::member_item, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+
+// GCC 5: All test names should be written on single line, otherwise a runtime error will be encountered like as
+// "No test named <test_name> can be found in this test case"
+REGISTER_TYPED_TEST_CASE_P( IntrusiveMichaelList,
+    base_hook, base_hook_cmp, base_hook_item_counting, base_hook_backoff, base_hook_seqcst, member_hook, member_hook_cmp, member_hook_item_counting, member_hook_seqcst, member_hook_back_off
+);
+
+
+#endif // CDSUNIT_LIST_TEST_INTRUSIVE_LIST_RCU_H 
\ No newline at end of file
diff --git a/test/unit/list/test_kv_lazy_rcu.h b/test/unit/list/test_kv_lazy_rcu.h
new file mode 100644 (file)
index 0000000..2571f3e
--- /dev/null
@@ -0,0 +1,174 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_LIST_TEST_KV_LAZY_LIST_RCU_H
+#define CDSUNIT_LIST_TEST_KV_LAZY_LIST_RCU_H
+
+#include "test_kv_list_rcu.h"
+#include <cds/container/lazy_kvlist_rcu.h>
+
+namespace cc = cds::container;
+
+template <class RCU>
+class LazyKVList : public cds_test::kv_list_rcu
+{
+    typedef cds_test::kv_list_rcu base_class;
+public:
+    typedef cds::urcu::gc<RCU> rcu_type;
+
+protected:
+    void SetUp()
+    {
+        RCU::Construct();
+        cds::threading::Manager::attachThread();
+    }
+
+    void TearDown()
+    {
+        cds::threading::Manager::detachThread();
+        RCU::Destruct();
+    }
+};
+
+TYPED_TEST_CASE_P( LazyKVList );
+
+TYPED_TEST_P( LazyKVList, less_ordered )
+{
+    typedef cc::LazyKVList< typename TestFixture::rcu_type, typename TestFixture::key_type, typename TestFixture::value_type,
+        typename cc::lazy_list::make_traits<
+            cds::opt::less< typename TestFixture::lt>
+        >::type
+    > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( LazyKVList, compare_ordered )
+{
+    typedef cc::LazyKVList< typename TestFixture::rcu_type, typename TestFixture::key_type, typename TestFixture::value_type,
+        typename cc::lazy_list::make_traits<
+            cds::opt::compare< typename TestFixture::cmp>
+        >::type
+    > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( LazyKVList, mix_ordered )
+{
+    typedef cc::LazyKVList< typename TestFixture::rcu_type, typename TestFixture::key_type, typename TestFixture::value_type,
+        typename cc::lazy_list::make_traits<
+            cds::opt::less< typename TestFixture::lt>
+            ,cds::opt::compare< typename TestFixture::cmp>
+        >::type
+    > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( LazyKVList, item_counting )
+{
+    struct traits : public cc::lazy_list::traits
+    {
+        typedef typename TestFixture::lt less;
+        typedef cds::atomicity::item_counter item_counter;
+    };
+    typedef cc::LazyKVList<typename TestFixture::rcu_type, typename TestFixture::key_type, typename TestFixture::value_type, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( LazyKVList, backoff )
+{
+    struct traits : public cc::lazy_list::traits
+    {
+        typedef typename TestFixture::lt less;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::backoff::empty back_off;
+    };
+    typedef cc::LazyKVList<typename TestFixture::rcu_type, typename TestFixture::key_type, typename TestFixture::value_type, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( LazyKVList, seq_cst )
+{
+    struct traits : public cc::lazy_list::traits
+    {
+        typedef typename TestFixture::lt less;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::opt::v::sequential_consistent memory_model;
+    };
+    typedef cc::LazyKVList<typename TestFixture::rcu_type, typename TestFixture::key_type, typename TestFixture::value_type, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( LazyKVList, mutex )
+{
+    struct traits : public cc::lazy_list::traits
+    {
+        typedef typename TestFixture::lt less;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef std::mutex lock_type;
+    };
+    typedef cc::LazyKVList<typename TestFixture::rcu_type, typename TestFixture::key_type, typename TestFixture::value_type, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+// GCC 5: All test names should be written on single line, otherwise a runtime error will be encountered like as
+// "No test named <test_name> can be found in this test case"
+REGISTER_TYPED_TEST_CASE_P( LazyKVList,
+    less_ordered, compare_ordered, mix_ordered, item_counting, backoff, seq_cst, mutex
+    );
+
+#endif // CDSUNIT_LIST_TEST_KV_LAZY_LIST_RCU_H
diff --git a/test/unit/list/test_kv_list.h b/test/unit/list/test_kv_list.h
new file mode 100644 (file)
index 0000000..ee87209
--- /dev/null
@@ -0,0 +1,420 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_LIST_TEST_KV_LIST_H
+#define CDSUNIT_LIST_TEST_KV_LIST_H
+
+#include <cds_test/check_size.h>
+#include <cds_test/fixture.h>
+
+namespace cds_test {
+
+    class kv_list_common : public fixture
+    {
+    public:
+        struct key_type {
+            int nKey;
+
+            key_type() = delete;
+            explicit key_type( int n )
+                : nKey( n )
+            {}
+
+            key_type( key_type const& s )
+                : nKey( s.nKey )
+            {}
+
+            key_type( key_type&& s )
+                : nKey( s.nKey )
+            {
+                s.nKey = 0;
+            }
+
+            int key() const 
+            { 
+                return nKey; 
+            }
+        };
+
+        struct value_type {
+            int val;
+
+            value_type()
+                : val( 0 )
+            {}
+
+            explicit value_type( int n )
+                : val( n )
+            {}
+        };
+
+        struct lt
+        {
+            bool operator()( key_type const& lhs, key_type const& rhs ) const
+            {
+                return lhs.key() < rhs.key();
+            }
+
+            bool operator()( key_type const& lhs, int rhs ) const
+            {
+                return lhs.key() < rhs;
+            }
+
+            bool operator()( int lhs, key_type const& rhs ) const
+            {
+                return lhs < rhs.key();
+            }
+
+            template <typename T>
+            bool operator ()( T const& v1, T const& v2 ) const
+            {
+                return v1.key() < v2.key();
+            }
+        };
+
+        struct cmp 
+        {
+            int operator()( key_type const& lhs, key_type const& rhs ) const
+            {
+                return lhs.key() - rhs.key();
+            }
+
+            int operator()( key_type const& lhs, int rhs ) const
+            {
+                return lhs.key() - rhs;
+            }
+
+            int operator()( int lhs, key_type const& rhs ) const
+            {
+                return lhs - rhs.key();
+            }
+
+            template <typename T>
+            int operator ()( T const& lhs, T const& rhs ) const
+            {
+                return lhs.key() - rhs.key();
+            }
+        };
+
+        struct other_key
+        {
+            int nKey;
+
+            other_key()
+            {}
+
+            other_key( int n )
+                : nKey( n )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        struct other_less
+        {
+            template <typename T1, typename T2>
+            bool operator()( T1 const& t1, T2 const& t2 ) const
+            {
+                return t1.key() < t2.key();
+            }
+        };
+
+    protected:
+        template <typename List>
+        void test_common( List& l )
+        {
+            // Precondition: list is empty
+            // Postcondition: list is empty
+
+            static const size_t nSize = 20;
+            typedef typename List::key_type    list_key_type;
+            typedef typename List::mapped_type list_mapped_type;
+            typedef typename List::value_type  list_value_type;
+            struct key_val {
+                int key;
+                int val;
+            };
+            key_val arr[nSize];
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                arr[i].key = static_cast<int>(i) + 1;
+                arr[i].val = arr[i].key * 10;
+            }
+            shuffle( arr, arr + nSize );
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+
+            // insert/find
+            for ( auto const& i : arr ) {
+                EXPECT_FALSE( l.contains( i.key ));
+                EXPECT_FALSE( l.contains( key_type( i.key )));
+                EXPECT_FALSE( l.contains( other_key( i.key ), other_less()));
+                EXPECT_FALSE( l.find( i.key, []( list_value_type& ) {} ));
+                EXPECT_FALSE( l.find( key_type( i.key ), []( list_value_type& ) {} ));
+                EXPECT_FALSE( l.find_with( other_key( i.key ), other_less(), []( list_value_type& ) {} ));
+
+                switch ( i.key % 5 ) {
+                    case 0:
+                        EXPECT_TRUE( l.insert( i.key ));
+                        EXPECT_TRUE( l.find( i.key, []( list_value_type& n ) {
+                            EXPECT_EQ( n.second.val, 0 );
+                        } ));
+                        EXPECT_FALSE( l.insert( i.key ));
+                        break;
+
+                    case 1:
+                        EXPECT_TRUE( l.insert( i.key, i.val ));
+                        EXPECT_TRUE( l.find( key_type(i.key), []( list_value_type& n ) {
+                            EXPECT_EQ( n.second.val, n.first.nKey * 10 );
+                        } ));
+                        EXPECT_FALSE( l.insert( key_type( i.key )));
+                        break;
+
+                    case 2:
+                        EXPECT_TRUE( l.insert_with( i.key, []( list_value_type& n ) {
+                            n.second.val = n.first.nKey * 2;
+                        }));
+                        EXPECT_TRUE( l.find( i.key, []( list_value_type& n ) {
+                            EXPECT_EQ( n.second.val, n.first.key() * 2 );
+                        } ));
+                        EXPECT_FALSE( l.insert_with( i.key, []( list_value_type& n ) {
+                            n.second.val = n.first.nKey * 3;
+                        } ));
+                        EXPECT_TRUE( l.find( i.key, []( list_value_type& n ) {
+                            EXPECT_EQ( n.second.val, n.first.key() * 2 );
+                        } ));
+                        break;
+
+                    case 3:
+                        {
+                            key_type k( i.key );
+                            EXPECT_TRUE( l.emplace( std::move(k), i.key * 100 ));
+                            EXPECT_EQ( k.key(), 0 );
+                            EXPECT_TRUE( l.find( i.key, []( list_value_type& n ) {
+                                EXPECT_EQ( n.second.val, n.first.nKey * 100 );
+                            } ));
+                            k.nKey = i.key;
+                            EXPECT_FALSE( l.emplace( std::move( k ), i.key ));
+                            //EXPECT_EQ( k.key(), i.key ); // ???
+                            EXPECT_TRUE( l.find( i.key, []( list_value_type& n ) {
+                                EXPECT_EQ( n.second.val, n.first.nKey * 100 );
+                            } ));
+                        }
+                        break;
+                    case 4:
+                        {
+                            auto pair = l.update( i.key, []( bool bNew, list_value_type& n ) {
+                                ASSERT_TRUE( false );
+                            }, false );
+                            EXPECT_FALSE( pair.first );
+                            EXPECT_FALSE( pair.second );
+
+                            pair = l.update( list_key_type(i.key), []( bool bNew, list_value_type& n ) {
+                                EXPECT_TRUE( bNew );
+                                n.second.val = n.first.nKey * 3;
+                            });
+                            EXPECT_TRUE( pair.first );
+                            EXPECT_TRUE( pair.second );
+
+                            EXPECT_TRUE( l.find( i.key, []( list_value_type& n ) {
+                                EXPECT_EQ( n.second.val, n.first.key() * 3 );
+                            } ));
+
+                            pair = l.update( list_key_type(i.key), []( bool bNew, list_value_type& n ) {
+                                EXPECT_FALSE( bNew );
+                                n.second.val = n.first.nKey * 5;
+                            });
+                            EXPECT_TRUE( pair.first );
+                            EXPECT_FALSE( pair.second );
+
+                            EXPECT_TRUE( l.find( i.key, []( list_value_type& n ) {
+                                EXPECT_EQ( n.second.val, n.first.key() * 5 );
+                            } ));
+                        }
+                        break;
+                }
+
+                EXPECT_TRUE( l.contains( i.key ));
+                EXPECT_TRUE( l.contains( list_key_type(i.key)));
+                EXPECT_TRUE( l.contains( other_key( i.key ), other_less()));
+                EXPECT_TRUE( l.find( i.key, []( list_value_type& n  ) { 
+                    n.second.val = n.first.nKey;
+                } ));
+                EXPECT_TRUE( l.find( i.key, []( list_value_type& n ) {
+                    EXPECT_EQ( n.first.nKey, n.second.val );
+                    n.second.val = n.first.nKey * 5;
+                } ));
+                EXPECT_TRUE( l.find_with( other_key( i.key ), other_less(), []( list_value_type& n ) {
+                    EXPECT_EQ( n.first.nKey * 5, n.second.val );
+                } ));
+
+                auto pair = l.update( i.key, []( bool bNew, list_value_type& n ) {
+                    EXPECT_FALSE( bNew );
+                    EXPECT_EQ( n.first.nKey * 5, n.second.val );
+                    n.second.val = n.first.nKey * 3;
+                }, false );
+                EXPECT_TRUE( pair.first );
+                EXPECT_FALSE( pair.second );
+
+                EXPECT_FALSE( l.empty() );
+            }
+
+            ASSERT_FALSE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, nSize );
+
+            // erase
+            for ( auto const&i : arr ) {
+                switch ( i.key & 3 ) {
+                    case 0:
+                        EXPECT_TRUE( l.erase( i.key ));
+                        break;
+                    case 1:
+                        EXPECT_TRUE( l.erase_with( other_key( i.key ), other_less()));
+                        break;
+                    case 2:
+                        EXPECT_TRUE( l.erase( i.key, [ &i ]( list_value_type const& n ) {
+                            EXPECT_EQ( n.first.nKey, i.key );
+                            EXPECT_EQ( n.first.nKey * 3, n.second.val );
+                        }));
+                        break;
+                    case 3:
+                        EXPECT_TRUE( l.erase_with( other_key( i.key ), other_less(), [ &i ]( list_value_type const& n) {
+                            EXPECT_EQ( n.first.nKey, i.key );
+                            EXPECT_EQ( n.first.nKey * 3, n.second.val );
+                        } ));
+                }
+
+                EXPECT_FALSE( l.contains( i.key ));
+                EXPECT_FALSE( l.contains( key_type( i.key )));
+                EXPECT_FALSE( l.contains( other_key( i.key ), other_less()));
+                EXPECT_FALSE( l.find( key_type( i.key ), []( list_value_type& ) {} ));
+                EXPECT_FALSE( l.find( i.key, []( list_value_type& ) {} ));
+                EXPECT_FALSE( l.find_with( other_key( i.key ), other_less(), []( list_value_type& ) {} ));
+            }
+
+            ASSERT_TRUE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, 0 );
+
+            // clear test
+            for ( auto& i : arr ) 
+                EXPECT_TRUE( l.insert( i.key, i.val ));
+
+            ASSERT_FALSE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, nSize );
+
+            l.clear();
+
+            ASSERT_TRUE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, 0 );
+
+            // empty list iterator test
+            {
+                List const& cl = l;
+                EXPECT_TRUE( l.begin() == l.end());
+                EXPECT_TRUE( l.cbegin() == l.cend());
+                EXPECT_TRUE( cl.begin() == cl.end());
+                EXPECT_TRUE( l.begin() == l.cend());
+                EXPECT_TRUE( cl.begin() == l.end());
+            }
+        }
+
+        template <typename List>
+        void test_ordered_iterator( List& l )
+        {
+            // Precondition: list is empty
+            // Postcondition: list is empty
+
+            static const size_t nSize = 20;
+            struct key_val {
+                int key;
+                int val;
+            };
+            key_val arr[nSize];
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                arr[i].key = static_cast<int>(i);
+                arr[i].val = arr[i].key;
+            }
+            shuffle( arr, arr + nSize );
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+
+            for ( auto& i : arr )
+                EXPECT_TRUE( l.insert( i.key, i.val ));
+
+            int key = 0;
+            for ( auto& it : l ) {
+                EXPECT_EQ( key, it.first.key() );
+                EXPECT_EQ( it.second.val, it.first.key() );
+                it.second.val = it.first.key() * 10;
+                ++key;
+            }
+            EXPECT_EQ( static_cast<size_t>(key), nSize );
+
+            key = 0;
+            for ( auto it = l.cbegin(); it != l.cend(); ++it ) {
+                EXPECT_EQ( key, it->first.key() );
+                EXPECT_EQ( it->first.key() * 10, it->second.val );
+                ++key;
+            }
+            EXPECT_EQ( static_cast<size_t>(key), nSize );
+
+            key = 0;
+            for ( auto it = l.begin(); it != l.end(); ++it ) {
+                EXPECT_EQ( key, it->first.key() );
+                EXPECT_EQ( it->first.key() * 10, it->second.val );
+                it->second.val = it->first.key() * 2;
+                ++key;
+            }
+            EXPECT_EQ( static_cast<size_t>(key), nSize );
+
+            List const& cl = l;
+            key = 0;
+            for ( auto it = cl.begin(); it != cl.end(); ++it ) {
+                EXPECT_EQ( key, it->first.nKey );
+                EXPECT_EQ( it->first.nKey * 2, it->second.val );
+                ++key;
+            }
+            EXPECT_EQ( static_cast<size_t>(key), nSize );
+
+            l.clear();
+            ASSERT_TRUE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, 0 );
+        }
+    };
+
+} // namespace cds_test
+
+#endif // CDSUNIT_LIST_TEST_KV_LIST_H
diff --git a/test/unit/list/test_kv_list_hp.h b/test/unit/list/test_kv_list_hp.h
new file mode 100644 (file)
index 0000000..c401e66
--- /dev/null
@@ -0,0 +1,138 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_LIST_TEST_KV_LIST_HP_H
+#define CDSUNIT_LIST_TEST_KV_LIST_HP_H
+
+#include "test_kv_list.h"
+
+namespace cds_test {
+
+    class kv_list_hp : public kv_list_common
+    {
+    protected:
+        template <typename List>
+        void test_hp( List& l )
+        {
+            // Precondition: list is empty
+            // Postcondition: list is empty
+
+            static const size_t nSize = 20;
+            typedef typename List::key_type    list_key_type;
+            typedef typename List::mapped_type list_mapped_type;
+            typedef typename List::value_type  list_value_type;
+            typedef typename List::guarded_ptr guarded_ptr;
+
+            struct key_val {
+                int key;
+                int val;
+            };
+            key_val arr[nSize];
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                arr[i].key = static_cast<int>(i);
+                arr[i].val = arr[i].key * 10;
+            }
+            shuffle( arr, arr + nSize );
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+
+            guarded_ptr gp;
+            size_t nCount = 0;
+
+            // get() test
+            for ( auto& i : arr ) {
+                gp = l.get( i.key );
+                EXPECT_TRUE( !gp );
+                gp = l.get_with( other_key( i.key ), other_less());
+                EXPECT_TRUE( !gp );
+
+                EXPECT_TRUE( l.insert( i.key, i.val ));
+
+                gp = l.get( i.key );
+                ASSERT_FALSE( !gp );
+                EXPECT_EQ( gp->first.nKey, i.key );
+                EXPECT_EQ( gp->second.val, gp->first.nKey * 10 );
+                gp->second.val = gp->first.nKey * 5;
+
+                gp = l.get_with( other_key( i.key ), other_less());
+                ASSERT_FALSE( !gp );
+                EXPECT_EQ( gp->first.nKey, i.key );
+                EXPECT_EQ( gp->second.val, gp->first.nKey * 5 );
+                gp->second.val = gp->first.nKey * 10;
+
+                ++nCount;
+                ASSERT_FALSE( l.empty() );
+                ASSERT_CONTAINER_SIZE( l, nCount );
+            }
+
+            ASSERT_FALSE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, nSize );
+
+            // extract() test
+            for ( auto const& i : arr ) {
+                ASSERT_FALSE( l.empty() );
+                ASSERT_CONTAINER_SIZE( l, nCount );
+                --nCount;
+
+                gp = l.get( i.key );
+                ASSERT_FALSE( !gp );
+                EXPECT_EQ( gp->first.nKey, i.key );
+
+                switch ( i.key & 1 ) {
+                    case 0:
+                        gp = l.extract( i.key );
+                        break;
+                    case 1:
+                        gp = l.extract_with( other_key( i.key ), other_less());
+                        break;
+                }
+                ASSERT_FALSE( !gp );
+                EXPECT_EQ( gp->first.nKey, i.key );
+                EXPECT_EQ( gp->second.val, gp->first.nKey * 10 );
+
+                gp = l.get( i.key );
+                EXPECT_FALSE( gp );
+
+                gp = l.extract( i.key );
+                EXPECT_FALSE( gp );
+                gp = l.extract_with( other_key( i.key ), other_less());
+                EXPECT_FALSE( gp );
+            }
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+        }
+    };
+
+} // namespace cds_list
+
+#endif // CDSUNIT_LIST_TEST_KV_LIST_HP_H
diff --git a/test/unit/list/test_kv_list_nogc.h b/test/unit/list/test_kv_list_nogc.h
new file mode 100644 (file)
index 0000000..aff834a
--- /dev/null
@@ -0,0 +1,369 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_LIST_TEST_KV_LIST_NOGC_H
+#define CDSUNIT_LIST_TEST_KV_LIST_NOGC_H
+
+#include <cds_test/check_size.h>
+#include <cds_test/fixture.h>
+
+namespace cds_test {
+
+    class kv_list_nogc : public fixture
+    {
+    public:
+        struct key_type {
+            int key;
+
+            key_type() = delete;
+            explicit key_type( int n )
+                : key( n )
+            {}
+
+            key_type( key_type const& s )
+                : key( s.key )
+            {}
+
+            key_type( key_type&& s )
+                : key( s.key )
+            {
+                s.key = 0;
+            }
+        };
+
+        struct value_type {
+            int val;
+
+            value_type()
+                : val( 0 )
+            {}
+
+            explicit value_type( int n )
+                : val( n )
+            {}
+        };
+
+        struct lt
+        {
+            bool operator()( key_type const& lhs, key_type const& rhs ) const
+            {
+                return lhs.key < rhs.key;
+            }
+
+            bool operator()( key_type const& lhs, int rhs ) const
+            {
+                return lhs.key < rhs;
+            }
+
+            bool operator()( int lhs, key_type const& rhs ) const
+            {
+                return lhs < rhs.key;
+            }
+
+            template <typename T>
+            bool operator ()( T const& v1, T const& v2 ) const
+            {
+                return v1.key < v2.key;
+            }
+        };
+
+        struct cmp
+        {
+            int operator()( key_type const& lhs, key_type const& rhs ) const
+            {
+                return lhs.key - rhs.key;
+            }
+
+            int operator()( key_type const& lhs, int rhs ) const
+            {
+                return lhs.key - rhs;
+            }
+
+            int operator()( int lhs, key_type const& rhs ) const
+            {
+                return lhs - rhs.key;
+            }
+
+            template <typename T>
+            int operator ()( T const& lhs, T const& rhs ) const
+            {
+                return lhs.key - rhs.key;
+            }
+        };
+
+        struct other_key
+        {
+            int key;
+
+            other_key()
+            {}
+
+            other_key( int n )
+                : key( n )
+            {}
+        };
+
+        struct other_less
+        {
+            template <typename T1, typename T2>
+            bool operator()( T1 const& t1, T2 const& t2 ) const
+            {
+                return t1.key < t2.key;
+            }
+        };
+
+    protected:
+        template <typename List>
+        void test( List& l )
+        {
+            // Precondition: list is empty
+            // Postcondition: list is empty
+
+            static const size_t nSize = 20;
+            typedef typename List::key_type    list_key_type;
+            typedef typename List::mapped_type list_mapped_type;
+            typedef typename List::value_type  list_value_type;
+
+            struct key_val {
+                int key;
+                int val;
+            };
+            key_val arr[nSize];
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                arr[i].key = static_cast<int>(i) + 1;
+                arr[i].val = arr[i].key * 10;
+            }
+            shuffle( arr, arr + nSize );
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+
+            // insert/find
+            for ( auto const& i : arr ) {
+                EXPECT_TRUE( l.contains( i.key ) == l.end());
+                EXPECT_TRUE( l.contains( key_type( i.key )) == l.end());
+                EXPECT_TRUE( l.contains( other_key( i.key ), other_less()) == l.end());
+
+                switch ( i.key % 5 ) {
+                    case 0:
+                    {
+                        auto it = l.insert( i.key );
+                        ASSERT_FALSE( it == l.end());
+                        EXPECT_EQ( it->first.key, i.key );
+                        EXPECT_EQ( it->second.val, 0 );
+                        it = l.contains( i.key );
+                        EXPECT_FALSE( it == l.end() );
+                        EXPECT_EQ( it->first.key, i.key );
+                        EXPECT_EQ( it->second.val, 0 );
+                        it = l.insert( i.key );
+                        EXPECT_TRUE( it == l.end() );
+                        break;
+                    }
+                    case 1:
+                    {
+                        auto it = l.insert( i.key, i.val );
+                        ASSERT_FALSE( it == l.end() );
+                        EXPECT_EQ( it->first.key, i.key );
+                        EXPECT_EQ( it->second.val, i.val );
+                        it = l.contains( key_type( i.key ));
+                        EXPECT_FALSE( it == l.end() );
+                        EXPECT_EQ( it->first.key, i.key );
+                        EXPECT_EQ( it->second.val, i.val );
+                        it = l.insert( key_type( i.key ), i.val );
+                        EXPECT_TRUE( it == l.end() );
+                        break;
+                    }
+                    case 2:
+                    {
+                        auto it = l.emplace( i.key, i.key * 100 );
+                        ASSERT_FALSE( it == l.end() );
+                        EXPECT_EQ( it->first.key, i.key );
+                        EXPECT_EQ( it->second.val, i.key * 100 );
+                        it = l.contains( other_key( i.key ), other_less());
+                        ASSERT_FALSE( it == l.end() );
+                        EXPECT_EQ( it->first.key, i.key );
+                        EXPECT_EQ( it->second.val, i.key * 100 );
+                        it = l.emplace( i.key, i.key * 50 );
+                        EXPECT_TRUE( it == l.end() );
+                        break;
+                    }
+                    case 3:
+                    {
+                        auto pair = l.update( i.key, false );
+                        EXPECT_TRUE( pair.first == l.end());
+                        EXPECT_FALSE( pair.second );
+
+                        pair = l.update( i.key );
+                        ASSERT_FALSE( pair.first == l.end() );
+                        EXPECT_TRUE( pair.second );
+                        pair.first->second.val = i.key * 3;
+
+                        auto it = l.contains( other_key( i.key ), other_less() );
+                        ASSERT_FALSE( it == l.end() );
+                        EXPECT_TRUE( it == pair.first );
+                        EXPECT_EQ( it->first.key, i.key );
+                        EXPECT_EQ( it->second.val, i.key * 3 );
+
+                        pair = l.update( i.key, false );
+                        ASSERT_FALSE( pair.first == l.end() );
+                        EXPECT_TRUE( pair.first == it );
+                        EXPECT_FALSE( pair.second );
+                        EXPECT_EQ( pair.first->first.key, i.key );
+                        pair.first->second.val = i.key * 5;
+
+                        it = l.contains( other_key( i.key ), other_less() );
+                        ASSERT_FALSE( it == l.end() );
+                        EXPECT_TRUE( it == pair.first );
+                        EXPECT_EQ( it->first.key, i.key );
+                        EXPECT_EQ( it->second.val, i.key * 5 );
+                        break;
+                    }
+                    case 4:
+                    {
+                        auto it = l.insert_with( key_type( i.key ), [&i]( list_value_type& n ) {
+                            EXPECT_EQ( i.key, n.first.key );
+                            n.second.val = n.first.key * 7;
+                        });
+                        ASSERT_FALSE( it == l.end() );
+                        EXPECT_EQ( it->first.key, i.key );
+                        EXPECT_EQ( it->second.val, i.key * 7 );
+                        it = l.contains( i.key );
+                        ASSERT_FALSE( it == l.end() );
+                        EXPECT_EQ( it->first.key, i.key );
+                        EXPECT_EQ( it->second.val, i.key * 7 );
+                        it = l.insert_with( i.key, []( list_value_type& ) {
+                            EXPECT_TRUE( false );
+                        });
+                        EXPECT_TRUE( it == l.end() );
+                        break;
+                    }
+                }
+
+                EXPECT_TRUE( l.contains( i.key ) != l.end());
+                EXPECT_TRUE( l.contains( key_type( i.key )) != l.end());
+                EXPECT_TRUE( l.contains( other_key( i.key ), other_less()) != l.end());
+
+                EXPECT_FALSE( l.empty() );
+            }
+
+            ASSERT_FALSE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, nSize );
+
+            l.clear();
+
+            ASSERT_TRUE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, 0 );
+
+            // empty list iterator test
+            {
+                List const& cl = l;
+                EXPECT_TRUE( l.begin() == l.end());
+                EXPECT_TRUE( l.cbegin() == l.cend());
+                EXPECT_TRUE( cl.begin() == cl.end());
+                EXPECT_TRUE( l.begin() == l.cend());
+                EXPECT_TRUE( cl.begin() == l.end());
+            }
+        }
+
+        template <typename List>
+        void test_ordered_iterator( List& l )
+        {
+            // Precondition: list is empty
+            // Postcondition: list is empty
+
+            static const size_t nSize = 20;
+            typedef typename List::key_type    list_key_type;
+            typedef typename List::mapped_type list_mapped_type;
+            typedef typename List::value_type  list_value_type;
+
+            struct key_val {
+                int key;
+                int val;
+            };
+            key_val arr[nSize];
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                arr[i].key = static_cast<int>(i);
+                arr[i].val = arr[i].key;
+            }
+            shuffle( arr, arr + nSize );
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+
+            for ( auto& i : arr )
+                EXPECT_TRUE( l.insert( i.key, i.val ) != l.end());
+
+            int key = 0;
+            for ( auto& it : l ) {
+                EXPECT_EQ( key, it.first.key );
+                EXPECT_EQ( it.second.val, it.first.key );
+                it.second.val = it.first.key * 10;
+                ++key;
+            }
+            EXPECT_EQ( static_cast<size_t>(key), nSize );
+
+            key = 0;
+            for ( auto it = l.cbegin(); it != l.cend(); ++it ) {
+                EXPECT_EQ( key, it->first.key );
+                EXPECT_EQ( key, (*it).first.key );
+                EXPECT_EQ( it->first.key * 10, it->second.val );
+                ++key;
+            }
+            EXPECT_EQ( static_cast<size_t>(key), nSize );
+
+            key = 0;
+            for ( auto it = l.begin(); it != l.end(); ++it ) {
+                EXPECT_EQ( key, it->first.key );
+                EXPECT_EQ( it->first.key * 10, it->second.val );
+                it->second.val = it->first.key * 2;
+                ++key;
+            }
+            EXPECT_EQ( static_cast<size_t>(key), nSize );
+
+            List const& cl = l;
+            key = 0;
+            for ( auto it = cl.begin(); it != cl.end(); ++it ) {
+                EXPECT_EQ( key, it->first.key );
+                EXPECT_EQ( it->first.key * 2, it->second.val );
+                ++key;
+            }
+            EXPECT_EQ( static_cast<size_t>(key), nSize );
+
+            l.clear();
+            ASSERT_TRUE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, 0 );
+        }
+    };
+
+} // namespace cds_test
+
+#endif // CDSUNIT_LIST_TEST_KV_LIST_NOGC_H
diff --git a/test/unit/list/test_kv_list_rcu.h b/test/unit/list/test_kv_list_rcu.h
new file mode 100644 (file)
index 0000000..9b26317
--- /dev/null
@@ -0,0 +1,156 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef CDSUNIT_LIST_TEST_KV_LIST_RCU_H
+#define CDSUNIT_LIST_TEST_KV_LIST_RCU_H
+
+#include "test_kv_list.h"
+
+namespace cds_test {
+
+    class kv_list_rcu : public kv_list_common
+    {
+    protected:
+        template <typename List>
+        void test_rcu( List& l )
+        {
+            // Precondition: list is empty
+            // Postcondition: list is empty
+
+            static const size_t nSize = 20;
+            typedef typename List::key_type    list_key_type;
+            typedef typename List::mapped_type list_mapped_type;
+            typedef typename List::value_type  list_value_type;
+            struct key_val {
+                int key;
+                int val;
+            };
+            key_val arr[nSize];
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                arr[i].key = static_cast<int>(i);
+                arr[i].val = arr[i].key * 10;
+            }
+            shuffle( arr, arr + nSize );
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+
+            typedef typename List::exempt_ptr exempt_ptr;
+            typedef typename List::raw_ptr    raw_ptr;
+            typedef typename List::rcu_lock   rcu_lock;
+
+            // get() test
+            for ( auto const& i : arr ) {
+                {
+                    rcu_lock lock;
+                    raw_ptr rp = l.get( i.key );
+                    EXPECT_TRUE( !rp );
+                    rp = l.get_with( other_key( i.key ), other_less() );
+                    EXPECT_TRUE( !rp );
+                }
+
+                EXPECT_TRUE( l.insert( i.key, i.val ));
+
+                {
+                    rcu_lock lock;
+                    raw_ptr rp = l.get( i.key );
+                    ASSERT_FALSE( !rp );
+                    EXPECT_EQ( rp->first.nKey, i.key );
+                    EXPECT_EQ( rp->second.val, i.val );
+                }
+                {
+                    rcu_lock lock;
+                    raw_ptr rp = l.get( key_type( i.key ));
+                    ASSERT_FALSE( !rp );
+                    EXPECT_EQ( rp->first.nKey, i.key );
+                    EXPECT_EQ( rp->second.val, i.val );
+                }
+                {
+                    rcu_lock lock;
+                    raw_ptr rp = l.get_with( other_key( i.key ), other_less());
+                    ASSERT_FALSE( !rp );
+                    EXPECT_EQ( rp->first.key(), i.key );
+                    EXPECT_EQ( rp->second.val, i.val );
+                }
+            }
+
+            ASSERT_FALSE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, nSize );
+
+            // extract()
+
+            exempt_ptr gp;
+            if ( List::c_bExtractLockExternal ) {
+                for ( auto const& i : arr ) {
+                    {
+                        rcu_lock lock;
+                        if ( i.key & 1 )
+                            gp = l.extract( i.key );
+                        else
+                            gp = l.extract_with( other_key( i.key ), other_less());
+
+                        ASSERT_FALSE( !gp );
+                        EXPECT_EQ( gp->first.key(), i.key );
+                    }
+                    gp.release();
+                    {
+                        rcu_lock lock;
+                        gp = l.extract( i.key );
+                        EXPECT_TRUE( !gp );
+                        gp = l.extract_with( other_key( i.key ), other_less());
+                        EXPECT_TRUE( !gp );
+                    }
+                }
+            }
+            else {
+                for ( auto const& i : arr ) {
+                    if ( i.key & 1 )
+                        gp = l.extract( i.key );
+                    else
+                        gp = l.extract_with( other_key( i.key ), other_less());
+
+                    ASSERT_FALSE( !gp );
+                    EXPECT_EQ( gp->first.key(), i.key );
+
+                    gp = l.extract( i.key );
+                    EXPECT_TRUE( !gp );
+                    gp = l.extract_with( other_key( i.key ), other_less());
+                    EXPECT_TRUE( !gp );
+                }
+            }
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+        }
+    };
+} // namespace cds_test
+
+#endif // CDSUNIT_LIST_TEST_KV_LIST_RCU_H
diff --git a/test/unit/list/test_kv_michael_rcu.h b/test/unit/list/test_kv_michael_rcu.h
new file mode 100644 (file)
index 0000000..730049b
--- /dev/null
@@ -0,0 +1,157 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_LIST_TEST_MICHAEL_KV_LIST_RCU_H
+#define CDSUNIT_LIST_TEST_MICHAEL_KV_LIST_RCU_H
+
+#include "test_kv_list_rcu.h"
+#include <cds/container/michael_kvlist_rcu.h>
+
+namespace cc = cds::container;
+
+template <class RCU>
+class MichaelKVList : public cds_test::kv_list_rcu
+{
+    typedef cds_test::kv_list_rcu base_class;
+public:
+    typedef cds::urcu::gc<RCU> rcu_type;
+
+protected:
+    void SetUp()
+    {
+        RCU::Construct();
+        cds::threading::Manager::attachThread();
+    }
+
+    void TearDown()
+    {
+        cds::threading::Manager::detachThread();
+        RCU::Destruct();
+    }
+};
+
+TYPED_TEST_CASE_P( MichaelKVList );
+
+TYPED_TEST_P( MichaelKVList, less_ordered )
+{
+    typedef cc::MichaelKVList< typename TestFixture::rcu_type, typename TestFixture::key_type, typename TestFixture::value_type,
+        typename cc::michael_list::make_traits<
+            cds::opt::less< typename TestFixture::lt >
+        >::type
+    > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( MichaelKVList, compare_ordered )
+{
+    typedef cc::MichaelKVList< typename TestFixture::rcu_type, typename TestFixture::key_type, typename TestFixture::value_type,
+        typename cc::michael_list::make_traits<
+            cds::opt::compare< typename TestFixture::cmp>
+        >::type
+    > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( MichaelKVList, mix_ordered )
+{
+    typedef cc::MichaelKVList< typename TestFixture::rcu_type, typename TestFixture::key_type, typename TestFixture::value_type,
+        typename cc::michael_list::make_traits<
+            cds::opt::compare< typename TestFixture::cmp>
+            ,cds::opt::less< typename TestFixture::lt>
+        >::type
+    > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( MichaelKVList, item_counting )
+{
+    struct traits : public cc::michael_list::traits
+    {
+        typedef typename TestFixture::lt less;
+        typedef cds::atomicity::item_counter item_counter;
+    };
+    typedef cc::MichaelKVList<typename TestFixture::rcu_type, typename TestFixture::key_type, typename TestFixture::value_type, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( MichaelKVList, backoff )
+{
+    struct traits : public cc::michael_list::traits
+    {
+        typedef typename TestFixture::lt less;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::backoff::empty back_off;
+    };
+    typedef cc::MichaelKVList<typename TestFixture::rcu_type, typename TestFixture::key_type, typename TestFixture::value_type, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( MichaelKVList, seq_cst )
+{
+    struct traits : public cc::michael_list::traits
+    {
+        typedef typename TestFixture::lt less;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::opt::v::sequential_consistent memory_model;
+    };
+    typedef cc::MichaelKVList<typename TestFixture::rcu_type, typename TestFixture::key_type, typename TestFixture::value_type, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+// GCC 5: All test names should be written on single line, otherwise a runtime error will be encountered like as
+// "No test named <test_name> can be found in this test case"
+REGISTER_TYPED_TEST_CASE_P( MichaelKVList,
+    less_ordered, compare_ordered, mix_ordered, item_counting, backoff, seq_cst
+    );
+
+#endif // CDSUNIT_LIST_TEST_MICHAEL_KV_LIST_RCU_H
diff --git a/test/unit/list/test_lazy_rcu.h b/test/unit/list/test_lazy_rcu.h
new file mode 100644 (file)
index 0000000..f506d7b
--- /dev/null
@@ -0,0 +1,174 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_LIST_TEST_LAZY_LIST_RCU_H
+#define CDSUNIT_LIST_TEST_LAZY_LIST_RCU_H
+
+#include "test_list_rcu.h"
+#include <cds/container/lazy_list_rcu.h>
+
+namespace cc = cds::container;
+
+template <class RCU>
+class LazyList : public cds_test::list_rcu
+{
+    typedef cds_test::list_rcu base_class;
+public:
+    typedef cds::urcu::gc<RCU> rcu_type;
+
+protected:
+    void SetUp()
+    {
+        RCU::Construct();
+        cds::threading::Manager::attachThread();
+    }
+
+    void TearDown()
+    {
+        cds::threading::Manager::detachThread();
+        RCU::Destruct();
+    }
+};
+
+TYPED_TEST_CASE_P( LazyList );
+
+TYPED_TEST_P( LazyList, less_ordered )
+{
+    typedef cc::LazyList< typename TestFixture::rcu_type, typename TestFixture::item,
+        typename cc::lazy_list::make_traits<
+            cds::opt::less< typename TestFixture::template lt< typename TestFixture::item>>
+        >::type
+    > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( LazyList, compare_ordered )
+{
+    typedef cc::LazyList< typename TestFixture::rcu_type, typename TestFixture::item,
+        typename cc::lazy_list::make_traits<
+            cds::opt::compare< typename TestFixture::template cmp< typename TestFixture::item>>
+        >::type
+    > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( LazyList, mix_ordered )
+{
+    typedef cc::LazyList< typename TestFixture::rcu_type, typename TestFixture::item,
+        typename cc::lazy_list::make_traits<
+            cds::opt::less< typename TestFixture::template lt< typename TestFixture::item>>
+            ,cds::opt::compare< typename TestFixture::template cmp< typename TestFixture::item>>
+        >::type
+    > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( LazyList, item_counting )
+{
+    struct traits : public cc::lazy_list::traits
+    {
+        typedef typename TestFixture::template lt< typename TestFixture::item> less;
+        typedef cds::atomicity::item_counter item_counter;
+    };
+    typedef cc::LazyList<typename TestFixture::rcu_type, typename TestFixture::item, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( LazyList, backoff )
+{
+    struct traits : public cc::lazy_list::traits
+    {
+        typedef typename TestFixture::template lt< typename TestFixture::item> less;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::backoff::empty back_off;
+    };
+    typedef cc::LazyList<typename TestFixture::rcu_type, typename TestFixture::item, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( LazyList, seq_cst )
+{
+    struct traits : public cc::lazy_list::traits
+    {
+        typedef typename TestFixture::template lt< typename TestFixture::item> less;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::opt::v::sequential_consistent memory_model;
+    };
+    typedef cc::LazyList<typename TestFixture::rcu_type, typename TestFixture::item, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( LazyList, mutex )
+{
+    struct traits : public cc::lazy_list::traits
+    {
+        typedef typename TestFixture::template lt< typename TestFixture::item> less;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef std::mutex lock_type;
+    };
+    typedef cc::LazyList<typename TestFixture::rcu_type, typename TestFixture::item, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+// GCC 5: All test names should be written on single line, otherwise a runtime error will be encountered like as
+// "No test named <test_name> can be found in this test case"
+REGISTER_TYPED_TEST_CASE_P( LazyList,
+    less_ordered, compare_ordered, mix_ordered, item_counting, backoff, seq_cst, mutex
+    );
+
+#endif // CDSUNIT_LIST_TEST_LAZY_LIST_RCU_H
diff --git a/test/unit/list/test_list.h b/test/unit/list/test_list.h
new file mode 100644 (file)
index 0000000..c3086a7
--- /dev/null
@@ -0,0 +1,373 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_LIST_TEST_LIST_H
+#define CDSUNIT_LIST_TEST_LIST_H
+
+#include <cds_test/check_size.h>
+#include <cds_test/fixture.h>
+
+namespace cds_test {
+
+    class list_common : public fixture
+    {
+    public:
+        struct item {
+            int     nKey;
+            int     nVal;
+
+            item()
+            {}
+
+            item( int key )
+                : nKey( key )
+                , nVal( key * 2 )
+            {}
+
+            item( int key, int val )
+                : nKey( key )
+                , nVal( val )
+            {}
+
+            item( const item& v )
+                : nKey( v.nKey )
+                , nVal( v.nVal )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        template <typename T>
+        struct lt
+        {
+            bool operator ()( const T& v1, const T& v2 ) const
+            {
+                return v1.key() < v2.key();
+            }
+
+            template <typename Q>
+            bool operator ()( const T& v1, const Q& v2 ) const
+            {
+                return v1.key() < v2;
+            }
+
+            template <typename Q>
+            bool operator ()( const Q& v1, const T& v2 ) const
+            {
+                return v1 < v2.key();
+            }
+        };
+
+        template <typename T>
+        struct cmp {
+            int operator ()( const T& v1, const T& v2 ) const
+            {
+                if ( v1.key() < v2.key() )
+                    return -1;
+                return v1.key() > v2.key() ? 1 : 0;
+            }
+
+            template <typename Q>
+            int operator ()( const T& v1, const Q& v2 ) const
+            {
+                if ( v1.key() < v2 )
+                    return -1;
+                return v1.key() > v2 ? 1 : 0;
+            }
+
+            template <typename Q>
+            int operator ()( const Q& v1, const T& v2 ) const
+            {
+                if ( v1 < v2.key() )
+                    return -1;
+                return v1 > v2.key() ? 1 : 0;
+            }
+        };
+
+        struct other_item
+        {
+            int nKey;
+
+            other_item()
+            {}
+
+            other_item( int n )
+                : nKey( n )
+            {}
+        };
+
+        struct other_less
+        {
+            template <typename T1, typename T2>
+            bool operator()( T1 const& t1, T2 const& t2 ) const
+            {
+                return t1.nKey < t2.nKey;
+            }
+        };
+
+    protected:
+        template <typename List>
+        void test_common( List& l )
+        {
+            // Precondition: list is empty
+            // Postcondition: list is empty
+
+            static const size_t nSize = 20;
+            typedef typename List::value_type value_type;
+            value_type arr[nSize];
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                arr[i].nKey = static_cast<int>(i);
+                arr[i].nVal = arr[i].nKey * 10;
+            }
+            shuffle( arr, arr + nSize );
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+
+            // insert/find
+            for ( auto const& i : arr ) {
+                EXPECT_FALSE( l.contains( i ));
+                EXPECT_FALSE( l.contains( i.nKey ));
+                EXPECT_FALSE( l.contains( other_item( i.nKey ), other_less()));
+                EXPECT_FALSE( l.find( i, []( value_type&, value_type const&) {} ));
+                EXPECT_FALSE( l.find( i.nKey, []( value_type&, int ) {} ));
+                EXPECT_FALSE( l.find_with( other_item( i.nKey ), other_less(), []( value_type&, other_item const& ) {} ));
+
+                switch ( i.nKey & 3 ) {
+                    case 0:
+                        EXPECT_TRUE( l.insert( i.nKey ));
+                        EXPECT_TRUE( l.find( i.nKey, []( value_type& n, int key ) {
+                            EXPECT_EQ( n.nVal, key * 2 );
+                        } ));
+                        EXPECT_FALSE( l.insert( i.nKey ));
+                        break;
+                    case 1:
+                        EXPECT_TRUE( l.insert( i, []( value_type& n ) {
+                            n.nVal = n.nKey * 3;
+                        }));
+                        EXPECT_TRUE( l.find( i.nKey, []( value_type& n, int key ) {
+                            EXPECT_EQ( n.nVal, key * 3 );
+                        } ));
+                        EXPECT_FALSE( l.insert( i ));
+                        break;
+                    case 2:
+                        EXPECT_TRUE( l.emplace( i.nKey, i.nKey * 100 ));
+                        EXPECT_TRUE( l.find( i.nKey, []( value_type& n, int key ) {
+                            EXPECT_EQ( n.nVal, key * 100 );
+                        } ));
+                        EXPECT_FALSE( l.insert( i ));
+                        break;
+                    case 3:
+                    {
+                        auto pair = l.update( i.nKey, []( bool bNew, value_type& n, int key ) {
+                            EXPECT_TRUE( bNew );
+                            EXPECT_EQ( key, n.nKey );
+                            n.nVal = n.nKey * 3;
+                        }, false );
+                        EXPECT_FALSE( pair.first );
+                        EXPECT_FALSE( pair.second );
+
+                        pair = l.update( i.nKey, []( bool bNew, value_type& n, int key ) {
+                            EXPECT_TRUE( bNew );
+                            EXPECT_EQ( key, n.nKey );
+                            n.nVal = n.nKey * 3;
+                        });
+                        EXPECT_TRUE( pair.first );
+                        EXPECT_TRUE( pair.second );
+
+                        EXPECT_TRUE( l.find( i.nKey, []( value_type& n, int key ) {
+                            EXPECT_EQ( n.nVal, key * 3 );
+                        } ));
+                        EXPECT_FALSE( l.insert( i ));
+                    }
+                        break;
+                }
+
+                EXPECT_TRUE( l.contains( i ));
+                EXPECT_TRUE( l.contains( i.nKey ));
+                EXPECT_TRUE( l.contains( other_item( i.nKey ), other_less()));
+                EXPECT_TRUE( l.find( i, []( value_type& n, value_type const& arg ) { 
+                    EXPECT_EQ( arg.nKey, n.nKey );
+                    n.nVal = n.nKey;
+                } ));
+                EXPECT_TRUE( l.find( i.nKey, []( value_type& n, int key ) {
+                    EXPECT_EQ( key, n.nKey );
+                    EXPECT_EQ( n.nKey, n.nVal );
+                    n.nVal = n.nKey * 5;
+                } ));
+                EXPECT_TRUE( l.find_with( other_item( i.nKey ), other_less(), []( value_type& n, other_item const& key ) {
+                    EXPECT_EQ( key.nKey, n.nKey );
+                    EXPECT_EQ( n.nKey * 5, n.nVal );
+                } ));
+
+                auto pair = l.update( i.nKey, []( bool bNew, value_type& n, int key ) {
+                    EXPECT_FALSE( bNew );
+                    EXPECT_EQ( key, n.nKey );
+                    EXPECT_EQ( key * 5, n.nVal );
+                    n.nVal = n.nKey * 3;
+                }, false );
+                EXPECT_TRUE( pair.first );
+                EXPECT_FALSE( pair.second );
+
+                EXPECT_FALSE( l.empty() );
+            }
+
+            ASSERT_FALSE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, nSize );
+
+            // erase
+            for ( auto const&i : arr ) {
+                switch ( i.nKey & 3 ) {
+                    case 0:
+                        EXPECT_TRUE( l.erase( i.nKey ));
+                        break;
+                    case 1:
+                        EXPECT_TRUE( l.erase_with( other_item( i.nKey ), other_less()));
+                        break;
+                    case 2:
+                        EXPECT_TRUE( l.erase( i, [ &i ]( value_type const& n ) {
+                            EXPECT_EQ( n.nKey, i.nKey );
+                            EXPECT_EQ( n.nKey * 3, n.nVal );
+                        }));
+                        break;
+                    case 3:
+                        EXPECT_TRUE( l.erase_with( other_item( i.nKey ), other_less(), [ &i ]( value_type const& n) {
+                            EXPECT_EQ( n.nKey, i.nKey );
+                            EXPECT_EQ( n.nKey * 3, n.nVal );
+                        } ));
+                }
+
+                EXPECT_FALSE( l.contains( i ));
+                EXPECT_FALSE( l.contains( i.nKey ));
+                EXPECT_FALSE( l.contains( other_item( i.nKey ), other_less()));
+                EXPECT_FALSE( l.find( i, []( value_type&, value_type const&) {} ));
+                EXPECT_FALSE( l.find( i.nKey, []( value_type&, int ) {} ));
+                EXPECT_FALSE( l.find_with( other_item( i.nKey ), other_less(), []( value_type&, other_item const& ) {} ));
+            }
+
+            ASSERT_TRUE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, 0 );
+
+            // clear test
+            for ( auto& i : arr ) 
+                EXPECT_TRUE( l.insert( i ));
+
+            ASSERT_FALSE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, nSize );
+
+            l.clear();
+
+            ASSERT_TRUE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, 0 );
+
+            // empty list iterator test
+            {
+                List const& cl = l;
+                EXPECT_TRUE( l.begin() == l.end());
+                EXPECT_TRUE( l.cbegin() == l.cend());
+                EXPECT_TRUE( cl.begin() == cl.end());
+                EXPECT_TRUE( l.begin() == l.cend());
+                EXPECT_TRUE( cl.begin() == l.end());
+            }
+        }
+
+        template <typename List>
+        void test_ordered_iterator( List& l )
+        {
+            // Precondition: list is empty
+            // Postcondition: list is empty
+
+            static const size_t nSize = 20;
+            typedef typename List::value_type value_type;
+            value_type arr[nSize];
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                arr[i].nKey = static_cast<int>(i);
+                arr[i].nVal = arr[i].nKey;
+            }
+            shuffle( arr, arr + nSize );
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+
+            for ( auto& i : arr )
+                EXPECT_TRUE( l.insert( i ));
+
+            int key = 0;
+            for ( auto& it : l ) {
+                EXPECT_EQ( key, it.nKey );
+                EXPECT_EQ( it.nVal, it.nKey );
+                it.nVal = it.nKey * 10;
+                ++key;
+            }
+            EXPECT_EQ( static_cast<size_t>(key), nSize );
+
+            key = 0;
+            for ( auto it = l.cbegin(); it != l.cend(); ++it ) {
+                EXPECT_EQ( key, it->nKey );
+                EXPECT_EQ( key, (*it).nKey );
+                EXPECT_EQ( it->nKey * 10, it->nVal );
+                ++key;
+            }
+            EXPECT_EQ( static_cast<size_t>(key), nSize );
+
+            key = 0;
+            for ( auto it = l.begin(); it != l.end(); ++it ) {
+                EXPECT_EQ( key, it->nKey );
+                EXPECT_EQ( key, (*it).nKey );
+                EXPECT_EQ( it->nKey * 10, it->nVal );
+                it->nVal = it->nKey * 2;
+                ++key;
+            }
+            EXPECT_EQ( static_cast<size_t>(key), nSize );
+
+            List const& cl = l;
+            key = 0;
+            for ( auto it = cl.begin(); it != cl.end(); ++it ) {
+                EXPECT_EQ( key, it->nKey );
+                EXPECT_EQ( key, (*it).nKey );
+                EXPECT_EQ( it->nKey * 2, it->nVal );
+                ++key;
+            }
+            EXPECT_EQ( static_cast<size_t>(key), nSize );
+
+            l.clear();
+            ASSERT_TRUE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, 0 );
+        }
+    };
+
+} // namespace cds_test
+
+#endif // CDSUNIT_LIST_TEST_LIST_H
diff --git a/test/unit/list/test_list_hp.h b/test/unit/list/test_list_hp.h
new file mode 100644 (file)
index 0000000..67cb38c
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_LIST_TEST_LIST_HP_H
+#define CDSUNIT_LIST_TEST_LIST_HP_H
+
+#include "test_list.h"
+
+namespace cds_test {
+
+    class list_hp : public list_common
+    {
+    protected:
+        template <typename List>
+        void test_hp( List& l )
+        {
+            // Precondition: list is empty
+            // Postcondition: list is empty
+
+            static const size_t nSize = 20;
+            typedef typename List::value_type  value_type;
+            typedef typename List::guarded_ptr guarded_ptr;
+            value_type arr[nSize];
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                arr[i].nKey = static_cast<int>(i);
+                arr[i].nVal = arr[i].nKey * 10;
+            }
+            shuffle( arr, arr + nSize );
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+
+            guarded_ptr gp;
+            size_t nCount = 0;
+
+            // get() test
+            for ( auto& i : arr ) {
+                gp = l.get( i.nKey );
+                EXPECT_TRUE( !gp );
+                gp = l.get_with( other_item( i.nKey ), other_less());
+                EXPECT_TRUE( !gp );
+
+                EXPECT_TRUE( l.insert( i ));
+
+                gp = l.get( i );
+                ASSERT_FALSE( !gp );
+                EXPECT_EQ( gp->nKey, i.nKey );
+                EXPECT_EQ( gp->nVal, gp->nKey * 10 );
+                gp->nVal = gp->nKey * 5;
+
+                gp = l.get_with( other_item( i.nKey ), other_less());
+                ASSERT_FALSE( !gp );
+                EXPECT_EQ( gp->nKey, i.nKey );
+                EXPECT_EQ( gp->nVal, gp->nKey * 5 );
+                gp->nVal = gp->nKey * 10;
+
+                ++nCount;
+                ASSERT_FALSE( l.empty() );
+                ASSERT_CONTAINER_SIZE( l, nCount );
+            }
+
+            ASSERT_FALSE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, nSize );
+
+            // extract() test
+            for ( auto const& i : arr ) {
+                ASSERT_FALSE( l.empty() );
+                ASSERT_CONTAINER_SIZE( l, nCount );
+                --nCount;
+
+                gp = l.get( i );
+                ASSERT_FALSE( !gp );
+                EXPECT_EQ( gp->nKey, i.nKey );
+
+                switch ( i.nKey & 3 ) {
+                    case 0:
+                        gp = l.extract( i );
+                        break;
+                    case 1:
+                        gp = l.extract_with( other_item( i.nKey ), other_less());
+                        break;
+                    default:
+                        gp = l.extract( i.nKey );
+                        break;
+                }
+                ASSERT_FALSE( !gp );
+                EXPECT_EQ( gp->nKey, i.nKey );
+                EXPECT_EQ( gp->nVal, gp->nKey * 10 );
+
+                gp = l.get( i.nKey );
+                EXPECT_FALSE( gp );
+
+                gp = l.extract( i );
+                EXPECT_FALSE( gp );
+                gp = l.extract_with( other_item( i.nKey ), other_less());
+                EXPECT_FALSE( gp );
+                gp = l.extract( i.nKey );
+                EXPECT_FALSE( gp );
+            }
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+        }
+    };
+
+} // namespace cds_list
+
+#endif // CDSUNIT_LIST_TEST_LIST_HP_H
diff --git a/test/unit/list/test_list_nogc.h b/test/unit/list/test_list_nogc.h
new file mode 100644 (file)
index 0000000..b381212
--- /dev/null
@@ -0,0 +1,335 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_LIST_TEST_LIST_NOGC_H
+#define CDSUNIT_LIST_TEST_LIST_NOGC_H
+
+#include <cds_test/check_size.h>
+#include <cds_test/fixture.h>
+
+namespace cds_test {
+
+    class list_nogc : public fixture
+    {
+    public:
+        struct item {
+            int     nKey;
+            int     nVal;
+
+            item()
+            {}
+
+            item( int key )
+                : nKey( key )
+                , nVal( key * 2 )
+            {}
+
+            item( int key, int val )
+                : nKey( key )
+                , nVal( val )
+            {}
+
+            item( const item& v )
+                : nKey( v.nKey )
+                , nVal( v.nVal )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        template <typename T>
+        struct lt
+        {
+            bool operator ()( const T& v1, const T& v2 ) const
+            {
+                return v1.key() < v2.key();
+            }
+
+            template <typename Q>
+            bool operator ()( const T& v1, const Q& v2 ) const
+            {
+                return v1.key() < v2;
+            }
+
+            template <typename Q>
+            bool operator ()( const Q& v1, const T& v2 ) const
+            {
+                return v1 < v2.key();
+            }
+        };
+
+        template <typename T>
+        struct cmp {
+            int operator ()( const T& v1, const T& v2 ) const
+            {
+                if ( v1.key() < v2.key() )
+                    return -1;
+                return v1.key() > v2.key() ? 1 : 0;
+            }
+
+            template <typename Q>
+            int operator ()( const T& v1, const Q& v2 ) const
+            {
+                if ( v1.key() < v2 )
+                    return -1;
+                return v1.key() > v2 ? 1 : 0;
+            }
+
+            template <typename Q>
+            int operator ()( const Q& v1, const T& v2 ) const
+            {
+                if ( v1 < v2.key() )
+                    return -1;
+                return v1 > v2.key() ? 1 : 0;
+            }
+        };
+
+        struct other_item
+        {
+            int nKey;
+
+            other_item()
+            {}
+
+            other_item( int n )
+                : nKey( n )
+            {}
+        };
+
+        struct other_less
+        {
+            template <typename T1, typename T2>
+            bool operator()( T1 const& t1, T2 const& t2 ) const
+            {
+                return t1.nKey < t2.nKey;
+            }
+        };
+
+    protected:
+        template <typename List>
+        void test( List& l )
+        {
+            // Precondition: list is empty
+            // Postcondition: list is empty
+
+            static const size_t nSize = 20;
+            typedef typename List::value_type value_type;
+            value_type arr[nSize];
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                arr[i].nKey = static_cast<int>(i);
+                arr[i].nVal = arr[i].nKey * 10;
+            }
+            shuffle( arr, arr + nSize );
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+
+            // insert/find
+            for ( auto const& i : arr ) {
+                EXPECT_TRUE( l.contains( i ) == l.end());
+                EXPECT_TRUE( l.contains( i.nKey ) == l.end());
+                EXPECT_TRUE( l.contains( other_item( i.nKey ), other_less()) == l.end());
+
+                switch ( i.nKey & 3 ) {
+                    case 0:
+                    {
+                        auto it = l.insert( i.nKey );
+                        EXPECT_FALSE( it == l.end());
+                        EXPECT_EQ( it->nKey, i.nKey );
+                        EXPECT_EQ( it->nVal, it->nKey * 2 );
+                        it = l.contains( i.nKey );
+                        EXPECT_FALSE( it == l.end() );
+                        EXPECT_EQ( it->nKey, i.nKey );
+                        EXPECT_EQ( it->nVal, it->nKey * 2 );
+                        it = l.insert( i.nKey );
+                        EXPECT_TRUE( it == l.end() );
+                        break;
+                    }
+                    case 1:
+                    {
+                        auto it = l.insert( i );
+                        EXPECT_FALSE( it == l.end() );
+                        EXPECT_EQ( it->nKey, i.nKey );
+                        EXPECT_EQ( it->nVal, i.nVal );
+                        it = l.contains( i );
+                        EXPECT_FALSE( it == l.end() );
+                        EXPECT_EQ( it->nKey, i.nKey );
+                        EXPECT_EQ( it->nVal, i.nVal );
+                        it = l.insert( i );
+                        EXPECT_TRUE( it == l.end() );
+                        break;
+                    }
+                    case 2:
+                    {
+                        auto it = l.emplace( i.nKey, i.nKey * 100 );
+                        EXPECT_FALSE( it == l.end() );
+                        EXPECT_EQ( it->nKey, i.nKey );
+                        EXPECT_EQ( it->nVal, i.nKey * 100 );
+                        it = l.contains( other_item( i.nKey ), other_less());
+                        EXPECT_FALSE( it == l.end() );
+                        EXPECT_EQ( it->nKey, i.nKey );
+                        EXPECT_EQ( it->nVal, i.nKey * 100 );
+                        it = l.emplace( i.nKey, i.nKey * 50 );
+                        EXPECT_TRUE( it == l.end() );
+                        break;
+                    }
+                    case 3:
+                    {
+                        auto pair = l.update( i.nKey, false );
+                        EXPECT_TRUE( pair.first == l.end());
+                        EXPECT_FALSE( pair.second );
+
+                        pair = l.update( i.nKey );
+                        EXPECT_FALSE( pair.first == l.end() );
+                        EXPECT_TRUE( pair.second );
+                        pair.first->nVal = i.nKey * 3;
+                        EXPECT_EQ( pair.first->nKey, i.nKey );
+
+                        auto it = l.contains( other_item( i.nKey ), other_less() );
+                        EXPECT_FALSE( it == l.end() );
+                        EXPECT_TRUE( it == pair.first );
+                        EXPECT_EQ( it->nKey, i.nKey );
+                        EXPECT_EQ( it->nVal, i.nKey * 3 );
+
+                        pair = l.update( i.nKey, false );
+                        EXPECT_FALSE( pair.first == l.end() );
+                        EXPECT_TRUE( pair.first == it );
+                        EXPECT_FALSE( pair.second );
+                        EXPECT_EQ( pair.first->nKey, i.nKey );
+                        pair.first->nVal = i.nKey * 5;
+
+                        it = l.contains( other_item( i.nKey ), other_less() );
+                        EXPECT_FALSE( it == l.end() );
+                        EXPECT_TRUE( it == pair.first );
+                        EXPECT_EQ( it->nKey, i.nKey );
+                        EXPECT_EQ( it->nVal, i.nKey * 5 );
+                    }
+                    break;
+                }
+
+                EXPECT_TRUE( l.contains( i ) != l.end());
+                EXPECT_TRUE( l.contains( i.nKey ) != l.end());
+                EXPECT_TRUE( l.contains( other_item( i.nKey ), other_less()) != l.end());
+
+                EXPECT_FALSE( l.empty() );
+            }
+
+            ASSERT_FALSE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, nSize );
+
+            l.clear();
+
+            ASSERT_TRUE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, 0 );
+
+            // empty list iterator test
+            {
+                List const& cl = l;
+                EXPECT_TRUE( l.begin() == l.end());
+                EXPECT_TRUE( l.cbegin() == l.cend());
+                EXPECT_TRUE( cl.begin() == cl.end());
+                EXPECT_TRUE( l.begin() == l.cend());
+                EXPECT_TRUE( cl.begin() == l.end());
+            }
+        }
+
+        template <typename List>
+        void test_ordered_iterator( List& l )
+        {
+            // Precondition: list is empty
+            // Postcondition: list is empty
+
+            static const size_t nSize = 20;
+            typedef typename List::value_type value_type;
+            value_type arr[nSize];
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                arr[i].nKey = static_cast<int>(i);
+                arr[i].nVal = arr[i].nKey;
+            }
+            shuffle( arr, arr + nSize );
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+
+            for ( auto& i : arr )
+                EXPECT_TRUE( l.insert( i ) != l.end());
+
+            int key = 0;
+            for ( auto& it : l ) {
+                EXPECT_EQ( key, it.nKey );
+                EXPECT_EQ( it.nVal, it.nKey );
+                it.nVal = it.nKey * 10;
+                ++key;
+            }
+            EXPECT_EQ( static_cast<size_t>(key), nSize );
+
+            key = 0;
+            for ( auto it = l.cbegin(); it != l.cend(); ++it ) {
+                EXPECT_EQ( key, it->nKey );
+                EXPECT_EQ( key, (*it).nKey );
+                EXPECT_EQ( it->nKey * 10, it->nVal );
+                ++key;
+            }
+            EXPECT_EQ( static_cast<size_t>(key), nSize );
+
+            key = 0;
+            for ( auto it = l.begin(); it != l.end(); ++it ) {
+                EXPECT_EQ( key, it->nKey );
+                EXPECT_EQ( key, (*it).nKey );
+                EXPECT_EQ( it->nKey * 10, it->nVal );
+                it->nVal = it->nKey * 2;
+                ++key;
+            }
+            EXPECT_EQ( static_cast<size_t>(key), nSize );
+
+            List const& cl = l;
+            key = 0;
+            for ( auto it = cl.begin(); it != cl.end(); ++it ) {
+                EXPECT_EQ( key, it->nKey );
+                EXPECT_EQ( key, (*it).nKey );
+                EXPECT_EQ( it->nKey * 2, it->nVal );
+                ++key;
+            }
+            EXPECT_EQ( static_cast<size_t>(key), nSize );
+
+            l.clear();
+            ASSERT_TRUE( l.empty() );
+            EXPECT_CONTAINER_SIZE( l, 0 );
+        }
+    };
+
+} // namespace cds_test
+
+#endif // CDSUNIT_LIST_TEST_LIST_NOGC_H
diff --git a/test/unit/list/test_list_rcu.h b/test/unit/list/test_list_rcu.h
new file mode 100644 (file)
index 0000000..cf4b2cb
--- /dev/null
@@ -0,0 +1,150 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef CDSUNIT_LIST_TEST_LIST_RCU_H
+#define CDSUNIT_LIST_TEST_LIST_RCU_H
+
+#include "test_list.h"
+
+namespace cds_test {
+
+    class list_rcu : public list_common
+    {
+    protected:
+        template <typename List>
+        void test_rcu( List& l )
+        {
+            // Precondition: list is empty
+            // Postcondition: list is empty
+
+            static const size_t nSize = 20;
+            typedef typename List::value_type value_type;
+            value_type arr[nSize];
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                arr[i].nKey = static_cast<int>(i);
+                arr[i].nVal = arr[i].nKey * 10;
+            }
+            shuffle( arr, arr + nSize );
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+
+            typedef typename List::exempt_ptr exempt_ptr;
+            typedef typename List::raw_ptr    raw_ptr;
+            typedef typename List::rcu_lock   rcu_lock;
+
+            // get() test
+            for ( auto const& i : arr ) {
+                {
+                    rcu_lock lock;
+                    raw_ptr rp = l.get( i.nKey );
+                    EXPECT_TRUE( !rp );
+                    rp = l.get_with( other_item( i.nKey ), other_less() );
+                    EXPECT_TRUE( !rp );
+                }
+
+                EXPECT_TRUE( l.insert( i ) );
+
+                {
+                    rcu_lock lock;
+                    raw_ptr rp = l.get( i.nKey );
+                    ASSERT_FALSE( !rp );
+                    EXPECT_EQ( rp->nKey, i.nKey );
+                    EXPECT_EQ( rp->nVal, i.nVal );
+                }
+                {
+                    rcu_lock lock;
+                    raw_ptr rp = l.get( i );
+                    ASSERT_FALSE( !rp );
+                    EXPECT_EQ( rp->nKey, i.nKey );
+                    EXPECT_EQ( rp->nVal, i.nVal );
+                }
+                {
+                    rcu_lock lock;
+                    raw_ptr rp = l.get_with( other_item( i.nKey ), other_less());
+                    ASSERT_FALSE( !rp );
+                    EXPECT_EQ( rp->nKey, i.nKey );
+                    EXPECT_EQ( rp->nVal, i.nVal );
+                }
+            }
+
+            ASSERT_FALSE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, nSize );
+
+            // extract()
+
+            exempt_ptr gp;
+            if ( List::c_bExtractLockExternal ) {
+                for ( auto const& i : arr ) {
+                    {
+                        rcu_lock lock;
+                        if ( i.nKey & 1 )
+                            gp = l.extract( i.nKey );
+                        else
+                            gp = l.extract_with( other_item( i.nKey ), other_less());
+
+                        ASSERT_FALSE( !gp );
+                        EXPECT_EQ( gp->nKey, i.nKey );
+                    }
+                    gp.release();
+                    {
+                        rcu_lock lock;
+                        gp = l.extract( i );
+                        EXPECT_TRUE( !gp );
+                        gp = l.extract_with( other_item( i.nKey ), other_less());
+                        EXPECT_TRUE( !gp );
+                    }
+                }
+            }
+            else {
+                for ( auto const& i : arr ) {
+                    if ( i.nKey & 1 )
+                        gp = l.extract( i.nKey );
+                    else
+                        gp = l.extract_with( other_item( i.nKey ), other_less());
+
+                    ASSERT_FALSE( !gp );
+                    EXPECT_EQ( gp->nKey, i.nKey );
+
+                    gp = l.extract( i );
+                    EXPECT_TRUE( !gp );
+                    gp = l.extract_with( other_item( i.nKey ), other_less());
+                    EXPECT_TRUE( !gp );
+                }
+            }
+
+            ASSERT_TRUE( l.empty() );
+            ASSERT_CONTAINER_SIZE( l, 0 );
+        }
+    };
+} // namespace cds_test
+
+#endif // CDSUNIT_LIST_TEST_LIST_RCU_H
diff --git a/test/unit/list/test_michael_rcu.h b/test/unit/list/test_michael_rcu.h
new file mode 100644 (file)
index 0000000..143afc4
--- /dev/null
@@ -0,0 +1,157 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_LIST_TEST_MICHAEL_LIST_RCU_H
+#define CDSUNIT_LIST_TEST_MICHAEL_LIST_RCU_H
+
+#include "test_list_rcu.h"
+#include <cds/container/michael_list_rcu.h>
+
+namespace cc = cds::container;
+
+template <class RCU>
+class MichaelList : public cds_test::list_rcu
+{
+    typedef cds_test::list_rcu base_class;
+public:
+    typedef cds::urcu::gc<RCU> rcu_type;
+
+protected:
+    void SetUp()
+    {
+        RCU::Construct();
+        cds::threading::Manager::attachThread();
+    }
+
+    void TearDown()
+    {
+        cds::threading::Manager::detachThread();
+        RCU::Destruct();
+    }
+};
+
+TYPED_TEST_CASE_P( MichaelList );
+
+TYPED_TEST_P( MichaelList, less_ordered )
+{
+    typedef cc::MichaelList< typename TestFixture::rcu_type, typename TestFixture::item,
+        typename cc::michael_list::make_traits<
+            cds::opt::less< typename TestFixture::template lt< typename TestFixture::item>>
+        >::type
+    > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( MichaelList, compare_ordered )
+{
+    typedef cc::MichaelList< typename TestFixture::rcu_type, typename TestFixture::item,
+        typename cc::michael_list::make_traits<
+            cds::opt::compare< typename TestFixture::template cmp<typename TestFixture::item>>
+        >::type
+    > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( MichaelList, mix_ordered )
+{
+    typedef cc::MichaelList< typename TestFixture::rcu_type, typename TestFixture::item,
+        typename cc::michael_list::make_traits<
+            cds::opt::compare< typename TestFixture::template cmp<typename TestFixture::item>>
+            ,cds::opt::less< typename TestFixture::template lt< typename TestFixture::item>>
+        >::type
+    > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( MichaelList, item_counting )
+{
+    struct traits : public cc::michael_list::traits
+    {
+        typedef typename TestFixture::template lt< typename TestFixture::item> less;
+        typedef cds::atomicity::item_counter item_counter;
+    };
+    typedef cc::MichaelList<typename TestFixture::rcu_type, typename TestFixture::item, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( MichaelList, backoff )
+{
+    struct traits : public cc::michael_list::traits
+    {
+        typedef typename TestFixture::template lt< typename TestFixture::item> less;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::backoff::empty back_off;
+    };
+    typedef cc::MichaelList<typename TestFixture::rcu_type, typename TestFixture::item, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+TYPED_TEST_P( MichaelList, seq_cst )
+{
+    struct traits : public cc::michael_list::traits
+    {
+        typedef typename TestFixture::template lt< typename TestFixture::item> less;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::opt::v::sequential_consistent memory_model;
+    };
+    typedef cc::MichaelList<typename TestFixture::rcu_type, typename TestFixture::item, traits > list_type;
+
+    list_type l;
+    this->test_common( l );
+    this->test_ordered_iterator( l );
+    this->test_rcu( l );
+}
+
+// GCC 5: All test names should be written on single line, otherwise a runtime error will be encountered like as
+// "No test named <test_name> can be found in this test case"
+REGISTER_TYPED_TEST_CASE_P( MichaelList,
+    less_ordered, compare_ordered, mix_ordered, item_counting, backoff, seq_cst
+    );
+
+#endif // CDSUNIT_LIST_TEST_MICHAEL_LIST_RCU_H
diff --git a/test/unit/main.cpp b/test/unit/main.cpp
new file mode 100644 (file)
index 0000000..e690d55
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <gtest/gtest.h>
+#include <cds/init.h>
+
+int main( int argc, char **argv ) \r
+{\r
+    int result;\r
+    cds::Initialize();\r
+    {\r
+        ::testing::InitGoogleTest( &argc, argv );\r
+        result =  RUN_ALL_TESTS();\r
+    }\r
+    cds::Terminate();\r
+    return result;\r
+}
diff --git a/test/unit/map/CMakeLists.txt b/test/unit/map/CMakeLists.txt
new file mode 100644 (file)
index 0000000..d4a4565
--- /dev/null
@@ -0,0 +1,67 @@
+set(PACKAGE_NAME unit-map)
+
+set(CDSGTEST_MAP_SOURCES
+    ../main.cpp
+    feldman_hashmap_hp.cpp
+    feldman_hashmap_dhp.cpp
+    feldman_hashset_rcu_gpb.cpp
+    feldman_hashset_rcu_gpi.cpp
+    feldman_hashset_rcu_gpt.cpp
+    feldman_hashset_rcu_shb.cpp
+    feldman_hashset_rcu_sht.cpp
+    michael_lazy_hp.cpp
+    michael_lazy_dhp.cpp
+    michael_lazy_nogc.cpp
+    michael_lazy_rcu_gpb.cpp
+    michael_lazy_rcu_gpi.cpp
+    michael_lazy_rcu_gpt.cpp
+    michael_lazy_rcu_shb.cpp
+    michael_lazy_rcu_sht.cpp
+    michael_michael_hp.cpp
+    michael_michael_dhp.cpp
+    michael_michael_nogc.cpp
+    michael_michael_rcu_gpb.cpp
+    michael_michael_rcu_gpi.cpp
+    michael_michael_rcu_gpt.cpp
+    michael_michael_rcu_shb.cpp
+    michael_michael_rcu_sht.cpp
+    skiplist_hp.cpp
+    skiplist_dhp.cpp
+    skiplist_nogc.cpp
+    skiplist_rcu_gpb.cpp
+    skiplist_rcu_gpi.cpp
+    skiplist_rcu_gpt.cpp
+    skiplist_rcu_shb.cpp
+    skiplist_rcu_sht.cpp
+    split_lazy_hp.cpp
+    split_lazy_dhp.cpp
+    split_lazy_nogc.cpp
+    split_lazy_rcu_gpb.cpp
+    split_lazy_rcu_gpi.cpp
+    split_lazy_rcu_gpt.cpp
+    split_lazy_rcu_shb.cpp
+    split_lazy_rcu_sht.cpp
+    split_michael_hp.cpp
+    split_michael_dhp.cpp
+    split_michael_nogc.cpp
+    split_michael_rcu_gpb.cpp
+    split_michael_rcu_gpi.cpp
+    split_michael_rcu_gpt.cpp
+    split_michael_rcu_shb.cpp
+    split_michael_rcu_sht.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_executable(${PACKAGE_NAME} ${CDSGTEST_MAP_SOURCES})
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/unit/map/feldman_hashmap_dhp.cpp b/test/unit/map/feldman_hashmap_dhp.cpp
new file mode 100644 (file)
index 0000000..3a97d78
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_feldman_hashmap_hp.h"
+
+#include <cds/container/feldman_hashmap_dhp.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+    class FeldmanHashMap_DHP : public cds_test::feldman_hashmap_hp
+    {
+    protected:
+        typedef cds_test::feldman_hashmap_hp base_class;
+
+        void SetUp()
+        {
+            typedef cc::FeldmanHashMap< gc_type, key_type, value_type > map_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::dhp::GarbageCollector::Construct( 16, map_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( FeldmanHashMap_DHP, defaulted )
+    {
+        typedef cc::FeldmanHashMap< gc_type, key_type, value_type > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( FeldmanHashMap_DHP, compare )
+    {
+        typedef cc::FeldmanHashMap< gc_type, key_type, value_type,
+            typename cc::feldman_hashmap::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > map_type;
+
+        map_type m( 4, 5 );
+        test( m );
+    }
+
+    TEST_F( FeldmanHashMap_DHP, less )
+    {
+        typedef cc::FeldmanHashMap< gc_type, key_type, value_type,
+            typename cc::feldman_hashmap::make_traits<
+                cds::opt::less< less >
+            >::type
+        > map_type;
+
+        map_type m( 3, 2 );
+        test( m );
+    }
+
+    TEST_F( FeldmanHashMap_DHP, cmpmix )
+    {
+        typedef cc::FeldmanHashMap< gc_type, key_type, value_type,
+            typename cc::feldman_hashmap::make_traits<
+                cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+            >::type
+        > map_type;
+
+        map_type m( 4, 4 );
+        test( m );
+    }
+
+    TEST_F( FeldmanHashMap_DHP, backoff )
+    {
+        struct map_traits: public cc::feldman_hashmap::traits
+        {
+            typedef cmp compare;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+        };
+        typedef cc::FeldmanHashMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( 8, 2 );
+        test( m );
+    }
+
+    TEST_F( FeldmanHashMap_DHP, stat )
+    {
+        struct map_traits: public cc::feldman_hashmap::traits
+        {
+            typedef cds::backoff::yield back_off;
+            typedef cc::feldman_hashmap::stat<> stat;
+        };
+        typedef cc::FeldmanHashMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( 1, 1 );
+        test( m );
+    }
+
+} // namespace
diff --git a/test/unit/map/feldman_hashmap_hp.cpp b/test/unit/map/feldman_hashmap_hp.cpp
new file mode 100644 (file)
index 0000000..92766e5
--- /dev/null
@@ -0,0 +1,142 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_feldman_hashmap_hp.h"
+
+#include <cds/container/feldman_hashmap_hp.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+    class FeldmanHashMap_HP : public cds_test::feldman_hashmap_hp
+    {
+    protected:
+        typedef cds_test::feldman_hashmap_hp base_class;
+
+        void SetUp()
+        {
+            typedef cc::FeldmanHashMap< gc_type, key_type, value_type > map_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( map_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( FeldmanHashMap_HP, defaulted )
+    {
+        typedef cc::FeldmanHashMap< gc_type, key_type, value_type > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( FeldmanHashMap_HP, compare )
+    {
+        typedef cc::FeldmanHashMap< gc_type, key_type, value_type,
+            typename cc::feldman_hashmap::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > map_type;
+
+        map_type m( 4, 5 );
+        EXPECT_GE( m.head_size(), 1 << 4 );
+        EXPECT_EQ( m.array_node_size(), 1 << 5 );
+        test( m );
+    }
+
+    TEST_F( FeldmanHashMap_HP, less )
+    {
+        typedef cc::FeldmanHashMap< gc_type, key_type, value_type,
+            typename cc::feldman_hashmap::make_traits<
+                cds::opt::less< less >
+            >::type
+        > map_type;
+
+        map_type m( 3, 2 );
+        EXPECT_GE( m.head_size(), 1 << 4 ); // min = 2 ** 4
+        EXPECT_EQ( m.array_node_size(), 1 << 2 );
+        test( m );
+    }
+
+    TEST_F( FeldmanHashMap_HP, cmpmix )
+    {
+        typedef cc::FeldmanHashMap< gc_type, key_type, value_type,
+            typename cc::feldman_hashmap::make_traits<
+                cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+            >::type
+        > map_type;
+
+        map_type m( 4, 4 );
+        EXPECT_EQ( m.head_size(), 1 << 4 );
+        EXPECT_EQ( m.array_node_size(), 1 << 4 );
+        test( m );
+    }
+
+    TEST_F( FeldmanHashMap_HP, backoff )
+    {
+        struct map_traits: public cc::feldman_hashmap::traits
+        {
+            typedef cmp compare;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+        };
+        typedef cc::FeldmanHashMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( 8, 2 );
+        EXPECT_EQ( m.head_size(), 1 << 8 );
+        EXPECT_EQ( m.array_node_size(), 1 << 2 );
+        test( m );
+    }
+
+    TEST_F( FeldmanHashMap_HP, stat )
+    {
+        struct map_traits: public cc::feldman_hashmap::traits
+        {
+            typedef cds::backoff::yield back_off;
+            typedef cc::feldman_hashmap::stat<> stat;
+        };
+        typedef cc::FeldmanHashMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( 1, 1 );
+        EXPECT_EQ( m.head_size(), 1 << 4 ); // min = 2**4
+        EXPECT_EQ( m.array_node_size(), 1 << 2 ); // min = 2**2
+        test( m );
+    }
+
+} // namespace
diff --git a/test/unit/map/feldman_hashset_rcu_gpb.cpp b/test/unit/map/feldman_hashset_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..e27a5aa
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_feldman_hashmap_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, FeldmanHashMap, rcu_implementation );
diff --git a/test/unit/map/feldman_hashset_rcu_gpi.cpp b/test/unit/map/feldman_hashset_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..1848c7e
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_feldman_hashmap_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, FeldmanHashMap, rcu_implementation );
diff --git a/test/unit/map/feldman_hashset_rcu_gpt.cpp b/test/unit/map/feldman_hashset_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..112abca
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_feldman_hashmap_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, FeldmanHashMap, rcu_implementation );
diff --git a/test/unit/map/feldman_hashset_rcu_shb.cpp b/test/unit/map/feldman_hashset_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..7ebee52
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_feldman_hashmap_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, FeldmanHashMap, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/map/feldman_hashset_rcu_sht.cpp b/test/unit/map/feldman_hashset_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..c670949
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_feldman_hashmap_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, FeldmanHashMap, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/map/michael_lazy_dhp.cpp b/test/unit/map/michael_lazy_dhp.cpp
new file mode 100644 (file)
index 0000000..02b535e
--- /dev/null
@@ -0,0 +1,178 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_map_hp.h"
+
+#include <cds/container/lazy_kvlist_dhp.h>
+#include <cds/container/michael_map.h>
+
+namespace {
+
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+    class MichaelLazyMap_DHP: public cds_test::container_map_hp
+    {
+    protected:
+        typedef cds_test::container_map_hp base_class;
+
+        void SetUp()
+        {
+            typedef cc::LazyKVList< gc_type, key_type, value_type > list_type;
+            typedef cc::MichaelHashMap< gc_type, list_type >   map_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, map_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( MichaelLazyMap_DHP, compare )
+    {
+        typedef cc::LazyKVList< gc_type, key_type, value_type,
+            typename cc::lazy_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashMap< gc_type, list_type, 
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< hash1 >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( MichaelLazyMap_DHP, less )
+    {
+        typedef cc::LazyKVList< gc_type, key_type, value_type,
+            typename cc::lazy_list::make_traits<
+                cds::opt::less< less >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashMap< gc_type, list_type, 
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< hash1 >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 1 );
+        test( m );
+    }
+
+    TEST_F( MichaelLazyMap_DHP, cmpmix )
+    {
+        typedef cc::LazyKVList< gc_type, key_type, value_type,
+            typename cc::lazy_list::make_traits<
+                cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashMap< gc_type, list_type, 
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< hash1 >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( MichaelLazyMap_DHP, backoff )
+    {
+        struct list_traits: public cc::lazy_list::traits
+        {
+            typedef cmp compare;
+            typedef cds::backoff::exponential<cds::backoff::pause, cds::backoff::yield> back_off;
+        };
+        typedef cc::LazyKVList< gc_type, key_type, value_type, list_traits > list_type;
+
+        struct map_traits: public cc::michael_map::traits
+        {
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashMap< gc_type, list_type, map_traits > map_type;
+
+        map_type m( kSize, 4 );
+        test( m );
+    }
+
+    TEST_F( MichaelLazyMap_DHP, seq_cst )
+    {
+        struct list_traits: public cc::lazy_list::traits
+        {
+            typedef cmp compare;
+            typedef cds::backoff::yield back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::LazyKVList< gc_type, key_type, value_type, list_traits > list_type;
+
+        struct map_traits: public cc::michael_map::traits
+        {
+            typedef hash1 hash;
+        };
+        typedef cc::MichaelHashMap< gc_type, list_type, map_traits > map_type;
+
+        map_type m( kSize, 8 );
+        test( m );
+    }
+
+    TEST_F( MichaelLazyMap_DHP, mutex )
+    {
+        struct list_traits: public cc::lazy_list::traits
+        {
+            typedef cmp                 compare;
+            typedef cds::backoff::yield back_off;
+            typedef std::mutex          lock_type;
+        };
+        typedef cc::LazyKVList< gc_type, key_type, value_type, list_traits > list_type;
+
+        struct map_traits: public cc::michael_map::traits
+        {
+            typedef hash1 hash;
+        };
+        typedef cc::MichaelHashMap< gc_type, list_type, map_traits > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+} // namespace
+
diff --git a/test/unit/map/michael_lazy_hp.cpp b/test/unit/map/michael_lazy_hp.cpp
new file mode 100644 (file)
index 0000000..5376a2e
--- /dev/null
@@ -0,0 +1,179 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_map_hp.h"
+
+#include <cds/container/lazy_kvlist_hp.h>
+#include <cds/container/michael_map.h>
+
+namespace {
+
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+    class MichaelLazyMap_HP: public cds_test::container_map_hp
+    {
+    protected:
+        typedef cds_test::container_map_hp base_class;
+
+        void SetUp()
+        {
+            typedef cc::LazyKVList< gc_type, key_type, value_type > list_type;
+            typedef cc::MichaelHashMap< gc_type, list_type >   map_type;
+
+            // +1 - for guarded_ptr and iterator
+            cds::gc::hp::GarbageCollector::Construct( map_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( MichaelLazyMap_HP, compare )
+    {
+        typedef cc::LazyKVList< gc_type, key_type, value_type,
+            typename cc::lazy_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashMap< gc_type, list_type, 
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< hash1 >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( MichaelLazyMap_HP, less )
+    {
+        typedef cc::LazyKVList< gc_type, key_type, value_type,
+            typename cc::lazy_list::make_traits<
+                cds::opt::less< less >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashMap< gc_type, list_type, 
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< hash1 >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 1 );
+        test( m );
+    }
+
+    TEST_F( MichaelLazyMap_HP, cmpmix )
+    {
+        typedef cc::LazyKVList< gc_type, key_type, value_type,
+            typename cc::lazy_list::make_traits<
+                cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashMap< gc_type, list_type, 
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< hash1 >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( MichaelLazyMap_HP, backoff )
+    {
+        struct list_traits: public cc::lazy_list::traits
+        {
+            typedef cmp compare;
+            typedef cds::backoff::exponential<cds::backoff::pause, cds::backoff::yield> back_off;
+        };
+        typedef cc::LazyKVList< gc_type, key_type, value_type, list_traits > list_type;
+
+        struct map_traits: public cc::michael_map::traits
+        {
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashMap< gc_type, list_type, map_traits > map_type;
+
+        map_type m( kSize, 4 );
+        test( m );
+    }
+
+    TEST_F( MichaelLazyMap_HP, seq_cst )
+    {
+        struct list_traits: public cc::lazy_list::traits
+        {
+            typedef cmp compare;
+            typedef cds::backoff::yield back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::LazyKVList< gc_type, key_type, value_type, list_traits > list_type;
+
+        struct map_traits: public cc::michael_map::traits
+        {
+            typedef hash1 hash;
+        };
+        typedef cc::MichaelHashMap< gc_type, list_type, map_traits > map_type;
+
+        map_type m( kSize, 8 );
+        test( m );
+    }
+
+    TEST_F( MichaelLazyMap_HP, mutex )
+    {
+        struct list_traits: public cc::lazy_list::traits
+        {
+            typedef cmp compare;
+            typedef cds::backoff::yield back_off;
+            typedef std::mutex lock_type;
+        };
+        typedef cc::LazyKVList< gc_type, key_type, value_type, list_traits > list_type;
+
+        struct map_traits: public cc::michael_map::traits
+        {
+            typedef hash1 hash;
+        };
+        typedef cc::MichaelHashMap< gc_type, list_type, map_traits > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+} // namespace
+
diff --git a/test/unit/map/michael_lazy_nogc.cpp b/test/unit/map/michael_lazy_nogc.cpp
new file mode 100644 (file)
index 0000000..9ad73c6
--- /dev/null
@@ -0,0 +1,169 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_map_nogc.h"
+
+#include <cds/container/lazy_kvlist_nogc.h>
+#include <cds/container/michael_map_nogc.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::nogc gc_type;
+
+    class MichaelLazyMap_NoGC : public cds_test::container_map_nogc
+    {
+    protected:
+        typedef cds_test::container_map_nogc base_class;
+
+        //void SetUp()
+        //{}
+
+        //void TearDown()
+        //{}
+    };
+
+    TEST_F( MichaelLazyMap_NoGC, compare )
+    {
+        typedef cc::LazyKVList< gc_type, key_type, value_type,
+            typename cc::lazy_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashMap< gc_type, list_type, 
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< hash1 >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( MichaelLazyMap_NoGC, less )
+    {
+        typedef cc::LazyKVList< gc_type, key_type, value_type,
+            typename cc::lazy_list::make_traits<
+                cds::opt::less< base_class::less >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashMap< gc_type, list_type, 
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< hash1 >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( MichaelLazyMap_NoGC, cmpmix )
+    {
+        struct list_traits : public cc::lazy_list::traits
+        {
+            typedef base_class::less less;
+            typedef cmp compare;
+        };
+        typedef cc::LazyKVList< gc_type, key_type, value_type, list_traits > list_type;
+
+        typedef cc::MichaelHashMap< gc_type, list_type, 
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< hash1 >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( MichaelLazyMap_NoGC, backoff )
+    {
+        struct list_traits : public cc::lazy_list::traits
+        {
+            typedef cmp compare;
+            typedef cds::backoff::exponential<cds::backoff::pause, cds::backoff::yield> back_off;
+        };
+        typedef cc::LazyKVList< gc_type, key_type, value_type, list_traits > list_type;
+
+        struct map_traits : public cc::michael_map::traits
+        {
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashMap< gc_type, list_type, map_traits >map_type;
+
+        map_type m( kSize, 4 );
+        test( m );
+    }
+
+    TEST_F( MichaelLazyMap_NoGC, seq_cst )
+    {
+        struct list_traits : public cc::lazy_list::traits
+        {
+            typedef base_class::less less;
+            typedef cds::backoff::pause back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::LazyKVList< gc_type, key_type, value_type, list_traits > list_type;
+
+        struct map_traits : public cc::michael_map::traits
+        {
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashMap< gc_type, list_type, map_traits >map_type;
+
+        map_type m( kSize, 4 );
+        test( m );
+    }
+
+    TEST_F( MichaelLazyMap_NoGC, mutex )
+    {
+        struct list_traits : public cc::lazy_list::traits
+        {
+            typedef base_class::less less;
+            typedef cds::backoff::pause back_off;
+            typedef std::mutex lock_type;
+        };
+        typedef cc::LazyKVList< gc_type, key_type, value_type, list_traits > list_type;
+
+        struct map_traits : public cc::michael_map::traits
+        {
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashMap< gc_type, list_type, map_traits >map_type;
+
+        map_type m( kSize, 4 );
+        test( m );
+    }
+
+} // namespace
diff --git a/test/unit/map/michael_lazy_rcu_gpb.cpp b/test/unit/map/michael_lazy_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..fa22f17
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_michael_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, MichaelLazyMap, rcu_implementation );
diff --git a/test/unit/map/michael_lazy_rcu_gpi.cpp b/test/unit/map/michael_lazy_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..bebd11a
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_michael_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, MichaelLazyMap, rcu_implementation );
diff --git a/test/unit/map/michael_lazy_rcu_gpt.cpp b/test/unit/map/michael_lazy_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..a9d41f5
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_michael_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, MichaelLazyMap, rcu_implementation );
diff --git a/test/unit/map/michael_lazy_rcu_shb.cpp b/test/unit/map/michael_lazy_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..85430bb
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_michael_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, MichaelLazyMap, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/map/michael_lazy_rcu_sht.cpp b/test/unit/map/michael_lazy_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..546e57b
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_michael_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, MichaelLazyMap, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/map/michael_michael_dhp.cpp b/test/unit/map/michael_michael_dhp.cpp
new file mode 100644 (file)
index 0000000..9416235
--- /dev/null
@@ -0,0 +1,158 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_map_hp.h"
+
+#include <cds/container/michael_kvlist_dhp.h>
+#include <cds/container/michael_map.h>
+
+namespace {
+
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+    class MichaelMap_DHP: public cds_test::container_map_hp
+    {
+    protected:
+        typedef cds_test::container_map_hp base_class;
+
+        void SetUp()
+        {
+            typedef cc::MichaelKVList< gc_type, key_type, value_type > list_type;
+            typedef cc::MichaelHashMap< gc_type, list_type >   map_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, map_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( MichaelMap_DHP, compare )
+    {
+        typedef cc::MichaelKVList< gc_type, key_type, value_type,
+            typename cc::michael_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashMap< gc_type, list_type, 
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< hash1 >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( MichaelMap_DHP, less )
+    {
+        typedef cc::MichaelKVList< gc_type, key_type, value_type,
+            typename cc::michael_list::make_traits<
+                cds::opt::less< less >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashMap< gc_type, list_type, 
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< hash1 >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 1 );
+        test( m );
+    }
+
+    TEST_F( MichaelMap_DHP, cmpmix )
+    {
+        typedef cc::MichaelKVList< gc_type, key_type, value_type,
+            typename cc::michael_list::make_traits<
+                cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashMap< gc_type, list_type, 
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< hash1 >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( MichaelMap_DHP, backoff )
+    {
+        struct list_traits: public cc::michael_list::traits
+        {
+            typedef cmp compare;
+            typedef cds::backoff::exponential<cds::backoff::pause, cds::backoff::yield> back_off;
+        };
+        typedef cc::MichaelKVList< gc_type, key_type, value_type, list_traits > list_type;
+
+        struct map_traits: public cc::michael_map::traits
+        {
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashMap< gc_type, list_type, map_traits > map_type;
+
+        map_type m( kSize, 4 );
+        test( m );
+    }
+
+    TEST_F( MichaelMap_DHP, seq_cst )
+    {
+        struct list_traits: public cc::michael_list::traits
+        {
+            typedef cmp compare;
+            typedef cds::backoff::yield back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::MichaelKVList< gc_type, key_type, value_type, list_traits > list_type;
+
+        struct map_traits: public cc::michael_map::traits
+        {
+            typedef hash1 hash;
+        };
+        typedef cc::MichaelHashMap< gc_type, list_type, map_traits > map_type;
+
+        map_type s( kSize, 8 );
+        test( s );
+    }
+
+} // namespace
+
diff --git a/test/unit/map/michael_michael_hp.cpp b/test/unit/map/michael_michael_hp.cpp
new file mode 100644 (file)
index 0000000..b69aa59
--- /dev/null
@@ -0,0 +1,159 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_map_hp.h"
+
+#include <cds/container/michael_kvlist_hp.h>
+#include <cds/container/michael_map.h>
+
+namespace {
+
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+    class MichaelMap_HP: public cds_test::container_map_hp
+    {
+    protected:
+        typedef cds_test::container_map_hp base_class;
+
+        void SetUp()
+        {
+            typedef cc::MichaelKVList< gc_type, key_type, value_type > list_type;
+            typedef cc::MichaelHashMap< gc_type, list_type >   map_type;
+
+            // +1 - for guarded_ptr and iterator
+            cds::gc::hp::GarbageCollector::Construct( map_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( MichaelMap_HP, compare )
+    {
+        typedef cc::MichaelKVList< gc_type, key_type, value_type,
+            typename cc::michael_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashMap< gc_type, list_type, 
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< hash1 >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( MichaelMap_HP, less )
+    {
+        typedef cc::MichaelKVList< gc_type, key_type, value_type,
+            typename cc::michael_list::make_traits<
+                cds::opt::less< less >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashMap< gc_type, list_type, 
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< hash1 >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 1 );
+        test( m );
+    }
+
+    TEST_F( MichaelMap_HP, cmpmix )
+    {
+        typedef cc::MichaelKVList< gc_type, key_type, value_type,
+            typename cc::michael_list::make_traits<
+                cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashMap< gc_type, list_type, 
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< hash1 >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( MichaelMap_HP, backoff )
+    {
+        struct list_traits: public cc::michael_list::traits
+        {
+            typedef cmp compare;
+            typedef cds::backoff::exponential<cds::backoff::pause, cds::backoff::yield> back_off;
+        };
+        typedef cc::MichaelKVList< gc_type, key_type, value_type, list_traits > list_type;
+
+        struct map_traits: public cc::michael_map::traits
+        {
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashMap< gc_type, list_type, map_traits > map_type;
+
+        map_type m( kSize, 4 );
+        test( m );
+    }
+
+    TEST_F( MichaelMap_HP, seq_cst )
+    {
+        struct list_traits: public cc::michael_list::traits
+        {
+            typedef cmp compare;
+            typedef cds::backoff::yield back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::MichaelKVList< gc_type, key_type, value_type, list_traits > list_type;
+
+        struct map_traits: public cc::michael_map::traits
+        {
+            typedef hash1 hash;
+        };
+        typedef cc::MichaelHashMap< gc_type, list_type, map_traits > map_type;
+
+        map_type s( kSize, 8 );
+        test( s );
+    }
+
+} // namespace
+
diff --git a/test/unit/map/michael_michael_nogc.cpp b/test/unit/map/michael_michael_nogc.cpp
new file mode 100644 (file)
index 0000000..b791e43
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_map_nogc.h"
+
+#include <cds/container/michael_kvlist_nogc.h>
+#include <cds/container/michael_map_nogc.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::nogc gc_type;
+
+    class MichaelMap_NoGC : public cds_test::container_map_nogc
+    {
+    protected:
+        typedef cds_test::container_map_nogc base_class;
+
+        //void SetUp()
+        //{}
+
+        //void TearDown()
+        //{}
+    };
+
+    TEST_F( MichaelMap_NoGC, compare )
+    {
+        typedef cc::MichaelKVList< gc_type, key_type, value_type,
+            typename cc::michael_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashMap< gc_type, list_type, 
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< hash1 >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( MichaelMap_NoGC, less )
+    {
+        typedef cc::MichaelKVList< gc_type, key_type, value_type,
+            typename cc::michael_list::make_traits<
+                cds::opt::less< base_class::less >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashMap< gc_type, list_type, 
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< hash1 >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( MichaelMap_NoGC, cmpmix )
+    {
+        struct list_traits : public cc::michael_list::traits
+        {
+            typedef base_class::less less;
+            typedef cmp compare;
+        };
+        typedef cc::MichaelKVList< gc_type, key_type, value_type, list_traits > list_type;
+
+        typedef cc::MichaelHashMap< gc_type, list_type, 
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< hash1 >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( MichaelMap_NoGC, backoff )
+    {
+        struct list_traits : public cc::michael_list::traits
+        {
+            typedef cmp compare;
+            typedef cds::backoff::exponential<cds::backoff::pause, cds::backoff::yield> back_off;
+        };
+        typedef cc::MichaelKVList< gc_type, key_type, value_type, list_traits > list_type;
+
+        struct map_traits : public cc::michael_map::traits
+        {
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashMap< gc_type, list_type, map_traits > map_type;
+
+        map_type m( kSize, 4 );
+        test( m );
+    }
+
+    TEST_F( MichaelMap_NoGC, seq_cst )
+    {
+        struct list_traits : public cc::michael_list::traits
+        {
+            typedef base_class::less less;
+            typedef cds::backoff::pause back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::MichaelKVList< gc_type, key_type, value_type, list_traits > list_type;
+
+        struct map_traits : public cc::michael_map::traits
+        {
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashMap< gc_type, list_type, map_traits > map_type;
+
+        map_type m( kSize, 4 );
+        test( m );
+    }
+
+} // namespace
diff --git a/test/unit/map/michael_michael_rcu_gpb.cpp b/test/unit/map/michael_michael_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..39e68a1
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_michael_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, MichaelMap, rcu_implementation );
diff --git a/test/unit/map/michael_michael_rcu_gpi.cpp b/test/unit/map/michael_michael_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..c5ad3f6
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_michael_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, MichaelMap, rcu_implementation );
diff --git a/test/unit/map/michael_michael_rcu_gpt.cpp b/test/unit/map/michael_michael_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..95896fa
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_michael_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, MichaelMap, rcu_implementation );
diff --git a/test/unit/map/michael_michael_rcu_shb.cpp b/test/unit/map/michael_michael_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..fb5c32a
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_michael_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, MichaelMap, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/map/michael_michael_rcu_sht.cpp b/test/unit/map/michael_michael_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..b998848
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_michael_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, MichaelMap, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/map/skiplist_dhp.cpp b/test/unit/map/skiplist_dhp.cpp
new file mode 100644 (file)
index 0000000..626ed2b
--- /dev/null
@@ -0,0 +1,161 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_skiplist_hp.h"
+
+#include <cds/container/skip_list_map_dhp.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+    class SkipListMap_DHP : public cds_test::skiplist_map_hp
+    {
+    protected:
+        typedef cds_test::skiplist_map_hp base_class;
+
+        void SetUp()
+        {
+            struct map_traits: public cc::skip_list::traits
+            {
+                typedef cmp compare;
+            };
+            typedef cc::SkipListMap< gc_type, key_type, value_type > map_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, map_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( SkipListMap_DHP, compare )
+    {
+        typedef cc::SkipListMap< gc_type, key_type, value_type,
+            typename cc::skip_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( SkipListMap_DHP, less )
+    {
+        typedef cc::SkipListMap< gc_type, key_type, value_type,
+            typename cc::skip_list::make_traits<
+                cds::opt::less< base_class::less >
+            >::type
+        > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( SkipListMap_DHP, cmpmix )
+    {
+        typedef cc::SkipListMap< gc_type, key_type, value_type,
+            typename cc::skip_list::make_traits<
+                cds::opt::less< base_class::less >
+                ,cds::opt::compare< cmp >
+            >::type
+        > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( SkipListMap_DHP, item_counting )
+    {
+        struct map_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::SkipListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( SkipListMap_DHP, backoff )
+    {
+        struct map_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+        };
+        typedef cc::SkipListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( SkipListMap_DHP, stat )
+    {
+        struct map_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cc::skip_list::stat<> stat;
+        };
+        typedef cc::SkipListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( SkipListMap_DHP, random_level_generator )
+    {
+        struct map_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cc::skip_list::stat<> stat;
+            typedef cc::skip_list::xorshift random_level_generator;
+        };
+        typedef cc::SkipListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+} // namespace
diff --git a/test/unit/map/skiplist_hp.cpp b/test/unit/map/skiplist_hp.cpp
new file mode 100644 (file)
index 0000000..3166812
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_skiplist_hp.h"
+
+#include <cds/container/skip_list_map_hp.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+    class SkipListMap_HP : public cds_test::skiplist_map_hp
+    {
+    protected:
+        typedef cds_test::skiplist_map_hp base_class;
+
+        void SetUp()
+        {
+            struct map_traits: public cc::skip_list::traits
+            {
+                typedef cmp compare;
+            };
+            typedef cc::SkipListMap< gc_type, key_type, value_type > map_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( map_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( SkipListMap_HP, compare )
+    {
+        typedef cc::SkipListMap< gc_type, key_type, value_type,
+            typename cc::skip_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( SkipListMap_HP, less )
+    {
+        typedef cc::SkipListMap< gc_type, key_type, value_type,
+            typename cc::skip_list::make_traits<
+                cds::opt::less< base_class::less >
+            >::type
+        > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( SkipListMap_HP, cmpmix )
+    {
+        typedef cc::SkipListMap< gc_type, key_type, value_type,
+            typename cc::skip_list::make_traits<
+                cds::opt::less< base_class::less >
+                ,cds::opt::compare< cmp >
+            >::type
+        > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( SkipListMap_HP, item_counting )
+    {
+        struct map_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::SkipListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( SkipListMap_HP, backoff )
+    {
+        struct map_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+        };
+        typedef cc::SkipListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( SkipListMap_HP, stat )
+    {
+        struct map_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cc::skip_list::stat<> stat;
+        };
+        typedef cc::SkipListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( SkipListMap_HP, random_level_generator )
+    {
+        struct map_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cc::skip_list::stat<> stat;
+            typedef cc::skip_list::xorshift random_level_generator;
+        };
+        typedef cc::SkipListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+} // namespace
diff --git a/test/unit/map/skiplist_nogc.cpp b/test/unit/map/skiplist_nogc.cpp
new file mode 100644 (file)
index 0000000..a2f7957
--- /dev/null
@@ -0,0 +1,196 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_map_nogc.h"
+
+#include <cds/container/skip_list_map_nogc.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::nogc gc_type;
+
+    class SkipListMap_NoGC : public cds_test::container_map_nogc
+    {
+    protected:
+        typedef cds_test::container_map_nogc base_class;
+
+        template <typename Map>
+        void test( Map& m )
+        {
+            // Precondition: map is empty
+            // Postcondition: map is empty
+
+            base_class::test( m );
+
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            typedef typename Map::value_type map_pair;
+            size_t const kkSize = base_class::kSize;
+
+            // get_min
+            for ( int i = static_cast<int>( kkSize ); i > 0; --i ) {
+                ASSERT_TRUE( m.insert( i ) != m.end());
+
+                map_pair * p = m.get_min();
+                ASSERT_TRUE( p != nullptr );
+                EXPECT_EQ( p->first.nKey, i );
+
+                p = m.get_max();
+                ASSERT_TRUE( p != nullptr );
+                EXPECT_EQ( p->first.nKey, kkSize );
+            }
+
+            m.clear();
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            // get_max
+            for ( int i = 0; i < static_cast<int>( kkSize ); ++i ) {
+                ASSERT_TRUE( m.insert( i ) != m.end());
+
+                map_pair * p = m.get_max();
+                ASSERT_TRUE( p != nullptr );
+                EXPECT_EQ( p->first.nKey, i );
+
+                p = m.get_min();
+                ASSERT_TRUE( p != nullptr );
+                EXPECT_EQ( p->first.nKey, 0 );
+            }
+
+            m.clear();
+        }
+
+        //void SetUp()
+        //{}
+
+        //void TearDown()
+        //{}
+    };
+
+    TEST_F( SkipListMap_NoGC, compare )
+    {
+        typedef cc::SkipListMap< gc_type, key_type, value_type,
+            typename cc::skip_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( SkipListMap_NoGC, less )
+    {
+        typedef cc::SkipListMap< gc_type, key_type, value_type,
+            typename cc::skip_list::make_traits<
+                cds::opt::less< base_class::less >
+            >::type
+        > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( SkipListMap_NoGC, cmpmix )
+    {
+        typedef cc::SkipListMap< gc_type, key_type, value_type,
+            typename cc::skip_list::make_traits<
+                cds::opt::less< base_class::less >
+                ,cds::opt::compare< cmp >
+            >::type
+        > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( SkipListMap_NoGC, item_counting )
+    {
+        struct map_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::SkipListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( SkipListMap_NoGC, backoff )
+    {
+        struct map_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+        };
+        typedef cc::SkipListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( SkipListMap_NoGC, stat )
+    {
+        struct map_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cc::skip_list::stat<> stat;
+        };
+        typedef cc::SkipListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( SkipListMap_NoGC, random_level_generator )
+    {
+        struct map_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cc::skip_list::stat<> stat;
+            typedef cc::skip_list::xorshift random_level_generator;
+        };
+        typedef cc::SkipListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+} // namespace
diff --git a/test/unit/map/skiplist_rcu_gpb.cpp b/test/unit/map/skiplist_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..cfb4fa5
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_skiplist_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, SkipListMap, rcu_implementation );
diff --git a/test/unit/map/skiplist_rcu_gpi.cpp b/test/unit/map/skiplist_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..deacc8d
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_skiplist_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, SkipListMap, rcu_implementation );
diff --git a/test/unit/map/skiplist_rcu_gpt.cpp b/test/unit/map/skiplist_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..b9220d3
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_skiplist_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, SkipListMap, rcu_implementation );
diff --git a/test/unit/map/skiplist_rcu_shb.cpp b/test/unit/map/skiplist_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..b214dc3
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_skiplist_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, SkipListMap, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/map/skiplist_rcu_sht.cpp b/test/unit/map/skiplist_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..f1bccdc
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_skiplist_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, SkipListMap, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/map/split_lazy_dhp.cpp b/test/unit/map/split_lazy_dhp.cpp
new file mode 100644 (file)
index 0000000..70a3124
--- /dev/null
@@ -0,0 +1,235 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_map_hp.h"
+
+#include <cds/container/lazy_list_dhp.h>
+#include <cds/container/split_list_map.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+    class SplitListLazyMap_DHP : public cds_test::container_map_hp
+    {
+    protected:
+        typedef cds_test::container_map_hp base_class;
+
+        void SetUp()
+        {
+            struct map_traits: public cc::split_list::traits {
+                typedef cc::lazy_list_tag ordered_list;
+                typedef hash1 hash;
+                struct ordered_list_traits: public cc::lazy_list::traits
+                {
+                    typedef cmp compare;
+                };
+            };
+            typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, map_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( SplitListLazyMap_DHP, compare )
+    {
+        typedef cc::SplitListMap< gc_type, key_type, value_type, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::lazy_list_tag >
+                , cds::opt::hash< hash1 >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::lazy_list::make_traits<
+                        cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( SplitListLazyMap_DHP, less )
+    {
+        typedef cc::SplitListMap< gc_type, key_type, value_type, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::lazy_list_tag >
+                , cds::opt::hash< hash1 >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::lazy_list::make_traits<
+                        cds::opt::less< less >
+                    >::type
+                >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 1 );
+        test( m );
+    }
+
+    TEST_F( SplitListLazyMap_DHP, cmpmix )
+    {
+        typedef cc::SplitListMap< gc_type, key_type, value_type, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::lazy_list_tag >
+                , cds::opt::hash< hash1 >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::lazy_list::make_traits<
+                        cds::opt::less< less >
+                        , cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( SplitListLazyMap_DHP, item_counting )
+    {
+        struct map_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef base_class::less less;
+                typedef cds::backoff::empty back_off;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 4 );
+        test( m );
+    }
+
+    TEST_F( SplitListLazyMap_DHP, stat )
+    {
+        struct map_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cc::split_list::stat<> stat;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef base_class::less less;
+                typedef cds::opt::v::sequential_consistent memory_model;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( SplitListLazyMap_DHP, back_off )
+    {
+        struct map_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::empty back_off;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 3 );
+        test( m );
+    }
+
+    TEST_F( SplitListLazyMap_DHP, mutex )
+    {
+        struct map_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+                typedef std::mutex lock_type;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    struct set_static_traits: public cc::split_list::traits
+    {
+        static bool const dynamic_bucket_table = false;
+    };
+
+    TEST_F( SplitListLazyMap_DHP, static_bucket_table )
+    {
+        struct map_traits: public set_static_traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 4 );
+        test( m );
+    }
+
+} // namespace
diff --git a/test/unit/map/split_lazy_hp.cpp b/test/unit/map/split_lazy_hp.cpp
new file mode 100644 (file)
index 0000000..dc76e66
--- /dev/null
@@ -0,0 +1,236 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_map_hp.h"
+
+#include <cds/container/lazy_list_hp.h>
+#include <cds/container/split_list_map.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+    class SplitListLazyMap_HP : public cds_test::container_map_hp
+    {
+    protected:
+        typedef cds_test::container_map_hp base_class;
+
+        void SetUp()
+        {
+            struct map_traits: public cc::split_list::traits {
+                typedef cc::lazy_list_tag ordered_list;
+                typedef hash1 hash;
+                struct ordered_list_traits: public cc::lazy_list::traits
+                {
+                    typedef cmp compare;
+                };
+            };
+            typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits >   map_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( map_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( SplitListLazyMap_HP, compare )
+    {
+        typedef cc::SplitListMap< gc_type, key_type, value_type, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::lazy_list_tag >
+                , cds::opt::hash< hash1 >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::lazy_list::make_traits<
+                        cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( SplitListLazyMap_HP, less )
+    {
+        typedef cc::SplitListMap< gc_type, key_type, value_type, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::lazy_list_tag >
+                , cds::opt::hash< hash1 >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::lazy_list::make_traits<
+                        cds::opt::less< less >
+                    >::type
+                >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( SplitListLazyMap_HP, cmpmix )
+    {
+        typedef cc::SplitListMap< gc_type, key_type, value_type, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::lazy_list_tag >
+                , cds::opt::hash< hash1 >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::lazy_list::make_traits<
+                        cds::opt::less< less >
+                        , cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 3 );
+        test( m );
+    }
+
+    TEST_F( SplitListLazyMap_HP, item_counting )
+    {
+        struct map_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef base_class::less less;
+                typedef cds::backoff::empty back_off;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 4 );
+        test( m );
+    }
+
+    TEST_F( SplitListLazyMap_HP, stat )
+    {
+        struct map_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cc::split_list::stat<> stat;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef base_class::less less;
+                typedef cds::opt::v::sequential_consistent memory_model;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( SplitListLazyMap_HP, back_off )
+    {
+        struct map_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::empty back_off;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 4 );
+        test( m );
+    }
+
+    TEST_F( SplitListLazyMap_HP, mutex )
+    {
+        struct map_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+                typedef std::mutex lock_type;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    struct set_static_traits: public cc::split_list::traits
+    {
+        static bool const dynamic_bucket_table = false;
+    };
+
+    TEST_F( SplitListLazyMap_HP, static_bucket_table )
+    {
+        struct map_traits: public set_static_traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 4 );
+        test( m );
+    }
+
+} // namespace
diff --git a/test/unit/map/split_lazy_nogc.cpp b/test/unit/map/split_lazy_nogc.cpp
new file mode 100644 (file)
index 0000000..a8b8998
--- /dev/null
@@ -0,0 +1,220 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_map_nogc.h"
+
+#include <cds/container/lazy_list_nogc.h>
+#include <cds/container/split_list_map_nogc.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::nogc gc_type;
+
+    class SplitListLazyMap_NoGC : public cds_test::container_map_nogc
+    {
+    protected:
+        typedef cds_test::container_map_nogc base_class;
+
+        //void SetUp()
+        //{}
+
+        //void TearDown()
+        //{}
+    };
+
+    TEST_F( SplitListLazyMap_NoGC, compare )
+    {
+        typedef cc::SplitListMap< gc_type, key_type, value_type, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::lazy_list_tag >
+                , cds::opt::hash< hash1 >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::lazy_list::make_traits<
+                        cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( SplitListLazyMap_NoGC, less )
+    {
+        typedef cc::SplitListMap< gc_type, key_type, value_type, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::lazy_list_tag >
+                , cds::opt::hash< hash1 >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::lazy_list::make_traits<
+                        cds::opt::less< less >
+                    >::type
+                >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( SplitListLazyMap_NoGC, cmpmix )
+    {
+        typedef cc::SplitListMap< gc_type, key_type, value_type, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::lazy_list_tag >
+                , cds::opt::hash< hash1 >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::lazy_list::make_traits<
+                        cds::opt::less< less >
+                        , cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 1 );
+        test( m );
+    }
+
+    TEST_F( SplitListLazyMap_NoGC, item_counting )
+    {
+        struct map_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef base_class::less less;
+                typedef cds::backoff::empty back_off;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 3 );
+        test( m );
+    }
+
+    TEST_F( SplitListLazyMap_NoGC, stat )
+    {
+        struct map_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cc::split_list::stat<> stat;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef base_class::less less;
+                typedef cds::opt::v::sequential_consistent memory_model;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 4 );
+        test( m );
+    }
+
+    TEST_F( SplitListLazyMap_NoGC, back_off )
+    {
+        struct map_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::empty back_off;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( SplitListLazyMap_NoGC, mutex )
+    {
+        struct map_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+                typedef std::mutex lock_type;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 3 );
+        test( m );
+    }
+
+    struct set_static_traits: public cc::split_list::traits
+    {
+        static bool const dynamic_bucket_table = false;
+    };
+
+    TEST_F( SplitListLazyMap_NoGC, static_bucket_table )
+    {
+        struct map_traits: public set_static_traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 4 );
+        test( m );
+    }
+
+
+} // namespace
diff --git a/test/unit/map/split_lazy_rcu_gpb.cpp b/test/unit/map/split_lazy_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..6b9f0be
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_split_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, SplitListLazyMap, rcu_implementation );
diff --git a/test/unit/map/split_lazy_rcu_gpi.cpp b/test/unit/map/split_lazy_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..38238e8
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_split_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, SplitListLazyMap, rcu_implementation );
diff --git a/test/unit/map/split_lazy_rcu_gpt.cpp b/test/unit/map/split_lazy_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..3df469d
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_split_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, SplitListLazyMap, rcu_implementation );
diff --git a/test/unit/map/split_lazy_rcu_shb.cpp b/test/unit/map/split_lazy_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..1868c57
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_split_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, SplitListLazyMap, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/map/split_lazy_rcu_sht.cpp b/test/unit/map/split_lazy_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..5fba163
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_split_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, SplitListLazyMap, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/map/split_michael_dhp.cpp b/test/unit/map/split_michael_dhp.cpp
new file mode 100644 (file)
index 0000000..7627d2c
--- /dev/null
@@ -0,0 +1,213 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_map_hp.h"
+
+#include <cds/container/michael_list_dhp.h>
+#include <cds/container/split_list_map.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+    class SplitListMichaelMap_DHP : public cds_test::container_map_hp
+    {
+    protected:
+        typedef cds_test::container_map_hp base_class;
+
+        void SetUp()
+        {
+            struct map_traits: public cc::split_list::traits {
+                typedef cc::michael_list_tag ordered_list;
+                typedef hash1 hash;
+                struct ordered_list_traits: public cc::michael_list::traits
+                {
+                    typedef cmp compare;
+                };
+            };
+            typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits >   map_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::dhp::GarbageCollector::Construct( 16, map_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( SplitListMichaelMap_DHP, compare )
+    {
+        typedef cc::SplitListMap< gc_type, key_type, value_type, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::michael_list_tag >
+                , cds::opt::hash< hash1 >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::michael_list::make_traits<
+                        cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( SplitListMichaelMap_DHP, less )
+    {
+        typedef cc::SplitListMap< gc_type, key_type, value_type, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::michael_list_tag >
+                , cds::opt::hash< hash1 >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::michael_list::make_traits<
+                        cds::opt::less< less >
+                    >::type
+                >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( SplitListMichaelMap_DHP, cmpmix )
+    {
+        typedef cc::SplitListMap< gc_type, key_type, value_type, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::michael_list_tag >
+                , cds::opt::hash< hash1 >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::michael_list::make_traits<
+                        cds::opt::less< less >
+                        , cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( SplitListMichaelMap_DHP, item_counting )
+    {
+        struct map_traits: public cc::split_list::traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef cmp compare;
+                typedef base_class::less less;
+                typedef cds::backoff::empty back_off;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 4 );
+        test( m );
+    }
+
+    TEST_F( SplitListMichaelMap_DHP, stat )
+    {
+        struct map_traits: public cc::split_list::traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cc::split_list::stat<> stat;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef base_class::less less;
+                typedef cds::opt::v::sequential_consistent memory_model;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( SplitListMichaelMap_DHP, back_off )
+    {
+        struct map_traits: public cc::split_list::traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 3 );
+        test( m );
+    }
+
+    struct set_static_traits: public cc::split_list::traits
+    {
+        static bool const dynamic_bucket_table = false;
+    };
+
+    TEST_F( SplitListMichaelMap_DHP, static_bucket_table )
+    {
+        struct map_traits: public set_static_traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 4 );
+        test( m );
+    }
+
+} // namespace
diff --git a/test/unit/map/split_michael_hp.cpp b/test/unit/map/split_michael_hp.cpp
new file mode 100644 (file)
index 0000000..16adc93
--- /dev/null
@@ -0,0 +1,213 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_map_hp.h"
+
+#include <cds/container/michael_list_hp.h>
+#include <cds/container/split_list_map.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+    class SplitListMichaelMap_HP : public cds_test::container_map_hp
+    {
+    protected:
+        typedef cds_test::container_map_hp base_class;
+
+        void SetUp()
+        {
+            struct map_traits: public cc::split_list::traits {
+                typedef cc::michael_list_tag ordered_list;
+                typedef hash1 hash;
+                struct ordered_list_traits: public cc::michael_list::traits
+                {
+                    typedef cmp compare;
+                };
+            };
+            typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits >   map_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( map_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( SplitListMichaelMap_HP, compare )
+    {
+        typedef cc::SplitListMap< gc_type, key_type, value_type, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::michael_list_tag >
+                , cds::opt::hash< hash1 >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::michael_list::make_traits<
+                        cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( SplitListMichaelMap_HP, less )
+    {
+        typedef cc::SplitListMap< gc_type, key_type, value_type, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::michael_list_tag >
+                , cds::opt::hash< hash1 >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::michael_list::make_traits<
+                        cds::opt::less< less >
+                    >::type
+                >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( SplitListMichaelMap_HP, cmpmix )
+    {
+        typedef cc::SplitListMap< gc_type, key_type, value_type, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::michael_list_tag >
+                , cds::opt::hash< hash1 >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::michael_list::make_traits<
+                        cds::opt::less< less >
+                        , cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( SplitListMichaelMap_HP, item_counting )
+    {
+        struct map_traits: public cc::split_list::traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef cmp compare;
+                typedef base_class::less less;
+                typedef cds::backoff::empty back_off;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 4 );
+        test( m );
+    }
+
+    TEST_F( SplitListMichaelMap_HP, stat )
+    {
+        struct map_traits: public cc::split_list::traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cc::split_list::stat<> stat;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef base_class::less less;
+                typedef cds::opt::v::sequential_consistent memory_model;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( SplitListMichaelMap_HP, back_off )
+    {
+        struct map_traits: public cc::split_list::traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 3 );
+        test( m );
+    }
+
+    struct set_static_traits: public cc::split_list::traits
+    {
+        static bool const dynamic_bucket_table = false;
+    };
+
+    TEST_F( SplitListMichaelMap_HP, static_bucket_table )
+    {
+        struct map_traits: public set_static_traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 4 );
+        test( m );
+    }
+
+} // namespace
diff --git a/test/unit/map/split_michael_nogc.cpp b/test/unit/map/split_michael_nogc.cpp
new file mode 100644 (file)
index 0000000..dfe9fc9
--- /dev/null
@@ -0,0 +1,197 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_map_nogc.h"
+
+#include <cds/container/michael_list_nogc.h>
+#include <cds/container/split_list_map_nogc.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::nogc gc_type;
+
+    class SplitListMichaelMap_NoGC : public cds_test::container_map_nogc
+    {
+    protected:
+        typedef cds_test::container_map_nogc base_class;
+
+        //void SetUp()
+        //{}
+
+        //void TearDown()
+        //{}
+    };
+
+    TEST_F( SplitListMichaelMap_NoGC, compare )
+    {
+        typedef cc::SplitListMap< gc_type, key_type, value_type, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::michael_list_tag >
+                , cds::opt::hash< hash1 >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::michael_list::make_traits<
+                        cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( SplitListMichaelMap_NoGC, less )
+    {
+        typedef cc::SplitListMap< gc_type, key_type, value_type, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::michael_list_tag >
+                , cds::opt::hash< hash1 >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::michael_list::make_traits<
+                        cds::opt::less< less >
+                    >::type
+                >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    TEST_F( SplitListMichaelMap_NoGC, cmpmix )
+    {
+        typedef cc::SplitListMap< gc_type, key_type, value_type, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::michael_list_tag >
+                , cds::opt::hash< hash1 >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::michael_list::make_traits<
+                        cds::opt::less< less >
+                        , cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > map_type;
+
+        map_type m( kSize, 3 );
+        test( m );
+    }
+
+    TEST_F( SplitListMichaelMap_NoGC, item_counting )
+    {
+        struct map_traits: public cc::split_list::traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef cmp compare;
+                typedef base_class::less less;
+                typedef cds::backoff::empty back_off;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 4 );
+        test( m );
+    }
+
+    TEST_F( SplitListMichaelMap_NoGC, stat )
+    {
+        struct map_traits: public cc::split_list::traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cc::split_list::stat<> stat;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef base_class::less less;
+                typedef cds::opt::v::sequential_consistent memory_model;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 5 );
+        test( m );
+    }
+
+    TEST_F( SplitListMichaelMap_NoGC, back_off )
+    {
+        struct map_traits: public cc::split_list::traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 2 );
+        test( m );
+    }
+
+    struct set_static_traits: public cc::split_list::traits
+    {
+        static bool const dynamic_bucket_table = false;
+    };
+
+    TEST_F( SplitListMichaelMap_NoGC, static_bucket_table )
+    {
+        struct map_traits: public set_static_traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+            };
+        };
+        typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( kSize, 4 );
+        test( m );
+    }
+
+
+} // namespace
diff --git a/test/unit/map/split_michael_rcu_gpb.cpp b/test/unit/map/split_michael_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..b4db11c
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_split_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, SplitListMichaelMap, rcu_implementation );
diff --git a/test/unit/map/split_michael_rcu_gpi.cpp b/test/unit/map/split_michael_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..ee44fdf
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_split_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, SplitListMichaelMap, rcu_implementation );
diff --git a/test/unit/map/split_michael_rcu_gpt.cpp b/test/unit/map/split_michael_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..0000149
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_split_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, SplitListMichaelMap, rcu_implementation );
diff --git a/test/unit/map/split_michael_rcu_shb.cpp b/test/unit/map/split_michael_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..2c1ff10
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_split_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, SplitListMichaelMap, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/map/split_michael_rcu_sht.cpp b/test/unit/map/split_michael_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..97d925b
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_split_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, SplitListMichaelMap, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/map/test_feldman_hashmap.h b/test/unit/map/test_feldman_hashmap.h
new file mode 100644 (file)
index 0000000..47703c6
--- /dev/null
@@ -0,0 +1,369 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_MAP_TEST_FELDMAN_HASHMAP_H
+#define CDSUNIT_MAP_TEST_FELDMAN_HASHMAP_H
+
+#include "test_map_data.h"
+
+// forward declaration
+namespace cds { namespace container {}}
+namespace co = cds::opt;
+namespace cc = cds::container;
+
+namespace cds_test {
+
+    class feldman_hashmap : public map_fixture
+    {
+    public:
+        static size_t const kSize = 1000;
+
+    protected:
+        template <typename Map>
+        void test( Map& m )
+        {
+            // Precondition: map is empty
+            // Postcondition: map is empty
+
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            typedef typename Map::value_type map_pair;
+            size_t const kkSize = kSize;
+
+            std::vector<key_type> arrKeys;
+            for ( int i = 0; i < static_cast<int>(kkSize); ++i )
+                arrKeys.push_back( key_type( i ) );
+            shuffle( arrKeys.begin(), arrKeys.end() );
+
+            std::vector< value_type > arrVals;
+            for ( size_t i = 0; i < kkSize; ++i ) {
+                value_type val;
+                val.nVal = static_cast<int>(i);
+                val.strVal = std::to_string( i );
+                arrVals.push_back( val );
+            }
+
+            // insert/find
+            for ( auto const& i : arrKeys ) {
+                value_type const& val( arrVals.at( i.nKey ) );
+
+                ASSERT_FALSE( m.contains( i.nKey ) );
+                ASSERT_FALSE( m.contains( i ) );
+                ASSERT_FALSE( m.find( i, []( map_pair const& ) {
+                    ASSERT_TRUE( false );
+                } ) );
+                ASSERT_FALSE( m.find( i.nKey, []( map_pair const& ) {
+                    EXPECT_TRUE( false );
+                } ) );
+
+                std::pair< bool, bool > updResult;
+
+                switch ( i.nKey % 16 ) {
+                case 0:
+                    ASSERT_TRUE( m.insert( i ) );
+                    ASSERT_FALSE( m.insert( i ) );
+                    ASSERT_TRUE( m.find( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ) );
+                    break;
+                case 1:
+                    ASSERT_TRUE( m.insert( i.nKey ) );
+                    ASSERT_FALSE( m.insert( i.nKey ) );
+                    ASSERT_TRUE( m.find( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ) );
+                    break;
+                case 2:
+                    ASSERT_TRUE( m.insert( std::to_string( i.nKey ) ) );
+                    ASSERT_FALSE( m.insert( std::to_string( i.nKey ) ) );
+                    ASSERT_TRUE( m.find( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ) );
+                    break;
+                case 3:
+                    ASSERT_TRUE( m.insert( i, val ) );
+                    ASSERT_FALSE( m.insert( i, val ) );
+                    break;
+                case 4:
+                    ASSERT_TRUE( m.insert( i.nKey, val.strVal ) );
+                    ASSERT_FALSE( m.insert( i.nKey, val.strVal ) );
+                    break;
+                case 5:
+                    ASSERT_TRUE( m.insert( val.strVal, i.nKey ) );
+                    ASSERT_FALSE( m.insert( val.strVal, i.nKey ) );
+                    break;
+                case 6:
+                    ASSERT_TRUE( m.insert_with( i, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ) );
+                    ASSERT_FALSE( m.insert_with( i, []( map_pair& v ) {
+                        EXPECT_TRUE( false );
+                    } ) );
+                    break;
+                case 7:
+                    ASSERT_TRUE( m.insert_with( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ) );
+                    ASSERT_FALSE( m.insert_with( i.nKey, []( map_pair& v ) {
+                        EXPECT_TRUE( false );
+                    } ) );
+                    break;
+                case 8:
+                    ASSERT_TRUE( m.insert_with( val.strVal, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ) );
+                    ASSERT_FALSE( m.insert_with( val.strVal, []( map_pair& v ) {
+                        EXPECT_TRUE( false );
+                    } ) );
+                    break;
+                case 9:
+                    updResult = m.update( i.nKey, []( map_pair&, map_pair* ) {
+                        EXPECT_TRUE( false );
+                    }, false );
+                    ASSERT_FALSE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( i.nKey, []( map_pair& v, map_pair* old ) {
+                        EXPECT_TRUE( old == nullptr );
+                        v.second.nVal = v.first.nKey;
+                    } );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_TRUE( updResult.second );
+
+                    updResult = m.update( i.nKey, []( map_pair& v, map_pair* old ) {
+                        ASSERT_FALSE( old == nullptr );
+                        EXPECT_EQ( v.first.nKey, old->second.nVal );
+                        v.second.nVal = old->second.nVal;
+                        v.second.strVal = std::to_string( v.second.nVal );
+                    } );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+                    break;
+                case 10:
+                    updResult = m.update( i, []( map_pair&, map_pair* ) {
+                        EXPECT_TRUE( false );
+                    }, false );
+                    ASSERT_FALSE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( i, []( map_pair& v, map_pair* old ) {
+                        EXPECT_TRUE( old == nullptr );
+                        v.second.nVal = v.first.nKey;
+                    } );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_TRUE( updResult.second );
+
+                    updResult = m.update( i, []( map_pair& v, map_pair* old ) {
+                        ASSERT_FALSE( old == nullptr );
+                        EXPECT_EQ( v.first.nKey, old->second.nVal );
+                        v.second.nVal = old->second.nVal;
+                        v.second.strVal = std::to_string( v.second.nVal );
+                    } );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+                    break;
+                case 11:
+                    updResult = m.update( val.strVal, []( map_pair&, map_pair* ) {
+                        EXPECT_TRUE( false );
+                    }, false );
+                    ASSERT_FALSE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( val.strVal, []( map_pair& v, map_pair* old ) {
+                        EXPECT_TRUE( old == nullptr );
+                        v.second.nVal = v.first.nKey;
+                    } );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_TRUE( updResult.second );
+
+                    updResult = m.update( val.strVal, []( map_pair& v, map_pair* old ) {
+                        ASSERT_FALSE( old == nullptr );
+                        EXPECT_EQ( v.first.nKey, old->second.nVal );
+                        v.second.nVal = old->second.nVal;
+                        v.second.strVal = std::to_string( v.second.nVal );
+                    } );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+                    break;
+                case 12:
+                    ASSERT_TRUE( m.emplace( i.nKey ) );
+                    ASSERT_FALSE( m.emplace( i.nKey ) );
+                    ASSERT_TRUE( m.find( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ) );
+                    break;
+                case 13:
+                    ASSERT_TRUE( m.emplace( i, i.nKey ) );
+                    ASSERT_FALSE( m.emplace( i, i.nKey ) );
+                    break;
+                case 14:
+                {
+                    std::string str = val.strVal;
+                    ASSERT_TRUE( m.emplace( i, std::move( str ) ) );
+                    ASSERT_TRUE( str.empty() );
+                    str = val.strVal;
+                    ASSERT_FALSE( m.emplace( i, std::move( str ) ) );
+                    ASSERT_TRUE( str.empty() );
+                }
+                break;
+                case 15:
+                {
+                    std::string str = val.strVal;
+                    ASSERT_TRUE( m.emplace( i, i.nKey, std::move( str ) ) );
+                    ASSERT_TRUE( str.empty() );
+                    str = val.strVal;
+                    ASSERT_FALSE( m.emplace( i, i.nKey, std::move( str ) ) );
+                    ASSERT_TRUE( str.empty() );
+                }
+                break;
+                }
+
+                ASSERT_TRUE( m.contains( i.nKey ) );
+                ASSERT_TRUE( m.contains( i ) );
+                ASSERT_TRUE( m.find( i, []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ) );
+                ASSERT_TRUE( m.find( i.nKey, []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ) );
+            }
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+            ASSERT_FALSE( m.begin() == m.end() );
+            ASSERT_FALSE( m.cbegin() == m.cend() );
+
+            shuffle( arrKeys.begin(), arrKeys.end() );
+
+            {
+                std::vector< typename Map::level_statistics > vect;
+                m.get_level_statistics( vect );
+            }
+
+            // erase/find
+            for ( auto const& i : arrKeys ) {
+                value_type const& val( arrVals.at( i.nKey ) );
+
+                ASSERT_TRUE( m.contains( i.nKey ) );
+                ASSERT_TRUE( m.contains( val.strVal ) );
+                ASSERT_TRUE( m.contains( i ) );
+                ASSERT_TRUE( m.find( i, []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ) );
+                ASSERT_TRUE( m.find( i.nKey, []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ) );
+
+                switch ( i.nKey % 6 ) {
+                case 0:
+                    ASSERT_TRUE( m.erase( i ) );
+                    ASSERT_FALSE( m.erase( i ) );
+                    break;
+                case 1:
+                    ASSERT_TRUE( m.erase( i.nKey ) );
+                    ASSERT_FALSE( m.erase( i.nKey ) );
+                    break;
+                case 2:
+                    ASSERT_TRUE( m.erase( val.strVal ) );
+                    ASSERT_FALSE( m.erase( val.strVal ) );
+                    break;
+                case 3:
+                    ASSERT_TRUE( m.erase( i, []( map_pair& v ) {
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                    } ) );
+                    ASSERT_FALSE( m.erase( i, []( map_pair& ) {
+                        EXPECT_TRUE( false );
+                    } ) );
+                    break;
+                case 4:
+                    ASSERT_TRUE( m.erase( i.nKey, []( map_pair& v ) {
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                    } ) );
+                    ASSERT_FALSE( m.erase( i.nKey, []( map_pair& ) {
+                        EXPECT_TRUE( false );
+                    } ) );
+                    break;
+                case 5:
+                    ASSERT_TRUE( m.erase( val.strVal, []( map_pair& v ) {
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                    } ) );
+                    ASSERT_FALSE( m.erase( val.strVal, []( map_pair& ) {
+                        EXPECT_TRUE( false );
+                    } ) );
+                    break;
+                }
+
+                ASSERT_FALSE( m.contains( i.nKey ) );
+                ASSERT_FALSE( m.contains( i ) );
+                ASSERT_FALSE( m.contains( val.strVal ) );
+                ASSERT_FALSE( m.find( i, []( map_pair const& ) {
+                    ASSERT_TRUE( false );
+                } ) );
+                ASSERT_FALSE( m.find( i.nKey, []( map_pair const& ) {
+                    EXPECT_TRUE( false );
+                } ) );
+            }
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            ASSERT_TRUE( m.begin() == m.end() );
+            ASSERT_TRUE( m.cbegin() == m.cend() );
+
+            // clear
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i ) );
+
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            m.clear();
+
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+        }
+    };
+
+} // namespace cds_test
+
+#endif // CDSUNIT_MAP_TEST_FELDMAN_HASHMAP_H
diff --git a/test/unit/map/test_feldman_hashmap_hp.h b/test/unit/map/test_feldman_hashmap_hp.h
new file mode 100644 (file)
index 0000000..004f30a
--- /dev/null
@@ -0,0 +1,213 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_MAP_TEST_FELDMAN_HASHMAP_HP_H
+#define CDSUNIT_MAP_TEST_FELDMAN_HASHMAP_HP_H
+
+#include "test_feldman_hashmap.h"
+
+namespace cds_test {
+
+    class feldman_hashmap_hp: public feldman_hashmap
+    {
+        typedef feldman_hashmap base_class;
+
+    protected:
+        template <class Map>
+        void test( Map& m )
+        {
+            // Precondition: map is empty
+            // Postcondition: map is empty
+
+            base_class::test( m );
+
+            ASSERT_TRUE( m.empty());
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            typedef typename Map::value_type map_pair;
+            size_t const kkSize = base_class::kSize;
+
+            std::vector<key_type> arrKeys;
+            for ( int i = 0; i < static_cast<int>(kkSize); ++i )
+                arrKeys.push_back( key_type( i ));
+            shuffle( arrKeys.begin(), arrKeys.end());
+
+            std::vector< value_type > arrVals;
+            for ( size_t i = 0; i < kkSize; ++i ) {
+                value_type val;
+                val.nVal = static_cast<int>( i );
+                val.strVal = std::to_string( i );
+                arrVals.push_back( val );
+            }
+
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i ) );
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            // iterators
+            size_t nCount = 0;
+            for ( auto it = m.begin(); it != m.end(); ++it ) {
+                EXPECT_EQ( it->second.nVal, 0 );
+                it->second.nVal = it->first.nKey * 2;
+                ++nCount;
+            }
+            EXPECT_EQ( nCount, kkSize );
+
+            nCount = 0;
+            for ( auto it = m.cbegin(); it != m.cend(); ++it ) {
+                EXPECT_EQ( it->second.nVal, it->first.nKey * 2 );
+                ++nCount;
+            }
+            EXPECT_EQ( nCount, kkSize );
+
+            nCount = 0;
+            for ( auto it = m.rbegin(); it != m.rend(); ++it ) {
+                EXPECT_EQ( it->second.nVal, it->first.nKey * 2 );
+                it->second.nVal = it->first.nKey * 4;
+                ++nCount;
+            }
+            EXPECT_EQ( nCount, kkSize );
+
+            nCount = 0;
+            for ( auto it = m.crbegin(); it != m.crend(); ++it ) {
+                EXPECT_EQ( it->second.nVal, it->first.nKey * 4 );
+                ++nCount;
+            }
+            EXPECT_EQ( nCount, kkSize );
+
+            // get/extract
+            typedef typename Map::guarded_ptr guarded_ptr;
+            guarded_ptr gp;
+
+            for ( auto const& i : arrKeys ) {
+                value_type const& val = arrVals.at( i.nKey );
+
+                gp = m.get( i.nKey );
+                ASSERT_FALSE( !gp );
+                ASSERT_EQ( gp->first.nKey, i.nKey );
+                gp.release();
+                gp = m.get( i );
+                ASSERT_FALSE( !gp );
+                ASSERT_EQ( gp->first.nKey, i.nKey );
+                gp.release();
+
+                switch ( i.nKey % 3 ) {
+                case 0:
+                    gp = m.extract( i.nKey );
+                    break;
+                case 1:
+                    gp = m.extract( i );
+                    break;
+                case 2:
+                    gp = m.extract( val.strVal );
+                    break;
+                }
+                ASSERT_FALSE( !gp );
+                ASSERT_EQ( gp->first.nKey, i.nKey );
+                gp.release();
+
+                gp = m.get( i.nKey );
+                ASSERT_TRUE( !gp );
+                gp = m.get( i );
+                ASSERT_TRUE( !gp );
+            }
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            // erase_at( iterator )
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i ) );
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            nCount = 0;
+            for ( auto it = m.begin(); it != m.end(); ++it ) {
+                EXPECT_EQ( it->second.nVal, 0 );
+                ASSERT_TRUE( m.erase_at( it ));
+                ++nCount;
+            }
+            EXPECT_EQ( nCount, kkSize );
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            // erase_at( reverse_iterator )
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i ) );
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            nCount = 0;
+            for ( auto it = m.rbegin(); it != m.rend(); ++it ) {
+                EXPECT_EQ( it->second.nVal, 0 );
+                ASSERT_TRUE( m.erase_at( it ) );
+                ++nCount;
+            }
+            EXPECT_EQ( nCount, kkSize );
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            // erase_at( const_reverse_iterator )
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i ) );
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            nCount = 0;
+            for ( auto it = m.crbegin(); it != m.crend(); ++it ) {
+                EXPECT_EQ( it->second.nVal, 0 );
+                ASSERT_TRUE( m.erase_at( it ) );
+                ++nCount;
+            }
+            EXPECT_EQ( nCount, kkSize );
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            // erase_at( const_iterator )
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i ) );
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            nCount = 0;
+            for ( auto it = m.cbegin(); it != m.cend(); ++it ) {
+                EXPECT_EQ( it->second.nVal, 0 );
+                ASSERT_TRUE( m.erase_at( it ) );
+                ++nCount;
+            }
+            EXPECT_EQ( nCount, kkSize );
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+        }
+    };
+
+} // namespace cds_test
+
+#endif // #ifndef CDSUNIT_MAP_TEST_FELDMAN_HASHMAP_HP_H
diff --git a/test/unit/map/test_feldman_hashmap_rcu.h b/test/unit/map/test_feldman_hashmap_rcu.h
new file mode 100644 (file)
index 0000000..3d464b1
--- /dev/null
@@ -0,0 +1,282 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_MAP_TEST_FELDMAN_HASHMAP_RCU_H
+#define CDSUNIT_MAP_TEST_FELDMAN_HASHMAP_RCU_H
+
+#include "test_feldman_hashmap.h"
+#include <cds/container/feldman_hashmap_rcu.h>
+
+namespace {
+
+    template <typename RCU>
+    class FeldmanHashMap: public cds_test::feldman_hashmap
+    {
+        typedef cds_test::feldman_hashmap base_class;
+
+    protected:
+        typedef cds::urcu::gc<RCU> rcu_type;
+
+        template <class Map>
+        void test( Map& m )
+        {
+            // Precondition: map is empty
+            // Postcondition: map is empty
+
+            base_class::test( m );
+
+            ASSERT_TRUE( m.empty());
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            typedef typename Map::value_type map_pair;
+            typedef typename Map::rcu_lock   rcu_lock;
+            typedef typename Map::exempt_ptr exempt_ptr;
+
+            size_t const kkSize = base_class::kSize;
+
+            std::vector<key_type> arrKeys;
+            for ( int i = 0; i < static_cast<int>(kkSize); ++i )
+                arrKeys.push_back( key_type( i ));
+            shuffle( arrKeys.begin(), arrKeys.end());
+
+            std::vector< value_type > arrVals;
+            for ( size_t i = 0; i < kkSize; ++i ) {
+                value_type val;
+                val.nVal = static_cast<int>( i );
+                val.strVal = std::to_string( i );
+                arrVals.push_back( val );
+            }
+
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i ) );
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            // iterators
+            {
+                rcu_lock l;
+                size_t nCount = 0;
+                for ( auto it = m.begin(); it != m.end(); ++it ) {
+                    EXPECT_EQ( it->second.nVal, 0 );
+                    it->second.nVal = it->first.nKey * 2;
+                    ++nCount;
+                }
+                EXPECT_EQ( nCount, kkSize );
+
+                nCount = 0;
+                for ( auto it = m.cbegin(); it != m.cend(); ++it ) {
+                    EXPECT_EQ( it->second.nVal, it->first.nKey * 2 );
+                    ++nCount;
+                }
+                EXPECT_EQ( nCount, kkSize );
+
+                nCount = 0;
+                for ( auto it = m.rbegin(); it != m.rend(); ++it ) {
+                    EXPECT_EQ( it->second.nVal, it->first.nKey * 2 );
+                    it->second.nVal = it->first.nKey * 4;
+                    ++nCount;
+                }
+                EXPECT_EQ( nCount, kkSize );
+
+                nCount = 0;
+                for ( auto it = m.crbegin(); it != m.crend(); ++it ) {
+                    EXPECT_EQ( it->second.nVal, it->first.nKey * 4 );
+                    ++nCount;
+                }
+                EXPECT_EQ( nCount, kkSize );
+            }
+
+            // get/extract
+            exempt_ptr xp;
+
+            for ( auto const& i : arrKeys ) {
+                value_type const& val = arrVals.at( i.nKey );
+
+                {
+                    rcu_lock l;
+                    map_pair * p = m.get( i.nKey );
+                    ASSERT_FALSE( p == nullptr );
+                    EXPECT_EQ( p->first.nKey, i.nKey );
+
+                    p = m.get( i );
+                    ASSERT_FALSE( p == nullptr );
+                    EXPECT_EQ( p->first.nKey, i.nKey );
+
+                    p = m.get( val.strVal );
+                    ASSERT_FALSE( p == nullptr );
+                    EXPECT_EQ( p->first.nKey, i.nKey );
+                }
+
+                switch ( i.nKey % 3 ) {
+                case 0:
+                    xp = m.extract( i.nKey );
+                    break;
+                case 1:
+                    xp = m.extract( i );
+                    break;
+                case 2:
+                    xp = m.extract( val.strVal );
+                    break;
+                }
+                ASSERT_FALSE( !xp );
+                ASSERT_EQ( xp->first.nKey, i.nKey );
+
+                {
+                    rcu_lock l;
+
+                    map_pair * p = m.get( i.nKey );
+                    EXPECT_TRUE( p == nullptr );
+                    p = m.get( i );
+                    EXPECT_TRUE( p == nullptr );
+                }
+            }
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+        }
+
+        void SetUp()
+        {
+            RCU::Construct();
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            RCU::Destruct();
+        }
+    };
+
+    TYPED_TEST_CASE_P( FeldmanHashMap );
+
+    TYPED_TEST_P( FeldmanHashMap, defaulted )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        typedef cc::FeldmanHashMap< rcu_type, key_type, value_type > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( FeldmanHashMap, compare )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        typedef cc::FeldmanHashMap< rcu_type, key_type, value_type,
+            typename cc::feldman_hashmap::make_traits<
+                cds::opt::compare< typename TestFixture::cmp >
+            >::type
+        > map_type;
+
+        map_type m( 4, 5 );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( FeldmanHashMap, less )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        typedef cc::FeldmanHashMap< rcu_type, key_type, value_type,
+            typename cc::feldman_hashmap::make_traits<
+                cds::opt::less< typename TestFixture::less >
+            >::type
+        > map_type;
+
+        map_type m( 3, 2 );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( FeldmanHashMap, cmpmix )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        typedef cc::FeldmanHashMap< rcu_type, key_type, value_type,
+            typename cc::feldman_hashmap::make_traits<
+                cds::opt::less< typename TestFixture::less >
+                , cds::opt::compare<  typename TestFixture::cmp >
+            >::type
+        > map_type;
+
+        map_type m( 4, 4 );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( FeldmanHashMap, backoff )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct map_traits: public cc::feldman_hashmap::traits
+        {
+            typedef typename TestFixture::cmp compare;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+        };
+        typedef cc::FeldmanHashMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( 8, 2 );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( FeldmanHashMap, stat )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct map_traits: public cc::feldman_hashmap::traits
+        {
+            typedef cds::backoff::yield back_off;
+            typedef cc::feldman_hashmap::stat<> stat;
+        };
+        typedef cc::FeldmanHashMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+        map_type m( 1, 1 );
+        this->test( m );
+    }
+
+    // GCC 5: All test names should be written on single line, otherwise a runtime error will be encountered like as
+    // "No test named <test_name> can be found in this test case"
+    REGISTER_TYPED_TEST_CASE_P( FeldmanHashMap,
+        defaulted, compare, less, cmpmix, backoff, stat
+        ); 
+} // namespace
+
+#endif // #ifndef CDSUNIT_MAP_TEST_FELDMAN_HASHMAP_RCU_H
diff --git a/test/unit/map/test_map.h b/test/unit/map/test_map.h
new file mode 100644 (file)
index 0000000..2c3912c
--- /dev/null
@@ -0,0 +1,391 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_MAP_TEST_MAP_H
+#define CDSUNIT_MAP_TEST_MAP_H
+
+#include "test_map_data.h"
+
+// forward declaration
+namespace cds { namespace container {} }
+
+namespace cds_test {
+
+    class container_map: public map_fixture
+    {
+    public:
+        static size_t const kSize = 1000;
+
+    protected:
+        template <class Map>
+        void test( Map& m )
+        {
+            // Precondition: map is empty
+            // Postcondition: map is empty
+
+            ASSERT_TRUE( m.empty());
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            typedef typename Map::value_type map_pair;
+            size_t const kkSize = kSize;
+
+            std::vector<key_type> arrKeys;
+            for ( int i = 0; i < static_cast<int>(kkSize); ++i )
+                arrKeys.push_back( key_type( i ));
+            shuffle( arrKeys.begin(), arrKeys.end());
+
+            std::vector< value_type > arrVals;
+            for ( size_t i = 0; i < kkSize; ++i ) {
+                value_type val;
+                val.nVal = static_cast<int>( i );
+                val.strVal = std::to_string( i );
+                arrVals.push_back( val );
+            }
+
+            // insert/find
+            for ( auto const& i : arrKeys ) {
+                value_type const& val( arrVals.at( i.nKey ));
+
+                ASSERT_FALSE( m.contains( i.nKey ));
+                ASSERT_FALSE( m.contains( i ));
+                ASSERT_FALSE( m.contains( other_item( i.nKey ), other_less()));
+                ASSERT_FALSE( m.find( i, []( map_pair const& ) {
+                    ASSERT_TRUE( false );
+                } ));
+                ASSERT_FALSE( m.find( i.nKey, []( map_pair const& ) {
+                    EXPECT_TRUE( false );
+                } ));
+                ASSERT_FALSE( m.find_with( other_item( i.nKey ), other_less(), []( map_pair const& ) {
+                    EXPECT_TRUE( false );
+                } ));
+
+                std::pair< bool, bool > updResult;
+
+                switch ( i.nKey % 16 ) {
+                case 0:
+                    ASSERT_TRUE( m.insert( i ));
+                    ASSERT_FALSE( m.insert( i ));
+                    ASSERT_TRUE( m.find( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    break;
+                case 1:
+                    ASSERT_TRUE( m.insert( i.nKey ));
+                    ASSERT_FALSE( m.insert( i.nKey ));
+                    ASSERT_TRUE( m.find( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    break;
+                case 2:
+                    ASSERT_TRUE( m.insert( std::to_string( i.nKey )));
+                    ASSERT_FALSE( m.insert( std::to_string( i.nKey )));
+                    ASSERT_TRUE( m.find( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    break;
+                case 3:
+                    ASSERT_TRUE( m.insert( i, val ));
+                    ASSERT_FALSE( m.insert( i, val ));
+                    break;
+                case 4:
+                    ASSERT_TRUE( m.insert( i.nKey, val.strVal ));
+                    ASSERT_FALSE( m.insert( i.nKey, val.strVal ));
+                    break;
+                case 5:
+                    ASSERT_TRUE( m.insert( val.strVal, i.nKey ));
+                    ASSERT_FALSE( m.insert( val.strVal, i.nKey ));
+                    break;
+                case 6:
+                    ASSERT_TRUE( m.insert_with( i, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    ASSERT_FALSE( m.insert_with( i, []( map_pair& v ) {
+                        EXPECT_TRUE( false );
+                    } ));
+                    break;
+                case 7:
+                    ASSERT_TRUE( m.insert_with( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    ASSERT_FALSE( m.insert_with( i.nKey, []( map_pair& v ) {
+                        EXPECT_TRUE( false );
+                    } ));
+                    break;
+                case 8:
+                    ASSERT_TRUE( m.insert_with( val.strVal, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    ASSERT_FALSE( m.insert_with( val.strVal, []( map_pair& v ) {
+                        EXPECT_TRUE( false );
+                    } ));
+                    break;
+                case 9:
+                    updResult = m.update( i.nKey, []( bool, map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }, false );
+                    ASSERT_FALSE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( i.nKey, []( bool bNew, map_pair& v ) {
+                        EXPECT_TRUE( bNew );
+                        v.second.nVal = v.first.nKey;
+                    });
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_TRUE( updResult.second );
+
+                    updResult = m.update( i.nKey, []( bool bNew, map_pair& v ) {
+                        EXPECT_FALSE( bNew );
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        v.second.strVal = std::to_string( v.second.nVal );
+                    } );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+                    break;
+                case 10:
+                    updResult = m.update( i, []( bool, map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }, false );
+                    ASSERT_FALSE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( i, []( bool bNew, map_pair& v ) {
+                        EXPECT_TRUE( bNew );
+                        v.second.nVal = v.first.nKey;
+                    });
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_TRUE( updResult.second );
+
+                    updResult = m.update( i, []( bool bNew, map_pair& v ) {
+                        EXPECT_FALSE( bNew );
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        v.second.strVal = std::to_string( v.second.nVal );
+                    } );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+                    break;
+                case 11:
+                    updResult = m.update( val.strVal, []( bool, map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }, false );
+                    ASSERT_FALSE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( val.strVal, []( bool bNew, map_pair& v ) {
+                        EXPECT_TRUE( bNew );
+                        v.second.nVal = v.first.nKey;
+                    });
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_TRUE( updResult.second );
+
+                    updResult = m.update( val.strVal, []( bool bNew, map_pair& v ) {
+                        EXPECT_FALSE( bNew );
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        v.second.strVal = std::to_string( v.second.nVal );
+                    } );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+                    break;
+                case 12:
+                    ASSERT_TRUE( m.emplace( i.nKey ));
+                    ASSERT_FALSE( m.emplace( i.nKey ));
+                    ASSERT_TRUE( m.find( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    break;
+                case 13:
+                    ASSERT_TRUE( m.emplace( i, i.nKey ));
+                    ASSERT_FALSE( m.emplace( i, i.nKey ));
+                    break;
+                case 14:
+                    {
+                        std::string str = val.strVal;
+                        ASSERT_TRUE( m.emplace( i, std::move( str )));
+                        ASSERT_TRUE( str.empty());
+                        str = val.strVal;
+                        ASSERT_FALSE( m.emplace( i, std::move( str )));
+                        ASSERT_TRUE( str.empty());
+                    }
+                    break;
+                case 15:
+                    {
+                        std::string str = val.strVal;
+                        ASSERT_TRUE( m.emplace( i, i.nKey, std::move( str )));
+                        ASSERT_TRUE( str.empty());
+                        str = val.strVal;
+                        ASSERT_FALSE( m.emplace( i, i.nKey, std::move( str )));
+                        ASSERT_TRUE( str.empty());
+                    }
+                    break;
+                }
+
+                ASSERT_TRUE( m.contains( i.nKey ));
+                ASSERT_TRUE( m.contains( i ));
+                ASSERT_TRUE( m.contains( other_item( i.nKey ), other_less()));
+                ASSERT_TRUE( m.find( i, []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ));
+                ASSERT_TRUE( m.find( i.nKey, []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ));
+                ASSERT_TRUE( m.find_with( other_item( i.nKey ), other_less(), []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ));
+            }
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+            ASSERT_FALSE( m.begin() == m.end() );
+            ASSERT_FALSE( m.cbegin() == m.cend() );
+
+            shuffle( arrKeys.begin(), arrKeys.end() );
+
+            // erase/find
+            for ( auto const& i : arrKeys ) {
+                value_type const& val( arrVals.at( i.nKey ) );
+
+                ASSERT_TRUE( m.contains( i.nKey ));
+                ASSERT_TRUE( m.contains( val.strVal ) );
+                ASSERT_TRUE( m.contains( i ));
+                ASSERT_TRUE( m.contains( other_item( i.nKey ), other_less()));
+                ASSERT_TRUE( m.find( i, []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ));
+                ASSERT_TRUE( m.find( i.nKey, []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ));
+                ASSERT_TRUE( m.find_with( other_item( i.nKey ), other_less(), []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ));
+
+
+                switch ( i.nKey % 8 ) {
+                case 0:
+                    ASSERT_TRUE( m.erase( i ));
+                    ASSERT_FALSE( m.erase( i ));
+                    break;
+                case 1:
+                    ASSERT_TRUE( m.erase( i.nKey ));
+                    ASSERT_FALSE( m.erase( i.nKey ));
+                    break;
+                case 2:
+                    ASSERT_TRUE( m.erase( val.strVal ));
+                    ASSERT_FALSE( m.erase( val.strVal ));
+                    break;
+                case 3:
+                    ASSERT_TRUE( m.erase_with( other_item( i.nKey ), other_less()));
+                    ASSERT_FALSE( m.erase_with( other_item( i.nKey ), other_less()));
+                    break;
+                case 4:
+                    ASSERT_TRUE( m.erase( i, []( map_pair& v ) {
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                    }));
+                    ASSERT_FALSE( m.erase( i, []( map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }));
+                    break;
+                case 5:
+                    ASSERT_TRUE( m.erase( i.nKey, []( map_pair& v ) {
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                    }));
+                    ASSERT_FALSE( m.erase( i.nKey, []( map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }));
+                    break;
+                case 6:
+                    ASSERT_TRUE( m.erase( val.strVal, []( map_pair& v ) {
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                    }));
+                    ASSERT_FALSE( m.erase( val.strVal, []( map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }));
+                    break;
+                case 7:
+                    ASSERT_TRUE( m.erase_with( other_item( i.nKey ), other_less(), []( map_pair& v ) {
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                    }));
+                    ASSERT_FALSE( m.erase_with( other_item( i.nKey ), other_less(), []( map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }));
+                    break;
+                }
+
+                ASSERT_FALSE( m.contains( i.nKey ));
+                ASSERT_FALSE( m.contains( i ));
+                ASSERT_FALSE( m.contains( val.strVal ));
+                ASSERT_FALSE( m.contains( other_item( i.nKey ), other_less()));
+                ASSERT_FALSE( m.find( i, []( map_pair const& ) {
+                    ASSERT_TRUE( false );
+                } ));
+                ASSERT_FALSE( m.find( i.nKey, []( map_pair const& ) {
+                    EXPECT_TRUE( false );
+                } ));
+                ASSERT_FALSE( m.find_with( other_item( i.nKey ), other_less(), []( map_pair const& ) {
+                    EXPECT_TRUE( false );
+                } ));
+            }
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            ASSERT_TRUE( m.begin() == m.end());
+            ASSERT_TRUE( m.cbegin() == m.cend());
+
+            // clear
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i ));
+
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            m.clear();
+
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+        }
+    };
+
+} // namespace cds_test
+
+#endif // #ifndef CDSUNIT_MAP_TEST_MAP_H
diff --git a/test/unit/map/test_map_data.h b/test/unit/map/test_map_data.h
new file mode 100644 (file)
index 0000000..abb0055
--- /dev/null
@@ -0,0 +1,245 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_MAP_TEST_MAP_DATA_H
+#define CDSUNIT_MAP_TEST_MAP_DATA_H
+
+#include <cds_test/check_size.h>
+#include <cds_test/fixture.h>
+
+#include <cds/opt/hash.h>
+
+namespace cds_test {
+
+    class map_fixture: public fixture
+    {
+    public:
+        struct key_type {
+            int nKey;
+
+            explicit key_type( int n )
+                : nKey( n )
+            {}
+
+            explicit key_type( std::string const& str )
+                : nKey( std::stoi( str ))
+            {}
+
+            key_type( key_type const& s )
+                : nKey( s.nKey )
+            {}
+        };
+
+        struct value_type {
+            int nVal;
+            std::string strVal;
+
+            value_type()
+                : nVal( 0 )
+            {}
+
+            explicit value_type( int n )
+                : nVal( n )
+                , strVal( std::to_string( n ))
+            {}
+
+            explicit value_type( std::string const& str )
+                : nVal( std::stoi( str ))
+                , strVal( str )
+            {}
+
+            explicit value_type( std::string&& str )
+                : nVal( std::stoi( str ))
+                , strVal( std::move( str ))
+            {}
+
+            value_type( int n, std::string const& str )
+                : nVal( n )
+                , strVal( str )
+            {}
+
+            value_type( int n, std::string&& str )
+                : nVal( n )
+                , strVal( std::move( str ))
+            {}
+
+            value_type( value_type&& v )
+                : nVal( v.nVal )
+                , strVal( std::move( v.strVal ))
+            {}
+
+            value_type( value_type const& v )
+                : nVal( v.nVal )
+                , strVal( v.strVal )
+            {}
+
+            value_type& operator=( value_type const& v )
+            {
+                if ( this != &v ) {
+                    nVal = v.nVal;
+                    strVal = v.strVal;
+                }
+                return *this;
+            }
+
+            value_type& operator=( value_type&& v )
+            {
+                if ( this != &v ) {
+                    nVal = v.nVal;
+                    strVal = std::move( v.strVal );
+                }
+                return *this;
+            }
+
+            value_type& operator=( int i )
+            {
+                nVal = i;
+                strVal = std::to_string( i );
+                return *this;
+            }
+
+            value_type& operator=( std::string const& s )
+            {
+                nVal = std::stoi( s );
+                strVal = s;
+                return *this;
+            }
+        };
+
+        typedef std::pair<key_type const, value_type> pair_type;
+
+        struct less
+        {
+            bool operator ()( key_type const& v1, key_type const& v2 ) const
+            {
+                return v1.nKey < v2.nKey;
+            }
+
+            bool operator ()( key_type const& v1, int v2 ) const
+            {
+                return v1.nKey < v2;
+            }
+
+            bool operator ()( int v1, key_type const& v2 ) const
+            {
+                return v1 < v2.nKey;
+            }
+
+            bool operator ()( key_type const& v1, std::string const& v2 ) const
+            {
+                return v1.nKey < std::stoi(v2 );
+            }
+
+            bool operator ()( std::string const& v1, key_type const& v2 ) const
+            {
+                return std::stoi( v1 ) < v2.nKey;
+            }
+        };
+
+        struct cmp {
+            int operator ()( key_type const& v1, key_type const& v2 ) const
+            {
+                if ( v1.nKey < v2.nKey )
+                    return -1;
+                return v1.nKey > v2.nKey ? 1 : 0;
+            }
+
+            int operator ()( key_type const& v1, int v2 ) const
+            {
+                if ( v1.nKey < v2 )
+                    return -1;
+                return v1.nKey > v2 ? 1 : 0;
+            }
+
+            int operator ()( int v1, key_type const& v2 ) const
+            {
+                if ( v1 < v2.nKey )
+                    return -1;
+                return v1 > v2.nKey ? 1 : 0;
+            }
+
+            int operator ()( key_type const& v1, std::string const& v2 ) const
+            {
+                int n2 = std::stoi( v2 );
+                if ( v1.nKey < n2 )
+                    return -1;
+                return v1.nKey > n2 ? 1 : 0;
+            }
+
+            int operator ()( std::string const& v1, key_type const& v2 ) const
+            {
+                int n1 = std::stoi( v1 );
+                if ( n1 < v2.nKey )
+                    return -1;
+                return n1 > v2.nKey ? 1 : 0;
+            }
+        };
+
+        struct hash1 {
+            size_t operator()( int i ) const
+            {
+                return cds::opt::v::hash<int>()( i );
+            }
+
+            size_t operator()( std::string const& str ) const
+            {
+                return cds::opt::v::hash<int>()( std::stoi( str ));
+            }
+
+            template <typename T>
+            size_t operator()( T const& i ) const
+            {
+                return cds::opt::v::hash<int>()(i.nKey);
+            }
+        };
+
+        struct other_item {
+            int nKey;
+
+            other_item( int key )
+                : nKey( key )
+            {}
+        };
+
+        struct other_less
+        {
+            bool operator ()( key_type const& v1, other_item const& v2 ) const
+            {
+                return v1.nKey < v2.nKey;
+            }
+            bool operator ()( other_item const& v1, key_type const& v2 ) const
+            {
+                return v1.nKey < v2.nKey;
+            }
+        };
+    };\r
+} // namespace cds_test\r
+\r
+#endif //\r
diff --git a/test/unit/map/test_map_hp.h b/test/unit/map/test_map_hp.h
new file mode 100644 (file)
index 0000000..2209511
--- /dev/null
@@ -0,0 +1,142 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_MAP_TEST_MAP_HP_H
+#define CDSUNIT_MAP_TEST_MAP_HP_H
+
+#include "test_map.h"
+
+namespace cds_test {
+
+    class container_map_hp: public container_map
+    {
+        typedef container_map base_class;
+
+    protected:
+        template <class Map>
+        void test( Map& m )
+        {
+            // Precondition: map is empty
+            // Postcondition: map is empty
+
+            base_class::test( m );
+
+            ASSERT_TRUE( m.empty());
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            typedef typename Map::value_type map_pair;
+            size_t const kkSize = base_class::kSize;
+
+            std::vector<key_type> arrKeys;
+            for ( int i = 0; i < static_cast<int>(kkSize); ++i )
+                arrKeys.push_back( key_type( i ));
+            shuffle( arrKeys.begin(), arrKeys.end());
+
+            std::vector< value_type > arrVals;
+            for ( size_t i = 0; i < kkSize; ++i ) {
+                value_type val;
+                val.nVal = static_cast<int>( i );
+                val.strVal = std::to_string( i );
+                arrVals.push_back( val );
+            }
+
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i ) );
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            // iterators
+            size_t nCount = 0;
+            for ( auto it = m.begin(); it != m.end(); ++it ) {
+                EXPECT_EQ( it->second.nVal, 0 );
+                it->second.nVal = it->first.nKey * 2;
+                ++nCount;
+            }
+            EXPECT_EQ( nCount, kkSize );
+
+            nCount = 0;
+            for ( auto it = m.cbegin(); it != m.cend(); ++it ) {
+                EXPECT_EQ( it->second.nVal, it->first.nKey * 2 );
+                ++nCount;
+            }
+            EXPECT_EQ( nCount, kkSize );
+
+            // get/extract
+            typedef typename Map::guarded_ptr guarded_ptr;
+            guarded_ptr gp;
+
+            for ( auto const& i : arrKeys ) {
+                value_type const& val = arrVals.at( i.nKey );
+
+                gp = m.get( i.nKey );
+                ASSERT_FALSE( !gp );
+                ASSERT_EQ( gp->first.nKey, i.nKey );
+                gp.release();
+                gp = m.get( i );
+                ASSERT_FALSE( !gp );
+                ASSERT_EQ( gp->first.nKey, i.nKey );
+                gp.release();
+                gp = m.get_with( other_item( i.nKey ), other_less());
+                ASSERT_FALSE( !gp );
+                ASSERT_EQ( gp->first.nKey, i.nKey );
+
+                switch ( i.nKey % 4 ) {
+                case 0:
+                    gp = m.extract( i.nKey );
+                    break;
+                case 1:
+                    gp = m.extract( i );
+                    break;
+                case 2:
+                    gp = m.extract( val.strVal );
+                    break;
+                case 3:
+                    gp = m.extract_with( other_item( i.nKey ), other_less());
+                    break;
+                }
+                ASSERT_FALSE( !gp );
+                ASSERT_EQ( gp->first.nKey, i.nKey );
+                gp.release();
+
+                gp = m.get( i.nKey );
+                ASSERT_TRUE( !gp );
+                gp = m.get( i );
+                ASSERT_TRUE( !gp );
+                gp = m.get_with( other_item( i.nKey ), other_less() );
+                ASSERT_TRUE( !gp );
+            }
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+        }
+    };
+
+} // namespace cds_test
+
+#endif // #ifndef CDSUNIT_MAP_TEST_MAP_H
diff --git a/test/unit/map/test_map_nogc.h b/test/unit/map/test_map_nogc.h
new file mode 100644 (file)
index 0000000..cc8abb9
--- /dev/null
@@ -0,0 +1,260 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_MAP_TEST_MAP_NOGC_H
+#define CDSUNIT_MAP_TEST_MAP_NOGC_H
+
+#include "test_map_data.h"
+
+// forward declaration
+namespace cds { namespace container {} }
+
+namespace cds_test {
+
+    class container_map_nogc: public map_fixture
+    {
+    public:
+        static size_t const kSize = 1000;
+
+    protected:
+        template <class Map>
+        void test( Map& m )
+        {
+            // Precondition: map is empty
+            // Postcondition: map is empty
+
+            ASSERT_TRUE( m.empty());
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            typedef typename Map::value_type map_pair;
+            typedef typename Map::iterator   iterator;
+            typedef typename Map::const_iterator const_iterator;
+            size_t const kkSize = kSize;
+
+            std::vector<key_type> arrKeys;
+            for ( int i = 0; i < static_cast<int>(kkSize); ++i )
+                arrKeys.push_back( key_type( i ));
+            shuffle( arrKeys.begin(), arrKeys.end());
+
+            std::vector< value_type > arrVals;
+            for ( size_t i = 0; i < kkSize; ++i ) {
+                value_type val;
+                val.nVal = static_cast<int>( i );
+                val.strVal = std::to_string( i );
+                arrVals.push_back( val );
+            }
+
+            // insert/find
+            for ( auto const& i : arrKeys ) {
+                value_type const& val( arrVals.at( i.nKey ));
+
+                ASSERT_FALSE( m.contains( i.nKey ) != m.end());
+                ASSERT_FALSE( m.contains( i ) != m.end());
+                ASSERT_FALSE( m.contains( other_item( i.nKey ), other_less()) != m.end());
+
+                std::pair< iterator, bool > updResult;
+                iterator it;
+                switch ( i.nKey % 16 ) {
+                case 0:
+                    it = m.insert( i );
+                    ASSERT_FALSE( it == m.end());
+                    ASSERT_TRUE( m.insert( i ) == m.end());
+                    it->second.nVal = it->first.nKey;
+                    it->second.strVal = std::to_string( it->first.nKey );
+                    break;
+                case 1:
+                    it = m.insert( i.nKey );
+                    ASSERT_FALSE( it == m.end() );
+                    ASSERT_TRUE( m.insert( i.nKey ) == m.end());
+                    it->second.nVal = it->first.nKey;
+                    it->second.strVal = std::to_string( it->first.nKey );
+                    break;
+                case 2:
+                    it = m.insert( std::to_string( i.nKey ));
+                    ASSERT_FALSE( it == m.end() );
+                    ASSERT_TRUE( m.insert( std::to_string( i.nKey )) == m.end());
+                    it->second.nVal = it->first.nKey;
+                    it->second.strVal = std::to_string( it->first.nKey );
+                    break;
+                case 3:
+                    it = m.insert( i, val );
+                    ASSERT_FALSE( it == m.end() );
+                    ASSERT_TRUE( m.insert( i, val ) == m.end());
+                    break;
+                case 4:
+                    it = m.insert( i.nKey, val.strVal );
+                    ASSERT_FALSE( it == m.end() );
+                    ASSERT_TRUE( m.insert( i.nKey, val.strVal ) == m.end());
+                    break;
+                case 5:
+                    it = m.insert( val.strVal, i.nKey );
+                    ASSERT_FALSE( it == m.end() );
+                    ASSERT_TRUE( m.insert( val.strVal, i.nKey ) == m.end());
+                    break;
+                case 6:
+                    it = m.insert_with( i, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } );
+                    ASSERT_FALSE( it == m.end() );
+                    ASSERT_TRUE( m.insert_with( i, []( map_pair& v ) {
+                        EXPECT_TRUE( false );
+                    } ) == m.end());
+                    break;
+                case 7:
+                    it = m.insert_with( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } );
+                    ASSERT_FALSE( it == m.end() );
+                    ASSERT_TRUE( m.insert_with( i.nKey, []( map_pair& v ) {
+                        EXPECT_TRUE( false );
+                    } ) == m.end());
+                    break;
+                case 8:
+                    it = m.insert_with( val.strVal, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } );
+                    ASSERT_FALSE( it == m.end() );
+                    ASSERT_TRUE( m.insert_with( val.strVal, []( map_pair& v ) {
+                        EXPECT_TRUE( false );
+                    } ) == m.end());
+                    break;
+                case 9:
+                    updResult = m.update( i.nKey, false );
+                    ASSERT_TRUE( updResult.first == m.end() );
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( i.nKey );
+                    ASSERT_TRUE( updResult.first != m.end());
+                    ASSERT_TRUE( updResult.second );
+                    updResult.first->second.nVal = updResult.first->first.nKey;
+
+                    updResult = m.update( i.nKey, false );
+                    ASSERT_TRUE( updResult.first != m.end() );
+                    ASSERT_FALSE( updResult.second );
+                    EXPECT_EQ( updResult.first->first.nKey, updResult.first->second.nVal );
+                    updResult.first->second.strVal = std::to_string( updResult.first->second.nVal );
+                    break;
+                case 10:
+                    updResult = m.update( i, false );
+                    ASSERT_TRUE( updResult.first == m.end() );
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( i );
+                    ASSERT_TRUE( updResult.first != m.end());
+                    ASSERT_TRUE( updResult.second );
+                    updResult.first->second.nVal = updResult.first->first.nKey;
+
+                    updResult = m.update( i );
+                    ASSERT_TRUE( updResult.first != m.end());
+                    ASSERT_FALSE( updResult.second );
+                    EXPECT_EQ( updResult.first->first.nKey, updResult.first->second.nVal );
+                    updResult.first->second.strVal = std::to_string( updResult.first->second.nVal );
+                    break;
+                case 11:
+                    updResult = m.update( val.strVal, false );
+                    ASSERT_TRUE( updResult.first == m.end());
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( val.strVal );
+                    ASSERT_TRUE( updResult.first != m.end());
+                    ASSERT_TRUE( updResult.second );
+                    updResult.first->second.nVal = updResult.first->first.nKey;
+
+                    updResult = m.update( val.strVal, false );
+                    ASSERT_TRUE( updResult.first != m.end());
+                    ASSERT_FALSE( updResult.second );
+                    EXPECT_EQ( updResult.first->first.nKey, updResult.first->second.nVal );
+                    updResult.first->second.strVal = std::to_string( updResult.first->second.nVal );
+                    break;
+                case 12:
+                    it = m.emplace( i.nKey );
+                    ASSERT_TRUE( it != m.end());
+                    ASSERT_FALSE( m.emplace( i.nKey ) != m.end());
+                    it->second.nVal = it->first.nKey;
+                    it->second.strVal = std::to_string( it->first.nKey );
+                    break;
+                case 13:
+                    it = m.emplace( i, i.nKey );
+                    ASSERT_TRUE( it != m.end() );
+                    ASSERT_FALSE( m.emplace( i, i.nKey ) != m.end());
+                    break;
+                case 14:
+                    {
+                        std::string str = val.strVal;
+                        it = m.emplace( i, std::move( str ));
+                        ASSERT_TRUE( it != m.end() );
+                        ASSERT_TRUE( str.empty());
+                        str = val.strVal;
+                        ASSERT_FALSE( m.emplace( i, std::move( str )) != m.end());
+                        ASSERT_TRUE( str.empty());
+                    }
+                    break;
+                case 15:
+                    {
+                        std::string str = val.strVal;
+                        it = m.emplace( i, i.nKey, std::move( str ));
+                        ASSERT_TRUE( it != m.end() );
+                        ASSERT_TRUE( str.empty());
+                        str = val.strVal;
+                        ASSERT_FALSE( m.emplace( i, i.nKey, std::move( str )) != m.end());
+                        ASSERT_TRUE( str.empty());
+                    }
+                    break;
+                }
+
+                it = m.contains( i.nKey );
+                ASSERT_TRUE( it != m.end());
+                ASSERT_TRUE( m.contains( i ) == it );
+                ASSERT_TRUE( m.contains( other_item( i.nKey ), other_less()) == it );
+                EXPECT_EQ( it->first.nKey, it->second.nVal );
+                EXPECT_EQ( std::to_string( it->first.nKey ), it->second.strVal );
+            }
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+            ASSERT_FALSE( m.begin() == m.end() );
+            ASSERT_FALSE( m.cbegin() == m.cend() );
+
+            // clear
+
+            m.clear();
+
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+            ASSERT_TRUE( m.begin() == m.end() );
+            ASSERT_TRUE( m.cbegin() == m.cend() );
+        }
+    };
+
+} // namespace cds_test
+
+#endif // #ifndef CDSUNIT_MAP_TEST_MAP_NOGC_H
diff --git a/test/unit/map/test_map_rcu.h b/test/unit/map/test_map_rcu.h
new file mode 100644 (file)
index 0000000..f05bac5
--- /dev/null
@@ -0,0 +1,224 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_MAP_TEST_MAP_RCU_H
+#define CDSUNIT_MAP_TEST_MAP_RCU_H
+
+#include "test_map.h"
+
+namespace cds_test {
+
+    class container_map_rcu: public container_map
+    {
+        typedef container_map base_class;
+
+    protected:
+        template <class Map>
+        void test( Map& m )
+        {
+            // Precondition: map is empty
+            // Postcondition: map is empty
+
+            base_class::test( m );
+
+            ASSERT_TRUE( m.empty());
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            typedef typename Map::value_type map_pair;
+            size_t const kkSize = base_class::kSize;
+
+            std::vector<key_type> arrKeys;
+            for ( int i = 0; i < static_cast<int>(kkSize); ++i )
+                arrKeys.push_back( key_type( i ));
+            shuffle( arrKeys.begin(), arrKeys.end());
+
+            std::vector< value_type > arrVals;
+            for ( size_t i = 0; i < kkSize; ++i ) {
+                value_type val;
+                val.nVal = static_cast<int>( i );
+                val.strVal = std::to_string( i );
+                arrVals.push_back( val );
+            }
+
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i ) );
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            // iterators
+            size_t nCount = 0;
+            for ( auto it = m.begin(); it != m.end(); ++it ) {
+                EXPECT_EQ( it->second.nVal, 0 );
+                it->second.nVal = it->first.nKey * 2;
+                ++nCount;
+            }
+            EXPECT_EQ( nCount, kkSize );
+
+            nCount = 0;
+            for ( auto it = m.cbegin(); it != m.cend(); ++it ) {
+                EXPECT_EQ( it->second.nVal, it->first.nKey * 2 );
+                ++nCount;
+            }
+            EXPECT_EQ( nCount, kkSize );
+
+            typedef typename Map::exempt_ptr exempt_ptr;
+            typedef typename Map::raw_ptr    raw_ptr;
+            typedef typename Map::rcu_lock   rcu_lock;
+
+            // get/extract
+            shuffle( arrKeys.begin(), arrKeys.end() );
+
+            for ( auto const& i : arrKeys ) {
+                value_type const& val = arrVals.at( i.nKey );
+
+                {
+                    rcu_lock l;
+                    raw_ptr rp;
+
+                    rp = m.get( i.nKey );
+                    ASSERT_FALSE( !rp );
+                    EXPECT_EQ( rp->first.nKey, i.nKey );
+                    rp->second.nVal = rp->first.nKey * 2;
+
+                    rp = m.get( i );
+                    ASSERT_FALSE( !rp );
+                    EXPECT_EQ( rp->first.nKey, i.nKey );
+                    EXPECT_EQ( rp->second.nVal, rp->first.nKey * 2 );
+                    rp->second.nVal = rp->first.nKey * 3;
+
+                    rp = m.get_with( other_item( i.nKey ), other_less());
+                    ASSERT_FALSE( !rp );
+                    EXPECT_EQ( rp->first.nKey, i.nKey );
+                    EXPECT_EQ( rp->second.nVal, rp->first.nKey * 3 );
+                    rp->second.nVal = rp->first.nKey;
+                }
+
+                exempt_ptr xp;
+                if ( Map::c_bExtractLockExternal ) {
+                    {
+                        rcu_lock l;
+
+                        switch ( i.nKey % 4 ) {
+                        case 0:
+                            xp = m.extract( i.nKey );
+                            break;
+                        case 1:
+                            xp = m.extract( i );
+                            break;
+                        case 2:
+                            xp = m.extract( val.strVal );
+                            break;
+                        case 3:
+                            xp = m.extract_with( other_item( i.nKey ), other_less() );
+                            break;
+                        }
+                        ASSERT_FALSE( !xp );
+                        EXPECT_EQ( xp->first.nKey, i.nKey );
+                        EXPECT_EQ( xp->second.nVal, xp->first.nKey );
+                    }
+                    xp.release();
+
+                    {
+                        rcu_lock l;
+
+                        switch ( i.nKey % 4 ) {
+                        case 0:
+                            xp = m.extract( i.nKey );
+                            break;
+                        case 1:
+                            xp = m.extract( i );
+                            break;
+                        case 2:
+                            xp = m.extract( val.strVal );
+                            break;
+                        case 3:
+                            xp = m.extract_with( other_item( i.nKey ), other_less() );
+                            break;
+                        }
+                        EXPECT_TRUE( !xp );
+                    }
+                }
+                else {
+                    switch ( i.nKey % 4 ) {
+                    case 0:
+                        xp = m.extract( i.nKey );
+                        break;
+                    case 1:
+                        xp = m.extract( i );
+                        break;
+                    case 2:
+                        xp = m.extract( val.strVal );
+                        break;
+                    case 3:
+                        xp = m.extract_with( other_item( i.nKey ), other_less());
+                        break;
+                    }
+                    ASSERT_FALSE( !xp );
+                    EXPECT_EQ( xp->first.nKey, i.nKey );
+                    EXPECT_EQ( xp->second.nVal, xp->first.nKey );
+
+                    switch ( i.nKey % 4 ) {
+                    case 0:
+                        xp = m.extract( i.nKey );
+                        break;
+                    case 1:
+                        xp = m.extract( i );
+                        break;
+                    case 2:
+                        xp = m.extract( val.strVal );
+                        break;
+                    case 3:
+                        xp = m.extract_with( other_item( i.nKey ), other_less() );
+                        break;
+                    }
+                    EXPECT_TRUE( !xp );
+                }
+
+                {
+                    rcu_lock l;
+                    raw_ptr rp;
+
+                    rp = m.get( i.nKey );
+                    ASSERT_TRUE( !rp );
+                    rp = m.get( i );
+                    ASSERT_TRUE( !rp );
+                    rp = m.get_with( other_item( i.nKey ), other_less() );
+                    ASSERT_TRUE( !rp );
+                }
+            }
+
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+        }
+    };
+
+} // namespace cds_test
+
+#endif // #ifndef CDSUNIT_MAP_TEST_MAP_H
diff --git a/test/unit/map/test_michael_lazy_rcu.h b/test/unit/map/test_michael_lazy_rcu.h
new file mode 100644 (file)
index 0000000..db97971
--- /dev/null
@@ -0,0 +1,213 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_MAP_TEST_MICHAEL_LAZY_RCU_H
+#define CDSUNIT_MAP_TEST_MICHAEL_LAZY_RCU_H
+
+#include "test_map_rcu.h"
+#include <cds/container/lazy_kvlist_rcu.h>
+#include <cds/container/michael_map_rcu.h>
+
+namespace {
+    namespace cc = cds::container;
+
+    template <class RCU>
+    class MichaelLazyMap: public cds_test::container_map_rcu
+    {
+        typedef cds_test::container_map_rcu base_class;
+    public:
+        typedef cds::urcu::gc<RCU> rcu_type;
+
+    protected:
+        void SetUp()
+        {
+            RCU::Construct();
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            RCU::Destruct();
+        }
+    };
+
+    TYPED_TEST_CASE_P( MichaelLazyMap );
+
+    TYPED_TEST_P( MichaelLazyMap, compare )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        typedef cc::LazyKVList< rcu_type, key_type, value_type,
+            typename cc::lazy_list::make_traits<
+                cds::opt::compare< typename TestFixture::cmp >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashMap< rcu_type, list_type, 
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< typename TestFixture::hash1 >
+            >::type
+        > map_type;
+
+        map_type m( TestFixture::kSize, 2 );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( MichaelLazyMap, less )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        typedef cc::LazyKVList< rcu_type, key_type, value_type,
+            typename cc::lazy_list::make_traits<
+                cds::opt::less< typename TestFixture::less >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashMap< rcu_type, list_type, 
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< typename TestFixture::hash1 >
+            >::type
+        > map_type;
+
+        map_type m( TestFixture::kSize, 2 );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( MichaelLazyMap, cmpmix )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct list_traits : public cc::lazy_list::traits
+        {
+            typedef typename TestFixture::less less;
+            typedef typename TestFixture::cmp compare;
+        };
+        typedef cc::LazyKVList< rcu_type, key_type, value_type, list_traits > list_type;
+
+        typedef cc::MichaelHashMap< rcu_type, list_type,
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< typename TestFixture::hash1 >
+            >::type
+        > map_type;
+
+        map_type m( TestFixture::kSize, 2 );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( MichaelLazyMap, backoff )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct list_traits : public cc::lazy_list::traits
+        {
+            typedef typename TestFixture::cmp compare;
+            typedef cds::backoff::exponential<cds::backoff::pause, cds::backoff::yield> back_off;
+        };
+        typedef cc::LazyKVList< rcu_type, key_type, value_type, list_traits > list_type;
+
+        struct set_traits : public cc::michael_map::traits
+        {
+            typedef typename TestFixture::hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashMap< rcu_type, list_type, set_traits >map_type;
+
+        map_type m( TestFixture::kSize, 4 );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( MichaelLazyMap, seq_cst )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct list_traits : public cc::lazy_list::traits
+        {
+            typedef typename TestFixture::less less;
+            typedef cds::backoff::pause back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::LazyKVList< rcu_type, key_type, value_type, list_traits > list_type;
+
+        struct set_traits : public cc::michael_map::traits
+        {
+            typedef typename TestFixture::hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashMap< rcu_type, list_type, set_traits >map_type;
+
+        map_type m( TestFixture::kSize, 4 );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( MichaelLazyMap, mutex )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct list_traits : public cc::lazy_list::traits
+        {
+            typedef typename TestFixture::less less;
+            typedef cds::backoff::pause back_off;
+            typedef std::mutex lock_type;
+        };
+        typedef cc::LazyKVList< rcu_type, key_type, value_type, list_traits > list_type;
+
+        struct set_traits : public cc::michael_map::traits
+        {
+            typedef typename TestFixture::hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashMap< rcu_type, list_type, set_traits >map_type;
+
+        map_type m( TestFixture::kSize, 4 );
+        this->test( m );
+    }
+
+
+    // GCC 5: All test names should be written on single line, otherwise a runtime error will be encountered like as
+    // "No test named <test_name> can be found in this test case"
+    REGISTER_TYPED_TEST_CASE_P( MichaelLazyMap,
+        compare, less, cmpmix, backoff, seq_cst, mutex
+    );
+} // namespace
+
+#endif // CDSUNIT_MAP_TEST_MICHAEL_LAZY_RCU_H
\ No newline at end of file
diff --git a/test/unit/map/test_michael_michael_rcu.h b/test/unit/map/test_michael_michael_rcu.h
new file mode 100644 (file)
index 0000000..dc66ad8
--- /dev/null
@@ -0,0 +1,186 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_MAP_TEST_MICHAEL_MICHAEL_RCU_H
+#define CDSUNIT_MAP_TEST_MICHAEL_MICHAEL_RCU_H
+
+#include "test_map_rcu.h"
+#include <cds/container/michael_kvlist_rcu.h>
+#include <cds/container/michael_map_rcu.h>
+
+namespace {
+    namespace cc = cds::container;
+
+    template <class RCU>
+    class MichaelMap: public cds_test::container_map_rcu
+    {
+        typedef cds_test::container_map_rcu base_class;
+    public:
+        typedef cds::urcu::gc<RCU> rcu_type;
+
+    protected:
+        void SetUp()
+        {
+            RCU::Construct();
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            RCU::Destruct();
+        }
+    };
+
+    TYPED_TEST_CASE_P( MichaelMap );
+
+    TYPED_TEST_P( MichaelMap, compare )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        typedef cc::MichaelKVList< rcu_type, key_type, value_type,
+            typename cc::michael_list::make_traits<
+                cds::opt::compare< typename TestFixture::cmp >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashMap< rcu_type, list_type, 
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< typename TestFixture::hash1 >
+            >::type
+        > map_type;
+
+        map_type m( TestFixture::kSize, 2 );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( MichaelMap, less )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        typedef cc::MichaelKVList< rcu_type, key_type, value_type,
+            typename cc::michael_list::make_traits<
+                cds::opt::less< typename TestFixture::less >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashMap< rcu_type, list_type, 
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< typename TestFixture::hash1 >
+            >::type
+        > map_type;
+
+        map_type m( TestFixture::kSize, 2 );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( MichaelMap, cmpmix )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct list_traits : public cc::michael_list::traits
+        {
+            typedef typename TestFixture::less less;
+            typedef typename TestFixture::cmp compare;
+        };
+        typedef cc::MichaelKVList< rcu_type, key_type, value_type, list_traits > list_type;
+
+        typedef cc::MichaelHashMap< rcu_type, list_type,
+            typename cc::michael_map::make_traits<
+                cds::opt::hash< typename TestFixture::hash1 >
+            >::type
+        > map_type;
+
+        map_type m( TestFixture::kSize, 2 );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( MichaelMap, backoff )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct list_traits : public cc::michael_list::traits
+        {
+            typedef typename TestFixture::cmp compare;
+            typedef cds::backoff::exponential<cds::backoff::pause, cds::backoff::yield> back_off;
+        };
+        typedef cc::MichaelKVList< rcu_type, key_type, value_type, list_traits > list_type;
+
+        struct map_traits : public cc::michael_map::traits
+        {
+            typedef typename TestFixture::hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashMap< rcu_type, list_type, map_traits >map_type;
+
+        map_type m( TestFixture::kSize, 4 );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( MichaelMap, seq_cst )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct list_traits : public cc::michael_list::traits
+        {
+            typedef typename TestFixture::less less;
+            typedef cds::backoff::pause back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::MichaelKVList< rcu_type, key_type, value_type, list_traits > list_type;
+
+        struct map_traits : public cc::michael_map::traits
+        {
+            typedef typename TestFixture::hash1 hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashMap< rcu_type, list_type, map_traits >map_type;
+
+        map_type m( TestFixture::kSize, 4 );
+        this->test( m );
+    }
+
+
+    REGISTER_TYPED_TEST_CASE_P( MichaelMap,
+        compare, less, cmpmix, backoff, seq_cst
+    );
+}
+
+#endif // CDSUNIT_MAP_TEST_MICHAEL_MICHAEL_RCU_H
\ No newline at end of file
diff --git a/test/unit/map/test_skiplist_hp.h b/test/unit/map/test_skiplist_hp.h
new file mode 100644 (file)
index 0000000..59e4d59
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_MAP_TEST_SKIPLIST_HP_H
+#define CDSUNIT_MAP_TEST_SKIPLIST_HP_H
+
+#include "test_map_hp.h"
+
+namespace cds_test {
+
+    class skiplist_map_hp: public container_map_hp
+    {
+        typedef container_map_hp base_class;
+
+    protected:
+        template <class Map>
+        void test( Map& m )
+        {
+            // Precondition: map is empty
+            // Postcondition: map is empty
+
+            base_class::test( m );
+
+            ASSERT_TRUE( m.empty());
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            typedef typename Map::value_type map_pair;
+            size_t const kkSize = base_class::kSize;
+
+            std::vector<key_type> arrKeys;
+            for ( int i = 0; i < static_cast<int>(kkSize); ++i )
+                arrKeys.push_back( key_type( i ));
+            shuffle( arrKeys.begin(), arrKeys.end());
+
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i ) );
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            // extract_min
+            typedef typename Map::guarded_ptr guarded_ptr;
+            guarded_ptr gp;
+
+            int nKey = -1;
+            size_t nCount = 0;
+            while ( !m.empty() ) {
+                gp = m.extract_min();
+                ASSERT_FALSE( !gp );
+                EXPECT_EQ( gp->first.nKey, nKey + 1 );
+                nKey = gp->first.nKey;
+                ++nCount;
+            }
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+            EXPECT_EQ( nCount, kkSize );
+
+            // extract_max
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i ) );
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            nKey = kkSize;
+            nCount = 0;
+            while ( !m.empty() ) {
+                gp = m.extract_max();
+                ASSERT_FALSE( !gp );
+                EXPECT_EQ( gp->first.nKey, nKey - 1 );
+                nKey = gp->first.nKey;
+                ++nCount;
+            }
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+            EXPECT_EQ( nCount, kkSize );
+        }
+    };
+
+} // namespace cds_test
+
+#endif // #ifndef CDSUNIT_MAP_TEST_SKIPLIST_HP_H
diff --git a/test/unit/map/test_skiplist_rcu.h b/test/unit/map/test_skiplist_rcu.h
new file mode 100644 (file)
index 0000000..ea0d3ed
--- /dev/null
@@ -0,0 +1,255 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_MAP_TEST_SKIPLIST_RCU_H
+#define CDSUNIT_MAP_TEST_SKIPLIST_RCU_H
+
+#include "test_map_rcu.h"
+#include <cds/container/skip_list_map_rcu.h>
+
+namespace cc = cds::container;
+
+template <class RCU>
+class SkipListMap: public cds_test::container_map_rcu
+{
+    typedef cds_test::container_map_rcu base_class;
+public:
+    typedef cds::urcu::gc<RCU> rcu_type;
+
+protected:
+    template <typename Map>
+    void test( Map& m )
+    {
+        // Precondition: map is empty
+        // Postcondition: map is empty
+
+        base_class::test( m );
+
+        ASSERT_TRUE( m.empty() );
+        ASSERT_CONTAINER_SIZE( m, 0 );
+
+        typedef typename Map::value_type map_pair;
+        typedef typename Map::exempt_ptr exempt_ptr;
+        size_t const kkSize = base_class::kSize;
+
+        // get_min
+        for ( int i = static_cast<int>(kkSize); i > 0; --i )
+            ASSERT_TRUE( m.insert( i ));
+
+        exempt_ptr xp;
+
+        size_t nCount = 0;
+        int nKey = 0;
+        while ( !m.empty() ) {
+            xp = m.extract_min();
+            ASSERT_FALSE( !xp );
+            EXPECT_EQ( xp->first.nKey, nKey + 1 );
+            nKey = xp->first.nKey;
+            ++nCount;
+        }
+        xp = m.extract_min();
+        ASSERT_TRUE( !xp );
+        xp = m.extract_max();
+        ASSERT_TRUE( !xp );
+        EXPECT_EQ( kkSize, nCount );
+        ASSERT_TRUE( m.empty() );
+        ASSERT_CONTAINER_SIZE( m, 0 );
+
+        // get_max
+        for ( int i = 0; i < static_cast<int>(kkSize); ++i )
+            ASSERT_TRUE( m.insert( i ));
+
+        nKey = kkSize;
+        nCount = 0;
+        while ( !m.empty() ) {
+            xp = m.extract_max();
+            ASSERT_FALSE( !xp );
+            EXPECT_EQ( xp->first.nKey, nKey - 1 );
+            nKey = xp->first.nKey;
+            ++nCount;
+        }
+        xp = m.extract_min();
+        ASSERT_TRUE( !xp );
+        xp = m.extract_max();
+        ASSERT_TRUE( !xp );
+        EXPECT_EQ( kkSize, nCount );
+        ASSERT_TRUE( m.empty() );
+        ASSERT_CONTAINER_SIZE( m, 0 );
+    }
+
+    void SetUp()
+    {
+        RCU::Construct();
+        cds::threading::Manager::attachThread();
+    }
+
+    void TearDown()
+    {
+        cds::threading::Manager::detachThread();
+        RCU::Destruct();
+    }
+};
+
+TYPED_TEST_CASE_P( SkipListMap );
+
+TYPED_TEST_P( SkipListMap, compare )
+{
+    typedef typename TestFixture::rcu_type   rcu_type;
+    typedef typename TestFixture::key_type   key_type;
+    typedef typename TestFixture::value_type value_type;
+
+    typedef cc::SkipListMap< rcu_type, key_type, value_type,
+        typename cc::skip_list::make_traits<
+            cds::opt::compare< typename TestFixture::cmp >
+        >::type
+    > map_type;
+
+    map_type m;
+    this->test( m );
+}
+
+TYPED_TEST_P( SkipListMap, less )
+{
+    typedef typename TestFixture::rcu_type   rcu_type;
+    typedef typename TestFixture::key_type   key_type;
+    typedef typename TestFixture::value_type value_type;
+
+    typedef cc::SkipListMap< rcu_type, key_type, value_type,
+        typename cc::skip_list::make_traits<
+            cds::opt::less< typename TestFixture::less >
+        >::type
+    > map_type;
+
+    map_type m;
+    this->test( m );
+}
+
+TYPED_TEST_P( SkipListMap, cmpmix )
+{
+    typedef typename TestFixture::rcu_type   rcu_type;
+    typedef typename TestFixture::key_type   key_type;
+    typedef typename TestFixture::value_type value_type;
+
+    typedef cc::SkipListMap< rcu_type, key_type, value_type,
+        typename cc::skip_list::make_traits<
+            cds::opt::less< typename TestFixture::less >
+            ,cds::opt::compare< typename TestFixture::cmp >
+        >::type
+    > map_type;
+
+    map_type m;
+    this->test( m );
+}
+
+TYPED_TEST_P( SkipListMap, item_counting )
+{
+    typedef typename TestFixture::rcu_type   rcu_type;
+    typedef typename TestFixture::key_type   key_type;
+    typedef typename TestFixture::value_type value_type;
+
+    struct map_traits: public cc::skip_list::traits
+    {
+        typedef typename TestFixture::cmp compare;
+        typedef typename TestFixture::less less;
+        typedef cds::atomicity::item_counter item_counter;
+    };
+    typedef cc::SkipListMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+    map_type m;
+    this->test( m );
+}
+
+TYPED_TEST_P( SkipListMap, backoff )
+{
+    typedef typename TestFixture::rcu_type   rcu_type;
+    typedef typename TestFixture::key_type   key_type;
+    typedef typename TestFixture::value_type value_type;
+
+    struct map_traits: public cc::skip_list::traits
+    {
+        typedef typename TestFixture::cmp compare;
+        typedef typename TestFixture::less less;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::backoff::yield back_off;
+    };
+    typedef cc::SkipListMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+    map_type m;
+    this->test( m );
+}
+
+TYPED_TEST_P( SkipListMap, stat )
+{
+    typedef typename TestFixture::rcu_type   rcu_type;
+    typedef typename TestFixture::key_type   key_type;
+    typedef typename TestFixture::value_type value_type;
+
+    struct map_traits: public cc::skip_list::traits
+    {
+        typedef typename TestFixture::cmp compare;
+        typedef typename TestFixture::less less;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::backoff::yield back_off;
+        typedef cc::skip_list::stat<> stat;
+    };
+    typedef cc::SkipListMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+    map_type m;
+    this->test( m );
+}
+
+TYPED_TEST_P( SkipListMap, random_level_generator )
+{
+    typedef typename TestFixture::rcu_type   rcu_type;
+    typedef typename TestFixture::key_type   key_type;
+    typedef typename TestFixture::value_type value_type;
+
+    struct map_traits: public cc::skip_list::traits
+    {
+        typedef typename TestFixture::cmp compare;
+        typedef typename TestFixture::less less;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cc::skip_list::stat<> stat;
+        typedef cc::skip_list::xorshift random_level_generator;
+        typedef cds::opt::v::rcu_assert_deadlock rcu_check_deadlock;
+    };
+    typedef cc::SkipListMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+    map_type m;
+    this->test( m );
+}
+
+
+REGISTER_TYPED_TEST_CASE_P( SkipListMap,
+    compare, less, cmpmix, item_counting, backoff, stat, random_level_generator
+);
+
+
+#endif // CDSUNIT_MAP_TEST_SKIPLIST_RCU_H
\ No newline at end of file
diff --git a/test/unit/map/test_split_lazy_rcu.h b/test/unit/map/test_split_lazy_rcu.h
new file mode 100644 (file)
index 0000000..cd2ee04
--- /dev/null
@@ -0,0 +1,278 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_MAP_TEST_SPLIT_LIST_LAZY_RCU_H
+#define CDSUNIT_MAP_TEST_SPLIT_LIST_LAZY_RCU_H
+
+#include "test_map_rcu.h"
+#include <cds/container/lazy_list_rcu.h>
+#include <cds/container/split_list_map_rcu.h>
+
+namespace cc = cds::container;
+
+template <class RCU>
+class SplitListLazyMap: public cds_test::container_map_rcu
+{
+    typedef cds_test::container_map_rcu base_class;
+public:
+    typedef cds::urcu::gc<RCU> rcu_type;
+
+protected:
+    void SetUp()
+    {
+        RCU::Construct();
+        cds::threading::Manager::attachThread();
+    }
+
+    void TearDown()
+    {
+        cds::threading::Manager::detachThread();
+        RCU::Destruct();
+    }
+};
+
+TYPED_TEST_CASE_P( SplitListLazyMap );
+
+//TYPED_TEST_P( SplitListLazyMap, compare )
+TYPED_TEST_P( SplitListLazyMap, compare )
+{
+    typedef typename TestFixture::rcu_type   rcu_type;
+    typedef typename TestFixture::key_type   key_type;
+    typedef typename TestFixture::value_type value_type;
+    typedef typename TestFixture::hash1      hash1;
+
+    typedef cc::SplitListMap< rcu_type, key_type, value_type, 
+        typename cc::split_list::make_traits<
+            cc::split_list::ordered_list< cc::lazy_list_tag >
+            , cds::opt::hash< hash1 >
+            , cc::split_list::ordered_list_traits< 
+                typename cc::lazy_list::make_traits<
+                    cds::opt::compare< typename TestFixture::cmp >
+                >::type
+            >
+        >::type
+    > map_type;
+
+    map_type m( TestFixture::kSize, 2 );
+    this->test( m );
+}
+
+TYPED_TEST_P( SplitListLazyMap, less )
+{
+    typedef typename TestFixture::rcu_type   rcu_type;
+    typedef typename TestFixture::key_type   key_type;
+    typedef typename TestFixture::value_type value_type;
+    typedef typename TestFixture::hash1      hash1;
+
+    typedef cc::SplitListMap< rcu_type, key_type, value_type,
+        typename cc::split_list::make_traits<
+            cc::split_list::ordered_list< cc::lazy_list_tag >
+            , cds::opt::hash< hash1 >
+            , cc::split_list::ordered_list_traits< 
+                typename cc::lazy_list::make_traits<
+                    cds::opt::less< typename TestFixture::less >
+                >::type
+            >
+        >::type
+    > map_type;
+
+    map_type m( TestFixture::kSize, 4 );
+    this->test( m );
+}
+
+TYPED_TEST_P( SplitListLazyMap, cmpmix )
+{
+    typedef typename TestFixture::rcu_type   rcu_type;
+    typedef typename TestFixture::key_type   key_type;
+    typedef typename TestFixture::value_type value_type;
+    typedef typename TestFixture::hash1      hash1;
+
+    typedef cc::SplitListMap< rcu_type, key_type, value_type,
+        typename cc::split_list::make_traits<
+            cc::split_list::ordered_list< cc::lazy_list_tag >
+            , cds::opt::hash< hash1 >
+            , cc::split_list::ordered_list_traits< 
+                typename cc::lazy_list::make_traits<
+                    cds::opt::less< typename TestFixture::less >
+                    , cds::opt::compare< typename TestFixture::cmp >
+                >::type
+            >
+        >::type
+    > map_type;
+
+    map_type m( TestFixture::kSize, 2 );
+    this->test( m );
+}
+
+TYPED_TEST_P( SplitListLazyMap, item_counting )
+{
+    typedef typename TestFixture::rcu_type   rcu_type;
+    typedef typename TestFixture::key_type   key_type;
+    typedef typename TestFixture::value_type value_type;
+    typedef typename TestFixture::hash1      hash1;
+
+    struct map_traits: public cc::split_list::traits
+    {
+        typedef cc::lazy_list_tag ordered_list;
+        typedef hash1 hash;
+        typedef cds::atomicity::item_counter item_counter;
+
+        struct ordered_list_traits: public cc::lazy_list::traits
+        {
+            typedef typename TestFixture::cmp compare;
+            typedef typename TestFixture::less less;
+            typedef cds::backoff::empty back_off;
+        };
+    };
+    typedef cc::SplitListMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+    map_type m( TestFixture::kSize, 1 );
+    this->test( m );
+}
+
+TYPED_TEST_P( SplitListLazyMap, stat )
+{
+    typedef typename TestFixture::rcu_type   rcu_type;
+    typedef typename TestFixture::key_type   key_type;
+    typedef typename TestFixture::value_type value_type;
+    typedef typename TestFixture::hash1      hash1;
+
+    struct map_traits: public cc::split_list::traits
+    {
+        typedef cc::lazy_list_tag ordered_list;
+        typedef hash1 hash;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cc::split_list::stat<> stat;
+
+        struct ordered_list_traits: public cc::lazy_list::traits
+        {
+            typedef typename TestFixture::less less;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+    };
+    typedef cc::SplitListMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+    map_type m( TestFixture::kSize, 3 );
+    this->test( m );
+}
+
+TYPED_TEST_P( SplitListLazyMap, back_off )
+{
+    typedef typename TestFixture::rcu_type   rcu_type;
+    typedef typename TestFixture::key_type   key_type;
+    typedef typename TestFixture::value_type value_type;
+    typedef typename TestFixture::hash1      hash1;
+
+    struct map_traits: public cc::split_list::traits
+    {
+        typedef cc::lazy_list_tag ordered_list;
+        typedef hash1 hash;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::backoff::yield back_off;
+        typedef cds::opt::v::sequential_consistent memory_model;
+
+        struct ordered_list_traits: public cc::lazy_list::traits
+        {
+            typedef typename TestFixture::cmp compare;
+            typedef cds::backoff::pause back_off;
+        };
+    };
+    typedef cc::SplitListMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+    map_type m( TestFixture::kSize, 2 );
+    this->test( m );
+}
+
+TYPED_TEST_P( SplitListLazyMap, mutex )
+{
+    typedef typename TestFixture::rcu_type   rcu_type;
+    typedef typename TestFixture::key_type   key_type;
+    typedef typename TestFixture::value_type value_type;
+    typedef typename TestFixture::hash1      hash1;
+
+    struct map_traits: public cc::split_list::traits
+    {
+        typedef cc::lazy_list_tag ordered_list;
+        typedef hash1 hash;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::backoff::yield back_off;
+        typedef cds::opt::v::sequential_consistent memory_model;
+
+        struct ordered_list_traits: public cc::lazy_list::traits
+        {
+            typedef typename TestFixture::cmp compare;
+            typedef cds::backoff::pause back_off;
+            typedef std::mutex lock_type;
+        };
+    };
+    typedef cc::SplitListMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+    map_type m( TestFixture::kSize, 2 );
+    this->test( m );
+}
+
+namespace {
+    struct set_static_traits: public cc::split_list::traits
+    {
+        static bool const dynamic_bucket_table = false;
+    };
+}
+
+TYPED_TEST_P( SplitListLazyMap, static_bucket_table )
+{
+    typedef typename TestFixture::rcu_type   rcu_type;
+    typedef typename TestFixture::key_type   key_type;
+    typedef typename TestFixture::value_type value_type;
+    typedef typename TestFixture::hash1      hash1;
+
+    struct map_traits: public set_static_traits
+    {
+        typedef cc::lazy_list_tag ordered_list;
+        typedef hash1 hash;
+        typedef cds::atomicity::item_counter item_counter;
+
+        struct ordered_list_traits: public cc::lazy_list::traits
+        {
+            typedef typename TestFixture::cmp compare;
+            typedef cds::backoff::pause back_off;
+        };
+    };
+    typedef cc::SplitListMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+    map_type m( TestFixture::kSize, 4 );
+    this->test( m );
+}
+
+REGISTER_TYPED_TEST_CASE_P( SplitListLazyMap,
+    compare, less, cmpmix, item_counting, stat, back_off, mutex, static_bucket_table
+);
+
+
+#endif // CDSUNIT_MAP_TEST_SPLIT_LIST_LAZY_RCU_H
\ No newline at end of file
diff --git a/test/unit/map/test_split_michael_rcu.h b/test/unit/map/test_split_michael_rcu.h
new file mode 100644 (file)
index 0000000..c73bf5f
--- /dev/null
@@ -0,0 +1,249 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_MAP_TEST_SPLIT_LIST_MICHAEL_RCU_H
+#define CDSUNIT_MAP_TEST_SPLIT_LIST_MICHAEL_RCU_H
+
+#include "test_map_rcu.h"
+#include <cds/container/michael_list_rcu.h>
+#include <cds/container/split_list_map_rcu.h>
+
+namespace cc = cds::container;
+
+template <class RCU>
+class SplitListMichaelMap: public cds_test::container_map_rcu
+{
+    typedef cds_test::container_map_rcu base_class;
+public:
+    typedef cds::urcu::gc<RCU> rcu_type;
+
+protected:
+    void SetUp()
+    {
+        RCU::Construct();
+        cds::threading::Manager::attachThread();
+    }
+
+    void TearDown()
+    {
+        cds::threading::Manager::detachThread();
+        RCU::Destruct();
+    }
+};
+
+TYPED_TEST_CASE_P( SplitListMichaelMap );
+
+TYPED_TEST_P( SplitListMichaelMap, compare )
+{
+    typedef typename TestFixture::rcu_type   rcu_type;
+    typedef typename TestFixture::key_type   key_type;
+    typedef typename TestFixture::value_type value_type;
+    typedef typename TestFixture::hash1      hash1;
+
+    typedef cc::SplitListMap< rcu_type, key_type, value_type, 
+        typename cc::split_list::make_traits<
+            cc::split_list::ordered_list< cc::michael_list_tag >
+            , cds::opt::hash< hash1 >
+            , cc::split_list::ordered_list_traits< 
+                typename cc::michael_list::make_traits<
+                    cds::opt::compare< typename TestFixture::cmp >
+                >::type
+            >
+        >::type
+    > map_type;
+
+    map_type m( TestFixture::kSize, 2 );
+    this->test( m );
+}
+
+TYPED_TEST_P( SplitListMichaelMap, less )
+{
+    typedef typename TestFixture::rcu_type   rcu_type;
+    typedef typename TestFixture::key_type   key_type;
+    typedef typename TestFixture::value_type value_type;
+    typedef typename TestFixture::hash1      hash1;
+
+    typedef cc::SplitListMap< rcu_type, key_type, value_type,
+        typename cc::split_list::make_traits<
+            cc::split_list::ordered_list< cc::michael_list_tag >
+            , cds::opt::hash< hash1 >
+            , cc::split_list::ordered_list_traits< 
+                typename cc::michael_list::make_traits<
+                    cds::opt::less< typename TestFixture::less >
+                >::type
+            >
+        >::type
+    > map_type;
+
+    map_type m( TestFixture::kSize, 2 );
+    this->test( m );
+}
+
+TYPED_TEST_P( SplitListMichaelMap, cmpmix )
+{
+    typedef typename TestFixture::rcu_type   rcu_type;
+    typedef typename TestFixture::key_type   key_type;
+    typedef typename TestFixture::value_type value_type;
+    typedef typename TestFixture::hash1      hash1;
+
+    typedef cc::SplitListMap< rcu_type, key_type, value_type,
+        typename cc::split_list::make_traits<
+            cc::split_list::ordered_list< cc::michael_list_tag >
+            , cds::opt::hash< hash1 >
+            , cc::split_list::ordered_list_traits< 
+                typename cc::michael_list::make_traits<
+                    cds::opt::less< typename TestFixture::less >
+                    , cds::opt::compare< typename TestFixture::cmp >
+                >::type
+            >
+        >::type
+    > map_type;
+
+    map_type m( TestFixture::kSize, 3 );
+    this->test( m );
+}
+
+TYPED_TEST_P( SplitListMichaelMap, item_counting )
+{
+    typedef typename TestFixture::rcu_type   rcu_type;
+    typedef typename TestFixture::key_type   key_type;
+    typedef typename TestFixture::value_type value_type;
+    typedef typename TestFixture::hash1      hash1;
+
+    struct map_traits: public cc::split_list::traits
+    {
+        typedef cc::michael_list_tag ordered_list;
+        typedef hash1 hash;
+        typedef cds::atomicity::item_counter item_counter;
+
+        struct ordered_list_traits: public cc::michael_list::traits
+        {
+            typedef typename TestFixture::cmp compare;
+            typedef typename TestFixture::less less;
+            typedef cds::backoff::empty back_off;
+        };
+    };
+    typedef cc::SplitListMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+    map_type m( TestFixture::kSize, 8 );
+    this->test( m );
+}
+
+TYPED_TEST_P( SplitListMichaelMap, stat )
+{
+    typedef typename TestFixture::rcu_type   rcu_type;
+    typedef typename TestFixture::key_type   key_type;
+    typedef typename TestFixture::value_type value_type;
+    typedef typename TestFixture::hash1      hash1;
+
+    struct map_traits: public cc::split_list::traits
+    {
+        typedef cc::michael_list_tag ordered_list;
+        typedef hash1 hash;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cc::split_list::stat<> stat;
+
+        struct ordered_list_traits: public cc::michael_list::traits
+        {
+            typedef typename TestFixture::less less;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+    };
+    typedef cc::SplitListMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+    map_type m( TestFixture::kSize, 4 );
+    this->test( m );
+}
+
+TYPED_TEST_P( SplitListMichaelMap, back_off )
+{
+    typedef typename TestFixture::rcu_type   rcu_type;
+    typedef typename TestFixture::key_type   key_type;
+    typedef typename TestFixture::value_type value_type;
+    typedef typename TestFixture::hash1      hash1;
+
+    struct map_traits: public cc::split_list::traits
+    {
+        typedef cc::michael_list_tag ordered_list;
+        typedef hash1 hash;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::backoff::yield back_off;
+        typedef cds::opt::v::sequential_consistent memory_model;
+
+        struct ordered_list_traits: public cc::michael_list::traits
+        {
+            typedef typename TestFixture::cmp compare;
+            typedef cds::backoff::pause back_off;
+        };
+    };
+    typedef cc::SplitListMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+    map_type m( TestFixture::kSize, 2 );
+    this->test( m );
+}
+
+namespace {
+    struct set_static_traits: public cc::split_list::traits
+    {
+        static bool const dynamic_bucket_table = false;
+    };
+}
+
+TYPED_TEST_P( SplitListMichaelMap, static_bucket_table )
+{
+    typedef typename TestFixture::rcu_type   rcu_type;
+    typedef typename TestFixture::key_type   key_type;
+    typedef typename TestFixture::value_type value_type;
+    typedef typename TestFixture::hash1      hash1;
+
+    struct map_traits: public set_static_traits
+    {
+        typedef cc::michael_list_tag ordered_list;
+        typedef hash1 hash;
+        typedef cds::atomicity::item_counter item_counter;
+
+        struct ordered_list_traits: public cc::michael_list::traits
+        {
+            typedef typename TestFixture::cmp compare;
+            typedef cds::backoff::pause back_off;
+        };
+    };
+    typedef cc::SplitListMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+    map_type m( TestFixture::kSize, 4 );
+    this->test( m );
+}
+
+REGISTER_TYPED_TEST_CASE_P( SplitListMichaelMap,
+    compare, less, cmpmix, item_counting, stat, back_off, static_bucket_table
+);
+
+
+#endif // CDSUNIT_MAP_TEST_SPLIT_LIST_MICHAEL_RCU_H
\ No newline at end of file
diff --git a/test/unit/misc/CMakeLists.txt b/test/unit/misc/CMakeLists.txt
new file mode 100644 (file)
index 0000000..e533d2a
--- /dev/null
@@ -0,0 +1,27 @@
+set(PACKAGE_NAME unit-misc)
+
+set(CDSGTEST_MISC_SOURCES
+    ../main.cpp
+    bitop.cpp
+    cxx11_atomic_class.cpp
+    cxx11_atomic_func.cpp
+    find_option.cpp
+    hash_tuple.cpp
+    permutation_generator.cpp
+    split_bitstring.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_executable(${PACKAGE_NAME} ${CDSGTEST_MISC_SOURCES})
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/unit/misc/bitop.cpp b/test/unit/misc/bitop.cpp
new file mode 100644 (file)
index 0000000..97a7589
--- /dev/null
@@ -0,0 +1,137 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include <gtest/gtest.h>
+
+#include <cds/algo/int_algo.h>
+#include <cds/os/timer.h>
+
+namespace {
+    class bitop : public ::testing::Test
+    {};
+
+    TEST_F( bitop, bitop32 )
+    {
+        uint32_t n = 0;
+
+        EXPECT_EQ( cds::bitop::MSB(n), 0 ) << "n=" << n;
+        EXPECT_EQ( cds::bitop::LSB( n ), 0 ) << "n=" << n;
+        EXPECT_EQ( cds::bitop::SBC( n ), 0 ) << "n=" << n;
+        EXPECT_EQ( cds::bitop::ZBC( n ), sizeof( n ) * 8 ) << "n=" << n;
+
+        int nBit = 1;
+        for ( n = 1; n != 0; n *= 2 ) {
+            EXPECT_EQ( cds::bitop::MSB( n ), nBit ) << "n=" << n;
+            EXPECT_EQ( cds::bitop::LSB( n ), nBit ) << "n=" << n;
+            EXPECT_EQ( cds::bitop::MSBnz( n ), nBit - 1 ) << "n=" << n;
+            EXPECT_EQ( cds::bitop::LSBnz( n ), nBit - 1 ) << "n=" << n;
+            EXPECT_EQ( cds::bitop::SBC( n ), 1 ) << "n=" << n;
+            EXPECT_EQ( cds::bitop::ZBC( n ), sizeof( n ) * 8  - 1 ) << "n=" << n;
+
+            ++nBit;
+        }
+    }
+
+    TEST_F( bitop, bitop64 )
+    {
+        uint64_t n = 0;
+
+        EXPECT_EQ( cds::bitop::MSB( n ), 0 ) << "n=" << n;
+        EXPECT_EQ( cds::bitop::LSB( n ), 0 ) << "n=" << n;
+        EXPECT_EQ( cds::bitop::SBC( n ), 0 ) << "n=" << n;
+        EXPECT_EQ( cds::bitop::ZBC( n ), sizeof( n ) * 8 ) << "n=" << n;
+
+        int nBit = 1;
+        for ( n = 1; n != 0; n *= 2 ) {
+            EXPECT_EQ( cds::bitop::MSB( n ), nBit ) << "n=" << n;
+            EXPECT_EQ( cds::bitop::LSB( n ), nBit ) << "n=" << n;
+            EXPECT_EQ( cds::bitop::MSBnz( n ), nBit - 1 ) << "n=" << n;
+            EXPECT_EQ( cds::bitop::LSBnz( n ), nBit - 1 ) << "n=" << n;
+            EXPECT_EQ( cds::bitop::SBC( n ), 1 ) << "n=" << n;
+            EXPECT_EQ( cds::bitop::ZBC( n ), sizeof( n ) * 8 - 1 ) << "n=" << n;
+
+            ++nBit;
+        }
+    }
+
+    TEST_F( bitop, floor_pow2 )
+    {
+        EXPECT_EQ( cds::beans::floor2( 0 ), 1 );
+        EXPECT_EQ( cds::beans::floor2( 1 ), 1 );
+        EXPECT_EQ( cds::beans::floor2( 2 ), 2 );
+        EXPECT_EQ( cds::beans::floor2( 3 ), 2 );
+        EXPECT_EQ( cds::beans::floor2( 4 ), 4 );
+        EXPECT_EQ( cds::beans::floor2( 5 ), 4 );
+        EXPECT_EQ( cds::beans::floor2( 7 ), 4 );
+        EXPECT_EQ( cds::beans::floor2( 8 ), 8 );
+        EXPECT_EQ( cds::beans::floor2( 9 ), 8 );
+
+        for ( uint32_t n = 2; n; n <<= 1 )
+        {
+            EXPECT_EQ( cds::beans::floor2( n - 1 ), n / 2 );
+            EXPECT_EQ( cds::beans::floor2( n + 1 ), n );
+        }
+
+        for ( uint64_t n = 2; n; n <<= 1 )
+        {
+            EXPECT_EQ( cds::beans::floor2( n - 1 ), n / 2 );
+            EXPECT_EQ( cds::beans::floor2( n ), n );
+            EXPECT_EQ( cds::beans::floor2( n + 1 ), n );
+        }
+    }
+
+    TEST_F( bitop, ceil_pow2 )
+    {
+        EXPECT_EQ( cds::beans::ceil2( 0 ), 1 );
+        EXPECT_EQ( cds::beans::ceil2( 1 ), 1 );
+        EXPECT_EQ( cds::beans::ceil2( 2 ), 2 );
+        EXPECT_EQ( cds::beans::ceil2( 3 ), 4 );
+        EXPECT_EQ( cds::beans::ceil2( 4 ), 4 );
+        EXPECT_EQ( cds::beans::ceil2( 5 ), 8 );
+        EXPECT_EQ( cds::beans::ceil2( 7 ), 8 );
+        EXPECT_EQ( cds::beans::ceil2( 8 ), 8 );
+        EXPECT_EQ( cds::beans::ceil2( 9 ), 16 );
+
+        for ( uint32_t n = 4; n < (uint32_t(1) << 31); n <<= 1 )
+        {
+            EXPECT_EQ( cds::beans::ceil2( n - 1 ), n );
+            EXPECT_EQ( cds::beans::ceil2( n ), n );
+            EXPECT_EQ( cds::beans::ceil2( n + 1 ), n * 2 );
+        }
+
+        for ( uint64_t n = 4; n < (uint64_t(1) << 63); n <<= 1 )
+        {
+            EXPECT_EQ( cds::beans::ceil2( n - 1 ), n );
+            EXPECT_EQ( cds::beans::ceil2( n ), n );
+            EXPECT_EQ( cds::beans::ceil2( n + 1 ), n * 2 );
+        }
+    }
+
+} // namespace
diff --git a/test/unit/misc/cxx11_atomic_class.cpp b/test/unit/misc/cxx11_atomic_class.cpp
new file mode 100644 (file)
index 0000000..4f3c13e
--- /dev/null
@@ -0,0 +1,850 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include <gtest/gtest.h>
+#include <cds/algo/atomic.h>
+#include "cxx11_convert_memory_order.h"
+
+namespace {
+    class cxx11_atomic_class: public ::testing::Test
+    {
+    protected:
+        template <typename AtomicFlag>
+        void do_test_atomic_flag_mo( AtomicFlag& f, atomics::memory_order order )
+        {
+            atomics::memory_order mo_clear = convert_to_store_order(order);
+            for ( int i = 0; i < 5; ++i ) {
+                EXPECT_TRUE( !f.test_and_set( order ));
+                EXPECT_TRUE( f.test_and_set( order ) );
+                f.clear( mo_clear );
+            }
+        }
+
+        template <typename AtomicFlag>
+        void do_test_atomic_flag( AtomicFlag& f)
+        {
+            f.clear();
+
+            for ( int i = 0; i < 5; ++i ) {
+                EXPECT_TRUE( !f.test_and_set());
+                EXPECT_TRUE( f.test_and_set() );
+                f.clear();
+            }
+
+            do_test_atomic_flag_mo( f, atomics::memory_order_relaxed );
+            //do_test_atomic_flag_mo( f, atomics::memory_order_consume );
+            do_test_atomic_flag_mo( f, atomics::memory_order_acquire );
+            do_test_atomic_flag_mo( f, atomics::memory_order_release );
+            do_test_atomic_flag_mo( f, atomics::memory_order_acq_rel );
+            do_test_atomic_flag_mo( f, atomics::memory_order_seq_cst );
+        }
+
+        template <class Atomic, typename Integral>
+        void do_test_atomic_type(Atomic& a)
+        {
+            typedef Integral    integral_type;
+
+            EXPECT_TRUE( a.is_lock_free() );
+            a.store( (integral_type) 0 );
+            EXPECT_EQ( a, 0 );
+            EXPECT_EQ( a.load(), 0 );
+
+            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
+                integral_type n = integral_type(42) << (nByte * 8);
+                EXPECT_EQ( a.exchange( n ), 0 );
+                EXPECT_EQ( a, n );
+                EXPECT_EQ( a.exchange( (integral_type) 0 ), n );
+                EXPECT_EQ( a.load(), 0 );
+            }
+
+            integral_type prev = a.load();
+            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
+                integral_type n = integral_type(42) << (nByte * 8);
+                integral_type expected = prev;
+
+                EXPECT_TRUE( a.compare_exchange_weak( expected, n));
+                EXPECT_EQ( expected, prev );
+                EXPECT_FALSE( a.compare_exchange_weak( expected, n));
+                EXPECT_EQ( expected, n );
+
+                prev = n;
+                EXPECT_EQ( a, n );
+            }
+
+            a = (integral_type) 0;
+
+            prev = a;
+            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
+                integral_type n = integral_type(42) << (nByte * 8);
+                integral_type expected = prev;
+
+                EXPECT_TRUE( a.compare_exchange_strong( expected, n));
+                EXPECT_EQ( expected, prev );
+                EXPECT_FALSE( a.compare_exchange_strong( expected, n));
+                EXPECT_EQ( expected, n );
+
+                prev = n;
+                EXPECT_EQ( a.load(), n );
+            }
+
+            EXPECT_EQ( a.exchange( (integral_type) 0 ), prev );
+        }
+
+        template <class Atomic, typename Integral>
+        void do_test_atomic_integral(Atomic& a)
+        {
+            do_test_atomic_type< Atomic, Integral >(a);
+
+            typedef Integral    integral_type;
+
+            // fetch_xxx testing
+            a.store( (integral_type) 0 );
+
+            // fetch_add
+            for ( size_t nByte = 0; nByte < sizeof(integral_type); ++nByte )
+            {
+                integral_type prev = a.load();
+                integral_type n = integral_type(42) << (nByte * 8);
+
+                EXPECT_EQ( a.fetch_add(n), prev);
+            }
+
+            // fetch_sub
+            for ( size_t nByte = sizeof(integral_type); nByte > 0; --nByte )
+            {
+                integral_type prev = a.load();
+                integral_type n = integral_type(42) << ((nByte - 1) * 8);
+
+                EXPECT_EQ( a.fetch_sub(n), prev);
+            }
+            EXPECT_EQ( a.load(), 0 );
+
+            // fetch_or / fetc_xor / fetch_and
+            for ( size_t nBit = 0; nBit < sizeof(integral_type) * 8; ++nBit )
+            {
+                integral_type prev = a.load()  ;;
+                integral_type mask = integral_type(1) << nBit;
+
+                EXPECT_EQ( a.fetch_or( mask ), prev );
+                prev = a.load();
+                EXPECT_EQ( ( prev & mask), mask);
+
+                EXPECT_EQ( a.fetch_and( (integral_type) ~mask ), prev );
+                prev = a.load();
+                EXPECT_EQ( integral_type(prev & mask), integral_type(0));
+
+                EXPECT_EQ( a.fetch_xor( mask ), prev );
+                prev = a.load();
+                EXPECT_EQ( integral_type( prev & mask), mask);
+            }
+            EXPECT_EQ( a.load(), (integral_type) -1 );
+
+
+            // op= testing
+            a = (integral_type) 0;
+
+            // +=
+            for ( size_t nByte = 0; nByte < sizeof(integral_type); ++nByte )
+            {
+                integral_type prev = a;
+                integral_type n = integral_type(42) << (nByte * 8);
+
+                EXPECT_EQ( (a += n), (prev + n));
+            }
+
+            // -=
+            for ( size_t nByte = sizeof(integral_type); nByte > 0; --nByte )
+            {
+                integral_type prev = a;
+                integral_type n = integral_type(42) << ((nByte - 1) * 8);
+
+                EXPECT_EQ( (a -= n),  prev - n );
+            }
+            EXPECT_EQ( a.load(), 0 );
+
+            // |= / ^= / &=
+            for ( size_t nBit = 0; nBit < sizeof(integral_type) * 8; ++nBit )
+            {
+                integral_type prev = a;
+                integral_type mask = integral_type(1) << nBit;
+
+                EXPECT_EQ( (a |= mask ), (prev | mask ));
+                prev = a;
+                EXPECT_EQ( ( prev & mask), mask);
+
+                EXPECT_EQ( (a &= (integral_type) ~mask ), ( prev & (integral_type) ~mask ));
+                prev = a;
+                EXPECT_EQ( ( prev & mask), 0);
+
+                EXPECT_EQ( (a ^= mask ), (prev ^ mask ));
+                prev = a;
+                EXPECT_EQ( ( prev & mask), mask);
+            }
+            EXPECT_EQ( a, (integral_type) -1 );
+        }
+
+        template <class Atomic, typename Integral>
+        void do_test_atomic_type( Atomic& a, atomics::memory_order order )
+        {
+            typedef Integral    integral_type;
+
+            const atomics::memory_order oLoad = convert_to_load_order( order );
+            const atomics::memory_order oStore = convert_to_store_order( order );
+
+            EXPECT_TRUE( a.is_lock_free() );
+            a.store((integral_type) 0, oStore );
+            EXPECT_EQ( a, 0 );
+            EXPECT_EQ( a.load( oLoad ), 0 );
+
+            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
+                integral_type n = integral_type(42) << (nByte * 8);
+                EXPECT_EQ( a.exchange( n, order ), 0 );
+                EXPECT_EQ( a.load( oLoad ), n );
+                EXPECT_EQ( a.exchange( (integral_type) 0, order ), n );
+                EXPECT_EQ( a.load( oLoad ), 0 );
+            }
+
+            integral_type prev = a.load( oLoad );
+            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
+                integral_type n = integral_type(42) << (nByte * 8);
+                integral_type expected = prev;
+
+                EXPECT_TRUE( a.compare_exchange_weak( expected, n, order, atomics::memory_order_relaxed));
+                EXPECT_EQ( expected, prev );
+                EXPECT_FALSE( a.compare_exchange_weak( expected, n, order, atomics::memory_order_relaxed));
+                EXPECT_EQ( expected, n );
+
+                prev = n;
+                EXPECT_EQ( a.load( oLoad ), n );
+            }
+
+            a.store( (integral_type) 0, oStore );
+
+            prev = a.load( oLoad );
+            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
+                integral_type n = integral_type(42) << (nByte * 8);
+                integral_type expected = prev;
+
+                EXPECT_TRUE( a.compare_exchange_strong( expected, n, order, atomics::memory_order_relaxed));
+                EXPECT_EQ( expected, prev );
+                EXPECT_FALSE( a.compare_exchange_strong( expected, n, order, atomics::memory_order_relaxed));
+                EXPECT_EQ( expected, n );
+
+                prev = n;
+                EXPECT_EQ( a.load( oLoad ), n );
+            }
+
+            EXPECT_EQ( a.exchange( (integral_type) 0, order ), prev );
+        }
+
+        template <class Atomic, typename Integral>
+        void do_test_atomic_integral( Atomic& a, atomics::memory_order order )
+        {
+            do_test_atomic_type< Atomic, Integral >( a, order );
+
+            typedef Integral    integral_type;
+
+            const atomics::memory_order oLoad = convert_to_load_order( order );
+            const atomics::memory_order oStore = convert_to_store_order( order );
+
+            // fetch_xxx testing
+            a.store( (integral_type) 0, oStore );
+
+            // fetch_add
+            for ( size_t nByte = 0; nByte < sizeof(integral_type); ++nByte )
+            {
+                integral_type prev = a.load( oLoad );
+                integral_type n = integral_type(42) << (nByte * 8);
+
+                EXPECT_EQ( a.fetch_add( n, order), prev);
+            }
+
+            // fetch_sub
+            for ( size_t nByte = sizeof(integral_type); nByte > 0; --nByte )
+            {
+                integral_type prev = a.load( oLoad );
+                integral_type n = integral_type(42) << ((nByte - 1) * 8);
+
+                EXPECT_EQ( a.fetch_sub( n, order ), prev);
+            }
+            EXPECT_EQ( a.load( oLoad ), 0 );
+
+            // fetch_or / fetc_xor / fetch_and
+            for ( size_t nBit = 0; nBit < sizeof(integral_type) * 8; ++nBit )
+            {
+                integral_type prev = a.load( oLoad )  ;;
+                integral_type mask = integral_type(1) << nBit;
+
+                EXPECT_EQ( a.fetch_or( mask, order ), prev );
+                prev = a.load( oLoad );
+                EXPECT_EQ( ( prev & mask), mask);
+
+                EXPECT_EQ( a.fetch_and( (integral_type) ~mask, order ), prev );
+                prev = a.load( oLoad );
+                EXPECT_EQ( ( prev & mask), 0);
+
+                EXPECT_EQ( a.fetch_xor( mask, order ), prev );
+                prev = a.load( oLoad );
+                EXPECT_EQ( ( prev & mask), mask);
+            }
+            EXPECT_EQ( a.load( oLoad ), (integral_type) -1 );
+        }
+
+
+
+        template <typename Atomic, typename Integral>
+        void test_atomic_integral_(Atomic& a)
+        {
+            do_test_atomic_integral<Atomic, Integral >(a);
+
+            do_test_atomic_integral<Atomic, Integral >( a, atomics::memory_order_relaxed );
+            do_test_atomic_integral<Atomic, Integral >( a, atomics::memory_order_acquire );
+            do_test_atomic_integral<Atomic, Integral >( a, atomics::memory_order_release );
+            do_test_atomic_integral<Atomic, Integral >( a, atomics::memory_order_acq_rel );
+            do_test_atomic_integral<Atomic, Integral >( a, atomics::memory_order_seq_cst );
+        }
+
+        template <typename Integral>
+        void test_atomic_integral()
+        {
+            typedef atomics::atomic<Integral> atomic_type;
+
+            atomic_type a[8];
+            for ( size_t i = 0; i < sizeof(a)/sizeof(a[0]); ++i ) {
+                test_atomic_integral_<atomic_type, Integral>( a[i] );
+            }
+        }
+        template <typename Integral>
+        void test_atomic_integral_volatile()
+        {
+            typedef atomics::atomic<Integral> volatile atomic_type;
+
+            atomic_type a[8];
+            for ( size_t i = 0; i < sizeof(a)/sizeof(a[0]); ++i ) {
+                test_atomic_integral_<atomic_type, Integral>( a[i] );
+            }
+        }
+
+        template <class AtomicBool>
+        void do_test_atomic_bool( AtomicBool& a )
+        {
+            EXPECT_TRUE( a.is_lock_free() );
+            a.store( false );
+            EXPECT_FALSE( a );
+            EXPECT_FALSE( a.load());
+
+            EXPECT_FALSE( a.exchange( true ));
+            EXPECT_TRUE( a.load());
+            EXPECT_TRUE( a.exchange( false ));
+            EXPECT_FALSE( a.load());
+
+            bool expected = false;
+            EXPECT_TRUE( a.compare_exchange_weak( expected, true));
+            EXPECT_FALSE( expected );
+            EXPECT_FALSE( a.compare_exchange_weak( expected, false));
+            EXPECT_TRUE( expected );
+            EXPECT_TRUE( a.load() );
+
+            a.store( false );
+
+            expected = false;
+            EXPECT_TRUE( a.compare_exchange_strong( expected, true));
+            EXPECT_FALSE( expected );
+            EXPECT_FALSE( a.compare_exchange_strong( expected, false));
+            EXPECT_TRUE( expected );
+
+            EXPECT_TRUE( a.load());
+
+            EXPECT_TRUE( a.exchange( false ));
+        }
+
+        template <class AtomicBool>
+        void do_test_atomic_bool( AtomicBool& a, atomics::memory_order order )
+        {
+            const atomics::memory_order oLoad = convert_to_load_order( order );
+            const atomics::memory_order oStore = convert_to_store_order( order );
+            const atomics::memory_order oExchange = convert_to_exchange_order( order );
+
+            EXPECT_TRUE( a.is_lock_free() );
+            a.store( false, oStore );
+            EXPECT_FALSE( a );
+            EXPECT_FALSE( a.load( oLoad ));
+
+            EXPECT_FALSE( a.exchange( true, oExchange ));
+            EXPECT_TRUE( a.load( oLoad ));
+            EXPECT_TRUE( a.exchange( false, oExchange ));
+            EXPECT_FALSE( a.load( oLoad ));
+
+            bool expected = false;
+            EXPECT_TRUE( a.compare_exchange_weak( expected, true, order, atomics::memory_order_relaxed));
+            EXPECT_FALSE( expected );
+            EXPECT_FALSE( a.compare_exchange_weak( expected, false, order, atomics::memory_order_relaxed));
+            EXPECT_TRUE( expected );
+            EXPECT_TRUE( a.load( oLoad ));
+
+            //a = bool(false);
+            a.store( false, oStore );
+
+            expected = false;
+            EXPECT_TRUE( a.compare_exchange_strong( expected, true, order, atomics::memory_order_relaxed));
+            EXPECT_FALSE( expected );
+            EXPECT_FALSE( a.compare_exchange_strong( expected, false, order, atomics::memory_order_relaxed));
+            EXPECT_TRUE( expected );
+
+            EXPECT_TRUE( a.load( oLoad ));
+
+            EXPECT_TRUE( a.exchange( false, oExchange ));
+        }
+
+
+        template <typename Atomic>
+        void do_test_atomic_pointer_void_( Atomic& a, char * arr, char aSize, atomics::memory_order order )
+        {
+            atomics::memory_order oLoad = convert_to_load_order(order);
+            atomics::memory_order oStore = convert_to_store_order(order);
+            void *  p;
+
+            a.store( (void *) arr, oStore );
+            EXPECT_EQ( *reinterpret_cast<char *>(a.load( oLoad )), 1 );
+
+            p = arr;
+            EXPECT_TRUE( a.compare_exchange_weak( p, (void *)(arr + 5), order, atomics::memory_order_relaxed ));
+            EXPECT_EQ( p, arr + 0 );
+            EXPECT_EQ( *reinterpret_cast<char *>(p), 1 );
+            EXPECT_FALSE( a.compare_exchange_weak( p, (void *)(arr + 3), order, atomics::memory_order_relaxed ));
+            EXPECT_EQ( p, arr + 5 );
+            EXPECT_EQ( *reinterpret_cast<char *>(p), 6 );
+
+            EXPECT_TRUE( a.compare_exchange_strong( p, (void *)(arr + 3), order, atomics::memory_order_relaxed ));
+            EXPECT_EQ( p, arr + 5 );
+            EXPECT_EQ( *reinterpret_cast<char *>(p), 6 );
+            EXPECT_FALSE( a.compare_exchange_strong( p, (void *)(arr + 5), order, atomics::memory_order_relaxed ));
+            EXPECT_EQ( p, arr + 3 );
+            EXPECT_EQ( *reinterpret_cast<char *>(p), 4 );
+
+            EXPECT_EQ( reinterpret_cast<char *>(a.exchange( (void *) arr, order )), arr + 3 );
+            EXPECT_EQ( reinterpret_cast<char *>(a.load( oLoad )), arr );
+            EXPECT_EQ( *reinterpret_cast<char *>(a.load( oLoad )), 1 );
+
+            for ( char i = 1; i < aSize; ++i ) {
+                EXPECT_EQ( *reinterpret_cast<char *>(a.load( oLoad )), i );
+                a.fetch_add( 1, order );
+                EXPECT_EQ( *reinterpret_cast<char *>(a.load( oLoad )), i + 1 );
+            }
+
+            for ( char i = aSize; i > 1; --i ) {
+                EXPECT_EQ( *reinterpret_cast<char *>(a.load( oLoad )), i );
+                a.fetch_sub( 1, order );
+                EXPECT_EQ( *reinterpret_cast<char *>(a.load( oLoad )), i - 1 );
+            }
+        }
+
+        template <bool Volatile>
+        void do_test_atomic_pointer_void()
+        {
+            typedef typename add_volatile<atomics::atomic< void *>, Volatile>::type    atomic_pointer;
+
+            char   arr[8];
+            const char aSize = sizeof(arr)/sizeof(arr[0]);
+            for ( char i = 0; i < aSize; ++i ) {
+                arr[unsigned(i)] = i + 1;
+            }
+
+            atomic_pointer  a;
+            void *  p;
+
+            a.store( (void *) arr );
+            EXPECT_EQ( *reinterpret_cast<char *>(a.load()), 1 );
+
+            p = arr;
+            EXPECT_TRUE( a.compare_exchange_weak( p, (void *)(arr + 5) ));
+            EXPECT_EQ( p, arr + 0 );
+            EXPECT_FALSE( a.compare_exchange_weak( p, (void *)(arr + 3) ));
+            EXPECT_EQ( p, arr + 5 );
+
+            EXPECT_TRUE( a.compare_exchange_strong( p, (void *)(arr + 3) ));
+            EXPECT_EQ( p, arr + 5 );
+            EXPECT_FALSE( a.compare_exchange_strong( p, (void *)(arr + 5) ));
+            EXPECT_EQ( p, arr + 3 );
+
+            EXPECT_EQ( reinterpret_cast<char *>( a.exchange( (void *) arr )), arr + 3 );
+            EXPECT_EQ( reinterpret_cast<char *>( a.load()), arr );
+            EXPECT_EQ( *reinterpret_cast<char *>( a.load()), 1 );
+
+            for ( char i = 1; i < aSize; ++i ) {
+                EXPECT_EQ( *reinterpret_cast<char *>(a.load()), i );
+                a.fetch_add( 1 );
+                EXPECT_EQ( *reinterpret_cast<char *>(a.load()), i + 1 );
+            }
+
+            for ( char i = aSize; i > 1; --i ) {
+                EXPECT_EQ( *reinterpret_cast<char *>(a.load()), i );
+                a.fetch_sub( 1 );
+                EXPECT_EQ( *reinterpret_cast<char *>(a.load()), i - 1 );
+            }
+
+            do_test_atomic_pointer_void_( a, arr, aSize, atomics::memory_order_relaxed );
+            do_test_atomic_pointer_void_( a, arr, aSize, atomics::memory_order_acquire );
+            do_test_atomic_pointer_void_( a, arr, aSize, atomics::memory_order_release );
+            do_test_atomic_pointer_void_( a, arr, aSize, atomics::memory_order_acq_rel );
+            do_test_atomic_pointer_void_( a, arr, aSize, atomics::memory_order_seq_cst );
+        }
+
+        template <typename Atomic, typename Integral>
+        void test_atomic_pointer_for_( Atomic& a, Integral * arr, Integral aSize, atomics::memory_order order )
+        {
+            typedef Integral integral_type;
+            atomics::memory_order oLoad = convert_to_load_order(order);
+            atomics::memory_order oStore = convert_to_store_order(order);
+            integral_type *  p;
+
+            a.store( arr, oStore );
+            EXPECT_EQ( *a.load( oLoad ), 1 );
+
+            p = arr;
+            EXPECT_TRUE( a.compare_exchange_weak( p, arr + 5, order, atomics::memory_order_relaxed ));
+            EXPECT_EQ( p, arr + 0 );
+            EXPECT_EQ( *p, 1 );
+            EXPECT_FALSE( a.compare_exchange_weak( p, arr + 3, order, atomics::memory_order_relaxed ));
+            EXPECT_EQ( p, arr + 5 );
+            EXPECT_EQ( *p, 6 );
+
+            EXPECT_TRUE( a.compare_exchange_strong( p, arr + 3, order, atomics::memory_order_relaxed ));
+            EXPECT_EQ( p, arr + 5 );
+            EXPECT_EQ( *p, 6 );
+            EXPECT_FALSE( a.compare_exchange_strong( p, arr + 5, order, atomics::memory_order_relaxed ));
+            EXPECT_EQ( p, arr + 3 );
+            EXPECT_EQ( *p, 4 );
+
+            EXPECT_EQ( a.exchange( arr, order ), arr + 3 );
+            EXPECT_EQ( a.load( oLoad ), arr );
+            EXPECT_EQ( *a.load( oLoad ), 1 );
+
+            for ( integral_type i = 1; i < aSize; ++i ) {
+                integral_type * p = a.load();
+                EXPECT_EQ( *p, i );
+                EXPECT_EQ( a.fetch_add( 1, order ), p );
+                EXPECT_EQ( *a.load( oLoad ), i + 1 );
+            }
+
+            for ( integral_type i = aSize; i > 1; --i ) {
+                integral_type * p = a.load();
+                EXPECT_EQ( *p, i  );
+                EXPECT_EQ( a.fetch_sub( 1, order ), p );
+                EXPECT_EQ( *a.load( oLoad ), i - 1 );
+            }
+        }
+
+        template <typename Integral, bool Volatile>
+        void test_atomic_pointer_for()
+        {
+            typedef Integral integral_type;
+            typedef typename add_volatile<atomics::atomic< integral_type *>, Volatile>::type    atomic_pointer;
+
+            integral_type   arr[8];
+            const integral_type aSize = sizeof(arr)/sizeof(arr[0]);
+            for ( integral_type i = 0; i < aSize; ++i ) {
+                arr[size_t(i)] = i + 1;
+            }
+
+            atomic_pointer  a;
+            integral_type *  p;
+
+            a.store( arr );
+            EXPECT_EQ( *a.load(), 1 );
+
+            p = arr;
+            EXPECT_TRUE( a.compare_exchange_weak( p, arr + 5 ));
+            EXPECT_EQ( p, arr + 0 );
+            EXPECT_EQ( *p, 1 );
+            EXPECT_FALSE( a.compare_exchange_weak( p, arr + 3 ));
+            EXPECT_EQ( p, arr + 5 );
+            EXPECT_EQ( *p, 6 );
+
+            EXPECT_TRUE( a.compare_exchange_strong( p, arr + 3 ));
+            EXPECT_EQ( p, arr + 5 );
+            EXPECT_EQ( *p, 6 );
+            EXPECT_FALSE( a.compare_exchange_strong( p, arr + 5 ));
+            EXPECT_EQ( p, arr + 3 );
+            EXPECT_EQ( *p, 4 );
+
+            EXPECT_EQ( a.exchange( arr ), arr + 3 );
+            EXPECT_EQ( a.load(), arr );
+            EXPECT_EQ( *a.load(), 1 );
+
+            for ( integral_type i = 1; i < aSize; ++i ) {
+                integral_type * p = a.load();
+                EXPECT_EQ( *p, i );
+                integral_type * pa = a.fetch_add( 1 );
+                EXPECT_EQ( pa, p );
+                EXPECT_EQ( *a.load(), i + 1 );
+            }
+
+            for ( integral_type i = aSize; i > 1; --i ) {
+                integral_type * p = a.load();
+                EXPECT_EQ( *p, i  );
+                EXPECT_EQ( a.fetch_sub( 1 ), p );
+                EXPECT_EQ( *a.load(), i - 1 );
+            }
+
+            test_atomic_pointer_for_( a, arr, aSize, atomics::memory_order_relaxed );
+            test_atomic_pointer_for_( a, arr, aSize, atomics::memory_order_acquire );
+            test_atomic_pointer_for_( a, arr, aSize, atomics::memory_order_release );
+            test_atomic_pointer_for_( a, arr, aSize, atomics::memory_order_acq_rel );
+            test_atomic_pointer_for_( a, arr, aSize, atomics::memory_order_seq_cst );
+        }
+
+    public:
+        void test_atomic_flag()
+        {
+            // Array to test different alignment
+
+            atomics::atomic_flag flags[8];
+            for ( size_t i = 0; i < sizeof(flags)/sizeof(flags[0]); ++i )
+                do_test_atomic_flag( flags[i] );
+        }
+
+        void test_atomic_flag_volatile()
+        {
+            // Array to test different alignment
+
+            atomics::atomic_flag volatile flags[8];
+            for ( size_t i = 0; i < sizeof(flags)/sizeof(flags[0]); ++i )
+                do_test_atomic_flag( flags[i] );
+        }
+
+        template <typename AtomicBool>
+        void test_atomic_bool_()
+        {
+            // Array to test different alignment
+            AtomicBool  a[8];
+
+            for ( size_t i = 0; i < sizeof(a)/sizeof(a[0]); ++i ) {
+                do_test_atomic_bool( a[i] );
+
+                do_test_atomic_bool( a[i], atomics::memory_order_relaxed );
+                //do_test_atomic_bool( a[i], atomics::memory_order_consume );
+                do_test_atomic_bool( a[i], atomics::memory_order_acquire );
+                do_test_atomic_bool( a[i], atomics::memory_order_release );
+                do_test_atomic_bool( a[i], atomics::memory_order_acq_rel );
+                do_test_atomic_bool( a[i], atomics::memory_order_seq_cst );
+            }
+        }
+
+        void test_atomic_bool()
+        {
+            test_atomic_bool_< atomics::atomic<bool> >();
+        }
+        void test_atomic_bool_volatile()
+        {
+            test_atomic_bool_< atomics::atomic<bool> volatile >();
+        }
+    };
+
+    TEST_F( cxx11_atomic_class, atomic_char )
+    {
+        test_atomic_integral<char>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_signed_char )
+    {
+        test_atomic_integral<signed char>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_unsigned_char )
+    {
+        test_atomic_integral<unsigned char>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_short_int )
+    {
+        test_atomic_integral<short int>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_signed_short_int )
+    {
+        test_atomic_integral<signed short int>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_unsigned_short_int )
+    {
+        test_atomic_integral<unsigned short int>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_int )
+    {
+        test_atomic_integral<int>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_unsigned_int )
+    {
+        test_atomic_integral<unsigned int>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_long )
+    {
+        test_atomic_integral<long>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_unsigned_long )
+    {
+        test_atomic_integral<unsigned long>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_long_long )
+    {
+        test_atomic_integral<long long>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_unsigned_long_long )
+    {
+        test_atomic_integral<unsigned long long>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_char_volatile )
+    {
+        test_atomic_integral_volatile<char>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_signed_char_volatile )
+    {
+        test_atomic_integral_volatile<signed char>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_unsigned_char_volatile )
+    {
+        test_atomic_integral_volatile<unsigned char>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_short_int_volatile )
+    {
+        test_atomic_integral_volatile<short int>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_signed_short_int_volatile )
+    {
+        test_atomic_integral_volatile<signed short int>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_unsigned_short_int_volatile )
+    {
+        test_atomic_integral_volatile<unsigned short int>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_int_volatile )
+    {
+        test_atomic_integral_volatile<int>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_unsigned_int_volatile )
+    {
+        test_atomic_integral_volatile<unsigned int>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_long_volatile )
+    {
+        test_atomic_integral_volatile<long>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_unsigned_long_volatile )
+    {
+        test_atomic_integral_volatile<unsigned long>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_long_long_volatile )
+    {
+        test_atomic_integral_volatile<long long>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_unsigned_long_long_volatile )
+    {
+        test_atomic_integral_volatile<unsigned long long>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_pointer_void )
+    {
+        do_test_atomic_pointer_void<false>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_pointer_void_volatile )
+    {
+        do_test_atomic_pointer_void<true>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_pointer_char )
+    {
+        test_atomic_pointer_for<char, false>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_pointer_char_volatile )
+    {
+        test_atomic_pointer_for<char, true>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_pointer_short )
+    {
+        test_atomic_pointer_for<short int, false>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_pointer_short_volatile )
+    {
+        test_atomic_pointer_for<short int, true>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_pointer_int )
+    {
+        test_atomic_pointer_for<int, false>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_pointer_int_volatile )
+    {
+        test_atomic_pointer_for<int, true>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_pointer_long )
+    {
+        test_atomic_pointer_for<long, false>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_pointer_long_volatile )
+    {
+        test_atomic_pointer_for<long, true>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_pointer_long_long )
+    {
+        test_atomic_pointer_for<long long, false>();
+    }
+
+    TEST_F( cxx11_atomic_class, atomic_pointer_long_long_volatile )
+    {
+        test_atomic_pointer_for<long long, true>();
+    }
+}   // namespace 
diff --git a/test/unit/misc/cxx11_atomic_func.cpp b/test/unit/misc/cxx11_atomic_func.cpp
new file mode 100644 (file)
index 0000000..e56b8ec
--- /dev/null
@@ -0,0 +1,776 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include <gtest/gtest.h>
+#include <cds/algo/atomic.h>
+
+#ifndef CDS_USE_BOOST_ATOMIC
+// Skip this test for boost.atomic
+// Boost.atomic has no free atomic functions implementation.
+
+#include "cxx11_convert_memory_order.h"
+
+namespace misc {
+
+    class cxx11_atomic_func: public ::testing::Test
+    {
+    protected:
+        template <typename AtomicFlag>
+        void do_test_atomic_flag_mo( AtomicFlag& f, atomics::memory_order order )
+        {
+            atomics::memory_order mo_clear = convert_to_store_order(order);
+
+            f.clear( convert_to_store_order(order) );
+
+            for ( int i = 0; i < 5; ++i ) {
+                EXPECT_FALSE( atomics::atomic_flag_test_and_set_explicit( &f, order ));
+                EXPECT_TRUE( atomics::atomic_flag_test_and_set_explicit( &f, order ) );
+                atomics::atomic_flag_clear_explicit( &f, mo_clear );
+                atomics::atomic_flag_clear_explicit( &f, mo_clear );
+            }
+        }
+
+        template <typename AtomicFlag>
+        void do_test_atomic_flag( AtomicFlag& f )
+        {
+            f.clear();
+
+            for ( int i = 0; i < 5; ++i ) {
+                EXPECT_FALSE( atomics::atomic_flag_test_and_set( &f ));
+                EXPECT_TRUE( atomics::atomic_flag_test_and_set( &f ) );
+                atomics::atomic_flag_clear(&f);
+                atomics::atomic_flag_clear(&f);
+            }
+
+            do_test_atomic_flag_mo( f, atomics::memory_order_relaxed );
+            do_test_atomic_flag_mo( f, atomics::memory_order_acquire );
+            do_test_atomic_flag_mo( f, atomics::memory_order_release );
+            do_test_atomic_flag_mo( f, atomics::memory_order_acq_rel );
+            do_test_atomic_flag_mo( f, atomics::memory_order_seq_cst );
+        }
+
+        template <class Atomic, typename Integral>
+        void do_test_atomic_type(Atomic& a )
+        {
+            typedef Integral    integral_type;
+
+            EXPECT_TRUE( atomics::atomic_is_lock_free( &a ) );
+            atomics::atomic_store( &a, (integral_type) 0 );
+            EXPECT_EQ( a, 0 );
+            EXPECT_EQ( atomics::atomic_load( &a ), 0 );
+
+            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
+                integral_type n = integral_type(42) << (nByte * 8);
+                EXPECT_EQ( atomics::atomic_exchange( &a, n ), 0 );
+                EXPECT_EQ( atomics::atomic_load( &a ), n );
+                EXPECT_EQ( atomics::atomic_exchange( &a, (integral_type) 0 ), n );
+                EXPECT_EQ( atomics::atomic_load( &a ), 0 );
+            }
+
+            integral_type prev = atomics::atomic_load( &a );
+            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
+                integral_type n = integral_type(42) << (nByte * 8);
+                integral_type expected = prev;
+
+                EXPECT_TRUE( atomics::atomic_compare_exchange_weak( &a, &expected, n));
+                EXPECT_EQ( expected, prev );
+                EXPECT_NE( expected, n );
+                EXPECT_FALSE( atomics::atomic_compare_exchange_weak( &a, &expected, n) );
+                EXPECT_EQ( expected, n );
+
+                prev = n;
+                EXPECT_EQ( atomics::atomic_load( &a ), n );
+            }
+
+            atomics::atomic_store( &a, (integral_type) 0 );
+
+            prev = atomics::atomic_load( &a );
+            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
+                integral_type n = integral_type(42) << (nByte * 8);
+                integral_type expected = prev;
+
+                EXPECT_TRUE( atomics::atomic_compare_exchange_strong( &a, &expected, n));
+                EXPECT_EQ( expected, prev );
+                EXPECT_FALSE( atomics::atomic_compare_exchange_strong( &a, &expected, n));
+                EXPECT_EQ( expected, n );
+
+                prev = n;
+                EXPECT_EQ( atomics::atomic_load( &a ), n );
+            }
+
+            EXPECT_EQ( atomics::atomic_exchange( &a, (integral_type) 0 ), prev );
+        }
+
+        template <class Atomic, typename Integral>
+        void do_test_atomic_integral( Atomic& a )
+        {
+            do_test_atomic_type< Atomic, Integral >( a );
+
+            typedef Integral    integral_type;
+
+            // fetch_xxx testing
+            atomics::atomic_store( &a, (integral_type) 0 );
+
+            // fetch_add
+            for ( size_t nByte = 0; nByte < sizeof(integral_type); ++nByte )
+            {
+                integral_type prev = atomics::atomic_load( &a );
+                integral_type n = integral_type(42) << (nByte * 8);
+
+                EXPECT_EQ( atomics::atomic_fetch_add( &a, n ), prev );
+            }
+
+            // fetch_sub
+            for ( size_t nByte = sizeof(integral_type); nByte > 0; --nByte )
+            {
+                integral_type prev = atomics::atomic_load( &a );
+                integral_type n = integral_type(42) << ((nByte - 1) * 8);
+
+                EXPECT_EQ( atomics::atomic_fetch_sub( &a, n ), prev );
+            }
+            EXPECT_EQ( atomics::atomic_load( &a ), 0 );
+
+            // fetch_or / fetc_xor / fetch_and
+            for ( size_t nBit = 0; nBit < sizeof(integral_type) * 8; ++nBit )
+            {
+                integral_type prev = atomics::atomic_load( &a );
+                integral_type mask = integral_type(1) << nBit;
+
+                EXPECT_EQ( atomics::atomic_fetch_or( &a, mask ), prev );
+                prev = atomics::atomic_load( &a );
+                EXPECT_EQ( ( prev & mask ), mask );
+
+                EXPECT_EQ( atomics::atomic_fetch_and( &a, (integral_type) ~mask ), prev );
+                prev = atomics::atomic_load( &a );
+                EXPECT_EQ( integral_type(prev & mask), integral_type(0));
+
+                EXPECT_EQ( atomics::atomic_fetch_xor( &a, mask ), prev );
+                prev = atomics::atomic_load( &a );
+                EXPECT_EQ( ( prev & mask), mask);
+            }
+            EXPECT_EQ( atomics::atomic_load( &a ), (integral_type) -1 );
+        }
+
+        template <class Atomic, typename Integral>
+        void do_test_atomic_type( Atomic& a, atomics::memory_order order )
+        {
+            typedef Integral    integral_type;
+
+            const atomics::memory_order oLoad = convert_to_load_order( order );
+            const atomics::memory_order oStore = convert_to_store_order( order );
+
+            EXPECT_TRUE( atomics::atomic_is_lock_free( &a ) );
+            atomics::atomic_store_explicit( &a, (integral_type) 0, oStore );
+            EXPECT_EQ( a, 0 );
+            EXPECT_EQ( atomics::atomic_load_explicit( &a, oLoad ), 0 );
+
+            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
+                integral_type n = integral_type(42) << (nByte * 8);
+                EXPECT_EQ( atomics::atomic_exchange_explicit( &a, n, order ), 0 );
+                EXPECT_EQ( atomics::atomic_load_explicit( &a, oLoad ), n );
+                EXPECT_EQ( atomics::atomic_exchange_explicit( &a, (integral_type) 0, order ), n );
+                EXPECT_EQ( atomics::atomic_load_explicit( &a, oLoad ), 0 );
+            }
+
+            integral_type prev = atomics::atomic_load_explicit( &a, oLoad );
+            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
+                integral_type n = integral_type(42) << (nByte * 8);
+                integral_type expected = prev;
+
+                EXPECT_TRUE( atomics::atomic_compare_exchange_weak_explicit( &a, &expected, n, order, atomics::memory_order_relaxed));
+                EXPECT_EQ( expected, prev );
+                EXPECT_FALSE( atomics::atomic_compare_exchange_weak_explicit( &a, &expected, n, order, atomics::memory_order_relaxed));
+                EXPECT_EQ( expected, n );
+
+                prev = n;
+                EXPECT_EQ( atomics::atomic_load_explicit( &a, oLoad ), n );
+            }
+
+            atomics::atomic_store_explicit( &a, (integral_type) 0, oStore );
+
+            prev = atomics::atomic_load_explicit( &a, oLoad );
+            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
+                integral_type n = integral_type(42) << (nByte * 8);
+                integral_type expected = prev;
+
+                EXPECT_TRUE( atomics::atomic_compare_exchange_strong_explicit( &a, &expected, n, order, atomics::memory_order_relaxed));
+                EXPECT_EQ( expected, prev );
+                EXPECT_FALSE( atomics::atomic_compare_exchange_strong_explicit( &a, &expected, n, order, atomics::memory_order_relaxed));
+                EXPECT_EQ( expected, n );
+
+                prev = n;
+                EXPECT_EQ( atomics::atomic_load_explicit( &a, oLoad ), n );
+            }
+
+            EXPECT_EQ( atomics::atomic_exchange_explicit( &a, (integral_type) 0, order ), prev );
+        }
+
+        template <class Atomic, typename Integral>
+        void do_test_atomic_integral( Atomic& a, atomics::memory_order order )
+        {
+            do_test_atomic_type< Atomic, Integral >( a, order );
+            typedef Integral    integral_type;
+
+            const atomics::memory_order oLoad = convert_to_load_order( order );
+            const atomics::memory_order oStore = convert_to_store_order( order );
+
+            // fetch_xxx testing
+            atomics::atomic_store_explicit( &a, (integral_type) 0, oStore );
+
+            // fetch_add
+            for ( size_t nByte = 0; nByte < sizeof(integral_type); ++nByte )
+            {
+                integral_type prev = atomics::atomic_load_explicit( &a, oLoad );
+                integral_type n = integral_type(42) << (nByte * 8);
+
+                EXPECT_EQ( atomics::atomic_fetch_add_explicit( &a, n, order), prev);
+            }
+
+            // fetch_sub
+            for ( size_t nByte = sizeof(integral_type); nByte > 0; --nByte )
+            {
+                integral_type prev = atomics::atomic_load_explicit( &a, oLoad );
+                integral_type n = integral_type(42) << ((nByte - 1) * 8);
+
+                EXPECT_EQ( atomics::atomic_fetch_sub_explicit( &a, n, order ), prev);
+            }
+            EXPECT_EQ( atomics::atomic_load_explicit( &a, oLoad ), 0 );
+
+            // fetch_or / fetc_xor / fetch_and
+            for ( size_t nBit = 0; nBit < sizeof(integral_type) * 8; ++nBit )
+            {
+                integral_type prev = atomics::atomic_load_explicit( &a, oLoad )  ;;
+                integral_type mask = integral_type(1) << nBit;
+
+                EXPECT_EQ( atomics::atomic_fetch_or_explicit( &a, mask, order ), prev );
+                prev = atomics::atomic_load_explicit( &a, oLoad );
+                EXPECT_EQ( ( prev & mask), mask);
+
+                EXPECT_EQ( atomics::atomic_fetch_and_explicit( &a, (integral_type) ~mask, order ), prev );
+                prev = atomics::atomic_load_explicit( &a, oLoad );
+                EXPECT_EQ( ( prev & mask), 0);
+
+                EXPECT_EQ( atomics::atomic_fetch_xor_explicit( &a, mask, order ), prev );
+                prev = atomics::atomic_load_explicit( &a, oLoad );
+                EXPECT_EQ( ( prev & mask), mask);
+            }
+            EXPECT_EQ( atomics::atomic_load_explicit( &a, oLoad ), (integral_type) -1 );
+        }
+
+        template <typename Atomic, typename Integral>
+        void test_atomic_integral_(Atomic& a)
+        {
+            do_test_atomic_integral<Atomic, Integral >(a);
+
+            do_test_atomic_integral<Atomic, Integral >( a, atomics::memory_order_relaxed );
+            do_test_atomic_integral<Atomic, Integral >( a, atomics::memory_order_acquire );
+            do_test_atomic_integral<Atomic, Integral >( a, atomics::memory_order_release );
+            do_test_atomic_integral<Atomic, Integral >( a, atomics::memory_order_acq_rel );
+            do_test_atomic_integral<Atomic, Integral >( a, atomics::memory_order_seq_cst );
+        }
+
+        template <typename Integral>
+        void test_atomic_integral()
+        {
+            typedef atomics::atomic<Integral>    atomic_type;
+            atomic_type a[8];
+            for ( size_t i = 0; i < sizeof(a)/sizeof(a[0]); ++i ) {
+                test_atomic_integral_<atomic_type, Integral>( a[i] );
+            }
+        }
+        template <typename Integral>
+        void test_atomic_integral_volatile()
+        {
+            typedef atomics::atomic<Integral> volatile atomic_type;
+            atomic_type a[8];
+            for ( size_t i = 0; i < sizeof(a)/sizeof(a[0]); ++i ) {
+                test_atomic_integral_<atomic_type, Integral>( a[i] );
+            }
+        }
+
+        template <class AtomicBool>
+        void do_test_atomic_bool(AtomicBool& a)
+        {
+            EXPECT_TRUE( atomics::atomic_is_lock_free( &a ) );
+            atomics::atomic_store( &a, false );
+            EXPECT_FALSE( a );
+            EXPECT_FALSE( atomics::atomic_load( &a ));
+
+            EXPECT_FALSE( atomics::atomic_exchange( &a, true ));
+            EXPECT_TRUE( atomics::atomic_load( &a ));
+            EXPECT_TRUE( atomics::atomic_exchange( &a, false ));
+            EXPECT_FALSE( atomics::atomic_load( &a ));
+
+            bool expected = false;
+            EXPECT_TRUE( atomics::atomic_compare_exchange_weak( &a, &expected, true));
+            EXPECT_FALSE( expected );
+            EXPECT_FALSE( atomics::atomic_compare_exchange_weak( &a, &expected, false));
+            EXPECT_TRUE( expected );
+            EXPECT_TRUE( atomics::atomic_load( &a ));
+
+            atomics::atomic_store( &a, false );
+
+            expected = false;
+            EXPECT_TRUE( atomics::atomic_compare_exchange_strong( &a, &expected, true));
+            EXPECT_FALSE( expected );
+            EXPECT_FALSE( atomics::atomic_compare_exchange_strong( &a, &expected, false));
+            EXPECT_TRUE( expected );
+
+            EXPECT_TRUE( atomics::atomic_load( &a ));
+
+            EXPECT_TRUE( atomics::atomic_exchange( &a, false ));
+        }
+
+        template <class AtomicBool>
+        void do_test_atomic_bool( AtomicBool& a, atomics::memory_order order )
+        {
+            const atomics::memory_order oLoad = convert_to_load_order( order );
+            const atomics::memory_order oStore = convert_to_store_order( order );
+            const atomics::memory_order oExchange = convert_to_exchange_order( order );
+
+            EXPECT_TRUE( atomics::atomic_is_lock_free( &a ) );
+            atomics::atomic_store_explicit( &a, false, oStore );
+            EXPECT_FALSE( a == false );
+            EXPECT_FALSE( atomics::atomic_load_explicit( &a, oLoad ));
+
+            EXPECT_FALSE( atomics::atomic_exchange_explicit( &a, true, oExchange ));
+            EXPECT_TRUE( atomics::atomic_load_explicit( &a, oLoad ));
+            EXPECT_TRUE( atomics::atomic_exchange_explicit( &a, false, oExchange ));
+            EXPECT_FALSE( atomics::atomic_load_explicit( &a, oLoad ));
+
+            bool expected = false;
+            EXPECT_TRUE( atomics::atomic_compare_exchange_weak_explicit( &a, &expected, true, order, atomics::memory_order_relaxed));
+            EXPECT_FALSE( expected );
+            EXPECT_FALSE( atomics::atomic_compare_exchange_weak_explicit( &a, &expected, false, order, atomics::memory_order_relaxed));
+            EXPECT_TRUE( expected );
+            EXPECT_TRUE( atomics::atomic_load_explicit( &a, oLoad ));
+
+            atomics::atomic_store( &a, false );
+
+            expected = false;
+            EXPECT_TRUE( atomics::atomic_compare_exchange_strong_explicit( &a, &expected, true, order, atomics::memory_order_relaxed));
+            EXPECT_FALSE( expected );
+            EXPECT_FALSE( atomics::atomic_compare_exchange_strong_explicit( &a, &expected, false, order, atomics::memory_order_relaxed));
+            EXPECT_TRUE( expected );
+
+            EXPECT_TRUE( atomics::atomic_load_explicit( &a, oLoad ));
+
+            EXPECT_TRUE( atomics::atomic_exchange_explicit( &a, false, oExchange ));
+        }
+
+        template <typename Atomic, typename Integral>
+        void test_atomic_pointer_for_( Atomic& a, Integral * arr, Integral aSize, atomics::memory_order order )
+        {
+            typedef Integral integral_type;
+            atomics::memory_order oLoad = convert_to_load_order(order);
+            atomics::memory_order oStore = convert_to_store_order(order);
+            integral_type *  p;
+
+            atomics::atomic_store_explicit( &a, arr, oStore );
+            EXPECT_EQ( *atomics::atomic_load_explicit( &a, oLoad ), 1 );
+
+            p = arr;
+            EXPECT_TRUE( atomics::atomic_compare_exchange_weak_explicit( &a, &p, arr + 5, order, atomics::memory_order_relaxed ));
+            EXPECT_EQ( p, arr + 0 );
+            EXPECT_EQ( *p, 1 );
+            EXPECT_FALSE( atomics::atomic_compare_exchange_weak_explicit( &a, &p, arr + 3, order, atomics::memory_order_relaxed ));
+            EXPECT_EQ( p, arr + 5 );
+            EXPECT_EQ( *p, 6 );
+
+            EXPECT_TRUE( atomics::atomic_compare_exchange_strong_explicit( &a, &p, arr + 3, order, atomics::memory_order_relaxed ));
+            EXPECT_EQ( p, arr + 5 );
+            EXPECT_EQ( *p, 6 );
+            EXPECT_FALSE( atomics::atomic_compare_exchange_strong_explicit( &a, &p, arr + 5, order, atomics::memory_order_relaxed ));
+            EXPECT_EQ( p, arr + 3 );
+            EXPECT_EQ( *p, 4 );
+
+            EXPECT_EQ( atomics::atomic_exchange_explicit( &a, arr, order ), arr + 3 );
+            EXPECT_EQ( atomics::atomic_load_explicit( &a, oLoad ), arr );
+            EXPECT_EQ( *atomics::atomic_load_explicit( &a, oLoad ), 1 );
+
+            for ( integral_type i = 1; i < aSize; ++i ) {
+                integral_type * p = atomics::atomic_load_explicit( &a, oLoad );
+                EXPECT_EQ( *p, i );
+                EXPECT_EQ( atomics::atomic_fetch_add_explicit( &a, 1, order ), p );
+                EXPECT_EQ( *atomics::atomic_load_explicit( &a, oLoad ), i + 1 );
+            }
+
+            for ( integral_type i = aSize; i > 1; --i ) {
+                integral_type * p = atomics::atomic_load_explicit( &a, oLoad );
+                EXPECT_EQ( *p, i  );
+                EXPECT_EQ( atomics::atomic_fetch_sub_explicit( &a, 1, order ), p );
+                EXPECT_EQ( *atomics::atomic_load_explicit( &a, oLoad ), i - 1 );
+            }
+        }
+
+        template <typename Integral, bool Volatile>
+        void test_atomic_pointer_for()
+        {
+            typedef Integral integral_type;
+            typedef typename add_volatile<atomics::atomic< integral_type *>, Volatile>::type    atomic_pointer;
+
+            integral_type   arr[8];
+            const integral_type aSize = sizeof(arr)/sizeof(arr[0]);
+            for ( integral_type i = 0; i < aSize; ++i ) {
+                arr[size_t(i)] = i + 1;
+            }
+
+            atomic_pointer  a;
+            integral_type *  p;
+
+            atomics::atomic_store( &a, arr );
+            EXPECT_EQ( *atomics::atomic_load( &a ), 1 );
+
+            p = arr;
+            EXPECT_TRUE( atomics::atomic_compare_exchange_weak( &a, &p, arr + 5 ));
+            EXPECT_EQ( p, arr + 0 );
+            EXPECT_FALSE( atomics::atomic_compare_exchange_weak( &a, &p, arr + 3 ));
+            EXPECT_EQ( p, arr + 5 );
+
+            EXPECT_TRUE( atomics::atomic_compare_exchange_strong( &a, &p, arr + 3 ));
+            EXPECT_EQ( p, arr + 5 );
+            EXPECT_FALSE( atomics::atomic_compare_exchange_strong( &a, &p, arr + 5 ));
+            EXPECT_EQ( p, arr + 3 );
+
+            EXPECT_EQ( atomics::atomic_exchange( &a, arr ), arr + 3 );
+            EXPECT_EQ( atomics::atomic_load( &a ), arr );
+            EXPECT_EQ( *atomics::atomic_load( &a ), 1 );
+
+            for ( integral_type i = 1; i < aSize; ++i ) {
+                integral_type * p = atomics::atomic_load( &a );
+                EXPECT_EQ( *p, i );
+                EXPECT_EQ( atomics::atomic_fetch_add( &a, 1 ), p );
+                EXPECT_EQ( *atomics::atomic_load( &a ), i + 1 );
+            }
+
+            for ( integral_type i = aSize; i > 1; --i ) {
+                integral_type * p = atomics::atomic_load( &a );
+                EXPECT_EQ( *p, i );
+                EXPECT_EQ( atomics::atomic_fetch_sub( &a, 1 ), p );
+                EXPECT_EQ( *atomics::atomic_load( &a ), i - 1 );
+            }
+
+            test_atomic_pointer_for_( a, arr, aSize, atomics::memory_order_relaxed );
+            test_atomic_pointer_for_( a, arr, aSize, atomics::memory_order_acquire );
+            test_atomic_pointer_for_( a, arr, aSize, atomics::memory_order_release );
+            test_atomic_pointer_for_( a, arr, aSize, atomics::memory_order_acq_rel );
+            test_atomic_pointer_for_( a, arr, aSize, atomics::memory_order_seq_cst );
+
+        }
+
+        template <typename Atomic>
+        void do_test_atomic_pointer_void_( Atomic& a, char * arr, char aSize, atomics::memory_order order )
+        {
+            atomics::memory_order oLoad = convert_to_load_order(order);
+            atomics::memory_order oStore = convert_to_store_order(order);
+            char *  p;
+
+            atomics::atomic_store_explicit( &a, (void *) arr, oStore );
+            EXPECT_EQ( *reinterpret_cast<char *>(atomics::atomic_load_explicit( &a, oLoad )), 1 );
+
+            p = arr;
+            EXPECT_TRUE( atomics::atomic_compare_exchange_weak_explicit( &a, (void **) &p, (void *)(arr + 5), order, atomics::memory_order_relaxed ));
+            EXPECT_EQ( p, arr + 0 );
+            EXPECT_EQ( *p, 1 );
+            EXPECT_FALSE( atomics::atomic_compare_exchange_weak_explicit( &a, (void **) &p, (void *)(arr + 3), order, atomics::memory_order_relaxed ));
+            EXPECT_EQ( p, arr + 5 );
+            EXPECT_EQ( *p, 6 );
+
+            EXPECT_TRUE( atomics::atomic_compare_exchange_strong_explicit( &a, (void **) &p, (void *)(arr + 3), order, atomics::memory_order_relaxed ));
+            EXPECT_EQ( p, arr + 5 );
+            EXPECT_EQ( *p, 6 );
+            EXPECT_FALSE( atomics::atomic_compare_exchange_strong_explicit( &a, (void **) &p, (void *)(arr + 5), order, atomics::memory_order_relaxed ));
+            EXPECT_EQ( p, arr + 3 );
+            EXPECT_EQ( *p, 4 );
+
+            EXPECT_EQ( reinterpret_cast<char *>(atomics::atomic_exchange_explicit( &a, (void *) arr, order )), arr + 3 );
+            EXPECT_EQ( reinterpret_cast<char *>(atomics::atomic_load_explicit( &a, oLoad )), arr );
+            EXPECT_EQ( *reinterpret_cast<char *>(atomics::atomic_load_explicit( &a, oLoad )), 1 );
+
+            for ( char i = 1; i < aSize; ++i ) {
+                EXPECT_EQ( *reinterpret_cast<char *>(atomics::atomic_load_explicit( &a, oLoad )), i );
+                atomics::atomic_fetch_add_explicit( &a, 1, order );
+                EXPECT_EQ( *reinterpret_cast<char *>(atomics::atomic_load_explicit( &a, oLoad )), i + 1 );
+            }
+
+            for ( char i = aSize; i > 1; --i ) {
+                EXPECT_EQ( *reinterpret_cast<char *>(atomics::atomic_load_explicit( &a, oLoad )), i );
+                atomics::atomic_fetch_sub_explicit( &a, 1, order );
+                EXPECT_EQ( *reinterpret_cast<char *>(atomics::atomic_load_explicit( &a, oLoad )), i - 1 );
+            }
+        }
+
+        template <bool Volatile>
+        void do_test_atomic_pointer_void()
+        {
+            typedef typename add_volatile<atomics::atomic< void *>, Volatile>::type    atomic_pointer;
+
+            char   arr[8];
+            const char aSize = sizeof(arr)/sizeof(arr[0]);
+            for ( char i = 0; i < aSize; ++i ) {
+                arr[unsigned(i)] = i + 1;
+            }
+
+            atomic_pointer  a;
+            char *  p;
+
+            atomics::atomic_store( &a, (void *) arr );
+            EXPECT_EQ( *reinterpret_cast<char *>(atomics::atomic_load( &a )), 1 );
+
+            p = arr;
+            EXPECT_TRUE( atomics::atomic_compare_exchange_weak( &a, (void **) &p, (void *)(arr + 5) ));
+            EXPECT_EQ( p, arr + 0 );
+            EXPECT_FALSE( atomics::atomic_compare_exchange_weak( &a, (void **) &p, (void *)(arr + 3) ));
+            EXPECT_EQ( p, arr + 5 );
+
+            EXPECT_TRUE( atomics::atomic_compare_exchange_strong( &a, (void **) &p, (void *)(arr + 3) ));
+            EXPECT_EQ( p, arr + 5 );
+            EXPECT_FALSE( atomics::atomic_compare_exchange_strong( &a, (void **) &p, (void *)(arr + 5) ));
+            EXPECT_EQ( p, arr + 3 );
+
+            EXPECT_EQ( reinterpret_cast<char *>( atomics::atomic_exchange( &a, (void *) arr )), arr + 3 );
+            EXPECT_EQ( reinterpret_cast<char *>( atomics::atomic_load( &a )), arr );
+            EXPECT_EQ( *reinterpret_cast<char *>(atomics::atomic_load( &a )), 1 );
+
+            for ( char i = 1; i < aSize; ++i ) {
+                EXPECT_EQ( *reinterpret_cast<char *>(atomics::atomic_load( &a )), i );
+                atomics::atomic_fetch_add( &a, 1 );
+                EXPECT_EQ( *reinterpret_cast<char *>(atomics::atomic_load( &a )), i + 1 );
+            }
+
+            for ( char i = aSize; i > 1; --i ) {
+                EXPECT_EQ( *reinterpret_cast<char *>(atomics::atomic_load( &a )), i );
+                atomics::atomic_fetch_sub( &a, 1 );
+                EXPECT_EQ( *reinterpret_cast<char *>(atomics::atomic_load( &a )), i - 1 );
+            }
+
+            do_test_atomic_pointer_void_( a, arr, aSize, atomics::memory_order_relaxed );
+            do_test_atomic_pointer_void_( a, arr, aSize, atomics::memory_order_acquire );
+            do_test_atomic_pointer_void_( a, arr, aSize, atomics::memory_order_release );
+            do_test_atomic_pointer_void_( a, arr, aSize, atomics::memory_order_acq_rel );
+            do_test_atomic_pointer_void_( a, arr, aSize, atomics::memory_order_seq_cst );
+        }
+
+    public:
+        void test_atomic_flag()
+        {
+            atomics::atomic_flag flags[8];
+            for ( size_t i = 0; i < sizeof(flags)/sizeof(flags[0]); ++i )
+                do_test_atomic_flag( flags[i] );
+        }
+        void test_atomic_flag_volatile()
+        {
+            atomics::atomic_flag volatile flags[8];
+            for ( size_t i = 0; i < sizeof(flags)/sizeof(flags[0]); ++i )
+                do_test_atomic_flag( flags[i] );
+        }
+
+        template <typename AtomicBool>
+        void test_atomic_bool_()
+        {
+            AtomicBool a[8];
+            for ( size_t i = 0; i < sizeof(a)/sizeof(a[0]); ++i ) {
+                do_test_atomic_bool( a[i] );
+
+                do_test_atomic_bool( a[i], atomics::memory_order_relaxed );
+                do_test_atomic_bool( a[i], atomics::memory_order_acquire );
+                do_test_atomic_bool( a[i], atomics::memory_order_release );
+                do_test_atomic_bool( a[i], atomics::memory_order_acq_rel );
+                do_test_atomic_bool( a[i], atomics::memory_order_seq_cst );
+            }
+        }
+
+        void test_atomic_bool()
+        {
+            test_atomic_bool_<atomics::atomic<bool> >();
+        }
+        void test_atomic_bool_volatile()
+        {
+            test_atomic_bool_<atomics::atomic<bool> volatile >();
+        }
+    };
+
+    TEST_F( cxx11_atomic_func, atomic_char )
+    {
+        test_atomic_integral<char>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_char_volatile )
+    {
+        test_atomic_integral_volatile<char>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_unsigned_char )
+    {
+        test_atomic_integral<unsigned char>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_unsigned_char_volatile )
+    {
+        test_atomic_integral_volatile<unsigned char>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_signed_char )
+    {
+        test_atomic_integral<signed char>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_signed_char_volatile )
+    {
+        test_atomic_integral_volatile<signed char>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_short_int )
+    {
+        test_atomic_integral<short int>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_short_int_volatile )
+    {
+        test_atomic_integral_volatile<short int>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_unsigned_short_int )
+    {
+        test_atomic_integral<unsigned short int>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_unsigned_short_int_volatile )
+    {
+        test_atomic_integral_volatile<unsigned short int>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_int )
+    {
+        test_atomic_integral<int>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_int_volatile )
+    {
+        test_atomic_integral_volatile<int>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_unsigned_int )
+    {
+        test_atomic_integral<unsigned int>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_unsigned_int_volatile )
+    {
+        test_atomic_integral_volatile<unsigned int>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_long )
+    {
+        test_atomic_integral<long>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_long_volatile )
+    {
+        test_atomic_integral_volatile<long>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_unsigned_long )
+    {
+        test_atomic_integral<unsigned long>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_unsigned_long_volatile )
+    {
+        test_atomic_integral_volatile<unsigned long>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_long_long )
+    {
+        test_atomic_integral<long long>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_long_long_volatile )
+    {
+        test_atomic_integral_volatile<long long>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_unsigned_long_long )
+    {
+        test_atomic_integral<unsigned long long>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_unsigned_long_long_volatile )
+    {
+        test_atomic_integral_volatile<unsigned long long>();
+    }
+
+    TEST_F( cxx11_atomic_func, atomic_pointer_void )
+    {
+        do_test_atomic_pointer_void<false>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_pointer_void_volatile )
+    {
+        do_test_atomic_pointer_void<true>();
+    }
+
+    TEST_F( cxx11_atomic_func, atomic_pointer_char )
+    {
+        test_atomic_pointer_for<char, false>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_pointer_char_volatile )
+    {
+        test_atomic_pointer_for<char, true>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_pointer_short )
+    {
+        test_atomic_pointer_for<short, false>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_pointer_short_volatile )
+    {
+        test_atomic_pointer_for<short, true>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_pointer_int )
+    {
+        test_atomic_pointer_for<int, false>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_pointer_int_volatile )
+    {
+        test_atomic_pointer_for<int, true>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_pointer_long )
+    {
+        test_atomic_pointer_for<long, false>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_pointer_long_volatile )
+    {
+        test_atomic_pointer_for<long, true>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_pointer_long_long )
+    {
+        test_atomic_pointer_for<long long, false>();
+    }
+    TEST_F( cxx11_atomic_func, atomic_pointer_long_long_volatile )
+    {
+        test_atomic_pointer_for<long long, true>();
+    }
+
+    TEST_F( cxx11_atomic_func, test_atomic_fence )
+    {
+        atomics::atomic_thread_fence(atomics::memory_order_relaxed );
+        atomics::atomic_thread_fence(atomics::memory_order_acquire );
+        atomics::atomic_thread_fence(atomics::memory_order_release );
+        atomics::atomic_thread_fence(atomics::memory_order_acq_rel );
+        atomics::atomic_thread_fence(atomics::memory_order_seq_cst );
+
+        atomics::atomic_signal_fence(atomics::memory_order_relaxed );
+        atomics::atomic_signal_fence(atomics::memory_order_acquire );
+        atomics::atomic_signal_fence(atomics::memory_order_release );
+        atomics::atomic_signal_fence(atomics::memory_order_acq_rel );
+        atomics::atomic_signal_fence(atomics::memory_order_seq_cst );
+    }
+}   // namespace
+
+
+#endif // #ifndef CDS_USE_BOOST_ATOMIC
diff --git a/test/unit/misc/cxx11_convert_memory_order.h b/test/unit/misc/cxx11_convert_memory_order.h
new file mode 100644 (file)
index 0000000..f038dc9
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+// This header should be included AFTER <cds/algo/atomic.h> if needed
+
+namespace {
+
+    static inline atomics::memory_order convert_to_store_order( atomics::memory_order order )
+    {
+        switch ( order ) {
+            case atomics::memory_order_acquire:
+            case atomics::memory_order_consume:
+                return atomics::memory_order_relaxed;
+            case atomics::memory_order_acq_rel:
+                return atomics::memory_order_release;
+            default:
+                return order;
+        }
+    }
+
+    static inline atomics::memory_order convert_to_load_order( atomics::memory_order order )
+    {
+        switch ( order ) {
+            case atomics::memory_order_release:
+                return atomics::memory_order_relaxed;
+            case atomics::memory_order_acq_rel:
+                return atomics::memory_order_acquire;
+            default:
+                return order;
+        }
+    }
+
+#if CDS_COMPILER == CDS_COMPILER_INTEL
+    static inline atomics::memory_order convert_to_exchange_order( atomics::memory_order order )
+    {
+        return order == atomics::memory_order_consume ? atomics::memory_order_relaxed : order;
+    }
+#else
+    static inline atomics::memory_order convert_to_exchange_order( atomics::memory_order order )
+    {
+        return order;
+    }
+#endif
+
+    template <typename T, bool Volatile>
+    struct add_volatile;
+
+    template <typename T>
+    struct add_volatile<T, false>
+    {
+        typedef T   type;
+    };
+
+    template <typename T>
+    struct add_volatile<T, true>
+    {
+        typedef T volatile   type;
+    };
+
+} // namespace
diff --git a/test/unit/misc/find_option.cpp b/test/unit/misc/find_option.cpp
new file mode 100644 (file)
index 0000000..84837f2
--- /dev/null
@@ -0,0 +1,209 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include <type_traits>
+#include <cds/opt/options.h>
+
+// Value options
+namespace {
+
+    template <int Val>
+    struct int_opt {
+        static const int value = Val;
+    };
+
+    template <bool Val>
+    struct bool_opt {
+        static const bool value = Val;
+    };
+
+    enum user_enum {
+        val_zero, val_one, val_two, val_three, val_four, val_five
+    };
+
+    template <user_enum Val>
+    struct enum_opt {
+        static const user_enum value = Val;
+    };
+}
+
+// Declare necessary cds::opt::find_option specialization for user-provided enum type
+CDS_DECLARE_FIND_OPTION_INTEGRAL_SPECIALIZATION( user_enum )
+
+void find_option_compiler_test()
+{
+
+    // *************************************************
+    // Type options
+    //
+    struct tag_default;
+    struct tag_a;
+    struct tag_b;
+
+    // Option not found
+    static_assert( (std::is_same<
+        cds::opt::find_option< cds::opt::tag<tag_default>, cds::opt::stat<tag_a>, bool_opt<false> >::type,
+        cds::opt::tag<tag_default>
+    >::value), "Result != tag_default" );
+
+    // Option found once
+    static_assert( (std::is_same<
+        cds::opt::find_option< cds::opt::tag<tag_default>, cds::opt::tag<tag_a> >::type,
+        cds::opt::tag<tag_a>
+    >::value), "Result != tag_a" );
+
+    static_assert( (std::is_same<
+        cds::opt::find_option< cds::opt::tag<tag_default>, cds::opt::stat<tag_a>, cds::opt::tag<tag_a> >::type,
+        cds::opt::tag<tag_a>
+    >::value), "Result != tag_a" );
+
+    // First option
+    static_assert( (std::is_same<
+        cds::opt::find_option< cds::opt::tag<tag_default>
+        ,cds::opt::tag<tag_a>   // desired
+        ,cds::opt::stat<tag_a>
+        ,cds::opt::stat<tag_a>
+        ,cds::opt::stat<tag_a>
+        ,cds::opt::stat<tag_a>
+        ,cds::opt::stat<tag_a>
+        >::type,
+        cds::opt::tag<tag_a>
+    >::value), "Result != tag_a" );
+
+    // Last option
+    static_assert( (std::is_same<
+        cds::opt::find_option< cds::opt::tag<tag_default>
+        ,cds::opt::stat<tag_a>
+        ,cds::opt::stat<tag_a>
+        ,cds::opt::stat<tag_a>
+        ,cds::opt::stat<tag_a>
+        ,cds::opt::stat<tag_a>
+        ,cds::opt::tag<tag_a>   // desired
+        >::type,
+        cds::opt::tag<tag_a>
+    >::value), "Result != tag_a" );
+
+    // Middle option
+    static_assert( (std::is_same<
+        cds::opt::find_option< cds::opt::tag<tag_default>
+        ,cds::opt::stat<tag_a>
+        ,cds::opt::stat<tag_a>
+        ,cds::opt::stat<tag_a>
+        ,cds::opt::tag<tag_a>   // desired
+        ,cds::opt::stat<tag_a>
+        ,cds::opt::stat<tag_a>
+        >::type,
+        cds::opt::tag<tag_a>
+    >::value), "Result != tag_a" );
+
+    // Option not found
+    static_assert( (std::is_same<
+        cds::opt::find_option< cds::opt::tag<tag_default>
+        ,cds::opt::stat<tag_a>
+        ,cds::opt::stat<tag_a>
+        ,cds::opt::stat<tag_a>
+        ,cds::opt::stat<tag_default>
+        ,cds::opt::stat<tag_a>
+        ,cds::opt::stat<tag_a>
+        >::type,
+        cds::opt::tag<tag_default>
+    >::value), "Result != tag_default" );
+
+    // Multiple options
+    static_assert( (std::is_same<
+        cds::opt::find_option< cds::opt::tag<tag_default>, cds::opt::tag<tag_a>, cds::opt::tag<tag_b> >::type,
+        cds::opt::tag<tag_a>
+    >::value), "Result != tag_a" );
+
+    static_assert( (std::is_same<
+        cds::opt::find_option< cds::opt::tag<tag_default>
+        ,cds::opt::tag<tag_a>   // desired - first accepted
+        ,cds::opt::stat<tag_a>
+        ,cds::opt::stat<tag_a>
+        ,cds::opt::stat<tag_b>
+        ,cds::opt::stat<tag_a>
+        ,cds::opt::stat<tag_a>
+        ,cds::opt::tag<tag_b>    // desired
+        >::type,
+        cds::opt::tag<tag_a>
+    >::value), "Result != tag_a" );
+
+
+    // *****************************************************
+    // Value options
+
+    // Not found
+    static_assert( (std::is_same<
+        cds::opt::find_option< int_opt<15>, bool_opt<false>, cds::opt::stat<tag_a> >::type,
+        int_opt<15>
+    >::value), "Result != int_opt<15>" );
+
+    static_assert( (std::is_same<
+        cds::opt::find_option< int_opt<15>, int_opt<100>, cds::opt::stat<tag_a> >::type,
+        int_opt<100>
+    >::value), "Result != int_opt<100>" );
+
+    static_assert( (std::is_same<
+        cds::opt::find_option< int_opt<15>, int_opt<100>, cds::opt::stat<tag_a>, bool_opt<true>, int_opt<200> >::type,
+        int_opt<100>
+    >::value), "Result != int_opt<100>" );
+
+    // User-provided enum type
+    static_assert( (std::is_same<
+        cds::opt::find_option< enum_opt<val_zero>, int_opt<100>, cds::opt::stat<tag_a>, int_opt<200> >::type,
+        enum_opt<val_zero>
+    >::value), "Result != enum_opt<val_zero>" );
+
+    static_assert( (std::is_same<
+        cds::opt::find_option< enum_opt<val_zero>, int_opt<100>, cds::opt::stat<tag_a>, enum_opt<val_three>, int_opt<200> >::type,
+        enum_opt<val_three>
+    >::value), "Result != enum_opt<val_three>" );
+
+}
+
+void test_extracting_option_value()
+{
+    struct tag_a;
+
+    // Define option
+    typedef cds::opt::tag< tag_a >  tag_option;
+
+    // What is the value of the tag_option?
+    // How we can extract tag_a from tag_option?
+    // Here is a solution:
+    typedef cds::opt::value< tag_option >::tag  tag_option_value;
+
+    // tag_option_value is the same as tag_a
+    static_assert( (std::is_same< tag_option_value, tag_a >::value), "Error getting the value of option: tag_option_value != tag_a" );
+
+    // Value-option
+    typedef cds::opt::alignment< 16 >   align_option;
+    static_assert( cds::opt::value< align_option >::alignment == 16, "Error getting the value of option: option value != 16" );
+}
diff --git a/test/unit/misc/hash_tuple.cpp b/test/unit/misc/hash_tuple.cpp
new file mode 100644 (file)
index 0000000..fc72f5f
--- /dev/null
@@ -0,0 +1,142 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include <gtest/gtest.h>
+#include <cds/opt/hash.h>
+
+namespace {
+    typedef cds::opt::v::hash_selector< cds::opt::none >::type hashing;
+
+#define HASHING(_n) \
+        struct hash##_n: public hashing { \
+            template <typename T> size_t operator()( T const& v ) const { return hashing::operator()(v) + _n ; } \
+        };
+
+        HASHING(2)
+        HASHING(3)
+        HASHING(4)
+        HASHING(5)
+        HASHING(6)
+        HASHING(7)
+        HASHING(8)
+        HASHING(9)
+        HASHING(10)
+#undef HASHING
+
+    TEST( HashTuple, test )
+    {
+        int nVal = 5;
+        size_t nHash = hashing()(nVal);
+
+        size_t val[16];
+
+        cds::opt::hash< std::tuple< hashing, hash2 > >::pack<cds::opt::none>::hash  h2;
+        h2( val, nVal );
+        EXPECT_EQ( val[0], nHash );
+        EXPECT_EQ( val[1], nHash + 2 );
+
+        cds::opt::hash< std::tuple< hashing, hash2, hash3 > >::pack<cds::opt::none>::hash  h3;
+        h3( val, nVal );
+        EXPECT_EQ( val[0], nHash );
+        EXPECT_EQ( val[1], nHash + 2 );
+        EXPECT_EQ( val[2], nHash + 3 );
+
+        cds::opt::hash< std::tuple< hashing, hash2, hash3, hash4 > >::pack<cds::opt::none>::hash  h4;
+        h4( val, nVal );
+        EXPECT_EQ( val[0], nHash );
+        EXPECT_EQ( val[1], nHash + 2 );
+        EXPECT_EQ( val[2], nHash + 3 );
+        EXPECT_EQ( val[3], nHash + 4 );
+
+        cds::opt::hash< std::tuple< hashing, hash2, hash3, hash4, hash5 > >::pack<cds::opt::none>::hash  h5;
+        h5( val, nVal );
+        EXPECT_EQ( val[0], nHash );
+        EXPECT_EQ( val[1], nHash + 2 );
+        EXPECT_EQ( val[2], nHash + 3 );
+        EXPECT_EQ( val[3], nHash + 4 );
+        EXPECT_EQ( val[4], nHash + 5 );
+
+        cds::opt::hash< std::tuple< hashing, hash2, hash3, hash4, hash5, hash6 > >::pack<cds::opt::none>::hash  h6;
+        h6( val, nVal );
+        EXPECT_EQ( val[0], nHash );
+        EXPECT_EQ( val[1], nHash + 2 );
+        EXPECT_EQ( val[2], nHash + 3 );
+        EXPECT_EQ( val[3], nHash + 4 );
+        EXPECT_EQ( val[4], nHash + 5 );
+        EXPECT_EQ( val[5], nHash + 6 );
+
+        cds::opt::hash< std::tuple< hashing, hash2, hash3, hash4, hash5, hash6, hash7 > >::pack<cds::opt::none>::hash  h7;
+        h7( val, nVal );
+        EXPECT_EQ( val[0], nHash );
+        EXPECT_EQ( val[1], nHash + 2 );
+        EXPECT_EQ( val[2], nHash + 3 );
+        EXPECT_EQ( val[3], nHash + 4 );
+        EXPECT_EQ( val[4], nHash + 5 );
+        EXPECT_EQ( val[5], nHash + 6 );
+        EXPECT_EQ( val[6], nHash + 7 );
+
+        cds::opt::hash< std::tuple< hashing, hash2, hash3, hash4, hash5, hash6, hash7, hash8 > >::pack<cds::opt::none>::hash  h8;
+        h8( val, nVal );
+        EXPECT_EQ( val[0], nHash );
+        EXPECT_EQ( val[1], nHash + 2 );
+        EXPECT_EQ( val[2], nHash + 3 );
+        EXPECT_EQ( val[3], nHash + 4 );
+        EXPECT_EQ( val[4], nHash + 5 );
+        EXPECT_EQ( val[5], nHash + 6 );
+        EXPECT_EQ( val[6], nHash + 7 );
+        EXPECT_EQ( val[7], nHash + 8 );
+
+        cds::opt::hash< std::tuple< hashing, hash2, hash3, hash4, hash5, hash6, hash7, hash8, hash9 > >::pack<cds::opt::none>::hash  h9;
+        h9( val, nVal );
+        EXPECT_EQ( val[0], nHash );
+        EXPECT_EQ( val[1], nHash + 2 );
+        EXPECT_EQ( val[2], nHash + 3 );
+        EXPECT_EQ( val[3], nHash + 4 );
+        EXPECT_EQ( val[4], nHash + 5 );
+        EXPECT_EQ( val[5], nHash + 6 );
+        EXPECT_EQ( val[6], nHash + 7 );
+        EXPECT_EQ( val[7], nHash + 8 );
+        EXPECT_EQ( val[8], nHash + 9 );
+
+        cds::opt::hash< std::tuple< hashing, hash2, hash3, hash4, hash5, hash6, hash7, hash8, hash9, hash10 > >::pack<cds::opt::none>::hash  h10;
+        h10( val, nVal );
+        EXPECT_EQ( val[0], nHash );
+        EXPECT_EQ( val[1], nHash + 2 );
+        EXPECT_EQ( val[2], nHash + 3 );
+        EXPECT_EQ( val[3], nHash + 4 );
+        EXPECT_EQ( val[4], nHash + 5 );
+        EXPECT_EQ( val[5], nHash + 6 );
+        EXPECT_EQ( val[6], nHash + 7 );
+        EXPECT_EQ( val[7], nHash + 8 );
+        EXPECT_EQ( val[8], nHash + 9 );
+        EXPECT_EQ( val[9], nHash + 10 );
+    }
+
+} // namespace
diff --git a/test/unit/misc/permutation_generator.cpp b/test/unit/misc/permutation_generator.cpp
new file mode 100644 (file)
index 0000000..f02bb9b
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include <cds/opt/permutation.h>
+#include <gtest/gtest.h>
+
+namespace {
+
+    class Permutations: public ::testing::Test
+    {
+    protected:
+        static const size_t c_nMax = 1024;
+
+        template <typename Gen>
+        void test_with( Gen& gen, size_t nLen )
+        {
+            unsigned int arr[c_nMax];
+            for ( size_t nPass = 0; nPass < 10; ++nPass ) {
+                for ( size_t i = 0; i < c_nMax; ++i )
+                    arr[i] = 0;
+
+                do {
+                    typename Gen::integer_type i = gen;
+                    ++arr[ i ];
+                } while ( gen.next() );
+
+                for ( size_t i = 0; i < nLen; ++i )
+                    EXPECT_EQ( arr[i], 1 ) << "i=" << i;
+                for ( size_t i = nLen; i < c_nMax; ++i )
+                    EXPECT_EQ( arr[i], 0 ) << "i=" << i;
+
+                gen.reset();
+            }
+        }
+
+        template <typename Gen>
+        void test()
+        {
+            for ( size_t nLen = 2; nLen <= c_nMax; ++nLen ) {
+                Gen gen( nLen );
+                test_with( gen, nLen );
+            }
+        }
+
+        template <typename Gen>
+        void test2()
+        {
+            for ( size_t nLen = 2; nLen <= c_nMax; nLen *= 2 ) {
+                Gen gen( nLen );
+                test_with( gen, nLen );
+            }
+        }
+    };
+
+    TEST_F( Permutations, random_permutation )
+    {
+        test< cds::opt::v::random_permutation<> >();
+    }
+    TEST_F( Permutations, random2_permutation )
+    {
+        test2< cds::opt::v::random2_permutation<> >();
+    }
+    TEST_F( Permutations, random_shuffle_permutation )
+    {
+        test< cds::opt::v::random_shuffle_permutation<> >();
+    }
+
+} // namespace
diff --git a/test/unit/misc/split_bitstring.cpp b/test/unit/misc/split_bitstring.cpp
new file mode 100644 (file)
index 0000000..a362a33
--- /dev/null
@@ -0,0 +1,318 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include <cds/algo/split_bitstring.h>
+#include <gtest/gtest.h>
+
+namespace {
+    class Split_bitstrig : public ::testing::Test
+    {
+    protected:
+        bool is_big_endian()
+        {
+            union {
+                uint32_t ui;
+                uint8_t  ch;
+            } byte_order;
+            byte_order.ui = 0xFF000001;
+
+            return byte_order.ch != 0x01;
+        }
+
+        void cut_uint_le()
+        {
+            typedef cds::algo::split_bitstring< size_t > split_bitstring;
+
+            size_t src = sizeof(src) == 8 ? 0xFEDCBA9876543210 : 0x76543210;
+            split_bitstring splitter(src);
+            size_t res;
+
+            // Trivial case
+            ASSERT_FALSE( splitter.eos() );
+            ASSERT_FALSE( !splitter );
+            res = splitter.cut(sizeof(src) * 8);
+            EXPECT_EQ( res, src );
+            ASSERT_TRUE( splitter.eos() );
+            ASSERT_TRUE( !splitter );
+            EXPECT_EQ(splitter.safe_cut(sizeof(src) * 8), 0 );
+            ASSERT_TRUE( splitter.eos() );
+            ASSERT_TRUE( !splitter );
+            splitter.reset();
+            ASSERT_FALSE( splitter.eos() );
+            ASSERT_FALSE( !splitter );
+            res = splitter.cut(sizeof(src) * 8);
+            EXPECT_EQ( res, src );
+            ASSERT_TRUE( splitter.eos() );
+            ASSERT_TRUE( !splitter );
+            EXPECT_EQ( splitter.safe_cut(sizeof(src) * 8), 0 );
+            ASSERT_TRUE( splitter.eos() );
+            ASSERT_TRUE( !splitter );
+
+            // Cut each hex digit
+            splitter.reset();
+            for ( size_t i = 0; i < sizeof(size_t) * 2; ++i ) {
+                ASSERT_FALSE( splitter.eos() );
+                ASSERT_FALSE( !splitter );
+                ASSERT_EQ( splitter.cut( 4 ), i );
+            }
+            ASSERT_TRUE( splitter.eos() );
+            ASSERT_FALSE( splitter );
+
+            // by one bit
+            {
+                splitter.reset();
+                res = 0;
+                for ( size_t i = 0; i < sizeof(size_t) * 8; ++i ) {
+                    ASSERT_FALSE( splitter.eos() );
+                    ASSERT_FALSE( !splitter );
+                    res = res + (splitter.cut( 1 ) << i);
+                }
+                ASSERT_TRUE( splitter.eos() );
+                ASSERT_TRUE( !splitter );
+                EXPECT_EQ( res, src );
+            }
+
+            // random cut
+            {
+                for ( size_t k = 0; k < 100; ++k ) {
+                    splitter.reset();
+                    res = 0;
+                    size_t shift = 0;
+                    while ( splitter ) {
+                        ASSERT_FALSE( splitter.eos() );
+                        ASSERT_FALSE( !splitter );
+                        int bits = rand() % 16;
+                        res = res + ( splitter.safe_cut( bits ) << shift );
+                        shift += bits;
+                    }
+                    ASSERT_TRUE( splitter.eos() );
+                    ASSERT_TRUE( !splitter );
+                    EXPECT_EQ( res, src );
+                }
+            }
+        }
+
+        void cut_uint_be()
+        {
+            typedef cds::algo::split_bitstring< size_t > split_bitstring;
+
+            size_t src = sizeof(src) == 8 ? 0xFEDCBA9876543210 : 0x76543210;
+            split_bitstring splitter(src);
+            size_t res;
+
+            // Trivial case
+            ASSERT_FALSE( splitter.eos() );
+            ASSERT_FALSE( !splitter );
+            res = splitter.cut(sizeof(src) * 8);
+            ASSERT_EQ( res, src );
+            ASSERT_TRUE( splitter.eos() );
+            ASSERT_TRUE( !splitter );
+            EXPECT_EQ(splitter.safe_cut(sizeof(src) * 8), 0 );
+            ASSERT_TRUE( splitter.eos() );
+            ASSERT_TRUE( !splitter );
+            splitter.reset();
+            ASSERT_FALSE( splitter.eos() );
+            ASSERT_FALSE( !splitter );
+            res = splitter.cut(sizeof(src) * 8);
+            EXPECT_EQ( res, src );
+            ASSERT_TRUE( splitter.eos() );
+            ASSERT_TRUE( !splitter );
+            EXPECT_EQ(splitter.safe_cut(sizeof(src) * 8), 0 );
+            ASSERT_TRUE( splitter.eos() );
+            ASSERT_TRUE( !splitter );
+
+            // Cut each hex digit
+            splitter.reset();
+            for ( size_t i = 0; i < sizeof(size_t) * 2; ++i ) {
+                ASSERT_FALSE( splitter.eos() );
+                ASSERT_FALSE( !splitter );
+                EXPECT_EQ( splitter.cut( 4 ), 0x0F - i );
+            }
+            ASSERT_TRUE( splitter.eos() );
+            ASSERT_TRUE( !splitter );
+
+            // by one bit
+            {
+                splitter.reset();
+                res = 0;
+                for ( size_t i = 0; i < sizeof(size_t) * 8; ++i ) {
+                    ASSERT_FALSE( splitter.eos() );
+                    ASSERT_FALSE( !splitter );
+                    res = (res << 1) + splitter.cut( 1 );
+                }
+                ASSERT_TRUE( splitter.eos() );
+                ASSERT_TRUE( !splitter );
+                EXPECT_EQ( res, src );
+            }
+
+            // random cut
+            {
+                for ( size_t k = 0; k < 100; ++k ) {
+                    splitter.reset();
+                    res = 0;
+                    while ( splitter ) {
+                        ASSERT_FALSE( splitter.eos() );
+                        ASSERT_FALSE( !splitter );
+                        int bits = rand() % 16;
+                        res = (res << bits) + splitter.safe_cut( bits );
+                    }
+                    ASSERT_TRUE( splitter.eos() );
+                    ASSERT_TRUE( !splitter );
+                    EXPECT_EQ( res, src );
+                }
+            }
+        }
+
+        template <typename PartUInt>
+        void cut_small_le()
+        {
+            typedef PartUInt part_uint;
+
+            typedef cds::algo::split_bitstring< uint64_t, part_uint > split_bitstring;
+
+            uint64_t src = 0xFEDCBA9876543210;
+            split_bitstring splitter(src);
+            uint64_t res;
+
+            // Cut each hex digit
+            splitter.reset();
+            for ( size_t i = 0; i < sizeof(size_t) * 2; ++i ) {
+                ASSERT_FALSE( splitter.eos() );
+                ASSERT_FALSE( !splitter );
+                EXPECT_EQ( static_cast<size_t>(splitter.cut( 4 )), i );
+            }
+            ASSERT_TRUE( splitter.eos() );
+            ASSERT_TRUE( !splitter );
+
+            // by one bit
+            {
+                splitter.reset();
+                res = 0;
+                for ( size_t i = 0; i < sizeof(size_t) * 8; ++i ) {
+                    ASSERT_FALSE( splitter.eos() );
+                    ASSERT_FALSE( !splitter );
+                    res = res + ( static_cast<uint64_t>(splitter.cut( 1 )) << i);
+                }
+                ASSERT_TRUE( splitter.eos() );
+                ASSERT_TRUE( !splitter );
+                EXPECT_EQ( res, src );
+            }
+
+            // random cut
+            {
+                for ( size_t k = 0; k < 100; ++k ) {
+                    splitter.reset();
+                    res = 0;
+                    size_t shift = 0;
+                    while ( splitter ) {
+                        ASSERT_FALSE( splitter.eos() );
+                        ASSERT_FALSE( !splitter );
+                        int bits = rand() % 16;
+                        res = res + ( static_cast<uint64_t>(splitter.safe_cut( bits )) << shift );
+                        shift += bits;
+                    }
+                    ASSERT_TRUE( splitter.eos() );
+                    ASSERT_TRUE( !splitter );
+                    EXPECT_EQ( res, src );
+                }
+            }
+        }
+
+        template <typename PartUInt>
+        void cut_small_be()
+        {
+            typedef PartUInt part_uint;
+
+            typedef cds::algo::split_bitstring< uint64_t, part_uint > split_bitstring;
+
+            uint64_t src = 0xFEDCBA9876543210;
+            split_bitstring splitter(src);
+            uint64_t res;
+
+            // Cut each hex digit
+            splitter.reset();
+            for ( size_t i = 0; i < sizeof(size_t) * 2; ++i ) {
+                ASSERT_FALSE( splitter.eos() );
+                ASSERT_FALSE( !splitter );
+                EXPECT_EQ( splitter.cut( 4 ), 0x0F - i );
+            }
+            ASSERT_TRUE( splitter.eos() );
+            ASSERT_TRUE( !splitter );
+
+            // by one bit
+            {
+                splitter.reset();
+                res = 0;
+                for ( size_t i = 0; i < sizeof(size_t) * 8; ++i ) {
+                    ASSERT_FALSE( splitter.eos() );
+                    ASSERT_FALSE( !splitter );
+                    res = (res << 1) + splitter.cut( 1 );
+                }
+                ASSERT_TRUE( splitter.eos() );
+                ASSERT_TRUE( !splitter );
+                EXPECT_EQ( res, src );
+            }
+
+            // random cut
+            {
+                for ( size_t k = 0; k < 100; ++k ) {
+                    splitter.reset();
+                    res = 0;
+                    while ( splitter ) {
+                        ASSERT_FALSE( splitter.eos() );
+                        ASSERT_FALSE( !splitter );
+                        int bits = rand() % 16;
+                        res = (res << bits) + splitter.safe_cut( bits );
+                    }
+                    ASSERT_TRUE( splitter.eos() );
+                    ASSERT_TRUE( !splitter );
+                    EXPECT_EQ( res, src );
+                }
+            }
+        }
+    };
+
+    TEST_F( Split_bitstrig, cut_uint )
+    {
+        if ( is_big_endian() )
+            cut_uint_be();
+        else
+            cut_uint_le();
+    }
+
+    TEST_F( Split_bitstrig, cut_uint16 )
+    {
+        if ( is_big_endian() )
+            cut_small_be<uint16_t>();
+        else
+            cut_small_le<uint16_t>();
+    }
+
+} // namespace
diff --git a/test/unit/pqueue/CMakeLists.txt b/test/unit/pqueue/CMakeLists.txt
new file mode 100644 (file)
index 0000000..e276dfd
--- /dev/null
@@ -0,0 +1,25 @@
+set(PACKAGE_NAME unit-pqueue)
+
+set(CDSGTEST_PQUEUE_SOURCES
+    ../main.cpp
+    fcpqueue_boost_stable_vector.cpp
+    fcpqueue_deque.cpp
+    fcpqueue_vector.cpp
+    intrusive_mspqueue.cpp
+    mspqueue.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_executable(${PACKAGE_NAME} ${CDSGTEST_PQUEUE_SOURCES})
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/unit/pqueue/fcpqueue_boost_stable_vector.cpp b/test/unit/pqueue/fcpqueue_boost_stable_vector.cpp
new file mode 100644 (file)
index 0000000..9104479
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "test_fcpqueue.h"
+#include <cds/container/fcpriority_queue.h>
+#include <boost/container/stable_vector.hpp>
+#include <boost/container/deque.hpp>
+
+namespace cds_test {
+
+    TEST_F( FCPQueue, stable_vector )
+    {
+        typedef cds::container::FCPriorityQueue<
+            value_type
+            ,std::priority_queue<
+                value_type
+                ,boost::container::stable_vector<value_type>
+                ,less
+            >
+        > pqueue_type;
+
+        pqueue_type pq;
+        test( pq );
+    }
+
+    TEST_F( FCPQueue, stable_vector_stat )
+    {
+        typedef cds::container::FCPriorityQueue<
+            value_type
+            ,std::priority_queue<
+                value_type
+                ,boost::container::stable_vector<value_type>
+                ,less
+            >
+            ,cds::container::fcpqueue::make_traits<
+                cds::opt::stat< cds::container::fcpqueue::stat<> >
+            >::type
+        > pqueue_type;
+
+        pqueue_type pq;
+        test( pq );
+    }
+
+    TEST_F( FCPQueue, boost_deque )
+    {
+        typedef cds::container::FCPriorityQueue<
+            value_type
+            ,std::priority_queue<
+                value_type
+                ,boost::container::deque<value_type>
+                ,less
+            >
+        > pqueue_type;
+
+        pqueue_type pq;
+        test( pq );
+    }
+
+    TEST_F( FCPQueue, boost_deque_stat )
+    {
+        typedef cds::container::FCPriorityQueue<
+            value_type
+            ,std::priority_queue<
+                value_type
+                ,boost::container::deque<value_type>
+                ,less
+            >
+            ,cds::container::fcpqueue::make_traits<
+                cds::opt::stat< cds::container::fcpqueue::stat<> >
+            >::type
+        > pqueue_type;
+
+        pqueue_type pq;
+        test( pq );
+    }
+
+} // namespace cds_test
diff --git a/test/unit/pqueue/fcpqueue_deque.cpp b/test/unit/pqueue/fcpqueue_deque.cpp
new file mode 100644 (file)
index 0000000..0f7e0b9
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "test_fcpqueue.h"
+#include <cds/container/fcpriority_queue.h>
+#include <deque>
+
+namespace cds_test {
+
+    TEST_F( FCPQueue, deque )
+    {
+        typedef cds::container::FCPriorityQueue<
+            value_type
+            ,std::priority_queue<
+                value_type
+                ,std::deque<value_type>
+                ,less
+            >
+        > pqueue_type;
+
+        pqueue_type pq;
+        test( pq );
+    }
+
+    TEST_F( FCPQueue, deque_stat )
+    {
+        typedef cds::container::FCPriorityQueue<
+            value_type
+            ,std::priority_queue<
+                value_type
+                ,std::deque<value_type>
+                ,less
+            >
+            ,cds::container::fcpqueue::make_traits<
+                cds::opt::stat< cds::container::fcpqueue::stat<> >
+            >::type
+        > pqueue_type;
+
+        pqueue_type pq;
+        test( pq );
+    }
+
+    TEST_F( FCPQueue, deque_mutex )
+    {
+        typedef cds::container::FCPriorityQueue<
+            value_type
+            ,std::priority_queue<
+                value_type
+                ,std::deque<value_type>
+            >
+            ,cds::container::fcpqueue::make_traits<
+                cds::opt::lock_type< std::mutex >
+            >::type
+        > pqueue_type;
+
+        pqueue_type pq;
+        test( pq );
+    }
+
+} // namespace cds_test
diff --git a/test/unit/pqueue/fcpqueue_vector.cpp b/test/unit/pqueue/fcpqueue_vector.cpp
new file mode 100644 (file)
index 0000000..6de4855
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "test_fcpqueue.h"
+#include <cds/container/fcpriority_queue.h>
+
+namespace cds_test {
+
+    TEST_F( FCPQueue, vector )
+    {
+        typedef cds::container::FCPriorityQueue< FCPQueue::value_type > pqueue_type;
+        pqueue_type pq;
+        test( pq );
+    }
+
+    TEST_F( FCPQueue, vector_stat )
+    {
+        struct pqueue_traits : public cds::container::fcpqueue::traits
+        {
+            typedef cds::container::fcpqueue::stat<> stat;
+        };
+
+        typedef cds::container::FCPriorityQueue<
+            value_type
+            , std::priority_queue<
+                value_type
+                , std::vector<value_type>
+                , less
+            >
+            , pqueue_traits
+        > pqueue_type;
+
+        pqueue_type pq;
+        test( pq );
+    }
+
+    TEST_F( FCPQueue, vector_mutex )
+    {
+        typedef cds::container::FCPriorityQueue<
+            value_type
+            ,std::priority_queue< value_type >
+            ,cds::container::fcpqueue::make_traits<
+                cds::opt::lock_type< std::mutex >
+            >::type
+        > pqueue_type;
+
+        pqueue_type pq;
+        test( pq );
+    }
+
+} // namespace cds_test
diff --git a/test/unit/pqueue/intrusive_mspqueue.cpp b/test/unit/pqueue/intrusive_mspqueue.cpp
new file mode 100644 (file)
index 0000000..1c01994
--- /dev/null
@@ -0,0 +1,270 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "test_data.h"
+#include <cds/intrusive/mspriority_queue.h>
+
+namespace {
+
+    struct disposer {
+        size_t   m_nCallCount;
+
+        disposer()
+            : m_nCallCount( 0 )
+        {}
+
+        template <typename T>
+        void operator()( T& )
+        {
+            ++m_nCallCount;
+        }
+    };
+
+    class IntrusiveMSPQueue : public cds_test::PQueueTest
+    {
+        typedef cds_test::PQueueTest base_class;
+    protected:
+        template <class PQueue>
+        void test( PQueue& pq )
+        {
+            data_array<value_type> arr( pq.capacity() );
+            value_type * pFirst = arr.begin();
+            value_type * pLast = arr.end();
+
+            ASSERT_TRUE( pq.empty() );
+            ASSERT_FALSE( pq.full() );
+            ASSERT_EQ( pq.size(), 0 );
+            ASSERT_EQ( pq.capacity(), base_class::c_nCapacity - 1 );
+
+            size_t nSize = 0;
+
+            // Push test
+            for ( value_type * p = pFirst; p < pLast; ++p ) {
+                ASSERT_TRUE( pq.push( *p ) );
+                ASSERT_FALSE( pq.empty() );
+                ASSERT_EQ( pq.size(), ++nSize );
+            }
+
+            ASSERT_TRUE( pq.full() );
+            ASSERT_EQ( pq.size(), pq.capacity() );
+
+            // The queue is full
+            {
+                value_type k( base_class::c_nMinValue + key_type( base_class::c_nCapacity ));
+                ASSERT_FALSE( pq.push( k ) );
+                ASSERT_TRUE( pq.full() );
+                ASSERT_EQ( pq.size(), pq.capacity() );
+            }
+
+            // Pop test
+            key_type nPrev = base_class::c_nMinValue + key_type( pq.capacity() ) - 1;
+            value_type * p = pq.pop();
+            ASSERT_TRUE( p != nullptr );
+            EXPECT_EQ( p->k, nPrev );
+
+            ASSERT_EQ( pq.size(), pq.capacity() - 1 );
+            ASSERT_FALSE( pq.full() );
+            ASSERT_FALSE( pq.empty() );
+
+            nSize = pq.size();
+            while ( pq.size() > 1 ) {
+                p = pq.pop();
+                ASSERT_TRUE( p != nullptr );
+                EXPECT_EQ( p->k, nPrev - 1 );
+                nPrev = p->k;
+                --nSize;
+                ASSERT_EQ( pq.size(), nSize );
+            }
+
+            ASSERT_FALSE( pq.full() );
+            ASSERT_FALSE( pq.empty() );
+            ASSERT_EQ( pq.size(), 1 );
+
+            p = pq.pop();
+            ASSERT_TRUE( p != nullptr );
+            EXPECT_EQ( p->k, base_class::c_nMinValue );
+
+            ASSERT_FALSE( pq.full() );
+            ASSERT_TRUE( pq.empty() );
+            ASSERT_EQ( pq.size(), 0 );
+
+            // Clear test
+            for ( value_type * p = pFirst; p < pLast; ++p ) {
+                ASSERT_TRUE( pq.push( *p ) );
+            }
+            EXPECT_FALSE( pq.empty() );
+            EXPECT_TRUE( pq.full() );
+            EXPECT_EQ( pq.size(), pq.capacity() );
+            pq.clear();
+            EXPECT_TRUE( pq.empty() );
+            EXPECT_FALSE( pq.full() );
+            EXPECT_EQ( pq.size(), 0 );
+
+            // clear_with test
+            for ( value_type * p = pFirst; p < pLast; ++p ) {
+                ASSERT_TRUE( pq.push( *p ) );
+            }
+            ASSERT_FALSE( pq.empty() );
+            ASSERT_TRUE( pq.full() );
+            ASSERT_EQ( pq.size(), pq.capacity() );
+
+            {
+                disposer disp;
+                pq.clear_with( std::ref( disp ) );
+                ASSERT_TRUE( pq.empty() );
+                ASSERT_FALSE( pq.full() );
+                ASSERT_EQ( pq.size(), 0 );
+                ASSERT_EQ( disp.m_nCallCount, pq.capacity() );
+            }
+        }
+    };
+
+    typedef cds::opt::v::dynamic_buffer< char > dyn_buffer_type;
+    typedef cds::opt::v::static_buffer< char, IntrusiveMSPQueue::c_nCapacity > static_buffer_type;
+
+    TEST_F( IntrusiveMSPQueue, dynamic )
+    {
+        struct traits : public cds::intrusive::mspriority_queue::traits
+        {
+            typedef dyn_buffer_type buffer;
+        };
+        typedef cds::intrusive::MSPriorityQueue< value_type, traits > pqueue;
+
+        pqueue pq( c_nCapacity );
+        test( pq );
+    }
+
+    TEST_F( IntrusiveMSPQueue, dynamic_cmp )
+    {
+        struct traits : public cds::intrusive::mspriority_queue::traits
+        {
+            typedef dyn_buffer_type buffer;
+            typedef IntrusiveMSPQueue::compare compare;
+        };
+        typedef cds::intrusive::MSPriorityQueue< value_type, traits > pqueue;
+
+        pqueue pq( c_nCapacity );
+        test( pq );
+    }
+
+    TEST_F( IntrusiveMSPQueue, dynamic_less )
+    {
+        typedef cds::intrusive::MSPriorityQueue< value_type,
+            cds::intrusive::mspriority_queue::make_traits<
+                cds::opt::buffer< dyn_buffer_type >
+                ,cds::opt::less< std::less<value_type> >
+            >::type
+        > pqueue;
+
+        pqueue pq( c_nCapacity );
+        test( pq );
+    }
+
+    TEST_F( IntrusiveMSPQueue, dynamic_cmp_less )
+    {
+        typedef cds::intrusive::MSPriorityQueue< value_type,
+            cds::intrusive::mspriority_queue::make_traits<
+                cds::opt::buffer< dyn_buffer_type >
+                ,cds::opt::less< std::less<value_type> >
+                ,cds::opt::compare< IntrusiveMSPQueue::compare >
+            >::type
+        > pqueue;
+
+        pqueue pq( c_nCapacity );
+        test( pq );
+    }
+
+    TEST_F( IntrusiveMSPQueue, dynamic_mutex )
+    {
+        struct traits : public cds::intrusive::mspriority_queue::traits
+        {
+            typedef dyn_buffer_type buffer;
+            typedef IntrusiveMSPQueue::compare compare;
+            typedef std::mutex lock_type;
+        };
+        typedef cds::intrusive::MSPriorityQueue< value_type, traits > pqueue;
+
+        pqueue pq( c_nCapacity );
+        test( pq );
+    }
+
+    TEST_F( IntrusiveMSPQueue, stat )
+    {
+        struct traits : public cds::intrusive::mspriority_queue::traits
+        {
+            typedef static_buffer_type buffer;
+        };
+        typedef cds::intrusive::MSPriorityQueue< value_type, traits > pqueue;
+
+        std::unique_ptr<pqueue> pq( new pqueue(0));
+        test( *pq );
+    }
+
+    TEST_F( IntrusiveMSPQueue, stat_cmp )
+    {
+        typedef cds::intrusive::MSPriorityQueue< value_type,
+            cds::intrusive::mspriority_queue::make_traits<
+                cds::opt::buffer< static_buffer_type >
+                ,cds::opt::compare< compare >
+            >::type
+        > pqueue;
+
+        std::unique_ptr<pqueue> pq( new pqueue( 0 ) );
+        test( *pq );
+    }
+
+    TEST_F( IntrusiveMSPQueue, stat_less )
+    {
+        typedef cds::intrusive::MSPriorityQueue< value_type,
+            cds::intrusive::mspriority_queue::make_traits<
+                cds::opt::buffer< static_buffer_type >
+                ,cds::opt::less< less >
+            >::type
+        > pqueue;
+
+        std::unique_ptr<pqueue> pq( new pqueue( 0 ) );
+        test( *pq );
+    }
+
+    TEST_F( IntrusiveMSPQueue, stat_mutex )
+    {
+        struct traits : public cds::intrusive::mspriority_queue::traits
+        {
+            typedef static_buffer_type buffer;
+            typedef IntrusiveMSPQueue::compare compare;
+            typedef std::mutex lock_type;
+        };
+        typedef cds::intrusive::MSPriorityQueue< value_type, traits > pqueue;
+
+        std::unique_ptr<pqueue> pq( new pqueue( 0 ) );
+        test( *pq );
+    }
+
+} // namespace
diff --git a/test/unit/pqueue/mspqueue.cpp b/test/unit/pqueue/mspqueue.cpp
new file mode 100644 (file)
index 0000000..1966883
--- /dev/null
@@ -0,0 +1,285 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "test_data.h"
+#include <cds/container/mspriority_queue.h>
+
+namespace {
+
+    struct disposer {
+        size_t   m_nCallCount;
+
+        disposer()
+            : m_nCallCount( 0 )
+        {}
+
+        template <typename T>
+        void operator()( T& )
+        {
+            ++m_nCallCount;
+        }
+    };
+
+    class MSPQueue : public cds_test::PQueueTest
+    {
+        typedef cds_test::PQueueTest base_class;
+    protected:
+        template <class PQueue>
+        void test( PQueue& pq )
+        {
+            data_array<value_type> arr( pq.capacity() );
+            value_type * pFirst = arr.begin();
+            value_type * pLast = pFirst + pq.capacity();
+
+            ASSERT_TRUE( pq.empty() );
+            ASSERT_EQ( pq.size(), 0 );
+            ASSERT_EQ( pq.capacity(), base_class::c_nCapacity - 1 );
+
+            size_t nSize = 0;
+
+            // Push test
+            for ( value_type * p = pFirst; p < pLast; ++p ) {
+                switch ( pq.size() & 3 ) {
+                case 0:
+                    ASSERT_TRUE( pq.push_with( [p]( value_type& dest ) { dest = *p; } ) );
+                    break;
+                case 1:
+                    ASSERT_TRUE( pq.emplace( p->k, p->v ) );
+                    break;
+                case 2:
+                    ASSERT_TRUE( pq.emplace( std::make_pair( p->k, p->v ) ) );
+                    break;
+                default:
+                    ASSERT_TRUE( pq.push( *p ) );
+                }
+                ASSERT_TRUE( !pq.empty() );
+                ASSERT_TRUE( pq.size() == ++nSize );
+            }
+
+            ASSERT_TRUE( pq.full() );
+            ASSERT_EQ( pq.size(), pq.capacity() );
+
+            // The queue is full
+            key_type k = base_class::c_nMinValue + key_type( base_class::c_nCapacity );
+            ASSERT_TRUE( !pq.push( k ) );
+            ASSERT_TRUE( pq.full() );
+            ASSERT_EQ( pq.size(), pq.capacity() );
+
+            // Pop test
+            key_type nPrev = base_class::c_nMinValue + key_type( pq.capacity() ) - 1;
+            value_type kv( 0 );
+            key_type   key;
+            ASSERT_TRUE( pq.pop( kv ) );
+            EXPECT_EQ( kv.k, nPrev );
+
+            ASSERT_EQ( pq.size(), pq.capacity() - 1 );
+            ASSERT_TRUE( !pq.full() );
+            ASSERT_TRUE( !pq.empty() );
+
+            nSize = pq.size();
+            while ( pq.size() > 1 ) {
+                if ( pq.size() & 1 ) {
+                    ASSERT_TRUE( pq.pop( kv ) );
+                    EXPECT_EQ( kv.k, nPrev - 1 );
+                    nPrev = kv.k;
+                }
+                else {
+                    ASSERT_TRUE( pq.pop_with( [&key]( value_type& src ) { key = src.k;  } ) );
+                    EXPECT_EQ( key, nPrev - 1 );
+                    nPrev = key;
+                }
+
+                --nSize;
+                ASSERT_EQ( pq.size(), nSize );
+            }
+
+            ASSERT_TRUE( !pq.full() );
+            ASSERT_TRUE( !pq.empty() );
+            ASSERT_EQ( pq.size(), 1 );
+
+            ASSERT_TRUE( pq.pop( kv ) );
+            EXPECT_EQ( kv.k, base_class::c_nMinValue );
+
+            ASSERT_TRUE( !pq.full() );
+            ASSERT_TRUE( pq.empty() );
+            ASSERT_EQ( pq.size(), 0 );
+
+            // Clear test
+            for ( value_type * p = pFirst; p < pLast; ++p ) {
+                ASSERT_TRUE( pq.push( *p ) );
+            }
+            ASSERT_TRUE( !pq.empty() );
+            ASSERT_TRUE( pq.full() );
+            ASSERT_EQ( pq.size(), pq.capacity() );
+            pq.clear();
+            ASSERT_TRUE( pq.empty() );
+            ASSERT_TRUE( !pq.full() );
+            ASSERT_EQ( pq.size(), 0 );
+
+            // clear_with test
+            for ( value_type * p = pFirst; p < pLast; ++p ) {
+                ASSERT_TRUE( pq.push( *p ) );
+            }
+            ASSERT_TRUE( !pq.empty() );
+            ASSERT_TRUE( pq.full() );
+            ASSERT_EQ( pq.size(), pq.capacity() );
+
+            {
+                disposer disp;
+                pq.clear_with( std::ref( disp ) );
+                ASSERT_TRUE( pq.empty() );
+                ASSERT_TRUE( !pq.full() );
+                ASSERT_EQ( pq.size(), 0 );
+                ASSERT_EQ( disp.m_nCallCount, pq.capacity() );
+            }
+        }
+    };
+
+    typedef cds::opt::v::dynamic_buffer< char > dyn_buffer_type;
+    typedef cds::opt::v::static_buffer< char, MSPQueue::c_nCapacity > static_buffer_type;
+
+    TEST_F( MSPQueue, dynamic )
+    {
+        typedef cds::container::MSPriorityQueue< MSPQueue::value_type,
+            cds::container::mspriority_queue::make_traits<
+                cds::opt::buffer< dyn_buffer_type >
+            >::type
+        > pqueue;
+
+        pqueue pq( c_nCapacity );
+        test( pq );
+    }
+
+    TEST_F( MSPQueue, dynamic_cmp )
+    {
+        typedef cds::container::MSPriorityQueue< value_type,
+            cds::container::mspriority_queue::make_traits<
+                cds::opt::buffer< dyn_buffer_type >
+                , cds::opt::compare< compare >
+            >::type
+        > pqueue;
+
+        pqueue pq( c_nCapacity );
+        test( pq );
+    }
+
+    TEST_F( MSPQueue, dynamic_less )
+    {
+        typedef cds::container::MSPriorityQueue< value_type,
+            cds::container::mspriority_queue::make_traits<
+                cds::opt::buffer< dyn_buffer_type >
+                ,cds::opt::less< less >
+            >::type
+        > pqueue;
+
+        pqueue pq( c_nCapacity );
+        test( pq );
+    }
+    TEST_F( MSPQueue, dynamic_cmp_less )
+    {
+        struct pqueue_traits : public cds::container::mspriority_queue::traits
+        {
+            typedef dyn_buffer_type buffer;
+            typedef MSPQueue::less less;
+            typedef MSPQueue::compare compare;
+        };
+        typedef cds::container::MSPriorityQueue< value_type, pqueue_traits > pqueue;
+
+        pqueue pq( c_nCapacity );
+        test( pq );
+    }
+
+    TEST_F( MSPQueue, dynamic_mutex )
+    {
+        typedef cds::container::MSPriorityQueue< value_type,
+            cds::container::mspriority_queue::make_traits<
+                cds::opt::buffer< dyn_buffer_type >
+                ,cds::opt::compare< compare >
+                ,cds::opt::lock_type<std::mutex>
+            >::type
+        > pqueue;
+
+        pqueue pq( c_nCapacity );
+        test( pq );
+    }
+
+    TEST_F( MSPQueue, stat )
+    {
+        typedef cds::container::MSPriorityQueue< MSPQueue::value_type,
+            cds::container::mspriority_queue::make_traits<
+            cds::opt::buffer< static_buffer_type >
+            >::type
+        > pqueue;
+
+        std::unique_ptr< pqueue > pq( new pqueue(0));
+        test( *pq );
+    }
+
+    TEST_F( MSPQueue, stat_cmp )
+    {
+        typedef cds::container::MSPriorityQueue< value_type,
+            cds::container::mspriority_queue::make_traits<
+                cds::opt::buffer< static_buffer_type >
+                ,cds::opt::compare< compare >
+            >::type
+        > pqueue;
+
+        std::unique_ptr< pqueue > pq( new pqueue(0));
+        test( *pq );
+    }
+
+    TEST_F( MSPQueue, stat_less )
+    {
+        typedef cds::container::MSPriorityQueue< value_type,
+            cds::container::mspriority_queue::make_traits<
+                cds::opt::buffer< static_buffer_type >
+                ,cds::opt::less< less >
+            >::type
+        > pqueue;
+
+        std::unique_ptr< pqueue > pq( new pqueue(0));
+        test( *pq );
+    }
+
+    TEST_F( MSPQueue, stat_mutex )
+    {
+        typedef cds::container::MSPriorityQueue< value_type,
+            cds::container::mspriority_queue::make_traits<
+                cds::opt::buffer< static_buffer_type >
+                ,cds::opt::less< less >
+                ,cds::opt::lock_type<std::mutex>
+            >::type
+        > pqueue;
+
+        std::unique_ptr< pqueue > pq( new pqueue(0));
+        test( *pq );
+    }
+
+} // namespace
diff --git a/test/unit/pqueue/test_data.h b/test/unit/pqueue/test_data.h
new file mode 100644 (file)
index 0000000..7145d4c
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef CDSUNIT_PQUEUE_TEST_DATA_H
+#define CDSUNIT_PQUEUE_TEST_DATA_H
+
+#include <cds_test/fixture.h>
+#include <memory>
+
+namespace cds_test {
+
+    class PQueueTest : public ::cds_test::fixture
+    {
+    public:
+        typedef int     key_type;
+
+        struct value_type {
+            key_type    k;
+            int         v;
+
+            value_type()
+            {}
+
+            value_type( value_type const& kv )
+                : k( kv.k )
+                , v( kv.v )
+            {}
+
+            value_type( key_type key )
+                : k( key )
+                , v( key )
+            {}
+
+            value_type( key_type key, int val )
+                : k( key )
+                , v( val )
+            {}
+
+            value_type( std::pair<key_type, int> const& p )
+                : k( p.first )
+                , v( p.second )
+            {}
+        };
+
+        struct compare {
+            int operator()( value_type k1, value_type k2 ) const
+            {
+                return k1.k - k2.k;
+            }
+        };
+
+        struct less {
+            bool operator()( value_type k1, value_type k2 ) const
+            {
+                return k1.k < k2.k;
+            }
+        };
+
+        enum {
+            c_nMinValue = -123,
+            c_nCapacity = 1024
+        };
+
+    protected:
+        template <typename T>
+        class data_array
+        {
+            std::unique_ptr<T[]> pFirst;
+            T *     pLast;
+
+        public:
+            data_array( size_t nSize )
+                : pFirst( new T[nSize] )
+                , pLast( pFirst.get() + nSize )
+            {
+                key_type i = c_nMinValue;
+                for ( T * p = pFirst.get(); p != pLast; ++p, ++i )
+                    p->k = p->v = i;
+
+                shuffle( pFirst.get(), pLast );
+            }
+
+            T * begin() { return pFirst.get(); }
+            T * end()   { return pLast; }
+            size_t size() const
+            {
+                return pLast - pFirst;
+            }
+        };
+    };
+} // namespace cds_test
+
+namespace std {
+    template<>
+    struct less<cds_test::PQueueTest::value_type>
+    {
+        bool operator()( cds_test::PQueueTest::value_type const& v1, cds_test::PQueueTest::value_type const& v2 ) const
+        {
+            return cds_test::PQueueTest::less()(v1, v2);
+        }
+    };
+}
+
+#endif // CDSUNIT_PQUEUE_FCPQUEUE_H
diff --git a/test/unit/pqueue/test_fcpqueue.h b/test/unit/pqueue/test_fcpqueue.h
new file mode 100644 (file)
index 0000000..9943a7a
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef CDSUNIT_PQUEUE_FCPQUEUE_H
+#define CDSUNIT_PQUEUE_FCPQUEUE_H
+
+#include "test_data.h"
+
+namespace cds_test {
+
+    class FCPQueue : public PQueueTest
+    {
+    protected:
+        template <class PQueue>
+        void test( PQueue& pq )
+        {
+            data_array<value_type> arr( PQueueTest::c_nCapacity );
+            value_type * pFirst = arr.begin();
+            value_type * pLast = arr.end();
+
+            ASSERT_TRUE( pq.empty() );
+            ASSERT_TRUE( pq.size() == 0 );
+
+            size_t nSize = 0;
+
+            // Push test
+            for ( value_type * p = pFirst; p < pLast; ++p ) {
+                ASSERT_TRUE( pq.push( *p ) );
+                ASSERT_TRUE( !pq.empty() );
+                ASSERT_EQ( pq.size(), ++nSize );
+            }
+
+            ASSERT_EQ( pq.size(), PQueueTest::c_nCapacity );
+
+            // Pop test
+            key_type nPrev = PQueueTest::c_nMinValue + key_type( PQueueTest::c_nCapacity ) - 1;
+            value_type kv( 0 );
+
+            ASSERT_TRUE( pq.pop( kv ) );
+            EXPECT_EQ( kv.k, nPrev );
+
+            ASSERT_EQ( pq.size(), PQueueTest::c_nCapacity - 1 );
+            ASSERT_TRUE( !pq.empty() );
+
+            nSize = pq.size();
+            while ( pq.size() > 1 ) {
+                ASSERT_TRUE( pq.pop( kv ) );
+                EXPECT_EQ( kv.k, nPrev - 1 );
+                nPrev = kv.k;
+
+                --nSize;
+                ASSERT_EQ( pq.size(), nSize );
+            }
+
+            ASSERT_TRUE( !pq.empty() );
+            ASSERT_EQ( pq.size(), 1 );
+
+            ASSERT_TRUE( pq.pop( kv ) );
+            EXPECT_EQ( kv.k, PQueueTest::c_nMinValue );
+
+            ASSERT_TRUE( pq.empty() );
+            ASSERT_EQ( pq.size(), 0 );
+
+            // pop from empty pqueue
+            kv.k = PQueueTest::c_nCapacity * 2;
+            ASSERT_FALSE( pq.pop( kv ));
+            EXPECT_EQ( kv.k, PQueueTest::c_nCapacity * 2 );
+
+            // Clear test
+            for ( value_type * p = pFirst; p < pLast; ++p )
+                ASSERT_TRUE( pq.push( *p ) );
+
+            ASSERT_TRUE( !pq.empty() );
+            ASSERT_EQ( pq.size(), PQueueTest::c_nCapacity );
+
+            pq.clear();
+            ASSERT_TRUE( pq.empty() );
+            ASSERT_EQ( pq.size(), 0 );
+        }
+    };
+} // namespace cds_test
+
+#endif // CDSUNIT_PQUEUE_FCPQUEUE_H
diff --git a/test/unit/queue/CMakeLists.txt b/test/unit/queue/CMakeLists.txt
new file mode 100644 (file)
index 0000000..0031099
--- /dev/null
@@ -0,0 +1,47 @@
+set(PACKAGE_NAME unit-queue)
+
+set(CDSGTEST_QUEUE_SOURCES
+    ../main.cpp
+    basket_queue_hp.cpp
+    basket_queue_dhp.cpp
+    fcqueue.cpp
+    moirqueue_hp.cpp
+    moirqueue_dhp.cpp
+    msqueue_hp.cpp
+    msqueue_dhp.cpp
+    optimistic_queue_hp.cpp
+    optimistic_queue_dhp.cpp
+    rwqueue.cpp
+    segmented_queue_hp.cpp
+    segmented_queue_dhp.cpp
+    tsigas_queue.cpp
+    vyukov_mpmc_queue.cpp
+    intrusive_basket_queue_hp.cpp
+    intrusive_basket_queue_dhp.cpp
+    intrusive_fcqueue.cpp
+    intrusive_msqueue_hp.cpp
+    intrusive_msqueue_dhp.cpp
+    intrusive_moirqueue_hp.cpp
+    intrusive_moirqueue_dhp.cpp
+    intrusive_optqueue_hp.cpp
+    intrusive_optqueue_dhp.cpp
+    intrusive_segmented_queue_hp.cpp
+    intrusive_segmented_queue_dhp.cpp
+    intrusive_tsigas_queue.cpp
+    intrusive_vyukov_queue.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_executable(${PACKAGE_NAME} ${CDSGTEST_QUEUE_SOURCES})
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/unit/queue/basket_queue_dhp.cpp b/test/unit/queue/basket_queue_dhp.cpp
new file mode 100644 (file)
index 0000000..e08838d
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_generic_queue.h"
+
+#include <cds/gc/dhp.h>
+#include <cds/container/basket_queue.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+
+    class BasketQueue_DHP : public cds_test::generic_queue
+    {
+    protected:
+        void SetUp()
+        {
+            typedef cc::BasketQueue< gc_type, int > queue_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, queue_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( BasketQueue_DHP, defaulted )
+    {
+        typedef cds::container::BasketQueue< gc_type, int > test_queue;
+
+        test_queue q;
+        test(q);
+    }
+
+    TEST_F( BasketQueue_DHP, item_counting )
+    {
+        typedef cds::container::BasketQueue < gc_type, int,
+            typename cds::container::basket_queue::make_traits <
+                cds::opt::item_counter < cds::atomicity::item_counter >
+            > ::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( BasketQueue_DHP, relaxed )
+    {
+        typedef cds::container::BasketQueue < gc_type, int,
+            typename cds::container::basket_queue::make_traits <
+                cds::opt::item_counter< cds::atomicity::item_counter >
+                , cds::opt::memory_model < cds::opt::v::relaxed_ordering >
+            > ::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( BasketQueue_DHP, aligned )
+    {
+        typedef cds::container::BasketQueue < gc_type, int,
+            typename cds::container::basket_queue::make_traits <
+                cds::opt::memory_model< cds::opt::v::relaxed_ordering>
+                , cds::opt::padding < 32 >
+            >::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( BasketQueue_DHP, seq_cst )
+    {
+        struct traits : public cc::basket_queue::traits
+        {
+            typedef cds::opt::v::sequential_consistent memory_model;
+            typedef cds::atomicity::item_counter item_counter;
+            enum { padding = 64 };
+        };
+        typedef cds::container::BasketQueue < gc_type, int, traits > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( BasketQueue_DHP, move )
+    {
+        typedef cds::container::BasketQueue< gc_type, std::string > test_queue;
+
+        test_queue q;
+        test_string( q );
+    }
+
+    TEST_F( BasketQueue_DHP, move_item_counting )
+    {
+        struct traits : public cc::basket_queue::traits
+        {
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cds::container::BasketQueue< gc_type, std::string, traits > test_queue;
+
+        test_queue q;
+        test_string( q );
+    }
+
+} // namespace
+
diff --git a/test/unit/queue/basket_queue_hp.cpp b/test/unit/queue/basket_queue_hp.cpp
new file mode 100644 (file)
index 0000000..7587bc7
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_generic_queue.h"
+
+#include <cds/gc/hp.h>
+#include <cds/container/basket_queue.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+
+    class BasketQueue_HP : public cds_test::generic_queue
+    {
+    protected:
+        void SetUp()
+        {
+            typedef cc::BasketQueue< gc_type, int > queue_type;
+
+            cds::gc::hp::GarbageCollector::Construct( queue_type::c_nHazardPtrCount, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( BasketQueue_HP, defaulted )
+    {
+        typedef cds::container::BasketQueue< gc_type, int > test_queue;
+
+        test_queue q;
+        test(q);
+    }
+
+    TEST_F( BasketQueue_HP, item_counting )
+    {
+        typedef cds::container::BasketQueue < gc_type, int,
+            typename cds::container::basket_queue::make_traits <
+                cds::opt::item_counter < cds::atomicity::item_counter >
+            > ::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( BasketQueue_HP, relaxed )
+    {
+        typedef cds::container::BasketQueue < gc_type, int,
+            typename cds::container::basket_queue::make_traits <
+                cds::opt::item_counter< cds::atomicity::item_counter >
+                , cds::opt::memory_model < cds::opt::v::relaxed_ordering >
+            > ::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( BasketQueue_HP, aligned )
+    {
+        typedef cds::container::BasketQueue < gc_type, int,
+            typename cds::container::basket_queue::make_traits <
+                cds::opt::memory_model< cds::opt::v::relaxed_ordering>
+                , cds::opt::padding < 32 >
+            >::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( BasketQueue_HP, seq_cst )
+    {
+        struct traits : public cc::basket_queue::traits
+        {
+            typedef cds::opt::v::sequential_consistent memory_model;
+            typedef cds::atomicity::item_counter item_counter;
+            enum { padding = 64 };
+        };
+        typedef cds::container::BasketQueue < gc_type, int, traits > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( BasketQueue_HP, move )
+    {
+        typedef cds::container::BasketQueue< gc_type, std::string > test_queue;
+
+        test_queue q;
+        test_string( q );
+    }
+
+    TEST_F( BasketQueue_HP, move_item_counting )
+    {
+        struct traits : public cc::basket_queue::traits
+        {
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cds::container::BasketQueue< gc_type, std::string, traits > test_queue;
+
+        test_queue q;
+        test_string( q );
+    }
+
+} // namespace
+
diff --git a/test/unit/queue/fcqueue.cpp b/test/unit/queue/fcqueue.cpp
new file mode 100644 (file)
index 0000000..7681dde
--- /dev/null
@@ -0,0 +1,245 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include <gtest/gtest.h>
+#include <cds/container/fcqueue.h>
+
+#include <list>
+
+namespace {
+
+    class FCQueue: public ::testing::Test
+    {
+    protected:
+        template <class Queue>
+        void test( Queue& q )
+        {
+            typedef typename Queue::value_type value_type;
+            value_type it;
+
+            const size_t nSize = 100;
+
+            ASSERT_TRUE( q.empty() );
+            ASSERT_EQ( q.size(), 0 );
+
+            // enqueue/dequeue
+            for ( size_t i = 0; i < nSize; ++i ) {
+                ASSERT_TRUE( q.enqueue( static_cast<value_type>(i)));
+                ASSERT_EQ( q.size(), i + 1 );
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_EQ( q.size(), nSize );
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                it = -1;
+                ASSERT_TRUE( q.dequeue( it ));
+                ASSERT_EQ( it, i );
+                ASSERT_EQ( q.size(), nSize - i - 1 );
+            }
+            ASSERT_TRUE( q.empty() );
+            ASSERT_EQ( q.size(), 0 );
+
+            // push/pop
+            for ( size_t i = 0; i < nSize; ++i ) {
+                ASSERT_TRUE( q.push( static_cast<value_type>(i)));
+                ASSERT_EQ( q.size(), i + 1 );
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_EQ( q.size(), nSize );
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                it = -1;
+                ASSERT_TRUE( q.pop( it ) );
+                ASSERT_EQ( it, i );
+                ASSERT_EQ( q.size(), nSize - i - 1 );
+            }
+            ASSERT_TRUE( q.empty() );
+            ASSERT_EQ( q.size(), 0 );
+
+            // clear
+            for ( size_t i = 0; i < nSize; ++i ) {
+                ASSERT_TRUE( q.push( static_cast<value_type>( i )));
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_EQ( q.size(), nSize );
+
+            q.clear();
+            ASSERT_TRUE( q.empty() );
+            ASSERT_EQ( q.size(), 0 );
+
+            // pop from empty queue
+            it = nSize * 2;
+            ASSERT_FALSE( q.pop( it ));
+            ASSERT_EQ( it, nSize * 2 );
+            ASSERT_TRUE( q.empty() );
+            ASSERT_EQ( q.size(), 0 );
+
+            ASSERT_FALSE( q.dequeue( it ) );
+            ASSERT_EQ( it, nSize * 2 );
+            ASSERT_TRUE( q.empty() );
+            ASSERT_EQ( q.size(), 0 );
+        }
+
+        template <class Queue>
+        void test_string( Queue& q )
+        {
+            std::string str[3];
+            str[0] = "one";
+            str[1] = "two";
+            str[2] = "three";
+            const size_t nSize = sizeof( str ) / sizeof( str[0] );
+
+            // move push
+            for ( size_t i = 0; i < nSize; ++i ) {
+                std::string s = str[i];
+                ASSERT_FALSE( s.empty());
+                ASSERT_TRUE( q.enqueue( std::move( s )));
+                ASSERT_FALSE( s.empty());
+                ASSERT_EQ( q.size(), i + 1 );
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_EQ( q.size(), nSize );
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                std::string s;
+                ASSERT_TRUE( q.pop( s ));
+                ASSERT_EQ( q.size(), nSize - i - 1 );
+                ASSERT_EQ( s, str[i] );
+            }
+            ASSERT_TRUE( q.empty() );
+            ASSERT_EQ( q.size(), 0 );
+        }
+    };
+
+    TEST_F( FCQueue, std_deque )
+    {
+        typedef cds::container::FCQueue<int> queue_type;
+
+        queue_type q;
+        test( q );
+    }
+
+    TEST_F( FCQueue, std_deque_move )
+    {
+        typedef cds::container::FCQueue<std::string> queue_type;
+
+        queue_type q;
+        test_string( q );
+    }
+
+    TEST_F( FCQueue, std_deque_elimination )
+    {
+        typedef cds::container::FCQueue<int, std::queue< int, std::deque<int>>,
+            cds::container::fcqueue::make_traits<
+                cds::opt::enable_elimination< true >
+            >::type
+        > queue_type;
+
+        queue_type q;
+        test( q );
+    }
+
+    TEST_F( FCQueue, std_deque_elimination_move )
+    {
+        typedef cds::container::FCQueue<std::string, std::queue< std::string, std::deque<std::string>>,
+            cds::container::fcqueue::make_traits<
+                cds::opt::enable_elimination< true >
+            >::type
+        > queue_type;
+
+        queue_type q;
+        test_string( q );
+    }
+
+    TEST_F( FCQueue, std_deque_mutex )
+    {
+        typedef cds::container::FCQueue<int, std::queue< int, std::deque<int>>,
+            cds::container::fcqueue::make_traits<
+                cds::opt::lock_type< std::mutex >
+            >::type
+        > queue_type;
+
+        queue_type q;
+        test( q );
+    }
+
+    TEST_F( FCQueue, std_list )
+    {
+        typedef cds::container::FCQueue<int, std::queue< int, std::list<int>>> queue_type;
+
+        queue_type q;
+        test( q );
+    }
+
+    TEST_F( FCQueue, std_list_move )
+    {
+        typedef cds::container::FCQueue<std::string, std::queue< std::string, std::list<std::string>>> queue_type;
+
+        queue_type q;
+        test_string( q );
+    }
+
+    TEST_F( FCQueue, std_list_elimination )
+    {
+        typedef cds::container::FCQueue<int, std::queue< int, std::list<int> >,
+            cds::container::fcqueue::make_traits<
+                cds::opt::enable_elimination< true >
+            >::type
+        > queue_type;
+
+        queue_type q;
+        test( q );
+    }
+
+    TEST_F( FCQueue, std_list_elimination_move )
+    {
+        typedef cds::container::FCQueue<std::string, std::queue< std::string, std::list<std::string> >,
+            cds::container::fcqueue::make_traits<
+            cds::opt::enable_elimination< true >
+            >::type
+        > queue_type;
+
+        queue_type q;
+        test_string( q );
+    }
+
+    TEST_F( FCQueue, std_list_mutex )
+    {
+        typedef cds::container::FCQueue<int, std::queue<int, std::list<int> >,
+            cds::container::fcqueue::make_traits<
+                cds::opt::lock_type< std::mutex >
+            >::type
+        > queue_type;
+
+        queue_type q;
+        test( q );
+    }
+
+} // namespace
diff --git a/test/unit/queue/intrusive_basket_queue_dhp.cpp b/test/unit/queue/intrusive_basket_queue_dhp.cpp
new file mode 100644 (file)
index 0000000..67f169b
--- /dev/null
@@ -0,0 +1,187 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_msqueue.h"
+
+#include <cds/gc/dhp.h>
+#include <cds/intrusive/basket_queue.h>
+#include <vector>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::DHP gc_type;
+
+
+    class IntrusiveBasketQueue_DHP : public cds_test::intrusive_msqueue
+    {
+        typedef cds_test::intrusive_msqueue base_class;
+
+    protected:
+        typedef typename base_class::base_hook_item< ci::basket_queue::node<gc_type>> base_item_type;
+        typedef typename base_class::member_hook_item< ci::basket_queue::node<gc_type>> member_item_type;
+
+        void SetUp()
+        {
+            typedef ci::BasketQueue< gc_type, base_item_type,
+                typename ci::basket_queue::make_traits<
+                    ci::opt::hook< ci::basket_queue::base_hook< ci::opt::gc<gc_type>>>
+                >::type
+            > queue_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, queue_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+
+        template <typename V>
+        void check_array( V& arr )
+        {
+            for ( size_t i = 0; i < arr.size() - 1; ++i ) {
+                ASSERT_EQ( arr[i].nDisposeCount, 2 );
+            }
+            ASSERT_EQ( arr.back().nDisposeCount, 1 );
+        }
+    };
+
+    TEST_F( IntrusiveBasketQueue_DHP, base_hook )
+    {
+        typedef cds::intrusive::BasketQueue< gc_type, base_item_type,
+            typename ci::basket_queue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                ,ci::opt::hook< ci::basket_queue::base_hook< ci::opt::gc<gc_type>>>
+            >::type
+        > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveBasketQueue_DHP, base_item_counting )
+    {
+        typedef cds::intrusive::BasketQueue< gc_type, base_item_type,
+            typename ci::basket_queue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                , cds::opt::item_counter< cds::atomicity::item_counter >
+                , ci::opt::hook< ci::basket_queue::base_hook< ci::opt::gc<gc_type>>>
+            >::type
+        > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveBasketQueue_DHP, base_stat )
+    {
+        struct traits : public ci::basket_queue::traits
+        {
+            typedef ci::basket_queue::base_hook< ci::opt::gc<gc_type>> hook;
+            typedef mock_disposer disposer;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef ci::basket_queue::stat<> stat;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cds::intrusive::BasketQueue< gc_type, base_item_type, traits > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveBasketQueue_DHP, member_hook )
+    {
+        typedef cds::intrusive::BasketQueue< gc_type, member_item_type,
+            typename ci::basket_queue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                ,ci::opt::hook< ci::basket_queue::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                >>
+            >::type
+        > test_queue;
+
+        std::vector<member_item_type> arr;
+        arr.resize( 100 );
+        {
+            test_queue q;
+            test( q, arr );
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveBasketQueue_DHP, member_hook_stat )
+    {
+        struct traits : public ci::basket_queue::traits
+        {
+            typedef ci::basket_queue::member_hook<
+                offsetof( member_item_type, hMember ),
+                ci::opt::gc<gc_type>
+            > hook;
+            typedef mock_disposer disposer;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef ci::basket_queue::stat<> stat;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cds::intrusive::BasketQueue< gc_type, member_item_type, traits > test_queue;
+
+        std::vector<member_item_type> arr;
+        arr.resize( 100 );
+        {
+            test_queue q;
+            test( q, arr );
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+} // namespace
+
diff --git a/test/unit/queue/intrusive_basket_queue_hp.cpp b/test/unit/queue/intrusive_basket_queue_hp.cpp
new file mode 100644 (file)
index 0000000..2cba55e
--- /dev/null
@@ -0,0 +1,200 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_msqueue.h"
+
+#include <cds/gc/hp.h>
+#include <cds/intrusive/basket_queue.h>
+#include <vector>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::HP gc_type;
+
+
+    class IntrusiveBasketQueue_HP : public cds_test::intrusive_msqueue
+    {
+        typedef cds_test::intrusive_msqueue base_class;
+
+    protected:
+        typedef typename base_class::base_hook_item< ci::basket_queue::node<gc_type>> base_item_type;
+        typedef typename base_class::member_hook_item< ci::basket_queue::node<gc_type>> member_item_type;
+
+        void SetUp()
+        {
+            typedef ci::BasketQueue< gc_type, base_item_type > queue_type;
+
+            cds::gc::hp::GarbageCollector::Construct( queue_type::c_nHazardPtrCount, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+
+        template <typename V>
+        void check_array( V& arr )
+        {
+            for ( size_t i = 0; i < arr.size() - 1; ++i ) {
+                ASSERT_EQ( arr[i].nDisposeCount, 2 );
+            }
+            ASSERT_EQ( arr.back().nDisposeCount, 1 );
+        }
+    };
+
+    TEST_F( IntrusiveBasketQueue_HP, defaulted )
+    {
+        typedef cds::intrusive::BasketQueue< gc_type, base_item_type,
+            typename ci::basket_queue::make_traits<
+                ci::opt::disposer< mock_disposer >
+            >::type
+        > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveBasketQueue_HP, base_hook )
+    {
+        typedef cds::intrusive::BasketQueue< gc_type, base_item_type,
+            typename ci::basket_queue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                ,ci::opt::hook< ci::basket_queue::base_hook< ci::opt::gc<gc_type>>>
+            >::type
+        > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveBasketQueue_HP, base_item_counting )
+    {
+        typedef cds::intrusive::BasketQueue< gc_type, base_item_type,
+            typename ci::basket_queue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                , cds::opt::item_counter< cds::atomicity::item_counter >
+                , ci::opt::hook< ci::basket_queue::base_hook< ci::opt::gc<gc_type>>>
+            >::type
+        > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveBasketQueue_HP, base_stat )
+    {
+        struct traits : public ci::basket_queue::traits
+        {
+            typedef mock_disposer disposer;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef ci::basket_queue::stat<> stat;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cds::intrusive::BasketQueue< gc_type, base_item_type, traits > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveBasketQueue_HP, member_hook )
+    {
+        typedef cds::intrusive::BasketQueue< gc_type, member_item_type,
+            typename ci::basket_queue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                ,ci::opt::hook< ci::basket_queue::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                >>
+            >::type
+        > test_queue;
+
+        std::vector<member_item_type> arr;
+        arr.resize( 100 );
+        {
+            test_queue q;
+            test( q, arr );
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveBasketQueue_HP, member_hook_stat )
+    {
+        struct traits : public ci::basket_queue::traits
+        {
+            typedef ci::basket_queue::member_hook<
+                offsetof( member_item_type, hMember ),
+                ci::opt::gc<gc_type>
+            > hook;
+            typedef mock_disposer disposer;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef ci::basket_queue::stat<> stat;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cds::intrusive::BasketQueue< gc_type, member_item_type, traits > test_queue;
+
+        std::vector<member_item_type> arr;
+        arr.resize( 100 );
+        {
+            test_queue q;
+            test( q, arr );
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+} // namespace
+
diff --git a/test/unit/queue/intrusive_fcqueue.cpp b/test/unit/queue/intrusive_fcqueue.cpp
new file mode 100644 (file)
index 0000000..189cf09
--- /dev/null
@@ -0,0 +1,310 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include <gtest/gtest.h>
+#include <cds/intrusive/fcqueue.h>
+
+#include <vector>
+#include <boost/intrusive/slist.hpp>
+
+namespace {
+
+    class IntrusiveFCQueue : public ::testing::Test
+    {
+    protected:
+        template <typename Hook>
+        struct base_hook_item : public Hook
+        {
+            int nVal;
+            int nDisposeCount;
+
+            base_hook_item()
+                : nDisposeCount( 0 )
+            {}
+        };
+
+        template <typename Hook>
+        struct member_hook_item
+        {
+            int nVal;
+            int nDisposeCount;
+            Hook hMember;
+
+            member_hook_item()
+                : nDisposeCount( 0 )
+            {}
+        };
+
+    public:
+        struct disposer
+        {
+            template <typename T>
+            void operator ()( T * p )
+            {
+                ++p->nDisposeCount;
+            }
+        };
+
+    protected:
+        template <typename Queue>
+        void test( Queue& q )
+        {
+            typedef typename Queue::value_type value_type;
+
+            size_t const nSize = 100;
+            value_type * pv;
+            std::vector<value_type> arr;
+            arr.resize( nSize );
+            for ( size_t i = 0; i < nSize; ++i )
+                arr[i].nVal = static_cast<int>(i);
+
+            ASSERT_TRUE( q.empty() );
+            ASSERT_EQ( q.size(), 0 );
+
+            // pop from empty queue
+            pv = q.pop();
+            ASSERT_TRUE( pv == nullptr );
+            ASSERT_TRUE( q.empty() );
+            ASSERT_EQ( q.size(), 0 );
+
+            pv = q.dequeue();
+            ASSERT_TRUE( pv == nullptr );
+            ASSERT_TRUE( q.empty() );
+            ASSERT_EQ( q.size(), 0 );
+
+            // push/pop test
+            for ( size_t i = 0; i < nSize; ++i ) {
+                if ( i & 1 )
+                    q.push( arr[i] );
+                else
+                    q.enqueue( arr[i] );
+                ASSERT_FALSE( q.empty() );
+                ASSERT_EQ( q.size(), i + 1 );
+            }
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                ASSERT_FALSE( q.empty() );
+                ASSERT_EQ( q.size(), nSize - i );
+                if ( i & 1 )
+                    pv = q.pop();
+                else
+                    pv = q.dequeue();
+                ASSERT_FALSE( pv == nullptr );
+                ASSERT_EQ( pv->nVal, static_cast<int>(i) );
+            }
+            ASSERT_TRUE( q.empty() );
+            ASSERT_EQ( q.size(), 0 );
+
+            // pop() doesn't call disposer
+            for ( size_t i = 0; i < nSize; ++i ) {
+                ASSERT_EQ( arr[i].nDisposeCount, 0 );
+            }
+
+            // clear with disposer
+            for ( size_t i = 0; i < nSize; ++i )
+                q.push( arr[i] );
+
+            ASSERT_FALSE( q.empty() );
+            ASSERT_EQ( q.size(), nSize );
+
+            q.clear( true );
+            ASSERT_TRUE( q.empty() );
+            ASSERT_EQ( q.size(), 0 );
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                ASSERT_EQ( arr[i].nDisposeCount, 1 );
+            }
+
+            // clear without disposer
+            for ( size_t i = 0; i < nSize; ++i )
+                q.push( arr[i] );
+
+            q.clear();
+            ASSERT_TRUE( q.empty() );
+            ASSERT_EQ( q.size(), 0 );
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                ASSERT_EQ( arr[i].nDisposeCount, 1 );
+            }
+        }
+    };
+
+    TEST_F( IntrusiveFCQueue, base )
+    {
+        typedef base_hook_item< boost::intrusive::list_base_hook<> > value_type;
+        typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type >,
+            cds::intrusive::fcqueue::make_traits<
+                cds::intrusive::opt::disposer< disposer >
+            >::type
+        > queue_type;
+
+        queue_type q;
+        test( q );
+    }
+
+    TEST_F( IntrusiveFCQueue, base_mutex )
+    {
+        typedef base_hook_item< boost::intrusive::list_base_hook<> > value_type;
+        struct traits : public cds::intrusive::fcqueue::traits
+        {
+            typedef IntrusiveFCQueue::disposer disposer;
+            typedef std::mutex lock_type;
+            typedef cds::intrusive::fcqueue::stat<> stat;
+        };
+        typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type >, traits > queue_type;
+
+        queue_type q;
+        test( q );
+    }
+
+    TEST_F( IntrusiveFCQueue, base_elimination )
+    {
+        typedef base_hook_item< boost::intrusive::list_base_hook<> > value_type;
+        struct traits : public
+            cds::intrusive::fcqueue::make_traits <
+                cds::intrusive::opt::disposer< disposer >
+                , cds::opt::enable_elimination < true >
+            > ::type
+        {};
+        typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type >, traits > queue_type;
+
+        queue_type q;
+        test( q );
+    }
+
+    TEST_F( IntrusiveFCQueue, member )
+    {
+        typedef member_hook_item< boost::intrusive::list_member_hook<> > value_type;
+        typedef boost::intrusive::member_hook<value_type, boost::intrusive::list_member_hook<>, &value_type::hMember> member_option;
+
+        typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type, member_option >,
+            cds::intrusive::fcqueue::make_traits<
+                cds::intrusive::opt::disposer< disposer >
+            >::type
+        > queue_type;
+
+        queue_type q;
+        test( q );
+    }
+
+    TEST_F( IntrusiveFCQueue, member_mutex )
+    {
+        typedef member_hook_item< boost::intrusive::list_member_hook<> > value_type;
+        typedef boost::intrusive::member_hook<value_type, boost::intrusive::list_member_hook<>, &value_type::hMember> member_option;
+
+        struct traits : public cds::intrusive::fcqueue::traits
+        {
+            typedef IntrusiveFCQueue::disposer disposer;
+            typedef std::mutex lock_type;
+            typedef cds::intrusive::fcqueue::stat<> stat;
+        };
+        typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type, member_option >, traits > queue_type;
+
+        queue_type q;
+        test( q );
+    }
+
+    TEST_F( IntrusiveFCQueue, member_elimination )
+    {
+        typedef member_hook_item< boost::intrusive::list_member_hook<> > value_type;
+        typedef boost::intrusive::member_hook<value_type, boost::intrusive::list_member_hook<>, &value_type::hMember> member_option;
+
+        typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type, member_option >,
+            cds::intrusive::fcqueue::make_traits<
+                cds::intrusive::opt::disposer< disposer >
+                ,cds::opt::enable_elimination< true >
+            >::type
+        > queue_type;
+
+        queue_type q;
+        test( q );
+    }
+
+    TEST_F( IntrusiveFCQueue, slist_base )
+    {
+        typedef base_hook_item< boost::intrusive::slist_base_hook<>> value_type;
+        typedef cds::intrusive::FCQueue< value_type, boost::intrusive::slist< value_type, boost::intrusive::cache_last< true >>,
+            cds::intrusive::fcqueue::make_traits<
+                cds::intrusive::opt::disposer< disposer >
+            >::type
+        > queue_type;
+
+        queue_type q;
+        test( q );
+    }
+
+    TEST_F( IntrusiveFCQueue, slist_base_elimination )
+    {
+        typedef base_hook_item< boost::intrusive::slist_base_hook<> > value_type;
+        struct traits : public
+            cds::intrusive::fcqueue::make_traits <
+                cds::intrusive::opt::disposer< disposer >
+                , cds::opt::enable_elimination < true >
+                , cds::opt::lock_type< std::mutex >
+            > ::type
+        {};
+        typedef cds::intrusive::FCQueue< value_type, boost::intrusive::slist< value_type, boost::intrusive::cache_last< true >>, traits > queue_type;
+
+        queue_type q;
+        test( q );
+    }
+
+    TEST_F( IntrusiveFCQueue, slist_member )
+    {
+        typedef member_hook_item< boost::intrusive::slist_member_hook<> > value_type;
+        typedef boost::intrusive::member_hook<value_type, boost::intrusive::slist_member_hook<>, &value_type::hMember> member_option;
+
+        typedef cds::intrusive::FCQueue< value_type, boost::intrusive::slist< value_type, member_option, boost::intrusive::cache_last< true >>,
+            cds::intrusive::fcqueue::make_traits<
+                cds::intrusive::opt::disposer< disposer >
+            >::type
+        > queue_type;
+
+        queue_type q;
+        test( q );
+    }
+
+    TEST_F( IntrusiveFCQueue, slist_member_elimination )
+    {
+        typedef member_hook_item< boost::intrusive::slist_member_hook<> > value_type;
+        typedef boost::intrusive::member_hook<value_type, boost::intrusive::slist_member_hook<>, &value_type::hMember> member_option;
+
+        typedef cds::intrusive::FCQueue< value_type, boost::intrusive::slist< value_type, member_option, boost::intrusive::cache_last< true >>,
+            cds::intrusive::fcqueue::make_traits<
+                cds::intrusive::opt::disposer< disposer >
+                ,cds::opt::enable_elimination< true >
+            >::type
+        > queue_type;
+
+        queue_type q;
+        test( q );
+    }
+
+} // namepace
diff --git a/test/unit/queue/intrusive_moirqueue_dhp.cpp b/test/unit/queue/intrusive_moirqueue_dhp.cpp
new file mode 100644 (file)
index 0000000..8f52f4c
--- /dev/null
@@ -0,0 +1,187 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_msqueue.h"
+
+#include <cds/gc/dhp.h>
+#include <cds/intrusive/moir_queue.h>
+#include <vector>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::DHP gc_type;
+
+
+    class IntrusiveMoirQueue_DHP : public cds_test::intrusive_msqueue
+    {
+        typedef cds_test::intrusive_msqueue base_class;
+
+    protected:
+        typedef typename base_class::base_hook_item< ci::msqueue::node<gc_type>> base_item_type;
+        typedef typename base_class::member_hook_item< ci::msqueue::node<gc_type>> member_item_type;
+
+        void SetUp()
+        {
+            typedef ci::MoirQueue< gc_type, base_item_type,
+                typename ci::msqueue::make_traits<
+                    ci::opt::hook< ci::msqueue::base_hook< ci::opt::gc<gc_type>>>
+                >::type
+            > queue_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, queue_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+
+        template <typename V>
+        void check_array( V& arr )
+        {
+            for ( size_t i = 0; i < arr.size() - 1; ++i ) {
+                ASSERT_EQ( arr[i].nDisposeCount, 2 );
+            }
+            ASSERT_EQ( arr.back().nDisposeCount, 1 );
+        }
+    };
+
+    TEST_F( IntrusiveMoirQueue_DHP, base_hook )
+    {
+        typedef cds::intrusive::MoirQueue< gc_type, base_item_type,
+            typename ci::msqueue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                ,ci::opt::hook< ci::msqueue::base_hook< ci::opt::gc<gc_type>>>
+            >::type
+        > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveMoirQueue_DHP, base_item_counting )
+    {
+        typedef cds::intrusive::MoirQueue< gc_type, base_item_type,
+            typename ci::msqueue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                , cds::opt::item_counter< cds::atomicity::item_counter >
+                , ci::opt::hook< ci::msqueue::base_hook< ci::opt::gc<gc_type>>>
+            >::type
+        > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveMoirQueue_DHP, base_stat )
+    {
+        struct traits : public ci::msqueue::traits
+        {
+            typedef ci::msqueue::base_hook< ci::opt::gc<gc_type>> hook;
+            typedef mock_disposer disposer;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef ci::msqueue::stat<> stat;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cds::intrusive::MoirQueue< gc_type, base_item_type, traits > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveMoirQueue_DHP, member_hook )
+    {
+        typedef cds::intrusive::MoirQueue< gc_type, member_item_type,
+            typename ci::msqueue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                ,ci::opt::hook< ci::msqueue::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                >>
+            >::type
+        > test_queue;
+
+        std::vector<member_item_type> arr;
+        arr.resize( 100 );
+        {
+            test_queue q;
+            test( q, arr );
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveMoirQueue_DHP, member_hook_stat )
+    {
+        struct traits : public ci::msqueue::traits
+        {
+            typedef ci::msqueue::member_hook<
+                offsetof( member_item_type, hMember ),
+                ci::opt::gc<gc_type>
+            > hook;
+            typedef mock_disposer disposer;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef ci::msqueue::stat<> stat;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cds::intrusive::MoirQueue< gc_type, member_item_type, traits > test_queue;
+
+        std::vector<member_item_type> arr;
+        arr.resize( 100 );
+        {
+            test_queue q;
+            test( q, arr );
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+} // namespace
+
diff --git a/test/unit/queue/intrusive_moirqueue_hp.cpp b/test/unit/queue/intrusive_moirqueue_hp.cpp
new file mode 100644 (file)
index 0000000..c172a7f
--- /dev/null
@@ -0,0 +1,200 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_msqueue.h"
+
+#include <cds/gc/hp.h>
+#include <cds/intrusive/moir_queue.h>
+#include <vector>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::HP gc_type;
+
+
+    class IntrusiveMoirQueue_HP : public cds_test::intrusive_msqueue
+    {
+        typedef cds_test::intrusive_msqueue base_class;
+
+    protected:
+        typedef typename base_class::base_hook_item< ci::msqueue::node<gc_type>> base_item_type;
+        typedef typename base_class::member_hook_item< ci::msqueue::node<gc_type>> member_item_type;
+
+        void SetUp()
+        {
+            typedef ci::MoirQueue< gc_type, base_item_type > queue_type;
+
+            cds::gc::hp::GarbageCollector::Construct( queue_type::c_nHazardPtrCount, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+
+        template <typename V>
+        void check_array( V& arr )
+        {
+            for ( size_t i = 0; i < arr.size() - 1; ++i ) {
+                ASSERT_EQ( arr[i].nDisposeCount, 2 );
+            }
+            ASSERT_EQ( arr.back().nDisposeCount, 1 );
+        }
+    };
+
+    TEST_F( IntrusiveMoirQueue_HP, defaulted )
+    {
+        typedef cds::intrusive::MoirQueue< gc_type, base_item_type,
+            typename ci::msqueue::make_traits<
+                ci::opt::disposer< mock_disposer >
+            >::type
+        > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveMoirQueue_HP, base_hook )
+    {
+        typedef cds::intrusive::MoirQueue< gc_type, base_item_type,
+            typename ci::msqueue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                ,ci::opt::hook< ci::msqueue::base_hook< ci::opt::gc<gc_type>>>
+            >::type
+        > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveMoirQueue_HP, base_item_counting )
+    {
+        typedef cds::intrusive::MoirQueue< gc_type, base_item_type,
+            typename ci::msqueue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                , cds::opt::item_counter< cds::atomicity::item_counter >
+                , ci::opt::hook< ci::msqueue::base_hook< ci::opt::gc<gc_type>>>
+            >::type
+        > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveMoirQueue_HP, base_stat )
+    {
+        struct traits : public ci::msqueue::traits
+        {
+            typedef mock_disposer disposer;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef ci::msqueue::stat<> stat;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cds::intrusive::MoirQueue< gc_type, base_item_type, traits > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveMoirQueue_HP, member_hook )
+    {
+        typedef cds::intrusive::MoirQueue< gc_type, member_item_type,
+            typename ci::msqueue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                ,ci::opt::hook< ci::msqueue::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                >>
+            >::type
+        > test_queue;
+
+        std::vector<member_item_type> arr;
+        arr.resize( 100 );
+        {
+            test_queue q;
+            test( q, arr );
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveMoirQueue_HP, member_hook_stat )
+    {
+        struct traits : public ci::msqueue::traits
+        {
+            typedef ci::msqueue::member_hook<
+                offsetof( member_item_type, hMember ),
+                ci::opt::gc<gc_type>
+            > hook;
+            typedef mock_disposer disposer;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef ci::msqueue::stat<> stat;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cds::intrusive::MoirQueue< gc_type, member_item_type, traits > test_queue;
+
+        std::vector<member_item_type> arr;
+        arr.resize( 100 );
+        {
+            test_queue q;
+            test( q, arr );
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+} // namespace
+
diff --git a/test/unit/queue/intrusive_msqueue_dhp.cpp b/test/unit/queue/intrusive_msqueue_dhp.cpp
new file mode 100644 (file)
index 0000000..67327a3
--- /dev/null
@@ -0,0 +1,187 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_msqueue.h"
+
+#include <cds/gc/dhp.h>
+#include <cds/intrusive/msqueue.h>
+#include <vector>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::DHP gc_type;
+
+
+    class IntrusiveMSQueue_DHP : public cds_test::intrusive_msqueue
+    {
+        typedef cds_test::intrusive_msqueue base_class;
+
+    protected:
+        typedef typename base_class::base_hook_item< ci::msqueue::node<gc_type>> base_item_type;
+        typedef typename base_class::member_hook_item< ci::msqueue::node<gc_type>> member_item_type;
+
+        void SetUp()
+        {
+            typedef ci::MSQueue< gc_type, base_item_type,
+                typename ci::msqueue::make_traits<
+                    ci::opt::hook< ci::msqueue::base_hook< ci::opt::gc<gc_type>>>
+                >::type
+            > queue_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, queue_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+
+        template <typename V>
+        void check_array( V& arr )
+        {
+            for ( size_t i = 0; i < arr.size() - 1; ++i ) {
+                ASSERT_EQ( arr[i].nDisposeCount, 2 );
+            }
+            ASSERT_EQ( arr.back().nDisposeCount, 1 );
+        }
+    };
+
+    TEST_F( IntrusiveMSQueue_DHP, base_hook )
+    {
+        typedef cds::intrusive::MSQueue< gc_type, base_item_type,
+            typename ci::msqueue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                ,ci::opt::hook< ci::msqueue::base_hook< ci::opt::gc<gc_type>>>
+            >::type
+        > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveMSQueue_DHP, base_item_counting )
+    {
+        typedef cds::intrusive::MSQueue< gc_type, base_item_type,
+            typename ci::msqueue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                , cds::opt::item_counter< cds::atomicity::item_counter >
+                , ci::opt::hook< ci::msqueue::base_hook< ci::opt::gc<gc_type>>>
+            >::type
+        > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveMSQueue_DHP, base_stat )
+    {
+        struct traits : public ci::msqueue::traits
+        {
+            typedef ci::msqueue::base_hook< ci::opt::gc<gc_type>> hook;
+            typedef mock_disposer disposer;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef ci::msqueue::stat<> stat;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cds::intrusive::MSQueue< gc_type, base_item_type, traits > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveMSQueue_DHP, member_hook )
+    {
+        typedef cds::intrusive::MSQueue< gc_type, member_item_type,
+            typename ci::msqueue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                ,ci::opt::hook< ci::msqueue::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                >>
+            >::type
+        > test_queue;
+
+        std::vector<member_item_type> arr;
+        arr.resize( 100 );
+        {
+            test_queue q;
+            test( q, arr );
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveMSQueue_DHP, member_hook_stat )
+    {
+        struct traits : public ci::msqueue::traits
+        {
+            typedef ci::msqueue::member_hook<
+                offsetof( member_item_type, hMember ),
+                ci::opt::gc<gc_type>
+            > hook;
+            typedef mock_disposer disposer;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef ci::msqueue::stat<> stat;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cds::intrusive::MSQueue< gc_type, member_item_type, traits > test_queue;
+
+        std::vector<member_item_type> arr;
+        arr.resize( 100 );
+        {
+            test_queue q;
+            test( q, arr );
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+} // namespace
+
diff --git a/test/unit/queue/intrusive_msqueue_hp.cpp b/test/unit/queue/intrusive_msqueue_hp.cpp
new file mode 100644 (file)
index 0000000..7a81e66
--- /dev/null
@@ -0,0 +1,200 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_msqueue.h"
+
+#include <cds/gc/hp.h>
+#include <cds/intrusive/msqueue.h>
+#include <vector>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::HP gc_type;
+
+
+    class IntrusiveMSQueue_HP : public cds_test::intrusive_msqueue
+    {
+        typedef cds_test::intrusive_msqueue base_class;
+
+    protected:
+        typedef typename base_class::base_hook_item< ci::msqueue::node<gc_type>> base_item_type;
+        typedef typename base_class::member_hook_item< ci::msqueue::node<gc_type>> member_item_type;
+
+        void SetUp()
+        {
+            typedef ci::MSQueue< gc_type, base_item_type > queue_type;
+
+            cds::gc::hp::GarbageCollector::Construct( queue_type::c_nHazardPtrCount, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+
+        template <typename V>
+        void check_array( V& arr )
+        {
+            for ( size_t i = 0; i < arr.size() - 1; ++i ) {
+                ASSERT_EQ( arr[i].nDisposeCount, 2 );
+            }
+            ASSERT_EQ( arr.back().nDisposeCount, 1 );
+        }
+    };
+
+    TEST_F( IntrusiveMSQueue_HP, defaulted )
+    {
+        typedef cds::intrusive::MSQueue< gc_type, base_item_type,
+            typename ci::msqueue::make_traits<
+                ci::opt::disposer< mock_disposer >
+            >::type
+        > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveMSQueue_HP, base_hook )
+    {
+        typedef cds::intrusive::MSQueue< gc_type, base_item_type,
+            typename ci::msqueue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                ,ci::opt::hook< ci::msqueue::base_hook< ci::opt::gc<gc_type>>>
+            >::type
+        > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveMSQueue_HP, base_item_counting )
+    {
+        typedef cds::intrusive::MSQueue< gc_type, base_item_type,
+            typename ci::msqueue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                , cds::opt::item_counter< cds::atomicity::item_counter >
+                , ci::opt::hook< ci::msqueue::base_hook< ci::opt::gc<gc_type>>>
+            >::type
+        > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveMSQueue_HP, base_stat )
+    {
+        struct traits : public ci::msqueue::traits
+        {
+            typedef mock_disposer disposer;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef ci::msqueue::stat<> stat;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cds::intrusive::MSQueue< gc_type, base_item_type, traits > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveMSQueue_HP, member_hook )
+    {
+        typedef cds::intrusive::MSQueue< gc_type, member_item_type,
+            typename ci::msqueue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                ,ci::opt::hook< ci::msqueue::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                >>
+            >::type
+        > test_queue;
+
+        std::vector<member_item_type> arr;
+        arr.resize( 100 );
+        {
+            test_queue q;
+            test( q, arr );
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveMSQueue_HP, member_hook_stat )
+    {
+        struct traits : public ci::msqueue::traits
+        {
+            typedef ci::msqueue::member_hook<
+                offsetof( member_item_type, hMember ),
+                ci::opt::gc<gc_type>
+            > hook;
+            typedef mock_disposer disposer;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef ci::msqueue::stat<> stat;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cds::intrusive::MSQueue< gc_type, member_item_type, traits > test_queue;
+
+        std::vector<member_item_type> arr;
+        arr.resize( 100 );
+        {
+            test_queue q;
+            test( q, arr );
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+} // namespace
+
diff --git a/test/unit/queue/intrusive_optqueue_dhp.cpp b/test/unit/queue/intrusive_optqueue_dhp.cpp
new file mode 100644 (file)
index 0000000..83d526f
--- /dev/null
@@ -0,0 +1,187 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_msqueue.h"
+
+#include <cds/gc/dhp.h>
+#include <cds/intrusive/optimistic_queue.h>
+#include <vector>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::DHP gc_type;
+
+
+    class IntrusiveOptQueue_DHP : public cds_test::intrusive_msqueue
+    {
+        typedef cds_test::intrusive_msqueue base_class;
+
+    protected:
+        typedef typename base_class::base_hook_item< ci::optimistic_queue::node<gc_type>> base_item_type;
+        typedef typename base_class::member_hook_item< ci::optimistic_queue::node<gc_type>> member_item_type;
+
+        void SetUp()
+        {
+            typedef ci::OptimisticQueue< gc_type, base_item_type,
+                typename ci::optimistic_queue::make_traits<
+                    ci::opt::hook< ci::optimistic_queue::base_hook< ci::opt::gc<gc_type>>>
+                >::type
+            > queue_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, queue_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+
+        template <typename V>
+        void check_array( V& arr )
+        {
+            for ( size_t i = 0; i < arr.size() - 1; ++i ) {
+                ASSERT_EQ( arr[i].nDisposeCount, 2 );
+            }
+            ASSERT_EQ( arr.back().nDisposeCount, 1 );
+        }
+    };
+
+    TEST_F( IntrusiveOptQueue_DHP, base_hook )
+    {
+        typedef cds::intrusive::OptimisticQueue< gc_type, base_item_type,
+            typename ci::optimistic_queue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                ,ci::opt::hook< ci::optimistic_queue::base_hook< ci::opt::gc<gc_type>>>
+            >::type
+        > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveOptQueue_DHP, base_item_counting )
+    {
+        typedef cds::intrusive::OptimisticQueue< gc_type, base_item_type,
+            typename ci::optimistic_queue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                , cds::opt::item_counter< cds::atomicity::item_counter >
+                , ci::opt::hook< ci::optimistic_queue::base_hook< ci::opt::gc<gc_type>>>
+            >::type
+        > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveOptQueue_DHP, base_stat )
+    {
+        struct traits : public ci::optimistic_queue::traits
+        {
+            typedef ci::optimistic_queue::base_hook< ci::opt::gc<gc_type>> hook;
+            typedef mock_disposer disposer;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef ci::optimistic_queue::stat<> stat;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cds::intrusive::OptimisticQueue< gc_type, base_item_type, traits > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveOptQueue_DHP, member_hook )
+    {
+        typedef cds::intrusive::OptimisticQueue< gc_type, member_item_type,
+            typename ci::optimistic_queue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                ,ci::opt::hook< ci::optimistic_queue::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                >>
+            >::type
+        > test_queue;
+
+        std::vector<member_item_type> arr;
+        arr.resize( 100 );
+        {
+            test_queue q;
+            test( q, arr );
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveOptQueue_DHP, member_hook_stat )
+    {
+        struct traits : public ci::optimistic_queue::traits
+        {
+            typedef ci::optimistic_queue::member_hook<
+                offsetof( member_item_type, hMember ),
+                ci::opt::gc<gc_type>
+            > hook;
+            typedef mock_disposer disposer;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef ci::optimistic_queue::stat<> stat;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cds::intrusive::OptimisticQueue< gc_type, member_item_type, traits > test_queue;
+
+        std::vector<member_item_type> arr;
+        arr.resize( 100 );
+        {
+            test_queue q;
+            test( q, arr );
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+} // namespace
+
diff --git a/test/unit/queue/intrusive_optqueue_hp.cpp b/test/unit/queue/intrusive_optqueue_hp.cpp
new file mode 100644 (file)
index 0000000..4b1253f
--- /dev/null
@@ -0,0 +1,200 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_msqueue.h"
+
+#include <cds/gc/hp.h>
+#include <cds/intrusive/optimistic_queue.h>
+#include <vector>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::HP gc_type;
+
+
+    class IntrusiveOptQueue_HP : public cds_test::intrusive_msqueue
+    {
+        typedef cds_test::intrusive_msqueue base_class;
+
+    protected:
+        typedef typename base_class::base_hook_item< ci::optimistic_queue::node<gc_type>> base_item_type;
+        typedef typename base_class::member_hook_item< ci::optimistic_queue::node<gc_type>> member_item_type;
+
+        void SetUp()
+        {
+            typedef ci::OptimisticQueue< gc_type, base_item_type > queue_type;
+
+            cds::gc::hp::GarbageCollector::Construct( queue_type::c_nHazardPtrCount, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+
+        template <typename V>
+        void check_array( V& arr )
+        {
+            for ( size_t i = 0; i < arr.size() - 1; ++i ) {
+                ASSERT_EQ( arr[i].nDisposeCount, 2 );
+            }
+            ASSERT_EQ( arr.back().nDisposeCount, 1 );
+        }
+    };
+
+    TEST_F( IntrusiveOptQueue_HP, defaulted )
+    {
+        typedef cds::intrusive::OptimisticQueue< gc_type, base_item_type,
+            typename ci::optimistic_queue::make_traits<
+                ci::opt::disposer< mock_disposer >
+            >::type
+        > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveOptQueue_HP, base_hook )
+    {
+        typedef cds::intrusive::OptimisticQueue< gc_type, base_item_type,
+            typename ci::optimistic_queue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                ,ci::opt::hook< ci::optimistic_queue::base_hook< ci::opt::gc<gc_type>>>
+            >::type
+        > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveOptQueue_HP, base_item_counting )
+    {
+        typedef cds::intrusive::OptimisticQueue< gc_type, base_item_type,
+            typename ci::optimistic_queue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                , cds::opt::item_counter< cds::atomicity::item_counter >
+                , ci::opt::hook< ci::optimistic_queue::base_hook< ci::opt::gc<gc_type>>>
+            >::type
+        > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveOptQueue_HP, base_stat )
+    {
+        struct traits : public ci::optimistic_queue::traits
+        {
+            typedef mock_disposer disposer;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef ci::optimistic_queue::stat<> stat;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cds::intrusive::OptimisticQueue< gc_type, base_item_type, traits > test_queue;
+
+        std::vector<base_item_type> arr;
+        arr.resize(100);
+        {
+            test_queue q;
+            test(q, arr);
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveOptQueue_HP, member_hook )
+    {
+        typedef cds::intrusive::OptimisticQueue< gc_type, member_item_type,
+            typename ci::optimistic_queue::make_traits<
+                ci::opt::disposer< mock_disposer >
+                ,ci::opt::hook< ci::optimistic_queue::member_hook<
+                    offsetof( member_item_type, hMember ),
+                    ci::opt::gc<gc_type>
+                >>
+            >::type
+        > test_queue;
+
+        std::vector<member_item_type> arr;
+        arr.resize( 100 );
+        {
+            test_queue q;
+            test( q, arr );
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveOptQueue_HP, member_hook_stat )
+    {
+        struct traits : public ci::optimistic_queue::traits
+        {
+            typedef ci::optimistic_queue::member_hook<
+                offsetof( member_item_type, hMember ),
+                ci::opt::gc<gc_type>
+            > hook;
+            typedef mock_disposer disposer;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef ci::optimistic_queue::stat<> stat;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cds::intrusive::OptimisticQueue< gc_type, member_item_type, traits > test_queue;
+
+        std::vector<member_item_type> arr;
+        arr.resize( 100 );
+        {
+            test_queue q;
+            test( q, arr );
+        }
+        gc_type::scan();
+        check_array( arr );
+    }
+
+} // namespace
+
diff --git a/test/unit/queue/intrusive_segmented_queue_dhp.cpp b/test/unit/queue/intrusive_segmented_queue_dhp.cpp
new file mode 100644 (file)
index 0000000..f910f98
--- /dev/null
@@ -0,0 +1,166 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_segmented_queue.h"
+
+#include <cds/gc/dhp.h>
+#include <cds/intrusive/segmented_queue.h>
+#include <vector>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::DHP gc_type;
+
+    class IntrusiveSegmentedQueue_DHP : public cds_test::intrusive_segmented_queue
+    {
+        typedef cds_test::intrusive_segmented_queue base_class;
+
+    protected:
+        static const size_t c_QuasiFactor = 15;
+
+        void SetUp()
+        {
+            typedef ci::SegmentedQueue< gc_type, item > queue_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, queue_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct();
+        }
+
+        template <typename V>
+        void check_array( V& arr )
+        {
+            for ( size_t i = 0; i < arr.size(); ++i ) {
+                EXPECT_EQ( arr[i].nDisposeCount, 2 );
+                EXPECT_EQ( arr[i].nDispose2Count, 1 );
+            }
+        }
+    };
+
+    TEST_F( IntrusiveSegmentedQueue_DHP, defaulted )
+    {
+        struct queue_traits : public cds::intrusive::segmented_queue::traits
+        {
+            typedef Disposer disposer;
+        };
+        typedef cds::intrusive::SegmentedQueue< gc_type, item, queue_traits > queue_type;
+
+        std::vector<typename queue_type::value_type> arr;
+        {
+            queue_type q( c_QuasiFactor );
+            test( q, arr );
+        }
+        queue_type::gc::force_dispose();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveSegmentedQueue_DHP, mutex )
+    {
+        struct queue_traits : public
+            cds::intrusive::segmented_queue::make_traits <
+                cds::intrusive::opt::disposer< Disposer >
+                ,cds::opt::lock_type < std::mutex >
+            > ::type
+        {};
+        typedef cds::intrusive::SegmentedQueue< gc_type, item, queue_traits > queue_type;
+
+        std::vector<typename queue_type::value_type> arr;
+        {
+            queue_type q( c_QuasiFactor );
+            test( q, arr );
+        }
+        queue_type::gc::force_dispose();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveSegmentedQueue_DHP, shuffle )
+    {
+        typedef cds::intrusive::SegmentedQueue< gc_type, item,
+            cds::intrusive::segmented_queue::make_traits<
+                cds::intrusive::opt::disposer< Disposer >
+                ,cds::opt::item_counter< cds::atomicity::item_counter >
+                ,cds::opt::permutation_generator< cds::opt::v::random_shuffle_permutation<> >
+            >::type
+        > queue_type;
+
+        std::vector<typename queue_type::value_type> arr;
+        {
+            queue_type q( c_QuasiFactor );
+            test( q, arr );
+        }
+        queue_type::gc::force_dispose();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveSegmentedQueue_DHP, padding )
+    {
+        struct queue_traits : public cds::intrusive::segmented_queue::traits
+        {
+            typedef Disposer disposer;
+            enum { padding = cds::opt::cache_line_padding };
+            typedef ci::segmented_queue::stat<> stat;
+        };
+        typedef cds::intrusive::SegmentedQueue< gc_type, item, queue_traits > queue_type;
+
+        std::vector<typename queue_type::value_type> arr;
+        {
+            queue_type q( c_QuasiFactor );
+            test( q, arr );
+        }
+        queue_type::gc::force_dispose();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveSegmentedQueue_DHP, bigdata_padding )
+    {
+        struct queue_traits : public cds::intrusive::segmented_queue::traits
+        {
+            typedef Disposer disposer;
+            enum { padding = cds::opt::cache_line_padding | cds::opt::padding_tiny_data_only };
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cds::intrusive::SegmentedQueue< gc_type, big_item, queue_traits > queue_type;
+
+        std::vector<typename queue_type::value_type> arr;
+        {
+            queue_type q( c_QuasiFactor );
+            test( q, arr );
+        }
+        queue_type::gc::force_dispose();
+        check_array( arr );
+    }
+
+} // namespace
+\r
diff --git a/test/unit/queue/intrusive_segmented_queue_hp.cpp b/test/unit/queue/intrusive_segmented_queue_hp.cpp
new file mode 100644 (file)
index 0000000..12c951d
--- /dev/null
@@ -0,0 +1,166 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_segmented_queue.h"
+
+#include <cds/gc/hp.h>
+#include <cds/intrusive/segmented_queue.h>
+#include <vector>
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::HP gc_type;
+
+    class IntrusiveSegmentedQueue_HP : public cds_test::intrusive_segmented_queue
+    {
+        typedef cds_test::intrusive_segmented_queue base_class;
+
+    protected:
+        static const size_t c_QuasiFactor = 15;
+
+        void SetUp()
+        {
+            typedef ci::SegmentedQueue< gc_type, item > queue_type;
+
+            cds::gc::hp::GarbageCollector::Construct( queue_type::c_nHazardPtrCount, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+
+        template <typename V>
+        void check_array( V& arr )
+        {
+            for ( size_t i = 0; i < arr.size(); ++i ) {
+                EXPECT_EQ( arr[i].nDisposeCount, 2 );
+                EXPECT_EQ( arr[i].nDispose2Count, 1 );
+            }
+        }
+    };
+
+    TEST_F( IntrusiveSegmentedQueue_HP, defaulted )
+    {
+        struct queue_traits : public cds::intrusive::segmented_queue::traits
+        {
+            typedef Disposer disposer;
+        };
+        typedef cds::intrusive::SegmentedQueue< gc_type, item, queue_traits > queue_type;
+
+        std::vector<typename queue_type::value_type> arr;
+        {
+            queue_type q( c_QuasiFactor );
+            test( q, arr );
+        }
+        queue_type::gc::force_dispose();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveSegmentedQueue_HP, mutex )
+    {
+        struct queue_traits : public
+            cds::intrusive::segmented_queue::make_traits <
+                cds::intrusive::opt::disposer< Disposer >
+                ,cds::opt::lock_type < std::mutex >
+            > ::type
+        {};
+        typedef cds::intrusive::SegmentedQueue< gc_type, item, queue_traits > queue_type;
+
+        std::vector<typename queue_type::value_type> arr;
+        {
+            queue_type q( c_QuasiFactor );
+            test( q, arr );
+        }
+        queue_type::gc::force_dispose();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveSegmentedQueue_HP, shuffle )
+    {
+        typedef cds::intrusive::SegmentedQueue< gc_type, item,
+            cds::intrusive::segmented_queue::make_traits<
+                cds::intrusive::opt::disposer< Disposer >
+                ,cds::opt::item_counter< cds::atomicity::item_counter >
+                ,cds::opt::permutation_generator< cds::opt::v::random_shuffle_permutation<> >
+            >::type
+        > queue_type;
+
+        std::vector<typename queue_type::value_type> arr;
+        {
+            queue_type q( c_QuasiFactor );
+            test( q, arr );
+        }
+        queue_type::gc::force_dispose();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveSegmentedQueue_HP, padding )
+    {
+        struct queue_traits : public cds::intrusive::segmented_queue::traits
+        {
+            typedef Disposer disposer;
+            enum { padding = cds::opt::cache_line_padding };
+            typedef ci::segmented_queue::stat<> stat;
+        };
+        typedef cds::intrusive::SegmentedQueue< gc_type, item, queue_traits > queue_type;
+
+        std::vector<typename queue_type::value_type> arr;
+        {
+            queue_type q( c_QuasiFactor );
+            test( q, arr );
+        }
+        queue_type::gc::force_dispose();
+        check_array( arr );
+    }
+
+    TEST_F( IntrusiveSegmentedQueue_HP, bigdata_padding )
+    {
+        struct queue_traits : public cds::intrusive::segmented_queue::traits
+        {
+            typedef Disposer disposer;
+            enum { padding = cds::opt::cache_line_padding | cds::opt::padding_tiny_data_only };
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cds::intrusive::SegmentedQueue< gc_type, big_item, queue_traits > queue_type;
+
+        std::vector<typename queue_type::value_type> arr;
+        {
+            queue_type q( c_QuasiFactor );
+            test( q, arr );
+        }
+        queue_type::gc::force_dispose();
+        check_array( arr );
+    }
+
+} // namespace
+\r
diff --git a/test/unit/queue/intrusive_tsigas_queue.cpp b/test/unit/queue/intrusive_tsigas_queue.cpp
new file mode 100644 (file)
index 0000000..2c261bc
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include <cds/intrusive/tsigas_cycle_queue.h>
+#include "test_intrusive_bounded_queue.h"
+
+namespace {
+
+    class IntrusiveTsigasQueue : public cds_test::intrusive_bounded_queue
+    {
+    public:
+        struct disposer {
+            void operator()( item * p )
+            {
+                ++p->nDisposeCount;
+            }
+        };
+    };
+
+    static const size_t c_Capacity = 64;
+    static const size_t c_RealCapacity = c_Capacity - 2;
+
+    TEST_F( IntrusiveTsigasQueue, defaulted )
+    {
+        cds::intrusive::TsigasCycleQueue< item > q( c_Capacity );
+        ASSERT_EQ( q.capacity(), c_RealCapacity );
+        test( q );
+    }
+
+    TEST_F( IntrusiveTsigasQueue, disposer )
+    {
+        struct traits : public cds::intrusive::tsigas_queue::traits
+        {
+            typedef IntrusiveTsigasQueue::disposer disposer;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+
+        cds::intrusive::TsigasCycleQueue< item, traits > q( c_Capacity );
+        ASSERT_EQ( q.capacity(), c_RealCapacity );
+        test( q );
+    }
+
+    TEST_F( IntrusiveTsigasQueue, static_buffer )
+    {
+        struct traits : public cds::intrusive::tsigas_queue::traits
+        {
+            typedef cds::opt::v::static_buffer< int, c_Capacity > buffer;
+            typedef IntrusiveTsigasQueue::disposer disposer;
+        };
+
+        cds::intrusive::TsigasCycleQueue< item, traits > q;
+        ASSERT_EQ( q.capacity(), c_RealCapacity );
+        test( q );
+    }
+
+    TEST_F( IntrusiveTsigasQueue, dynamic_buffer )
+    {
+        typedef typename cds::intrusive::tsigas_queue::make_traits<
+            cds::opt::buffer< cds::opt::v::dynamic_buffer< int >>
+            ,cds::opt::item_counter< cds::atomicity::item_counter >
+            ,cds::opt::back_off< cds::backoff::pause >
+            ,cds::intrusive::opt::disposer< disposer >
+        >::type traits;
+
+        cds::intrusive::TsigasCycleQueue< item, traits > q( c_Capacity );
+        ASSERT_EQ( q.capacity(), c_RealCapacity );
+        test( q );
+    }
+
+    TEST_F( IntrusiveTsigasQueue, padding )
+    {
+        struct traits : public cds::intrusive::tsigas_queue::traits
+        {
+            typedef cds::opt::v::static_buffer< int, c_Capacity > buffer;
+            typedef IntrusiveTsigasQueue::disposer disposer;
+            enum { padding = 16 | cds::opt::padding_tiny_data_only };
+        };
+
+        cds::intrusive::TsigasCycleQueue< item, traits > q;
+        ASSERT_EQ( q.capacity(), c_RealCapacity );
+        test( q );
+    }
+
+
+} // namespace
diff --git a/test/unit/queue/intrusive_vyukov_queue.cpp b/test/unit/queue/intrusive_vyukov_queue.cpp
new file mode 100644 (file)
index 0000000..71d48da
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include <cds/intrusive/vyukov_mpmc_cycle_queue.h>
+#include "test_intrusive_bounded_queue.h"
+
+namespace {
+
+    class IntrusiveVyukovQueue : public cds_test::intrusive_bounded_queue
+    {
+    public:
+        struct disposer {
+            void operator()( item * p )
+            {
+                ++p->nDisposeCount;
+            }
+        };
+    };
+
+    static const size_t c_Capacity = 64;
+    static const size_t c_RealCapacity = c_Capacity;
+
+    TEST_F( IntrusiveVyukovQueue, defaulted )
+    {
+        cds::intrusive::VyukovMPMCCycleQueue< item > q( c_Capacity );
+        ASSERT_EQ( q.capacity(), c_RealCapacity );
+        test( q );
+    }
+
+    TEST_F( IntrusiveVyukovQueue, disposer )
+    {
+        struct traits : public cds::intrusive::vyukov_queue::traits
+        {
+            typedef IntrusiveVyukovQueue::disposer disposer;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+
+        cds::intrusive::VyukovMPMCCycleQueue< item, traits > q( c_Capacity );
+        ASSERT_EQ( q.capacity(), c_RealCapacity );
+        test( q );
+    }
+
+    TEST_F( IntrusiveVyukovQueue, static_buffer )
+    {
+        struct traits : public cds::intrusive::vyukov_queue::traits
+        {
+            typedef cds::opt::v::static_buffer< int, c_Capacity > buffer;
+            typedef IntrusiveVyukovQueue::disposer disposer;
+        };
+
+        cds::intrusive::VyukovMPMCCycleQueue< item, traits > q;
+        ASSERT_EQ( q.capacity(), c_RealCapacity );
+        test( q );
+    }
+
+    TEST_F( IntrusiveVyukovQueue, dynamic_buffer )
+    {
+        typedef typename cds::intrusive::vyukov_queue::make_traits<
+            cds::opt::buffer< cds::opt::v::dynamic_buffer< int >>
+            ,cds::opt::item_counter< cds::atomicity::item_counter >
+            ,cds::opt::back_off< cds::backoff::pause >
+            ,cds::intrusive::opt::disposer< disposer >
+        >::type traits;
+
+        cds::intrusive::VyukovMPMCCycleQueue< item, traits > q( c_Capacity );
+        ASSERT_EQ( q.capacity(), c_RealCapacity );
+        test( q );
+    }
+
+    TEST_F( IntrusiveVyukovQueue, padding )
+    {
+        struct traits : public cds::intrusive::vyukov_queue::traits
+        {
+            typedef cds::opt::v::static_buffer< int, c_Capacity > buffer;
+            typedef IntrusiveVyukovQueue::disposer disposer;
+            enum { padding = 16 | cds::opt::padding_tiny_data_only };
+        };
+
+        cds::intrusive::VyukovMPMCCycleQueue< item, traits > q;
+        ASSERT_EQ( q.capacity(), c_RealCapacity );
+        test( q );
+    }
+
+
+} // namespace
diff --git a/test/unit/queue/moirqueue_dhp.cpp b/test/unit/queue/moirqueue_dhp.cpp
new file mode 100644 (file)
index 0000000..e9c5b29
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_generic_queue.h"
+
+#include <cds/gc/dhp.h>
+#include <cds/container/moir_queue.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+
+    class MoirQueue_DHP : public cds_test::generic_queue
+    {
+    protected:
+        void SetUp()
+        {
+            typedef cc::MoirQueue< gc_type, int > queue_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, queue_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( MoirQueue_DHP, defaulted )
+    {
+        typedef cds::container::MoirQueue< gc_type, int > test_queue;
+
+        test_queue q;
+        test(q);
+    }
+
+    TEST_F( MoirQueue_DHP, item_counting )
+    {
+        typedef cds::container::MoirQueue < gc_type, int,
+            typename cds::container::msqueue::make_traits <
+                cds::opt::item_counter < cds::atomicity::item_counter >
+            > ::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( MoirQueue_DHP, relaxed )
+    {
+        typedef cds::container::MoirQueue < gc_type, int,
+            typename cds::container::msqueue::make_traits <
+                cds::opt::item_counter< cds::atomicity::item_counter >
+                , cds::opt::memory_model < cds::opt::v::relaxed_ordering >
+            > ::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( MoirQueue_DHP, aligned )
+    {
+        typedef cds::container::MoirQueue < gc_type, int,
+            typename cds::container::msqueue::make_traits <
+                cds::opt::memory_model< cds::opt::v::relaxed_ordering>
+                , cds::opt::padding < 32 >
+            >::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( MoirQueue_DHP, seq_cst )
+    {
+        struct traits : public cc::msqueue::traits
+        {
+            typedef cds::opt::v::sequential_consistent memory_model;
+            typedef cds::atomicity::item_counter item_counter;
+            enum { padding = 64 };
+        };
+        typedef cds::container::MoirQueue < gc_type, int, traits > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( MoirQueue_DHP, move )
+    {
+        typedef cds::container::MoirQueue< gc_type, std::string > test_queue;
+
+        test_queue q;
+        test_string( q );
+    }
+
+    TEST_F( MoirQueue_DHP, move_item_counting )
+    {
+        struct traits : public cc::msqueue::traits
+        {
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cds::container::MoirQueue< gc_type, std::string, traits > test_queue;
+
+        test_queue q;
+        test_string( q );
+    }
+
+} // namespace
+
diff --git a/test/unit/queue/moirqueue_hp.cpp b/test/unit/queue/moirqueue_hp.cpp
new file mode 100644 (file)
index 0000000..3d29c36
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_generic_queue.h"
+
+#include <cds/gc/hp.h>
+#include <cds/container/moir_queue.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+
+    class MoirQueue_HP : public cds_test::generic_queue
+    {
+    protected:
+        void SetUp()
+        {
+            typedef cc::MoirQueue< gc_type, int > queue_type;
+
+            cds::gc::hp::GarbageCollector::Construct( queue_type::c_nHazardPtrCount, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( MoirQueue_HP, defaulted )
+    {
+        typedef cds::container::MoirQueue< gc_type, int > test_queue;
+
+        test_queue q;
+        test(q);
+    }
+
+    TEST_F( MoirQueue_HP, item_counting )
+    {
+        typedef cds::container::MoirQueue < gc_type, int,
+            typename cds::container::msqueue::make_traits <
+                cds::opt::item_counter < cds::atomicity::item_counter >
+            > ::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( MoirQueue_HP, relaxed )
+    {
+        typedef cds::container::MoirQueue < gc_type, int,
+            typename cds::container::msqueue::make_traits <
+                cds::opt::item_counter< cds::atomicity::item_counter >
+                , cds::opt::memory_model < cds::opt::v::relaxed_ordering >
+            > ::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( MoirQueue_HP, aligned )
+    {
+        typedef cds::container::MoirQueue < gc_type, int,
+            typename cds::container::msqueue::make_traits <
+                cds::opt::memory_model< cds::opt::v::relaxed_ordering>
+                , cds::opt::padding < 32 >
+            >::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( MoirQueue_HP, seq_cst )
+    {
+        struct traits : public cc::msqueue::traits
+        {
+            typedef cds::opt::v::sequential_consistent memory_model;
+            typedef cds::atomicity::item_counter item_counter;
+            enum { padding = 64 };
+        };
+        typedef cds::container::MoirQueue < gc_type, int, traits > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( MoirQueue_HP, move )
+    {
+        typedef cds::container::MoirQueue< gc_type, std::string > test_queue;
+
+        test_queue q;
+        test_string( q );
+    }
+
+    TEST_F( MoirQueue_HP, move_item_counting )
+    {
+        struct traits : public cc::msqueue::traits
+        {
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cds::container::MoirQueue< gc_type, std::string, traits > test_queue;
+
+        test_queue q;
+        test_string( q );
+    }
+
+} // namespace
+
diff --git a/test/unit/queue/msqueue_dhp.cpp b/test/unit/queue/msqueue_dhp.cpp
new file mode 100644 (file)
index 0000000..88e4e57
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_generic_queue.h"
+
+#include <cds/gc/dhp.h>
+#include <cds/container/msqueue.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+
+    class MSQueue_DHP : public cds_test::generic_queue
+    {
+    protected:
+        void SetUp()
+        {
+            typedef cc::MSQueue< gc_type, int > queue_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, queue_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( MSQueue_DHP, defaulted )
+    {
+        typedef cds::container::MSQueue< gc_type, int > test_queue;
+
+        test_queue q;
+        test(q);
+    }
+
+    TEST_F( MSQueue_DHP, item_counting )
+    {
+        typedef cds::container::MSQueue < gc_type, int,
+            typename cds::container::msqueue::make_traits <
+                cds::opt::item_counter < cds::atomicity::item_counter >
+            > ::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( MSQueue_DHP, relaxed )
+    {
+        typedef cds::container::MSQueue < gc_type, int,
+            typename cds::container::msqueue::make_traits <
+                cds::opt::item_counter< cds::atomicity::item_counter >
+                , cds::opt::memory_model < cds::opt::v::relaxed_ordering >
+            > ::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( MSQueue_DHP, aligned )
+    {
+        typedef cds::container::MSQueue < gc_type, int,
+            typename cds::container::msqueue::make_traits <
+                cds::opt::memory_model< cds::opt::v::relaxed_ordering>
+                , cds::opt::padding < 32 >
+            >::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( MSQueue_DHP, seq_cst )
+    {
+        struct traits : public cc::msqueue::traits
+        {
+            typedef cds::opt::v::sequential_consistent memory_model;
+            typedef cds::atomicity::item_counter item_counter;
+            enum { padding = 64 };
+        };
+        typedef cds::container::MSQueue < gc_type, int, traits > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( MSQueue_DHP, move )
+    {
+        typedef cds::container::MSQueue< gc_type, std::string > test_queue;
+
+        test_queue q;
+        test_string( q );
+    }
+
+    TEST_F( MSQueue_DHP, move_item_counting )
+    {
+        struct traits : public cc::msqueue::traits
+        {
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cds::container::MSQueue< gc_type, std::string, traits > test_queue;
+
+        test_queue q;
+        test_string( q );
+    }
+
+} // namespace
+
diff --git a/test/unit/queue/msqueue_hp.cpp b/test/unit/queue/msqueue_hp.cpp
new file mode 100644 (file)
index 0000000..9c8f0dd
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_generic_queue.h"
+
+#include <cds/gc/hp.h>
+#include <cds/container/msqueue.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+
+    class MSQueue_HP : public cds_test::generic_queue
+    {
+    protected:
+        void SetUp()
+        {
+            typedef cc::MSQueue< gc_type, int > queue_type;
+
+            cds::gc::hp::GarbageCollector::Construct( queue_type::c_nHazardPtrCount, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( MSQueue_HP, defaulted )
+    {
+        typedef cds::container::MSQueue< gc_type, int > test_queue;
+
+        test_queue q;
+        test(q);
+    }
+
+    TEST_F( MSQueue_HP, item_counting )
+    {
+        typedef cds::container::MSQueue < gc_type, int,
+            typename cds::container::msqueue::make_traits <
+                cds::opt::item_counter < cds::atomicity::item_counter >
+            > ::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( MSQueue_HP, relaxed )
+    {
+        typedef cds::container::MSQueue < gc_type, int,
+            typename cds::container::msqueue::make_traits <
+                cds::opt::item_counter< cds::atomicity::item_counter >
+                , cds::opt::memory_model < cds::opt::v::relaxed_ordering >
+            > ::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( MSQueue_HP, aligned )
+    {
+        typedef cds::container::MSQueue < gc_type, int,
+            typename cds::container::msqueue::make_traits <
+                cds::opt::memory_model< cds::opt::v::relaxed_ordering>
+                , cds::opt::padding < 32 >
+            >::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( MSQueue_HP, seq_cst )
+    {
+        struct traits : public cc::msqueue::traits
+        {
+            typedef cds::opt::v::sequential_consistent memory_model;
+            typedef cds::atomicity::item_counter item_counter;
+            enum { padding = 64 };
+        };
+        typedef cds::container::MSQueue < gc_type, int, traits > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( MSQueue_HP, move )
+    {
+        typedef cds::container::MSQueue< gc_type, std::string > test_queue;
+
+        test_queue q;
+        test_string( q );
+    }
+
+    TEST_F( MSQueue_HP, move_item_counting )
+    {
+        struct traits : public cc::msqueue::traits
+        {
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cds::container::MSQueue< gc_type, std::string, traits > test_queue;
+
+        test_queue q;
+        test_string( q );
+    }
+
+} // namespace
+
diff --git a/test/unit/queue/optimistic_queue_dhp.cpp b/test/unit/queue/optimistic_queue_dhp.cpp
new file mode 100644 (file)
index 0000000..eb35997
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_generic_queue.h"
+
+#include <cds/gc/dhp.h>
+#include <cds/container/optimistic_queue.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+
+    class OptimisticQueue_DHP : public cds_test::generic_queue
+    {
+    protected:
+        void SetUp()
+        {
+            typedef cc::OptimisticQueue< gc_type, int > queue_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, queue_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( OptimisticQueue_DHP, defaulted )
+    {
+        typedef cds::container::OptimisticQueue< gc_type, int > test_queue;
+
+        test_queue q;
+        test(q);
+    }
+
+    TEST_F( OptimisticQueue_DHP, item_counting )
+    {
+        typedef cds::container::OptimisticQueue < gc_type, int,
+            typename cds::container::optimistic_queue::make_traits <
+                cds::opt::item_counter < cds::atomicity::item_counter >
+            > ::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( OptimisticQueue_DHP, relaxed )
+    {
+        typedef cds::container::OptimisticQueue < gc_type, int,
+            typename cds::container::optimistic_queue::make_traits <
+                cds::opt::item_counter< cds::atomicity::item_counter >
+                , cds::opt::memory_model < cds::opt::v::relaxed_ordering >
+            > ::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( OptimisticQueue_DHP, aligned )
+    {
+        typedef cds::container::OptimisticQueue < gc_type, int,
+            typename cds::container::optimistic_queue::make_traits <
+                cds::opt::memory_model< cds::opt::v::relaxed_ordering>
+                , cds::opt::padding < 32 >
+            >::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( OptimisticQueue_DHP, seq_cst )
+    {
+        struct traits : public cc::optimistic_queue::traits
+        {
+            typedef cds::opt::v::sequential_consistent memory_model;
+            typedef cds::atomicity::item_counter item_counter;
+            enum { padding = 64 };
+        };
+        typedef cds::container::OptimisticQueue < gc_type, int, traits > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( OptimisticQueue_DHP, move )
+    {
+        typedef cds::container::OptimisticQueue< gc_type, std::string > test_queue;
+
+        test_queue q;
+        test_string( q );
+    }
+
+    TEST_F( OptimisticQueue_DHP, move_item_counting )
+    {
+        struct traits : public cc::optimistic_queue::traits
+        {
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cds::container::OptimisticQueue< gc_type, std::string, traits > test_queue;
+
+        test_queue q;
+        test_string( q );
+    }
+
+} // namespace
+
diff --git a/test/unit/queue/optimistic_queue_hp.cpp b/test/unit/queue/optimistic_queue_hp.cpp
new file mode 100644 (file)
index 0000000..7ab2de2
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_generic_queue.h"
+
+#include <cds/gc/hp.h>
+#include <cds/container/optimistic_queue.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+
+    class OPtimisticQueue_HP : public cds_test::generic_queue
+    {
+    protected:
+        void SetUp()
+        {
+            typedef cc::OptimisticQueue< gc_type, int > queue_type;
+
+            cds::gc::hp::GarbageCollector::Construct( queue_type::c_nHazardPtrCount, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( OPtimisticQueue_HP, defaulted )
+    {
+        typedef cds::container::OptimisticQueue< gc_type, int > test_queue;
+
+        test_queue q;
+        test(q);
+    }
+
+    TEST_F( OPtimisticQueue_HP, item_counting )
+    {
+        typedef cds::container::OptimisticQueue < gc_type, int,
+            typename cds::container::optimistic_queue::make_traits <
+                cds::opt::item_counter < cds::atomicity::item_counter >
+            > ::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( OPtimisticQueue_HP, relaxed )
+    {
+        typedef cds::container::OptimisticQueue < gc_type, int,
+            typename cds::container::optimistic_queue::make_traits <
+                cds::opt::item_counter< cds::atomicity::item_counter >
+                , cds::opt::memory_model < cds::opt::v::relaxed_ordering >
+            > ::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( OPtimisticQueue_HP, aligned )
+    {
+        typedef cds::container::OptimisticQueue < gc_type, int,
+            typename cds::container::optimistic_queue::make_traits <
+                cds::opt::memory_model< cds::opt::v::relaxed_ordering>
+                , cds::opt::padding < 32 >
+            >::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( OPtimisticQueue_HP, seq_cst )
+    {
+        struct traits : public cc::optimistic_queue::traits
+        {
+            typedef cds::opt::v::sequential_consistent memory_model;
+            typedef cds::atomicity::item_counter item_counter;
+            enum { padding = 64 };
+        };
+        typedef cds::container::OptimisticQueue < gc_type, int, traits > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( OPtimisticQueue_HP, move )
+    {
+        typedef cds::container::OptimisticQueue< gc_type, std::string > test_queue;
+
+        test_queue q;
+        test_string( q );
+    }
+
+    TEST_F( OPtimisticQueue_HP, move_item_counting )
+    {
+        struct traits : public cc::optimistic_queue::traits
+        {
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cds::container::OptimisticQueue< gc_type, std::string, traits > test_queue;
+
+        test_queue q;
+        test_string( q );
+    }
+
+} // namespace
+
diff --git a/test/unit/queue/rwqueue.cpp b/test/unit/queue/rwqueue.cpp
new file mode 100644 (file)
index 0000000..25ddfcb
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_generic_queue.h"
+
+#include <cds/container/rwqueue.h>
+
+namespace {
+    namespace cc = cds::container;
+
+    class RWQueue: public cds_test::generic_queue
+    {};
+
+    TEST_F( RWQueue, defaulted )
+    {
+        typedef cds::container::RWQueue< int > test_queue;
+
+        test_queue q;
+        test(q);
+    }
+
+    TEST_F( RWQueue, item_counting )
+    {
+        typedef cds::container::RWQueue< int,
+            typename cds::container::rwqueue::make_traits <
+                cds::opt::item_counter< cds::atomicity::item_counter >
+            > ::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( RWQueue, mutex )
+    {
+        struct traits : public cds::container::rwqueue::traits
+        {
+            typedef std::mutex lock_type;
+        };
+        typedef cds::container::RWQueue< int, traits > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( RWQueue, padding )
+    {
+        struct traits : public cds::container::rwqueue::traits
+        {
+            typedef cds::atomicity::item_counter item_counter;
+            enum { padding = 64 };
+        };
+        typedef cds::container::RWQueue< int, traits > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( RWQueue, move )
+    {
+        typedef cds::container::RWQueue< std::string > test_queue;
+
+        test_queue q;
+        test_string( q );
+    }
+
+    TEST_F( RWQueue, move_item_counting )
+    {
+        struct traits : public cc::rwqueue::traits
+        {
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cds::container::RWQueue< std::string, traits > test_queue;
+
+        test_queue q;
+        test_string( q );
+    }
+
+} // namespace
+
diff --git a/test/unit/queue/segmented_queue_dhp.cpp b/test/unit/queue/segmented_queue_dhp.cpp
new file mode 100644 (file)
index 0000000..fff7e29
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_segmented_queue.h"
+
+#include <cds/gc/dhp.h>
+#include <cds/container/segmented_queue.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+
+    class SegmentedQueue_DHP : public cds_test::segmented_queue
+    {
+    protected:
+        static const size_t c_QuasiFactor = 15;
+        void SetUp()
+        {
+            typedef cc::SegmentedQueue< gc_type, int > queue_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, queue_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( SegmentedQueue_DHP, defaulted )
+    {
+        typedef cds::container::SegmentedQueue< gc_type, int > test_queue;
+
+        test_queue q( c_QuasiFactor );
+        ASSERT_EQ( q.quasi_factor(), cds::beans::ceil2( c_QuasiFactor ));
+        test(q);
+    }
+
+    TEST_F( SegmentedQueue_DHP, mutex )
+    {
+        struct traits : public cds::container::segmented_queue::traits
+        {
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::random_shuffle_permutation<> permutation_generator;
+        };
+        typedef cds::container::SegmentedQueue< gc_type, int, traits > test_queue;
+
+        test_queue q( c_QuasiFactor );
+        ASSERT_EQ( q.quasi_factor(), cds::beans::ceil2( c_QuasiFactor ) );
+        test( q );
+    }
+
+    TEST_F( SegmentedQueue_DHP, shuffle )
+    {
+        struct traits : public cds::container::segmented_queue::traits
+        {
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::random_shuffle_permutation<> permutation_generator;
+        };
+        typedef cds::container::SegmentedQueue< gc_type, int, traits > test_queue;
+
+        test_queue q( c_QuasiFactor );
+        ASSERT_EQ( q.quasi_factor(), cds::beans::ceil2( c_QuasiFactor ) );
+        test( q );
+    }
+
+    TEST_F( SegmentedQueue_DHP, stat )
+    {
+        struct traits : public
+            cds::container::segmented_queue::make_traits <
+                cds::opt::item_counter< cds::atomicity::item_counter >
+                , cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
+                , cds::opt::stat < cds::container::segmented_queue::stat<> >
+            > ::type
+        {};
+        typedef cds::container::SegmentedQueue< gc_type, int, traits > test_queue;
+
+        test_queue q( c_QuasiFactor );
+        ASSERT_EQ( q.quasi_factor(), cds::beans::ceil2( c_QuasiFactor ) );
+        test( q );
+    }
+
+    TEST_F( SegmentedQueue_DHP, move )
+    {
+        typedef cds::container::SegmentedQueue< gc_type, std::string > test_queue;
+
+        test_queue q( c_QuasiFactor );
+        ASSERT_EQ( q.quasi_factor(), cds::beans::ceil2( c_QuasiFactor ) );
+        test_string( q );
+    }
+
+    TEST_F( SegmentedQueue_DHP, move_item_counting )
+    {
+        struct traits : public cds::container::segmented_queue::traits
+        {
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cds::container::SegmentedQueue< gc_type, std::string, traits > test_queue;
+
+        test_queue q( c_QuasiFactor );
+        ASSERT_EQ( q.quasi_factor(), cds::beans::ceil2( c_QuasiFactor ) );
+        test_string( q );
+    }
+
+} // namespace
+
diff --git a/test/unit/queue/segmented_queue_hp.cpp b/test/unit/queue/segmented_queue_hp.cpp
new file mode 100644 (file)
index 0000000..1af21f4
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_segmented_queue.h"
+
+#include <cds/gc/hp.h>
+#include <cds/container/segmented_queue.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+
+    class SegmentedQueue_HP : public cds_test::segmented_queue
+    {
+    protected:
+        static const size_t c_QuasiFactor = 15;
+        void SetUp()
+        {
+            typedef cc::SegmentedQueue< gc_type, int > queue_type;
+
+            cds::gc::hp::GarbageCollector::Construct( queue_type::c_nHazardPtrCount, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( SegmentedQueue_HP, defaulted )
+    {
+        typedef cds::container::SegmentedQueue< gc_type, int > test_queue;
+
+        test_queue q( c_QuasiFactor );
+        ASSERT_EQ( q.quasi_factor(), cds::beans::ceil2( c_QuasiFactor ));
+        test(q);
+    }
+
+    TEST_F( SegmentedQueue_HP, mutex )
+    {
+        struct traits : public cds::container::segmented_queue::traits
+        {
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::random_shuffle_permutation<> permutation_generator;
+        };
+        typedef cds::container::SegmentedQueue< cds::gc::HP, int, traits > test_queue;
+
+        test_queue q( c_QuasiFactor );
+        ASSERT_EQ( q.quasi_factor(), cds::beans::ceil2( c_QuasiFactor ) );
+        test( q );
+    }
+
+    TEST_F( SegmentedQueue_HP, shuffle )
+    {
+        struct traits : public cds::container::segmented_queue::traits
+        {
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::random_shuffle_permutation<> permutation_generator;
+        };
+        typedef cds::container::SegmentedQueue< cds::gc::HP, int, traits > test_queue;
+
+        test_queue q( c_QuasiFactor );
+        ASSERT_EQ( q.quasi_factor(), cds::beans::ceil2( c_QuasiFactor ) );
+        test( q );
+    }
+
+    TEST_F( SegmentedQueue_HP, stat )
+    {
+        struct traits : public
+            cds::container::segmented_queue::make_traits <
+                cds::opt::item_counter< cds::atomicity::item_counter >
+                , cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
+                , cds::opt::stat < cds::container::segmented_queue::stat<> >
+            > ::type
+        {};
+        typedef cds::container::SegmentedQueue< cds::gc::HP, int, traits > test_queue;
+
+        test_queue q( c_QuasiFactor );
+        ASSERT_EQ( q.quasi_factor(), cds::beans::ceil2( c_QuasiFactor ) );
+        test( q );
+    }
+
+    TEST_F( SegmentedQueue_HP, move )
+    {
+        typedef cds::container::SegmentedQueue< gc_type, std::string > test_queue;
+
+        test_queue q( c_QuasiFactor );
+        ASSERT_EQ( q.quasi_factor(), cds::beans::ceil2( c_QuasiFactor ) );
+        test_string( q );
+    }
+
+    TEST_F( SegmentedQueue_HP, move_item_counting )
+    {
+        struct traits : public cds::container::segmented_queue::traits
+        {
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cds::container::SegmentedQueue< gc_type, std::string, traits > test_queue;
+
+        test_queue q( c_QuasiFactor );
+        ASSERT_EQ( q.quasi_factor(), cds::beans::ceil2( c_QuasiFactor ) );
+        test_string( q );
+    }
+
+} // namespace
+
diff --git a/test/unit/queue/test_bounded_queue.h b/test/unit/queue/test_bounded_queue.h
new file mode 100644 (file)
index 0000000..49de2bb
--- /dev/null
@@ -0,0 +1,215 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_QUEUE_TEST_BOUNDED_QUEUE_H
+#define CDSUNIT_QUEUE_TEST_BOUNDED_QUEUE_H
+
+#include <cds_test/check_size.h>
+\r
+namespace cds_test {\r
+\r
+    class bounded_queue : public ::testing::Test\r
+    {\r
+    protected:\r
+        template <typename Queue>\r
+        void test( Queue& q )\r
+        {\r
+            typedef typename Queue::value_type value_type;
+            value_type it;
+
+            const size_t nSize = q.capacity();
+
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            // enqueue/dequeue
+            for ( size_t i = 0; i < nSize; ++i ) {
+                it = static_cast<value_type>(i);
+                ASSERT_TRUE( q.enqueue( it ));
+                ASSERT_CONTAINER_SIZE( q, i + 1 );
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, nSize );
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                it = -1;
+                ASSERT_TRUE( q.dequeue( it ) );
+                ASSERT_EQ( it, i );
+                ASSERT_CONTAINER_SIZE( q, nSize - i - 1 );
+            }
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            // push/pop
+            for ( size_t i = 0; i < nSize; ++i ) {
+                it = static_cast<value_type>(i);
+                ASSERT_TRUE( q.push( it ));
+                ASSERT_CONTAINER_SIZE( q, i + 1 );
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, nSize );
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                it = -1;
+                ASSERT_TRUE( q.pop( it ) );
+                ASSERT_EQ( it, i );
+                ASSERT_CONTAINER_SIZE( q, nSize - i - 1 );
+            }
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            // push/pop with lambda
+            for ( size_t i = 0; i < nSize; ++i ) {
+                it = static_cast<value_type>(i);
+                ASSERT_NE( it, -1 );
+                auto f = [&it]( value_type& dest ) { dest = it; it = -1; };
+                if ( i & 1 )
+                    ASSERT_TRUE( q.enqueue_with( f ));
+                else
+                    ASSERT_TRUE( q.push_with( f ));
+                ASSERT_EQ( it, -1 );
+                ASSERT_CONTAINER_SIZE( q, i + 1 );
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, nSize );
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                it = -1;
+                auto f = [&it]( value_type& src ) { it = src; src = -1; };
+                if ( i & 1 )
+                    ASSERT_TRUE( q.pop_with( f ));
+                else
+                    ASSERT_TRUE( q.dequeue_with( f ));
+                ASSERT_EQ( it, i );
+                ASSERT_CONTAINER_SIZE( q, nSize - i - 1 );
+            }
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                ASSERT_TRUE( q.push( static_cast<value_type>(i) ) );
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, nSize );
+
+            // push in full queue
+            ASSERT_FALSE( q.push( static_cast<int>(nSize * 2 )));
+            ASSERT_FALSE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, nSize );
+            it = static_cast<int>( nSize * 2 );
+            ASSERT_FALSE( q.enqueue( it ));
+            ASSERT_FALSE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, nSize );
+
+            // clear
+            q.clear();
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            // pop from empty queue
+            it = static_cast<int>(nSize * 2);
+            ASSERT_FALSE( q.pop( it ) );
+            ASSERT_EQ( it, nSize * 2 );
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            ASSERT_FALSE( q.dequeue( it ) );
+            ASSERT_EQ( it, nSize * 2 );
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+        }\r
+\r
+        template <class Queue>
+        void test_string( Queue& q )
+        {
+            std::string str[3];
+            str[0] = "one";
+            str[1] = "two";
+            str[2] = "three";
+            const size_t nSize = sizeof( str ) / sizeof( str[0] );
+
+            // emplace
+            for ( size_t i = 0; i < nSize; ++i ) {
+                ASSERT_TRUE( q.emplace( str[i].c_str()));
+                ASSERT_CONTAINER_SIZE( q, i + 1 );
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, nSize );
+
+            {
+                std::string s;
+                auto f = [&s]( std::string& src ) {
+                    ASSERT_FALSE( src.empty() );
+                    s = std::move( src );
+                    ASSERT_NE( s, src );
+                };
+                for ( size_t i = 0; i < nSize; ++i ) {
+                    if ( i & 1 )
+                        ASSERT_TRUE( q.pop_with( f ));
+                    else
+                        ASSERT_TRUE( q.dequeue_with( f ));
+
+                    ASSERT_CONTAINER_SIZE( q, nSize - i - 1 );
+                    ASSERT_EQ( s, str[i] );
+                }
+            }
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+
+            // move push
+            for ( size_t i = 0; i < nSize; ++i ) {
+                std::string s = str[i];
+                ASSERT_FALSE( s.empty());
+                if ( i & 1 )
+                    ASSERT_TRUE( q.enqueue( std::move( s )));
+                else
+                    ASSERT_TRUE( q.push( std::move( s )));
+                ASSERT_TRUE( s.empty() );
+                ASSERT_CONTAINER_SIZE( q, i + 1 );
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, nSize );
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                std::string s;
+                ASSERT_TRUE( q.pop( s ) );
+                ASSERT_CONTAINER_SIZE( q, nSize - i - 1 );
+                ASSERT_EQ( s, str[i] );
+            }
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+        }
+\r
+    };\r
+\r
+} // namespace cds_test\r
+\r
+#endif // CDSUNIT_QUEUE_TEST_BOUNDED_QUEUE_H\r
diff --git a/test/unit/queue/test_generic_queue.h b/test/unit/queue/test_generic_queue.h
new file mode 100644 (file)
index 0000000..5efc72c
--- /dev/null
@@ -0,0 +1,206 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_QUEUE_TEST_GENERIC_QUEUE_H
+#define CDSUNIT_QUEUE_TEST_GENERIC_QUEUE_H
+
+#include <cds_test/check_size.h>
+
+namespace cds_test {
+
+    class generic_queue : public ::testing::Test
+    {
+    protected:
+        template <typename Queue>
+        void test( Queue& q )
+        {
+            typedef typename Queue::value_type value_type;
+            value_type it;
+
+            const size_t nSize = 100;
+
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            // enqueue/dequeue
+            for ( size_t i = 0; i < nSize; ++i ) {
+                it = static_cast<value_type>(i);
+                ASSERT_TRUE( q.enqueue( it ));
+                ASSERT_CONTAINER_SIZE( q, i + 1 );
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, nSize );
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                it = -1;
+                ASSERT_TRUE( q.dequeue( it ) );
+                ASSERT_EQ( it, i );
+                ASSERT_CONTAINER_SIZE( q, nSize - i - 1 );
+            }
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            // push/pop
+            for ( size_t i = 0; i < nSize; ++i ) {
+                it = static_cast<value_type>(i);
+                ASSERT_TRUE( q.push( it ));
+                ASSERT_CONTAINER_SIZE( q, i + 1 );
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, nSize );
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                it = -1;
+                ASSERT_TRUE( q.pop( it ) );
+                ASSERT_EQ( it, i );
+                ASSERT_CONTAINER_SIZE( q, nSize - i - 1 );
+            }
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            // push/pop with lambda
+            for ( size_t i = 0; i < nSize; ++i ) {
+                it = static_cast<value_type>(i);
+                ASSERT_NE( it, -1 );
+                auto f = [&it]( value_type& dest ) { dest = it; it = -1; };
+                if ( i & 1 )
+                    ASSERT_TRUE( q.enqueue_with( f ));
+                else
+                    ASSERT_TRUE( q.push_with( f ));
+                ASSERT_EQ( it, -1 );
+                ASSERT_CONTAINER_SIZE( q, i + 1 );
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, nSize );
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                it = -1;
+                auto f = [&it]( value_type& src ) { it = src; src = -1; };
+                if ( i & 1 )
+                    ASSERT_TRUE( q.pop_with( f ));
+                else
+                    ASSERT_TRUE( q.dequeue_with( f ));
+                ASSERT_EQ( it, i );
+                ASSERT_CONTAINER_SIZE( q, nSize - i - 1 );
+            }
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            // clear
+            for ( size_t i = 0; i < nSize; ++i ) {
+                ASSERT_TRUE( q.push( static_cast<value_type>(i) ) );
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, nSize );
+
+            q.clear();
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            // pop from empty queue
+            it = nSize * 2;
+            ASSERT_FALSE( q.pop( it ) );
+            ASSERT_EQ( it, nSize * 2 );
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            ASSERT_FALSE( q.dequeue( it ) );
+            ASSERT_EQ( it, nSize * 2 );
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+        }
+
+        template <class Queue>
+        void test_string( Queue& q )
+        {
+            std::string str[3];
+            str[0] = "one";
+            str[1] = "two";
+            str[2] = "three";
+            const size_t nSize = sizeof( str ) / sizeof( str[0] );
+
+            // emplace
+            for ( size_t i = 0; i < nSize; ++i ) {
+                ASSERT_TRUE( q.emplace( str[i].c_str()));
+                ASSERT_CONTAINER_SIZE( q, i + 1 );
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, nSize );
+
+            {
+                std::string s;
+                auto f = [&s]( std::string& src ) {
+                    ASSERT_FALSE( src.empty() );
+                    s = std::move( src );
+                    ASSERT_NE( s, src );
+                };
+                for ( size_t i = 0; i < nSize; ++i ) {
+                    if ( i & 1 )
+                        ASSERT_TRUE( q.pop_with( f ));
+                    else
+                        ASSERT_TRUE( q.dequeue_with( f ));
+
+                    ASSERT_CONTAINER_SIZE( q, nSize - i - 1 );
+                    ASSERT_EQ( s, str[i] );
+                }
+            }
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+
+            // move push
+            for ( size_t i = 0; i < nSize; ++i ) {
+                std::string s = str[i];
+                ASSERT_FALSE( s.empty() );
+                if ( i & 1 )
+                    ASSERT_TRUE( q.enqueue( std::move( s )));
+                else
+                    ASSERT_TRUE( q.push( std::move( s )));
+                ASSERT_TRUE( s.empty() );
+                ASSERT_CONTAINER_SIZE( q, i + 1 );
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, nSize );
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                std::string s;
+                ASSERT_TRUE( q.pop( s ) );
+                ASSERT_CONTAINER_SIZE( q, nSize - i - 1 );
+                ASSERT_EQ( s, str[i] );
+            }
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+        }
+
+    };
+
+} // namespace cds_test
+
+#endif // CDSUNIT_QUEUE_TEST_GENERIC_QUEUE_H
diff --git a/test/unit/queue/test_intrusive_bounded_queue.h b/test/unit/queue/test_intrusive_bounded_queue.h
new file mode 100644 (file)
index 0000000..3c445f8
--- /dev/null
@@ -0,0 +1,151 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_QUEUE_TEST_INTRUSIVE_BOUNDED_QUEUE_H
+#define CDSUNIT_QUEUE_TEST_INTRUSIVE_BOUNDED_QUEUE_H
+
+#include <cds_test/check_size.h>
+#include <vector>
+\r
+namespace cds_test {\r
+\r
+    class intrusive_bounded_queue : public ::testing::Test\r
+    {\r
+    protected:\r
+        struct item {
+            int nVal;
+            int nDisposeCount;
+
+            item()
+                : nDisposeCount( 0 )
+            {}
+        };
+\r
+    protected:\r
+        template <typename Queue>\r
+        void test( Queue& q )\r
+        {\r
+            typedef typename Queue::value_type value_type;
+            value_type it;
+
+            const size_t nSize = q.capacity();
+
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            std::vector< value_type > arr;
+            arr.resize( nSize );
+            for ( size_t i = 0; i < nSize; ++i )
+                arr[i].nVal = static_cast<int>(i);
+
+            // push
+            for ( auto& i : arr ) {
+                if ( i.nVal & 1 ) {
+                    ASSERT_TRUE( q.push( i ));
+                }
+                else {
+                    ASSERT_TRUE( q.enqueue( i ));
+                }
+                ASSERT_CONTAINER_SIZE( q, i.nVal + 1 );
+                ASSERT_FALSE( q.empty() );
+            }
+
+            ASSERT_CONTAINER_SIZE( q, q.capacity() );
+
+            // pop
+            int val = 0;
+            while ( !q.empty() ) {
+                value_type * v;
+                if ( val & 1 )
+                    v = q.pop();
+                else
+                    v = q.dequeue();
+
+                ASSERT_TRUE( v != nullptr );
+                ASSERT_EQ( v->nVal, val );
+                ++val;
+                ASSERT_CONTAINER_SIZE( q, nSize - static_cast<size_t>( val ));
+            }
+            ASSERT_EQ( val, static_cast<int>( nSize ));
+
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            // pop from empty queue
+            {
+                value_type * v = q.pop();
+                ASSERT_TRUE( v == nullptr );
+                ASSERT_TRUE( q.empty() );
+                ASSERT_CONTAINER_SIZE( q, 0 );
+            }
+
+            // clear
+            for ( auto& i : arr ) {
+                ASSERT_TRUE( q.push( i ) );
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, q.capacity() );
+            q.clear();
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            if ( std::is_same<typename Queue::disposer, cds::intrusive::opt::v::empty_disposer>::value ) {
+                // no disposer
+                for ( auto& i : arr ) {
+                    ASSERT_EQ( i.nDisposeCount, 0 );
+                }
+            }
+            else {
+                // check the disposer has been called
+                for ( auto& i : arr ) {
+                    ASSERT_EQ( i.nDisposeCount, 1 );
+                }
+            }
+
+            // clear with disposer
+            for ( auto& i : arr ) {
+                ASSERT_TRUE( q.push( i ) );
+                i.nDisposeCount = 0;
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, q.capacity() );
+            q.clear( []( value_type * p ) { p->nDisposeCount = p->nVal + 1; } );
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+            // check the disposer has not been called
+            for ( auto& i : arr ) {
+                ASSERT_EQ( i.nDisposeCount, i.nVal + 1 );
+            }
+        }\r
+    };\r
+\r
+} // namespace cds_test\r
+
+#endif // CDSUNIT_QUEUE_TEST_INTRUSIVE_BOUNDED_QUEUE_H
diff --git a/test/unit/queue/test_intrusive_msqueue.h b/test/unit/queue/test_intrusive_msqueue.h
new file mode 100644 (file)
index 0000000..677a614
--- /dev/null
@@ -0,0 +1,159 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_QUEUE_TEST_INTRUSIVE_MSQUEUE_H
+#define CDSUNIT_QUEUE_TEST_INTRUSIVE_MSQUEUE_H
+
+#include <cds_test/check_size.h>
+
+namespace cds_test {
+
+    class intrusive_msqueue : public ::testing::Test
+    {
+    protected:
+        template <typename Base>
+        struct base_hook_item : public Base
+        {
+            int nVal;
+            int nDisposeCount;
+
+            base_hook_item()
+                : nDisposeCount( 0 )
+            {}
+
+            base_hook_item( base_hook_item const& s)
+                : nVal( s.nVal )
+                , nDisposeCount( s.nDisposeCount )
+            {}
+        };
+
+        template <typename Member>
+        struct member_hook_item
+        {
+            int nVal;
+            int nDisposeCount;
+            Member hMember;
+
+            member_hook_item()
+                : nDisposeCount( 0 )
+            {}
+
+            member_hook_item( member_hook_item const& s )
+                : nVal( s.nVal )
+                , nDisposeCount( s.nDisposeCount )
+            {}
+        };
+
+        struct mock_disposer
+        {
+            template <typename T>
+            void operator ()( T * p )
+            {
+                ++p->nDisposeCount;
+            }
+        };
+
+        template <typename Queue, typename Data>
+        void test( Queue& q, Data& arr )
+        {
+            typedef typename Queue::value_type value_type;
+            size_t nSize = arr.size();
+
+            value_type * pv;
+            for ( size_t i = 0; i < nSize; ++i )
+                arr[i].nVal = static_cast<int>(i);
+
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            // pop from empty queue
+            pv = q.pop();
+            ASSERT_TRUE( pv == nullptr );
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            pv =q.dequeue();
+            ASSERT_TRUE( pv == nullptr );
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            // push/pop test
+            for ( size_t i = 0; i < nSize; ++i ) {
+                if ( i & 1 )
+                    q.push( arr[i] );
+                else
+                    q.enqueue( arr[i] );
+                ASSERT_FALSE( q.empty());
+                ASSERT_CONTAINER_SIZE( q, i + 1 );
+            }
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                ASSERT_FALSE( q.empty() );
+                ASSERT_CONTAINER_SIZE( q, nSize - i );
+                if ( i & 1 )
+                    pv = q.pop();
+                else
+                    pv = q.dequeue();
+                ASSERT_FALSE( pv == nullptr );
+                ASSERT_EQ( pv->nVal, static_cast<int>(i));
+            }
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            Queue::gc::scan();
+            --nSize; // last element of array is in queue yet as a dummy item
+            for ( size_t i = 0; i < nSize; ++i ) {
+                ASSERT_EQ( arr[i].nDisposeCount, 1 );
+            }
+            ASSERT_EQ( arr[nSize].nDisposeCount, 0 );
+
+            // clear test
+            for ( size_t i = 0; i < nSize; ++i )
+                q.push( arr[i] );
+
+            ASSERT_FALSE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, nSize );
+
+            q.clear();
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            Queue::gc::scan();
+            for ( size_t i = 0; i < nSize - 1; ++i ) {
+                ASSERT_EQ( arr[i].nDisposeCount, 2 ) << "i=" << i;
+            }
+            ASSERT_EQ( arr[nSize - 1].nDisposeCount, 1 ); // this element is in the queue yet
+            ASSERT_EQ( arr[nSize].nDisposeCount, 1 );
+        }
+    };
+
+} // namespace cds_test
+
+#endif // CDSUNIT_QUEUE_TEST_INTRUSIVE_MSQUEUE_H
diff --git a/test/unit/queue/test_intrusive_segmented_queue.h b/test/unit/queue/test_intrusive_segmented_queue.h
new file mode 100644 (file)
index 0000000..82cab56
--- /dev/null
@@ -0,0 +1,191 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_QUEUE_TEST_INTRUSIVE_SEGMENTED_QUEUE_H
+#define CDSUNIT_QUEUE_TEST_INTRUSIVE_SEGMENTED_QUEUE_H
+
+#include <cds_test/check_size.h>
+\r
+namespace cds_test {\r
+\r
+    class intrusive_segmented_queue : public ::testing::Test\r
+    {\r
+    protected:\r
+        struct item {
+            int  nValue;
+
+            size_t  nDisposeCount;
+            size_t  nDispose2Count;
+
+            item()
+                : nValue( 0 )
+                , nDisposeCount( 0 )
+                , nDispose2Count( 0 )
+            {}
+
+            item( int nVal )
+                : nValue( nVal )
+                , nDisposeCount( 0 )
+                , nDispose2Count( 0 )
+            {}
+        };
+
+        struct big_item : public item
+        {
+            big_item()
+            {}
+
+            big_item( int nVal )
+                : item( nVal )
+            {}
+
+            int arr[80];
+        };
+
+        struct Disposer
+        {
+            void operator()( item * p )
+            {
+                ++p->nDisposeCount;
+            }
+        };
+
+        struct Disposer2
+        {
+            void operator()( item * p )
+            {
+                ++p->nDispose2Count;
+            }
+        };
+\r
+        template <typename Queue, typename Data>\r
+        void test( Queue& q, Data& val )\r
+        {\r
+            typedef typename Queue::value_type value_type;\r
+            val.resize( 100 );\r
+            for ( size_t i = 0; i < val.size(); ++i )
+                val[i].nValue = static_cast<int>( i );
+\r
+            ASSERT_TRUE( q.empty());\r
+            ASSERT_CONTAINER_SIZE( q, 0 );\r
+\r
+            // push/enqueue
+            for ( size_t i = 0; i < val.size(); ++i ) {
+                if ( i & 1 ) {
+                    ASSERT_TRUE( q.push( val[i] ) );
+                }
+                else {
+                    ASSERT_TRUE( q.enqueue( val[i] ) );
+                }
+
+                ASSERT_CONTAINER_SIZE( q, i + 1 );
+            }
+            EXPECT_TRUE( !q.empty() );
+
+            // pop/dequeue
+            size_t nCount = 0;
+            while ( !q.empty() ) {
+                value_type * pVal;
+                if ( nCount & 1 )
+                    pVal = q.pop();
+                else
+                    pVal = q.dequeue();
+
+                ASSERT_TRUE( pVal != nullptr );
+
+                int nSegment = int( nCount / q.quasi_factor() );
+                int nMin = nSegment * int( q.quasi_factor() );
+                int nMax = nMin + int( q.quasi_factor() ) - 1;
+                EXPECT_TRUE( nMin <= pVal->nValue && pVal->nValue <= nMax ) << nMin << " <= " << pVal->nValue << " <= " << nMax;
+
+                ++nCount;
+                EXPECT_CONTAINER_SIZE( q, val.size() - nCount );
+            }
+            EXPECT_EQ( nCount, val.size());
+            EXPECT_TRUE( q.empty() );
+            EXPECT_CONTAINER_SIZE( q, 0 );
+\r
+            // pop from empty queue
+            ASSERT_TRUE( q.pop() == nullptr );
+            EXPECT_TRUE( q.empty() );
+            EXPECT_CONTAINER_SIZE( q, 0 );
+
+            // check that Disposer has not been called
+            Queue::gc::force_dispose();
+            for ( size_t i = 0; i < val.size(); ++i ) {
+                EXPECT_EQ( val[i].nDisposeCount, 0 );
+                EXPECT_EQ( val[i].nDispose2Count, 0 );
+            }
+\r
+            // clear
+            for ( size_t i = 0; i < val.size(); ++i )
+                EXPECT_TRUE( q.push( val[i] ) );
+            EXPECT_CONTAINER_SIZE( q, val.size());
+            EXPECT_TRUE( !q.empty() );
+
+            q.clear();
+            EXPECT_CONTAINER_SIZE( q, 0 );
+            EXPECT_TRUE( q.empty() );
+
+            // check if Disposer has been called
+            Queue::gc::force_dispose();
+            for ( size_t i = 0; i < val.size(); ++i ) {
+                EXPECT_EQ( val[i].nDisposeCount, 1 );
+                EXPECT_EQ( val[i].nDispose2Count, 0 );
+            }
+
+            // clear_with
+            for ( size_t i = 0; i < val.size(); ++i )
+                EXPECT_TRUE( q.push( val[i] ) );
+            EXPECT_CONTAINER_SIZE( q, val.size() );
+            EXPECT_TRUE( !q.empty() );
+
+            q.clear_with( Disposer2() );
+            EXPECT_CONTAINER_SIZE( q, 0 );
+            EXPECT_TRUE( q.empty() );
+
+            // check if Disposer has been called
+            Queue::gc::force_dispose();
+            for ( size_t i = 0; i < val.size(); ++i ) {
+                EXPECT_EQ( val[i].nDisposeCount, 1 );
+                EXPECT_EQ( val[i].nDispose2Count, 1 );
+            }\r
+\r
+            // check clear on destruct
+            for ( size_t i = 0; i < val.size(); ++i )
+                EXPECT_TRUE( q.push( val[i] ));
+            EXPECT_CONTAINER_SIZE( q, val.size());
+            EXPECT_TRUE( !q.empty());\r
+        }\r
+    };\r
+\r
+} // namespace cds_test\r
+\r
+#endif // CDSUNIT_QUEUE_TEST_INTRUSIVE_SEGMENTED_QUEUE_H\r
diff --git a/test/unit/queue/test_segmented_queue.h b/test/unit/queue/test_segmented_queue.h
new file mode 100644 (file)
index 0000000..0ad17b5
--- /dev/null
@@ -0,0 +1,231 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_QUEUE_TEST_SEGMENTED_QUEUE_H
+#define CDSUNIT_QUEUE_TEST_SEGMENTED_QUEUE_H
+
+#include <cds_test/check_size.h>
+\r
+namespace cds_test {\r
+\r
+    class segmented_queue : public ::testing::Test\r
+    {\r
+    protected:\r
+        template <typename Queue>\r
+        void test( Queue& q )\r
+        {\r
+            typedef typename Queue::value_type value_type;
+            value_type it;
+
+            const size_t nSize = 100;
+
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            // enqueue/dequeue
+            for ( size_t i = 0; i < nSize; ++i ) {
+                it = static_cast<value_type>(i);
+                ASSERT_TRUE( q.enqueue( it ));
+                ASSERT_CONTAINER_SIZE( q, i + 1 );
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, nSize );
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                it = -1;
+                ASSERT_TRUE( q.dequeue( it ) );
+                ASSERT_CONTAINER_SIZE( q, nSize - i - 1 );
+
+                int nSegment = int( i / q.quasi_factor() );
+                int nMin = nSegment * int( q.quasi_factor() );
+                int nMax = nMin + int( q.quasi_factor() ) - 1;
+                EXPECT_LE( nMin, it );
+                EXPECT_LE( it, nMax );
+            }
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            // push/pop
+            for ( size_t i = 0; i < nSize; ++i ) {
+                it = static_cast<value_type>(i);
+                ASSERT_TRUE( q.push( it ));
+                ASSERT_CONTAINER_SIZE( q, i + 1 );
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, nSize );
+
+            size_t nPushed = nSize;
+            size_t nStartSegment = nPushed / q.quasi_factor();
+            size_t nOffset = nPushed % q.quasi_factor();
+            for ( size_t i = 0; i < nSize; ++i ) {
+                it = -1;
+                ASSERT_TRUE( q.pop( it ) );
+                ASSERT_CONTAINER_SIZE( q, nSize - i - 1 );
+
+                int nSegment = static_cast<int>((i + nPushed) / q.quasi_factor() - nStartSegment );
+                int nMin = nSegment * static_cast<int>( q.quasi_factor());
+                if ( nSegment )
+                    nMin -= static_cast<int>( nOffset );
+                int nMax = nMin + static_cast<int>( q.quasi_factor()) - 1;
+                EXPECT_LE( nMin, it );
+                EXPECT_LE( it, nMax );
+            }
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            // push/pop with lambda
+            for ( size_t i = 0; i < nSize; ++i ) {
+                it = static_cast<value_type>(i);
+                EXPECT_NE( it, -1 );
+                auto f = [&it]( value_type& dest ) { dest = it; it = -1; };
+                if ( i & 1 )
+                    ASSERT_TRUE( q.enqueue_with( f ));
+                else
+                    ASSERT_TRUE( q.push_with( f ));
+                ASSERT_EQ( it, -1 );
+                ASSERT_CONTAINER_SIZE( q, i + 1 );
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, nSize );
+
+            nPushed += nSize;
+            nStartSegment = nPushed / q.quasi_factor();
+            nOffset = nPushed % q.quasi_factor();
+            for ( size_t i = 0; i < nSize; ++i ) {
+                it = -1;
+                auto f = [&it]( value_type& src ) { it = src; src = -1; };
+                if ( i & 1 )
+                    ASSERT_TRUE( q.pop_with( f ));
+                else
+                    ASSERT_TRUE( q.dequeue_with( f ));
+                ASSERT_CONTAINER_SIZE( q, nSize - i - 1 );
+
+                int nSegment = static_cast<int>((i + nPushed) / q.quasi_factor() - nStartSegment);
+                int nMin = nSegment * static_cast<int>(q.quasi_factor());
+                if ( nSegment )
+                    nMin -= static_cast<int>(nOffset);
+                int nMax = nMin + static_cast<int>(q.quasi_factor()) - 1;
+                EXPECT_LE( nMin, it );
+                EXPECT_LE( it, nMax );
+            }
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            // clear
+            for ( size_t i = 0; i < nSize; ++i ) {
+                ASSERT_TRUE( q.push( static_cast<value_type>(i) ) );
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, nSize );
+
+            q.clear();
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            // pop from empty queue
+            it = nSize * 2;
+            ASSERT_FALSE( q.pop( it ) );
+            ASSERT_EQ( it, nSize * 2 );
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+            ASSERT_FALSE( q.dequeue( it ) );
+            ASSERT_EQ( it, nSize * 2 );
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+        }\r
+\r
+        template <class Queue>
+        void test_string( Queue& q )
+        {
+            std::string str[3];
+            str[0] = "one";
+            str[1] = "two";
+            str[2] = "three";
+            const size_t nSize = sizeof( str ) / sizeof( str[0] );
+
+            // emplace
+            for ( size_t i = 0; i < nSize; ++i ) {
+                ASSERT_TRUE( q.emplace( str[i].c_str()));
+                ASSERT_CONTAINER_SIZE( q, i + 1 );
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, nSize );
+
+            {
+                std::string s;
+                auto f = [&s]( std::string& src ) {
+                    ASSERT_FALSE( src.empty() );
+                    s = std::move( src );
+                    ASSERT_NE( s, src );
+                };
+                for ( size_t i = 0; i < nSize; ++i ) {
+                    if ( i & 1 )
+                        ASSERT_TRUE( q.pop_with( f ));
+                    else
+                        ASSERT_TRUE( q.dequeue_with( f ));
+
+                    ASSERT_CONTAINER_SIZE( q, nSize - i - 1 );
+                    ASSERT_TRUE( s == str[0] || s == str[1] || s == str[2] );
+                }
+            }
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+
+
+            // move push
+            for ( size_t i = 0; i < nSize; ++i ) {
+                std::string s = str[i];
+                ASSERT_FALSE( s.empty() );
+                if ( i & 1 )
+                    ASSERT_TRUE( q.enqueue( std::move( s )));
+                else
+                    ASSERT_TRUE( q.push( std::move( s )));
+                ASSERT_TRUE( s.empty() );
+                ASSERT_CONTAINER_SIZE( q, i + 1 );
+            }
+            ASSERT_FALSE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, nSize );
+
+            for ( size_t i = 0; i < nSize; ++i ) {
+                std::string s;
+                ASSERT_TRUE( q.pop( s ) );
+                ASSERT_CONTAINER_SIZE( q, nSize - i - 1 );
+                ASSERT_TRUE( s == str[0] || s == str[1] || s == str[2] );
+            }
+            ASSERT_TRUE( q.empty() );
+            ASSERT_CONTAINER_SIZE( q, 0 );
+        }
+\r
+    };\r
+\r
+} // namespace cds_test\r
+\r
+#endif // CDSUNIT_QUEUE_TEST_SEGMENTED_QUEUE_H\r
diff --git a/test/unit/queue/tsigas_queue.cpp b/test/unit/queue/tsigas_queue.cpp
new file mode 100644 (file)
index 0000000..6ab9b68
--- /dev/null
@@ -0,0 +1,134 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_bounded_queue.h"
+
+#include <cds/container/tsigas_cycle_queue.h>
+
+namespace {
+    namespace cc = cds::container;
+
+    class TsigasCycleQueue: public cds_test::bounded_queue
+    {};
+
+    TEST_F( TsigasCycleQueue, defaulted )
+    {
+        typedef cds::container::TsigasCycleQueue< int > test_queue;
+
+        test_queue q( 128 );
+        test(q);
+    }
+
+    TEST_F( TsigasCycleQueue, stat )
+    {
+        struct traits: public cds::container::tsigas_queue::traits
+        {
+            typedef cds::opt::v::static_buffer<int, 128> buffer;
+        };
+        typedef cds::container::TsigasCycleQueue< int, traits > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( TsigasCycleQueue, stat_item_counting )
+    {
+        
+        typedef cds::container::TsigasCycleQueue< int,
+            cds::container::tsigas_queue::make_traits<
+                cds::opt::buffer< cds::opt::v::static_buffer<int, 128>>
+                , cds::opt::item_counter< cds::atomicity::item_counter>
+            >::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( TsigasCycleQueue, dynamic )
+    {
+        struct traits : public cds::container::tsigas_queue::traits
+        {
+            typedef cds::opt::v::dynamic_buffer<int> buffer;
+        };
+        typedef cds::container::TsigasCycleQueue< int, traits > test_queue;
+
+        test_queue q( 128 );
+        test( q );
+    }
+
+    TEST_F( TsigasCycleQueue, dynamic_item_counting )
+    {
+        typedef cds::container::TsigasCycleQueue< int,
+            cds::container::tsigas_queue::make_traits<
+                cds::opt::buffer< cds::opt::v::dynamic_buffer<int>>
+                , cds::opt::item_counter< cds::atomicity::item_counter>
+            >::type
+        > test_queue;
+
+        test_queue q( 128 );
+        test( q );
+    }
+
+    TEST_F( TsigasCycleQueue, dynamic_padding )
+    {
+        struct traits : public cds::container::tsigas_queue::traits
+        {
+            typedef cds::opt::v::dynamic_buffer<int> buffer;
+            enum { padding = 16 };
+        };
+        typedef cds::container::TsigasCycleQueue< int, traits > test_queue;
+
+        test_queue q( 128 );
+        test( q );
+    }
+
+    TEST_F( TsigasCycleQueue, move )
+    {
+        typedef cds::container::TsigasCycleQueue< std::string > test_queue;
+
+        test_queue q( 128 );
+        test_string( q );
+    }
+
+    TEST_F( TsigasCycleQueue, move_item_counting )
+    {
+        struct traits : public cds::container::tsigas_queue::traits
+        {
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cds::container::TsigasCycleQueue< std::string, traits > test_queue;
+
+        test_queue q( 128 );
+        test_string( q );
+    }
+
+} // namespace
+
diff --git a/test/unit/queue/vyukov_mpmc_queue.cpp b/test/unit/queue/vyukov_mpmc_queue.cpp
new file mode 100644 (file)
index 0000000..c9aa9c1
--- /dev/null
@@ -0,0 +1,134 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_bounded_queue.h"
+
+#include <cds/container/vyukov_mpmc_cycle_queue.h>
+
+namespace {
+    namespace cc = cds::container;
+
+    class VyukovMPMCCycleQueue: public cds_test::bounded_queue
+    {};
+
+    TEST_F( VyukovMPMCCycleQueue, defaulted )
+    {
+        typedef cds::container::VyukovMPMCCycleQueue< int > test_queue;
+
+        test_queue q( 128 );
+        test(q);
+    }
+
+    TEST_F( VyukovMPMCCycleQueue, stat )
+    {
+        struct traits: public cds::container::vyukov_queue::traits
+        {
+            typedef cds::opt::v::static_buffer<int, 128> buffer;
+        };
+        typedef cds::container::VyukovMPMCCycleQueue< int, traits > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( VyukovMPMCCycleQueue, stat_item_counting )
+    {
+        
+        typedef cds::container::VyukovMPMCCycleQueue< int,
+            cds::container::vyukov_queue::make_traits<
+                cds::opt::buffer< cds::opt::v::static_buffer<int, 128>>
+                , cds::opt::item_counter< cds::atomicity::item_counter>
+            >::type
+        > test_queue;
+
+        test_queue q;
+        test( q );
+    }
+
+    TEST_F( VyukovMPMCCycleQueue, dynamic )
+    {
+        struct traits : public cds::container::vyukov_queue::traits
+        {
+            typedef cds::opt::v::dynamic_buffer<int> buffer;
+        };
+        typedef cds::container::VyukovMPMCCycleQueue< int, traits > test_queue;
+
+        test_queue q( 128 );
+        test( q );
+    }
+
+    TEST_F( VyukovMPMCCycleQueue, dynamic_item_counting )
+    {
+        typedef cds::container::VyukovMPMCCycleQueue< int,
+            cds::container::vyukov_queue::make_traits<
+                cds::opt::buffer< cds::opt::v::dynamic_buffer<int>>
+                , cds::opt::item_counter< cds::atomicity::item_counter>
+            >::type
+        > test_queue;
+
+        test_queue q( 128 );
+        test( q );
+    }
+
+    TEST_F( VyukovMPMCCycleQueue, dynamic_padding )
+    {
+        struct traits : public cds::container::vyukov_queue::traits
+        {
+            typedef cds::opt::v::dynamic_buffer<int> buffer;
+            enum { padding = 64 };
+        };
+        typedef cds::container::VyukovMPMCCycleQueue< int, traits > test_queue;
+
+        test_queue q( 128 );
+        test( q );
+    }
+
+    TEST_F( VyukovMPMCCycleQueue, move )
+    {
+        typedef cds::container::VyukovMPMCCycleQueue< std::string > test_queue;
+
+        test_queue q( 128 );
+        test_string( q );
+    }
+
+    TEST_F( VyukovMPMCCycleQueue, move_item_counting )
+    {
+        struct traits : public cds::container::vyukov_queue::traits
+        {
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cds::container::VyukovMPMCCycleQueue< std::string, traits > test_queue;
+
+        test_queue q( 128 );
+        test_string( q );
+    }
+
+} // namespace
+
diff --git a/test/unit/set/CMakeLists.txt b/test/unit/set/CMakeLists.txt
new file mode 100644 (file)
index 0000000..dcd684a
--- /dev/null
@@ -0,0 +1,67 @@
+set(PACKAGE_NAME unit-set)
+
+set(CDSGTEST_SET_SOURCES
+    ../main.cpp
+    feldman_hashset_hp.cpp
+    feldman_hashset_dhp.cpp
+    feldman_hashset_rcu_gpb.cpp
+    feldman_hashset_rcu_gpi.cpp
+    feldman_hashset_rcu_gpt.cpp
+    feldman_hashset_rcu_shb.cpp
+    feldman_hashset_rcu_sht.cpp
+    michael_lazy_hp.cpp
+    michael_lazy_dhp.cpp
+    michael_lazy_nogc.cpp
+    michael_lazy_rcu_gpb.cpp
+    michael_lazy_rcu_gpi.cpp
+    michael_lazy_rcu_gpt.cpp
+    michael_lazy_rcu_shb.cpp
+    michael_lazy_rcu_sht.cpp
+    michael_michael_hp.cpp
+    michael_michael_dhp.cpp
+    michael_michael_nogc.cpp
+    michael_michael_rcu_gpb.cpp
+    michael_michael_rcu_gpi.cpp
+    michael_michael_rcu_gpt.cpp
+    michael_michael_rcu_shb.cpp
+    michael_michael_rcu_sht.cpp
+    skiplist_hp.cpp
+    skiplist_dhp.cpp
+    skiplist_nogc.cpp
+    skiplist_rcu_gpb.cpp
+    skiplist_rcu_gpi.cpp
+    skiplist_rcu_gpt.cpp
+    skiplist_rcu_shb.cpp
+    skiplist_rcu_sht.cpp
+    split_lazy_hp.cpp
+    split_lazy_dhp.cpp
+    split_lazy_nogc.cpp
+    split_lazy_rcu_gpb.cpp
+    split_lazy_rcu_gpi.cpp
+    split_lazy_rcu_gpt.cpp
+    split_lazy_rcu_shb.cpp
+    split_lazy_rcu_sht.cpp
+    split_michael_hp.cpp
+    split_michael_dhp.cpp
+    split_michael_nogc.cpp
+    split_michael_rcu_gpb.cpp
+    split_michael_rcu_gpi.cpp
+    split_michael_rcu_gpt.cpp
+    split_michael_rcu_shb.cpp
+    split_michael_rcu_sht.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_executable(${PACKAGE_NAME} ${CDSGTEST_SET_SOURCES})
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/unit/set/feldman_hashset_dhp.cpp b/test/unit/set/feldman_hashset_dhp.cpp
new file mode 100644 (file)
index 0000000..af80c86
--- /dev/null
@@ -0,0 +1,159 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_feldman_hashset_hp.h"
+
+#include <cds/container/feldman_hashset_dhp.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+    class FeldmanHashSet_DHP : public cds_test::feldman_hashset_hp
+    {
+    protected:
+        typedef cds_test::feldman_hashset_hp base_class;
+
+        void SetUp()
+        {
+            struct set_traits: public cc::feldman_hashset::traits
+            {
+                typedef get_hash hash_accessor;
+            };
+            typedef cc::FeldmanHashSet< gc_type, int_item, set_traits > set_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( FeldmanHashSet_DHP, defaulted )
+    {
+        typedef cc::FeldmanHashSet< gc_type, int_item,
+            typename cc::feldman_hashset::make_traits<
+                cc::feldman_hashset::hash_accessor< get_hash >
+            >::type
+        > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( FeldmanHashSet_DHP, compare )
+    {
+        typedef cc::FeldmanHashSet< gc_type, int_item,
+            typename cc::feldman_hashset::make_traits<
+                cc::feldman_hashset::hash_accessor< get_hash >
+                ,cds::opt::compare< cmp >
+            >::type
+        > set_type;
+
+        set_type s( 4, 5 );
+        test( s );
+    }
+
+    TEST_F( FeldmanHashSet_DHP, less )
+    {
+        typedef cc::FeldmanHashSet< gc_type, int_item,
+            typename cc::feldman_hashset::make_traits<
+                cc::feldman_hashset::hash_accessor< get_hash >
+                ,cds::opt::less< std::less<int> >
+            >::type
+        > set_type;
+
+        set_type s( 3, 2 );
+        test( s );
+    }
+
+    TEST_F( FeldmanHashSet_DHP, cmpmix )
+    {
+        typedef cc::FeldmanHashSet< gc_type, int_item,
+            typename cc::feldman_hashset::make_traits<
+                cc::feldman_hashset::hash_accessor< get_hash >
+                , cds::opt::less< std::less<int> >
+                ,cds::opt::compare< cmp >
+            >::type
+        > set_type;
+
+        set_type s( 4, 4 );
+        test( s );
+    }
+
+    TEST_F( FeldmanHashSet_DHP, item_counting )
+    {
+        struct set_traits: public cc::feldman_hashset::traits
+        {
+            typedef get_hash hash_accessor;
+            typedef cmp compare;
+            typedef std::less<int> less;
+            typedef simple_item_counter item_counter;
+        };
+        typedef cc::FeldmanHashSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( 3, 3 );
+        test( s );
+    }
+
+    TEST_F( FeldmanHashSet_DHP, backoff )
+    {
+        struct set_traits: public cc::feldman_hashset::traits
+        {
+            typedef get_hash hash_accessor;
+            typedef cmp compare;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+        };
+        typedef cc::FeldmanHashSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( 8, 2 );
+        test( s );
+    }
+
+    TEST_F( FeldmanHashSet_DHP, stat )
+    {
+        struct set_traits: public cc::feldman_hashset::traits
+        {
+            typedef get_hash hash_accessor;
+            typedef cds::backoff::yield back_off;
+            typedef cc::feldman_hashset::stat<> stat;
+        };
+        typedef cc::FeldmanHashSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( 1, 1 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/set/feldman_hashset_hp.cpp b/test/unit/set/feldman_hashset_hp.cpp
new file mode 100644 (file)
index 0000000..d5f6e18
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_feldman_hashset_hp.h"
+
+#include <cds/container/feldman_hashset_hp.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+    class FeldmanHashSet_HP : public cds_test::feldman_hashset_hp
+    {
+    protected:
+        typedef cds_test::feldman_hashset_hp base_class;
+
+        void SetUp()
+        {
+            struct set_traits: public cc::feldman_hashset::traits
+            {
+                typedef get_hash hash_accessor;
+            };
+            typedef cc::FeldmanHashSet< gc_type, int_item, set_traits > set_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( set_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( FeldmanHashSet_HP, defaulted )
+    {
+        typedef cc::FeldmanHashSet< gc_type, int_item,
+            typename cc::feldman_hashset::make_traits<
+                cc::feldman_hashset::hash_accessor< get_hash >
+            >::type
+        > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( FeldmanHashSet_HP, compare )
+    {
+        typedef cc::FeldmanHashSet< gc_type, int_item,
+            typename cc::feldman_hashset::make_traits<
+                cc::feldman_hashset::hash_accessor< get_hash >
+                ,cds::opt::compare< cmp >
+            >::type
+        > set_type;
+
+        set_type s( 4, 5 );
+        test( s );
+    }
+
+    TEST_F( FeldmanHashSet_HP, less )
+    {
+        typedef cc::FeldmanHashSet< gc_type, int_item,
+            typename cc::feldman_hashset::make_traits<
+                cc::feldman_hashset::hash_accessor< get_hash >
+                ,cds::opt::less< std::less<int> >
+            >::type
+        > set_type;
+
+        set_type s( 3, 2 );
+        test( s );
+    }
+
+    TEST_F( FeldmanHashSet_HP, cmpmix )
+    {
+        typedef cc::FeldmanHashSet< gc_type, int_item,
+            typename cc::feldman_hashset::make_traits<
+                cc::feldman_hashset::hash_accessor< get_hash >
+                , cds::opt::less< std::less<int> >
+                ,cds::opt::compare< cmp >
+            >::type
+        > set_type;
+
+        set_type s( 4, 4 );
+        test( s );
+    }
+
+    TEST_F( FeldmanHashSet_HP, item_counting )
+    {
+        struct set_traits: public cc::feldman_hashset::traits
+        {
+            typedef get_hash hash_accessor;
+            typedef cmp compare;
+            typedef std::less<int> less;
+            typedef simple_item_counter item_counter;
+        };
+        typedef cc::FeldmanHashSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( 3, 3 );
+        test( s );
+    }
+
+    TEST_F( FeldmanHashSet_HP, backoff )
+    {
+        struct set_traits: public cc::feldman_hashset::traits
+        {
+            typedef get_hash hash_accessor;
+            typedef cmp compare;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+        };
+        typedef cc::FeldmanHashSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( 8, 2 );
+        test( s );
+    }
+
+    TEST_F( FeldmanHashSet_HP, stat )
+    {
+        struct set_traits: public cc::feldman_hashset::traits
+        {
+            typedef get_hash hash_accessor;
+            typedef cds::backoff::yield back_off;
+            typedef cc::feldman_hashset::stat<> stat;
+        };
+        typedef cc::FeldmanHashSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( 1, 1 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/set/feldman_hashset_rcu_gpb.cpp b/test/unit/set/feldman_hashset_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..9e01f1d
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_feldman_hashset_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, FeldmanHashSet, rcu_implementation );
diff --git a/test/unit/set/feldman_hashset_rcu_gpi.cpp b/test/unit/set/feldman_hashset_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..478c69b
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_feldman_hashset_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, FeldmanHashSet, rcu_implementation );
diff --git a/test/unit/set/feldman_hashset_rcu_gpt.cpp b/test/unit/set/feldman_hashset_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..33c4fb7
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_feldman_hashset_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, FeldmanHashSet, rcu_implementation );
diff --git a/test/unit/set/feldman_hashset_rcu_shb.cpp b/test/unit/set/feldman_hashset_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..bacf830
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_feldman_hashset_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, FeldmanHashSet, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/set/feldman_hashset_rcu_sht.cpp b/test/unit/set/feldman_hashset_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..e169b41
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_feldman_hashset_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, FeldmanHashSet, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/set/michael_lazy_dhp.cpp b/test/unit/set/michael_lazy_dhp.cpp
new file mode 100644 (file)
index 0000000..1ec2a93
--- /dev/null
@@ -0,0 +1,197 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_set_hp.h"
+
+#include <cds/container/lazy_list_dhp.h>
+#include <cds/container/michael_set.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+    class MichaelLazySet_DHP : public cds_test::container_set_hp
+    {
+    protected:
+        typedef cds_test::container_set_hp base_class;
+
+        void SetUp()
+        {
+            typedef cc::LazyList< gc_type, int_item > list_type;
+            typedef cc::MichaelHashSet< gc_type, list_type >   set_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( MichaelLazySet_DHP, compare )
+    {
+        typedef cc::LazyList< gc_type, int_item,
+            typename cc::lazy_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashSet< gc_type, list_type, 
+            typename cc::michael_set::make_traits<
+                cds::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( MichaelLazySet_DHP, less )
+    {
+        typedef cc::LazyList< gc_type, int_item,
+            typename cc::lazy_list::make_traits<
+                cds::opt::less< base_class::less >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashSet< gc_type, list_type, 
+            typename cc::michael_set::make_traits<
+                cds::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( MichaelLazySet_DHP, cmpmix )
+    {
+        struct list_traits : public cc::lazy_list::traits
+        {
+            typedef base_class::less less;
+            typedef cmp compare;
+        };
+        typedef cc::LazyList< gc_type, int_item, list_traits > list_type;
+
+        typedef cc::MichaelHashSet< gc_type, list_type, 
+            typename cc::michael_set::make_traits<
+                cds::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( MichaelLazySet_DHP, item_counting )
+    {
+        struct list_traits : public cc::lazy_list::traits
+        {
+            typedef cmp compare;
+        };
+        typedef cc::LazyList< gc_type, int_item, list_traits > list_type;
+
+        struct set_traits: public cc::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef cc::MichaelHashSet< gc_type, list_type, set_traits >set_type;
+
+        set_type s( kSize, 3 );
+        test( s );
+    }
+
+    TEST_F( MichaelLazySet_DHP, backoff )
+    {
+        struct list_traits : public cc::lazy_list::traits
+        {
+            typedef cmp compare;
+            typedef cds::backoff::exponential<cds::backoff::pause, cds::backoff::yield> back_off;
+        };
+        typedef cc::LazyList< gc_type, int_item, list_traits > list_type;
+
+        struct set_traits : public cc::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashSet< gc_type, list_type, set_traits >set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+    TEST_F( MichaelLazySet_DHP, seq_cst )
+    {
+        struct list_traits : public cc::lazy_list::traits
+        {
+            typedef base_class::less less;
+            typedef cds::backoff::pause back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::LazyList< gc_type, int_item, list_traits > list_type;
+
+        struct set_traits : public cc::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashSet< gc_type, list_type, set_traits >set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+    TEST_F( MichaelLazySet_DHP, mutex )
+    {
+        struct list_traits: public cc::lazy_list::traits
+        {
+            typedef base_class::less less;
+            typedef cds::backoff::pause back_off;
+            typedef std::mutex lock_type;
+        };
+        typedef cc::LazyList< gc_type, int_item, list_traits > list_type;
+
+        struct set_traits: public cc::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashSet< gc_type, list_type, set_traits >set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/set/michael_lazy_hp.cpp b/test/unit/set/michael_lazy_hp.cpp
new file mode 100644 (file)
index 0000000..af16339
--- /dev/null
@@ -0,0 +1,198 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_set_hp.h"
+
+#include <cds/container/lazy_list_hp.h>
+#include <cds/container/michael_set.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+    class MichaelLazySet_HP : public cds_test::container_set_hp
+    {
+    protected:
+        typedef cds_test::container_set_hp base_class;
+
+        void SetUp()
+        {
+            typedef cc::LazyList< gc_type, int_item > list_type;
+            typedef cc::MichaelHashSet< gc_type, list_type >   set_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( set_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( MichaelLazySet_HP, compare )
+    {
+        typedef cc::LazyList< gc_type, int_item,
+            typename cc::lazy_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashSet< gc_type, list_type, 
+            typename cc::michael_set::make_traits<
+                cds::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( MichaelLazySet_HP, less )
+    {
+        typedef cc::LazyList< gc_type, int_item,
+            typename cc::lazy_list::make_traits<
+                cds::opt::less< base_class::less >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashSet< gc_type, list_type, 
+            typename cc::michael_set::make_traits<
+                cds::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( MichaelLazySet_HP, cmpmix )
+    {
+        struct list_traits : public cc::lazy_list::traits
+        {
+            typedef base_class::less less;
+            typedef cmp compare;
+        };
+        typedef cc::LazyList< gc_type, int_item, list_traits > list_type;
+
+        typedef cc::MichaelHashSet< gc_type, list_type, 
+            typename cc::michael_set::make_traits<
+                cds::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( MichaelLazySet_HP, item_counting )
+    {
+        struct list_traits : public cc::lazy_list::traits
+        {
+            typedef cmp compare;
+        };
+        typedef cc::LazyList< gc_type, int_item, list_traits > list_type;
+
+        struct set_traits: public cc::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef cc::MichaelHashSet< gc_type, list_type, set_traits >set_type;
+
+        set_type s( kSize, 3 );
+        test( s );
+    }
+
+    TEST_F( MichaelLazySet_HP, backoff )
+    {
+        struct list_traits : public cc::lazy_list::traits
+        {
+            typedef cmp compare;
+            typedef cds::backoff::exponential<cds::backoff::pause, cds::backoff::yield> back_off;
+        };
+        typedef cc::LazyList< gc_type, int_item, list_traits > list_type;
+
+        struct set_traits : public cc::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashSet< gc_type, list_type, set_traits >set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+    TEST_F( MichaelLazySet_HP, seq_cst )
+    {
+        struct list_traits : public cc::lazy_list::traits
+        {
+            typedef base_class::less less;
+            typedef cds::backoff::pause back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::LazyList< gc_type, int_item, list_traits > list_type;
+
+        struct set_traits : public cc::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashSet< gc_type, list_type, set_traits >set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+    TEST_F( MichaelLazySet_HP, mutex )
+    {
+        struct list_traits: public cc::lazy_list::traits
+        {
+            typedef base_class::less less;
+            typedef cds::backoff::pause back_off;
+            typedef std::mutex lock_type;
+        };
+        typedef cc::LazyList< gc_type, int_item, list_traits > list_type;
+
+        struct set_traits: public cc::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashSet< gc_type, list_type, set_traits >set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/set/michael_lazy_nogc.cpp b/test/unit/set/michael_lazy_nogc.cpp
new file mode 100644 (file)
index 0000000..0a7751c
--- /dev/null
@@ -0,0 +1,188 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_set_nogc.h"
+
+#include <cds/container/lazy_list_nogc.h>
+#include <cds/container/michael_set_nogc.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::nogc gc_type;
+
+    class MichaelLazySet_NoGC : public cds_test::container_set_nogc
+    {
+    protected:
+        typedef cds_test::container_set_nogc base_class;
+
+        //void SetUp()
+        //{}
+
+        //void TearDown()
+        //{}
+    };
+
+    TEST_F( MichaelLazySet_NoGC, compare )
+    {
+        typedef cc::LazyList< gc_type, int_item,
+            typename cc::lazy_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashSet< gc_type, list_type, 
+            typename cc::michael_set::make_traits<
+                cds::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( MichaelLazySet_NoGC, less )
+    {
+        typedef cc::LazyList< gc_type, int_item,
+            typename cc::lazy_list::make_traits<
+                cds::opt::less< base_class::less >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashSet< gc_type, list_type, 
+            typename cc::michael_set::make_traits<
+                cds::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( MichaelLazySet_NoGC, cmpmix )
+    {
+        struct list_traits : public cc::lazy_list::traits
+        {
+            typedef base_class::less less;
+            typedef cmp compare;
+        };
+        typedef cc::LazyList< gc_type, int_item, list_traits > list_type;
+
+        typedef cc::MichaelHashSet< gc_type, list_type, 
+            typename cc::michael_set::make_traits<
+                cds::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( MichaelLazySet_NoGC, item_counting )
+    {
+        struct list_traits : public cc::lazy_list::traits
+        {
+            typedef cmp compare;
+        };
+        typedef cc::LazyList< gc_type, int_item, list_traits > list_type;
+
+        struct set_traits: public cc::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef cc::MichaelHashSet< gc_type, list_type, set_traits >set_type;
+
+        set_type s( kSize, 3 );
+        test( s );
+    }
+
+    TEST_F( MichaelLazySet_NoGC, backoff )
+    {
+        struct list_traits : public cc::lazy_list::traits
+        {
+            typedef cmp compare;
+            typedef cds::backoff::exponential<cds::backoff::pause, cds::backoff::yield> back_off;
+        };
+        typedef cc::LazyList< gc_type, int_item, list_traits > list_type;
+
+        struct set_traits : public cc::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashSet< gc_type, list_type, set_traits >set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+    TEST_F( MichaelLazySet_NoGC, seq_cst )
+    {
+        struct list_traits : public cc::lazy_list::traits
+        {
+            typedef base_class::less less;
+            typedef cds::backoff::pause back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::LazyList< gc_type, int_item, list_traits > list_type;
+
+        struct set_traits : public cc::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashSet< gc_type, list_type, set_traits >set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+    TEST_F( MichaelLazySet_NoGC, mutex )
+    {
+        struct list_traits : public cc::lazy_list::traits
+        {
+            typedef base_class::less less;
+            typedef cds::backoff::pause back_off;
+            typedef std::mutex lock_type;
+        };
+        typedef cc::LazyList< gc_type, int_item, list_traits > list_type;
+
+        struct set_traits : public cc::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashSet< gc_type, list_type, set_traits >set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/set/michael_lazy_rcu_gpb.cpp b/test/unit/set/michael_lazy_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..6cdf4f0
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_michael_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, MichaelLazySet, rcu_implementation );
diff --git a/test/unit/set/michael_lazy_rcu_gpi.cpp b/test/unit/set/michael_lazy_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..f81152c
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_michael_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, MichaelLazySet, rcu_implementation );
diff --git a/test/unit/set/michael_lazy_rcu_gpt.cpp b/test/unit/set/michael_lazy_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..3e7e917
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_michael_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, MichaelLazySet, rcu_implementation );
diff --git a/test/unit/set/michael_lazy_rcu_shb.cpp b/test/unit/set/michael_lazy_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..0f65501
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_michael_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, MichaelLazySet, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/set/michael_lazy_rcu_sht.cpp b/test/unit/set/michael_lazy_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..db2bbb5
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_michael_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, MichaelLazySet, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/set/michael_michael_dhp.cpp b/test/unit/set/michael_michael_dhp.cpp
new file mode 100644 (file)
index 0000000..73f8b1f
--- /dev/null
@@ -0,0 +1,176 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_set_hp.h"
+
+#include <cds/container/michael_list_dhp.h>
+#include <cds/container/michael_set.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+    class MichaelSet_DHP : public cds_test::container_set_hp
+    {
+    protected:
+        typedef cds_test::container_set_hp base_class;
+
+        void SetUp()
+        {
+            typedef cc::MichaelList< gc_type, int_item > list_type;
+            typedef cc::MichaelHashSet< gc_type, list_type >   set_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( MichaelSet_DHP, compare )
+    {
+        typedef cc::MichaelList< gc_type, int_item,
+            typename cc::michael_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashSet< gc_type, list_type, 
+            typename cc::michael_set::make_traits<
+                cds::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( MichaelSet_DHP, less )
+    {
+        typedef cc::MichaelList< gc_type, int_item,
+            typename cc::michael_list::make_traits<
+                cds::opt::less< base_class::less >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashSet< gc_type, list_type, 
+            typename cc::michael_set::make_traits<
+                cds::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( MichaelSet_DHP, cmpmix )
+    {
+        struct list_traits : public cc::michael_list::traits
+        {
+            typedef base_class::less less;
+            typedef cmp compare;
+        };
+        typedef cc::MichaelList< gc_type, int_item, list_traits > list_type;
+
+        typedef cc::MichaelHashSet< gc_type, list_type, 
+            typename cc::michael_set::make_traits<
+                cds::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( MichaelSet_DHP, item_counting )
+    {
+        struct list_traits : public cc::michael_list::traits
+        {
+            typedef cmp compare;
+        };
+        typedef cc::MichaelList< gc_type, int_item, list_traits > list_type;
+
+        struct set_traits: public cc::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef cc::MichaelHashSet< gc_type, list_type, set_traits >set_type;
+
+        set_type s( kSize, 3 );
+        test( s );
+    }
+
+    TEST_F( MichaelSet_DHP, backoff )
+    {
+        struct list_traits : public cc::michael_list::traits
+        {
+            typedef cmp compare;
+            typedef cds::backoff::exponential<cds::backoff::pause, cds::backoff::yield> back_off;
+        };
+        typedef cc::MichaelList< gc_type, int_item, list_traits > list_type;
+
+        struct set_traits : public cc::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashSet< gc_type, list_type, set_traits >set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+    TEST_F( MichaelSet_DHP, seq_cst )
+    {
+        struct list_traits : public cc::michael_list::traits
+        {
+            typedef base_class::less less;
+            typedef cds::backoff::pause back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::MichaelList< gc_type, int_item, list_traits > list_type;
+
+        struct set_traits : public cc::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashSet< gc_type, list_type, set_traits >set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/set/michael_michael_hp.cpp b/test/unit/set/michael_michael_hp.cpp
new file mode 100644 (file)
index 0000000..29107d4
--- /dev/null
@@ -0,0 +1,177 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_set_hp.h"
+
+#include <cds/container/michael_list_hp.h>
+#include <cds/container/michael_set.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+    class MichaelSet_HP : public cds_test::container_set_hp
+    {
+    protected:
+        typedef cds_test::container_set_hp base_class;
+
+        void SetUp()
+        {
+            typedef cc::MichaelList< gc_type, int_item > list_type;
+            typedef cc::MichaelHashSet< gc_type, list_type >   set_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( set_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( MichaelSet_HP, compare )
+    {
+        typedef cc::MichaelList< gc_type, int_item,
+            typename cc::michael_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashSet< gc_type, list_type, 
+            typename cc::michael_set::make_traits<
+                cds::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( MichaelSet_HP, less )
+    {
+        typedef cc::MichaelList< gc_type, int_item,
+            typename cc::michael_list::make_traits<
+                cds::opt::less< base_class::less >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashSet< gc_type, list_type, 
+            typename cc::michael_set::make_traits<
+                cds::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( MichaelSet_HP, cmpmix )
+    {
+        struct list_traits : public cc::michael_list::traits
+        {
+            typedef base_class::less less;
+            typedef cmp compare;
+        };
+        typedef cc::MichaelList< gc_type, int_item, list_traits > list_type;
+
+        typedef cc::MichaelHashSet< gc_type, list_type, 
+            typename cc::michael_set::make_traits<
+                cds::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( MichaelSet_HP, item_counting )
+    {
+        struct list_traits : public cc::michael_list::traits
+        {
+            typedef cmp compare;
+        };
+        typedef cc::MichaelList< gc_type, int_item, list_traits > list_type;
+
+        struct set_traits: public cc::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef cc::MichaelHashSet< gc_type, list_type, set_traits > set_type;
+
+        set_type s( kSize, 3 );
+        test( s );
+    }
+
+    TEST_F( MichaelSet_HP, backoff )
+    {
+        struct list_traits : public cc::michael_list::traits
+        {
+            typedef cmp compare;
+            typedef cds::backoff::exponential<cds::backoff::pause, cds::backoff::yield> back_off;
+        };
+        typedef cc::MichaelList< gc_type, int_item, list_traits > list_type;
+
+        struct set_traits : public cc::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashSet< gc_type, list_type, set_traits > set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+    TEST_F( MichaelSet_HP, seq_cst )
+    {
+        struct list_traits : public cc::michael_list::traits
+        {
+            typedef base_class::less less;
+            typedef cds::backoff::pause back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::MichaelList< gc_type, int_item, list_traits > list_type;
+
+        struct set_traits : public cc::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashSet< gc_type, list_type, set_traits > set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/set/michael_michael_nogc.cpp b/test/unit/set/michael_michael_nogc.cpp
new file mode 100644 (file)
index 0000000..0f493ff
--- /dev/null
@@ -0,0 +1,167 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_set_nogc.h"
+
+#include <cds/container/michael_list_nogc.h>
+#include <cds/container/michael_set_nogc.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::nogc gc_type;
+
+    class MichaelSet_NoGC : public cds_test::container_set_nogc
+    {
+    protected:
+        typedef cds_test::container_set_nogc base_class;
+
+        //void SetUp()
+        //{}
+
+        //void TearDown()
+        //{}
+    };
+
+    TEST_F( MichaelSet_NoGC, compare )
+    {
+        typedef cc::MichaelList< gc_type, int_item,
+            typename cc::michael_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashSet< gc_type, list_type, 
+            typename cc::michael_set::make_traits<
+                cds::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( MichaelSet_NoGC, less )
+    {
+        typedef cc::MichaelList< gc_type, int_item,
+            typename cc::michael_list::make_traits<
+                cds::opt::less< base_class::less >
+            >::type
+        > list_type;
+
+        typedef cc::MichaelHashSet< gc_type, list_type, 
+            typename cc::michael_set::make_traits<
+                cds::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( MichaelSet_NoGC, cmpmix )
+    {
+        struct list_traits : public cc::michael_list::traits
+        {
+            typedef base_class::less less;
+            typedef cmp compare;
+        };
+        typedef cc::MichaelList< gc_type, int_item, list_traits > list_type;
+
+        typedef cc::MichaelHashSet< gc_type, list_type, 
+            typename cc::michael_set::make_traits<
+                cds::opt::hash< hash_int >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( MichaelSet_NoGC, item_counting )
+    {
+        struct list_traits : public cc::michael_list::traits
+        {
+            typedef cmp compare;
+        };
+        typedef cc::MichaelList< gc_type, int_item, list_traits > list_type;
+
+        struct set_traits: public cc::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef simple_item_counter item_counter;
+        };
+        typedef cc::MichaelHashSet< gc_type, list_type, set_traits >set_type;
+
+        set_type s( kSize, 3 );
+        test( s );
+    }
+
+    TEST_F( MichaelSet_NoGC, backoff )
+    {
+        struct list_traits : public cc::michael_list::traits
+        {
+            typedef cmp compare;
+            typedef cds::backoff::exponential<cds::backoff::pause, cds::backoff::yield> back_off;
+        };
+        typedef cc::MichaelList< gc_type, int_item, list_traits > list_type;
+
+        struct set_traits : public cc::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashSet< gc_type, list_type, set_traits >set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+    TEST_F( MichaelSet_NoGC, seq_cst )
+    {
+        struct list_traits : public cc::michael_list::traits
+        {
+            typedef base_class::less less;
+            typedef cds::backoff::pause back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::MichaelList< gc_type, int_item, list_traits > list_type;
+
+        struct set_traits : public cc::michael_set::traits
+        {
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::MichaelHashSet< gc_type, list_type, set_traits >set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/set/michael_michael_rcu_gpb.cpp b/test/unit/set/michael_michael_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..9b2a188
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_michael_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, MichaelSet, rcu_implementation );
diff --git a/test/unit/set/michael_michael_rcu_gpi.cpp b/test/unit/set/michael_michael_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..a907d59
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_michael_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, MichaelSet, rcu_implementation );
diff --git a/test/unit/set/michael_michael_rcu_gpt.cpp b/test/unit/set/michael_michael_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..f2a61a6
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_michael_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, MichaelSet, rcu_implementation );
diff --git a/test/unit/set/michael_michael_rcu_shb.cpp b/test/unit/set/michael_michael_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..be79635
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_michael_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, MichaelSet, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/set/michael_michael_rcu_sht.cpp b/test/unit/set/michael_michael_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..58cf7f6
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_michael_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, MichaelSet, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/set/skiplist_dhp.cpp b/test/unit/set/skiplist_dhp.cpp
new file mode 100644 (file)
index 0000000..c03f105
--- /dev/null
@@ -0,0 +1,161 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_ordered_set_hp.h"
+
+#include <cds/container/skip_list_set_dhp.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+    class SkipListSet_DHP : public cds_test::container_ordered_set_hp
+    {
+    protected:
+        typedef cds_test::container_ordered_set_hp base_class;
+
+        void SetUp()
+        {
+            struct set_traits: public cc::skip_list::traits
+            {
+                typedef cmp compare;
+            };
+            typedef cc::SkipListSet< gc_type, int_item > set_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( SkipListSet_DHP, compare )
+    {
+        typedef cc::SkipListSet< gc_type, int_item,
+            typename cc::skip_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( SkipListSet_DHP, less )
+    {
+        typedef cc::SkipListSet< gc_type, int_item,
+            typename cc::skip_list::make_traits<
+                cds::opt::less< base_class::less >
+            >::type
+        > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( SkipListSet_DHP, cmpmix )
+    {
+        typedef cc::SkipListSet< gc_type, int_item,
+            typename cc::skip_list::make_traits<
+                cds::opt::less< base_class::less >
+                ,cds::opt::compare< cmp >
+            >::type
+        > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( SkipListSet_DHP, item_counting )
+    {
+        struct set_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::SkipListSet< gc_type, int_item, set_traits >set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( SkipListSet_DHP, backoff )
+    {
+        struct set_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+        };
+        typedef cc::SkipListSet< gc_type, int_item, set_traits >set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( SkipListSet_DHP, stat )
+    {
+        struct set_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cc::skip_list::stat<> stat;
+        };
+        typedef cc::SkipListSet< gc_type, int_item, set_traits >set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( SkipListSet_DHP, random_level_generator )
+    {
+        struct set_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cc::skip_list::stat<> stat;
+            typedef cc::skip_list::xorshift random_level_generator;
+        };
+        typedef cc::SkipListSet< gc_type, int_item, set_traits >set_type;
+
+        set_type s;
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/set/skiplist_hp.cpp b/test/unit/set/skiplist_hp.cpp
new file mode 100644 (file)
index 0000000..22b157a
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_ordered_set_hp.h"
+
+#include <cds/container/skip_list_set_hp.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+    class SkipListSet_HP : public cds_test::container_ordered_set_hp
+    {
+    protected:
+        typedef cds_test::container_ordered_set_hp base_class;
+
+        void SetUp()
+        {
+            struct set_traits: public cc::skip_list::traits
+            {
+                typedef cmp compare;
+            };
+            typedef cc::SkipListSet< gc_type, int_item > set_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( set_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( SkipListSet_HP, compare )
+    {
+        typedef cc::SkipListSet< gc_type, int_item,
+            typename cc::skip_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( SkipListSet_HP, less )
+    {
+        typedef cc::SkipListSet< gc_type, int_item,
+            typename cc::skip_list::make_traits<
+                cds::opt::less< base_class::less >
+            >::type
+        > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( SkipListSet_HP, cmpmix )
+    {
+        typedef cc::SkipListSet< gc_type, int_item,
+            typename cc::skip_list::make_traits<
+                cds::opt::less< base_class::less >
+                ,cds::opt::compare< cmp >
+            >::type
+        > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( SkipListSet_HP, item_counting )
+    {
+        struct set_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::SkipListSet< gc_type, int_item, set_traits >set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( SkipListSet_HP, backoff )
+    {
+        struct set_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+        };
+        typedef cc::SkipListSet< gc_type, int_item, set_traits >set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( SkipListSet_HP, stat )
+    {
+        struct set_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cc::skip_list::stat<> stat;
+        };
+        typedef cc::SkipListSet< gc_type, int_item, set_traits >set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( SkipListSet_HP, random_level_generator )
+    {
+        struct set_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cc::skip_list::stat<> stat;
+            typedef cc::skip_list::xorshift random_level_generator;
+        };
+        typedef cc::SkipListSet< gc_type, int_item, set_traits >set_type;
+
+        set_type s;
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/set/skiplist_nogc.cpp b/test/unit/set/skiplist_nogc.cpp
new file mode 100644 (file)
index 0000000..302c21d
--- /dev/null
@@ -0,0 +1,149 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_set_nogc.h"
+
+#include <cds/container/skip_list_set_nogc.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::nogc gc_type;
+
+    class SkipListSet_NoGC : public cds_test::container_set_nogc
+    {
+    protected:
+        typedef cds_test::container_set_nogc base_class;
+
+        //void SetUp()
+        //{}
+
+        //void TearDown()
+        //{}
+    };
+
+    TEST_F( SkipListSet_NoGC, compare )
+    {
+        typedef cc::SkipListSet< gc_type, int_item,
+            typename cc::skip_list::make_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( SkipListSet_NoGC, less )
+    {
+        typedef cc::SkipListSet< gc_type, int_item,
+            typename cc::skip_list::make_traits<
+                cds::opt::less< base_class::less >
+            >::type
+        > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( SkipListSet_NoGC, cmpmix )
+    {
+        typedef cc::SkipListSet< gc_type, int_item,
+            typename cc::skip_list::make_traits<
+                cds::opt::less< base_class::less >
+                ,cds::opt::compare< cmp >
+            >::type
+        > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( SkipListSet_NoGC, item_counting )
+    {
+        struct set_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+        typedef cc::SkipListSet< gc_type, int_item, set_traits >set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( SkipListSet_NoGC, backoff )
+    {
+        struct set_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+        };
+        typedef cc::SkipListSet< gc_type, int_item, set_traits >set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( SkipListSet_NoGC, stat )
+    {
+        struct set_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cc::skip_list::stat<> stat;
+        };
+        typedef cc::SkipListSet< gc_type, int_item, set_traits >set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( SkipListSet_NoGC, random_level_generator )
+    {
+        struct set_traits: public cc::skip_list::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cc::skip_list::stat<> stat;
+            typedef cc::skip_list::xorshift random_level_generator;
+        };
+        typedef cc::SkipListSet< gc_type, int_item, set_traits >set_type;
+
+        set_type s;
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/set/skiplist_rcu_gpb.cpp b/test/unit/set/skiplist_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..e6e77cf
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_skiplist_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, SkipListSet, rcu_implementation );
diff --git a/test/unit/set/skiplist_rcu_gpi.cpp b/test/unit/set/skiplist_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..86ca7c2
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_skiplist_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, SkipListSet, rcu_implementation );
diff --git a/test/unit/set/skiplist_rcu_gpt.cpp b/test/unit/set/skiplist_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..65aed08
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_skiplist_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, SkipListSet, rcu_implementation );
diff --git a/test/unit/set/skiplist_rcu_shb.cpp b/test/unit/set/skiplist_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..4111ea8
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_skiplist_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, SkipListSet, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/set/skiplist_rcu_sht.cpp b/test/unit/set/skiplist_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..bdc7565
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_skiplist_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, SkipListSet, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/set/split_lazy_dhp.cpp b/test/unit/set/split_lazy_dhp.cpp
new file mode 100644 (file)
index 0000000..3054096
--- /dev/null
@@ -0,0 +1,235 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_set_hp.h"
+
+#include <cds/container/lazy_list_dhp.h>
+#include <cds/container/split_list_set.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+    class SplitListLazySet_DHP : public cds_test::container_set_hp
+    {
+    protected:
+        typedef cds_test::container_set_hp base_class;
+
+        void SetUp()
+        {
+            struct set_traits: public cc::split_list::traits {
+                typedef cc::lazy_list_tag ordered_list;
+                typedef hash_int hash;
+                struct ordered_list_traits: public cc::lazy_list::traits
+                {
+                    typedef cmp compare;
+                };
+            };
+            typedef cc::SplitListSet< gc_type, int_item, set_traits >   set_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( SplitListLazySet_DHP, compare )
+    {
+        typedef cc::SplitListSet< gc_type, int_item, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::lazy_list_tag >
+                , cds::opt::hash< hash_int >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::lazy_list::make_traits<
+                        cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( SplitListLazySet_DHP, less )
+    {
+        typedef cc::SplitListSet< gc_type, int_item, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::lazy_list_tag >
+                , cds::opt::hash< hash_int >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::lazy_list::make_traits<
+                        cds::opt::less< less >
+                    >::type
+                >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 1 );
+        test( s );
+    }
+
+    TEST_F( SplitListLazySet_DHP, cmpmix )
+    {
+        typedef cc::SplitListSet< gc_type, int_item, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::lazy_list_tag >
+                , cds::opt::hash< hash_int >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::lazy_list::make_traits<
+                        cds::opt::less< less >
+                        , cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( SplitListLazySet_DHP, item_counting )
+    {
+        struct set_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef base_class::less less;
+                typedef cds::backoff::empty back_off;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+    TEST_F( SplitListLazySet_DHP, stat )
+    {
+        struct set_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cc::split_list::stat<> stat;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef base_class::less less;
+                typedef cds::opt::v::sequential_consistent memory_model;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( SplitListLazySet_DHP, back_off )
+    {
+        struct set_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::empty back_off;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 3 );
+        test( s );
+    }
+
+    TEST_F( SplitListLazySet_DHP, mutex )
+    {
+        struct set_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+                typedef std::mutex lock_type;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    struct set_static_traits: public cc::split_list::traits
+    {
+        static bool const dynamic_bucket_table = false;
+    };
+
+    TEST_F( SplitListLazySet_DHP, static_bucket_table )
+    {
+        struct set_traits: public set_static_traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/set/split_lazy_hp.cpp b/test/unit/set/split_lazy_hp.cpp
new file mode 100644 (file)
index 0000000..1b38749
--- /dev/null
@@ -0,0 +1,236 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_set_hp.h"
+
+#include <cds/container/lazy_list_hp.h>
+#include <cds/container/split_list_set.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+    class SplitListLazySet_HP : public cds_test::container_set_hp
+    {
+    protected:
+        typedef cds_test::container_set_hp base_class;
+
+        void SetUp()
+        {
+            struct set_traits: public cc::split_list::traits {
+                typedef cc::lazy_list_tag ordered_list;
+                typedef hash_int hash;
+                struct ordered_list_traits: public cc::lazy_list::traits
+                {
+                    typedef cmp compare;
+                };
+            };
+            typedef cc::SplitListSet< gc_type, int_item, set_traits >   set_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( set_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( SplitListLazySet_HP, compare )
+    {
+        typedef cc::SplitListSet< gc_type, int_item, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::lazy_list_tag >
+                , cds::opt::hash< hash_int >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::lazy_list::make_traits<
+                        cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( SplitListLazySet_HP, less )
+    {
+        typedef cc::SplitListSet< gc_type, int_item, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::lazy_list_tag >
+                , cds::opt::hash< hash_int >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::lazy_list::make_traits<
+                        cds::opt::less< less >
+                    >::type
+                >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( SplitListLazySet_HP, cmpmix )
+    {
+        typedef cc::SplitListSet< gc_type, int_item, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::lazy_list_tag >
+                , cds::opt::hash< hash_int >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::lazy_list::make_traits<
+                        cds::opt::less< less >
+                        , cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 3 );
+        test( s );
+    }
+
+    TEST_F( SplitListLazySet_HP, item_counting )
+    {
+        struct set_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef base_class::less less;
+                typedef cds::backoff::empty back_off;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+    TEST_F( SplitListLazySet_HP, stat )
+    {
+        struct set_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cc::split_list::stat<> stat;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef base_class::less less;
+                typedef cds::opt::v::sequential_consistent memory_model;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( SplitListLazySet_HP, back_off )
+    {
+        struct set_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::empty back_off;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+    TEST_F( SplitListLazySet_HP, mutex )
+    {
+        struct set_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+                typedef std::mutex lock_type;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    struct set_static_traits: public cc::split_list::traits
+    {
+        static bool const dynamic_bucket_table = false;
+    };
+
+    TEST_F( SplitListLazySet_HP, static_bucket_table )
+    {
+        struct set_traits: public set_static_traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/set/split_lazy_nogc.cpp b/test/unit/set/split_lazy_nogc.cpp
new file mode 100644 (file)
index 0000000..afa95ab
--- /dev/null
@@ -0,0 +1,220 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_set_nogc.h"
+
+#include <cds/container/lazy_list_nogc.h>
+#include <cds/container/split_list_set_nogc.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::nogc gc_type;
+
+    class SplitListLazySet_NoGC : public cds_test::container_set_nogc
+    {
+    protected:
+        typedef cds_test::container_set_nogc base_class;
+
+        //void SetUp()
+        //{}
+
+        //void TearDown()
+        //{}
+    };
+
+    TEST_F( SplitListLazySet_NoGC, compare )
+    {
+        typedef cc::SplitListSet< gc_type, int_item, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::lazy_list_tag >
+                , cds::opt::hash< hash_int >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::lazy_list::make_traits<
+                        cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( SplitListLazySet_NoGC, less )
+    {
+        typedef cc::SplitListSet< gc_type, int_item, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::lazy_list_tag >
+                , cds::opt::hash< hash_int >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::lazy_list::make_traits<
+                        cds::opt::less< less >
+                    >::type
+                >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( SplitListLazySet_NoGC, cmpmix )
+    {
+        typedef cc::SplitListSet< gc_type, int_item, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::lazy_list_tag >
+                , cds::opt::hash< hash_int >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::lazy_list::make_traits<
+                        cds::opt::less< less >
+                        , cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 1 );
+        test( s );
+    }
+
+    TEST_F( SplitListLazySet_NoGC, item_counting )
+    {
+        struct set_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef base_class::less less;
+                typedef cds::backoff::empty back_off;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 3 );
+        test( s );
+    }
+
+    TEST_F( SplitListLazySet_NoGC, stat )
+    {
+        struct set_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cc::split_list::stat<> stat;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef base_class::less less;
+                typedef cds::opt::v::sequential_consistent memory_model;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+    TEST_F( SplitListLazySet_NoGC, back_off )
+    {
+        struct set_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::empty back_off;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( SplitListLazySet_NoGC, mutex )
+    {
+        struct set_traits: public cc::split_list::traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+                typedef std::mutex lock_type;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 3 );
+        test( s );
+    }
+
+    struct set_static_traits: public cc::split_list::traits
+    {
+        static bool const dynamic_bucket_table = false;
+    };
+
+    TEST_F( SplitListLazySet_NoGC, static_bucket_table )
+    {
+        struct set_traits: public set_static_traits
+        {
+            typedef cc::lazy_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::lazy_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+
+} // namespace
diff --git a/test/unit/set/split_lazy_rcu_gpb.cpp b/test/unit/set/split_lazy_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..119e59b
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_split_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, SplitListLazySet, rcu_implementation );
diff --git a/test/unit/set/split_lazy_rcu_gpi.cpp b/test/unit/set/split_lazy_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..c9876b8
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_split_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, SplitListLazySet, rcu_implementation );
diff --git a/test/unit/set/split_lazy_rcu_gpt.cpp b/test/unit/set/split_lazy_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..bf5e851
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_split_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, SplitListLazySet, rcu_implementation );
diff --git a/test/unit/set/split_lazy_rcu_shb.cpp b/test/unit/set/split_lazy_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..538c7f5
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_split_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, SplitListLazySet, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/set/split_lazy_rcu_sht.cpp b/test/unit/set/split_lazy_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..d345177
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_split_lazy_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, SplitListLazySet, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/set/split_michael_dhp.cpp b/test/unit/set/split_michael_dhp.cpp
new file mode 100644 (file)
index 0000000..31b8dd9
--- /dev/null
@@ -0,0 +1,212 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_set_hp.h"
+
+#include <cds/container/michael_list_dhp.h>
+#include <cds/container/split_list_set.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+    class SplitListMichaelSet_DHP : public cds_test::container_set_hp
+    {
+    protected:
+        typedef cds_test::container_set_hp base_class;
+
+        void SetUp()
+        {
+            struct set_traits: public cc::split_list::traits {
+                typedef cc::michael_list_tag ordered_list;
+                typedef hash_int hash;
+                struct ordered_list_traits: public cc::michael_list::traits
+                {
+                    typedef cmp compare;
+                };
+            };
+            typedef cc::SplitListSet< gc_type, int_item, set_traits >   set_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+    };
+
+    TEST_F( SplitListMichaelSet_DHP, compare )
+    {
+        typedef cc::SplitListSet< gc_type, int_item, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::michael_list_tag >
+                , cds::opt::hash< hash_int >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::michael_list::make_traits<
+                        cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( SplitListMichaelSet_DHP, less )
+    {
+        typedef cc::SplitListSet< gc_type, int_item, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::michael_list_tag >
+                , cds::opt::hash< hash_int >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::michael_list::make_traits<
+                        cds::opt::less< less >
+                    >::type
+                >
+            >::type
+        > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( SplitListMichaelSet_DHP, cmpmix )
+    {
+        typedef cc::SplitListSet< gc_type, int_item, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::michael_list_tag >
+                , cds::opt::hash< hash_int >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::michael_list::make_traits<
+                        cds::opt::less< less >
+                        , cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 3 );
+        test( s );
+    }
+
+    TEST_F( SplitListMichaelSet_DHP, item_counting )
+    {
+        struct set_traits: public cc::split_list::traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef cmp compare;
+                typedef base_class::less less;
+                typedef cds::backoff::empty back_off;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+    TEST_F( SplitListMichaelSet_DHP, stat )
+    {
+        struct set_traits: public cc::split_list::traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cc::split_list::stat<> stat;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef base_class::less less;
+                typedef cds::opt::v::sequential_consistent memory_model;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( SplitListMichaelSet_DHP, back_off )
+    {
+        struct set_traits: public cc::split_list::traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    struct set_static_traits: public cc::split_list::traits
+    {
+        static bool const dynamic_bucket_table = false;
+    };
+
+    TEST_F( SplitListMichaelSet_DHP, static_bucket_table )
+    {
+        struct set_traits: public set_static_traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/set/split_michael_hp.cpp b/test/unit/set/split_michael_hp.cpp
new file mode 100644 (file)
index 0000000..0b779e2
--- /dev/null
@@ -0,0 +1,213 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_set_hp.h"
+
+#include <cds/container/michael_list_hp.h>
+#include <cds/container/split_list_set.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+    class SplitListMichaelSet_HP : public cds_test::container_set_hp
+    {
+    protected:
+        typedef cds_test::container_set_hp base_class;
+
+        void SetUp()
+        {
+            struct set_traits: public cc::split_list::traits {
+                typedef cc::michael_list_tag ordered_list;
+                typedef hash_int hash;
+                struct ordered_list_traits: public cc::michael_list::traits
+                {
+                    typedef cmp compare;
+                };
+            };
+            typedef cc::SplitListSet< gc_type, int_item, set_traits >   set_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( set_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+    TEST_F( SplitListMichaelSet_HP, compare )
+    {
+        typedef cc::SplitListSet< gc_type, int_item, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::michael_list_tag >
+                , cds::opt::hash< hash_int >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::michael_list::make_traits<
+                        cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( SplitListMichaelSet_HP, less )
+    {
+        typedef cc::SplitListSet< gc_type, int_item, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::michael_list_tag >
+                , cds::opt::hash< hash_int >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::michael_list::make_traits<
+                        cds::opt::less< less >
+                    >::type
+                >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( SplitListMichaelSet_HP, cmpmix )
+    {
+        typedef cc::SplitListSet< gc_type, int_item, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::michael_list_tag >
+                , cds::opt::hash< hash_int >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::michael_list::make_traits<
+                        cds::opt::less< less >
+                        , cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( SplitListMichaelSet_HP, item_counting )
+    {
+        struct set_traits: public cc::split_list::traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef cmp compare;
+                typedef base_class::less less;
+                typedef cds::backoff::empty back_off;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+    TEST_F( SplitListMichaelSet_HP, stat )
+    {
+        struct set_traits: public cc::split_list::traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cc::split_list::stat<> stat;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef base_class::less less;
+                typedef cds::opt::v::sequential_consistent memory_model;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( SplitListMichaelSet_HP, back_off )
+    {
+        struct set_traits: public cc::split_list::traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 3 );
+        test( s );
+    }
+
+    struct set_static_traits: public cc::split_list::traits
+    {
+        static bool const dynamic_bucket_table = false;
+    };
+
+    TEST_F( SplitListMichaelSet_HP, static_bucket_table )
+    {
+        struct set_traits: public set_static_traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/set/split_michael_nogc.cpp b/test/unit/set/split_michael_nogc.cpp
new file mode 100644 (file)
index 0000000..50af1e8
--- /dev/null
@@ -0,0 +1,197 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_set_nogc.h"
+
+#include <cds/container/michael_list_nogc.h>
+#include <cds/container/split_list_set_nogc.h>
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::nogc gc_type;
+
+    class SplitListMichaelSet_NoGC : public cds_test::container_set_nogc
+    {
+    protected:
+        typedef cds_test::container_set_nogc base_class;
+
+        //void SetUp()
+        //{}
+
+        //void TearDown()
+        //{}
+    };
+
+    TEST_F( SplitListMichaelSet_NoGC, compare )
+    {
+        typedef cc::SplitListSet< gc_type, int_item, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::michael_list_tag >
+                , cds::opt::hash< hash_int >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::michael_list::make_traits<
+                        cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( SplitListMichaelSet_NoGC, less )
+    {
+        typedef cc::SplitListSet< gc_type, int_item, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::michael_list_tag >
+                , cds::opt::hash< hash_int >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::michael_list::make_traits<
+                        cds::opt::less< less >
+                    >::type
+                >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    TEST_F( SplitListMichaelSet_NoGC, cmpmix )
+    {
+        typedef cc::SplitListSet< gc_type, int_item, 
+            typename cc::split_list::make_traits<
+                cc::split_list::ordered_list< cc::michael_list_tag >
+                , cds::opt::hash< hash_int >
+                , cc::split_list::ordered_list_traits< 
+                    typename cc::michael_list::make_traits<
+                        cds::opt::less< less >
+                        , cds::opt::compare< cmp >
+                    >::type
+                >
+            >::type
+        > set_type;
+
+        set_type s( kSize, 3 );
+        test( s );
+    }
+
+    TEST_F( SplitListMichaelSet_NoGC, item_counting )
+    {
+        struct set_traits: public cc::split_list::traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef cmp compare;
+                typedef base_class::less less;
+                typedef cds::backoff::empty back_off;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+    TEST_F( SplitListMichaelSet_NoGC, stat )
+    {
+        struct set_traits: public cc::split_list::traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cc::split_list::stat<> stat;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef base_class::less less;
+                typedef cds::opt::v::sequential_consistent memory_model;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 5 );
+        test( s );
+    }
+
+    TEST_F( SplitListMichaelSet_NoGC, back_off )
+    {
+        struct set_traits: public cc::split_list::traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::opt::v::sequential_consistent memory_model;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 2 );
+        test( s );
+    }
+
+    struct set_static_traits: public cc::split_list::traits
+    {
+        static bool const dynamic_bucket_table = false;
+    };
+
+    TEST_F( SplitListMichaelSet_NoGC, static_bucket_table )
+    {
+        struct set_traits: public set_static_traits
+        {
+            typedef cc::michael_list_tag ordered_list;
+            typedef hash_int hash;
+            typedef cds::atomicity::item_counter item_counter;
+
+            struct ordered_list_traits: public cc::michael_list::traits
+            {
+                typedef cmp compare;
+                typedef cds::backoff::pause back_off;
+            };
+        };
+        typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type;
+
+        set_type s( kSize, 4 );
+        test( s );
+    }
+
+
+} // namespace
diff --git a/test/unit/set/split_michael_rcu_gpb.cpp b/test/unit/set/split_michael_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..e8dc699
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_split_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, SplitListMichaelSet, rcu_implementation );
diff --git a/test/unit/set/split_michael_rcu_gpi.cpp b/test/unit/set/split_michael_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..10d058f
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_split_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, SplitListMichaelSet, rcu_implementation );
diff --git a/test/unit/set/split_michael_rcu_gpt.cpp b/test/unit/set/split_michael_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..2a49f74
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_split_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, SplitListMichaelSet, rcu_implementation );
diff --git a/test/unit/set/split_michael_rcu_shb.cpp b/test/unit/set/split_michael_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..7a5e763
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_split_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, SplitListMichaelSet, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/set/split_michael_rcu_sht.cpp b/test/unit/set/split_michael_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..d5d8db4
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_split_michael_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, SplitListMichaelSet, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/set/test_feldman_hashset.h b/test/unit/set/test_feldman_hashset.h
new file mode 100644 (file)
index 0000000..1bfbe3a
--- /dev/null
@@ -0,0 +1,424 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TEST_FELDMAN_HASHSET_H
+#define CDSUNIT_SET_TEST_FELDMAN_HASHSET_H
+
+#include <cds_test/check_size.h>
+#include <cds_test/fixture.h>
+
+#include <cds/opt/hash.h>
+
+// forward declaration
+namespace cds { namespace container {}}
+namespace co = cds::opt;
+namespace cc = cds::container;
+
+namespace cds_test {
+
+    class feldman_hashset : public fixture
+    {
+    public:
+        static size_t const kSize = 1000;
+
+        struct stat
+        {
+            unsigned int nFindCount;
+            unsigned int nUpdateNewCount;
+            unsigned int nUpdateCount;
+
+            stat()
+            {
+                clear_stat();
+            }
+
+            void clear_stat()
+            {
+                memset( this, 0, sizeof( *this ) );
+            }
+        };
+
+        struct other_item {
+            int nKey;
+
+            explicit other_item( int k )
+                : nKey( k )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        struct int_item: public stat
+        {
+            int nKey;
+            int nVal;
+            std::string strVal;
+
+            int_item()
+                : nKey( 0 )
+                , nVal( 0 )
+            {}
+
+            explicit int_item( int k )
+                : nKey( k )
+                , nVal( k * 2 )
+            {}
+
+            template <typename Q>
+            explicit int_item( Q const& src )
+                : nKey( src.key() )
+                , nVal( 0 )
+            {}
+
+            int_item( int_item const& src )
+                : nKey( src.nKey )
+                , nVal( src.nVal )
+                , strVal( src.strVal )
+            {}
+
+            int_item( int_item&& src )
+                : nKey( src.nKey )
+                , nVal( src.nVal )
+                , strVal( std::move( src.strVal ) )
+            {}
+
+            int_item( int k, std::string&& s )
+                : nKey( k )
+                , nVal( k * 2 )
+                , strVal( std::move( s ) )
+            {}
+
+            explicit int_item( other_item const& s )
+                : nKey( s.key() )
+                , nVal( s.key() * 2 )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        struct get_hash {
+            int operator()( int_item const& i ) const
+            {
+                return i.key();
+            }
+
+            int operator()( other_item const& i ) const
+            {
+                return i.key();
+            }
+
+            int operator()( int i ) const
+            {
+                return i;
+            }
+        };
+
+        struct simple_item_counter {
+            size_t  m_nCount;
+
+            simple_item_counter()
+                : m_nCount( 0 )
+            {}
+
+            size_t operator ++()
+            {
+                return ++m_nCount;
+            }
+
+            size_t operator --()
+            {
+                return --m_nCount;
+            }
+
+            void reset()
+            {
+                m_nCount = 0;
+            }
+
+            operator size_t() const
+            {
+                return m_nCount;
+            }
+
+        };
+
+        struct cmp {
+            int operator ()( int v1, int v2 ) const
+            {
+                if ( v1 < v2 )
+                    return -1;
+                return v1 > v2 ? 1 : 0;
+            }
+        };
+
+        struct other_less {
+            template <typename Q, typename T>
+            bool operator()( Q const& lhs, T const& rhs ) const
+            {
+                return lhs.key() < rhs.key();
+            }
+        };
+
+    protected:
+        template <typename Set>
+        void test( Set& s )
+        {
+            // Precondition: set is empty
+            // Postcondition: set is empty
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+            size_t const nSetSize = kSize;
+
+            typedef typename Set::value_type value_type;
+
+            std::vector< value_type > data;
+            std::vector< size_t> indices;
+            data.reserve( kSize );
+            indices.reserve( kSize );
+            for ( size_t key = 0; key < kSize; ++key ) {
+                data.push_back( value_type( static_cast<int>(key) ) );
+                indices.push_back( key );
+            }
+            shuffle( indices.begin(), indices.end() );
+
+            // insert/find
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                ASSERT_FALSE( s.contains( i.nKey ) );
+                ASSERT_FALSE( s.find( i.nKey, []( value_type& ) {} ));
+
+                std::pair<bool, bool> updResult;
+
+                std::string str;
+                updResult = s.update( i.key(), []( value_type&, value_type * )
+                {
+                    ASSERT_TRUE( false );
+                }, false );
+                EXPECT_FALSE( updResult.first );
+                EXPECT_FALSE( updResult.second );
+
+                switch ( idx % 8 ) {
+                case 0:
+                    ASSERT_TRUE( s.insert( i ));
+                    ASSERT_FALSE( s.insert( i ));
+                    updResult = s.update( i, []( value_type& val, value_type * prev ) 
+                        {
+                            ASSERT_TRUE( prev != nullptr );
+                            EXPECT_EQ( val.key(), prev->key() );
+                        }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+                    break;
+                case 1:
+                    ASSERT_TRUE( s.insert( i.key() ));
+                    ASSERT_FALSE( s.insert( i.key() ));
+                    updResult = s.update( i.key(), []( value_type& val, value_type * prev )
+                        {
+                            ASSERT_TRUE( prev != nullptr );
+                            EXPECT_EQ( val.key(), prev->key() );
+                        }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+                    break;
+                case 2:
+                    ASSERT_TRUE( s.insert( i, []( value_type& v ) { ++v.nFindCount; } ));
+                    ASSERT_FALSE( s.insert( i, []( value_type& v ) { ++v.nFindCount; } ));
+                    ASSERT_TRUE( s.find( i.nKey, []( value_type const& v ) 
+                        {
+                            EXPECT_EQ( v.nFindCount, 1 );
+                        }));
+                    break;
+                case 3:
+                    ASSERT_TRUE( s.insert( i.key(), []( value_type& v ) { ++v.nFindCount; } ));
+                    ASSERT_FALSE( s.insert( i.key(), []( value_type& v ) { ++v.nFindCount; } ));
+                    ASSERT_TRUE( s.find( i.nKey, []( value_type const& v ) 
+                        {
+                            EXPECT_EQ( v.nFindCount, 1 );
+                        }));
+                    break;
+                case 4:
+                    updResult = s.update( i, []( value_type& v, value_type * prev )
+                        {
+                            EXPECT_TRUE( prev == nullptr );
+                            ++v.nUpdateNewCount;
+                        });
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_TRUE( updResult.second );
+
+                    updResult = s.update( i, []( value_type& v, value_type * prev )
+                        {
+                            ASSERT_TRUE( prev != nullptr );
+                            EXPECT_EQ( prev->nUpdateNewCount, 1 );
+                            EXPECT_EQ( v.key(), prev->key() );
+                            ++v.nUpdateCount;
+                        }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+
+                    ASSERT_TRUE( s.find( i.nKey, []( value_type const& v )
+                        {
+                            EXPECT_EQ( v.nUpdateCount, 1 );
+                            EXPECT_EQ( v.nUpdateNewCount, 0 );
+                        }));
+                    break;
+                case 5:
+                    updResult = s.update( i.key(), []( value_type& v, value_type * prev )
+                        {
+                            EXPECT_TRUE( prev == nullptr );
+                            ++v.nUpdateNewCount;
+                        });
+                        EXPECT_TRUE( updResult.first );
+                        EXPECT_TRUE( updResult.second );
+
+                        updResult = s.update( i.key(), []( value_type& v, value_type * prev )
+                        {
+                            ASSERT_TRUE( prev != nullptr );
+                            EXPECT_EQ( v.key(), prev->key() );
+                            EXPECT_EQ( prev->nUpdateNewCount, 1 );
+                            EXPECT_EQ( v.nUpdateNewCount, 0 );
+                            ++v.nUpdateNewCount;
+                        }, false );
+                        EXPECT_TRUE( updResult.first );
+                        EXPECT_FALSE( updResult.second );
+
+                        ASSERT_TRUE( s.find( i.key(), []( value_type const& v )
+                        {
+                            EXPECT_EQ( v.nUpdateNewCount, 1 );
+                        } ) );
+                        break;
+                case 6:
+                    ASSERT_TRUE( s.emplace( i.key() ) );
+                    ASSERT_TRUE( s.contains( i.key() ) );
+                    break;
+                case 7:
+                    str = "Hello!";
+                    ASSERT_TRUE( s.emplace( i.key(), std::move( str ) ) );
+                    EXPECT_TRUE( str.empty() );
+                    ASSERT_TRUE( s.find( i.key(), []( value_type const& v )
+                    {
+                        EXPECT_EQ( v.strVal, std::string( "Hello!" ) );
+                    } ) );
+                    break;
+                default:
+                    // forgot anything?..
+                    ASSERT_TRUE( false );
+                }
+
+                ASSERT_TRUE( s.contains( i.nKey ) );
+                ASSERT_TRUE( s.find( i.nKey, []( value_type& ) {} ) );
+            }
+
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            // erase
+            shuffle( indices.begin(), indices.end() );
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                ASSERT_TRUE( s.contains( i.nKey ) );
+                ASSERT_TRUE( s.find( i.nKey, []( value_type& v )
+                {
+                    v.nFindCount = 1;
+                } ) );
+
+                int nKey = i.key() - 1;
+                switch ( idx % 2 ) {
+                case 0:
+                    ASSERT_TRUE( s.erase( i.key() ) );
+                    ASSERT_FALSE( s.erase( i.key() ) );
+                    break;
+                case 1:
+                    ASSERT_TRUE( s.erase( i.key(), [&nKey]( value_type const& v )
+                    {
+                        EXPECT_EQ( v.nFindCount, 1 );
+                        nKey = v.key();
+                    } ) );
+                    EXPECT_EQ( i.key(), nKey );
+
+                    nKey = i.key() - 1;
+                    ASSERT_FALSE( s.erase( i.key(), [&nKey]( value_type const& v )
+                    {
+                        nKey = v.key();
+                    } ) );
+                    EXPECT_EQ( i.key(), nKey + 1 );
+                    break;
+                }
+
+                ASSERT_FALSE( s.contains( i.nKey ) );
+                ASSERT_FALSE( s.find( i.nKey, []( value_type const& ) {} ) );
+            }
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+
+            // clear
+            for ( auto& i : data ) {
+                ASSERT_TRUE( s.insert( i ) );
+            }
+
+            {
+                typename Set::stat const& statistics = s.statistics();
+                CDS_UNUSED( statistics );
+
+                std::vector< typename Set::level_statistics > lstat;
+                s.get_level_statistics( lstat );
+                EXPECT_EQ( lstat[0].node_capacity, s.head_size() );
+                for ( size_t i = 1; i < lstat.size(); ++i ) {
+                    EXPECT_EQ( lstat[i].node_capacity, s.array_node_size());
+                }
+            }
+
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            s.clear();
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            ASSERT_TRUE( s.begin() == s.end() );
+            ASSERT_TRUE( s.cbegin() == s.cend() );
+            ASSERT_TRUE( s.rbegin() == s.rend() );
+            ASSERT_TRUE( s.crbegin() == s.crend() );
+        }
+    };
+
+} // namespace cds_test
+
+#endif // CDSUNIT_SET_TEST_FELDMAN_HASHSET_H
diff --git a/test/unit/set/test_feldman_hashset_hp.h b/test/unit/set/test_feldman_hashset_hp.h
new file mode 100644 (file)
index 0000000..aa06b34
--- /dev/null
@@ -0,0 +1,149 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TEST_FELDMAN_HASHSET_HP_H
+#define CDSUNIT_SET_TEST_FELDMAN_HASHSET_HP_H
+
+#include "test_feldman_hashset.h"
+
+namespace cds_test {
+
+    class feldman_hashset_hp: public feldman_hashset
+    {
+        typedef feldman_hashset base_class;
+
+    protected:
+        template <typename Set>
+        void test( Set& s )
+        {
+            // Precondition: set is empty
+            // Postcondition: set is empty
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            base_class::test( s );
+
+            typedef typename Set::value_type value_type;
+
+            size_t const nSetSize = kSize;
+            std::vector< value_type > data;
+            std::vector< size_t> indices;
+            data.reserve( kSize );
+            indices.reserve( kSize );
+            for ( size_t key = 0; key < kSize; ++key ) {
+                data.push_back( value_type( static_cast<int>(key) ) );
+                indices.push_back( key );
+            }
+            shuffle( indices.begin(), indices.end() );
+
+            for ( auto& i : data ) {
+                ASSERT_TRUE( s.insert( i ) );
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            // iterator test
+            for ( auto it = s.begin(); it != s.end(); ++it ) {
+                it->nFindCount = it->key() * 3;
+                it.release();
+            }
+
+            for ( auto it = s.cbegin(); it != s.cend(); ++it ) {
+                EXPECT_EQ( it->nFindCount, it->key() * 3 );
+            }
+
+            // reverse iterator set
+            for ( auto it = s.rbegin(); it != s.rend(); ++it ) {
+                it->nFindCount = it->key() * 2;
+            }
+
+            for ( auto it = s.crbegin(); it != s.crend(); ++it ) {
+                EXPECT_EQ( it->nFindCount, it->key() * 2 );
+            }
+
+            typedef typename Set::guarded_ptr guarded_ptr;
+            guarded_ptr gp;
+
+            // get()
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                ASSERT_TRUE( !gp );
+
+                gp = s.get( i.key());
+                ASSERT_FALSE( !gp );
+                EXPECT_EQ( gp->key(), i.key() );
+                EXPECT_EQ( gp->nFindCount, i.key() * 2 );
+                gp->nFindCount *= 2;
+
+                gp.release();
+            }
+
+            // extract()
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                ASSERT_TRUE( !gp );
+                gp = s.extract( i.key() );
+                ASSERT_FALSE( !gp );
+                EXPECT_EQ( gp->key(), i.key() );
+                EXPECT_EQ( gp->nFindCount, i.key() * 4 );
+
+                gp = s.extract( i.key() );
+                ASSERT_TRUE( !gp );
+            }
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            // erase_at()
+            for ( auto& i : data ) {
+                ASSERT_TRUE( s.insert( i ) );
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            for ( auto it = s.begin(); it != s.end(); ++it ) {
+                int key = it->key();
+                ASSERT_TRUE( s.erase_at( it ));
+                ASSERT_TRUE( &*it != nullptr );
+                EXPECT_EQ( it->key(), key );
+                ASSERT_FALSE( s.erase_at( it ) );
+            }
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+        }
+
+    };
+} // namespace cds_test
+
+#endif // CDSUNIT_SET_TEST_FELDMAN_HASHSET_HP_H
diff --git a/test/unit/set/test_feldman_hashset_rcu.h b/test/unit/set/test_feldman_hashset_rcu.h
new file mode 100644 (file)
index 0000000..b5afb6a
--- /dev/null
@@ -0,0 +1,290 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TEST_FELDMAN_HASHSET_RCU_H
+#define CDSUNIT_SET_TEST_FELDMAN_HASHSET_RCU_H
+
+#include "test_feldman_hashset.h"
+
+#include <cds/container/feldman_hashset_rcu.h>
+
+namespace {
+
+    namespace cc = cds::container;
+
+    template <typename RCU>
+    class FeldmanHashSet: public cds_test::feldman_hashset
+    {
+        typedef cds_test::feldman_hashset base_class;
+
+    protected:
+        typedef cds::urcu::gc<RCU> rcu_type;
+
+        template <typename Set>
+        void test( Set& s )
+        {
+            // Precondition: set is empty
+            // Postcondition: set is empty
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            base_class::test( s );
+
+            typedef typename Set::value_type value_type;
+
+            size_t const nSetSize = kSize;
+            std::vector< value_type > data;
+            std::vector< size_t> indices;
+            data.reserve( kSize );
+            indices.reserve( kSize );
+            for ( size_t key = 0; key < kSize; ++key ) {
+                data.push_back( value_type( static_cast<int>(key) ) );
+                indices.push_back( key );
+            }
+            shuffle( indices.begin(), indices.end() );
+
+            for ( auto& i : data ) {
+                ASSERT_TRUE( s.insert( i ) );
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            typedef typename Set::rcu_lock rcu_lock;
+
+            // iterator test
+            {
+                rcu_lock l;
+
+                for ( auto it = s.begin(); it != s.end(); ++it ) {
+                    it->nFindCount = it->key() * 3;
+                }
+
+                for ( auto it = s.cbegin(); it != s.cend(); ++it ) {
+                    EXPECT_EQ( it->nFindCount, it->key() * 3 );
+                }
+
+                for ( auto it = s.rbegin(); it != s.rend(); ++it ) {
+                    it->nFindCount = it->key() * 2;
+                }
+
+                for ( auto it = s.crbegin(); it != s.crend(); ++it ) {
+                    EXPECT_EQ( it->nFindCount, it->key() * 2 );
+                }
+            }
+
+            typedef typename Set::exempt_ptr exempt_ptr;
+
+            // get()
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                {
+                    rcu_lock l;
+                    value_type * p = s.get( i.key());
+                    ASSERT_TRUE( p != nullptr );
+                    EXPECT_EQ( p->key(), i.key() );
+                    EXPECT_EQ( p->nFindCount, i.key() * 2 );
+                    p->nFindCount *= 2;
+                }
+            }
+
+            // extract()
+            exempt_ptr xp;
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                ASSERT_TRUE( !xp );
+                xp = s.extract( i.key() );
+                ASSERT_FALSE( !xp );
+                EXPECT_EQ( xp->key(), i.key() );
+                EXPECT_EQ( xp->nFindCount, i.key() * 4 );
+
+                xp = s.extract( i.key() );
+                ASSERT_TRUE( !xp );
+
+                {
+                    rcu_lock l;
+                    value_type * p = s.get( i.key() );
+                    EXPECT_TRUE( p == nullptr );
+                }
+            }
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+        }
+
+        void SetUp()
+        {
+            RCU::Construct();
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            RCU::Destruct();
+        }
+    };
+
+    TYPED_TEST_CASE_P( FeldmanHashSet );
+
+    TYPED_TEST_P( FeldmanHashSet, defaulted )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::int_item int_item;
+        typedef typename TestFixture::get_hash get_hash;
+
+        typedef cc::FeldmanHashSet< rcu_type, int_item,
+            typename cc::feldman_hashset::make_traits<
+                cc::feldman_hashset::hash_accessor< get_hash >
+            >::type
+        > set_type;
+
+        set_type s;
+        this->test( s );
+    }
+
+    TYPED_TEST_P( FeldmanHashSet, compare )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::int_item int_item;
+        typedef typename TestFixture::get_hash get_hash;
+
+        typedef cc::FeldmanHashSet< rcu_type, int_item,
+            typename cc::feldman_hashset::make_traits<
+                cc::feldman_hashset::hash_accessor< get_hash >
+                , cds::opt::compare<  typename TestFixture::cmp >
+            >::type
+        > set_type;
+
+        set_type s( 4, 5 );
+        this->test( s );
+    }
+
+    TYPED_TEST_P( FeldmanHashSet, less )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::int_item int_item;
+        typedef typename TestFixture::get_hash get_hash;
+
+        typedef cc::FeldmanHashSet< rcu_type, int_item,
+            typename cc::feldman_hashset::make_traits<
+                cc::feldman_hashset::hash_accessor< get_hash >
+                , cds::opt::less< std::less<int> >
+            >::type
+        > set_type;
+
+        set_type s( 3, 2 );
+        this->test( s );
+    }
+
+    TYPED_TEST_P( FeldmanHashSet, cmpmix )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::int_item int_item;
+        typedef typename TestFixture::get_hash get_hash;
+
+        typedef cc::FeldmanHashSet< rcu_type, int_item,
+            typename cc::feldman_hashset::make_traits<
+                cc::feldman_hashset::hash_accessor< get_hash >
+                , cds::opt::less< std::less<int> >
+                , cds::opt::compare<  typename TestFixture::cmp >
+            >::type
+        > set_type;
+
+        set_type s( 4, 4 );
+        this->test( s );
+    }
+
+    TYPED_TEST_P( FeldmanHashSet, item_counting )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::int_item int_item;
+        typedef typename TestFixture::get_hash get_hash;
+
+        struct set_traits: public cc::feldman_hashset::traits
+        {
+            typedef get_hash hash_accessor;
+            typedef typename TestFixture::cmp compare;
+            typedef std::less<int> less;
+            typedef typename TestFixture::simple_item_counter item_counter;
+        };
+        typedef cc::FeldmanHashSet< rcu_type, int_item, set_traits > set_type;
+
+        set_type s( 3, 3 );
+        this->test( s );
+    }
+
+    TYPED_TEST_P( FeldmanHashSet, backoff )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::int_item int_item;
+        typedef typename TestFixture::get_hash get_hash;
+
+        struct set_traits: public cc::feldman_hashset::traits
+        {
+            typedef get_hash hash_accessor;
+            typedef typename TestFixture::cmp compare;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+        };
+        typedef cc::FeldmanHashSet< rcu_type, int_item, set_traits > set_type;
+
+        set_type s( 8, 2 );
+        this->test( s );
+    }
+
+    TYPED_TEST_P( FeldmanHashSet, stat )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::int_item int_item;
+        typedef typename TestFixture::get_hash get_hash;
+
+        struct set_traits: public cc::feldman_hashset::traits
+        {
+            typedef get_hash hash_accessor;
+            typedef cds::backoff::yield back_off;
+            typedef cc::feldman_hashset::stat<> stat;
+        };
+        typedef cc::FeldmanHashSet< rcu_type, int_item, set_traits > set_type;
+
+        set_type s( 1, 1 );
+        this->test( s );
+    }
+
+    // GCC 5: All test names should be written on single line, otherwise a runtime error will be encountered like as
+    // "No test named <test_name> can be found in this test case"
+    REGISTER_TYPED_TEST_CASE_P( FeldmanHashSet,
+        defaulted, compare, less, cmpmix, item_counting, backoff, stat
+        );
+} // namespace
+
+#endif // CDSUNIT_SET_TEST_FELDMAN_HASHSET_RCU_H
diff --git a/test/unit/set/test_michael_lazy_rcu.h b/test/unit/set/test_michael_lazy_rcu.h
new file mode 100644 (file)
index 0000000..832fcaf
--- /dev/null
@@ -0,0 +1,228 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_SET_TEST_MICHAEL_LAZY_RCU_H
+#define CDSUNIT_SET_TEST_MICHAEL_LAZY_RCU_H
+
+#include "test_set_rcu.h"
+#include <cds/container/lazy_list_rcu.h>
+#include <cds/container/michael_set_rcu.h>
+
+namespace cc = cds::container;
+
+template <class RCU>
+class MichaelLazySet: public cds_test::container_set_rcu
+{
+    typedef cds_test::container_set_rcu base_class;
+public:
+    typedef cds::urcu::gc<RCU> rcu_type;
+
+protected:
+    void SetUp()
+    {
+        RCU::Construct();
+        cds::threading::Manager::attachThread();
+    }
+
+    void TearDown()
+    {
+        cds::threading::Manager::detachThread();
+        RCU::Destruct();
+    }
+};
+
+TYPED_TEST_CASE_P( MichaelLazySet );
+
+TYPED_TEST_P( MichaelLazySet, compare )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+
+    typedef cc::LazyList< rcu_type, int_item,
+        typename cc::lazy_list::make_traits<
+            cds::opt::compare< typename TestFixture::cmp >
+        >::type
+    > list_type;
+
+    typedef cc::MichaelHashSet< rcu_type, list_type, 
+        typename cc::michael_set::make_traits<
+            cds::opt::hash< typename TestFixture::hash_int >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( MichaelLazySet, less )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+
+    typedef cc::LazyList< rcu_type, int_item,
+        typename cc::lazy_list::make_traits<
+            cds::opt::less< typename TestFixture::less >
+        >::type
+    > list_type;
+
+    typedef cc::MichaelHashSet< rcu_type, list_type, 
+        typename cc::michael_set::make_traits<
+            cds::opt::hash< typename TestFixture::hash_int >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( MichaelLazySet, cmpmix )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+
+    struct list_traits : public cc::lazy_list::traits
+    {
+        typedef typename TestFixture::less less;
+        typedef typename TestFixture::cmp compare;
+    };
+    typedef cc::LazyList< rcu_type, int_item, list_traits > list_type;
+
+    typedef cc::MichaelHashSet< rcu_type, list_type,
+        typename cc::michael_set::make_traits<
+            cds::opt::hash< typename TestFixture::hash_int >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( MichaelLazySet, item_counting )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+
+    struct list_traits : public cc::lazy_list::traits
+    {
+        typedef typename TestFixture::cmp compare;
+    };
+    typedef cc::LazyList< rcu_type, int_item, list_traits > list_type;
+
+    struct set_traits: public cc::michael_set::traits
+    {
+        typedef typename TestFixture::hash_int hash;
+        typedef typename TestFixture::simple_item_counter item_counter;
+    };
+    typedef cc::MichaelHashSet< rcu_type, list_type, set_traits >set_type;
+
+    set_type s( TestFixture::kSize, 3 );
+    this->test( s );
+}
+
+TYPED_TEST_P( MichaelLazySet, backoff )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+
+    struct list_traits : public cc::lazy_list::traits
+    {
+        typedef typename TestFixture::cmp compare;
+        typedef cds::backoff::exponential<cds::backoff::pause, cds::backoff::yield> back_off;
+    };
+    typedef cc::LazyList< rcu_type, int_item, list_traits > list_type;
+
+    struct set_traits : public cc::michael_set::traits
+    {
+        typedef typename TestFixture::hash_int hash;
+        typedef cds::atomicity::item_counter item_counter;
+    };
+    typedef cc::MichaelHashSet< rcu_type, list_type, set_traits >set_type;
+
+    set_type s( TestFixture::kSize, 4 );
+    this->test( s );
+}
+
+TYPED_TEST_P( MichaelLazySet, seq_cst )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+
+    struct list_traits : public cc::lazy_list::traits
+    {
+        typedef typename TestFixture::less less;
+        typedef cds::backoff::pause back_off;
+        typedef cds::opt::v::sequential_consistent memory_model;
+    };
+    typedef cc::LazyList< rcu_type, int_item, list_traits > list_type;
+
+    struct set_traits : public cc::michael_set::traits
+    {
+        typedef typename TestFixture::hash_int hash;
+        typedef cds::atomicity::item_counter item_counter;
+    };
+    typedef cc::MichaelHashSet< rcu_type, list_type, set_traits >set_type;
+
+    set_type s( TestFixture::kSize, 4 );
+    this->test( s );
+}
+
+TYPED_TEST_P( MichaelLazySet, mutex )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+
+    struct list_traits : public cc::lazy_list::traits
+    {
+        typedef typename TestFixture::less less;
+        typedef cds::backoff::pause back_off;
+        typedef std::mutex lock_type;
+    };
+    typedef cc::LazyList< rcu_type, int_item, list_traits > list_type;
+
+    struct set_traits : public cc::michael_set::traits
+    {
+        typedef typename TestFixture::hash_int hash;
+        typedef cds::atomicity::item_counter item_counter;
+    };
+    typedef cc::MichaelHashSet< rcu_type, list_type, set_traits >set_type;
+
+    set_type s( TestFixture::kSize, 4 );
+    this->test( s );
+}
+
+
+// GCC 5: All test names should be written on single line, otherwise a runtime error will be encountered like as
+// "No test named <test_name> can be found in this test case"
+REGISTER_TYPED_TEST_CASE_P( MichaelLazySet,
+    compare, less, cmpmix, item_counting, backoff, seq_cst, mutex
+);
+
+
+#endif // CDSUNIT_SET_TEST_INTRUSIVE_MICHAEL_LAZY_RCU_H
\ No newline at end of file
diff --git a/test/unit/set/test_michael_michael_rcu.h b/test/unit/set/test_michael_michael_rcu.h
new file mode 100644 (file)
index 0000000..99f75ee
--- /dev/null
@@ -0,0 +1,204 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_SET_TEST_MICHAEL_MICHAEL_RCU_H
+#define CDSUNIT_SET_TEST_MICHAEL_MICHAEL_RCU_H
+
+#include "test_set_rcu.h"
+#include <cds/container/michael_list_rcu.h>
+#include <cds/container/michael_set_rcu.h>
+
+namespace cc = cds::container;
+
+template <class RCU>
+class MichaelSet: public cds_test::container_set_rcu
+{
+    typedef cds_test::container_set_rcu base_class;
+public:
+    typedef cds::urcu::gc<RCU> rcu_type;
+
+protected:
+    void SetUp()
+    {
+        RCU::Construct();
+        cds::threading::Manager::attachThread();
+    }
+
+    void TearDown()
+    {
+        cds::threading::Manager::detachThread();
+        RCU::Destruct();
+    }
+};
+
+TYPED_TEST_CASE_P( MichaelSet );
+
+TYPED_TEST_P( MichaelSet, compare )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+
+    typedef cc::MichaelList< rcu_type, int_item,
+        typename cc::michael_list::make_traits<
+            cds::opt::compare< typename TestFixture::cmp >
+        >::type
+    > list_type;
+
+    typedef cc::MichaelHashSet< rcu_type, list_type, 
+        typename cc::michael_set::make_traits<
+            cds::opt::hash< typename TestFixture::hash_int >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( MichaelSet, less )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+
+    typedef cc::MichaelList< rcu_type, int_item,
+        typename cc::michael_list::make_traits<
+            cds::opt::less< typename TestFixture::less >
+        >::type
+    > list_type;
+
+    typedef cc::MichaelHashSet< rcu_type, list_type, 
+        typename cc::michael_set::make_traits<
+            cds::opt::hash< typename TestFixture::hash_int >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( MichaelSet, cmpmix )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+
+    struct list_traits : public cc::michael_list::traits
+    {
+        typedef typename TestFixture::less less;
+        typedef typename TestFixture::cmp compare;
+    };
+    typedef cc::MichaelList< rcu_type, int_item, list_traits > list_type;
+
+    typedef cc::MichaelHashSet< rcu_type, list_type,
+        typename cc::michael_set::make_traits<
+            cds::opt::hash< typename TestFixture::hash_int >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( MichaelSet, item_counting )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+
+    struct list_traits : public cc::michael_list::traits
+    {
+        typedef typename TestFixture::cmp compare;
+    };
+    typedef cc::MichaelList< rcu_type, int_item, list_traits > list_type;
+
+    struct set_traits: public cc::michael_set::traits
+    {
+        typedef typename TestFixture::hash_int hash;
+        typedef typename TestFixture::simple_item_counter item_counter;
+    };
+    typedef cc::MichaelHashSet< rcu_type, list_type, set_traits >set_type;
+
+    set_type s( TestFixture::kSize, 3 );
+    this->test( s );
+}
+
+TYPED_TEST_P( MichaelSet, backoff )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+
+    struct list_traits : public cc::michael_list::traits
+    {
+        typedef typename TestFixture::cmp compare;
+        typedef cds::backoff::exponential<cds::backoff::pause, cds::backoff::yield> back_off;
+    };
+    typedef cc::MichaelList< rcu_type, int_item, list_traits > list_type;
+
+    struct set_traits : public cc::michael_set::traits
+    {
+        typedef typename TestFixture::hash_int hash;
+        typedef cds::atomicity::item_counter item_counter;
+    };
+    typedef cc::MichaelHashSet< rcu_type, list_type, set_traits >set_type;
+
+    set_type s( TestFixture::kSize, 4 );
+    this->test( s );
+}
+
+TYPED_TEST_P( MichaelSet, seq_cst )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+
+    struct list_traits : public cc::michael_list::traits
+    {
+        typedef typename TestFixture::less less;
+        typedef cds::backoff::pause back_off;
+        typedef cds::opt::v::sequential_consistent memory_model;
+    };
+    typedef cc::MichaelList< rcu_type, int_item, list_traits > list_type;
+
+    struct set_traits : public cc::michael_set::traits
+    {
+        typedef typename TestFixture::hash_int hash;
+        typedef cds::atomicity::item_counter item_counter;
+    };
+    typedef cc::MichaelHashSet< rcu_type, list_type, set_traits >set_type;
+
+    set_type s( TestFixture::kSize, 4 );
+    this->test( s );
+}
+
+
+// GCC 5: All test names should be written on single line, otherwise a runtime error will be encountered like as
+// "No test named <test_name> can be found in this test case"
+REGISTER_TYPED_TEST_CASE_P( MichaelSet,
+    compare, less, cmpmix, item_counting, backoff, seq_cst
+);
+
+
+#endif // CDSUNIT_SET_TEST_INTRUSIVE_MICHAEL_MICHAEL_RCU_H
\ No newline at end of file
diff --git a/test/unit/set/test_ordered_set_hp.h b/test/unit/set/test_ordered_set_hp.h
new file mode 100644 (file)
index 0000000..255e920
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TEST_ORDERED_SET_HP_H
+#define CDSUNIT_SET_TEST_ORDERED_SET_HP_H
+
+#include "test_set_hp.h"
+
+namespace cds_test {
+
+    class container_ordered_set_hp: public container_set_hp
+    {
+        typedef container_set_hp base_class;
+
+    protected:
+        template <typename Set>
+        void test( Set& s )
+        {
+            // Precondition: set is empty
+            // Postcondition: set is empty
+
+            base_class::test( s );
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            typedef typename Set::value_type value_type;
+
+            size_t const nSetSize = kSize;
+            std::vector< value_type > data;
+            std::vector< size_t> indices;
+            data.reserve( kSize );
+            indices.reserve( kSize );
+            for ( size_t key = 0; key < kSize; ++key ) {
+                data.push_back( value_type( static_cast<int>(key) ) );
+                indices.push_back( key );
+            }
+            shuffle( indices.begin(), indices.end() );
+
+            for ( auto i : indices ) {
+                ASSERT_TRUE( s.insert( data[i] ));
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            typedef typename Set::guarded_ptr guarded_ptr;
+            guarded_ptr gp;
+
+            // extract_min
+            size_t nCount = 0;
+            int nKey = -1;
+            while ( !s.empty() ) {
+                gp = s.extract_min();
+                ASSERT_FALSE( !gp );
+                EXPECT_EQ( nKey + 1, gp->key());
+                ++nCount;
+                nKey = gp->key();
+            }
+            gp.release();
+            EXPECT_EQ( nCount, nSetSize );
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            // extract_max
+            for ( auto i : indices ) {
+                ASSERT_TRUE( s.insert( data[i] ) );
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            nCount = 0;
+            nKey = nSetSize;
+            while ( !s.empty() ) {
+                gp = s.extract_max();
+                ASSERT_FALSE( !gp );
+                EXPECT_EQ( nKey - 1, gp->key());
+                ++nCount;
+                nKey = gp->key();
+            }
+            gp.release();
+            EXPECT_EQ( nCount, nSetSize );
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+        }
+    };
+} // namespace cds_test
+
+#endif // CDSUNIT_SET_TEST_ORDERED_SET_HP_H
diff --git a/test/unit/set/test_set.h b/test/unit/set/test_set.h
new file mode 100644 (file)
index 0000000..d3a7a90
--- /dev/null
@@ -0,0 +1,507 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TEST_SET_H
+#define CDSUNIT_SET_TEST_SET_H
+
+#include <cds_test/check_size.h>
+#include <cds_test/fixture.h>
+
+#include <cds/opt/hash.h>
+#include <functional>   // ref
+
+// forward declaration
+namespace cds { namespace container {}}
+
+namespace cds_test {
+    namespace co = cds::opt;
+
+    class container_set : public fixture
+    {
+    public:
+        static size_t const kSize = 1000;
+
+        struct stat
+        {
+            unsigned int nFindCount;
+            unsigned int nUpdateNewCount;
+            unsigned int nUpdateCount;
+            mutable unsigned int nEraseCount;
+
+            stat()
+            {
+                clear_stat();
+            }
+
+            void clear_stat()
+            {
+                memset( this, 0, sizeof( *this ) );
+            }
+        };
+
+        struct other_item {
+            int nKey;
+
+            explicit other_item( int k )
+                : nKey( k )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        struct int_item: public stat
+        {
+            int nKey;
+            int nVal;
+            std::string strVal;
+
+            int_item()
+                : nKey( 0 )
+                , nVal( 0 )
+            {}
+
+            explicit int_item( int k )
+                : nKey( k )
+                , nVal( k * 2 )
+            {}
+
+            template <typename Q>
+            explicit int_item( Q const& src )
+                : nKey( src.key() )
+                , nVal( 0 )
+            {}
+
+            int_item( int_item const& src )
+                : nKey( src.nKey )
+                , nVal( src.nVal )
+                , strVal( src.strVal )
+            {}
+
+            int_item( int_item&& src )
+                : nKey( src.nKey )
+                , nVal( src.nVal )
+                , strVal( std::move( src.strVal ) )
+            {}
+
+            int_item( int k, std::string&& s )
+                : nKey( k )
+                , nVal( k * 2 )
+                , strVal( std::move( s ) )
+            {}
+
+            explicit int_item( other_item const& s )
+                : nKey( s.key() )
+                , nVal( s.key() * 2 )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        struct hash_int {
+            size_t operator()( int i ) const
+            {
+                return co::v::hash<int>()(i);
+            }
+            template <typename Item>
+            size_t operator()( const Item& i ) const
+            {
+                return (*this)(i.key());
+            }
+        };
+
+        struct simple_item_counter {
+            size_t  m_nCount;
+
+            simple_item_counter()
+                : m_nCount( 0 )
+            {}
+
+            size_t operator ++()
+            {
+                return ++m_nCount;
+            }
+
+            size_t operator --()
+            {
+                return --m_nCount;
+            }
+
+            void reset()
+            {
+                m_nCount = 0;
+            }
+
+            operator size_t() const
+            {
+                return m_nCount;
+            }
+
+        };
+
+        struct less
+        {
+            bool operator ()( int_item const& v1, int_item const& v2 ) const
+            {
+                return v1.key() < v2.key();
+            }
+
+            template <typename Q>
+            bool operator ()( int_item const& v1, const Q& v2 ) const
+            {
+                return v1.key() < v2;
+            }
+
+            template <typename Q>
+            bool operator ()( const Q& v1, int_item const& v2 ) const
+            {
+                return v1 < v2.key();
+            }
+        };
+
+        struct cmp {
+            int operator ()( int_item const& v1, int_item const& v2 ) const
+            {
+                if ( v1.key() < v2.key() )
+                    return -1;
+                return v1.key() > v2.key() ? 1 : 0;
+            }
+
+            template <typename T>
+            int operator ()( T const& v1, int v2 ) const
+            {
+                if ( v1.key() < v2 )
+                    return -1;
+                return v1.key() > v2 ? 1 : 0;
+            }
+
+            template <typename T>
+            int operator ()( int v1, T const& v2 ) const
+            {
+                if ( v1 < v2.key() )
+                    return -1;
+                return v1 > v2.key() ? 1 : 0;
+            }
+        };
+
+        struct other_less {
+            template <typename Q, typename T>
+            bool operator()( Q const& lhs, T const& rhs ) const
+            {
+                return lhs.key() < rhs.key();
+            }
+        };
+
+    protected:
+        template <typename Set>
+        void test( Set& s )
+        {
+            // Precondition: set is empty
+            // Postcondition: set is empty
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+            size_t const nSetSize = kSize;
+
+            typedef typename Set::value_type value_type;
+
+            std::vector< value_type > data;
+            std::vector< size_t> indices;
+            data.reserve( kSize );
+            indices.reserve( kSize );
+            for ( size_t key = 0; key < kSize; ++key ) {
+                data.push_back( value_type( static_cast<int>(key) ) );
+                indices.push_back( key );
+            }
+            shuffle( indices.begin(), indices.end() );
+
+            // insert/find
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                ASSERT_FALSE( s.contains( i.nKey ) );
+                ASSERT_FALSE( s.contains( i ) );
+                ASSERT_FALSE( s.contains( other_item( i.key() ), other_less()));
+                ASSERT_FALSE( s.find( i.nKey, []( value_type&, int ) {} ));
+                ASSERT_FALSE( s.find( i, []( value_type&, value_type const& ) {} ));
+                ASSERT_FALSE( s.find_with( other_item( i.key()), other_less(), []( value_type&, other_item const& ) {} ));
+
+                std::pair<bool, bool> updResult;
+
+                std::string str;
+                updResult = s.update( i.key(), []( bool bNew, value_type&, int )
+                {
+                    ASSERT_TRUE( false );
+                }, false );
+                EXPECT_FALSE( updResult.first );
+                EXPECT_FALSE( updResult.second );
+
+                switch ( idx % 8 ) {
+                case 0:
+                    ASSERT_TRUE( s.insert( i ));
+                    ASSERT_FALSE( s.insert( i ));
+                    updResult = s.update( i, []( bool bNew, value_type& val, value_type const& arg) 
+                        {
+                            EXPECT_FALSE( bNew );
+                            EXPECT_EQ( val.key(), arg.key() );
+                        }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+                    break;
+                case 1:
+                    ASSERT_TRUE( s.insert( i.key() ));
+                    ASSERT_FALSE( s.insert( i.key() ));
+                    updResult = s.update( i.key(), []( bool bNew, value_type& val, int arg) 
+                        {
+                            EXPECT_FALSE( bNew );
+                            EXPECT_EQ( val.key(), arg );
+                        }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+                    break;
+                case 2:
+                    ASSERT_TRUE( s.insert( i, []( value_type& v ) { ++v.nFindCount; } ));
+                    ASSERT_FALSE( s.insert( i, []( value_type& v ) { ++v.nFindCount; } ));
+                    ASSERT_TRUE( s.find( i.nKey, []( value_type const& v, int key ) 
+                        {
+                            EXPECT_EQ( v.key(), key );
+                            EXPECT_EQ( v.nFindCount, 1 );
+                        }));
+                    break;
+                case 3:
+                    ASSERT_TRUE( s.insert( i.key(), []( value_type& v ) { ++v.nFindCount; } ));
+                    ASSERT_FALSE( s.insert( i.key(), []( value_type& v ) { ++v.nFindCount; } ));
+                    ASSERT_TRUE( s.find( i.nKey, []( value_type const& v, int key ) 
+                        {
+                            EXPECT_EQ( v.key(), key );
+                            EXPECT_EQ( v.nFindCount, 1 );
+                        }));
+                    break;
+                case 4:
+                    updResult = s.update( i, []( bool bNew, value_type& v, value_type const& arg )
+                        {
+                            EXPECT_TRUE( bNew );
+                            EXPECT_EQ( v.key(), arg.key() );
+                            ++v.nUpdateNewCount;
+                        });
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_TRUE( updResult.second );
+
+                    updResult = s.update( i, []( bool bNew, value_type& v, value_type const& arg )
+                        {
+                            EXPECT_FALSE( bNew );
+                            EXPECT_EQ( v.key(), arg.key() );
+                            ++v.nUpdateNewCount;
+                        }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+
+                    ASSERT_TRUE( s.find( i.nKey, []( value_type const& v, int key )
+                        {
+                            EXPECT_EQ( v.key(), key );
+                            EXPECT_EQ( v.nUpdateNewCount, 2 );
+                        }));
+                    break;
+                case 5:
+                    updResult = s.update( i.key(), []( bool bNew, value_type& v, int arg )
+                        {
+                            EXPECT_TRUE( bNew );
+                            EXPECT_EQ( v.key(), arg );
+                            ++v.nUpdateNewCount;
+                        });
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_TRUE( updResult.second );
+
+                    updResult = s.update( i.key(), []( bool bNew, value_type& v, int arg )
+                        {
+                            EXPECT_FALSE( bNew );
+                            EXPECT_EQ( v.key(), arg );
+                            ++v.nUpdateNewCount;
+                        }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+
+                    ASSERT_TRUE( s.find( i, []( value_type const& v, value_type const& arg )
+                        {
+                            EXPECT_EQ( v.key(), arg.key() );
+                            EXPECT_EQ( v.nUpdateNewCount, 2 );
+                        }));
+                    break;
+                case 6:
+                    ASSERT_TRUE( s.emplace( i.key()));
+                    ASSERT_TRUE( s.find( i, []( value_type const& v, value_type const& arg )
+                        {
+                            EXPECT_EQ( v.key(), arg.key() );
+                            EXPECT_EQ( v.nVal, arg.nVal );
+                        }));
+                    break;
+                case 7:
+                    str = "Hello!";
+                    ASSERT_TRUE( s.emplace( i.key(), std::move( str )));
+                    EXPECT_TRUE( str.empty());
+                    ASSERT_TRUE( s.find( i, []( value_type const& v, value_type const& arg )
+                        {
+                            EXPECT_EQ( v.key(), arg.key() );
+                            EXPECT_EQ( v.nVal, arg.nVal );
+                            EXPECT_EQ( v.strVal, std::string( "Hello!" ));
+                        } ) );
+                    break;
+                default:
+                    // forgot anything?..
+                    ASSERT_TRUE( false );
+                }
+
+                ASSERT_TRUE( s.contains( i.nKey ) );
+                ASSERT_TRUE( s.contains( i ) );
+                ASSERT_TRUE( s.contains( other_item( i.key() ), other_less() ) );
+                ASSERT_TRUE( s.find( i.nKey, []( value_type&, int ) {} ) );
+                ASSERT_TRUE( s.find( i, []( value_type&, value_type const& ) {} ) );
+                ASSERT_TRUE( s.find_with( other_item( i.key() ), other_less(), []( value_type&, other_item const& ) {} ) );
+            }
+
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            // erase
+            shuffle( indices.begin(), indices.end() );
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                ASSERT_TRUE( s.contains( i.nKey ) );
+                ASSERT_TRUE( s.contains( i ) );
+                ASSERT_TRUE( s.contains( other_item( i.key() ), other_less() ) );
+                ASSERT_TRUE( s.find( i.nKey, []( value_type& v, int ) 
+                    { 
+                        v.nFindCount = 1;
+                    }));
+                ASSERT_TRUE( s.find( i, []( value_type& v, value_type const& ) 
+                    { 
+                        EXPECT_EQ( ++v.nFindCount, 2 );
+                    }));
+                ASSERT_TRUE( s.find_with( other_item( i.key() ), other_less(), []( value_type& v, other_item const& ) 
+                    { 
+                        EXPECT_EQ( ++v.nFindCount, 3 );
+                    }));
+
+                int nKey = i.key() - 1;
+                switch ( idx % 6 ) {
+                case 0:
+                    ASSERT_TRUE( s.erase( i.key()));
+                    ASSERT_FALSE( s.erase( i.key()));
+                    break;
+                case 1:
+                    ASSERT_TRUE( s.erase( i ));
+                    ASSERT_FALSE( s.erase( i ));
+                    break;
+                case 2:
+                    ASSERT_TRUE( s.erase_with( other_item( i.key()), other_less()));
+                    ASSERT_FALSE( s.erase_with( other_item( i.key() ), other_less() ) );
+                    break;
+                case 3:
+                    ASSERT_TRUE( s.erase( i.key(), [&nKey]( value_type const& v )
+                        {
+                            nKey = v.key();
+                        } ));
+                    EXPECT_EQ( i.key(), nKey );
+
+                    nKey = i.key() - 1;
+                    ASSERT_FALSE( s.erase( i.key(), [&nKey]( value_type const& v )
+                        {
+                            nKey = v.key();
+                        } ));
+                    EXPECT_EQ( i.key(), nKey + 1 );
+                    break;
+                case 4:
+                    ASSERT_TRUE( s.erase( i, [&nKey]( value_type const& v )
+                        {
+                            nKey = v.key();
+                        } ));
+                    EXPECT_EQ( i.key(), nKey );
+
+                    nKey = i.key() - 1;
+                    ASSERT_FALSE( s.erase( i, [&nKey]( value_type const& v )
+                        {
+                            nKey = v.key();
+                        } ));
+                    EXPECT_EQ( i.key(), nKey + 1 );
+                    break;
+                case 5:
+                    ASSERT_TRUE( s.erase_with( other_item( i.key()), other_less(), [&nKey]( value_type const& v )
+                        {
+                            nKey = v.key();
+                        } ));
+                    EXPECT_EQ( i.key(), nKey );
+
+                    nKey = i.key() - 1;
+                    ASSERT_FALSE( s.erase_with( other_item( i.key()), other_less(), [&nKey]( value_type const& v )
+                        {
+                            nKey = v.key();
+                        } ));
+                    EXPECT_EQ( i.key(), nKey + 1 );
+                    break;
+                }
+
+                ASSERT_FALSE( s.contains( i.nKey ) );
+                ASSERT_FALSE( s.contains( i ) );
+                ASSERT_FALSE( s.contains( other_item( i.key() ), other_less()));
+                ASSERT_FALSE( s.find( i.nKey, []( value_type&, int ) {} ));
+                ASSERT_FALSE( s.find( i, []( value_type&, value_type const& ) {} ));
+                ASSERT_FALSE( s.find_with( other_item( i.key()), other_less(), []( value_type&, other_item const& ) {} ));
+            }
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+
+            // clear
+            for ( auto& i : data ) {
+                ASSERT_TRUE( s.insert( i ) );
+            }
+
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            s.clear();
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            ASSERT_TRUE( s.begin() == s.end() );
+            ASSERT_TRUE( s.cbegin() == s.cend() );
+        }
+    };
+
+} // namespace cds_test
+
+#endif // CDSUNIT_SET_TEST_SET_H
diff --git a/test/unit/set/test_set_hp.h b/test/unit/set/test_set_hp.h
new file mode 100644 (file)
index 0000000..dd5b351
--- /dev/null
@@ -0,0 +1,153 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TEST_SET_HP_H
+#define CDSUNIT_SET_TEST_SET_HP_H
+
+#include "test_set.h"
+
+namespace cds_test {
+
+    class container_set_hp: public container_set
+    {
+        typedef container_set base_class;
+
+    protected:
+        template <typename Set>
+        void test( Set& s )
+        {
+            // Precondition: set is empty
+            // Postcondition: set is empty
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            base_class::test( s );
+
+            typedef typename Set::value_type value_type;
+
+            size_t const nSetSize = kSize;
+            std::vector< value_type > data;
+            std::vector< size_t> indices;
+            data.reserve( kSize );
+            indices.reserve( kSize );
+            for ( size_t key = 0; key < kSize; ++key ) {
+                data.push_back( value_type( static_cast<int>(key) ) );
+                indices.push_back( key );
+            }
+            shuffle( indices.begin(), indices.end() );
+
+            for ( auto& i : data ) {
+                ASSERT_TRUE( s.insert( i ) );
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            // iterator test
+            for ( auto it = s.begin(); it != s.end(); ++it ) {
+                it->nFindCount = it->key() * 3;
+            }
+
+            for ( auto it = s.cbegin(); it != s.cend(); ++it ) {
+                EXPECT_EQ( it->nFindCount, it->key() * 3 );
+            }
+
+            typedef typename Set::guarded_ptr guarded_ptr;
+            guarded_ptr gp;
+
+            // get()
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                ASSERT_TRUE( !gp );
+                switch ( idx % 3 ) {
+                case 0:
+                    gp = s.get( i.key() );
+                    ASSERT_FALSE( !gp );
+                    break;
+                case 1:
+                    gp = s.get( i );
+                    ASSERT_FALSE( !gp );
+                    break;
+                case 2:
+                    gp = s.get_with( other_item( i.key() ), other_less() );
+                    ASSERT_FALSE( !gp );
+                }
+                EXPECT_EQ( gp->key(), i.key() );
+                EXPECT_EQ( gp->nFindCount, i.key() * 3 );
+                gp->nFindCount *= 2;
+
+                gp.release();
+            }
+
+            // extract()
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                ASSERT_TRUE( !gp );
+                switch ( idx % 3 ) {
+                case 0:
+                    gp = s.extract( i.key() );
+                    ASSERT_FALSE( !gp );
+                    break;
+                case 1:
+                    gp = s.extract( i );
+                    ASSERT_FALSE( !gp );
+                    break;
+                case 2:
+                    gp = s.extract_with( other_item( i.key() ), other_less() );
+                    ASSERT_FALSE( !gp );
+                    break;
+                }
+                EXPECT_EQ( gp->key(), i.key() );
+                EXPECT_EQ( gp->nFindCount, i.key() * 6 );
+
+                switch ( idx % 3 ) {
+                case 0:
+                    gp = s.extract( i.key() );
+                    break;
+                case 1:
+                    gp = s.extract( i );
+                    break;
+                case 2:
+                    gp = s.extract_with( other_item( i.key() ), other_less() );
+                    break;
+                }
+                ASSERT_TRUE( !gp );
+            }
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+        }
+
+    };
+} // namespace cds_test
+
+#endif // CDSUNIT_SET_TEST_SET_HP_H
diff --git a/test/unit/set/test_set_nogc.h b/test/unit/set/test_set_nogc.h
new file mode 100644 (file)
index 0000000..8fbcbdf
--- /dev/null
@@ -0,0 +1,349 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TEST_SET_NOGC_H
+#define CDSUNIT_SET_TEST_SET_NOGC_H
+
+#include <cds_test/check_size.h>
+#include <cds_test/fixture.h>
+
+#include <cds/opt/hash.h>
+
+// forward declaration
+namespace cds { namespace container {}}
+
+namespace cds_test {
+    namespace co = cds::opt;
+
+    class container_set_nogc : public fixture
+    {
+    public:
+        static size_t const kSize = 100;
+
+        struct stat
+        {
+            unsigned int nFindCount;
+            unsigned int nUpdateNewCount;
+            unsigned int nUpdateCount;
+
+            stat()
+            {
+                clear_stat();
+            }
+
+            void clear_stat()
+            {
+                memset( this, 0, sizeof( *this ) );
+            }
+        };
+
+        struct other_item {
+            int nKey;
+
+            explicit other_item( int k )
+                : nKey( k )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        struct int_item: public stat
+        {
+            int nKey;
+            int nVal;
+            std::string strVal;
+
+            int_item()
+                : nKey( 0 )
+                , nVal( 0 )
+            {}
+
+            explicit int_item( int k )
+                : nKey( k )
+                , nVal( k * 2 )
+            {}
+
+            template <typename Q>
+            explicit int_item( Q const& src )
+                : nKey( src.key() )
+                , nVal( 0 )
+            {}
+
+            int_item( int_item const& src )
+                : nKey( src.nKey )
+                , nVal( src.nVal )
+                , strVal( src.strVal )
+            {}
+
+            int_item( int_item&& src )
+                : nKey( src.nKey )
+                , nVal( src.nVal )
+                , strVal( std::move( src.strVal ) )
+            {}
+
+            int_item( int k, std::string&& s )
+                : nKey( k )
+                , nVal( k * 2 )
+                , strVal( std::move( s ) )
+            {}
+
+            explicit int_item( other_item const& s )
+                : nKey( s.key() )
+                , nVal( s.key() * 2 )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        struct hash_int {
+            size_t operator()( int i ) const
+            {
+                return co::v::hash<int>()(i);
+            }
+            template <typename Item>
+            size_t operator()( const Item& i ) const
+            {
+                return (*this)(i.key());
+            }
+        };
+
+        struct simple_item_counter {
+            size_t  m_nCount;
+
+            simple_item_counter()
+                : m_nCount( 0 )
+            {}
+
+            size_t operator ++()
+            {
+                return ++m_nCount;
+            }
+
+            size_t operator --()
+            {
+                return --m_nCount;
+            }
+
+            void reset()
+            {
+                m_nCount = 0;
+            }
+
+            operator size_t() const
+            {
+                return m_nCount;
+            }
+
+        };
+
+        struct less
+        {
+            bool operator ()( int_item const& v1, int_item const& v2 ) const
+            {
+                return v1.key() < v2.key();
+            }
+
+            template <typename Q>
+            bool operator ()( int_item const& v1, const Q& v2 ) const
+            {
+                return v1.key() < v2;
+            }
+
+            template <typename Q>
+            bool operator ()( const Q& v1, int_item const& v2 ) const
+            {
+                return v1 < v2.key();
+            }
+        };
+
+        struct cmp {
+            int operator ()( int_item const& v1, int_item const& v2 ) const
+            {
+                if ( v1.key() < v2.key() )
+                    return -1;
+                return v1.key() > v2.key() ? 1 : 0;
+            }
+
+            template <typename T>
+            int operator ()( T const& v1, int v2 ) const
+            {
+                if ( v1.key() < v2 )
+                    return -1;
+                return v1.key() > v2 ? 1 : 0;
+            }
+
+            template <typename T>
+            int operator ()( int v1, T const& v2 ) const
+            {
+                if ( v1 < v2.key() )
+                    return -1;
+                return v1 > v2.key() ? 1 : 0;
+            }
+        };
+
+        struct other_less {
+            template <typename Q, typename T>
+            bool operator()( Q const& lhs, T const& rhs ) const
+            {
+                return lhs.key() < rhs.key();
+            }
+        };
+
+    protected:
+        template <typename Set>
+        void test( Set& s )
+        {
+            // Precondition: set is empty
+            // Postcondition: set is empty
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+            size_t const nSetSize = kSize;
+
+            typedef typename Set::value_type value_type;
+
+            std::vector< value_type > data;
+            std::vector< size_t> indices;
+            data.reserve( kSize );
+            indices.reserve( kSize );
+            for ( size_t key = 0; key < kSize; ++key ) {
+                data.push_back( value_type( static_cast<int>(key) ) );
+                indices.push_back( key );
+            }
+            shuffle( indices.begin(), indices.end() );
+
+            // insert/find
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                ASSERT_FALSE( s.contains( i.nKey ) != s.end() );
+                ASSERT_FALSE( s.contains( i ) != s.end() );
+                ASSERT_FALSE( s.contains( other_item( i.key() ), other_less()) != s.end());
+
+                std::pair<typename Set::iterator, bool> updResult;
+
+                std::string str;
+                updResult = s.update( i.key(), false );
+                EXPECT_TRUE( updResult.first == s.end());
+                EXPECT_FALSE( updResult.second );
+
+                typename Set::iterator it;
+                switch ( idx % 6 ) {
+                case 0:
+                    it = s.insert( i );
+                    ASSERT_TRUE( it != s.end() );
+                    it->nFindCount = it->nKey;
+                    ASSERT_TRUE( s.insert( i ) == s.end());
+                    updResult = s.update( i, false );
+                    EXPECT_TRUE( updResult.first == it );
+                    EXPECT_FALSE( updResult.second );
+                    break;
+                case 1:
+                    it = s.insert( i.key() );
+                    ASSERT_TRUE( it != s.end());
+                    ASSERT_TRUE( s.insert( i.key() ) == s.end());
+                    it->nFindCount = it->nKey;
+                    updResult = s.update( i.key(), false );
+                    EXPECT_TRUE( updResult.first == it );
+                    EXPECT_FALSE( updResult.second );
+                    break;
+                case 2:
+                    updResult = s.update( i );
+                    EXPECT_TRUE( updResult.first != s.end());
+                    EXPECT_TRUE( updResult.second );
+                    updResult.first->nFindCount = updResult.first->nKey;
+                    break;
+                case 3:
+                    updResult = s.update( i.key());
+                    EXPECT_TRUE( updResult.first != s.end() );
+                    EXPECT_TRUE( updResult.second );
+                    updResult.first->nFindCount = updResult.first->nKey;
+                    break;
+                case 4:
+                    it = s.emplace( i.key());
+                    ASSERT_TRUE( it != s.end());
+                    it->nFindCount = it->nKey;
+                    ASSERT_FALSE( s.emplace( i.key() ) != s.end());
+                    break;
+                case 5:
+                    str = "Hello!";
+                    it = s.emplace( i.key(), std::move( str ));
+                    ASSERT_TRUE( it != s.end() );
+                    EXPECT_TRUE( str.empty());
+                    it->nFindCount = it->nKey;
+                    str = "Hello!";
+                    ASSERT_TRUE( s.emplace( i.key(), std::move( str )) == s.end());
+                    EXPECT_TRUE( str.empty() ); // yes, that's is :(
+                    break;
+                default:
+                    // forgot anything?..
+                    ASSERT_TRUE( false );
+                }
+
+                it = s.contains( i.nKey );
+                ASSERT_TRUE( it != s.end() );
+                EXPECT_EQ( it->nFindCount, it->nKey );
+                ASSERT_TRUE( s.contains( i ) != s.end() );
+                ASSERT_TRUE( s.contains( other_item( i.key() ), other_less() ) != s.end());
+            }
+
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            // iterators
+            for ( auto it = s.begin(); it != s.end(); ++it ) {
+                it->nFindCount = it->key() * 3;
+            }
+
+            for ( auto it = s.cbegin(); it != s.cend(); ++it ) {
+                EXPECT_EQ( it->nFindCount, it->key() * 3 );
+            }
+
+            // clear
+
+            s.clear();
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            ASSERT_TRUE( s.begin() == s.end() );
+            ASSERT_TRUE( s.cbegin() == s.cend() );
+        }
+    };
+
+} // namespace cds_test
+
+#endif // CDSUNIT_SET_TEST_SET_NOGC_H
diff --git a/test/unit/set/test_set_rcu.h b/test/unit/set/test_set_rcu.h
new file mode 100644 (file)
index 0000000..9f720d9
--- /dev/null
@@ -0,0 +1,199 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TEST_SET_RCU_H
+#define CDSUNIT_SET_TEST_SET_RCU_H
+
+#include "test_set.h"
+
+namespace cds_test {
+
+    class container_set_rcu: public container_set
+    {
+        typedef container_set base_class;
+
+    protected:
+        template <typename Set>
+        void test( Set& s )
+        {
+            // Precondition: set is empty
+            // Postcondition: set is empty
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            base_class::test( s );
+
+            typedef typename Set::value_type value_type;
+
+            size_t const nSetSize = kSize;
+            std::vector< value_type > data;
+            std::vector< size_t> indices;
+            data.reserve( kSize );
+            indices.reserve( kSize );
+            for ( size_t key = 0; key < kSize; ++key ) {
+                data.push_back( value_type( static_cast<int>(key) ) );
+                indices.push_back( key );
+            }
+            shuffle( indices.begin(), indices.end() );
+
+            for ( auto& i : data ) {
+                ASSERT_TRUE( s.insert( i ) );
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            // iterator test
+            for ( auto it = s.begin(); it != s.end(); ++it ) {
+                it->nFindCount = it->key() * 3;
+            }
+
+            for ( auto it = s.cbegin(); it != s.cend(); ++it ) {
+                EXPECT_EQ( it->nFindCount, it->key() * 3 );
+            }
+
+            typedef typename Set::exempt_ptr exempt_ptr;
+            typedef typename Set::raw_ptr    raw_ptr;
+            typedef typename Set::rcu_lock   rcu_lock;
+
+            // get()
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                {
+                    rcu_lock l;
+                    raw_ptr  rp{};
+                    ASSERT_TRUE( !rp );
+                    switch ( idx % 3 ) {
+                    case 0:
+                        rp = s.get( i.key() );
+                        ASSERT_FALSE( !rp );
+                        break;
+                    case 1:
+                        rp = s.get( i );
+                        ASSERT_FALSE( !rp );
+                        break;
+                    case 2:
+                        rp = s.get_with( other_item( i.key() ), other_less() );
+                        ASSERT_FALSE( !rp );
+                    }
+                    EXPECT_EQ( rp->key(), i.key() );
+                    EXPECT_EQ( rp->nFindCount, i.key() * 3 );
+                    rp->nFindCount *= 2;
+                }
+            }
+
+            // extract()
+            exempt_ptr xp;
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                ASSERT_TRUE( !xp );
+                if ( Set::c_bExtractLockExternal ) {
+                    {
+                        rcu_lock l;
+
+                        switch ( idx % 3 ) {
+                        case 0:
+                            xp = s.extract( i.key() );
+                            ASSERT_FALSE( !xp );
+                            break;
+                        case 1:
+                            xp = s.extract( i );
+                            ASSERT_FALSE( !xp );
+                            break;
+                        case 2:
+                            xp = s.extract_with( other_item( i.key() ), other_less() );
+                            ASSERT_FALSE( !xp );
+                            break;
+                        }
+                        EXPECT_EQ( xp->key(), i.key() );
+                        EXPECT_EQ( xp->nFindCount, i.key() * 6 );
+                    }
+                    xp.release();
+
+                    {
+                        rcu_lock l;
+
+                        switch ( idx % 3 ) {
+                        case 0:
+                            xp = s.extract( i.key() );
+                            break;
+                        case 1:
+                            xp = s.extract( i );
+                            break;
+                        case 2:
+                            xp = s.extract_with( other_item( i.key() ), other_less() );
+                            break;
+                        }
+                        ASSERT_TRUE( !xp );
+                    }
+                }
+                else {
+                    switch ( idx % 3 ) {
+                    case 0:
+                        xp = s.extract( i.key() );
+                        ASSERT_FALSE( !xp );
+                        break;
+                    case 1:
+                        xp = s.extract( i );
+                        ASSERT_FALSE( !xp );
+                        break;
+                    case 2:
+                        xp = s.extract_with( other_item( i.key() ), other_less() );
+                        ASSERT_FALSE( !xp );
+                        break;
+                    }
+                    EXPECT_EQ( xp->key(), i.key() );
+                    EXPECT_EQ( xp->nFindCount, i.key() * 6 );
+
+                    switch ( idx % 3 ) {
+                    case 0:
+                        xp = s.extract( i.key() );
+                        break;
+                    case 1:
+                        xp = s.extract( i );
+                        break;
+                    case 2:
+                        xp = s.extract_with( other_item( i.key() ), other_less() );
+                        break;
+                    }
+                    ASSERT_TRUE( !xp );
+                }
+            }
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+        }
+
+    };
+} // namespace cds_test
+
+#endif // CDSUNIT_SET_TEST_SET_RCU_H
diff --git a/test/unit/set/test_skiplist_rcu.h b/test/unit/set/test_skiplist_rcu.h
new file mode 100644 (file)
index 0000000..d5b3864
--- /dev/null
@@ -0,0 +1,263 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_SET_TEST_SKIPLIST_RCU_H
+#define CDSUNIT_SET_TEST_SKIPLIST_RCU_H
+
+#include "test_set_rcu.h"
+#include <cds/container/skip_list_set_rcu.h>
+
+namespace cc = cds::container;
+
+template <class RCU>
+class SkipListSet: public cds_test::container_set_rcu
+{
+    typedef cds_test::container_set_rcu base_class;
+public:
+    typedef cds::urcu::gc<RCU> rcu_type;
+
+protected:
+    template <typename Set>
+    void test( Set& s )
+    {
+        // Precondition: set is empty
+        // Postcondition: set is empty
+
+        base_class::test( s );
+
+        ASSERT_TRUE( s.empty() );
+        ASSERT_CONTAINER_SIZE( s, 0 );
+
+        typedef typename Set::value_type value_type;
+
+        size_t const nSetSize = base_class::kSize;
+        std::vector< value_type > data;
+        std::vector< size_t> indices;
+        data.reserve( nSetSize );
+        indices.reserve( nSetSize );
+        for ( size_t key = 0; key < nSetSize; ++key ) {
+            data.push_back( value_type( static_cast<int>(key) ) );
+            indices.push_back( key );
+        }
+        shuffle( indices.begin(), indices.end() );
+
+        for ( auto i : indices ) {
+            ASSERT_TRUE( s.insert( data[i] ) );
+        }
+        ASSERT_FALSE( s.empty() );
+        ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+        typedef typename Set::exempt_ptr exempt_ptr;
+        exempt_ptr xp;
+
+        // extract_min
+        size_t nCount = 0;
+        int nKey = -1;
+        while ( !s.empty() ) {
+            xp = s.extract_min();
+            ASSERT_FALSE( !xp );
+            EXPECT_EQ( nKey + 1, xp->key() );
+            ++nCount;
+            nKey = xp->key();
+        }
+        xp.release();
+        EXPECT_EQ( nCount, nSetSize );
+
+        ASSERT_TRUE( s.empty() );
+        ASSERT_CONTAINER_SIZE( s, 0 );
+
+        // extract_max
+        for ( auto i : indices ) {
+            ASSERT_TRUE( s.insert( data[i] ) );
+        }
+        ASSERT_FALSE( s.empty() );
+        ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+        nCount = 0;
+        nKey = nSetSize;
+        while ( !s.empty() ) {
+            xp = s.extract_max();
+            ASSERT_FALSE( !xp );
+            EXPECT_EQ( nKey - 1, xp->key() );
+            ++nCount;
+            nKey = xp->key();
+        }
+        xp.release();
+        EXPECT_EQ( nCount, nSetSize );
+
+        ASSERT_TRUE( s.empty() );
+        ASSERT_CONTAINER_SIZE( s, 0 );
+    }
+
+    void SetUp()
+    {
+        RCU::Construct();
+        cds::threading::Manager::attachThread();
+    }
+
+    void TearDown()
+    {
+        cds::threading::Manager::detachThread();
+        RCU::Destruct();
+    }
+};
+
+TYPED_TEST_CASE_P( SkipListSet );
+
+//TYPED_TEST_P( SkipListSet, compare )
+TYPED_TEST_P( SkipListSet, compare )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+
+    typedef cc::SkipListSet< rcu_type, int_item,
+        typename cc::skip_list::make_traits<
+            cds::opt::compare< typename TestFixture::cmp >
+        >::type
+    > set_type;
+
+    set_type s;
+    this->test( s );
+}
+
+TYPED_TEST_P( SkipListSet, less )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+
+    typedef cc::SkipListSet< rcu_type, int_item,
+        typename cc::skip_list::make_traits<
+            cds::opt::less< typename TestFixture::less >
+        >::type
+    > set_type;
+
+    set_type s;
+    this->test( s );
+}
+
+TYPED_TEST_P( SkipListSet, cmpmix )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+
+    typedef cc::SkipListSet< rcu_type, int_item,
+        typename cc::skip_list::make_traits<
+            cds::opt::less< typename TestFixture::less >
+            ,cds::opt::compare< typename TestFixture::cmp >
+        >::type
+    > set_type;
+
+    set_type s;
+    this->test( s );
+}
+
+TYPED_TEST_P( SkipListSet, item_counting )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+
+    struct set_traits: public cc::skip_list::traits
+    {
+        typedef typename TestFixture::cmp compare;
+        typedef typename TestFixture::less less;
+        typedef cds::atomicity::item_counter item_counter;
+    };
+    typedef cc::SkipListSet< rcu_type, int_item, set_traits >set_type;
+
+    set_type s;
+    this->test( s );
+}
+
+TYPED_TEST_P( SkipListSet, backoff )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+
+    struct set_traits: public cc::skip_list::traits
+    {
+        typedef typename TestFixture::cmp compare;
+        typedef typename TestFixture::less less;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::backoff::yield back_off;
+    };
+    typedef cc::SkipListSet< rcu_type, int_item, set_traits >set_type;
+
+    set_type s;
+    this->test( s );
+}
+
+TYPED_TEST_P( SkipListSet, stat )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+
+    struct set_traits: public cc::skip_list::traits
+    {
+        typedef typename TestFixture::cmp compare;
+        typedef typename TestFixture::less less;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::backoff::yield back_off;
+        typedef cc::skip_list::stat<> stat;
+    };
+    typedef cc::SkipListSet< rcu_type, int_item, set_traits >set_type;
+
+    set_type s;
+    this->test( s );
+}
+
+TYPED_TEST_P( SkipListSet, random_level_generator )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+
+    struct set_traits: public cc::skip_list::traits
+    {
+        typedef typename TestFixture::cmp compare;
+        typedef typename TestFixture::less less;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cc::skip_list::stat<> stat;
+        typedef cc::skip_list::xorshift random_level_generator;
+        typedef cds::opt::v::rcu_assert_deadlock rcu_check_deadlock;
+    };
+    typedef cc::SkipListSet< rcu_type, int_item, set_traits >set_type;
+
+    set_type s;
+    this->test( s );
+}
+
+
+// GCC 5: All this->test names should be written on single line, otherwise a runtime error will be encountered like as
+// "No this->test named <test_name> can be found in this this->test case"
+REGISTER_TYPED_TEST_CASE_P( SkipListSet,
+    compare, less, cmpmix, item_counting, backoff, stat, random_level_generator
+);
+
+
+#endif // CDSUNIT_SET_TEST_SKIPLIST_RCU_H
\ No newline at end of file
diff --git a/test/unit/set/test_split_lazy_rcu.h b/test/unit/set/test_split_lazy_rcu.h
new file mode 100644 (file)
index 0000000..9b3ebf2
--- /dev/null
@@ -0,0 +1,273 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_SET_TEST_SPLIT_LIST_LAZY_RCU_H
+#define CDSUNIT_SET_TEST_SPLIT_LIST_LAZY_RCU_H
+
+#include "test_set_rcu.h"
+#include <cds/container/lazy_list_rcu.h>
+#include <cds/container/split_list_set_rcu.h>
+
+namespace cc = cds::container;
+
+template <class RCU>
+class SplitListLazySet: public cds_test::container_set_rcu
+{
+    typedef cds_test::container_set_rcu base_class;
+public:
+    typedef cds::urcu::gc<RCU> rcu_type;
+
+protected:
+    void SetUp()
+    {
+        RCU::Construct();
+        cds::threading::Manager::attachThread();
+    }
+
+    void TearDown()
+    {
+        cds::threading::Manager::detachThread();
+        RCU::Destruct();
+    }
+};
+
+TYPED_TEST_CASE_P( SplitListLazySet );
+
+//TYPED_TEST_P( SplitListLazySet, compare )
+TYPED_TEST_P( SplitListLazySet, compare )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+    typedef typename TestFixture::hash_int hash_int;
+
+    typedef cc::SplitListSet< rcu_type, int_item, 
+        typename cc::split_list::make_traits<
+            cc::split_list::ordered_list< cc::lazy_list_tag >
+            , cds::opt::hash< hash_int >
+            , cc::split_list::ordered_list_traits< 
+                typename cc::lazy_list::make_traits<
+                    cds::opt::compare< typename TestFixture::cmp >
+                >::type
+            >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( SplitListLazySet, less )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+    typedef typename TestFixture::hash_int hash_int;
+
+    typedef cc::SplitListSet< rcu_type, int_item,
+        typename cc::split_list::make_traits<
+            cc::split_list::ordered_list< cc::lazy_list_tag >
+            , cds::opt::hash< hash_int >
+            , cc::split_list::ordered_list_traits< 
+                typename cc::lazy_list::make_traits<
+                    cds::opt::less< typename TestFixture::less >
+                >::type
+            >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 4 );
+    this->test( s );
+}
+
+TYPED_TEST_P( SplitListLazySet, cmpmix )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+    typedef typename TestFixture::hash_int hash_int;
+
+    typedef cc::SplitListSet< rcu_type, int_item,
+        typename cc::split_list::make_traits<
+            cc::split_list::ordered_list< cc::lazy_list_tag >
+            , cds::opt::hash< hash_int >
+            , cc::split_list::ordered_list_traits< 
+                typename cc::lazy_list::make_traits<
+                    cds::opt::less< typename TestFixture::less >
+                    , cds::opt::compare< typename TestFixture::cmp >
+                >::type
+            >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( SplitListLazySet, item_counting )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+    typedef typename TestFixture::hash_int hash_int;
+
+    struct set_traits: public cc::split_list::traits
+    {
+        typedef cc::lazy_list_tag ordered_list;
+        typedef hash_int hash;
+        typedef cds::atomicity::item_counter item_counter;
+
+        struct ordered_list_traits: public cc::lazy_list::traits
+        {
+            typedef typename TestFixture::cmp compare;
+            typedef typename TestFixture::less less;
+            typedef cds::backoff::empty back_off;
+        };
+    };
+    typedef cc::SplitListSet< rcu_type, int_item, set_traits > set_type;
+
+    set_type s( TestFixture::kSize, 1 );
+    this->test( s );
+}
+
+TYPED_TEST_P( SplitListLazySet, stat )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+    typedef typename TestFixture::hash_int hash_int;
+
+    struct set_traits: public cc::split_list::traits
+    {
+        typedef cc::lazy_list_tag ordered_list;
+        typedef hash_int hash;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cc::split_list::stat<> stat;
+
+        struct ordered_list_traits: public cc::lazy_list::traits
+        {
+            typedef typename TestFixture::less less;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+    };
+    typedef cc::SplitListSet< rcu_type, int_item, set_traits > set_type;
+
+    set_type s( TestFixture::kSize, 3 );
+    this->test( s );
+}
+
+TYPED_TEST_P( SplitListLazySet, back_off )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+    typedef typename TestFixture::hash_int hash_int;
+
+    struct set_traits: public cc::split_list::traits
+    {
+        typedef cc::lazy_list_tag ordered_list;
+        typedef hash_int hash;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::backoff::yield back_off;
+        typedef cds::opt::v::sequential_consistent memory_model;
+
+        struct ordered_list_traits: public cc::lazy_list::traits
+        {
+            typedef typename TestFixture::cmp compare;
+            typedef cds::backoff::pause back_off;
+        };
+    };
+    typedef cc::SplitListSet< rcu_type, int_item, set_traits > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( SplitListLazySet, mutex )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+    typedef typename TestFixture::hash_int hash_int;
+
+    struct set_traits: public cc::split_list::traits
+    {
+        typedef cc::lazy_list_tag ordered_list;
+        typedef hash_int hash;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::backoff::yield back_off;
+        typedef cds::opt::v::sequential_consistent memory_model;
+
+        struct ordered_list_traits: public cc::lazy_list::traits
+        {
+            typedef typename TestFixture::cmp compare;
+            typedef cds::backoff::pause back_off;
+            typedef std::mutex lock_type;
+        };
+    };
+    typedef cc::SplitListSet< rcu_type, int_item, set_traits > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+namespace {
+    struct set_static_traits: public cc::split_list::traits
+    {
+        static bool const dynamic_bucket_table = false;
+    };
+}
+
+TYPED_TEST_P( SplitListLazySet, static_bucket_table )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+    typedef typename TestFixture::hash_int hash_int;
+
+    struct set_traits: public set_static_traits
+    {
+        typedef cc::lazy_list_tag ordered_list;
+        typedef hash_int hash;
+        typedef cds::atomicity::item_counter item_counter;
+
+        struct ordered_list_traits: public cc::lazy_list::traits
+        {
+            typedef typename TestFixture::cmp compare;
+            typedef cds::backoff::pause back_off;
+        };
+    };
+    typedef cc::SplitListSet< rcu_type, int_item, set_traits > set_type;
+
+    set_type s( TestFixture::kSize, 4 );
+    this->test( s );
+}
+
+
+// GCC 5: All this->test names should be written on single line, otherwise a runtime error will be encountered like as
+// "No this->test named <test_name> can be found in this this->test case"
+REGISTER_TYPED_TEST_CASE_P( SplitListLazySet,
+    compare, less, cmpmix, item_counting, stat, back_off, mutex, static_bucket_table
+);
+
+
+#endif // CDSUNIT_SET_TEST_SPLIT_LIST_LAZY_RCU_H
\ No newline at end of file
diff --git a/test/unit/set/test_split_michael_rcu.h b/test/unit/set/test_split_michael_rcu.h
new file mode 100644 (file)
index 0000000..90e46b6
--- /dev/null
@@ -0,0 +1,245 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_SET_TEST_SPLIT_LIST_MICHAEL_RCU_H
+#define CDSUNIT_SET_TEST_SPLIT_LIST_MICHAEL_RCU_H
+
+#include "test_set_rcu.h"
+#include <cds/container/michael_list_rcu.h>
+#include <cds/container/split_list_set_rcu.h>
+
+namespace cc = cds::container;
+
+template <class RCU>
+class SplitListMichaelSet: public cds_test::container_set_rcu
+{
+    typedef cds_test::container_set_rcu base_class;
+public:
+    typedef cds::urcu::gc<RCU> rcu_type;
+
+protected:
+    void SetUp()
+    {
+        RCU::Construct();
+        cds::threading::Manager::attachThread();
+    }
+
+    void TearDown()
+    {
+        cds::threading::Manager::detachThread();
+        RCU::Destruct();
+    }
+};
+
+TYPED_TEST_CASE_P( SplitListMichaelSet );
+
+TYPED_TEST_P( SplitListMichaelSet, compare )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+    typedef typename TestFixture::hash_int hash_int;
+
+    typedef cc::SplitListSet< rcu_type, int_item, 
+        typename cc::split_list::make_traits<
+            cc::split_list::ordered_list< cc::michael_list_tag >
+            , cds::opt::hash< hash_int >
+            , cc::split_list::ordered_list_traits< 
+                typename cc::michael_list::make_traits<
+                    cds::opt::compare< typename TestFixture::cmp >
+                >::type
+            >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( SplitListMichaelSet, less )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+    typedef typename TestFixture::hash_int hash_int;
+
+    typedef cc::SplitListSet< rcu_type, int_item,
+        typename cc::split_list::make_traits<
+            cc::split_list::ordered_list< cc::michael_list_tag >
+            , cds::opt::hash< hash_int >
+            , cc::split_list::ordered_list_traits< 
+                typename cc::michael_list::make_traits<
+                    cds::opt::less< typename TestFixture::less >
+                >::type
+            >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+TYPED_TEST_P( SplitListMichaelSet, cmpmix )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+    typedef typename TestFixture::hash_int hash_int;
+
+    typedef cc::SplitListSet< rcu_type, int_item,
+        typename cc::split_list::make_traits<
+            cc::split_list::ordered_list< cc::michael_list_tag >
+            , cds::opt::hash< hash_int >
+            , cc::split_list::ordered_list_traits< 
+                typename cc::michael_list::make_traits<
+                    cds::opt::less< typename TestFixture::less >
+                    , cds::opt::compare< typename TestFixture::cmp >
+                >::type
+            >
+        >::type
+    > set_type;
+
+    set_type s( TestFixture::kSize, 3 );
+    this->test( s );
+}
+
+TYPED_TEST_P( SplitListMichaelSet, item_counting )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+    typedef typename TestFixture::hash_int hash_int;
+
+    struct set_traits: public cc::split_list::traits
+    {
+        typedef cc::michael_list_tag ordered_list;
+        typedef hash_int hash;
+        typedef cds::atomicity::item_counter item_counter;
+
+        struct ordered_list_traits: public cc::michael_list::traits
+        {
+            typedef typename TestFixture::cmp compare;
+            typedef typename TestFixture::less less;
+            typedef cds::backoff::empty back_off;
+        };
+    };
+    typedef cc::SplitListSet< rcu_type, int_item, set_traits > set_type;
+
+    set_type s( TestFixture::kSize, 8 );
+    this->test( s );
+}
+
+TYPED_TEST_P( SplitListMichaelSet, stat )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+    typedef typename TestFixture::hash_int hash_int;
+
+    struct set_traits: public cc::split_list::traits
+    {
+        typedef cc::michael_list_tag ordered_list;
+        typedef hash_int hash;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cc::split_list::stat<> stat;
+
+        struct ordered_list_traits: public cc::michael_list::traits
+        {
+            typedef typename TestFixture::less less;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+    };
+    typedef cc::SplitListSet< rcu_type, int_item, set_traits > set_type;
+
+    set_type s( TestFixture::kSize, 4 );
+    this->test( s );
+}
+
+TYPED_TEST_P( SplitListMichaelSet, back_off )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+    typedef typename TestFixture::hash_int hash_int;
+
+    struct set_traits: public cc::split_list::traits
+    {
+        typedef cc::michael_list_tag ordered_list;
+        typedef hash_int hash;
+        typedef cds::atomicity::item_counter item_counter;
+        typedef cds::backoff::yield back_off;
+        typedef cds::opt::v::sequential_consistent memory_model;
+
+        struct ordered_list_traits: public cc::michael_list::traits
+        {
+            typedef typename TestFixture::cmp compare;
+            typedef cds::backoff::pause back_off;
+        };
+    };
+    typedef cc::SplitListSet< rcu_type, int_item, set_traits > set_type;
+
+    set_type s( TestFixture::kSize, 2 );
+    this->test( s );
+}
+
+namespace {
+    struct set_static_traits: public cc::split_list::traits
+    {
+        static bool const dynamic_bucket_table = false;
+    };
+}
+
+TYPED_TEST_P( SplitListMichaelSet, static_bucket_table )
+{
+    typedef typename TestFixture::rcu_type rcu_type;
+    typedef typename TestFixture::int_item int_item;
+    typedef typename TestFixture::hash_int hash_int;
+
+    struct set_traits: public set_static_traits
+    {
+        typedef cc::michael_list_tag ordered_list;
+        typedef hash_int hash;
+        typedef cds::atomicity::item_counter item_counter;
+
+        struct ordered_list_traits: public cc::michael_list::traits
+        {
+            typedef typename TestFixture::cmp compare;
+            typedef cds::backoff::pause back_off;
+        };
+    };
+    typedef cc::SplitListSet< rcu_type, int_item, set_traits > set_type;
+
+    set_type s( TestFixture::kSize, 4 );
+    this->test( s );
+}
+
+
+// GCC 5: All this->test names should be written on single line, otherwise a runtime error will be encountered like as
+// "No this->test named <test_name> can be found in this this->test case"
+REGISTER_TYPED_TEST_CASE_P( SplitListMichaelSet,
+    compare, less, cmpmix, item_counting, stat, back_off, static_bucket_table
+);
+
+
+#endif // CDSUNIT_SET_TEST_SPLIT_LIST_MICHAEL_RCU_H
\ No newline at end of file
diff --git a/test/unit/stack/CMakeLists.txt b/test/unit/stack/CMakeLists.txt
new file mode 100644 (file)
index 0000000..cde5c67
--- /dev/null
@@ -0,0 +1,26 @@
+set(PACKAGE_NAME unit-stack)
+
+set(CDSGTEST_STACK_SOURCES
+    ../main.cpp
+    fcstack.cpp
+    intrusive_fcstack.cpp
+    intrusive_treiber_stack_dhp.cpp
+    intrusive_treiber_stack_hp.cpp
+    treiber_stack_dhp.cpp
+    treiber_stack_hp.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_executable(${PACKAGE_NAME} ${CDSGTEST_STACK_SOURCES})
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/unit/stack/fcstack.cpp b/test/unit/stack/fcstack.cpp
new file mode 100644 (file)
index 0000000..03c178a
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <gtest/gtest.h>
+#include <cds/container/fcstack.h>
+
+#include <vector>
+#include <list>
+
+namespace {
+    class FCStack : public ::testing::Test
+    {
+    protected:
+        template <class Stack>
+        void test()
+        {
+            typedef typename Stack::value_type  value_type;
+            Stack stack;
+            value_type v;
+
+            ASSERT_TRUE( stack.empty() );
+            ASSERT_EQ( stack.size(), 0 );
+
+            ASSERT_TRUE( stack.push( 1 ) );
+            ASSERT_TRUE( !stack.empty() );
+            ASSERT_EQ( stack.size(), 1 );
+            ASSERT_TRUE( stack.push( 2 ) );
+            ASSERT_TRUE( !stack.empty() );
+            ASSERT_EQ( stack.size(), 2 );
+            ASSERT_TRUE( stack.push( 3 ) );
+            ASSERT_TRUE( !stack.empty() );
+            ASSERT_EQ( stack.size(), 3 );
+
+            ASSERT_TRUE( stack.pop( v ) );
+            EXPECT_EQ( v, 3 );
+            ASSERT_TRUE( !stack.empty() );
+            ASSERT_EQ( stack.size(), 2 );
+            ASSERT_TRUE( stack.pop( v ) );
+            EXPECT_EQ( v, 2 );
+            ASSERT_TRUE( !stack.empty() );
+            ASSERT_EQ( stack.size(), 1 );
+            ASSERT_TRUE( stack.pop( v ) );
+            EXPECT_EQ( v, 1 );
+            ASSERT_TRUE( stack.empty() );
+            ASSERT_EQ( stack.size(), 0 );
+            v = 1000;
+            ASSERT_TRUE( !stack.pop( v ) );
+            EXPECT_EQ( v, 1000 );
+            ASSERT_TRUE( stack.empty() );
+            ASSERT_EQ( stack.size(), 0 );
+
+            ASSERT_TRUE( stack.push( 10 ) );
+            ASSERT_TRUE( stack.push( 20 ) );
+            ASSERT_TRUE( stack.push( 30 ) );
+            ASSERT_TRUE( !stack.empty() );
+            ASSERT_EQ( stack.size(), 3 );
+
+            while ( stack.pop( v ) );
+
+            ASSERT_TRUE( stack.empty() );
+            ASSERT_EQ( stack.size(), 0 );
+        }
+    };
+
+    TEST_F( FCStack, default_stack )
+    {
+        typedef cds::container::FCStack< unsigned int > stack_type;
+        test<stack_type>();
+    }
+
+    TEST_F( FCStack, deque_based )
+    {
+        typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::deque<unsigned int>>> stack_type;
+        test<stack_type>();
+    }
+
+    TEST_F( FCStack, deque_elimination )
+    {
+        struct stack_traits : public
+            cds::container::fcstack::make_traits <
+            cds::opt::enable_elimination < true >
+            > ::type
+        {};
+        typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::deque<unsigned int>>, stack_traits > stack_type;
+        test<stack_type>();
+    }
+
+    TEST_F( FCStack, vector_based )
+    {
+        typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::vector<unsigned int>>> stack_type;
+        test<stack_type>();
+    }
+
+    TEST_F( FCStack, vector_elimination )
+    {
+        typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::vector<unsigned int>>,
+            cds::container::fcstack::make_traits<
+            cds::opt::enable_elimination< true >
+            >::type
+        > stack_type;
+        test<stack_type>();
+    }
+
+    TEST_F( FCStack, list_based )
+    {
+        typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::list<unsigned int>>> stack_type;
+        test<stack_type>();
+    }
+
+    TEST_F( FCStack, list_elimination )
+    {
+        typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::list<unsigned int>>,
+            cds::container::fcstack::make_traits<
+            cds::opt::enable_elimination< true >
+            >::type
+        > stack_type;
+        test<stack_type>();
+    }
+} // namespace
diff --git a/test/unit/stack/intrusive_fcstack.cpp b/test/unit/stack/intrusive_fcstack.cpp
new file mode 100644 (file)
index 0000000..d4cce2b
--- /dev/null
@@ -0,0 +1,332 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <gtest/gtest.h>
+#include <cds/intrusive/fcstack.h>
+
+#include <boost/intrusive/list.hpp>
+
+namespace {
+    class IntrusiveFCStack : public ::testing::Test
+    {
+    protected:
+        template <typename Hook>
+        struct base_hook_item : public Hook
+        {
+            int nVal;
+            int nDisposeCount;
+
+            base_hook_item()
+                : nDisposeCount( 0 )
+            {}
+        };
+
+        template <typename Hook>
+        struct member_hook_item
+        {
+            int nVal;
+            int nDisposeCount;
+            Hook hMember;
+
+            member_hook_item()
+                : nDisposeCount( 0 )
+            {}
+        };
+
+        struct mock_disposer
+        {
+            template <typename T>
+            void operator ()( T * p )
+            {
+                ++p->nDisposeCount;
+            }
+        };
+
+        template <class Stack>
+        void test()
+        {
+            typedef typename Stack::value_type  value_type;
+            Stack stack;
+
+            ASSERT_TRUE( stack.empty() );
+
+            value_type v1, v2, v3;
+            v1.nVal = 1;
+            v2.nVal = 2;
+            v3.nVal = 3;
+            ASSERT_TRUE( stack.push( v1 ) );
+            ASSERT_TRUE( !stack.empty() );
+            ASSERT_TRUE( stack.push( v2 ) );
+            ASSERT_TRUE( !stack.empty() );
+            ASSERT_TRUE( stack.push( v3 ) );
+            ASSERT_TRUE( !stack.empty() );
+
+            value_type * pv;
+            pv = stack.pop();
+            ASSERT_TRUE( pv != nullptr );
+            ASSERT_EQ( pv->nVal, 3 );
+            ASSERT_TRUE( !stack.empty() );
+            pv = stack.pop();
+            ASSERT_TRUE( pv != nullptr );
+            ASSERT_EQ( pv->nVal, 2 );
+            ASSERT_TRUE( !stack.empty() );
+            pv = stack.pop();
+            ASSERT_TRUE( pv != nullptr );
+            ASSERT_EQ( pv->nVal, 1 );
+            ASSERT_TRUE( stack.empty() );
+            pv = stack.pop();
+            ASSERT_TRUE( pv == nullptr );
+            ASSERT_TRUE( stack.empty() );
+
+            if ( !std::is_same<typename Stack::disposer, cds::intrusive::opt::v::empty_disposer>::value ) {
+                int v1disp = v1.nDisposeCount;
+                int v2disp = v2.nDisposeCount;
+                int v3disp = v3.nDisposeCount;
+
+                ASSERT_TRUE( stack.push( v1 ));
+                ASSERT_TRUE( stack.push( v2 ));
+                ASSERT_TRUE( stack.push( v3 ));
+
+                stack.clear();
+                ASSERT_TRUE( stack.empty() );
+
+                EXPECT_EQ( v1.nDisposeCount, v1disp);
+                EXPECT_EQ( v2.nDisposeCount, v2disp);
+                EXPECT_EQ( v3.nDisposeCount, v3disp);
+
+                ASSERT_TRUE( stack.push( v1 ) );
+                ASSERT_TRUE( stack.push( v2 ) );
+                ASSERT_TRUE( stack.push( v3 ) );
+                ASSERT_TRUE( !stack.empty() );
+
+                stack.clear( true );
+                ASSERT_TRUE( stack.empty() );
+
+                EXPECT_EQ( v1.nDisposeCount, v1disp + 1 );
+                EXPECT_EQ( v2.nDisposeCount, v2disp + 1 );
+                EXPECT_EQ( v3.nDisposeCount, v3disp + 1 );
+            }
+        }
+    };
+
+    TEST_F( IntrusiveFCStack, slist )
+    {
+        typedef base_hook_item< boost::intrusive::slist_base_hook<> > value_type;
+        typedef cds::intrusive::FCStack< value_type, boost::intrusive::slist< value_type > > stack_type;
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveFCStack, slist_disposer )
+    {
+        typedef base_hook_item< boost::intrusive::slist_base_hook<> > value_type;
+        struct stack_traits : public cds::intrusive::fcstack::traits
+        {
+            typedef mock_disposer disposer;
+        };
+        typedef cds::intrusive::FCStack< value_type, boost::intrusive::slist< value_type >, stack_traits > stack_type;
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveFCStack, slist_mutex )
+    {
+        typedef base_hook_item< boost::intrusive::slist_base_hook<> > value_type;
+        struct stack_traits : public cds::intrusive::fcstack::traits
+        {
+            typedef std::mutex lock_type;
+        };
+        typedef cds::intrusive::FCStack< value_type, boost::intrusive::slist< value_type >, stack_traits > stack_type;
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveFCStack, slist_elimination )
+    {
+        typedef base_hook_item< boost::intrusive::slist_base_hook<> > value_type;
+        struct stack_traits : public
+            cds::intrusive::fcstack::make_traits <
+            cds::opt::enable_elimination < true >
+            > ::type
+        {};
+        typedef cds::intrusive::FCStack< value_type, boost::intrusive::slist< value_type >, stack_traits > stack_type;
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveFCStack, slist_elimination_disposer )
+    {
+        typedef base_hook_item< boost::intrusive::slist_base_hook<> > value_type;
+        struct stack_traits : public
+            cds::intrusive::fcstack::make_traits <
+                cds::opt::enable_elimination < true >,
+                cds::intrusive::opt::disposer< mock_disposer >
+            > ::type
+        {};
+        typedef cds::intrusive::FCStack< value_type, boost::intrusive::slist< value_type >, stack_traits > stack_type;
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveFCStack, slist_elimination_stat )
+    {
+        typedef base_hook_item< boost::intrusive::slist_base_hook<> > value_type;
+        typedef cds::intrusive::FCStack< value_type, boost::intrusive::slist< value_type >,
+            cds::intrusive::fcstack::make_traits<
+            cds::opt::enable_elimination< true >
+            , cds::opt::stat< cds::intrusive::fcstack::stat<> >
+            >::type
+        > stack_type;
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveFCStack, slist_member )
+    {
+        typedef member_hook_item< boost::intrusive::slist_member_hook<> > value_type;
+        typedef boost::intrusive::member_hook<value_type, boost::intrusive::slist_member_hook<>, &value_type::hMember> member_option;
+
+        typedef cds::intrusive::FCStack< value_type, boost::intrusive::slist< value_type, member_option > > stack_type;
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveFCStack, slist_member_disposer )
+    {
+        typedef member_hook_item< boost::intrusive::slist_member_hook<> > value_type;
+        typedef boost::intrusive::member_hook<value_type, boost::intrusive::slist_member_hook<>, &value_type::hMember> member_option;
+        struct stack_traits : public cds::intrusive::fcstack::traits
+        {
+            typedef mock_disposer disposer;
+        };
+
+        typedef cds::intrusive::FCStack< value_type, boost::intrusive::slist< value_type, member_option >, stack_traits > stack_type;
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveFCStack, slist_member_elimination )
+    {
+        typedef member_hook_item< boost::intrusive::slist_member_hook<> > value_type;
+        typedef boost::intrusive::member_hook<value_type, boost::intrusive::slist_member_hook<>, &value_type::hMember> member_option;
+
+        typedef cds::intrusive::FCStack< value_type, boost::intrusive::slist< value_type, member_option >,
+            cds::intrusive::fcstack::make_traits<
+            cds::opt::enable_elimination< true >
+            >::type
+        > stack_type;
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveFCStack, slist_member_elimination_stat )
+    {
+        typedef member_hook_item< boost::intrusive::slist_member_hook<> > value_type;
+        typedef boost::intrusive::member_hook<value_type, boost::intrusive::slist_member_hook<>, &value_type::hMember> member_option;
+
+        typedef cds::intrusive::FCStack< value_type, boost::intrusive::slist< value_type, member_option >,
+            cds::intrusive::fcstack::make_traits<
+            cds::opt::enable_elimination< true >
+            , cds::opt::stat< cds::intrusive::fcstack::stat<> >
+            >::type
+        > stack_type;
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveFCStack, list )
+    {
+        typedef base_hook_item< boost::intrusive::list_base_hook<> > value_type;
+        typedef cds::intrusive::FCStack< value_type, boost::intrusive::list< value_type > > stack_type;
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveFCStack, list_mutex )
+    {
+        typedef base_hook_item< boost::intrusive::list_base_hook<> > value_type;
+        typedef cds::intrusive::FCStack< value_type, boost::intrusive::list< value_type >,
+            cds::intrusive::fcstack::make_traits<
+            cds::opt::lock_type< std::mutex >
+            >::type
+        > stack_type;
+        test<stack_type>();
+    }
+
+
+    TEST_F( IntrusiveFCStack, list_elimination )
+    {
+        typedef base_hook_item< boost::intrusive::list_base_hook<> > value_type;
+        typedef cds::intrusive::FCStack< value_type, boost::intrusive::list< value_type >,
+            cds::intrusive::fcstack::make_traits<
+            cds::opt::enable_elimination< true >
+            >::type
+        > stack_type;
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveFCStack, list_elimination_stat )
+    {
+        typedef base_hook_item< boost::intrusive::list_base_hook<> > value_type;
+        typedef cds::intrusive::FCStack< value_type, boost::intrusive::list< value_type >,
+            cds::intrusive::fcstack::make_traits<
+            cds::opt::enable_elimination< true >
+            , cds::opt::stat< cds::intrusive::fcstack::stat<> >
+            >::type
+        > stack_type;
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveFCStack, list_member )
+    {
+        typedef member_hook_item< boost::intrusive::list_member_hook<> > value_type;
+        typedef boost::intrusive::member_hook<value_type, boost::intrusive::list_member_hook<>, &value_type::hMember> member_option;
+
+        typedef cds::intrusive::FCStack< value_type, boost::intrusive::list< value_type, member_option > > stack_type;
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveFCStack, list_member_elimination )
+    {
+        typedef member_hook_item< boost::intrusive::list_member_hook<> > value_type;
+        typedef boost::intrusive::member_hook<value_type, boost::intrusive::list_member_hook<>, &value_type::hMember> member_option;
+
+        typedef cds::intrusive::FCStack< value_type, boost::intrusive::list< value_type, member_option >,
+            cds::intrusive::fcstack::make_traits<
+            cds::opt::enable_elimination< true >
+            >::type
+        > stack_type;
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveFCStack, list_member_elimination_stat )
+    {
+        typedef member_hook_item< boost::intrusive::list_member_hook<> > value_type;
+        typedef boost::intrusive::member_hook<value_type, boost::intrusive::list_member_hook<>, &value_type::hMember> member_option;
+
+        typedef cds::intrusive::FCStack< value_type, boost::intrusive::list< value_type, member_option >,
+            cds::intrusive::fcstack::make_traits<
+            cds::opt::enable_elimination< true >
+            , cds::opt::stat< cds::intrusive::fcstack::stat<> >
+            >::type
+        > stack_type;
+        test<stack_type>();
+    }
+
+} // namespace
diff --git a/test/unit/stack/intrusive_treiber_stack_dhp.cpp b/test/unit/stack/intrusive_treiber_stack_dhp.cpp
new file mode 100644 (file)
index 0000000..7fe331d
--- /dev/null
@@ -0,0 +1,288 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "test_intrusive_treiber_stack.h"
+
+#include <cds/gc/dhp.h>
+#include <cds/intrusive/treiber_stack.h>
+
+namespace {
+
+    namespace ci = cds::intrusive;
+
+    class IntrusiveTreiberStack_DHP : public cds_test::IntrusiveTreiberStack
+    {
+        typedef cds_test::IntrusiveTreiberStack base_class;
+    protected:
+        typedef cds::gc::DHP gc_type;
+
+        void SetUp()
+        {
+            typedef cds::intrusive::TreiberStack< gc_type,
+                base_hook_item<gc_type>
+                , typename ci::treiber_stack::make_traits<
+                    ci::opt::hook<
+                        ci::treiber_stack::base_hook<
+                            ci::opt::gc<gc_type>
+                        >
+                    >
+                >::type
+            > stack_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, stack_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+
+        template <typename Stack>
+        void test()
+        {
+            Stack stack;
+            base_class::test( stack );
+        }
+
+        template <typename Stack>
+        void test_dyn( size_t elimination_size )
+        {
+            Stack stack( elimination_size );
+            base_class::test( stack );
+        }
+    };
+
+    TEST_F( IntrusiveTreiberStack_DHP, base )
+    {
+        typedef cds::intrusive::TreiberStack< gc_type,
+            base_hook_item<gc_type>
+            , typename ci::treiber_stack::make_traits<
+                ci::opt::hook<
+                    ci::treiber_stack::base_hook<
+                        ci::opt::gc<gc_type>
+                    >
+                >
+            >::type
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveTreiberStack_DHP, base_disposer )
+    {
+        struct traits:
+            ci::treiber_stack::make_traits <
+                ci::opt::hook<
+                    ci::treiber_stack::base_hook< ci::opt::gc<gc_type>>
+                >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        {};
+        typedef cds::intrusive::TreiberStack<
+            gc_type,
+            base_hook_item<gc_type>,
+            traits
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveTreiberStack_DHP, member )
+    {
+        struct traits
+            : ci::treiber_stack::make_traits <
+                ci::opt::hook<
+                    ci::treiber_stack::member_hook<
+                        offsetof( member_hook_item<gc_type>, hMember),
+                        ci::opt::gc<gc_type>
+                    >
+                >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack<
+            gc_type,
+            member_hook_item<gc_type>,
+            traits
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveTreiberStack_DHP, member_disposer )
+    {
+        struct traits
+            : ci::treiber_stack::make_traits <
+                ci::opt::hook<
+                    ci::treiber_stack::member_hook<
+                        offsetof( member_hook_item<gc_type>, hMember),
+                        ci::opt::gc<gc_type>
+                    >
+                >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        {};
+        typedef cds::intrusive::TreiberStack<
+            gc_type,
+            member_hook_item<gc_type>,
+            traits
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveTreiberStack_DHP, relaxed )
+    {
+        typedef cds::intrusive::TreiberStack< gc_type,
+            base_hook_item<gc_type>
+            , typename ci::treiber_stack::make_traits<
+                ci::opt::memory_model< ci::opt::v::relaxed_ordering >
+                ,ci::opt::hook<
+                    ci::treiber_stack::base_hook<
+                        ci::opt::gc<gc_type>
+                    >
+                >
+            >::type
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveTreiberStack_DHP, elimination_base )
+    {
+        typedef cds::intrusive::TreiberStack< gc_type,
+            base_hook_item<gc_type>
+            , typename ci::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+                ,ci::opt::hook<
+                    ci::treiber_stack::base_hook<
+                        ci::opt::gc<gc_type>
+                    >
+                >
+            >::type
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveTreiberStack_DHP, elimination_base_dynamic )
+    {
+        typedef cds::intrusive::TreiberStack< gc_type,
+            base_hook_item<gc_type>
+            , typename ci::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+                ,ci::opt::hook<
+                    ci::treiber_stack::base_hook<
+                        ci::opt::gc<gc_type>
+                    >
+                >
+                ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
+            >::type
+        > stack_type;
+
+        test_dyn<stack_type>( 2 );
+    }
+
+    TEST_F( IntrusiveTreiberStack_DHP, elimination_base_disposer )
+    {
+        typedef cds::intrusive::TreiberStack< gc_type,
+            base_hook_item<gc_type>
+            , typename ci::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+                ,ci::opt::hook<
+                    ci::treiber_stack::base_hook< ci::opt::gc<gc_type> >
+                >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveTreiberStack_DHP, elimination_member )
+    {
+        typedef cds::intrusive::TreiberStack< gc_type,
+            member_hook_item<gc_type>
+            , typename ci::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+                ,ci::opt::hook<
+                    ci::treiber_stack::member_hook<
+                        offsetof( member_hook_item<gc_type>, hMember),
+                        ci::opt::gc<gc_type>
+                    >
+                >
+            >::type
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveTreiberStack_DHP, elimination_member_dynamic )
+    {
+        typedef cds::intrusive::TreiberStack< gc_type,
+            member_hook_item<gc_type>
+            , typename ci::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+                ,ci::opt::hook<
+                    ci::treiber_stack::member_hook<
+                        offsetof( member_hook_item<gc_type>, hMember),
+                        ci::opt::gc<gc_type>
+                    >
+                >
+                ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
+            >::type
+        > stack_type;
+
+        test_dyn<stack_type>( 2 );
+    }
+
+    TEST_F( IntrusiveTreiberStack_DHP, elimination_member_disposer )
+    {
+        typedef cds::intrusive::TreiberStack< gc_type,
+            member_hook_item<gc_type>
+            , typename ci::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+                ,ci::opt::hook<
+                    ci::treiber_stack::member_hook<
+                        offsetof( member_hook_item<gc_type>, hMember),
+                        ci::opt::gc<gc_type>
+                    >
+                >
+                ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
+                , ci::opt::disposer< mock_disposer >
+            >::type
+        > stack_type;
+
+        test_dyn<stack_type>( 2 );
+    }
+
+} // namespace
+
diff --git a/test/unit/stack/intrusive_treiber_stack_hp.cpp b/test/unit/stack/intrusive_treiber_stack_hp.cpp
new file mode 100644 (file)
index 0000000..64e9859
--- /dev/null
@@ -0,0 +1,295 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "test_intrusive_treiber_stack.h"
+
+#include <cds/gc/hp.h>
+#include <cds/intrusive/treiber_stack.h>
+
+namespace {
+
+    namespace ci = cds::intrusive;
+    typedef cds::gc::HP gc_type;
+
+    class IntrusiveTreiberStack_HP : public cds_test::IntrusiveTreiberStack
+    {
+    typedef cds_test::IntrusiveTreiberStack base_class;
+
+    protected:
+        void SetUp()
+        {
+            typedef cds::intrusive::TreiberStack< gc_type, base_hook_item<gc_type>> stack_type;
+
+            cds::gc::hp::GarbageCollector::Construct( stack_type::c_nHazardPtrCount, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown() 
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+
+        template <typename Stack>
+        void test()
+        {
+            Stack stack;
+            base_class::test( stack );
+        }
+
+        template <typename Stack>
+        void test_dyn( size_t elimination_size )
+        {
+            Stack stack( elimination_size );
+            base_class::test( stack );
+        }
+    };
+
+    TEST_F( IntrusiveTreiberStack_HP, defaulted )
+    {
+        typedef cds::intrusive::TreiberStack< gc_type,
+            base_hook_item<gc_type>
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveTreiberStack_HP, base )
+    {
+        typedef cds::intrusive::TreiberStack< gc_type,
+            base_hook_item<gc_type>
+            , typename ci::treiber_stack::make_traits<
+                ci::opt::hook<
+                    ci::treiber_stack::base_hook<
+                        ci::opt::gc<gc_type>
+                    >
+                >
+            >::type
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveTreiberStack_HP, base_disposer )
+    {
+        struct traits:
+            ci::treiber_stack::make_traits <
+                ci::opt::hook<
+                    ci::treiber_stack::base_hook< ci::opt::gc<gc_type> >
+                >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        {};
+        typedef cds::intrusive::TreiberStack<
+            gc_type,
+            base_hook_item<gc_type>,
+            traits
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveTreiberStack_HP, member )
+    {
+        struct traits
+            : ci::treiber_stack::make_traits <
+                ci::opt::hook<
+                    ci::treiber_stack::member_hook<
+                        offsetof( member_hook_item<gc_type>, hMember),
+                        ci::opt::gc<gc_type>
+                    >
+                >
+            > ::type
+        {};
+        typedef cds::intrusive::TreiberStack<
+            gc_type,
+            member_hook_item<gc_type>,
+            traits
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveTreiberStack_HP, member_disposer )
+    {
+        struct traits
+            : ci::treiber_stack::make_traits <
+                ci::opt::hook<
+                    ci::treiber_stack::member_hook<
+                        offsetof( member_hook_item<gc_type>, hMember),
+                        ci::opt::gc<gc_type>
+                    >
+                >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        {};
+        typedef cds::intrusive::TreiberStack<
+            gc_type,
+            member_hook_item<gc_type>,
+            traits
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveTreiberStack_HP, relaxed )
+    {
+        typedef cds::intrusive::TreiberStack< gc_type,
+            base_hook_item<gc_type>
+            , typename ci::treiber_stack::make_traits<
+                ci::opt::memory_model< ci::opt::v::relaxed_ordering >
+            >::type
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveTreiberStack_HP, elimination )
+    {
+        typedef cds::intrusive::TreiberStack< gc_type,
+            base_hook_item<gc_type>
+            , typename ci::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+            >::type
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveTreiberStack_HP, elimination_base )
+    {
+        typedef cds::intrusive::TreiberStack< gc_type,
+            base_hook_item<gc_type>
+            , typename ci::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+                ,ci::opt::hook<
+                    ci::treiber_stack::base_hook<
+                        ci::opt::gc<gc_type>
+                    >
+                >
+            >::type
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveTreiberStack_HP, elimination_base_dynamic )
+    {
+        typedef cds::intrusive::TreiberStack< gc_type,
+            base_hook_item<gc_type>
+            , typename ci::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+                ,ci::opt::hook<
+                    ci::treiber_stack::base_hook<
+                        ci::opt::gc<gc_type>
+                    >
+                >
+                ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
+            >::type
+        > stack_type;
+
+        test_dyn<stack_type>( 2 );
+    }
+
+    TEST_F( IntrusiveTreiberStack_HP, elimination_base_disposer )
+    {
+        typedef cds::intrusive::TreiberStack< gc_type,
+            base_hook_item<gc_type>
+            , typename ci::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+                ,ci::opt::hook<
+                    ci::treiber_stack::base_hook< ci::opt::gc<gc_type> >
+                >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveTreiberStack_HP, elimination_member )
+    {
+        typedef cds::intrusive::TreiberStack< gc_type,
+            member_hook_item<gc_type>
+            , typename ci::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+                ,ci::opt::hook<
+                    ci::treiber_stack::member_hook<
+                        offsetof( member_hook_item<gc_type>, hMember),
+                        ci::opt::gc<gc_type>
+                    >
+                >
+            >::type
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( IntrusiveTreiberStack_HP, elimination_member_dynamic )
+    {
+        typedef cds::intrusive::TreiberStack< gc_type,
+            member_hook_item<gc_type>
+            , typename ci::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+                ,ci::opt::hook<
+                    ci::treiber_stack::member_hook<
+                        offsetof( member_hook_item<gc_type>, hMember),
+                        ci::opt::gc<gc_type>
+                    >
+                >
+                ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
+            >::type
+        > stack_type;
+
+        test_dyn<stack_type>( 2 );
+    }
+
+    TEST_F( IntrusiveTreiberStack_HP, elimination_member_disposer )
+    {
+        typedef cds::intrusive::TreiberStack< gc_type,
+            member_hook_item<gc_type>
+            , typename ci::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+                ,ci::opt::hook<
+                    ci::treiber_stack::member_hook<
+                        offsetof( member_hook_item<gc_type>, hMember),
+                        ci::opt::gc<gc_type>
+                    >
+                >
+                ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
+                , ci::opt::disposer< mock_disposer >
+            >::type
+        > stack_type;
+
+        test_dyn<stack_type>( 2 );
+    }
+
+} // namespace
+
diff --git a/test/unit/stack/test_intrusive_treiber_stack.h b/test/unit/stack/test_intrusive_treiber_stack.h
new file mode 100644 (file)
index 0000000..92874d4
--- /dev/null
@@ -0,0 +1,134 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef CDSUNIT_STACK_INTRUSIVE_TREIBER_STACK_H
+#define CDSUNIT_STACK_INTRUSIVE_TREIBER_STACK_H
+
+#include <gtest/gtest.h>
+#include <cds/intrusive/details/single_link_struct.h>
+
+namespace cds_test {
+
+    class IntrusiveTreiberStack : public ::testing::Test
+    {
+    protected:
+        template <typename GC>
+        struct base_hook_item : public cds::intrusive::single_link::node< GC >
+        {
+            int nVal;
+            int nDisposeCount;
+
+            base_hook_item()
+                : nDisposeCount( 0 )
+            {}
+        };
+
+        template <typename GC>
+        struct member_hook_item
+        {
+            int nVal;
+            int nDisposeCount;
+            cds::intrusive::single_link::node< GC > hMember;
+
+            member_hook_item()
+                : nDisposeCount( 0 )
+            {}
+        };
+
+        struct mock_disposer
+        {
+            template <typename T>
+            void operator ()( T * p )
+            {
+                ++p->nDisposeCount;
+            }
+        };
+
+        template <typename Stack>
+        void test( Stack& stack )
+        {
+            typedef typename Stack::value_type  value_type;
+
+            ASSERT_TRUE( stack.empty() );
+
+            value_type v1, v2, v3;
+            v1.nVal = 1;
+            v2.nVal = 2;
+            v3.nVal = 3;
+            ASSERT_TRUE( stack.push( v1 ) );
+            ASSERT_TRUE( !stack.empty() );
+            ASSERT_TRUE( stack.push( v2 ) );
+            ASSERT_TRUE( !stack.empty() );
+            ASSERT_TRUE( stack.push( v3 ) );
+            ASSERT_TRUE( !stack.empty() );
+
+            value_type * pv;
+            pv = stack.pop();
+            ASSERT_NE( pv, nullptr );
+            ASSERT_EQ( pv, &v3 );
+            ASSERT_EQ( pv->nVal, 3 );
+            ASSERT_TRUE( !stack.empty() );
+            pv = stack.pop();
+            ASSERT_NE( pv, nullptr );
+            ASSERT_EQ( pv, &v2 );
+            ASSERT_EQ( pv->nVal, 2 );
+            ASSERT_TRUE( !stack.empty() );
+            pv = stack.pop();
+            ASSERT_NE( pv, nullptr );
+            ASSERT_EQ( pv, &v1 );
+            ASSERT_EQ( pv->nVal, 1 );
+            ASSERT_TRUE( stack.empty() );
+            pv = stack.pop();
+            ASSERT_EQ( pv, nullptr );
+            ASSERT_TRUE( stack.empty() );
+
+            ASSERT_EQ( v1.nDisposeCount, 0 );
+            ASSERT_EQ( v2.nDisposeCount, 0 );
+            ASSERT_EQ( v3.nDisposeCount, 0 );
+
+            stack.push( v1 );
+            stack.push( v2 );
+            stack.push( v3 );
+
+            stack.clear();
+            ASSERT_TRUE( stack.empty() );
+
+            Stack::gc::scan();
+            if ( !std::is_same<typename Stack::disposer, cds::intrusive::opt::v::empty_disposer>::value ) {
+                ASSERT_EQ( v1.nDisposeCount, 1 );
+                ASSERT_EQ( v2.nDisposeCount, 1 );
+                ASSERT_EQ( v3.nDisposeCount, 1 );
+            }
+        }
+    };
+
+} // namespace cds_test
+
+#endif // CDSUNIT_STACK_INTRUSIVE_TREIBER_STACK_H
diff --git a/test/unit/stack/test_treiber_stack.h b/test/unit/stack/test_treiber_stack.h
new file mode 100644 (file)
index 0000000..d6d058c
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef CDSUNIT_STACK_TREIBER_STACK_H
+#define CDSUNIT_STACK_TREIBER_STACK_H
+
+#include <gtest/gtest.h>
+
+namespace cds_test {
+
+    class TreiberStack : public ::testing::Test
+    {
+    protected:
+        template <class Stack>
+        void test( Stack& stack )
+        {
+            typedef typename Stack::value_type  value_type;
+            value_type v;
+
+            ASSERT_TRUE( stack.empty() );
+
+            ASSERT_TRUE( stack.push( 1 ) );
+            ASSERT_TRUE( !stack.empty() );
+            ASSERT_TRUE( stack.push( 2 ) );
+            ASSERT_TRUE( !stack.empty() );
+            ASSERT_TRUE( stack.push( 3 ) );
+            ASSERT_TRUE( !stack.empty() );
+
+            ASSERT_TRUE( stack.pop( v ) );
+            ASSERT_EQ( v, 3 );
+            ASSERT_TRUE( !stack.empty() );
+            ASSERT_TRUE( stack.pop_with( [&v]( value_type& src ) { v = src; } ) );
+            ASSERT_EQ( v, 2 );
+            ASSERT_TRUE( !stack.empty() );
+            ASSERT_TRUE( stack.pop( v ) );
+            ASSERT_EQ( v, 1 );
+            ASSERT_TRUE( stack.empty() );
+            v = 1000;
+            ASSERT_TRUE( !stack.pop( v ) );
+            ASSERT_EQ( v, 1000 );
+            ASSERT_TRUE( stack.empty() );
+
+            ASSERT_TRUE( stack.push( 10 ) );
+            ASSERT_TRUE( stack.push( 20 ) );
+            ASSERT_TRUE( stack.push( 30 ) );
+            ASSERT_TRUE( !stack.empty() );
+
+            ASSERT_TRUE( stack.emplace( 100 ) );
+            ASSERT_TRUE( stack.pop( v ) );
+            ASSERT_EQ( v, 100 );
+
+            stack.clear();
+            ASSERT_TRUE( stack.empty() );
+
+            Stack::gc::scan();
+        }
+    };
+} // namespace cds_test
+
+#endif // CDSUNIT_STACK_TREIBER_STACK_H
diff --git a/test/unit/stack/treiber_stack_dhp.cpp b/test/unit/stack/treiber_stack_dhp.cpp
new file mode 100644 (file)
index 0000000..a2abb8c
--- /dev/null
@@ -0,0 +1,179 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "test_treiber_stack.h"
+
+#include <cds/gc/dhp.h>
+#include <cds/container/treiber_stack.h>
+
+namespace {
+
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+    class TreiberStack_DHP : public cds_test::TreiberStack
+    {
+        typedef cds_test::TreiberStack base_class;
+
+    protected:
+        void SetUp()
+        {
+            typedef cc::TreiberStack< gc_type, int > stack_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, stack_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown() 
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+
+        template <typename Stack>
+        void test()
+        {
+            Stack stack;
+            base_class::test( stack );
+        }
+
+        template <typename Stack>
+        void test_dyn( size_t elimination_size )
+        {
+            Stack stack( elimination_size );
+            base_class::test( stack );
+        }
+    };
+
+    TEST_F( TreiberStack_DHP, defaulted )
+    {
+        typedef cc::TreiberStack< gc_type, int > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( TreiberStack_DHP, backoff )
+    {
+        typedef cc::TreiberStack< gc_type, int
+            , typename cc::treiber_stack::make_traits<
+                cds::opt::back_off< cds::backoff::yield>
+            >::type
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( TreiberStack_DHP, alloc )
+    {
+        // allocator must be rebinded for real value type
+        struct foo
+        {
+            size_t arr[ 1024 * 1024 ];
+            size_t a2[1024 * 1024];
+            size_t a3[1024 * 1024];
+            size_t a4[1024 * 1024];
+        };
+
+        typedef cc::TreiberStack< gc_type, int
+            , typename cc::treiber_stack::make_traits<
+                cds::opt::back_off< cds::backoff::pause>
+                ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+                ,cds::opt::allocator< std::allocator< foo >>
+            >::type
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( TreiberStack_DHP, elimination )
+    {
+        typedef cc::TreiberStack< gc_type, int
+            , typename cc::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+            >::type
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( TreiberStack_DHP, elimination_backoff )
+    {
+        struct traits : public cc::treiber_stack::traits
+        {
+            enum {
+                enable_elimination = true
+            };
+            typedef cds::backoff::pause back_off;
+        };
+        typedef cc::TreiberStack< gc_type, int, traits > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( TreiberStack_DHP, elimination_dynamic )
+    {
+        typedef cc::TreiberStack< gc_type, int
+            , typename cc::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+                , cds::opt::buffer< cds::opt::v::dynamic_buffer<void *> >
+            >::type
+        > stack_type;
+
+        test_dyn<stack_type>( 4 );
+    }
+
+    TEST_F( TreiberStack_DHP, elimination_stat )
+    {
+        typedef cc::TreiberStack< gc_type, int
+            , typename cc::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+                , cds::opt::stat< cc::treiber_stack::stat<> >
+            >::type
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( TreiberStack_DHP, elimination_dynamic_backoff )
+    {
+        struct traits : public cc::treiber_stack::traits
+        {
+            enum {
+                enable_elimination = true
+            };
+            typedef cds::opt::v::dynamic_buffer<void *> buffer;
+            typedef cds::backoff::yield back_off;
+        };
+        typedef cc::TreiberStack< gc_type, int, traits > stack_type;
+
+        test_dyn<stack_type>( 2 );
+    }
+
+} // namespace
diff --git a/test/unit/stack/treiber_stack_hp.cpp b/test/unit/stack/treiber_stack_hp.cpp
new file mode 100644 (file)
index 0000000..1ebba3f
--- /dev/null
@@ -0,0 +1,173 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "test_treiber_stack.h"
+
+#include <cds/gc/hp.h>
+#include <cds/container/treiber_stack.h>
+
+namespace {
+
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+    class TreiberStack_HP : public cds_test::TreiberStack
+    {
+        typedef cds_test::TreiberStack base_class;
+
+    protected:
+        void SetUp()
+        {
+            typedef cc::TreiberStack< gc_type, int > stack_type;
+
+            cds::gc::hp::GarbageCollector::Construct( stack_type::c_nHazardPtrCount, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+
+        template <typename Stack>
+        void test()
+        {
+            Stack stack;
+            base_class::test( stack );
+        }
+
+        template <typename Stack>
+        void test_dyn( size_t elimination_size )
+        {
+            Stack stack( elimination_size );
+            base_class::test( stack );
+        }
+    };
+
+    TEST_F( TreiberStack_HP, defaulted )
+    {
+        typedef cc::TreiberStack< gc_type, int > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( TreiberStack_HP, backoff )
+    {
+        typedef cc::TreiberStack< gc_type, int
+            , typename cc::treiber_stack::make_traits<
+                cds::opt::back_off< cds::backoff::yield>
+            >::type
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( TreiberStack_HP, alloc )
+    {
+        // allocator must be rebinded for real value type
+        struct foo;
+
+        typedef cc::TreiberStack< gc_type, int
+            , typename cc::treiber_stack::make_traits<
+                cds::opt::back_off< cds::backoff::pause>
+                ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
+                ,cds::opt::allocator< std::allocator< foo >>
+            >::type
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( TreiberStack_HP, elimination )
+    {
+        typedef cc::TreiberStack< gc_type, int
+            , typename cc::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+            >::type
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( TreiberStack_HP, elimination_backoff )
+    {
+        struct traits : public cc::treiber_stack::traits
+        {
+            enum {
+                enable_elimination = true
+            };
+            typedef cds::backoff::pause back_off;
+        };
+        typedef cc::TreiberStack< gc_type, int, traits > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( TreiberStack_HP, elimination_dynamic )
+    {
+        typedef cc::TreiberStack< gc_type, int
+            , typename cc::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+                , cds::opt::buffer< cds::opt::v::dynamic_buffer<void *> >
+            >::type
+        > stack_type;
+
+        test_dyn<stack_type>( 4 );
+    }
+
+    TEST_F( TreiberStack_HP, elimination_stat )
+    {
+        typedef cc::TreiberStack< gc_type, int
+            , typename cc::treiber_stack::make_traits<
+                cds::opt::enable_elimination<true>
+                , cds::opt::stat< cc::treiber_stack::stat<> >
+            >::type
+        > stack_type;
+
+        test<stack_type>();
+    }
+
+    TEST_F( TreiberStack_HP, elimination_dynamic_backoff )
+    {
+        struct traits : public cc::treiber_stack::traits
+        {
+            enum {
+                enable_elimination = true
+            };
+            typedef cds::opt::v::dynamic_buffer<void *> buffer;
+            typedef cds::backoff::yield back_off;
+        };
+        typedef cc::TreiberStack< gc_type, int, traits > stack_type;
+
+        test_dyn<stack_type>( 2 );
+    }
+
+} // namespace
diff --git a/test/unit/striped-map/CMakeLists.txt b/test/unit/striped-map/CMakeLists.txt
new file mode 100644 (file)
index 0000000..6b1ddc5
--- /dev/null
@@ -0,0 +1,31 @@
+set(PACKAGE_NAME unit-striped-map)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DCDSUNIT_ENABLE_BOOST_CONTAINER")
+
+set(CDSGTEST_STRIPED_MAP_SOURCES
+    ../main.cpp
+    cuckoo_map.cpp
+    map_boost_flat_map.cpp
+    map_boost_list.cpp
+    map_boost_map.cpp
+    map_boost_slist.cpp
+    map_boost_unordered_map.cpp
+    map_std_list.cpp
+    map_std_map.cpp
+    map_std_unordered_map.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_executable(${PACKAGE_NAME} ${CDSGTEST_STRIPED_MAP_SOURCES})
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/unit/striped-map/cuckoo_map.cpp b/test/unit/striped-map/cuckoo_map.cpp
new file mode 100644 (file)
index 0000000..c623fe5
--- /dev/null
@@ -0,0 +1,517 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_map.h"
+
+#include <cds/container/cuckoo_map.h>
+
+namespace {
+    namespace cc = cds::container;
+
+    class CuckooMap : public cds_test::container_map
+    {
+    protected:
+        typedef cds_test::container_map base_class;
+
+        template <typename Set>
+        void test( Set& m )
+        {
+            // Precondition: set is empty
+            // Postcondition: set is empty
+
+            base_class::test_< Set::c_isSorted>( m );
+        }
+
+        //void SetUp()
+        //{}
+
+        //void TearDown()
+        //{}
+    };
+
+    struct store_hash_traits: public cc::cuckoo::traits
+    {
+        static bool const store_hash = true;
+    };
+
+
+//************************************************************
+// striped set
+
+    TEST_F( CuckooMap, striped_list_unordered )
+    {
+        struct map_traits: public cc::cuckoo::traits
+        {
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to equal_to;
+            typedef cc::cuckoo::list probeset_type;
+        };
+        typedef cc::CuckooMap< key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( CuckooMap, striped_vector_unordered )
+    {
+        struct map_traits: public cc::cuckoo::traits
+        {
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to equal_to;
+            typedef cc::cuckoo::vector<4> probeset_type;
+        };
+        typedef cc::CuckooMap< key_type, value_type, map_traits > map_type;
+
+        map_type m( 32, 4 );
+        test( m );
+    }
+
+    TEST_F( CuckooMap, striped_list_ordered_cmp )
+    {
+        typedef cc::CuckooMap< key_type, value_type
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
+            >::type
+        > map_type;
+
+        map_type m( 32, 6, 4 );
+        test( m );
+    }
+
+    TEST_F( CuckooMap, striped_vector_ordered_cmp )
+    {
+        typedef cc::CuckooMap< key_type, value_type
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<8>>
+            >::type
+        > map_type;
+
+        typename map_type::hash_tuple_type ht;
+        map_type m( ht );
+        test( m );
+    }
+
+    TEST_F( CuckooMap, striped_list_ordered_less )
+    {
+        typedef cc::CuckooMap< key_type, value_type
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
+            >::type
+        > map_type;
+
+        typename map_type::hash_tuple_type ht;
+        map_type m( 32, 6, 4, ht );
+        test( m );
+    }
+
+    TEST_F( CuckooMap, striped_vector_ordered_less )
+    {
+        typedef cc::CuckooMap< key_type, value_type
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<6>>
+            >::type
+        > map_type;
+
+        typename map_type::hash_tuple_type ht;
+        map_type m( std::move( ht ) );
+        test( m );
+    }
+
+    TEST_F( CuckooMap, striped_list_ordered_cmpmix )
+    {
+        typedef cc::CuckooMap< key_type, value_type
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
+            >::type
+        > map_type;
+
+        typename map_type::hash_tuple_type ht;
+        map_type m( 32, 6, 0, std::move( ht ) );
+        test( m );
+    }
+
+    TEST_F( CuckooMap, striped_vector_ordered_cmpmix )
+    {
+        typedef cc::CuckooMap< key_type, value_type
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<6>>
+            >::type
+        > map_type;
+
+        typename map_type::hash_tuple_type ht;
+        map_type m( std::move( ht ) );
+        test( m );
+    }
+
+    TEST_F( CuckooMap, striped_list_ordered_stat )
+    {
+        typedef cc::CuckooMap< key_type, value_type
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cds::opt::stat< cc::cuckoo::stat >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
+            >::type
+        > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( CuckooMap, striped_vector_ordered_stat )
+    {
+        typedef cc::CuckooMap< key_type, value_type
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cds::opt::stat< cc::cuckoo::stat >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<8>>
+            >::type
+        > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( CuckooMap, striped_list_unordered_storehash )
+    {
+        struct map_traits: public store_hash_traits
+        {
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to equal_to;
+            typedef cc::cuckoo::list     probeset_type;
+            typedef cc::cuckoo::stat     stat;
+        };
+        typedef cc::CuckooMap< key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( CuckooMap, striped_vector_unordered_storehash )
+    {
+        struct map_traits: public store_hash_traits
+        {
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to    equal_to;
+            typedef cc::cuckoo::stat        stat;
+            typedef cc::cuckoo::vector<4>   probeset_type;
+        };
+        typedef cc::CuckooMap< key_type, value_type, map_traits > map_type;
+
+        map_type m( 32, 4 );
+        test( m );
+    }
+
+    TEST_F( CuckooMap, striped_list_ordered_storehash )
+    {
+        typedef cc::CuckooMap< key_type, value_type
+            ,cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
+                ,cc::cuckoo::store_hash< true >
+            >::type
+        > map_type; 
+
+        typename map_type::hash_tuple_type ht;
+        map_type m( 32, 6, 0, std::move( ht ));
+        test( m );
+    }
+
+    TEST_F( CuckooMap, striped_vector_ordered_storehash )
+    {
+        typedef cc::CuckooMap< key_type, value_type
+            ,cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<6>>
+                ,cc::cuckoo::store_hash< true >
+            >::type
+        > map_type; 
+
+        typename map_type::hash_tuple_type ht;
+        map_type m( std::move( ht ));
+        test( m );
+    }
+
+
+//************************************************************
+// refinable set
+
+    TEST_F( CuckooMap, refinable_list_unordered )
+    {
+        struct map_traits: public cc::cuckoo::traits
+        {
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to equal_to;
+            typedef cc::cuckoo::list probeset_type;
+            typedef cc::cuckoo::refinable<> mutex_policy;
+        };
+        typedef cc::CuckooMap< key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( CuckooMap, refinable_vector_unordered )
+    {
+        struct map_traits: public cc::cuckoo::traits
+        {
+            typedef cc::cuckoo::refinable<> mutex_policy;
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to equal_to;
+            typedef cc::cuckoo::vector<4> probeset_type;
+        };
+        typedef cc::CuckooMap< key_type, value_type, map_traits > map_type;
+
+        map_type m( 32, 4 );
+        test( m );
+    }
+
+    TEST_F( CuckooMap, refinable_list_ordered_cmp )
+    {
+        typedef cc::CuckooMap< key_type, value_type
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::mutex_policy< cc::cuckoo::refinable<>>
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
+            >::type
+        > map_type;
+
+        map_type m( 32, 6, 4 );
+        test( m );
+    }
+
+    TEST_F( CuckooMap, refinable_vector_ordered_cmp )
+    {
+        typedef cc::CuckooMap< key_type, value_type
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 >>
+                ,cds::opt::mutex_policy< cc::cuckoo::refinable<>>
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<8>>
+            >::type
+        > map_type;
+
+        typename map_type::hash_tuple_type ht;
+        map_type m( ht );
+        test( m );
+    }
+
+    TEST_F( CuckooMap, refinable_list_ordered_less )
+    {
+        typedef cc::CuckooMap< key_type, value_type
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::mutex_policy< cc::cuckoo::refinable<>>
+                ,cds::opt::less< less >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
+            >::type
+        > map_type;
+
+        typename map_type::hash_tuple_type ht;
+        map_type m( 32, 6, 4, ht );
+        test( m );
+    }
+
+    TEST_F( CuckooMap, refinable_vector_ordered_less )
+    {
+        typedef cc::CuckooMap< key_type, value_type
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::mutex_policy< cc::cuckoo::refinable<>>
+                ,cds::opt::less< less >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<6>>
+            >::type
+        > map_type;
+
+        typename map_type::hash_tuple_type ht;
+        map_type m( std::move( ht ) );
+        test( m );
+    }
+
+    TEST_F( CuckooMap, refinable_list_ordered_cmpmix )
+    {
+        typedef cc::CuckooMap< key_type, value_type
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::mutex_policy< cc::cuckoo::refinable<>>
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
+            >::type
+        > map_type;
+
+        typename map_type::hash_tuple_type ht;
+        map_type m( 32, 6, 0, std::move( ht ) );
+        test( m );
+    }
+
+    TEST_F( CuckooMap, refinable_vector_ordered_cmpmix )
+    {
+        typedef cc::CuckooMap< key_type, value_type
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::mutex_policy< cc::cuckoo::refinable<>>
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<6>>
+            >::type
+        > map_type;
+
+        typename map_type::hash_tuple_type ht;
+        map_type m( std::move( ht ) );
+        test( m );
+    }
+
+    TEST_F( CuckooMap, refinable_list_ordered_stat )
+    {
+        typedef cc::CuckooMap< key_type, value_type
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::mutex_policy< cc::cuckoo::refinable<>>
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cds::opt::stat< cc::cuckoo::stat >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
+            >::type
+        > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( CuckooMap, refinable_vector_ordered_stat )
+    {
+        typedef cc::CuckooMap< key_type, value_type
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::mutex_policy< cc::cuckoo::refinable<>>
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cds::opt::stat< cc::cuckoo::stat >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<8>>
+            >::type
+        > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( CuckooMap, refinable_list_unordered_storehash )
+    {
+        struct map_traits: public store_hash_traits
+        {
+            typedef cc::cuckoo::refinable<> mutex_policy;
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to equal_to;
+            typedef cc::cuckoo::list     probeset_type;
+            typedef cc::cuckoo::stat     stat;
+        };
+        typedef cc::CuckooMap< key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( CuckooMap, refinable_vector_unordered_storehash )
+    {
+        struct map_traits: public store_hash_traits
+        {
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef cc::cuckoo::refinable<> mutex_policy;
+            typedef base_class::equal_to    equal_to;
+            typedef cc::cuckoo::stat        stat;
+            typedef cc::cuckoo::vector<4>   probeset_type;
+        };
+        typedef cc::CuckooMap< key_type, value_type, map_traits > map_type;
+
+        map_type m( 32, 4 );
+        test( m );
+    }
+
+    TEST_F( CuckooMap, refinable_list_ordered_storehash )
+    {
+        typedef cc::CuckooMap< key_type, value_type
+            ,cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::mutex_policy< cc::cuckoo::refinable<>>
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
+                ,cc::cuckoo::store_hash< true >
+            >::type
+        > map_type; 
+
+        typename map_type::hash_tuple_type ht;
+        map_type m( 32, 6, 0, std::move( ht ));
+        test( m );
+    }
+
+    TEST_F( CuckooMap, refinable_vector_ordered_storehash )
+    {
+        typedef cc::CuckooMap< key_type, value_type
+            ,cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::mutex_policy< cc::cuckoo::refinable<>>
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<6>>
+                ,cc::cuckoo::store_hash< true >
+            >::type
+        > map_type; 
+
+        typename map_type::hash_tuple_type ht;
+        map_type m( std::move( ht ));
+        test( m );
+    }
+
+
+} // namespace
diff --git a/test/unit/striped-map/map_boost_flat_map.cpp b/test/unit/striped-map/map_boost_flat_map.cpp
new file mode 100644 (file)
index 0000000..ebe1943
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
+
+#include <boost/version.hpp>
+#include <cds/details/defs.h>
+#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION < 105500
+    // Skipped; for Microsoft Visual C++ 2013 and boost::container::flat_map you should use boost version 1.55 or above" );
+#elif BOOST_VERSION >= 104800
+
+#include <cds/container/striped_map/boost_flat_map.h>
+#include "test_striped_map.h"
+
+namespace {
+    struct test_traits
+    {
+        typedef boost::container::flat_map< 
+            cds_test::striped_map_fixture::key_type,
+            cds_test::striped_map_fixture::value_type,
+            cds_test::striped_map_fixture::less
+        > container_type;
+
+        struct copy_policy {
+            typedef container_type::iterator iterator;
+
+            void operator()( container_type& m, iterator /*itInsert*/, iterator itWhat )
+            {
+                m.insert( *itWhat );
+            }
+        };
+
+        static bool const c_hasFindWith = false;
+        static bool const c_hasEraseWith = false;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostFlatMap, StripedMap, test_traits );
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostFlatMap, RefinableMap, test_traits );
+
+} // namespace
+
+#else // BOOST_VERSION < 104800
+// Skipped; for boost::container::flat_map you should use boost version 1.48 or above
+#endif  // BOOST_VERSION 
+
+#endif // #ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
diff --git a/test/unit/striped-map/map_boost_list.cpp b/test/unit/striped-map/map_boost_list.cpp
new file mode 100644 (file)
index 0000000..1eeed5e
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
+
+#include <boost/version.hpp>
+#include <cds/details/defs.h>
+#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION < 105500
+    // Skipped; for Microsoft Visual C++ 2013 and boost::container::list you should use boost version 1.55 or above" );
+#elif BOOST_VERSION >= 104800
+
+#include <cds/container/striped_map/boost_list.h> 
+#include "test_striped_map.h"
+
+namespace {
+    struct test_traits
+    {
+        typedef boost::container::list< std::pair< cds_test::striped_map_fixture::key_type const, cds_test::striped_map_fixture::value_type >> container_type;
+
+        struct copy_policy {
+            typedef container_type::iterator iterator;
+
+            void operator()( container_type& list, iterator itInsert, iterator itWhat )
+            {
+                list.insert( itInsert, *itWhat );
+            }
+        };
+
+        static bool const c_hasFindWith = true;
+        static bool const c_hasEraseWith = true;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostList, StripedMap, test_traits );
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostList, RefinableMap, test_traits );
+
+} // namespace
+
+#else // BOOST_VERSION < 104800
+// Skipped; for boost::container::list you should use boost version 1.48 or above
+#endif  // BOOST_VERSION 
+
+#endif // #ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
diff --git a/test/unit/striped-map/map_boost_map.cpp b/test/unit/striped-map/map_boost_map.cpp
new file mode 100644 (file)
index 0000000..435998a
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
+
+#include <boost/version.hpp>
+#include <cds/details/defs.h>
+#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION < 105500
+    // Skipped; for Microsoft Visual C++ 2013 and boost::container::map you should use boost version 1.55 or above" );
+#elif BOOST_VERSION >= 104800
+
+#include <cds/container/striped_map/boost_map.h> 
+#include "test_striped_map.h"
+
+namespace {
+    struct test_traits
+    {
+        typedef boost::container::map< 
+            cds_test::striped_map_fixture::key_type,
+            cds_test::striped_map_fixture::value_type,
+            cds_test::striped_map_fixture::less
+        > container_type;
+
+        struct copy_policy {
+            typedef container_type::iterator iterator;
+
+            void operator()( container_type& map, iterator itWhat )
+            {
+                map.insert( *itWhat );
+            }
+        };
+
+        static bool const c_hasFindWith = false;
+        static bool const c_hasEraseWith = false;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostMap, StripedMap, test_traits );
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostMap, RefinableMap, test_traits );
+
+} // namespace
+
+#else // BOOST_VERSION < 104800
+// Skipped; for boost::container::map you should use boost version 1.48 or above
+#endif  // BOOST_VERSION 
+
+#endif // #ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
diff --git a/test/unit/striped-map/map_boost_slist.cpp b/test/unit/striped-map/map_boost_slist.cpp
new file mode 100644 (file)
index 0000000..4d069dd
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
+
+#include <boost/version.hpp>
+#include <cds/details/defs.h>
+#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION < 105500
+    // Skipped; for Microsoft Visual C++ 2013 and boost::container::slist you should use boost version 1.55 or above" );
+#elif BOOST_VERSION >= 104800
+
+#include <cds/container/striped_map/boost_slist.h> 
+#include "test_striped_map.h"
+
+namespace {
+    struct test_traits
+    {
+        typedef boost::container::slist< std::pair< cds_test::striped_map_fixture::key_type const, cds_test::striped_map_fixture::value_type >> container_type;
+
+        struct copy_policy {
+            typedef container_type::iterator iterator;
+
+            void operator()( container_type& list, iterator itInsert, iterator itWhat )
+            {
+                list.insert_after( itInsert, *itWhat );
+            }
+        };
+
+        static bool const c_hasFindWith = true;
+        static bool const c_hasEraseWith = true;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostSList, StripedMap, test_traits );
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostSList, RefinableMap, test_traits );
+
+} // namespace
+
+#else // BOOST_VERSION < 104800
+// Skipped; for boost::container::slist you should use boost version 1.48 or above
+#endif  // BOOST_VERSION 
+
+#endif // #ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
diff --git a/test/unit/striped-map/map_boost_unordered_map.cpp b/test/unit/striped-map/map_boost_unordered_map.cpp
new file mode 100644 (file)
index 0000000..40f98fd
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
+
+#include <cds/container/striped_map/boost_unordered_map.h> 
+#include "test_striped_map.h"
+
+namespace {
+    struct test_traits
+    {
+        typedef boost::unordered_map<
+            cds_test::striped_map_fixture::key_type
+            ,cds_test::striped_map_fixture::value_type
+            ,cds_test::striped_map_fixture::hash2
+            ,cds_test::striped_map_fixture::equal_to
+        > container_type;
+
+        struct copy_policy {
+            typedef container_type::iterator iterator;
+
+            void operator()( container_type& m, iterator /*itInsert*/, iterator itWhat )
+            {
+                m.insert( *itWhat );
+            }
+        };
+
+        static bool const c_hasFindWith = false;
+        static bool const c_hasEraseWith = false;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostUnorderedMap, StripedMap, test_traits );
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostUnorderedMap, RefinableMap, test_traits );
+
+} // namespace
+
+#endif // #ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
diff --git a/test/unit/striped-map/map_std_list.cpp b/test/unit/striped-map/map_std_list.cpp
new file mode 100644 (file)
index 0000000..c15c86f
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include <cds/container/striped_map/std_list.h>
+#include "test_striped_map.h"
+
+namespace {
+    struct test_traits
+    {
+        typedef std::list< std::pair< cds_test::striped_map_fixture::key_type const, cds_test::striped_map_fixture::value_type >> container_type;
+
+        struct copy_policy {
+            typedef container_type::iterator iterator;
+
+            void operator()( container_type& list, iterator itInsert, iterator itWhat )
+            {
+                list.insert( itInsert, *itWhat );
+            }
+        };
+
+        static bool const c_hasFindWith = true;
+        static bool const c_hasEraseWith = true;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( StdList, StripedMap, test_traits );
+    INSTANTIATE_TYPED_TEST_CASE_P( StdList, RefinableMap, test_traits );
+
+} // namespace
diff --git a/test/unit/striped-map/map_std_map.cpp b/test/unit/striped-map/map_std_map.cpp
new file mode 100644 (file)
index 0000000..92822d7
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include <cds/container/striped_map/std_map.h>
+#include "test_striped_map.h"
+
+namespace {
+    struct test_traits
+    {
+        typedef std::map< cds_test::striped_map_fixture::key_type, cds_test::striped_map_fixture::value_type, cds_test::striped_map_fixture::less > container_type;
+
+        struct copy_policy {
+            typedef container_type::iterator iterator;
+
+            void operator()( container_type& m, iterator /*itInsert*/, iterator itWhat )
+            {
+                m.insert( *itWhat );
+            }
+        };
+
+        static bool const c_hasFindWith = false;
+        static bool const c_hasEraseWith = false;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( StdMap, StripedMap, test_traits );
+    INSTANTIATE_TYPED_TEST_CASE_P( StdMap, RefinableMap, test_traits );
+
+} // namespace
diff --git a/test/unit/striped-map/map_std_unordered_map.cpp b/test/unit/striped-map/map_std_unordered_map.cpp
new file mode 100644 (file)
index 0000000..df07d72
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include <cds/container/striped_map/std_hash_map.h>
+#include "test_striped_map.h"
+
+namespace {
+    struct test_traits
+    {
+        typedef std::unordered_map<
+            cds_test::striped_map_fixture::key_type
+            , cds_test::striped_map_fixture::value_type
+            , cds_test::striped_map_fixture::hash2
+            , cds_test::striped_map_fixture::equal_to
+        > container_type;
+
+        struct copy_policy {
+            typedef container_type::iterator iterator;
+
+            void operator()( container_type& m, iterator /*itInsert*/, iterator itWhat )
+            {
+                m.insert( std::make_pair( itWhat->first, itWhat->second ));
+            }
+        };
+
+        static bool const c_hasFindWith = false;
+        static bool const c_hasEraseWith = false;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( StdUnorderedMap, StripedMap,   test_traits );
+    INSTANTIATE_TYPED_TEST_CASE_P( StdUnorderedMap, RefinableMap, test_traits );
+
+} // namespace
diff --git a/test/unit/striped-map/test_map.h b/test/unit/striped-map/test_map.h
new file mode 100644 (file)
index 0000000..4a25dc6
--- /dev/null
@@ -0,0 +1,394 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_STRIPED_MAP_TEST_MAP_H
+#define CDSUNIT_STRIPED_MAP_TEST_MAP_H
+
+#include "test_map_data.h"
+
+// forward declaration
+namespace cds { namespace container {} }
+
+namespace cds_test {
+
+    class container_map: public striped_map_fixture
+    {
+    public:
+        static size_t const kSize = 1000;
+
+    protected:
+        template <class Map>
+        void test( Map& m )
+        {
+            test_< true >( m );
+        }
+
+        template <bool Sorted, class Map>
+        void test_( Map& m )
+        {
+            // Precondition: map is empty
+            // Postcondition: map is empty
+
+            ASSERT_TRUE( m.empty());
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            typedef typename Map::value_type map_pair;
+            typedef typename std::conditional< Sorted, other_less, other_equal_to >::type other_predicate;
+
+            size_t const kkSize = kSize;
+
+            std::vector<key_type> arrKeys;
+            for ( int i = 0; i < static_cast<int>(kkSize); ++i )
+                arrKeys.push_back( key_type( i ));
+            shuffle( arrKeys.begin(), arrKeys.end());
+
+            std::vector< value_type > arrVals;
+            for ( size_t i = 0; i < kkSize; ++i ) {
+                value_type val;
+                val.nVal = static_cast<int>( i );
+                val.strVal = std::to_string( i );
+                arrVals.push_back( val );
+            }
+
+            // insert/find
+            for ( auto const& i : arrKeys ) {
+                value_type const& val( arrVals.at( i.nKey ));
+
+                ASSERT_FALSE( m.contains( i.nKey ));
+                ASSERT_FALSE( m.contains( i ));
+                ASSERT_FALSE( m.contains( other_item( i.nKey ), other_predicate()));
+                ASSERT_FALSE( m.find( i, []( map_pair const& ) {
+                    ASSERT_TRUE( false );
+                } ));
+                ASSERT_FALSE( m.find( i.nKey, []( map_pair const& ) {
+                    EXPECT_TRUE( false );
+                } ));
+                ASSERT_FALSE( m.find_with( other_item( i.nKey ), other_predicate(), []( map_pair const& ) {
+                    EXPECT_TRUE( false );
+                } ));
+
+                std::pair< bool, bool > updResult;
+
+                switch ( i.nKey % 16 ) {
+                case 0:
+                    ASSERT_TRUE( m.insert( i ));
+                    ASSERT_FALSE( m.insert( i ));
+                    ASSERT_TRUE( m.find( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    break;
+                case 1:
+                    ASSERT_TRUE( m.insert( i.nKey ));
+                    ASSERT_FALSE( m.insert( i.nKey ));
+                    ASSERT_TRUE( m.find( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    break;
+                case 2:
+                    ASSERT_TRUE( m.insert( std::to_string( i.nKey )));
+                    ASSERT_FALSE( m.insert( std::to_string( i.nKey )));
+                    ASSERT_TRUE( m.find( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    break;
+                case 3:
+                    ASSERT_TRUE( m.insert( i, val ));
+                    ASSERT_FALSE( m.insert( i, val ));
+                    break;
+                case 4:
+                    ASSERT_TRUE( m.insert( i.nKey, val.strVal ));
+                    ASSERT_FALSE( m.insert( i.nKey, val.strVal ));
+                    break;
+                case 5:
+                    ASSERT_TRUE( m.insert( val.strVal, i.nKey ));
+                    ASSERT_FALSE( m.insert( val.strVal, i.nKey ));
+                    break;
+                case 6:
+                    ASSERT_TRUE( m.insert_with( i, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    ASSERT_FALSE( m.insert_with( i, []( map_pair& v ) {
+                        EXPECT_TRUE( false );
+                    } ));
+                    break;
+                case 7:
+                    ASSERT_TRUE( m.insert_with( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    ASSERT_FALSE( m.insert_with( i.nKey, []( map_pair& v ) {
+                        EXPECT_TRUE( false );
+                    } ));
+                    break;
+                case 8:
+                    ASSERT_TRUE( m.insert_with( val.strVal, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    ASSERT_FALSE( m.insert_with( val.strVal, []( map_pair& v ) {
+                        EXPECT_TRUE( false );
+                    } ));
+                    break;
+                case 9:
+                    updResult = m.update( i.nKey, []( bool, map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }, false );
+                    ASSERT_FALSE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( i.nKey, []( bool bNew, map_pair& v ) {
+                        EXPECT_TRUE( bNew );
+                        v.second.nVal = v.first.nKey;
+                    });
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_TRUE( updResult.second );
+
+                    updResult = m.update( i.nKey, []( bool bNew, map_pair& v ) {
+                        EXPECT_FALSE( bNew );
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        v.second.strVal = std::to_string( v.second.nVal );
+                    } );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+                    break;
+                case 10:
+                    updResult = m.update( i, []( bool, map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }, false );
+                    ASSERT_FALSE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( i, []( bool bNew, map_pair& v ) {
+                        EXPECT_TRUE( bNew );
+                        v.second.nVal = v.first.nKey;
+                    });
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_TRUE( updResult.second );
+
+                    updResult = m.update( i, []( bool bNew, map_pair& v ) {
+                        EXPECT_FALSE( bNew );
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        v.second.strVal = std::to_string( v.second.nVal );
+                    } );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+                    break;
+                case 11:
+                    updResult = m.update( val.strVal, []( bool, map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }, false );
+                    ASSERT_FALSE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( val.strVal, []( bool bNew, map_pair& v ) {
+                        EXPECT_TRUE( bNew );
+                        v.second.nVal = v.first.nKey;
+                    });
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_TRUE( updResult.second );
+
+                    updResult = m.update( val.strVal, []( bool bNew, map_pair& v ) {
+                        EXPECT_FALSE( bNew );
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        v.second.strVal = std::to_string( v.second.nVal );
+                    } );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+                    break;
+                case 12:
+                    ASSERT_TRUE( m.emplace( i.nKey ));
+                    ASSERT_FALSE( m.emplace( i.nKey ));
+                    ASSERT_TRUE( m.find( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    break;
+                case 13:
+                    ASSERT_TRUE( m.emplace( i, i.nKey ));
+                    ASSERT_FALSE( m.emplace( i, i.nKey ));
+                    break;
+                case 14:
+                    {
+                        std::string str = val.strVal;
+                        ASSERT_TRUE( m.emplace( i, std::move( str )));
+                        ASSERT_TRUE( str.empty());
+                        str = val.strVal;
+                        ASSERT_FALSE( m.emplace( i, std::move( str )));
+                        ASSERT_TRUE( str.empty());
+                    }
+                    break;
+                case 15:
+                    {
+                        std::string str = val.strVal;
+                        ASSERT_TRUE( m.emplace( i, i.nKey, std::move( str )));
+                        ASSERT_TRUE( str.empty());
+                        str = val.strVal;
+                        ASSERT_FALSE( m.emplace( i, i.nKey, std::move( str )));
+                        ASSERT_TRUE( str.empty());
+                    }
+                    break;
+                }
+
+                ASSERT_TRUE( m.contains( i.nKey ));
+                ASSERT_TRUE( m.contains( i ));
+                ASSERT_TRUE( m.contains( other_item( i.nKey ), other_predicate()));
+                ASSERT_TRUE( m.find( i, []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ));
+                ASSERT_TRUE( m.find( i.nKey, []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ));
+                ASSERT_TRUE( m.find_with( other_item( i.nKey ), other_predicate(), []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ));
+            }
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            shuffle( arrKeys.begin(), arrKeys.end() );
+
+            // erase/find
+            for ( auto const& i : arrKeys ) {
+                value_type const& val( arrVals.at( i.nKey ) );
+
+                ASSERT_TRUE( m.contains( i.nKey ));
+                ASSERT_TRUE( m.contains( val.strVal ) );
+                ASSERT_TRUE( m.contains( i ));
+                ASSERT_TRUE( m.contains( other_item( i.nKey ), other_predicate()));
+                ASSERT_TRUE( m.find( i, []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ));
+                ASSERT_TRUE( m.find( i.nKey, []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ));
+                ASSERT_TRUE( m.find_with( other_item( i.nKey ), other_predicate(), []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ));
+
+
+                switch ( i.nKey % 8 ) {
+                case 0:
+                    ASSERT_TRUE( m.erase( i ));
+                    ASSERT_FALSE( m.erase( i ));
+                    break;
+                case 1:
+                    ASSERT_TRUE( m.erase( i.nKey ));
+                    ASSERT_FALSE( m.erase( i.nKey ));
+                    break;
+                case 2:
+                    ASSERT_TRUE( m.erase( val.strVal ));
+                    ASSERT_FALSE( m.erase( val.strVal ));
+                    break;
+                case 3:
+                    ASSERT_TRUE( m.erase_with( other_item( i.nKey ), other_predicate()));
+                    ASSERT_FALSE( m.erase_with( other_item( i.nKey ), other_predicate()));
+                    break;
+                case 4:
+                    ASSERT_TRUE( m.erase( i, []( map_pair& v ) {
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                    }));
+                    ASSERT_FALSE( m.erase( i, []( map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }));
+                    break;
+                case 5:
+                    ASSERT_TRUE( m.erase( i.nKey, []( map_pair& v ) {
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                    }));
+                    ASSERT_FALSE( m.erase( i.nKey, []( map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }));
+                    break;
+                case 6:
+                    ASSERT_TRUE( m.erase( val.strVal, []( map_pair& v ) {
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                    }));
+                    ASSERT_FALSE( m.erase( val.strVal, []( map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }));
+                    break;
+                case 7:
+                    ASSERT_TRUE( m.erase_with( other_item( i.nKey ), other_predicate(), []( map_pair& v ) {
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                    }));
+                    ASSERT_FALSE( m.erase_with( other_item( i.nKey ), other_predicate(), []( map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }));
+                    break;
+                }
+
+                ASSERT_FALSE( m.contains( i.nKey ));
+                ASSERT_FALSE( m.contains( i ));
+                ASSERT_FALSE( m.contains( val.strVal ));
+                ASSERT_FALSE( m.contains( other_item( i.nKey ), other_predicate()));
+                ASSERT_FALSE( m.find( i, []( map_pair const& ) {
+                    ASSERT_TRUE( false );
+                } ));
+                ASSERT_FALSE( m.find( i.nKey, []( map_pair const& ) {
+                    EXPECT_TRUE( false );
+                } ));
+                ASSERT_FALSE( m.find_with( other_item( i.nKey ), other_predicate(), []( map_pair const& ) {
+                    EXPECT_TRUE( false );
+                } ));
+            }
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            // clear
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i ));
+
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            m.clear();
+
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+        }
+    };
+
+} // namespace cds_test
+
+#endif // #ifndef CDSUNIT_STRIPED_MAP_TEST_MAP_H
diff --git a/test/unit/striped-map/test_map_data.h b/test/unit/striped-map/test_map_data.h
new file mode 100644 (file)
index 0000000..2e1f3ba
--- /dev/null
@@ -0,0 +1,302 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_STRIPED_MAP_TEST_MAP_DATA_H
+#define CDSUNIT_STRIPED_MAP_TEST_MAP_DATA_H
+
+#include <cds_test/check_size.h>
+#include <cds_test/fixture.h>
+
+#include <cds/opt/hash.h>
+
+namespace cds_test {
+
+    class striped_map_fixture: public fixture
+    {
+    public:
+        struct key_type {
+            int nKey;
+
+            explicit key_type( int n )
+                : nKey( n )
+            {}
+
+            explicit key_type( std::string const& str )
+                : nKey( std::stoi( str ))
+            {}
+
+            key_type( key_type const& s )
+                : nKey( s.nKey )
+            {}
+        };
+
+        struct value_type {
+            int nVal;
+            std::string strVal;
+
+            value_type()
+                : nVal( 0 )
+            {}
+
+            explicit value_type( int n )
+                : nVal( n )
+                , strVal( std::to_string( n ))
+            {}
+
+            explicit value_type( std::string const& str )
+                : nVal( std::stoi( str ))
+                , strVal( str )
+            {}
+
+            explicit value_type( std::string&& str )
+                : nVal( std::stoi( str ))
+                , strVal( std::move( str ))
+            {}
+
+            value_type( int n, std::string const& str )
+                : nVal( n )
+                , strVal( str )
+            {}
+
+            value_type( int n, std::string&& str )
+                : nVal( n )
+                , strVal( std::move( str ))
+            {}
+
+            value_type( value_type&& v )
+                : nVal( v.nVal )
+                , strVal( std::move( v.strVal ))
+            {}
+
+            value_type( value_type const& v )
+                : nVal( v.nVal )
+                , strVal( v.strVal )
+            {}
+
+            value_type& operator=( value_type const& v )
+            {
+                if ( this != &v ) {
+                    nVal = v.nVal;
+                    strVal = v.strVal;
+                }
+                return *this;
+            }
+
+            value_type& operator=( value_type&& v )
+            {
+                if ( this != &v ) {
+                    nVal = v.nVal;
+                    strVal = std::move( v.strVal );
+                }
+                return *this;
+            }
+
+            value_type& operator=( int i )
+            {
+                nVal = i;
+                strVal = std::to_string( i );
+                return *this;
+            }
+
+            value_type& operator=( std::string const& s )
+            {
+                nVal = std::stoi( s );
+                strVal = s;
+                return *this;
+            }
+        };
+
+        typedef std::pair<key_type const, value_type> pair_type;
+
+        struct less
+        {
+            bool operator ()( key_type const& v1, key_type const& v2 ) const
+            {
+                return v1.nKey < v2.nKey;
+            }
+
+            bool operator ()( key_type const& v1, int v2 ) const
+            {
+                return v1.nKey < v2;
+            }
+
+            bool operator ()( int v1, key_type const& v2 ) const
+            {
+                return v1 < v2.nKey;
+            }
+
+            bool operator ()( key_type const& v1, std::string const& v2 ) const
+            {
+                return v1.nKey < std::stoi(v2 );
+            }
+
+            bool operator ()( std::string const& v1, key_type const& v2 ) const
+            {
+                return std::stoi( v1 ) < v2.nKey;
+            }
+        };
+
+        struct cmp {
+            int operator ()( key_type const& v1, key_type const& v2 ) const
+            {
+                if ( v1.nKey < v2.nKey )
+                    return -1;
+                return v1.nKey > v2.nKey ? 1 : 0;
+            }
+
+            int operator ()( key_type const& v1, int v2 ) const
+            {
+                if ( v1.nKey < v2 )
+                    return -1;
+                return v1.nKey > v2 ? 1 : 0;
+            }
+
+            int operator ()( int v1, key_type const& v2 ) const
+            {
+                if ( v1 < v2.nKey )
+                    return -1;
+                return v1 > v2.nKey ? 1 : 0;
+            }
+
+            int operator ()( key_type const& v1, std::string const& v2 ) const
+            {
+                int n2 = std::stoi( v2 );
+                if ( v1.nKey < n2 )
+                    return -1;
+                return v1.nKey > n2 ? 1 : 0;
+            }
+
+            int operator ()( std::string const& v1, key_type const& v2 ) const
+            {
+                int n1 = std::stoi( v1 );
+                if ( n1 < v2.nKey )
+                    return -1;
+                return n1 > v2.nKey ? 1 : 0;
+            }
+        };
+
+        struct equal_to
+        {
+            bool operator ()( key_type const& v1, key_type const& v2 ) const
+            {
+                return v1.nKey == v2.nKey;
+            }
+
+            bool operator ()( key_type const& v1, int v2 ) const
+            {
+                return v1.nKey == v2;
+            }
+
+            bool operator ()( int v1, key_type const& v2 ) const
+            {
+                return v1 == v2.nKey;
+            }
+
+            bool operator ()( key_type const& v1, std::string const& v2 ) const
+            {
+                return v1.nKey == std::stoi( v2 );
+            }
+
+            bool operator ()( std::string const& v1, key_type const& v2 ) const
+            {
+                return std::stoi( v1 ) == v2.nKey;
+            }
+        };
+
+        struct hash1 {
+            size_t operator()( int i ) const
+            {
+                return cds::opt::v::hash<int>()( i );
+            }
+
+            size_t operator()( std::string const& str ) const
+            {
+                return cds::opt::v::hash<int>()( std::stoi( str ));
+            }
+
+            template <typename T>
+            size_t operator()( T const& i ) const
+            {
+                return cds::opt::v::hash<int>()(i.nKey);
+            }
+        };
+
+        struct hash2: private hash1
+        {
+            typedef hash1 base_class;
+
+            size_t operator()( int i ) const
+            {
+                size_t h = ~(base_class::operator()( i ));
+                return ~h + 0x9e3779b9 + (h << 6) + (h >> 2);
+            }
+            template <typename Item>
+            size_t operator()( const Item& i ) const
+            {
+                size_t h = ~(base_class::operator()( i ));
+                return ~h + 0x9e3779b9 + (h << 6) + (h >> 2);
+            }
+        };
+
+        struct other_item {
+            int nKey;
+
+            other_item( int key )
+                : nKey( key )
+            {}
+        };
+
+        struct other_less
+        {
+            bool operator ()( key_type const& v1, other_item const& v2 ) const
+            {
+                return v1.nKey < v2.nKey;
+            }
+            bool operator ()( other_item const& v1, key_type const& v2 ) const
+            {
+                return v1.nKey < v2.nKey;
+            }
+        };
+
+        struct other_equal_to
+        {
+            bool operator ()( key_type const& v1, other_item const& v2 ) const
+            {
+                return v1.nKey == v2.nKey;
+            }
+            bool operator ()( other_item const& v1, key_type const& v2 ) const
+            {
+                return v1.nKey == v2.nKey;
+            }
+        };
+    };
+} // namespace cds_test
+
+#endif // CDSUNIT_STRIPED_MAP_TEST_MAP_DATA_H
diff --git a/test/unit/striped-map/test_striped_map.h b/test/unit/striped-map/test_striped_map.h
new file mode 100644 (file)
index 0000000..b5ad0c0
--- /dev/null
@@ -0,0 +1,828 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_STRIPED_MAP_TEST_STRIPED_MAP_H
+#define CDSUNIT_STRIPED_MAP_TEST_STRIPED_MAP_H
+
+#include "test_map_data.h"
+
+#include <cds/container/striped_map.h>
+
+namespace {
+    namespace cc = cds::container;
+
+    template <bool Exist, typename Map>
+    struct call_contains_with
+    {
+        bool operator()( Map& m, int key ) const
+        {
+            return m.contains( cds_test::striped_map_fixture::other_item( key ), cds_test::striped_map_fixture::other_less() );
+        }
+    };
+
+    template <typename Map>
+    struct call_contains_with<false, Map>
+    {
+        bool operator()( Map& m, int key ) const
+        {
+            return m.contains( key );
+        }
+    };
+
+    template <bool Exist, typename Map>
+    struct call_find_with
+    {
+        template <typename Func>
+        bool operator()( Map& m, int key, Func f ) const
+        {
+            return m.find_with( cds_test::striped_map_fixture::other_item( key ), cds_test::striped_map_fixture::other_less(), f );
+        }
+    };
+
+    template <typename Map>
+    struct call_find_with<false, Map>
+    {
+        template <typename Func>
+        bool operator()( Map& m, int key, Func f ) const
+        {
+            return m.find( key, f );
+        }
+    };
+
+    template <bool Exist, typename Map>
+    struct call_erase_with
+    {
+        bool operator()( Map& m, int key ) const
+        {
+            return m.erase_with( cds_test::striped_map_fixture::other_item( key ), cds_test::striped_map_fixture::other_less() );
+        }
+
+        template <typename Func>
+        bool operator()( Map& m, int key, Func f ) const
+        {
+            return m.erase_with( cds_test::striped_map_fixture::other_item( key ), cds_test::striped_map_fixture::other_less(), f );
+        }
+    };
+
+    template <typename Map>
+    struct call_erase_with<false, Map>
+    {
+        bool operator()( Map& m, int key ) const
+        {
+            return m.erase( key );
+        }
+
+        template <typename Func>
+        bool operator()( Map& m, int key, Func f ) const
+        {
+            return m.erase( key, f );
+        }
+    };
+
+    template <typename Traits>
+    class StripedMap: public cds_test::striped_map_fixture
+    {
+    public:
+        static size_t const kSize = 1000;
+
+    protected:
+        typedef typename Traits::container_type container_type;
+        typedef typename Traits::copy_policy    copy_policy;
+
+        static bool const c_hasFindWith = Traits::c_hasFindWith;
+        static bool const c_hasEraseWith = Traits::c_hasEraseWith;
+
+        //void SetUp()
+        //{}
+
+        //void TearDown()
+        //{}
+
+        template <class Map>
+        void test( Map& m )
+        {
+            // Precondition: map is empty
+            // Postcondition: map is empty
+
+            ASSERT_TRUE( m.empty());
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            typedef typename Map::value_type map_pair;
+
+            size_t const kkSize = kSize;
+
+            std::vector<key_type> arrKeys;
+            for ( int i = 0; i < static_cast<int>(kkSize); ++i )
+                arrKeys.push_back( key_type( i ));
+            shuffle( arrKeys.begin(), arrKeys.end());
+
+            std::vector< value_type > arrVals;
+            for ( size_t i = 0; i < kkSize; ++i ) {
+                value_type val;
+                val.nVal = static_cast<int>( i );
+                val.strVal = std::to_string( i );
+                arrVals.push_back( val );
+            }
+
+            // insert/find
+            for ( auto const& i : arrKeys ) {
+                value_type const& val( arrVals.at( i.nKey ));
+
+                ASSERT_FALSE( m.contains( i.nKey ));
+                ASSERT_FALSE( m.contains( i ));
+                ASSERT_FALSE(( call_contains_with<c_hasFindWith, Map>()( m, i.nKey ) ));
+                ASSERT_FALSE( m.find( i, []( map_pair const& ) {
+                    ASSERT_TRUE( false );
+                } ));
+                ASSERT_FALSE( m.find( i.nKey, []( map_pair const& ) {
+                    EXPECT_TRUE( false );
+                } ));
+                ASSERT_FALSE(( call_find_with< c_hasFindWith, Map>()( m, i.nKey, []( map_pair const& ) {
+                    EXPECT_TRUE( false );
+                } )));
+
+                std::pair< bool, bool > updResult;
+
+                switch ( i.nKey % 16 ) {
+                case 0:
+                    ASSERT_TRUE( m.insert( i ));
+                    ASSERT_FALSE( m.insert( i ));
+                    ASSERT_TRUE( m.find( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    break;
+                case 1:
+                    ASSERT_TRUE( m.insert( i.nKey ));
+                    ASSERT_FALSE( m.insert( i.nKey ));
+                    ASSERT_TRUE( m.find( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    break;
+                case 2:
+                    ASSERT_TRUE( m.insert( std::to_string( i.nKey )));
+                    ASSERT_FALSE( m.insert( std::to_string( i.nKey )));
+                    ASSERT_TRUE( m.find( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    break;
+                case 3:
+                    ASSERT_TRUE( m.insert( i, val ));
+                    ASSERT_FALSE( m.insert( i, val ));
+                    break;
+                case 4:
+                    ASSERT_TRUE( m.insert( i.nKey, val.strVal ));
+                    ASSERT_FALSE( m.insert( i.nKey, val.strVal ));
+                    break;
+                case 5:
+                    ASSERT_TRUE( m.insert( val.strVal, i.nKey ));
+                    ASSERT_FALSE( m.insert( val.strVal, i.nKey ));
+                    break;
+                case 6:
+                    ASSERT_TRUE( m.insert_with( i, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    ASSERT_FALSE( m.insert_with( i, []( map_pair& v ) {
+                        EXPECT_TRUE( false );
+                    } ));
+                    break;
+                case 7:
+                    ASSERT_TRUE( m.insert_with( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    ASSERT_FALSE( m.insert_with( i.nKey, []( map_pair& v ) {
+                        EXPECT_TRUE( false );
+                    } ));
+                    break;
+                case 8:
+                    ASSERT_TRUE( m.insert_with( val.strVal, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    ASSERT_FALSE( m.insert_with( val.strVal, []( map_pair& v ) {
+                        EXPECT_TRUE( false );
+                    } ));
+                    break;
+                case 9:
+                    updResult = m.update( i.nKey, []( bool, map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }, false );
+                    ASSERT_FALSE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( i.nKey, []( bool bNew, map_pair& v ) {
+                        EXPECT_TRUE( bNew );
+                        v.second.nVal = v.first.nKey;
+                    });
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_TRUE( updResult.second );
+
+                    updResult = m.update( i.nKey, []( bool bNew, map_pair& v ) {
+                        EXPECT_FALSE( bNew );
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        v.second.strVal = std::to_string( v.second.nVal );
+                    } );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+                    break;
+                case 10:
+                    updResult = m.update( i, []( bool, map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }, false );
+                    ASSERT_FALSE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( i, []( bool bNew, map_pair& v ) {
+                        EXPECT_TRUE( bNew );
+                        v.second.nVal = v.first.nKey;
+                    });
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_TRUE( updResult.second );
+
+                    updResult = m.update( i, []( bool bNew, map_pair& v ) {
+                        EXPECT_FALSE( bNew );
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        v.second.strVal = std::to_string( v.second.nVal );
+                    } );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+                    break;
+                case 11:
+                    updResult = m.update( val.strVal, []( bool, map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }, false );
+                    ASSERT_FALSE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( val.strVal, []( bool bNew, map_pair& v ) {
+                        EXPECT_TRUE( bNew );
+                        v.second.nVal = v.first.nKey;
+                    });
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_TRUE( updResult.second );
+
+                    updResult = m.update( val.strVal, []( bool bNew, map_pair& v ) {
+                        EXPECT_FALSE( bNew );
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        v.second.strVal = std::to_string( v.second.nVal );
+                    } );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+                    break;
+                case 12:
+                    ASSERT_TRUE( m.emplace( i.nKey ));
+                    ASSERT_FALSE( m.emplace( i.nKey ));
+                    ASSERT_TRUE( m.find( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    break;
+                case 13:
+                    ASSERT_TRUE( m.emplace( i, i.nKey ));
+                    ASSERT_FALSE( m.emplace( i, i.nKey ));
+                    break;
+                case 14:
+                    {
+                        std::string str = val.strVal;
+                        ASSERT_TRUE( m.emplace( i, std::move( str )));
+                        ASSERT_TRUE( str.empty());
+                        str = val.strVal;
+                        ASSERT_FALSE( m.emplace( i, std::move( str )));
+                    }
+                    break;
+                case 15:
+                    {
+                        std::string str = val.strVal;
+                        ASSERT_TRUE( m.emplace( i, i.nKey, std::move( str )));
+                        ASSERT_TRUE( str.empty());
+                        str = val.strVal;
+                        ASSERT_FALSE( m.emplace( i, i.nKey, std::move( str )));
+                    }
+                    break;
+                }
+
+                ASSERT_TRUE( m.contains( i.nKey ));
+                ASSERT_TRUE( m.contains( i ));
+                ASSERT_TRUE(( call_contains_with<c_hasFindWith, Map>()( m, i.nKey ) ));
+                ASSERT_TRUE( m.find( i, []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ));
+                ASSERT_TRUE( m.find( i.nKey, []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ));
+                ASSERT_TRUE(( call_find_with<c_hasFindWith, Map>()( m, i.nKey, []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } )));
+            }
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            shuffle( arrKeys.begin(), arrKeys.end() );
+
+            // erase/find
+            for ( auto const& i : arrKeys ) {
+                value_type const& val( arrVals.at( i.nKey ) );
+
+                ASSERT_TRUE( m.contains( i.nKey ));
+                ASSERT_TRUE( m.contains( val.strVal ) );
+                ASSERT_TRUE( m.contains( i ));
+                ASSERT_TRUE(( call_contains_with<c_hasFindWith, Map>()( m, i.nKey )));
+                ASSERT_TRUE( m.find( i, []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ));
+                ASSERT_TRUE( m.find( i.nKey, []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ));
+                ASSERT_TRUE(( call_find_with<c_hasFindWith, Map>()( m, i.nKey, []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } )));
+
+
+                switch ( i.nKey % 8 ) {
+                case 0:
+                    ASSERT_TRUE( m.erase( i ));
+                    ASSERT_FALSE( m.erase( i ));
+                    break;
+                case 1:
+                    ASSERT_TRUE( m.erase( i.nKey ));
+                    ASSERT_FALSE( m.erase( i.nKey ));
+                    break;
+                case 2:
+                    ASSERT_TRUE( m.erase( val.strVal ));
+                    ASSERT_FALSE( m.erase( val.strVal ));
+                    break;
+                case 3:
+                    ASSERT_TRUE(( call_erase_with< c_hasEraseWith, Map>()( m, i.nKey )));
+                    ASSERT_FALSE(( call_erase_with< c_hasEraseWith, Map>()( m, i.nKey )));
+                    break;
+                case 4:
+                    ASSERT_TRUE( m.erase( i, []( map_pair& v ) {
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                    }));
+                    ASSERT_FALSE( m.erase( i, []( map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }));
+                    break;
+                case 5:
+                    ASSERT_TRUE( m.erase( i.nKey, []( map_pair& v ) {
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                    }));
+                    ASSERT_FALSE( m.erase( i.nKey, []( map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }));
+                    break;
+                case 6:
+                    ASSERT_TRUE( m.erase( val.strVal, []( map_pair& v ) {
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                    }));
+                    ASSERT_FALSE( m.erase( val.strVal, []( map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }));
+                    break;
+                case 7:
+                    ASSERT_TRUE(( call_erase_with< c_hasEraseWith, Map >()( m, i.nKey, []( map_pair& v ) {
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                    })));
+                    ASSERT_FALSE(( call_erase_with< c_hasEraseWith, Map >()( m, i.nKey, []( map_pair& ) {
+                        EXPECT_TRUE( false );
+                    })));
+                    break;
+                }
+
+                ASSERT_FALSE( m.contains( i.nKey ));
+                ASSERT_FALSE( m.contains( i ));
+                ASSERT_FALSE( m.contains( val.strVal ));
+                ASSERT_FALSE(( call_contains_with< c_hasFindWith, Map >()( m, i.nKey )));
+                ASSERT_FALSE( m.find( i, []( map_pair const& ) {
+                    ASSERT_TRUE( false );
+                } ));
+                ASSERT_FALSE( m.find( i.nKey, []( map_pair const& ) {
+                    EXPECT_TRUE( false );
+                } ));
+                ASSERT_FALSE(( call_find_with< c_hasFindWith, Map >()( m, i.nKey, []( map_pair const& ) {
+                    EXPECT_TRUE( false );
+                } )));
+            }
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            // clear
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i ));
+
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            m.clear();
+
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+        }
+    };
+
+    template <typename Traits>
+    class RefinableMap: public StripedMap< Traits >
+    {};
+
+    TYPED_TEST_CASE_P( StripedMap );
+    TYPED_TEST_CASE_P( RefinableMap );
+
+
+    // ****************************************************************
+    // striped map
+
+    TYPED_TEST_P( StripedMap, compare )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::mutex_policy< cc::striped_set::striping<>>
+        > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( StripedMap, less )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::less< typename TestFixture::less >
+        > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+
+    TYPED_TEST_P( StripedMap, cmpmix )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::less< typename TestFixture::less >,
+            cds::opt::compare< typename TestFixture::cmp >
+        > map_type;
+
+        map_type m( 32 );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( StripedMap, spinlock )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::striping<cds::sync::spin>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::less< typename TestFixture::less >,
+            cds::opt::compare< typename TestFixture::cmp >
+        > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( StripedMap, load_factor_resizing )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::less< typename TestFixture::less >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::load_factor_resizing<4>>
+        > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( StripedMap, load_factor_resizing_rt )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::load_factor_resizing<0>>
+        > map_type;
+
+        map_type m( 30, cc::striped_set::load_factor_resizing<0>( 8 ) );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( StripedMap, single_bucket_resizing )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::single_bucket_size_threshold<6>>
+        > map_type;
+
+        map_type m( 30 );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( StripedMap, single_bucket_resizing_rt )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::single_bucket_size_threshold<0>>
+        > map_type;
+
+        cc::striped_set::single_bucket_size_threshold<0> resizing_policy( 8 );
+        map_type m( 24, resizing_policy );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( StripedMap, copy_policy_copy )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::less< typename TestFixture::less >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::load_factor_resizing<4>>,
+            cds::opt::copy_policy< cc::striped_set::copy_item >
+        > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( StripedMap, copy_policy_move )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::load_factor_resizing<0>>,
+            cds::opt::copy_policy< cc::striped_set::move_item >
+        > map_type;
+
+        map_type m( 30, cc::striped_set::load_factor_resizing<0>( 8 ) );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( StripedMap, copy_policy_swap )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::single_bucket_size_threshold<6>>,
+            cds::opt::copy_policy< cc::striped_set::swap_item >
+        > map_type;
+
+        map_type m( 30 );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( StripedMap, copy_policy_special )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::single_bucket_size_threshold<0>>,
+            cds::opt::copy_policy< typename TestFixture::copy_policy >
+        > map_type;
+
+        cc::striped_set::single_bucket_size_threshold<0> resizing_policy( 8 );
+        map_type m( 24, resizing_policy );
+        this->test( m );
+    }
+
+
+    // ****************************************************************
+    // refinable map
+
+    TYPED_TEST_P( RefinableMap, compare )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >
+        > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( RefinableMap, less )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::less< typename TestFixture::less >
+        > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+
+    TYPED_TEST_P( RefinableMap, cmpmix )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::less< typename TestFixture::less >,
+            cds::opt::compare< typename TestFixture::cmp >
+        > map_type;
+
+        map_type m( 32 );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( RefinableMap, spinlock )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<cds::sync::reentrant_spin>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::less< typename TestFixture::less >,
+            cds::opt::compare< typename TestFixture::cmp >
+        > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( RefinableMap, load_factor_resizing )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::less< typename TestFixture::less >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::load_factor_resizing<4>>
+        > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( RefinableMap, load_factor_resizing_rt )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::load_factor_resizing<0>>
+        > map_type;
+
+        map_type m( 30, cc::striped_set::load_factor_resizing<0>( 8 ) );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( RefinableMap, single_bucket_resizing )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::single_bucket_size_threshold<6>>
+        > map_type;
+
+        map_type m( 30 );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( RefinableMap, single_bucket_resizing_rt )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::single_bucket_size_threshold<0>>
+        > map_type;
+
+        cc::striped_set::single_bucket_size_threshold<0> resizing_policy( 8 );
+        map_type m( 24, resizing_policy );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( RefinableMap, copy_policy_copy )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::less< typename TestFixture::less >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::load_factor_resizing<4>>,
+            cds::opt::copy_policy< cc::striped_set::copy_item >
+        > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( RefinableMap, copy_policy_move )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::load_factor_resizing<0>>,
+            cds::opt::copy_policy< cc::striped_set::move_item >
+        > map_type;
+
+        map_type m( 30, cc::striped_set::load_factor_resizing<0>( 8 ) );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( RefinableMap, copy_policy_swap )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::single_bucket_size_threshold<6>>,
+            cds::opt::copy_policy< cc::striped_set::swap_item >
+        > map_type;
+
+        map_type m( 30 );
+        this->test( m );
+    }
+
+    TYPED_TEST_P( RefinableMap, copy_policy_special )
+    {
+        typedef cc::StripedMap<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::single_bucket_size_threshold<0>>,
+            cds::opt::copy_policy< typename TestFixture::copy_policy >
+        > map_type;
+
+        cc::striped_set::single_bucket_size_threshold<0> resizing_policy( 8 );
+        map_type m( 24, resizing_policy );
+        this->test( m );
+    }
+
+    REGISTER_TYPED_TEST_CASE_P( StripedMap,
+        compare, less, cmpmix, spinlock, load_factor_resizing, load_factor_resizing_rt, single_bucket_resizing, single_bucket_resizing_rt, copy_policy_copy, copy_policy_move, copy_policy_swap, copy_policy_special
+    );
+
+    REGISTER_TYPED_TEST_CASE_P( RefinableMap,
+        compare, less, cmpmix, spinlock, load_factor_resizing, load_factor_resizing_rt, single_bucket_resizing, single_bucket_resizing_rt, copy_policy_copy, copy_policy_move, copy_policy_swap, copy_policy_special
+    );
+} // namespace
+
+#endif // #ifndef CDSUNIT_STRIPED_MAP_TEST_STRIPED_MAP_H
diff --git a/test/unit/striped-set/CMakeLists.txt b/test/unit/striped-set/CMakeLists.txt
new file mode 100644 (file)
index 0000000..fa30a1e
--- /dev/null
@@ -0,0 +1,43 @@
+set(PACKAGE_NAME unit-striped-set)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof -DCDSUNIT_ENABLE_BOOST_CONTAINER")
+
+set(CDSGTEST_SET_SOURCES
+    ../main.cpp
+    cuckoo_set.cpp
+    intrusive_boost_avl_set.cpp
+    intrusive_boost_list.cpp
+    intrusive_boost_set.cpp
+    intrusive_boost_sg_set.cpp
+    intrusive_boost_slist.cpp
+    intrusive_boost_splay_set.cpp
+    intrusive_boost_treap_set.cpp
+    intrusive_boost_unordered_set.cpp
+    intrusive_cuckoo_set.cpp
+    set_boost_flatset.cpp
+    set_boost_list.cpp
+    set_boost_set.cpp
+    set_boost_slist.cpp
+    set_boost_stable_vector.cpp
+    set_boost_unordered_set.cpp
+    set_boost_vector.cpp
+    set_std_list.cpp
+    set_std_set.cpp
+    set_std_unordered_set.cpp
+    set_std_vector.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_executable(${PACKAGE_NAME} ${CDSGTEST_SET_SOURCES})
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/unit/striped-set/cuckoo_set.cpp b/test/unit/striped-set/cuckoo_set.cpp
new file mode 100644 (file)
index 0000000..a01f2d6
--- /dev/null
@@ -0,0 +1,517 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_set.h"
+
+#include <cds/container/cuckoo_set.h>
+
+namespace {
+    namespace cc = cds::container;
+
+    class CuckooSet : public cds_test::container_set
+    {
+    protected:
+        typedef cds_test::container_set base_class;
+
+        template <typename Set>
+        void test( Set& s )
+        {
+            // Precondition: set is empty
+            // Postcondition: set is empty
+
+            base_class::test_< Set::c_isSorted>( s );
+        }
+
+        //void SetUp()
+        //{}
+
+        //void TearDown()
+        //{}
+    };
+
+    struct store_hash_traits: public cc::cuckoo::traits
+    {
+        static bool const store_hash = true;
+    };
+
+
+//************************************************************
+// striped set
+
+    TEST_F( CuckooSet, striped_list_unordered )
+    {
+        struct set_traits: public cc::cuckoo::traits
+        {
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to equal_to;
+            typedef cc::cuckoo::list probeset_type;
+        };
+        typedef cc::CuckooSet< int_item, set_traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( CuckooSet, striped_vector_unordered )
+    {
+        struct set_traits: public cc::cuckoo::traits
+        {
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to equal_to;
+            typedef cc::cuckoo::vector<4> probeset_type;
+        };
+        typedef cc::CuckooSet< int_item, set_traits > set_type;
+
+        set_type s( 32, 4 );
+        test( s );
+    }
+
+    TEST_F( CuckooSet, striped_list_ordered_cmp )
+    {
+        typedef cc::CuckooSet< int_item
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
+            >::type
+        > set_type;
+
+        set_type s( 32, 6, 4 );
+        test( s );
+    }
+
+    TEST_F( CuckooSet, striped_vector_ordered_cmp )
+    {
+        typedef cc::CuckooSet< int_item
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<8>>
+            >::type
+        > set_type;
+
+        typename set_type::hash_tuple_type ht;
+        set_type s( ht );
+        test( s );
+    }
+
+    TEST_F( CuckooSet, striped_list_ordered_less )
+    {
+        typedef cc::CuckooSet< int_item
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
+            >::type
+        > set_type;
+
+        typename set_type::hash_tuple_type ht;
+        set_type s( 32, 6, 4, ht );
+        test( s );
+    }
+
+    TEST_F( CuckooSet, striped_vector_ordered_less )
+    {
+        typedef cc::CuckooSet< int_item
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<6>>
+            >::type
+        > set_type;
+
+        typename set_type::hash_tuple_type ht;
+        set_type s( std::move( ht ) );
+        test( s );
+    }
+
+    TEST_F( CuckooSet, striped_list_ordered_cmpmix )
+    {
+        typedef cc::CuckooSet< int_item
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
+            >::type
+        > set_type;
+
+        typename set_type::hash_tuple_type ht;
+        set_type s( 32, 6, 0, std::move( ht ) );
+        test( s );
+    }
+
+    TEST_F( CuckooSet, striped_vector_ordered_cmpmix )
+    {
+        typedef cc::CuckooSet< int_item
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<6>>
+            >::type
+        > set_type;
+
+        typename set_type::hash_tuple_type ht;
+        set_type s( std::move( ht ) );
+        test( s );
+    }
+
+    TEST_F( CuckooSet, striped_list_ordered_stat )
+    {
+        typedef cc::CuckooSet< int_item
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cds::opt::stat< cc::cuckoo::stat >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
+            >::type
+        > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( CuckooSet, striped_vector_ordered_stat )
+    {
+        typedef cc::CuckooSet< int_item
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cds::opt::stat< cc::cuckoo::stat >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<8>>
+            >::type
+        > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( CuckooSet, striped_list_unordered_storehash )
+    {
+        struct set_traits: public store_hash_traits
+        {
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to equal_to;
+            typedef cc::cuckoo::list     probeset_type;
+            typedef cc::cuckoo::stat     stat;
+        };
+        typedef cc::CuckooSet< int_item, set_traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( CuckooSet, striped_vector_unordered_storehash )
+    {
+        struct set_traits: public store_hash_traits
+        {
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to    equal_to;
+            typedef cc::cuckoo::stat        stat;
+            typedef cc::cuckoo::vector<4>   probeset_type;
+        };
+        typedef cc::CuckooSet< int_item, set_traits > set_type;
+
+        set_type s( 32, 4 );
+        test( s );
+    }
+
+    TEST_F( CuckooSet, striped_list_ordered_storehash )
+    {
+        typedef cc::CuckooSet< int_item
+            ,cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
+                ,cc::cuckoo::store_hash< true >
+            >::type
+        > set_type; 
+
+        typename set_type::hash_tuple_type ht;
+        set_type s( 32, 6, 0, std::move( ht ));
+        test( s );
+    }
+
+    TEST_F( CuckooSet, striped_vector_ordered_storehash )
+    {
+        typedef cc::CuckooSet< int_item
+            ,cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<6>>
+                ,cc::cuckoo::store_hash< true >
+            >::type
+        > set_type; 
+
+        typename set_type::hash_tuple_type ht;
+        set_type s( std::move( ht ));
+        test( s );
+    }
+
+
+//************************************************************
+// refinable set
+
+    TEST_F( CuckooSet, refinable_list_unordered )
+    {
+        struct set_traits: public cc::cuckoo::traits
+        {
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to equal_to;
+            typedef cc::cuckoo::list probeset_type;
+            typedef cc::cuckoo::refinable<> mutex_policy;
+        };
+        typedef cc::CuckooSet< int_item, set_traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( CuckooSet, refinable_vector_unordered )
+    {
+        struct set_traits: public cc::cuckoo::traits
+        {
+            typedef cc::cuckoo::refinable<> mutex_policy;
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to equal_to;
+            typedef cc::cuckoo::vector<4> probeset_type;
+        };
+        typedef cc::CuckooSet< int_item, set_traits > set_type;
+
+        set_type s( 32, 4 );
+        test( s );
+    }
+
+    TEST_F( CuckooSet, refinable_list_ordered_cmp )
+    {
+        typedef cc::CuckooSet< int_item
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::mutex_policy< cc::cuckoo::refinable<>>
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
+            >::type
+        > set_type;
+
+        set_type s( 32, 6, 4 );
+        test( s );
+    }
+
+    TEST_F( CuckooSet, refinable_vector_ordered_cmp )
+    {
+        typedef cc::CuckooSet< int_item
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 >>
+                ,cds::opt::mutex_policy< cc::cuckoo::refinable<>>
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<8>>
+            >::type
+        > set_type;
+
+        typename set_type::hash_tuple_type ht;
+        set_type s( ht );
+        test( s );
+    }
+
+    TEST_F( CuckooSet, refinable_list_ordered_less )
+    {
+        typedef cc::CuckooSet< int_item
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::mutex_policy< cc::cuckoo::refinable<>>
+                ,cds::opt::less< less >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
+            >::type
+        > set_type;
+
+        typename set_type::hash_tuple_type ht;
+        set_type s( 32, 6, 4, ht );
+        test( s );
+    }
+
+    TEST_F( CuckooSet, refinable_vector_ordered_less )
+    {
+        typedef cc::CuckooSet< int_item
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::mutex_policy< cc::cuckoo::refinable<>>
+                ,cds::opt::less< less >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<6>>
+            >::type
+        > set_type;
+
+        typename set_type::hash_tuple_type ht;
+        set_type s( std::move( ht ) );
+        test( s );
+    }
+
+    TEST_F( CuckooSet, refinable_list_ordered_cmpmix )
+    {
+        typedef cc::CuckooSet< int_item
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::mutex_policy< cc::cuckoo::refinable<>>
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
+            >::type
+        > set_type;
+
+        typename set_type::hash_tuple_type ht;
+        set_type s( 32, 6, 0, std::move( ht ) );
+        test( s );
+    }
+
+    TEST_F( CuckooSet, refinable_vector_ordered_cmpmix )
+    {
+        typedef cc::CuckooSet< int_item
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::mutex_policy< cc::cuckoo::refinable<>>
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<6>>
+            >::type
+        > set_type;
+
+        typename set_type::hash_tuple_type ht;
+        set_type s( std::move( ht ) );
+        test( s );
+    }
+
+    TEST_F( CuckooSet, refinable_list_ordered_stat )
+    {
+        typedef cc::CuckooSet< int_item
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::mutex_policy< cc::cuckoo::refinable<>>
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cds::opt::stat< cc::cuckoo::stat >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
+            >::type
+        > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( CuckooSet, refinable_vector_ordered_stat )
+    {
+        typedef cc::CuckooSet< int_item
+            , cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::mutex_policy< cc::cuckoo::refinable<>>
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cds::opt::stat< cc::cuckoo::stat >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<8>>
+            >::type
+        > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( CuckooSet, refinable_list_unordered_storehash )
+    {
+        struct set_traits: public store_hash_traits
+        {
+            typedef cc::cuckoo::refinable<> mutex_policy;
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to equal_to;
+            typedef cc::cuckoo::list     probeset_type;
+            typedef cc::cuckoo::stat     stat;
+        };
+        typedef cc::CuckooSet< int_item, set_traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( CuckooSet, refinable_vector_unordered_storehash )
+    {
+        struct set_traits: public store_hash_traits
+        {
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef cc::cuckoo::refinable<> mutex_policy;
+            typedef base_class::equal_to    equal_to;
+            typedef cc::cuckoo::stat        stat;
+            typedef cc::cuckoo::vector<4>   probeset_type;
+        };
+        typedef cc::CuckooSet< int_item, set_traits > set_type;
+
+        set_type s( 32, 4 );
+        test( s );
+    }
+
+    TEST_F( CuckooSet, refinable_list_ordered_storehash )
+    {
+        typedef cc::CuckooSet< int_item
+            ,cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::mutex_policy< cc::cuckoo::refinable<>>
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
+                ,cc::cuckoo::store_hash< true >
+            >::type
+        > set_type; 
+
+        typename set_type::hash_tuple_type ht;
+        set_type s( 32, 6, 0, std::move( ht ));
+        test( s );
+    }
+
+    TEST_F( CuckooSet, refinable_vector_ordered_storehash )
+    {
+        typedef cc::CuckooSet< int_item
+            ,cc::cuckoo::make_traits<
+                cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::mutex_policy< cc::cuckoo::refinable<>>
+                ,cds::opt::less< less >
+                ,cds::opt::compare< cmp >
+                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<6>>
+                ,cc::cuckoo::store_hash< true >
+            >::type
+        > set_type; 
+
+        typename set_type::hash_tuple_type ht;
+        set_type s( std::move( ht ));
+        test( s );
+    }
+
+
+} // namespace
diff --git a/test/unit/striped-set/intrusive_boost_avl_set.cpp b/test/unit/striped-set/intrusive_boost_avl_set.cpp
new file mode 100644 (file)
index 0000000..47e71b6
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
+
+#include "test_intrusive_striped_set.h"
+#include <cds/intrusive/striped_set/boost_avl_set.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+    namespace bi = boost::intrusive;
+
+    struct test_traits
+    {
+        typedef cds_test::intrusive_set::base_int_item< bi::avl_set_base_hook<> > base_item;
+        typedef cds_test::intrusive_set::member_int_item< bi::avl_set_member_hook<> > member_item;
+
+        typedef bi::avl_set< base_item,
+            bi::compare< cds_test::intrusive_set::less< base_item >>
+        > base_hook_container;
+
+        typedef bi::avl_set< member_item,
+            bi::member_hook< member_item, bi::avl_set_member_hook<>, &member_item::hMember>,
+            bi::compare< cds_test::intrusive_set::less< member_item >>
+        > member_hook_container;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostAvlSet, IntrusiveStripedSet, test_traits );
+
+} // namespace
+
+#endif // CDSUNIT_ENABLE_BOOST_CONTAINER
diff --git a/test/unit/striped-set/intrusive_boost_list.cpp b/test/unit/striped-set/intrusive_boost_list.cpp
new file mode 100644 (file)
index 0000000..48f0a7e
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
+
+#include <cds/intrusive/striped_set/boost_list.h>
+#include "test_intrusive_striped_set.h"
+
+namespace {
+    namespace ci = cds::intrusive;
+    namespace bi = boost::intrusive;
+
+    struct test_traits
+    {
+        typedef cds_test::intrusive_set::base_int_item< bi::list_base_hook<> > base_item;
+        typedef cds_test::intrusive_set::member_int_item< bi::list_member_hook<> > member_item;
+
+        typedef bi::list< base_item, bi::constant_time_size<true>> base_hook_container;
+
+        typedef bi::list< member_item,
+            bi::member_hook< member_item, bi::list_member_hook<>, &member_item::hMember>,
+            bi::constant_time_size<true>
+        > member_hook_container;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostList, IntrusiveStripedSet, test_traits );
+
+} // namespace
+
+#endif // CDSUNIT_ENABLE_BOOST_CONTAINER
diff --git a/test/unit/striped-set/intrusive_boost_set.cpp b/test/unit/striped-set/intrusive_boost_set.cpp
new file mode 100644 (file)
index 0000000..c0757e1
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
+
+//#include <boost/version.hpp>
+//#if BOOST_VERSION >= 105900 && BOOST_VERSION < 106100
+//#   define CDSTEST_REQUIRES_IMPLICIT_CONVERSION_WORKAROUND
+//#endif
+
+#include "test_intrusive_striped_set.h"
+#include <cds/intrusive/striped_set/boost_set.h>
+
+#if 0 //BOOST_VERSION >= 105900
+#   define CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( type ) ,bi::key_of_value< get_key< type >>
+#else
+#   define CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( type )
+#endif 
+
+namespace {
+    namespace ci = cds::intrusive;
+    namespace bi = boost::intrusive;
+
+    template <typename Node>
+    struct get_key
+    {
+        typedef int type;
+
+        int operator()( Node const& v ) const
+        {
+            return v.key();
+        }
+    };
+
+    struct test_traits
+    {
+        typedef cds_test::intrusive_set::base_int_item< bi::set_base_hook<> > base_item;
+        typedef cds_test::intrusive_set::member_int_item< bi::set_member_hook<> > member_item;
+
+        typedef bi::set< base_item,
+            bi::compare< cds_test::intrusive_set::less< base_item >>
+            CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item )
+        > base_hook_container;
+
+        typedef bi::set< member_item,
+            bi::member_hook< member_item, bi::set_member_hook<>, &member_item::hMember>,
+            bi::compare< cds_test::intrusive_set::less< member_item >>
+            CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item )
+        > member_hook_container;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostSet, IntrusiveStripedSet, test_traits );
+
+} // namespace
+
+#endif // CDSUNIT_ENABLE_BOOST_CONTAINER
diff --git a/test/unit/striped-set/intrusive_boost_sg_set.cpp b/test/unit/striped-set/intrusive_boost_sg_set.cpp
new file mode 100644 (file)
index 0000000..9124746
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
+
+#include "test_intrusive_striped_set.h"
+#include <cds/intrusive/striped_set/boost_sg_set.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+    namespace bi = boost::intrusive;
+
+    struct test_traits
+    {
+        typedef cds_test::intrusive_set::base_int_item< bi::bs_set_base_hook<> > base_item;
+        typedef cds_test::intrusive_set::member_int_item< bi::bs_set_member_hook<> > member_item;
+
+        typedef bi::sg_set< base_item,
+            bi::compare< cds_test::intrusive_set::less< base_item >>
+        > base_hook_container;
+
+        typedef bi::sg_set< member_item,
+            bi::member_hook< member_item, bi::bs_set_member_hook<>, &member_item::hMember>,
+            bi::compare< cds_test::intrusive_set::less< member_item >>
+        > member_hook_container;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostSgSet, IntrusiveStripedSet, test_traits );
+
+} // namespace
+
+#endif // CDSUNIT_ENABLE_BOOST_CONTAINER
diff --git a/test/unit/striped-set/intrusive_boost_slist.cpp b/test/unit/striped-set/intrusive_boost_slist.cpp
new file mode 100644 (file)
index 0000000..99fd8c3
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
+
+#include <cds/intrusive/striped_set/boost_slist.h>
+#include "test_intrusive_striped_set.h"
+
+namespace {
+    namespace ci = cds::intrusive;
+    namespace bi = boost::intrusive;
+
+    struct test_traits
+    {
+        typedef cds_test::intrusive_set::base_int_item< bi::slist_base_hook<> > base_item;
+        typedef cds_test::intrusive_set::member_int_item< bi::slist_member_hook<> > member_item;
+
+        typedef bi::slist< base_item, bi::constant_time_size<true>> base_hook_container;
+
+        typedef bi::slist< member_item,
+            bi::member_hook< member_item, bi::slist_member_hook<>, &member_item::hMember>,
+            bi::constant_time_size<true>
+        > member_hook_container;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostSList, IntrusiveStripedSet, test_traits );
+
+} // namespace
+
+#endif // CDSUNIT_ENABLE_BOOST_CONTAINER
diff --git a/test/unit/striped-set/intrusive_boost_splay_set.cpp b/test/unit/striped-set/intrusive_boost_splay_set.cpp
new file mode 100644 (file)
index 0000000..1b40df0
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
+
+#include <boost/version.hpp>
+
+#include "test_intrusive_striped_set.h"
+#include <cds/intrusive/striped_set/boost_splay_set.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+    namespace bi = boost::intrusive;
+
+    struct test_traits
+    {
+#if BOOST_VERSION < 105600
+        typedef bi::splay_set_member_hook<> splay_set_member_hook;
+        typedef bi::splay_set_base_hook<> splay_set_base_hook;
+#else
+        typedef bi::bs_set_base_hook<> splay_set_base_hook;
+        typedef bi::bs_set_member_hook<> splay_set_member_hook;
+#endif 
+        typedef cds_test::intrusive_set::base_int_item< splay_set_base_hook > base_item;
+        typedef cds_test::intrusive_set::member_int_item< splay_set_member_hook > member_item;
+
+        typedef bi::splay_set< base_item,
+            bi::compare< cds_test::intrusive_set::less< base_item >>
+        > base_hook_container;
+
+        typedef bi::splay_set< member_item,
+            bi::member_hook< member_item, splay_set_member_hook, &member_item::hMember>,
+            bi::compare< cds_test::intrusive_set::less< member_item >>
+        > member_hook_container;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostSplaySet, IntrusiveStripedSet, test_traits );
+
+} // namespace
+
+#endif // CDSUNIT_ENABLE_BOOST_CONTAINER
diff --git a/test/unit/striped-set/intrusive_boost_treap_set.cpp b/test/unit/striped-set/intrusive_boost_treap_set.cpp
new file mode 100644 (file)
index 0000000..a681e07
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
+
+#include "test_intrusive_striped_set.h"
+#include <cds/intrusive/striped_set/boost_treap_set.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+    namespace bi = boost::intrusive;
+
+    template <typename T>
+    struct priority_cmp: private cds_test::intrusive_set::less<T>
+    {
+        typedef cds_test::intrusive_set::less<T> base_class;
+
+        template <typename A, typename B>
+        bool operator()( A const& a, B const& b ) const
+        {
+            return base_class::operator()( b, a );
+        }
+    };
+
+    struct test_traits
+    {
+        typedef cds_test::intrusive_set::base_int_item< bi::bs_set_base_hook<> > base_item;
+        typedef cds_test::intrusive_set::member_int_item< bi::bs_set_member_hook<> > member_item;
+
+        typedef bi::treap_set< base_item,
+            bi::compare< cds_test::intrusive_set::less< base_item >>,
+            bi::priority<priority_cmp< base_item >>
+        > base_hook_container;
+
+        typedef bi::treap_set< member_item,
+            bi::member_hook< member_item, bi::bs_set_member_hook<>, &member_item::hMember>,
+            bi::compare< cds_test::intrusive_set::less< member_item >>,
+            bi::priority<priority_cmp< member_item >>
+        > member_hook_container;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostTreapSet, IntrusiveStripedSet, test_traits );
+
+} // namespace
+
+#endif // CDSUNIT_ENABLE_BOOST_CONTAINER
diff --git a/test/unit/striped-set/intrusive_boost_unordered_set.cpp b/test/unit/striped-set/intrusive_boost_unordered_set.cpp
new file mode 100644 (file)
index 0000000..84d4ca4
--- /dev/null
@@ -0,0 +1,326 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TEST_INTRUSIVE_BOOST_UNORDERED_SET_H
+#define CDSUNIT_SET_TEST_INTRUSIVE_BOOST_UNORDERED_SET_H
+
+#ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
+
+#include "test_intrusive_set.h"
+
+#include <cds/intrusive/striped_set/boost_unordered_set.h>
+#include <cds/intrusive/striped_set.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+    namespace bi = boost::intrusive;
+
+    class IntrusiveStripedBoostUnorderedSet: public cds_test::intrusive_set
+    {
+    public:
+        typedef base_int_item< bi::unordered_set_base_hook<>> base_item;
+        typedef member_int_item< bi::unordered_set_member_hook<>> member_item;
+    };
+
+    template <size_t Capacity, typename T, class Alloc = CDS_DEFAULT_ALLOCATOR>
+    struct dyn_buffer: public ci::opt::v::dynamic_buffer< T, Alloc >
+    {
+        typedef ci::opt::v::dynamic_buffer< T, Alloc >   base_class;
+    public:
+        template <typename Q>
+        struct rebind {
+            typedef dyn_buffer<Capacity, Q, Alloc> other;  ///< Rebinding result type
+        };
+
+        dyn_buffer()
+            : base_class( Capacity )
+        {}
+    };
+
+    TEST_F( IntrusiveStripedBoostUnorderedSet, basehook )
+    {
+        typedef ci::StripedSet<
+            bi::unordered_set< base_item
+                , bi::hash< hash1 >
+                , bi::equal< equal_to<base_item> >
+                , bi::power_2_buckets<true>
+                , bi::incremental<true>
+            >
+            ,cds::intrusive::opt::hash< hash2 >
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveStripedBoostUnorderedSet, basehook_resize_bucket_threshold )
+    {
+        typedef ci::StripedSet<
+            bi::unordered_set< base_item
+                , bi::hash< hash1 >
+                , bi::equal< equal_to<base_item> >
+                , bi::power_2_buckets<true>
+                , bi::incremental<true>
+            >
+            ,cds::intrusive::opt::hash< hash2 >
+            ,cds::intrusive::opt::buffer< cds::intrusive::opt::v::static_buffer< cds::any_type, 64 > >
+            ,cds::intrusive::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<256> >
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveStripedBoostUnorderedSet, basehook_resize_bucket_threshold_rt )
+    {
+        typedef ci::StripedSet<
+            bi::unordered_set< base_item
+                , bi::hash< hash1 >
+                , bi::equal< equal_to<base_item> >
+                , bi::power_2_buckets<true>
+                , bi::incremental<true>
+            >
+            ,ci::opt::hash< hash2 >
+            ,ci::opt::buffer< dyn_buffer<64, cds::any_type>>
+            ,ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 128 ) );
+            this->test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveStripedBoostUnorderedSet, memberhook )
+    {
+        typedef ci::StripedSet<
+            bi::unordered_set< member_item
+                , bi::member_hook< member_item, bi::unordered_set_member_hook<>, &member_item::hMember>
+                , bi::hash< hash1 >
+                , bi::equal< equal_to<member_item> >
+                , bi::power_2_buckets<true>
+                , bi::incremental<true>
+            >
+            ,cds::intrusive::opt::hash< hash2 >
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveStripedBoostUnorderedSet, memberhook_resize_bucket_threshold )
+    {
+        typedef ci::StripedSet<
+            bi::unordered_set< member_item
+                , bi::member_hook< member_item, bi::unordered_set_member_hook<>, &member_item::hMember>
+                , bi::hash< hash1 >
+                , bi::equal< equal_to<member_item> >
+                , bi::power_2_buckets<true>
+                , bi::incremental<true>
+            >
+            ,cds::intrusive::opt::hash< hash2 >
+            ,cds::intrusive::opt::buffer< cds::intrusive::opt::v::static_buffer< cds::any_type, 64 > >
+            ,cds::intrusive::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<256> >
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveStripedBoostUnorderedSet, memberhook_resize_bucket_threshold_rt )
+    {
+        typedef ci::StripedSet< 
+            bi::unordered_set< member_item
+                , bi::member_hook< member_item, bi::unordered_set_member_hook<>, &member_item::hMember>
+                , bi::hash< hash1 >
+                , bi::equal< equal_to<member_item> >
+                , bi::power_2_buckets<true>
+                , bi::incremental<true>
+            >
+            ,ci::opt::hash< hash2 >
+            ,ci::opt::buffer< dyn_buffer<64, cds::any_type>>
+            ,ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 128 ) );
+            this->test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveStripedBoostUnorderedSet, refinable_basehook )
+    {
+        typedef ci::StripedSet<
+            bi::unordered_set< base_item
+                , bi::hash< hash1 >
+                , bi::equal< equal_to<base_item> >
+                , bi::power_2_buckets<true>
+                , bi::incremental<true>
+            >
+            ,cds::intrusive::opt::hash< hash2 >
+            ,ci::opt::mutex_policy< ci::striped_set::refinable<> >
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveStripedBoostUnorderedSet, refinable_basehook_resize_bucket_threshold )
+    {
+        typedef ci::StripedSet<
+            bi::unordered_set< base_item
+                , bi::hash< hash1 >
+                , bi::equal< equal_to<base_item> >
+                , bi::power_2_buckets<true>
+                , bi::incremental<true>
+            >
+            ,ci::opt::mutex_policy< ci::striped_set::refinable<> >
+            ,cds::intrusive::opt::hash< hash2 >
+            ,cds::intrusive::opt::buffer< cds::intrusive::opt::v::static_buffer< cds::any_type, 64 > >
+            ,cds::intrusive::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<256> >
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveStripedBoostUnorderedSet, refinable_basehook_resize_bucket_threshold_rt )
+    {
+        typedef ci::StripedSet<
+            bi::unordered_set< base_item
+                , bi::hash< hash1 >
+                , bi::equal< equal_to<base_item> >
+                , bi::power_2_buckets<true>
+                , bi::incremental<true>
+            >
+            ,ci::opt::hash< hash2 >
+            ,ci::opt::mutex_policy< ci::striped_set::refinable<> >
+            ,ci::opt::buffer< dyn_buffer<64, cds::any_type>>
+            ,ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 128 ) );
+            this->test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveStripedBoostUnorderedSet, refinable_memberhook )
+    {
+        typedef ci::StripedSet<
+            bi::unordered_set< member_item
+                , bi::member_hook< member_item, bi::unordered_set_member_hook<>, &member_item::hMember>
+                , bi::hash< hash1 >
+                , bi::equal< equal_to<member_item> >
+                , bi::power_2_buckets<true>
+                , bi::incremental<true>
+            >
+            ,cds::intrusive::opt::hash< hash2 >
+            ,ci::opt::mutex_policy< ci::striped_set::refinable<> >
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveStripedBoostUnorderedSet, refinable_memberhook_resize_bucket_threshold )
+    {
+        typedef ci::StripedSet<
+            bi::unordered_set< member_item
+                , bi::member_hook< member_item, bi::unordered_set_member_hook<>, &member_item::hMember>
+                , bi::hash< hash1 >
+                , bi::equal< equal_to<member_item> >
+                , bi::power_2_buckets<true>
+                , bi::incremental<true>
+            >
+            ,cds::intrusive::opt::hash< hash2 >
+            ,ci::opt::mutex_policy< ci::striped_set::refinable<> >
+            ,cds::intrusive::opt::buffer< cds::intrusive::opt::v::static_buffer< cds::any_type, 64 > >
+            ,cds::intrusive::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<256> >
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveStripedBoostUnorderedSet, refinable_memberhook_resize_bucket_threshold_rt )
+    {
+        typedef ci::StripedSet< 
+            bi::unordered_set< member_item
+                , bi::member_hook< member_item, bi::unordered_set_member_hook<>, &member_item::hMember>
+                , bi::hash< hash1 >
+                , bi::equal< equal_to<member_item> >
+                , bi::power_2_buckets<true>
+                , bi::incremental<true>
+            >
+            ,ci::opt::hash< hash2 >
+            ,ci::opt::mutex_policy< ci::striped_set::refinable<> >
+            ,ci::opt::buffer< dyn_buffer<64, cds::any_type>>
+            ,ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 128 ) );
+            this->test( s, data );
+        }
+    }
+
+} // namespace
+
+#endif // #ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
+#endif // CDSUNIT_SET_TEST_INTRUSIVE_BOOST_UNORDERED_SET_H
diff --git a/test/unit/striped-set/intrusive_cuckoo_set.cpp b/test/unit/striped-set/intrusive_cuckoo_set.cpp
new file mode 100644 (file)
index 0000000..05692fb
--- /dev/null
@@ -0,0 +1,1407 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_set.h"
+
+#include <cds/intrusive/cuckoo_set.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+
+    class IntrusiveCuckooSet : public cds_test::intrusive_set
+    {
+    protected:
+        typedef cds_test::intrusive_set base_class;
+
+        typedef base_class::hash_int hash1;
+
+
+        template <typename Set>
+        void test( Set& s, std::vector< typename Set::value_type >& data )
+        {
+            // Precondition: set is empty
+            // Postcondition: set is empty
+
+            base_class::test_< Set::c_isSorted>( s, data );
+
+            typedef typename Set::value_type value_type;
+            size_t const nSetSize = base_class::kSize;
+
+            // clear
+            for ( auto& i : data ) {
+                i.clear_stat();
+                ASSERT_TRUE( s.insert( i ) );
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            s.clear();
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nDisposeCount, 1 );
+            }
+
+        }
+
+        //void SetUp()
+        //{}
+
+        //void TearDown()
+        //{}
+    };
+
+
+//************************************************************
+// striped base hook
+
+    TEST_F( IntrusiveCuckooSet, striped_list_basehook_unordered )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::list, 0 > >  item_type;
+        struct set_traits: public ci::cuckoo::traits
+        {
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to<item_type> equal_to;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::CuckooSet< item_type, set_traits > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_vector_basehook_unordered )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 0 >> item_type;
+        struct set_traits: public ci::cuckoo::traits
+        {
+            typedef ci::cuckoo::base_hook< ci::cuckoo::probeset_type< item_type::probeset_type >> hook;
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to<item_type> equal_to;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::CuckooSet< item_type, set_traits > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 4 );
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_list_basehook_ordered_cmp )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::list, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::base_hook<
+                    ci::cuckoo::probeset_type< item_type::probeset_type >
+                > >
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::compare< cmp<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 6, 4 );
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_vector_basehook_ordered_cmp )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::vector<8>, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::base_hook<
+                    ci::cuckoo::probeset_type< item_type::probeset_type >
+                > >
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::compare< cmp<item_type> >
+                , ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( ht );
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_list_basehook_ordered_less )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::list, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::base_hook<
+                    ci::cuckoo::probeset_type< item_type::probeset_type >
+                > >
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                , ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 4, ht );
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_vector_basehook_ordered_less )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::vector<6>, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::base_hook<
+                    ci::cuckoo::probeset_type< item_type::probeset_type >
+                > >
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_list_basehook_ordered_cmpmix )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::list, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::base_hook<
+                    ci::cuckoo::probeset_type< item_type::probeset_type >
+                > >
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                ,ci::opt::compare< cmp<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 0, std::move( ht ));
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_vector_basehook_ordered_cmpmix )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::vector<6>, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::base_hook<
+                    ci::cuckoo::probeset_type< item_type::probeset_type >
+                > >
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                ,ci::opt::compare< cmp<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_list_basehook_ordered_stat )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::list, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::base_hook<
+                    ci::cuckoo::probeset_type< item_type::probeset_type >
+                > >
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                ,ci::opt::compare< cmp<item_type> >
+                ,ci::opt::stat< ci::cuckoo::stat >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_vector_basehook_ordered_stat )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::vector<6>, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::base_hook<
+                    ci::cuckoo::probeset_type< item_type::probeset_type >
+                > >
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                ,ci::opt::compare< cmp<item_type> >
+                ,ci::opt::stat< ci::cuckoo::stat >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_list_basehook_unordered_storehash )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::list, 2 >> item_type;
+        struct set_traits: public ci::cuckoo::traits
+        {
+            typedef ci::cuckoo::base_hook< 
+                ci::cuckoo::probeset_type< item_type::probeset_type >
+                ,ci::cuckoo::store_hash< item_type::hash_array_size >
+            > hook;
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to<item_type> equal_to;
+            typedef mock_disposer disposer;
+            typedef ci::cuckoo::stat stat;
+        };
+        typedef ci::CuckooSet< item_type, set_traits > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_vector_basehook_unordered_storehash )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 2 >> item_type;
+        struct set_traits: public ci::cuckoo::traits
+        {
+            typedef ci::cuckoo::base_hook< 
+                ci::cuckoo::probeset_type< item_type::probeset_type >
+                ,ci::cuckoo::store_hash< item_type::hash_array_size >
+            > hook;
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to<item_type> equal_to;
+            typedef mock_disposer disposer;
+            typedef ci::cuckoo::stat stat;
+        };
+        typedef ci::CuckooSet< item_type, set_traits > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 4 );
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_list_basehook_ordered_storehash )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::list, 2 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::base_hook<
+                    ci::cuckoo::probeset_type< item_type::probeset_type >
+                    ,ci::cuckoo::store_hash< item_type::hash_array_size >
+                > >
+                ,cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less<item_type> >
+                ,cds::opt::compare< cmp<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 0, std::move( ht ));
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_vector_basehook_ordered_storehash )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::vector<6>, 2 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::base_hook<
+                    ci::cuckoo::probeset_type< item_type::probeset_type >
+                    ,ci::cuckoo::store_hash< item_type::hash_array_size >
+                > >
+                ,cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less<item_type> >
+                ,cds::opt::compare< cmp<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
+    }
+
+//************************************************************
+// striped member hook
+
+    TEST_F( IntrusiveCuckooSet, striped_list_memberhook_unordered )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::list, 0 > >  item_type;
+        struct set_traits: public ci::cuckoo::traits
+        {
+            typedef ci::cuckoo::member_hook< offsetof( item_type, hMember )> hook;
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to<item_type> equal_to;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::CuckooSet< item_type, set_traits > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_vector_memberhook_unordered )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 0 >> item_type;
+        struct set_traits: public ci::cuckoo::traits
+        {
+            
+            typedef ci::cuckoo::member_hook< offsetof( item_type, hMember ), ci::cuckoo::probeset_type< item_type::member_type::probeset_type >> hook;
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to<item_type> equal_to;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::CuckooSet< item_type, set_traits > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 4 );
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_list_memberhook_ordered_cmp )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::list, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                    ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                > >
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::compare< cmp<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 6, 4 );
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_vector_memberhook_ordered_cmp )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::vector<8>, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                    ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                > >
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::compare< cmp<item_type> >
+                , ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( ht );
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_list_memberhook_ordered_less )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::list, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                    ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                > >
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                , ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 4, ht );
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_vector_memberhook_ordered_less )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::vector<6>, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                    ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                > >
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_list_memberhook_ordered_cmpmix )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::list, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                    ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                > >
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                ,ci::opt::compare< cmp<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 0, std::move( ht ));
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_vector_memberhook_ordered_cmpmix )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::vector<6>, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                    ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                > >
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                ,ci::opt::compare< cmp<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_list_memberhook_ordered_stat )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::list, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                    ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                > >
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                ,ci::opt::compare< cmp<item_type> >
+                ,ci::opt::stat< ci::cuckoo::stat >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_vector_memberhook_ordered_stat )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::vector<6>, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                    ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                > >
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                ,ci::opt::compare< cmp<item_type> >
+                ,ci::opt::stat< ci::cuckoo::stat >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_list_memberhook_unordered_storehash )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::list, 2 >> item_type;
+        struct set_traits: public ci::cuckoo::traits
+        {
+            typedef ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                ,ci::cuckoo::store_hash< item_type::member_type::hash_array_size >
+            > hook;
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to<item_type> equal_to;
+            typedef mock_disposer disposer;
+            typedef ci::cuckoo::stat stat;
+        };
+        typedef ci::CuckooSet< item_type, set_traits > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_vector_memberhook_unordered_storehash )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 2 >> item_type;
+        struct set_traits: public ci::cuckoo::traits
+        {
+            typedef ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                ,ci::cuckoo::store_hash< item_type::member_type::hash_array_size >
+            > hook;
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to<item_type> equal_to;
+            typedef mock_disposer disposer;
+            typedef ci::cuckoo::stat stat;
+        };
+        typedef ci::CuckooSet< item_type, set_traits > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 4 );
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_list_memberhook_ordered_storehash )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::list, 2 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                    ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                    ,ci::cuckoo::store_hash< item_type::member_type::hash_array_size >
+                > >
+                ,cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less<item_type> >
+                ,cds::opt::compare< cmp<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 0, std::move( ht ));
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, striped_vector_memberhook_ordered_storehash )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::vector<6>, 2 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                    ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                    ,ci::cuckoo::store_hash< item_type::member_type::hash_array_size >
+                > >
+                ,cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less<item_type> >
+                ,cds::opt::compare< cmp<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
+    }
+
+//************************************************************
+// refinable base hook
+
+    TEST_F( IntrusiveCuckooSet, refinable_list_basehook_unordered )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::list, 0 > >  item_type;
+        struct set_traits: public ci::cuckoo::traits
+        {
+            typedef ci::cuckoo::refinable<> mutex_policy;
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to<item_type> equal_to;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::CuckooSet< item_type, set_traits > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_vector_basehook_unordered )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 0 >> item_type;
+        struct set_traits: public ci::cuckoo::traits
+        {
+            typedef ci::cuckoo::refinable<> mutex_policy;
+            typedef ci::cuckoo::base_hook< ci::cuckoo::probeset_type< item_type::probeset_type >> hook;
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to<item_type> equal_to;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::CuckooSet< item_type, set_traits > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 4 );
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_list_basehook_ordered_cmp )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::list, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::base_hook<
+                    ci::cuckoo::probeset_type< item_type::probeset_type >
+                > >
+                ,ci::opt::mutex_policy<ci::cuckoo::refinable<>>
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::compare< cmp<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 6, 4 );
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_vector_basehook_ordered_cmp )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::vector<8>, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::base_hook<
+                    ci::cuckoo::probeset_type< item_type::probeset_type >
+                > >
+                ,ci::opt::mutex_policy<ci::cuckoo::refinable<>>
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::compare< cmp<item_type> >
+                , ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( ht );
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_list_basehook_ordered_less )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::list, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::base_hook<
+                    ci::cuckoo::probeset_type< item_type::probeset_type >
+                > >
+                ,ci::opt::mutex_policy<ci::cuckoo::refinable<>>
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 4, ht );
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_vector_basehook_ordered_less )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::vector<6>, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::base_hook<
+                    ci::cuckoo::probeset_type< item_type::probeset_type >
+                > >
+                ,ci::opt::mutex_policy<ci::cuckoo::refinable<>>
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_list_basehook_ordered_cmpmix )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::list, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::base_hook<
+                    ci::cuckoo::probeset_type< item_type::probeset_type >
+                > >
+                ,ci::opt::mutex_policy<ci::cuckoo::refinable<>>
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                ,ci::opt::compare< cmp<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 0, std::move( ht ));
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_vector_basehook_ordered_cmpmix )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::vector<6>, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::base_hook<
+                    ci::cuckoo::probeset_type< item_type::probeset_type >
+                > >
+                ,ci::opt::mutex_policy<ci::cuckoo::refinable<>>
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                ,ci::opt::compare< cmp<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_list_basehook_ordered_stat )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::list, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::base_hook<
+                    ci::cuckoo::probeset_type< item_type::probeset_type >
+                > >
+                ,ci::opt::mutex_policy<ci::cuckoo::refinable<>>
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                ,ci::opt::compare< cmp<item_type> >
+                ,ci::opt::stat< ci::cuckoo::stat >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_vector_basehook_ordered_stat )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::vector<6>, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::base_hook<
+                    ci::cuckoo::probeset_type< item_type::probeset_type >
+                > >
+                ,ci::opt::mutex_policy<ci::cuckoo::refinable<>>
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                ,ci::opt::compare< cmp<item_type> >
+                ,ci::opt::stat< ci::cuckoo::stat >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_list_basehook_unordered_storehash )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::list, 2 >> item_type;
+        struct set_traits: public ci::cuckoo::traits
+        {
+            typedef ci::cuckoo::base_hook< 
+                ci::cuckoo::probeset_type< item_type::probeset_type >
+                ,ci::cuckoo::store_hash< item_type::hash_array_size >
+            > hook;
+            typedef ci::cuckoo::refinable<> mutex_policy;
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to<item_type> equal_to;
+            typedef mock_disposer disposer;
+            typedef ci::cuckoo::stat stat;
+        };
+        typedef ci::CuckooSet< item_type, set_traits > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_vector_basehook_unordered_storehash )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 2 >> item_type;
+        struct set_traits: public ci::cuckoo::traits
+        {
+            typedef ci::cuckoo::base_hook< 
+                ci::cuckoo::probeset_type< item_type::probeset_type >
+                ,ci::cuckoo::store_hash< item_type::hash_array_size >
+            > hook;
+            typedef ci::cuckoo::refinable<> mutex_policy;
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to<item_type> equal_to;
+            typedef mock_disposer disposer;
+            typedef ci::cuckoo::stat stat;
+        };
+        typedef ci::CuckooSet< item_type, set_traits > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 4 );
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_list_basehook_ordered_storehash )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::list, 2 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::base_hook<
+                    ci::cuckoo::probeset_type< item_type::probeset_type >
+                    ,ci::cuckoo::store_hash< item_type::hash_array_size >
+                > >
+                ,ci::opt::mutex_policy<ci::cuckoo::refinable<>>
+                ,cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less<item_type> >
+                ,cds::opt::compare< cmp<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 0, std::move( ht ));
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_vector_basehook_ordered_storehash )
+    {
+        typedef base_class::base_int_item< ci::cuckoo::node< ci::cuckoo::vector<6>, 2 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::base_hook<
+                    ci::cuckoo::probeset_type< item_type::probeset_type >
+                    ,ci::cuckoo::store_hash< item_type::hash_array_size >
+                > >
+                ,ci::opt::mutex_policy<ci::cuckoo::refinable<>>
+                ,cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less<item_type> >
+                ,cds::opt::compare< cmp<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
+    }
+
+//************************************************************
+// refinable member hook
+
+    TEST_F( IntrusiveCuckooSet, refinable_list_memberhook_unordered )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::list, 0 > >  item_type;
+        struct set_traits: public ci::cuckoo::traits
+        {
+            typedef ci::cuckoo::member_hook< offsetof( item_type, hMember )> hook;
+            typedef ci::cuckoo::refinable<> mutex_policy;
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to<item_type> equal_to;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::CuckooSet< item_type, set_traits > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_vector_memberhook_unordered )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 0 >> item_type;
+        struct set_traits: public ci::cuckoo::traits
+        {
+            
+            typedef ci::cuckoo::member_hook< offsetof( item_type, hMember ), ci::cuckoo::probeset_type< item_type::member_type::probeset_type >> hook;
+            typedef ci::cuckoo::refinable<> mutex_policy;
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to<item_type> equal_to;
+            typedef mock_disposer disposer;
+        };
+        typedef ci::CuckooSet< item_type, set_traits > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 4 );
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_list_memberhook_ordered_cmp )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::list, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                    ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                > >
+                ,ci::opt::mutex_policy<ci::cuckoo::refinable<>>
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::compare< cmp<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 6, 4 );
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_vector_memberhook_ordered_cmp )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::vector<8>, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                    ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                > >
+                ,ci::opt::mutex_policy<ci::cuckoo::refinable<>>
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::compare< cmp<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( ht );
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_list_memberhook_ordered_less )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::list, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                    ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                > >
+                ,ci::opt::mutex_policy<ci::cuckoo::refinable<>>
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 4, ht );
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_vector_memberhook_ordered_less )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::vector<6>, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                    ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                > >
+                ,ci::opt::mutex_policy<ci::cuckoo::refinable<>>
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_list_memberhook_ordered_cmpmix )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::list, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                    ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                > >
+                ,ci::opt::mutex_policy<ci::cuckoo::refinable<>>
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                ,ci::opt::compare< cmp<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 0, std::move( ht ));
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_vector_memberhook_ordered_cmpmix )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::vector<6>, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                    ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                > >
+                ,ci::opt::mutex_policy<ci::cuckoo::refinable<>>
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                ,ci::opt::compare< cmp<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_list_memberhook_ordered_stat )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::list, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                    ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                > >
+                ,ci::opt::mutex_policy<ci::cuckoo::refinable<>>
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                ,ci::opt::compare< cmp<item_type> >
+                ,ci::opt::stat< ci::cuckoo::stat >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_vector_memberhook_ordered_stat )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::vector<6>, 0 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                    ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                > >
+                ,ci::opt::mutex_policy<ci::cuckoo::refinable<>>
+                ,ci::opt::hash< std::tuple< hash1, hash2 > >
+                ,ci::opt::less< less<item_type> >
+                ,ci::opt::compare< cmp<item_type> >
+                ,ci::opt::stat< ci::cuckoo::stat >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_list_memberhook_unordered_storehash )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::list, 2 >> item_type;
+        struct set_traits: public ci::cuckoo::traits
+        {
+            typedef ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                ,ci::cuckoo::store_hash< item_type::member_type::hash_array_size >
+            > hook;
+            typedef ci::cuckoo::refinable<> mutex_policy;
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to<item_type> equal_to;
+            typedef mock_disposer disposer;
+            typedef ci::cuckoo::stat stat;
+        };
+        typedef ci::CuckooSet< item_type, set_traits > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_vector_memberhook_unordered_storehash )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 2 >> item_type;
+        struct set_traits: public ci::cuckoo::traits
+        {
+            typedef ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                ,ci::cuckoo::store_hash< item_type::member_type::hash_array_size >
+            > hook;
+            typedef ci::cuckoo::refinable<> mutex_policy;
+            typedef cds::opt::hash_tuple< hash1, hash2 > hash;
+            typedef base_class::equal_to<item_type> equal_to;
+            typedef mock_disposer disposer;
+            typedef ci::cuckoo::stat stat;
+        };
+        typedef ci::CuckooSet< item_type, set_traits > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32, 4 );
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_list_memberhook_ordered_storehash )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::list, 2 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                    ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                    ,ci::cuckoo::store_hash< item_type::member_type::hash_array_size >
+                > >
+                ,ci::opt::mutex_policy<ci::cuckoo::refinable<>>
+                ,cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less<item_type> >
+                ,cds::opt::compare< cmp<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( 32, 6, 0, std::move( ht ));
+            test( s, data );
+        }
+    }
+
+    TEST_F( IntrusiveCuckooSet, refinable_vector_memberhook_ordered_storehash )
+    {
+        typedef base_class::member_int_item< ci::cuckoo::node< ci::cuckoo::vector<6>, 2 >> item_type;
+
+        typedef ci::CuckooSet< item_type
+            ,ci::cuckoo::make_traits<
+                ci::opt::hook< ci::cuckoo::member_hook< offsetof( item_type, hMember ),
+                    ci::cuckoo::probeset_type< item_type::member_type::probeset_type >
+                    ,ci::cuckoo::store_hash< item_type::member_type::hash_array_size >
+                > >
+                ,ci::opt::mutex_policy<ci::cuckoo::refinable<>>
+                ,cds::opt::hash< std::tuple< hash1, hash2 > >
+                ,cds::opt::less< less<item_type> >
+                ,cds::opt::compare< cmp<item_type> >
+                ,ci::opt::disposer< mock_disposer >
+            >::type
+        > set_type; 
+
+        std::vector< typename set_type::value_type > data;
+        {
+            typename set_type::hash_tuple_type ht;
+            set_type s( std::move( ht ));
+            test( s, data );
+        }
+    }
+
+} // namespace
diff --git a/test/unit/striped-set/set_boost_flatset.cpp b/test/unit/striped-set/set_boost_flatset.cpp
new file mode 100644 (file)
index 0000000..755a925
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
+
+#include <boost/version.hpp>
+#include <cds/details/defs.h>
+#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION < 105600
+    // Skipped; for Microsoft Visual C++ 2013 and boost::container::flat_set you should use boost version 1.56 or above" );
+#elif BOOST_VERSION >= 104800
+
+#include <cds/container/striped_set/boost_flat_set.h>
+#include "test_striped_set.h"
+
+namespace {
+    struct test_traits
+    {
+        typedef boost::container::flat_set< cds_test::container_set::int_item, cds_test::container_set::less > container_type;
+
+        struct copy_policy {
+            typedef container_type::iterator iterator;
+
+            void operator()( container_type& set, iterator itWhat )
+            {
+                set.insert( *itWhat );
+            }
+        };
+
+        static bool const c_hasFindWith = false;
+        static bool const c_hasEraseWith = false;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostFlatSet, StripedSet, test_traits );
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostFlatSet, RefinableSet, test_traits );
+
+} // namespace
+
+#else // BOOST_VERSION < 104800
+    // Skipped; for boost::container::flat_set you should use boost version 1.48 or above
+#endif  // BOOST_VERSION
+
+#endif // CDSUNIT_ENABLE_BOOST_CONTAINER
diff --git a/test/unit/striped-set/set_boost_list.cpp b/test/unit/striped-set/set_boost_list.cpp
new file mode 100644 (file)
index 0000000..0b6de58
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
+
+#include <boost/version.hpp>
+#include <cds/details/defs.h>
+#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION < 105600
+    // Skipped; for Microsoft Visual C++ 2013 and boost::container::list you should use boost version 1.56 or above" );
+#elif BOOST_VERSION >= 104800
+
+#include <cds/container/striped_set/boost_list.h>
+#include "test_striped_set.h"
+
+namespace {
+    struct test_traits
+    {
+        typedef boost::container::list< cds_test::container_set::int_item > container_type;
+
+        struct copy_policy {
+            typedef container_type::iterator iterator;
+
+            void operator()( container_type& list, iterator itInsert, iterator itWhat )
+            {
+                list.insert( itInsert, *itWhat );
+            }
+        };
+
+        static bool const c_hasFindWith = true;
+        static bool const c_hasEraseWith = true;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostList, StripedSet, test_traits );
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostList, RefinableSet, test_traits );
+
+} // namespace
+
+#else // BOOST_VERSION < 104800
+    // Skipped; for boost::container::list you should use boost version 1.48 or above
+#endif  // BOOST_VERSION
+
+#endif // CDSUNIT_ENABLE_BOOST_CONTAINER
diff --git a/test/unit/striped-set/set_boost_set.cpp b/test/unit/striped-set/set_boost_set.cpp
new file mode 100644 (file)
index 0000000..3c802f2
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
+
+#include <boost/version.hpp>
+#include <cds/details/defs.h>
+#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION < 105500
+    // Skipped; for Microsoft Visual C++ 2013 and boost::container::set you should use boost version 1.55 or above" );
+#elif BOOST_VERSION >= 104800
+
+#include <cds/container/striped_set/boost_set.h>
+#include "test_striped_set.h"
+
+namespace {
+    struct test_traits
+    {
+        typedef boost::container::set< cds_test::container_set::int_item, cds_test::container_set::less > container_type;
+
+        struct copy_policy {
+            typedef container_type::iterator iterator;
+
+            void operator()( container_type& set, iterator itWhat )
+            {
+                set.insert( *itWhat );
+            }
+        };
+
+        static bool const c_hasFindWith = false;
+        static bool const c_hasEraseWith = false;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostSet, StripedSet, test_traits );
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostSet, RefinableSet, test_traits );
+
+} // namespace
+
+#else // BOOST_VERSION < 104800
+    // Skipped; for boost::container::set you should use boost version 1.48 or above
+#endif  // BOOST_VERSION
+
+#endif // CDSUNIT_ENABLE_BOOST_CONTAINER
diff --git a/test/unit/striped-set/set_boost_slist.cpp b/test/unit/striped-set/set_boost_slist.cpp
new file mode 100644 (file)
index 0000000..82c047e
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
+
+#include <boost/version.hpp>
+#include <cds/details/defs.h>
+#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION < 105500
+    // Skipped; for Microsoft Visual C++ 2013 and boost::container::slist you should use boost version 1.55 or above" );
+#elif BOOST_VERSION >= 104800
+
+#include <cds/container/striped_set/boost_slist.h>
+#include "test_striped_set.h"
+
+namespace {
+    struct test_traits
+    {
+        typedef boost::container::slist< cds_test::container_set::int_item > container_type;
+
+        struct copy_policy {
+            typedef container_type::iterator iterator;
+
+            void operator()( container_type& list, iterator itInsert, iterator itWhat )
+            {
+                list.insert_after( itInsert, *itWhat );
+            }
+        };
+
+        static bool const c_hasFindWith = true;
+        static bool const c_hasEraseWith = true;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostSList, StripedSet, test_traits );
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostSList, RefinableSet, test_traits );
+
+} // namespace
+
+#else // BOOST_VERSION < 104800
+    // Skipped; for boost::container::slist you should use boost version 1.48 or above
+#endif  // BOOST_VERSION
+
+#endif // CDSUNIT_ENABLE_BOOST_CONTAINER
diff --git a/test/unit/striped-set/set_boost_stable_vector.cpp b/test/unit/striped-set/set_boost_stable_vector.cpp
new file mode 100644 (file)
index 0000000..3973d42
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
+
+#include <boost/version.hpp>
+#include <cds/details/defs.h>
+#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION < 105500
+    // Skipped; for Microsoft Visual C++ 2013 and boost::container::stable_vector you should use boost version 1.55 or above" );
+#elif BOOST_VERSION >= 104800
+
+#include <cds/container/striped_set/boost_stable_vector.h>
+#include "test_striped_set.h"
+
+namespace {
+    struct test_traits
+    {
+        typedef boost::container::stable_vector< cds_test::container_set::int_item > container_type;
+
+        struct copy_policy {
+            typedef container_type::iterator iterator;
+
+            void operator()( container_type& vec, iterator itInsert, iterator itWhat )
+            {
+                vec.insert( itInsert, *itWhat );
+            }
+        };
+
+        static bool const c_hasFindWith = true;
+        static bool const c_hasEraseWith = true;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostStableVector, StripedSet, test_traits );
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostStableVector, RefinableSet, test_traits );
+
+} // namespace
+
+#else // BOOST_VERSION < 104800
+    // Skipped; for boost::container::stable_vector you should use boost version 1.48 or above
+#endif  // BOOST_VERSION
+
+#endif // CDSUNIT_ENABLE_BOOST_CONTAINER
diff --git a/test/unit/striped-set/set_boost_unordered_set.cpp b/test/unit/striped-set/set_boost_unordered_set.cpp
new file mode 100644 (file)
index 0000000..92ba828
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
+
+#include <cds/container/striped_set/boost_unordered_set.h>
+#include "test_striped_set.h"
+
+namespace {
+    struct test_traits
+    {
+        typedef boost::unordered_set< cds_test::container_set::int_item, cds_test::container_set::hash2, cds_test::container_set::equal_to > container_type;
+
+        struct copy_policy {
+            typedef container_type::iterator iterator;
+
+            void operator()( container_type& set, iterator itWhat )
+            {
+                set.insert( *itWhat );
+            }
+        };
+
+        static bool const c_hasFindWith = false;
+        static bool const c_hasEraseWith = false;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostUnorderedSet, StripedSet, test_traits );
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostUnorderedSet, RefinableSet, test_traits );
+
+} // namespace
+
+#endif // CDSUNIT_ENABLE_BOOST_CONTAINER
diff --git a/test/unit/striped-set/set_boost_vector.cpp b/test/unit/striped-set/set_boost_vector.cpp
new file mode 100644 (file)
index 0000000..84cb71c
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifdef CDSUNIT_ENABLE_BOOST_CONTAINER
+
+#include <boost/version.hpp>
+#include <cds/details/defs.h>
+#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION < 105500
+    // Skipped; for Microsoft Visual C++ 2013 and boost::container::vector you should use boost version 1.55 or above
+#elif BOOST_VERSION >= 104800
+
+#include <cds/container/striped_set/boost_vector.h>
+#include "test_striped_set.h"
+
+namespace {
+    struct test_traits
+    {
+        typedef boost::container::vector< cds_test::container_set::int_item > container_type;
+
+        struct copy_policy {
+            typedef container_type::iterator iterator;
+
+            void operator()( container_type& vector, iterator itInsert, iterator itWhat )
+            {
+                vector.insert( itInsert, *itWhat );
+            }
+        };
+
+        static bool const c_hasFindWith = true;
+        static bool const c_hasEraseWith = true;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostVector, StripedSet, test_traits );
+    INSTANTIATE_TYPED_TEST_CASE_P( BoostVector, RefinableSet, test_traits );
+
+} // namespace
+
+#else // BOOST_VERSION < 104800
+    // Skipped; for boost::container::vector you should use boost version 1.48 or above
+#endif  // BOOST_VERSION
+
+#endif // CDSUNIT_ENABLE_BOOST_CONTAINER
diff --git a/test/unit/striped-set/set_std_list.cpp b/test/unit/striped-set/set_std_list.cpp
new file mode 100644 (file)
index 0000000..225f647
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include <cds/container/striped_set/std_list.h>
+#include "test_striped_set.h"
+
+namespace {
+    struct test_traits
+    {
+        typedef std::list< cds_test::container_set::int_item > container_type;
+
+        struct copy_policy {
+            typedef container_type::iterator iterator;
+
+            void operator()( container_type& list, iterator itInsert, iterator itWhat )
+            {
+                list.insert( itInsert, *itWhat );
+            }
+        };
+
+        static bool const c_hasFindWith = true;
+        static bool const c_hasEraseWith = true;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( StdList, StripedSet, test_traits );
+    INSTANTIATE_TYPED_TEST_CASE_P( StdList, RefinableSet, test_traits );
+
+} // namespace
diff --git a/test/unit/striped-set/set_std_set.cpp b/test/unit/striped-set/set_std_set.cpp
new file mode 100644 (file)
index 0000000..0de7ee4
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include <cds/container/striped_set/std_set.h>
+#include "test_striped_set.h"
+
+namespace {
+    struct test_traits
+    {
+        typedef std::set< cds_test::container_set::int_item, cds_test::container_set::less > container_type;
+
+        struct copy_policy {
+            typedef container_type::iterator iterator;
+
+            void operator()( container_type& set, iterator itWhat )
+            {
+                set.insert( *itWhat );
+            }
+        };
+
+        static bool const c_hasFindWith = false;
+        static bool const c_hasEraseWith = false;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( StdSet, StripedSet, test_traits );
+    INSTANTIATE_TYPED_TEST_CASE_P( StdSet, RefinableSet, test_traits );
+
+} // namespace
diff --git a/test/unit/striped-set/set_std_unordered_set.cpp b/test/unit/striped-set/set_std_unordered_set.cpp
new file mode 100644 (file)
index 0000000..d3aacf3
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include <cds/container/striped_set/std_hash_set.h>
+#include "test_striped_set.h"
+
+namespace {
+    struct test_traits
+    {
+        typedef std::unordered_set< cds_test::container_set::int_item, cds_test::container_set::hash2, cds_test::container_set::equal_to > container_type;
+
+        struct copy_policy {
+            typedef container_type::iterator iterator;
+
+            void operator()( container_type& set, iterator itWhat )
+            {
+                set.insert( *itWhat );
+            }
+        };
+
+        static bool const c_hasFindWith = false;
+        static bool const c_hasEraseWith = false;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( StdUnorderedSet, StripedSet, test_traits );
+    INSTANTIATE_TYPED_TEST_CASE_P( StdUnorderedSet, RefinableSet, test_traits );
+
+} // namespace
diff --git a/test/unit/striped-set/set_std_vector.cpp b/test/unit/striped-set/set_std_vector.cpp
new file mode 100644 (file)
index 0000000..85e475b
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include <cds/container/striped_set/std_vector.h>
+#include "test_striped_set.h"
+
+namespace {
+    struct test_traits
+    {
+        typedef std::vector< cds_test::container_set::int_item > container_type;
+
+        struct copy_policy {
+            typedef container_type::iterator iterator;
+
+            void operator()( container_type& list, iterator itInsert, iterator itWhat )
+            {
+                list.insert( itInsert, *itWhat );
+            }
+        };
+
+        static bool const c_hasFindWith = true;
+        static bool const c_hasEraseWith = true;
+    };
+
+    INSTANTIATE_TYPED_TEST_CASE_P( StdVector, StripedSet, test_traits );
+    INSTANTIATE_TYPED_TEST_CASE_P( StdVector, RefinableSet, test_traits );
+
+} // namespace
diff --git a/test/unit/striped-set/test_intrusive_set.h b/test/unit/striped-set/test_intrusive_set.h
new file mode 100644 (file)
index 0000000..0e6acfa
--- /dev/null
@@ -0,0 +1,509 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_STRIPED_SET_TEST_INTRUSIVE_SET_H
+#define CDSUNIT_STRIPED_SET_TEST_INTRUSIVE_SET_H
+
+#include <cds_test/check_size.h>
+#include <cds_test/fixture.h>
+
+#include <cds/opt/hash.h>
+
+// forward declaration
+namespace cds { namespace intrusive {}}
+
+namespace cds_test {
+
+    namespace ci = cds::intrusive;
+    namespace co = cds::opt;
+
+    class intrusive_set: public fixture
+    {
+    public:
+        static size_t const kSize = 1000;
+
+        struct stat
+        {
+            unsigned int nDisposeCount  ;   // count of disposer calling
+            unsigned int nFindCount     ;   // count of find-functor calling
+            unsigned int nUpdateNewCount;
+            unsigned int nUpdateCount;
+            mutable unsigned int nEraseCount;
+
+            stat()
+            {
+                clear_stat();
+            }
+
+            void clear_stat()
+            {
+                memset( this, 0, sizeof( *this ) );
+            }
+        };
+
+        template <typename Node>
+        struct base_int_item
+            : public Node
+            , public stat
+
+        {
+            int nKey;
+            int nVal;
+
+            base_int_item()
+            {}
+
+            explicit base_int_item( int key )
+                : nKey( key )
+                , nVal( key )
+            {}
+
+            base_int_item(int key, int val)
+                : nKey( key )
+                , nVal(val)
+            {}
+
+            base_int_item( base_int_item const& v )
+                : Node()
+                , stat()
+                , nKey( v.nKey )
+                , nVal( v.nVal )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        template <typename Node>
+        struct member_int_item: public stat
+        {
+            typedef Node member_type;
+
+            int nKey;
+            int nVal;
+
+            Node hMember;
+
+            stat s;
+
+            member_int_item()
+            {}
+
+            explicit member_int_item( int key )
+                : nKey( key )
+                , nVal( key )
+            {}
+
+            member_int_item(int key, int val)
+                : nKey( key )
+                , nVal(val)
+            {}
+
+            member_int_item(member_int_item const& v )
+                : stat()
+                , nKey( v.nKey )
+                , nVal( v.nVal )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        struct hash_int {
+            size_t operator()( int i ) const
+            {
+                return co::v::hash<int>()( i );
+            }
+            template <typename Item>
+            size_t operator()( const Item& i ) const
+            {
+                return (*this)( i.key() );
+            }
+        };
+        typedef hash_int hash1;
+
+        struct hash2: private hash1
+        {
+            typedef hash1 base_class;
+
+            size_t operator()( int i ) const
+            {
+                size_t h = ~(base_class::operator()( i ));
+                return ~h + 0x9e3779b9 + (h << 6) + (h >> 2);
+            }
+            template <typename Item>
+            size_t operator()( const Item& i ) const
+            {
+                size_t h = ~(base_class::operator()( i ));
+                return ~h + 0x9e3779b9 + (h << 6) + (h >> 2);
+            }
+        };
+
+        struct simple_item_counter {
+            size_t  m_nCount;
+
+            simple_item_counter()
+                : m_nCount(0)
+            {}
+
+            size_t operator ++()
+            {
+                return ++m_nCount;
+            }
+
+            size_t operator --()
+            {
+                return --m_nCount;
+            }
+
+            void reset()
+            {
+                m_nCount = 0;
+            }
+
+            operator size_t() const
+            {
+                return m_nCount;
+            }
+        };
+
+
+        template <typename T>
+        struct less
+        {
+            bool operator ()(const T& v1, const T& v2 ) const
+            {
+                return v1.key() < v2.key();
+            }
+
+            bool operator ()(const T& v1, int v2 ) const
+            {
+                return v1.key() < v2;
+            }
+
+            bool operator ()(int v1, const T& v2 ) const
+            {
+                return v1 < v2.key();
+            }
+
+            bool operator()( int v1, int v2 ) const
+            {
+                return v1 < v2;
+            }
+        };
+
+        template <typename T>
+        struct cmp {
+            int operator ()(const T& v1, const T& v2 ) const
+            {
+                if ( v1.key() < v2.key() )
+                    return -1;
+                return v1.key() > v2.key() ? 1 : 0;
+            }
+
+            template <typename Q>
+            int operator ()(const T& v1, const Q& v2 ) const
+            {
+                if ( v1.key() < v2 )
+                    return -1;
+                return v1.key() > v2 ? 1 : 0;
+            }
+
+            template <typename Q>
+            int operator ()(const Q& v1, const T& v2 ) const
+            {
+                if ( v1 < v2.key() )
+                    return -1;
+                return v1 > v2.key() ? 1 : 0;
+            }
+        };
+
+        template <typename T>
+        struct equal_to {
+            int operator ()( const T& v1, const T& v2 ) const
+            {
+                return v1.key() == v2.key();
+            }
+
+            int operator ()( const T& v1, int v2 ) const
+            {
+                return v1.key() == v2;
+            }
+
+            int operator ()( int v1, const T& v2 ) const
+            {
+                return v1 == v2.key();
+            }
+        };
+
+        struct other_item {
+            int nKey;
+
+            explicit other_item( int k )
+                : nKey( k )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        struct other_less {
+            template <typename T>
+            bool operator()( other_item const& lhs, T const& rhs ) const
+            {
+                return lhs.key() < rhs.key();
+            }
+
+            template <typename T>
+            bool operator()( T const& lhs, other_item const& rhs ) const
+            {
+                return lhs.key() < rhs.key();
+            }
+
+            bool operator()( other_item const& lhs, int rhs ) const
+            {
+                return lhs.key() < rhs;
+            }
+
+            bool operator()( int lhs, other_item const& rhs ) const
+            {
+                return lhs < rhs.key();
+            }
+        };
+
+        struct other_equal_to {
+            template <typename Q, typename T>
+            bool operator()( Q const& lhs, T const& rhs ) const
+            {
+                return lhs.key() == rhs.key();
+            }
+        };
+
+        struct mock_disposer
+        {
+            template <typename T>
+            void operator ()( T * p )
+            {
+                ++p->nDisposeCount;
+            }
+        };
+
+    protected:
+        template <typename Set>
+        void test( Set& s, std::vector< typename Set::value_type >& data )
+        {
+            test_< true >( s, data );
+        }
+
+        template <bool Sorted, class Set>
+        void test_( Set& s, std::vector< typename Set::value_type >& data )
+        {
+            // Precondition: set is empty
+            // Postcondition: set is empty
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            typedef typename Set::value_type value_type;
+            typedef typename std::conditional< Sorted, other_less, other_equal_to >::type other_predicate;
+            size_t const nSetSize = kSize;
+
+            std::vector< size_t> indices;
+            data.reserve( kSize );
+            indices.reserve( kSize );
+            for ( size_t key = 0; key < kSize; ++key ) {
+                data.push_back( value_type( static_cast<int>( key )));
+                indices.push_back( key );
+            }
+            shuffle( indices.begin(), indices.end() );
+
+            // insert/find
+            for ( auto idx : indices ) {
+                auto& i = data[ idx ];
+
+                ASSERT_FALSE( s.contains( i.nKey ));
+                ASSERT_FALSE( s.contains( i ));
+                ASSERT_FALSE( s.contains( other_item( i.key()), other_predicate()));
+                ASSERT_FALSE( s.find( i.nKey, []( value_type&, int ) {} ));
+                ASSERT_FALSE( s.find_with( other_item( i.key()), other_predicate(), []( value_type&, other_item const& ) {} ));
+
+                std::pair<bool, bool> updResult;
+
+                updResult = s.update( i, []( bool bNew, value_type&, value_type& )
+                {
+                    ASSERT_TRUE( false );
+                }, false );
+                EXPECT_FALSE( updResult.first );
+                EXPECT_FALSE( updResult.second );
+
+                switch ( i.key() % 3 ) {
+                case 0:
+                    ASSERT_TRUE( s.insert( i ));
+                    ASSERT_FALSE( s.insert( i ));
+                    updResult = s.update( i, []( bool bNew, value_type& val, value_type& arg) 
+                        {
+                            EXPECT_FALSE( bNew );
+                            EXPECT_EQ( &val, &arg );
+                        }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+                    break;
+                case 1:
+                    EXPECT_EQ( i.nUpdateNewCount, 0 );
+                    ASSERT_TRUE( s.insert( i, []( value_type& v ) { ++v.nUpdateNewCount;} ));
+                    EXPECT_EQ( i.nUpdateNewCount, 1 );
+                    ASSERT_FALSE( s.insert( i, []( value_type& v ) { ++v.nUpdateNewCount;} ) );
+                    EXPECT_EQ( i.nUpdateNewCount, 1 );
+                    i.nUpdateNewCount = 0;
+                    break;
+                case 2:
+                    updResult = s.update( i, []( bool bNew, value_type& val, value_type& arg )
+                    {
+                        EXPECT_TRUE( bNew );
+                        EXPECT_EQ( &val, &arg );
+                    });
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_TRUE( updResult.second );
+                    break;
+                }
+
+                ASSERT_TRUE( s.contains( i.nKey ) );
+                ASSERT_TRUE( s.contains( i ) );
+                ASSERT_TRUE( s.contains( other_item( i.key() ), other_predicate()));
+                EXPECT_EQ( i.nFindCount, 0 );
+                ASSERT_TRUE( s.find( i.nKey, []( value_type& v, int ) { ++v.nFindCount; } ));
+                EXPECT_EQ( i.nFindCount, 1 );
+                ASSERT_TRUE( s.find_with( other_item( i.key() ), other_predicate(), []( value_type& v, other_item const& ) { ++v.nFindCount; } ));
+                EXPECT_EQ( i.nFindCount, 2 );
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            std::for_each( data.begin(), data.end(), []( value_type& v ) { v.clear_stat(); });
+
+            // erase
+            shuffle( indices.begin(), indices.end() );
+            for ( auto idx : indices ) {
+                auto& i = data[ idx ];
+
+                ASSERT_TRUE( s.contains( i.nKey ) );
+                ASSERT_TRUE( s.contains( i ) );
+                ASSERT_TRUE( s.contains( other_item( i.key() ), other_predicate() ) );
+                EXPECT_EQ( i.nFindCount, 0 );
+                ASSERT_TRUE( s.find( i.nKey, []( value_type& v, int ) { ++v.nFindCount; } ) );
+                EXPECT_EQ( i.nFindCount, 1 );
+                ASSERT_TRUE( s.find_with( other_item( i.key() ), other_predicate(), []( value_type& v, other_item const& ) { ++v.nFindCount; } ) );
+                EXPECT_EQ( i.nFindCount, 2 );
+
+                value_type v( i );
+                switch ( i.key() % 6 ) {
+                case 0:
+                    ASSERT_FALSE( s.unlink( v ));
+                    ASSERT_TRUE( s.unlink( i ));
+                    ASSERT_FALSE( s.unlink( i ) );
+                    break;
+                case 1:
+                    ASSERT_TRUE( s.erase( i.key()));
+                    ASSERT_FALSE( s.erase( i.key() ) );
+                    break;
+                case 2:
+                    ASSERT_TRUE( s.erase( v ));
+                    ASSERT_FALSE( s.erase( v ) );
+                    break;
+                case 3:
+                    ASSERT_TRUE( s.erase_with( other_item( i.key()), other_predicate()));
+                    ASSERT_FALSE( s.erase_with( other_item( i.key() ), other_predicate() ) );
+                    break;
+                case 4:
+                    EXPECT_EQ( i.nEraseCount, 0 );
+                    ASSERT_TRUE( s.erase( v, []( value_type& val ) { ++val.nEraseCount; } ));
+                    EXPECT_EQ( i.nEraseCount, 1 );
+                    ASSERT_FALSE( s.erase( v, []( value_type& val ) { ++val.nEraseCount; } ));
+                    EXPECT_EQ( i.nEraseCount, 1 );
+                    break;
+                case 5:
+                    EXPECT_EQ( i.nEraseCount, 0 );
+                    ASSERT_TRUE( s.erase_with( other_item( i.key() ), other_predicate(), []( value_type& val ) { ++val.nEraseCount; } ));
+                    EXPECT_EQ( i.nEraseCount, 1 );
+                    ASSERT_FALSE( s.erase_with( other_item( i.key() ), other_predicate(), []( value_type& val ) { ++val.nEraseCount; } ));
+                    EXPECT_EQ( i.nEraseCount, 1 );
+                    break;
+                }
+
+                ASSERT_FALSE( s.contains( i.nKey ));
+                ASSERT_FALSE( s.contains( i ));
+                ASSERT_FALSE( s.contains( other_item( i.key()), other_predicate()));
+                ASSERT_FALSE( s.find( i.nKey, []( value_type&, int ) {} ));
+                ASSERT_FALSE( s.find_with( other_item( i.key()), other_predicate(), []( value_type&, other_item const& ) {} ));
+            }
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            // clear
+            for ( auto& i : data ) {
+                i.clear_stat();
+                ASSERT_TRUE( s.insert( i ));
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            s.clear();
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            // clear_and_dispose
+            for ( auto& i : data ) {
+                i.clear_stat();
+                ASSERT_TRUE( s.insert( i ) );
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            s.clear_and_dispose( mock_disposer() );
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nDisposeCount, 1 );
+            }
+
+        }
+    };
+
+} // namespace cds_test
+
+#endif // #ifndef CDSUNIT_STRIPED_SET_TEST_INTRUSIVE_SET_H
diff --git a/test/unit/striped-set/test_intrusive_striped_set.h b/test/unit/striped-set/test_intrusive_striped_set.h
new file mode 100644 (file)
index 0000000..a85ad77
--- /dev/null
@@ -0,0 +1,405 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TEST_INTRUSIVE_STRIPED_SET_H
+#define CDSUNIT_SET_TEST_INTRUSIVE_STRIPED_SET_H
+
+#include "test_intrusive_set.h"
+
+#include <cds/intrusive/striped_set.h>
+
+namespace {
+    namespace ci = cds::intrusive;
+
+    template <typename ContainerPair>
+    class IntrusiveStripedSet : public cds_test::intrusive_set
+    {
+    protected:
+        typedef cds_test::intrusive_set base_class;
+
+        typedef typename ContainerPair::base_item   base_item;
+        typedef typename ContainerPair::member_item member_item;
+
+        typedef typename ContainerPair::base_hook_container   base_hook_container;
+        typedef typename ContainerPair::member_hook_container member_hook_container;
+
+        //void SetUp()
+        //{}
+
+        //void TearDown()
+        //{}
+    };
+
+    TYPED_TEST_CASE_P( IntrusiveStripedSet );
+
+// ****************************************************************
+// striped base hook
+
+    TYPED_TEST_P( IntrusiveStripedSet, striped_basehook_compare )
+    {
+        typedef ci::StripedSet< 
+            typename TestFixture::base_hook_container,
+            ci::opt::hash< typename TestFixture::hash1 >,
+            ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
+    }
+
+    TYPED_TEST_P( IntrusiveStripedSet, striped_basehook_less )
+    {
+        typedef ci::StripedSet<
+            typename TestFixture::base_hook_container,
+            ci::opt::hash< typename TestFixture::hash1 >,
+            ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
+    }
+
+    TYPED_TEST_P( IntrusiveStripedSet, striped_basehook_cmpmix )
+    {
+        typedef ci::StripedSet<
+            typename TestFixture::base_hook_container,
+            ci::opt::hash< typename TestFixture::hash1 >,
+            ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>,
+            ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>,
+            ci::opt::resizing_policy< ci::striped_set::load_factor_resizing< 8 >>
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 64 );
+            this->test( s, data );
+        }
+    }
+
+    TYPED_TEST_P( IntrusiveStripedSet, striped_basehook_resizing_threshold )
+    {
+        typedef ci::StripedSet<
+            typename TestFixture::base_hook_container,
+            ci::opt::hash< typename TestFixture::hash1 >,
+            ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>,
+            ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>,
+            ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<8>>
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
+    }
+
+    TYPED_TEST_P( IntrusiveStripedSet, striped_basehook_resizing_threshold_rt )
+    {
+        typedef ci::StripedSet<
+            typename TestFixture::base_hook_container,
+            ci::opt::hash< typename TestFixture::hash2 >,
+            ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>,
+            ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>,
+            ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<0>>
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ) );
+            this->test( s, data );
+        }
+    }
+
+// ****************************************************************
+// striped member hook
+
+    TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_compare )
+    {
+        typedef ci::StripedSet<
+            typename TestFixture::member_hook_container,
+            ci::opt::hash< typename TestFixture::hash1 >,
+            ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
+    }
+
+    TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_less )
+    {
+        typedef ci::StripedSet<
+            typename TestFixture::member_hook_container,
+            ci::opt::hash< typename TestFixture::hash1 >,
+            ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32 );
+            this->test( s, data );
+        }
+    }
+
+    TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_cmpmix )
+    {
+        typedef ci::StripedSet<
+            typename TestFixture::member_hook_container,
+            ci::opt::hash< typename TestFixture::hash1 >,
+            ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>,
+            ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>,
+            ci::opt::resizing_policy< ci::striped_set::load_factor_resizing< 8 >>
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 64 );
+            this->test( s, data );
+        }
+    }
+
+    TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_resizing_threshold )
+    {
+        typedef ci::StripedSet<
+            typename TestFixture::member_hook_container,
+            ci::opt::hash< typename TestFixture::hash1 >,
+            ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>,
+            ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>,
+            ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<8>>
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
+    }
+
+    TYPED_TEST_P( IntrusiveStripedSet, striped_memberhook_resizing_threshold_rt )
+    {
+        typedef ci::StripedSet<
+            typename TestFixture::member_hook_container,
+            ci::opt::hash< typename TestFixture::hash2 >,
+            ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>,
+            ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>,
+            ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<0>>
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ) );
+            this->test( s, data );
+        }
+    }
+
+
+// ****************************************************************
+// refinable base hook
+
+    TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_compare )
+    {
+        typedef ci::StripedSet< 
+            typename TestFixture::base_hook_container,
+            ci::opt::hash< typename TestFixture::hash1 >,
+            ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
+    }
+
+    TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_less )
+    {
+        typedef ci::StripedSet<
+            typename TestFixture::base_hook_container,
+            ci::opt::hash< typename TestFixture::hash1 >,
+            ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32 );
+            this->test( s, data );
+        }
+    }
+
+    TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_cmpmix )
+    {
+        typedef ci::StripedSet<
+            typename TestFixture::base_hook_container,
+            ci::opt::hash< typename TestFixture::hash1 >,
+            ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>,
+            ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>,
+            ci::opt::resizing_policy< ci::striped_set::load_factor_resizing< 8 >>
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 64 );
+            this->test( s, data );
+        }
+    }
+
+    TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_resizing_threshold )
+    {
+        typedef ci::StripedSet<
+            typename TestFixture::base_hook_container,
+            ci::opt::hash< typename TestFixture::hash1 >,
+            ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>,
+            ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>,
+            ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<8>>
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
+    }
+
+    TYPED_TEST_P( IntrusiveStripedSet, refinable_basehook_resizing_threshold_rt )
+    {
+        typedef ci::StripedSet<
+            typename TestFixture::base_hook_container,
+            ci::opt::hash< typename TestFixture::hash2 >,
+            ci::opt::less< typename TestFixture::template less< typename TestFixture::base_item >>,
+            ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::base_item >>,
+            ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<0>>
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ));
+            this->test( s, data );
+        }
+    }
+
+// ****************************************************************
+// refinable member hook
+
+    TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_compare )
+    {
+        typedef ci::StripedSet<
+            typename TestFixture::member_hook_container,
+            ci::opt::hash< typename TestFixture::hash1 >,
+            ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
+    }
+
+    TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_less )
+    {
+        typedef ci::StripedSet<
+            typename TestFixture::member_hook_container,
+            ci::opt::hash< typename TestFixture::hash1 >,
+            ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 32 );
+            this->test( s, data );
+        }
+    }
+
+    TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_cmpmix )
+    {
+        typedef ci::StripedSet<
+            typename TestFixture::member_hook_container,
+            ci::opt::hash< typename TestFixture::hash1 >,
+            ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>,
+            ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>,
+            ci::opt::resizing_policy< ci::striped_set::load_factor_resizing< 8 >>
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 64 );
+            this->test( s, data );
+        }
+    }
+
+    TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_resizing_threshold )
+    {
+        typedef ci::StripedSet<
+            typename TestFixture::member_hook_container,
+            ci::opt::hash< typename TestFixture::hash1 >,
+            ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>,
+            ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>,
+            ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<8>>
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s;
+            this->test( s, data );
+        }
+    }
+
+    TYPED_TEST_P( IntrusiveStripedSet, refinable_memberhook_resizing_threshold_rt )
+    {
+        typedef ci::StripedSet<
+            typename TestFixture::member_hook_container,
+            ci::opt::hash< typename TestFixture::hash2 >,
+            ci::opt::less< typename TestFixture::template less< typename TestFixture::member_item >>,
+            ci::opt::compare< typename TestFixture::template cmp< typename TestFixture::member_item >>,
+            ci::opt::resizing_policy< ci::striped_set::single_bucket_size_threshold<0>>
+        > set_type;
+
+        std::vector< typename set_type::value_type > data;
+        {
+            set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>( 4 ) );
+            this->test( s, data );
+        }
+    }
+
+    REGISTER_TYPED_TEST_CASE_P( IntrusiveStripedSet,
+        striped_basehook_compare, striped_basehook_less, striped_basehook_cmpmix, striped_basehook_resizing_threshold, striped_basehook_resizing_threshold_rt, striped_memberhook_compare, striped_memberhook_less, striped_memberhook_cmpmix, striped_memberhook_resizing_threshold, striped_memberhook_resizing_threshold_rt, refinable_basehook_compare, refinable_basehook_less, refinable_basehook_cmpmix, refinable_basehook_resizing_threshold, refinable_basehook_resizing_threshold_rt, refinable_memberhook_compare, refinable_memberhook_less, refinable_memberhook_cmpmix, refinable_memberhook_resizing_threshold, refinable_memberhook_resizing_threshold_rt
+        );
+
+} // namespace
+
+#endif // CDSUNIT_SET_TEST_INTRUSIVE_STRIPED_SET_H
diff --git a/test/unit/striped-set/test_set.h b/test/unit/striped-set/test_set.h
new file mode 100644 (file)
index 0000000..33a7d29
--- /dev/null
@@ -0,0 +1,561 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_STRIPED_SET_TEST_SET_H
+#define CDSUNIT_STRIPED_SET_TEST_SET_H
+
+#include <cds_test/check_size.h>
+#include <cds_test/fixture.h>
+
+#include <cds/opt/hash.h>
+#include <functional>   // ref
+
+// forward declaration
+namespace cds { namespace container {}}
+
+namespace cds_test {
+    namespace co = cds::opt;
+
+    class container_set : public fixture
+    {
+    public:
+        static size_t const kSize = 1000;
+
+        struct stat
+        {
+            unsigned int nFindCount;
+            unsigned int nUpdateNewCount;
+            unsigned int nUpdateCount;
+            mutable unsigned int nEraseCount;
+
+            stat()
+            {
+                clear_stat();
+            }
+
+            stat( stat const& s )
+            {
+                copy_stat( s );
+            }
+
+            void clear_stat()
+            {
+                memset( this, 0, sizeof( *this ) );
+            }
+
+            void copy_stat( stat const& s )
+            {
+                memcpy( this, &s, sizeof( *this ));
+            }
+        };
+
+        struct other_item {
+            int nKey;
+
+            explicit other_item( int k )
+                : nKey( k )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        struct int_item: public stat
+        {
+            int nKey;
+            int nVal;
+            std::string strVal;
+
+            int_item()
+                : nKey( 0 )
+                , nVal( 0 )
+            {}
+
+            explicit int_item( int k )
+                : nKey( k )
+                , nVal( k * 2 )
+            {}
+
+            template <typename Q>
+            explicit int_item( Q const& src )
+                : nKey( src.key() )
+                , nVal( 0 )
+            {}
+
+            int_item( int_item const& src )
+                : stat( src )
+                , nKey( src.nKey )
+                , nVal( src.nVal )
+                , strVal( src.strVal )
+            {}
+
+            int_item( int_item&& src )
+                : stat( src )
+                , nKey( src.nKey )
+                , nVal( src.nVal )
+                , strVal( std::move( src.strVal ) )
+            {}
+
+            int_item( int k, std::string&& s )
+                : nKey( k )
+                , nVal( k * 2 )
+                , strVal( std::move( s ) )
+            {}
+
+            explicit int_item( other_item const& s )
+                : nKey( s.key() )
+                , nVal( s.key() * 2 )
+            {}
+
+            int_item& operator=( int_item const& src )
+            {
+                if ( &src != this ) {
+                    copy_stat( src );
+                    nKey = src.nKey;
+                    nVal = src.nVal;
+                    strVal = src.strVal;
+                }
+                return *this;
+            }
+
+            int_item& operator=( int_item&& src )
+            {
+                if ( &src != this ) {
+                    copy_stat( src );
+                    nKey = src.nKey;
+                    nVal = src.nVal;
+                    strVal = std::move( src.strVal );
+                }
+                return *this;
+            }
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        struct hash1 {
+            size_t operator()( int i ) const
+            {
+                return co::v::hash<int>()(i);
+            }
+            template <typename Item>
+            size_t operator()( const Item& i ) const
+            {
+                return (*this)(i.key());
+            }
+        };
+
+        struct hash2: private hash1
+        {
+            typedef hash1 base_class;
+
+            size_t operator()( int i ) const
+            {
+                size_t h = ~(base_class::operator()( i ));
+                return ~h + 0x9e3779b9 + (h << 6) + (h >> 2);
+            }
+            template <typename Item>
+            size_t operator()( const Item& i ) const
+            {
+                size_t h = ~(base_class::operator()( i ));
+                return ~h + 0x9e3779b9 + (h << 6) + (h >> 2);
+            }
+        };
+
+        struct less
+        {
+            bool operator ()( int_item const& v1, int_item const& v2 ) const
+            {
+                return v1.key() < v2.key();
+            }
+
+            template <typename Q>
+            bool operator ()( int_item const& v1, const Q& v2 ) const
+            {
+                return v1.key() < v2;
+            }
+
+            template <typename Q>
+            bool operator ()( const Q& v1, int_item const& v2 ) const
+            {
+                return v1 < v2.key();
+            }
+        };
+
+        struct equal_to
+        {
+            bool operator ()( int_item const& v1, int_item const& v2 ) const
+            {
+                return v1.key() == v2.key();
+            }
+
+            template <typename Q>
+            bool operator ()( int_item const& v1, const Q& v2 ) const
+            {
+                return v1.key() == v2;
+            }
+
+            template <typename Q>
+            bool operator ()( const Q& v1, int_item const& v2 ) const
+            {
+                return v1 == v2.key();
+            }
+        };
+
+        struct cmp {
+            int operator ()( int_item const& v1, int_item const& v2 ) const
+            {
+                if ( v1.key() < v2.key() )
+                    return -1;
+                return v1.key() > v2.key() ? 1 : 0;
+            }
+
+            template <typename T>
+            int operator ()( T const& v1, int v2 ) const
+            {
+                if ( v1.key() < v2 )
+                    return -1;
+                return v1.key() > v2 ? 1 : 0;
+            }
+
+            template <typename T>
+            int operator ()( int v1, T const& v2 ) const
+            {
+                if ( v1 < v2.key() )
+                    return -1;
+                return v1 > v2.key() ? 1 : 0;
+            }
+        };
+
+        struct other_less {
+            template <typename Q, typename T>
+            bool operator()( Q const& lhs, T const& rhs ) const
+            {
+                return lhs.key() < rhs.key();
+            }
+        };
+
+        struct other_equal_to {
+            template <typename Q, typename T>
+            bool operator()( Q const& lhs, T const& rhs ) const
+            {
+                return lhs.key() == rhs.key();
+            }
+        };
+
+    protected:
+        template <typename Set>
+        void test( Set& s )
+        {
+            test_< true >( s );
+        }
+
+        template <bool Sorted, typename Set>
+        void test_( Set& s )
+        {
+            // Precondition: set is empty
+            // Postcondition: set is empty
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+            size_t const nSetSize = kSize;
+
+            typedef typename Set::value_type value_type;
+            typedef typename std::conditional< Sorted, other_less, other_equal_to >::type other_predicate;
+
+            std::vector< value_type > data;
+            std::vector< size_t> indices;
+            data.reserve( kSize );
+            indices.reserve( kSize );
+            for ( size_t key = 0; key < kSize; ++key ) {
+                data.push_back( value_type( static_cast<int>(key) ) );
+                indices.push_back( key );
+            }
+            shuffle( indices.begin(), indices.end() );
+
+            // insert/find
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                ASSERT_FALSE( s.contains( i.nKey ) );
+                ASSERT_FALSE( s.contains( i ) );
+                ASSERT_FALSE( s.contains( other_item( i.key() ), other_predicate()));
+                ASSERT_FALSE( s.find( i.nKey, []( value_type&, int ) {} ));
+                ASSERT_FALSE( s.find( i, []( value_type&, value_type const& ) {} ));
+                ASSERT_FALSE( s.find_with( other_item( i.key()), other_predicate(), []( value_type&, other_item const& ) {} ));
+
+                std::pair<bool, bool> updResult;
+
+                std::string str;
+                updResult = s.update( i.key(), []( bool bNew, value_type&, int )
+                {
+                    ASSERT_TRUE( false );
+                }, false );
+                EXPECT_FALSE( updResult.first );
+                EXPECT_FALSE( updResult.second );
+
+                switch ( idx % 8 ) {
+                case 0:
+                    ASSERT_TRUE( s.insert( i ));
+                    ASSERT_FALSE( s.insert( i ));
+                    updResult = s.update( i, []( bool bNew, value_type& val, value_type const& arg) 
+                        {
+                            EXPECT_FALSE( bNew );
+                            EXPECT_EQ( val.key(), arg.key() );
+                        }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+                    break;
+                case 1:
+                    ASSERT_TRUE( s.insert( i.key() ));
+                    ASSERT_FALSE( s.insert( i.key() ));
+                    updResult = s.update( i.key(), []( bool bNew, value_type& val, int arg) 
+                        {
+                            EXPECT_FALSE( bNew );
+                            EXPECT_EQ( val.key(), arg );
+                        }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+                    break;
+                case 2:
+                    ASSERT_TRUE( s.insert( i, []( value_type& v ) { ++v.nFindCount; } ));
+                    ASSERT_FALSE( s.insert( i, []( value_type& v ) { ++v.nFindCount; } ));
+                    ASSERT_TRUE( s.find( i.nKey, []( value_type const& v, int key ) 
+                        {
+                            EXPECT_EQ( v.key(), key );
+                            EXPECT_EQ( v.nFindCount, 1 );
+                        }));
+                    break;
+                case 3:
+                    ASSERT_TRUE( s.insert( i.key(), []( value_type& v ) { ++v.nFindCount; } ));
+                    ASSERT_FALSE( s.insert( i.key(), []( value_type& v ) { ++v.nFindCount; } ));
+                    ASSERT_TRUE( s.find( i.nKey, []( value_type const& v, int key ) 
+                        {
+                            EXPECT_EQ( v.key(), key );
+                            EXPECT_EQ( v.nFindCount, 1 );
+                        }));
+                    break;
+                case 4:
+                    updResult = s.update( i, []( bool bNew, value_type& v, value_type const& arg )
+                        {
+                            EXPECT_TRUE( bNew );
+                            EXPECT_EQ( v.key(), arg.key() );
+                            ++v.nUpdateNewCount;
+                        });
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_TRUE( updResult.second );
+
+                    updResult = s.update( i, []( bool bNew, value_type& v, value_type const& arg )
+                        {
+                            EXPECT_FALSE( bNew );
+                            EXPECT_EQ( v.key(), arg.key() );
+                            ++v.nUpdateNewCount;
+                        }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+
+                    ASSERT_TRUE( s.find( i.nKey, []( value_type const& v, int key )
+                        {
+                            EXPECT_EQ( v.key(), key );
+                            EXPECT_EQ( v.nUpdateNewCount, 2 );
+                        }));
+                    break;
+                case 5:
+                    updResult = s.update( i.key(), []( bool bNew, value_type& v, int arg )
+                        {
+                            EXPECT_TRUE( bNew );
+                            EXPECT_EQ( v.key(), arg );
+                            ++v.nUpdateNewCount;
+                        });
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_TRUE( updResult.second );
+
+                    updResult = s.update( i.key(), []( bool bNew, value_type& v, int arg )
+                        {
+                            EXPECT_FALSE( bNew );
+                            EXPECT_EQ( v.key(), arg );
+                            ++v.nUpdateNewCount;
+                        }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+
+                    ASSERT_TRUE( s.find( i, []( value_type const& v, value_type const& arg )
+                        {
+                            EXPECT_EQ( v.key(), arg.key() );
+                            EXPECT_EQ( v.nUpdateNewCount, 2 );
+                        }));
+                    break;
+                case 6:
+                    ASSERT_TRUE( s.emplace( i.key()));
+                    ASSERT_TRUE( s.find( i, []( value_type const& v, value_type const& arg )
+                        {
+                            EXPECT_EQ( v.key(), arg.key() );
+                            EXPECT_EQ( v.nVal, arg.nVal );
+                        }));
+                    break;
+                case 7:
+                    str = "Hello!";
+                    ASSERT_TRUE( s.emplace( i.key(), std::move( str )));
+                    EXPECT_TRUE( str.empty());
+                    ASSERT_TRUE( s.find( i, []( value_type const& v, value_type const& arg )
+                        {
+                            EXPECT_EQ( v.key(), arg.key() );
+                            EXPECT_EQ( v.nVal, arg.nVal );
+                            EXPECT_EQ( v.strVal, std::string( "Hello!" ));
+                        } ) );
+                    break;
+                default:
+                    // forgot anything?..
+                    ASSERT_TRUE( false );
+                }
+
+                ASSERT_TRUE( s.contains( i.nKey ) );
+                ASSERT_TRUE( s.contains( i ) );
+                ASSERT_TRUE( s.contains( other_item( i.key() ), other_predicate() ) );
+                ASSERT_TRUE( s.find( i.nKey, []( value_type&, int ) {} ) );
+                ASSERT_TRUE( s.find( i, []( value_type&, value_type const& ) {} ) );
+                ASSERT_TRUE( s.find_with( other_item( i.key() ), other_predicate(), []( value_type&, other_item const& ) {} ) );
+            }
+
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            // erase
+            shuffle( indices.begin(), indices.end() );
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                ASSERT_TRUE( s.contains( i.nKey ) );
+                ASSERT_TRUE( s.contains( i ) );
+                ASSERT_TRUE( s.contains( other_item( i.key() ), other_predicate() ) );
+                ASSERT_TRUE( s.find( i.nKey, []( value_type& v, int ) 
+                    { 
+                        v.nFindCount = 1;
+                    }));
+                ASSERT_TRUE( s.find( i, []( value_type& v, value_type const& ) 
+                    { 
+                        EXPECT_EQ( ++v.nFindCount, 2 );
+                    }));
+                ASSERT_TRUE( s.find_with( other_item( i.key() ), other_predicate(), []( value_type& v, other_item const& )
+                    { 
+                        EXPECT_EQ( ++v.nFindCount, 3 );
+                    }));
+
+                int nKey = i.key() - 1;
+                switch ( idx % 6 ) {
+                case 0:
+                    ASSERT_TRUE( s.erase( i.key()));
+                    ASSERT_FALSE( s.erase( i.key()));
+                    break;
+                case 1:
+                    ASSERT_TRUE( s.erase( i ));
+                    ASSERT_FALSE( s.erase( i ));
+                    break;
+                case 2:
+                    ASSERT_TRUE( s.erase_with( other_item( i.key()), other_predicate()));
+                    ASSERT_FALSE( s.erase_with( other_item( i.key() ), other_predicate() ) );
+                    break;
+                case 3:
+                    ASSERT_TRUE( s.erase( i.key(), [&nKey]( value_type const& v )
+                        {
+                            nKey = v.key();
+                        } ));
+                    EXPECT_EQ( i.key(), nKey );
+
+                    nKey = i.key() - 1;
+                    ASSERT_FALSE( s.erase( i.key(), [&nKey]( value_type const& v )
+                        {
+                            nKey = v.key();
+                        } ));
+                    EXPECT_EQ( i.key(), nKey + 1 );
+                    break;
+                case 4:
+                    ASSERT_TRUE( s.erase( i, [&nKey]( value_type const& v )
+                        {
+                            nKey = v.key();
+                        } ));
+                    EXPECT_EQ( i.key(), nKey );
+
+                    nKey = i.key() - 1;
+                    ASSERT_FALSE( s.erase( i, [&nKey]( value_type const& v )
+                        {
+                            nKey = v.key();
+                        } ));
+                    EXPECT_EQ( i.key(), nKey + 1 );
+                    break;
+                case 5:
+                    ASSERT_TRUE( s.erase_with( other_item( i.key()), other_predicate(), [&nKey]( value_type const& v )
+                        {
+                            nKey = v.key();
+                        } ));
+                    EXPECT_EQ( i.key(), nKey );
+
+                    nKey = i.key() - 1;
+                    ASSERT_FALSE( s.erase_with( other_item( i.key()), other_predicate(), [&nKey]( value_type const& v )
+                        {
+                            nKey = v.key();
+                        } ));
+                    EXPECT_EQ( i.key(), nKey + 1 );
+                    break;
+                }
+
+                ASSERT_FALSE( s.contains( i.nKey ) );
+                ASSERT_FALSE( s.contains( i ) );
+                ASSERT_FALSE( s.contains( other_item( i.key() ), other_predicate()));
+                ASSERT_FALSE( s.find( i.nKey, []( value_type&, int ) {} ));
+                ASSERT_FALSE( s.find( i, []( value_type&, value_type const& ) {} ));
+                ASSERT_FALSE( s.find_with( other_item( i.key()), other_predicate(), []( value_type&, other_item const& ) {} ));
+            }
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+
+            // clear
+            for ( auto& i : data ) {
+                ASSERT_TRUE( s.insert( i ) );
+            }
+
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            s.clear();
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+        }
+    };
+
+} // namespace cds_test
+
+#endif // CDSUNIT_STRIPED_SET_TEST_SET_H
diff --git a/test/unit/striped-set/test_striped_set.h b/test/unit/striped-set/test_striped_set.h
new file mode 100644 (file)
index 0000000..8ce32dc
--- /dev/null
@@ -0,0 +1,768 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TEST_STRIPED_SET_H
+#define CDSUNIT_SET_TEST_STRIPED_SET_H
+
+#include "test_set.h"
+
+#include <cds/container/striped_set.h>
+
+namespace {
+    namespace cc = cds::container;
+
+    template <bool Exist, typename Set>
+    struct call_contains_with
+    {
+        bool operator()( Set& s, int key ) const
+        {
+            return s.contains( cds_test::container_set::other_item( key ), cds_test::container_set::other_less());
+        }
+    };
+
+    template <typename Set>
+    struct call_contains_with<false, Set>
+    {
+        bool operator()( Set& s, int key ) const
+        {
+            return s.contains( key );
+        }
+    };
+
+    template <bool Exist, typename Set>
+    struct call_find_with
+    {
+        template <typename Func>
+        bool operator()( Set& s, int key, Func f ) const
+        {
+            return s.find_with( cds_test::container_set::other_item( key ), cds_test::container_set::other_less(), f );
+        }
+    };
+
+    template <typename Set>
+    struct call_find_with<false, Set>
+    {
+        template <typename Func>
+        bool operator()( Set& s, int key, Func f ) const
+        {
+            return s.find( key, [&f]( typename Set::value_type& v, int key ) { 
+                cds_test::container_set::other_item oi( key );
+                f( v, oi ); 
+            });
+        }
+    };
+
+    template <bool Exist, typename Set>
+    struct call_erase_with
+    {
+        bool operator()( Set& s, int key ) const
+        {
+            return s.erase_with( cds_test::container_set::other_item( key ), cds_test::container_set::other_less());
+        }
+
+        template <typename Func>
+        bool operator()( Set& s, int key, Func f ) const
+        {
+            return s.erase_with( cds_test::container_set::other_item( key ), cds_test::container_set::other_less(), f );
+        }
+    };
+
+    template <typename Set>
+    struct call_erase_with<false, Set>
+    {
+        bool operator()( Set& s, int key ) const
+        {
+            return s.erase( key );
+        }
+
+        template <typename Func>
+        bool operator()( Set& s, int key, Func f ) const
+        {
+            return s.erase( key, f );
+        }
+    };
+
+    template <typename Traits >
+    class StripedSet : public cds_test::container_set
+    {
+    protected:
+        typedef cds_test::container_set base_class;
+
+        typedef typename Traits::container_type container_type;
+        typedef typename Traits::copy_policy    copy_policy;
+
+        static bool const c_hasFindWith = Traits::c_hasFindWith;
+        static bool const c_hasEraseWith = Traits::c_hasEraseWith;
+
+        //void SetUp()
+        //{}
+
+        //void TearDown()
+        //{}
+
+        template <typename Set>
+        void test( Set& s )
+        {
+            // Precondition: set is empty
+            // Postcondition: set is empty
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+            size_t const nSetSize = kSize;
+
+            typedef typename Set::value_type value_type;
+
+            std::vector< value_type > data;
+            std::vector< size_t> indices;
+            data.reserve( kSize );
+            indices.reserve( kSize );
+            for ( size_t key = 0; key < kSize; ++key ) {
+                data.push_back( value_type( static_cast<int>(key) ) );
+                indices.push_back( key );
+            }
+            shuffle( indices.begin(), indices.end() );
+
+            // insert/find
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                ASSERT_FALSE( s.contains( i.nKey ) );
+                ASSERT_FALSE( s.contains( i ));
+                ASSERT_FALSE( (call_contains_with< c_hasFindWith, Set >()( s, i.key())));
+                ASSERT_FALSE( s.find( i.nKey, []( value_type&, int ) {} ) );
+                ASSERT_FALSE( s.find( i, []( value_type&, value_type const& ) {} ) );
+                ASSERT_FALSE( (call_find_with< c_hasFindWith, Set >()(s, i.key(), []( value_type&, other_item const& ) {} )));
+
+                std::pair<bool, bool> updResult;
+
+                std::string str;
+                updResult = s.update( i.key(), []( bool bNew, value_type&, int )
+                {
+                    ASSERT_TRUE( false );
+                }, false );
+                EXPECT_FALSE( updResult.first );
+                EXPECT_FALSE( updResult.second );
+
+                switch ( idx % 8 ) {
+                case 0:
+                    ASSERT_TRUE( s.insert( i ) );
+                    ASSERT_FALSE( s.insert( i ) );
+                    updResult = s.update( i, []( bool bNew, value_type& val, value_type const& arg )
+                    {
+                        EXPECT_FALSE( bNew );
+                        EXPECT_EQ( val.key(), arg.key() );
+                    }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+                    break;
+                case 1:
+                    ASSERT_TRUE( s.insert( i.key() ) );
+                    ASSERT_FALSE( s.insert( i.key() ) );
+                    updResult = s.update( i.key(), []( bool bNew, value_type& val, int arg )
+                    {
+                        EXPECT_FALSE( bNew );
+                        EXPECT_EQ( val.key(), arg );
+                    }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+                    break;
+                case 2:
+                    ASSERT_TRUE( s.insert( i, []( value_type& v ) { ++v.nFindCount; } ) );
+                    ASSERT_FALSE( s.insert( i, []( value_type& v ) { ++v.nFindCount; } ) );
+                    ASSERT_TRUE( s.find( i.nKey, []( value_type const& v, int key )
+                    {
+                        EXPECT_EQ( v.key(), key );
+                        EXPECT_EQ( v.nFindCount, 1 );
+                    } ) );
+                    break;
+                case 3:
+                    ASSERT_TRUE( s.insert( i.key(), []( value_type& v ) { ++v.nFindCount; } ) );
+                    ASSERT_FALSE( s.insert( i.key(), []( value_type& v ) { ++v.nFindCount; } ) );
+                    ASSERT_TRUE( s.find( i.nKey, []( value_type const& v, int key )
+                    {
+                        EXPECT_EQ( v.key(), key );
+                        EXPECT_EQ( v.nFindCount, 1 );
+                    } ) );
+                    break;
+                case 4:
+                    updResult = s.update( i, []( bool bNew, value_type& v, value_type const& arg )
+                    {
+                        EXPECT_TRUE( bNew );
+                        EXPECT_EQ( v.key(), arg.key() );
+                        ++v.nUpdateNewCount;
+                    } );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_TRUE( updResult.second );
+
+                    updResult = s.update( i, []( bool bNew, value_type& v, value_type const& arg )
+                    {
+                        EXPECT_FALSE( bNew );
+                        EXPECT_EQ( v.key(), arg.key() );
+                        ++v.nUpdateNewCount;
+                    }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+
+                    ASSERT_TRUE( s.find( i.nKey, []( value_type const& v, int key )
+                    {
+                        EXPECT_EQ( v.key(), key );
+                        EXPECT_EQ( v.nUpdateNewCount, 2 );
+                    } ) );
+                    break;
+                case 5:
+                    updResult = s.update( i.key(), []( bool bNew, value_type& v, int arg )
+                    {
+                        EXPECT_TRUE( bNew );
+                        EXPECT_EQ( v.key(), arg );
+                        ++v.nUpdateNewCount;
+                    } );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_TRUE( updResult.second );
+
+                    updResult = s.update( i.key(), []( bool bNew, value_type& v, int arg )
+                    {
+                        EXPECT_FALSE( bNew );
+                        EXPECT_EQ( v.key(), arg );
+                        ++v.nUpdateNewCount;
+                    }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+
+                    ASSERT_TRUE( s.find( i, []( value_type const& v, value_type const& arg )
+                    {
+                        EXPECT_EQ( v.key(), arg.key() );
+                        EXPECT_EQ( v.nUpdateNewCount, 2 );
+                    } ) );
+                    break;
+                case 6:
+                    ASSERT_TRUE( s.emplace( i.key() ) );
+                    ASSERT_TRUE( s.find( i, []( value_type const& v, value_type const& arg )
+                    {
+                        EXPECT_EQ( v.key(), arg.key() );
+                        EXPECT_EQ( v.nVal, arg.nVal );
+                    } ) );
+                    break;
+                case 7:
+                    str = "Hello!";
+                    ASSERT_TRUE( s.emplace( i.key(), std::move( str ) ) );
+                    EXPECT_TRUE( str.empty() );
+                    ASSERT_TRUE( s.find( i, []( value_type const& v, value_type const& arg )
+                    {
+                        EXPECT_EQ( v.key(), arg.key() );
+                        EXPECT_EQ( v.nVal, arg.nVal );
+                        EXPECT_EQ( v.strVal, std::string( "Hello!" ) );
+                    } ) );
+                    break;
+                default:
+                    // forgot anything?..
+                    ASSERT_TRUE( false );
+                }
+
+                ASSERT_TRUE( s.contains( i.nKey ) );
+                ASSERT_TRUE( s.contains( i ) );
+                ASSERT_TRUE( (call_contains_with< c_hasFindWith, Set>()( s, i.key() )));
+                ASSERT_TRUE( s.find( i.nKey, []( value_type&, int ) {} ) );
+                ASSERT_TRUE( s.find( i, []( value_type&, value_type const& ) {} ) );
+                ASSERT_TRUE( (call_find_with< c_hasFindWith, Set >()(s, i.key(), []( value_type&, other_item const& ) {})));
+            }
+
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            // erase
+            shuffle( indices.begin(), indices.end() );
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                ASSERT_TRUE( s.contains( i.nKey ) );
+                ASSERT_TRUE( s.contains( i ) );
+                ASSERT_TRUE( (call_contains_with<c_hasFindWith, Set>()(s, i.key())));
+                ASSERT_TRUE( s.find( i.nKey, []( value_type& v, int )
+                {
+                    v.nFindCount = 1;
+                } ));
+                ASSERT_TRUE( s.find( i, []( value_type& v, value_type const& )
+                {
+                    EXPECT_EQ( ++v.nFindCount, 2 );
+                } ));
+                ASSERT_TRUE( (call_find_with< c_hasFindWith, Set >()(s, i.key(), []( value_type& v, other_item const& ) {
+                    EXPECT_EQ( ++v.nFindCount, 3 );
+                })));
+
+                int nKey = i.key() - 1;
+                switch ( idx % 6 ) {
+                case 0:
+                    ASSERT_TRUE( s.erase( i.key() ) );
+                    ASSERT_FALSE( s.erase( i.key() ) );
+                    break;
+                case 1:
+                    ASSERT_TRUE( s.erase( i ) );
+                    ASSERT_FALSE( s.erase( i ) );
+                    break;
+                case 2:
+                    ASSERT_TRUE( (call_erase_with<c_hasEraseWith, Set>()( s, i.key())));
+                    ASSERT_FALSE( (call_erase_with<c_hasEraseWith, Set>()(s, i.key())));
+                    break;
+                case 3:
+                    ASSERT_TRUE( s.erase( i.key(), [&nKey]( value_type const& v )
+                    {
+                        nKey = v.key();
+                    } ));
+                    EXPECT_EQ( i.key(), nKey );
+
+                    nKey = i.key() - 1;
+                    ASSERT_FALSE( s.erase( i.key(), [&nKey]( value_type const& v )
+                    {
+                        nKey = v.key();
+                    } ) );
+                    EXPECT_EQ( i.key(), nKey + 1 );
+                    break;
+                case 4:
+                    ASSERT_TRUE( s.erase( i, [&nKey]( value_type const& v )
+                    {
+                        nKey = v.key();
+                    } ) );
+                    EXPECT_EQ( i.key(), nKey );
+
+                    nKey = i.key() - 1;
+                    ASSERT_FALSE( s.erase( i, [&nKey]( value_type const& v )
+                    {
+                        nKey = v.key();
+                    } ) );
+                    EXPECT_EQ( i.key(), nKey + 1 );
+                    break;
+                case 5:
+                    ASSERT_TRUE( (call_erase_with<c_hasEraseWith, Set>()(s, i.key(), [&nKey]( value_type const& v )
+                    {
+                        nKey = v.key();
+                    })));
+                    EXPECT_EQ( i.key(), nKey );
+
+                    nKey = i.key() - 1;
+                    ASSERT_FALSE( (call_erase_with<c_hasEraseWith, Set>()(s, i.key(), [&nKey]( value_type const& v )
+                    {
+                        nKey = v.key();
+                    })));
+                    EXPECT_EQ( i.key(), nKey + 1 );
+                    break;
+                }
+
+                ASSERT_FALSE( s.contains( i.nKey ) );
+                ASSERT_FALSE( s.contains( i ) );
+                ASSERT_FALSE( (call_contains_with<c_hasFindWith, Set>()( s, i.key())));
+                ASSERT_FALSE( s.find( i.nKey, []( value_type&, int ) {} ) );
+                ASSERT_FALSE( s.find( i, []( value_type&, value_type const& ) {} ));
+                ASSERT_FALSE( (call_find_with<c_hasFindWith, Set>()( s, i.key(), []( value_type&, other_item const& ) {})));
+            }
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+
+            // clear
+            for ( auto& i : data ) {
+                ASSERT_TRUE( s.insert( i ) );
+            }
+
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            s.clear();
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+        }
+
+    };
+
+    template <typename Traits>
+    class RefinableSet: public StripedSet< Traits >
+    {};
+
+    TYPED_TEST_CASE_P( StripedSet );
+    TYPED_TEST_CASE_P( RefinableSet );
+
+// ****************************************************************
+// striped set
+
+    TYPED_TEST_P( StripedSet, compare )
+    {
+        typedef cc::StripedSet< 
+            typename TestFixture::container_type,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::mutex_policy< cc::striped_set::striping<>>
+        > set_type;
+
+        set_type s;
+        this->test( s );
+    }
+
+    TYPED_TEST_P( StripedSet, less )
+    {
+        typedef cc::StripedSet< 
+            typename TestFixture::container_type,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::less< typename TestFixture::less >
+        > set_type;
+
+        set_type s;
+        this->test( s );
+    }
+
+
+    TYPED_TEST_P( StripedSet, cmpmix )
+    {
+        typedef cc::StripedSet<
+            typename TestFixture::container_type,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::less< typename TestFixture::less >,
+            cds::opt::compare< typename TestFixture::cmp >
+        > set_type;
+
+        set_type s( 32 );
+        this->test( s );
+    }
+
+    TYPED_TEST_P( StripedSet, spinlock )
+    {
+        typedef cc::StripedSet<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::striping<cds::sync::spin>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::less< typename TestFixture::less >,
+            cds::opt::compare< typename TestFixture::cmp >
+        > set_type;
+
+        set_type s;
+        this->test( s );
+    }
+
+    TYPED_TEST_P( StripedSet, load_factor_resizing )
+    {
+        typedef cc::StripedSet<
+            typename TestFixture::container_type,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::less< typename TestFixture::less >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::load_factor_resizing<4>>
+        > set_type;
+
+        set_type s;
+        this->test( s );
+    }
+
+    TYPED_TEST_P( StripedSet, load_factor_resizing_rt )
+    {
+        typedef cc::StripedSet<
+            typename TestFixture::container_type,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::load_factor_resizing<0>>
+        > set_type;
+
+        set_type s( 30, cc::striped_set::load_factor_resizing<0>( 8 ));
+        this->test( s );
+    }
+
+    TYPED_TEST_P( StripedSet, single_bucket_resizing )
+    {
+        typedef cc::StripedSet<
+            typename TestFixture::container_type,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::single_bucket_size_threshold<6>>
+        > set_type;
+
+        set_type s( 30 );
+        this->test( s );
+    }
+
+    TYPED_TEST_P( StripedSet, single_bucket_resizing_rt )
+    {
+        typedef cc::StripedSet<
+            typename TestFixture::container_type,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::single_bucket_size_threshold<0>>
+        > set_type;
+
+        cc::striped_set::single_bucket_size_threshold<0> resizing_policy( 8 );
+        set_type s( 24, resizing_policy );
+        this->test( s );
+    }
+
+    TYPED_TEST_P( StripedSet, copy_policy_copy )
+    {
+        typedef cc::StripedSet<
+            typename TestFixture::container_type,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::less< typename TestFixture::less >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::load_factor_resizing<4>>,
+            cds::opt::copy_policy< cc::striped_set::copy_item >
+        > set_type;
+
+        set_type s;
+        this->test( s );
+    }
+
+    TYPED_TEST_P( StripedSet, copy_policy_move )
+    {
+        typedef cc::StripedSet<
+            typename TestFixture::container_type,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::load_factor_resizing<0>>,
+            cds::opt::copy_policy< cc::striped_set::move_item >
+        > set_type;
+
+        set_type s( 30, cc::striped_set::load_factor_resizing<0>( 8 ) );
+        this->test( s );
+    }
+
+    TYPED_TEST_P( StripedSet, copy_policy_swap )
+    {
+        typedef cc::StripedSet<
+            typename TestFixture::container_type,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::single_bucket_size_threshold<6>>,
+            cds::opt::copy_policy< cc::striped_set::swap_item >
+        > set_type;
+
+        set_type s( 30 );
+        this->test( s );
+    }
+
+    TYPED_TEST_P( StripedSet, copy_policy_special )
+    {
+        typedef cc::StripedSet<
+            typename TestFixture::container_type,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::single_bucket_size_threshold<0>>,
+            cds::opt::copy_policy< typename TestFixture::copy_policy >
+        > set_type;
+
+        cc::striped_set::single_bucket_size_threshold<0> resizing_policy( 8 );
+        set_type s( 24, resizing_policy );
+        this->test( s );
+    }
+
+
+// ****************************************************************
+// refinable set
+
+    TYPED_TEST_P( RefinableSet, compare )
+    {
+        typedef cc::StripedSet<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >
+        > set_type;
+
+        set_type s;
+        this->test( s );
+    }
+
+    TYPED_TEST_P( RefinableSet, less )
+    {
+        typedef cc::StripedSet<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::less< typename TestFixture::less >
+        > set_type;
+
+        set_type s;
+        this->test( s );
+    }
+
+
+    TYPED_TEST_P( RefinableSet, cmpmix )
+    {
+        typedef cc::StripedSet<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::less< typename TestFixture::less >,
+            cds::opt::compare< typename TestFixture::cmp >
+        > set_type;
+
+        set_type s( 32 );
+        this->test( s );
+    }
+
+    TYPED_TEST_P( RefinableSet, spinlock )
+    {
+        typedef cc::StripedSet<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<cds::sync::reentrant_spin>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::less< typename TestFixture::less >,
+            cds::opt::compare< typename TestFixture::cmp >
+        > set_type;
+
+        set_type s;
+        this->test( s );
+    }
+
+    TYPED_TEST_P( RefinableSet, load_factor_resizing )
+    {
+        typedef cc::StripedSet<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::less< typename TestFixture::less >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::load_factor_resizing<4>>
+        > set_type;
+
+        set_type s;
+        this->test( s );
+    }
+
+    TYPED_TEST_P( RefinableSet, load_factor_resizing_rt )
+    {
+        typedef cc::StripedSet<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::load_factor_resizing<0>>
+        > set_type;
+
+        set_type s( 30, cc::striped_set::load_factor_resizing<0>( 8 ) );
+        this->test( s );
+    }
+
+    TYPED_TEST_P( RefinableSet, single_bucket_resizing )
+    {
+        typedef cc::StripedSet<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::single_bucket_size_threshold<6>>
+        > set_type;
+
+        set_type s( 30 );
+        this->test( s );
+    }
+
+    TYPED_TEST_P( RefinableSet, single_bucket_resizing_rt )
+    {
+        typedef cc::StripedSet<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::single_bucket_size_threshold<0>>
+        > set_type;
+
+        cc::striped_set::single_bucket_size_threshold<0> resizing_policy( 8 );
+        set_type s( 24, resizing_policy );
+        this->test( s );
+    }
+
+    TYPED_TEST_P( RefinableSet, copy_policy_copy )
+    {
+        typedef cc::StripedSet<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::less< typename TestFixture::less >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::load_factor_resizing<4>>,
+            cds::opt::copy_policy< cc::striped_set::copy_item >
+        > set_type;
+
+        set_type s;
+        this->test( s );
+    }
+
+    TYPED_TEST_P( RefinableSet, copy_policy_move )
+    {
+        typedef cc::StripedSet<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::load_factor_resizing<0>>,
+            cds::opt::copy_policy< cc::striped_set::move_item >
+        > set_type;
+
+        set_type s( 30, cc::striped_set::load_factor_resizing<0>( 8 ) );
+        this->test( s );
+    }
+
+    TYPED_TEST_P( RefinableSet, copy_policy_swap )
+    {
+        typedef cc::StripedSet<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::single_bucket_size_threshold<6>>,
+            cds::opt::copy_policy< cc::striped_set::swap_item >
+        > set_type;
+
+        set_type s( 30 );
+        this->test( s );
+    }
+
+    TYPED_TEST_P( RefinableSet, copy_policy_special )
+    {
+        typedef cc::StripedSet<
+            typename TestFixture::container_type,
+            cds::opt::mutex_policy< cc::striped_set::refinable<>>,
+            cds::opt::hash< typename TestFixture::hash1 >,
+            cds::opt::compare< typename TestFixture::cmp >,
+            cds::opt::resizing_policy< cc::striped_set::single_bucket_size_threshold<0>>,
+            cds::opt::copy_policy< typename TestFixture::copy_policy >
+        > set_type;
+
+        cc::striped_set::single_bucket_size_threshold<0> resizing_policy( 8 );
+        set_type s( 24, resizing_policy );
+        this->test( s );
+    }
+
+    REGISTER_TYPED_TEST_CASE_P( StripedSet,
+        compare, less, cmpmix, spinlock, load_factor_resizing, load_factor_resizing_rt, single_bucket_resizing, single_bucket_resizing_rt, copy_policy_copy, copy_policy_move, copy_policy_swap, copy_policy_special
+        );
+
+    REGISTER_TYPED_TEST_CASE_P( RefinableSet,
+        compare, less, cmpmix, spinlock, load_factor_resizing, load_factor_resizing_rt, single_bucket_resizing, single_bucket_resizing_rt, copy_policy_copy, copy_policy_move, copy_policy_swap, copy_policy_special
+        );
+
+} // namespace
+
+#endif // CDSUNIT_SET_TEST_INTRUSIVE_STRIPED_SET_H
diff --git a/test/unit/tree/CMakeLists.txt b/test/unit/tree/CMakeLists.txt
new file mode 100644 (file)
index 0000000..c332e77
--- /dev/null
@@ -0,0 +1,54 @@
+set(PACKAGE_NAME unit-tree)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof")
+set(CDSGTEST_TREE_SOURCES
+    ../main.cpp
+    bronson_avltree_map_rcu_gpb.cpp
+    bronson_avltree_map_rcu_gpi.cpp
+    bronson_avltree_map_rcu_gpt.cpp
+    bronson_avltree_map_rcu_shb.cpp
+    bronson_avltree_map_rcu_sht.cpp
+    bronson_avltree_map_ptr_rcu_gpb.cpp
+    bronson_avltree_map_ptr_rcu_gpi.cpp
+    bronson_avltree_map_ptr_rcu_gpt.cpp
+    bronson_avltree_map_ptr_rcu_shb.cpp
+    bronson_avltree_map_ptr_rcu_sht.cpp
+    ellen_bintree_update_desc_pool.cpp
+    ellen_bintree_map_hp.cpp
+    ellen_bintree_map_dhp.cpp
+    ellen_bintree_map_rcu_gpb.cpp
+    ellen_bintree_map_rcu_gpi.cpp
+    ellen_bintree_map_rcu_gpt.cpp
+    ellen_bintree_map_rcu_shb.cpp
+    ellen_bintree_map_rcu_sht.cpp
+    ellen_bintree_set_dhp.cpp
+    ellen_bintree_set_hp.cpp
+    ellen_bintree_set_rcu_gpb.cpp
+    ellen_bintree_set_rcu_gpi.cpp
+    ellen_bintree_set_rcu_gpt.cpp
+    ellen_bintree_set_rcu_shb.cpp
+    ellen_bintree_set_rcu_sht.cpp
+    intrusive_ellenbintree_hp.cpp
+    intrusive_ellenbintree_dhp.cpp
+    intrusive_ellenbintree_rcu_gpb.cpp
+    intrusive_ellenbintree_rcu_gpi.cpp
+    intrusive_ellenbintree_rcu_gpt.cpp
+    intrusive_ellenbintree_rcu_shb.cpp
+    intrusive_ellenbintree_rcu_sht.cpp
+)
+
+include_directories(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_executable(${PACKAGE_NAME} ${CDSGTEST_TREE_SOURCES})
+target_link_libraries(${PACKAGE_NAME} 
+    ${CDS_SHARED_LIBRARY}
+    ${GTEST_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${CMAKE_THREAD_LIBS_INIT}
+)
+
+add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/test/unit/tree/bronson_avltree_map_ptr_rcu_gpb.cpp b/test/unit/tree/bronson_avltree_map_ptr_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..1146fac
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_bronson_avltree_map_ptr.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, BronsonAVLTreeMapPtr, rcu_implementation );
diff --git a/test/unit/tree/bronson_avltree_map_ptr_rcu_gpi.cpp b/test/unit/tree/bronson_avltree_map_ptr_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..a075a63
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_bronson_avltree_map_ptr.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, BronsonAVLTreeMapPtr, rcu_implementation );
diff --git a/test/unit/tree/bronson_avltree_map_ptr_rcu_gpt.cpp b/test/unit/tree/bronson_avltree_map_ptr_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..deefc7f
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_bronson_avltree_map_ptr.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, BronsonAVLTreeMapPtr, rcu_implementation );
diff --git a/test/unit/tree/bronson_avltree_map_ptr_rcu_shb.cpp b/test/unit/tree/bronson_avltree_map_ptr_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..3aa1569
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_bronson_avltree_map_ptr.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, BronsonAVLTreeMapPtr, rcu_implementation );
+
+#endif
diff --git a/test/unit/tree/bronson_avltree_map_ptr_rcu_sht.cpp b/test/unit/tree/bronson_avltree_map_ptr_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..5c8a1c3
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_bronson_avltree_map_ptr.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, BronsonAVLTreeMapPtr, rcu_implementation );
+
+#endif
diff --git a/test/unit/tree/bronson_avltree_map_rcu_gpb.cpp b/test/unit/tree/bronson_avltree_map_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..c0e4e20
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_bronson_avltree_map.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, BronsonAVLTreeMap, rcu_implementation );
diff --git a/test/unit/tree/bronson_avltree_map_rcu_gpi.cpp b/test/unit/tree/bronson_avltree_map_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..d855e1a
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_bronson_avltree_map.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, BronsonAVLTreeMap, rcu_implementation );
diff --git a/test/unit/tree/bronson_avltree_map_rcu_gpt.cpp b/test/unit/tree/bronson_avltree_map_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..373460c
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_bronson_avltree_map.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, BronsonAVLTreeMap, rcu_implementation );
diff --git a/test/unit/tree/bronson_avltree_map_rcu_shb.cpp b/test/unit/tree/bronson_avltree_map_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..f73f505
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_bronson_avltree_map.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, BronsonAVLTreeMap, rcu_implementation );
+
+#endif
diff --git a/test/unit/tree/bronson_avltree_map_rcu_sht.cpp b/test/unit/tree/bronson_avltree_map_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..4900cc1
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_bronson_avltree_map.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, BronsonAVLTreeMap, rcu_implementation );
+
+#endif
diff --git a/test/unit/tree/ellen_bintree_map_dhp.cpp b/test/unit/tree/ellen_bintree_map_dhp.cpp
new file mode 100644 (file)
index 0000000..5f717cb
--- /dev/null
@@ -0,0 +1,202 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_tree_map_hp.h"
+
+#include <cds/container/ellen_bintree_map_dhp.h>
+#include "test_ellen_bintree_update_desc_pool.h"
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+    class EllenBinTreeMap_DHP : public cds_test::container_tree_map_hp
+    {
+    protected:
+        typedef cds_test::container_tree_map_hp base_class;
+
+        void SetUp()
+        {
+            typedef cc::EllenBinTreeMap< gc_type, key_type, value_type > map_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, map_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+    };
+
+
+    TEST_F( EllenBinTreeMap_DHP, compare )
+    {
+        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
+            typename cc::ellen_bintree::make_map_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( EllenBinTreeMap_DHP, less )
+    {
+        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
+            typename cc::ellen_bintree::make_map_traits<
+                cds::opt::less< base_class::less >
+            >::type
+        > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( EllenBinTreeMap_DHP, cmpmix )
+    {
+        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
+            typename cc::ellen_bintree::make_map_traits<
+                cds::opt::less< base_class::less >
+                ,cds::opt::compare< cmp >
+            >::type
+        > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( EllenBinTreeMap_DHP, update_desc_pool )
+    {
+        struct map_traits: public cc::ellen_bintree::traits
+        {
+            typedef cmp compare;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( EllenBinTreeMap_DHP, update_desc_lazy_pool )
+    {
+        struct map_traits: public cc::ellen_bintree::traits
+        {
+            typedef cmp compare;
+            typedef cds::memory::pool_allocator< cds_test::update_desc, cds_test::lazy_pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( EllenBinTreeMap_DHP, item_counting )
+    {
+        struct map_traits: public cc::ellen_bintree::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( EllenBinTreeMap_DHP, backoff )
+    {
+        struct map_traits: public cc::ellen_bintree::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::lazy_pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( EllenBinTreeMap_DHP, stat )
+    {
+        struct map_traits: public cc::ellen_bintree::traits
+        {
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cc::ellen_bintree::stat<> stat;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( EllenBinTreeMap_DHP, copy_policy )
+    {
+        struct map_traits: public cc::ellen_bintree::traits
+        {
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+            typedef copy_key copy_policy;
+        };
+        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( EllenBinTreeMap_DHP, seq_cst )
+    {
+        struct map_traits: public cc::ellen_bintree::traits
+        {
+            typedef cmp compare;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::lazy_pool_accessor> update_desc_allocator;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+} // namespace
diff --git a/test/unit/tree/ellen_bintree_map_hp.cpp b/test/unit/tree/ellen_bintree_map_hp.cpp
new file mode 100644 (file)
index 0000000..07e0b5e
--- /dev/null
@@ -0,0 +1,203 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_tree_map_hp.h"
+
+#include <cds/container/ellen_bintree_map_hp.h>
+#include "test_ellen_bintree_update_desc_pool.h"
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+    class EllenBinTreeMap_HP : public cds_test::container_tree_map_hp
+    {
+    protected:
+        typedef cds_test::container_tree_map_hp base_class;
+
+        void SetUp()
+        {
+            typedef cc::EllenBinTreeMap< gc_type, key_type, value_type > map_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( map_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+
+    TEST_F( EllenBinTreeMap_HP, compare )
+    {
+        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
+            typename cc::ellen_bintree::make_map_traits<
+                cds::opt::compare< cmp >
+            >::type
+        > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( EllenBinTreeMap_HP, less )
+    {
+        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
+            typename cc::ellen_bintree::make_map_traits<
+                cds::opt::less< base_class::less >
+            >::type
+        > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( EllenBinTreeMap_HP, cmpmix )
+    {
+        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
+            typename cc::ellen_bintree::make_map_traits<
+                cds::opt::less< base_class::less >
+                ,cds::opt::compare< cmp >
+            >::type
+        > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( EllenBinTreeMap_HP, update_desc_pool )
+    {
+        struct map_traits: public cc::ellen_bintree::traits
+        {
+            typedef cmp compare;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( EllenBinTreeMap_HP, update_desc_lazy_pool )
+    {
+        struct map_traits: public cc::ellen_bintree::traits
+        {
+            typedef cmp compare;
+            typedef cds::memory::pool_allocator< cds_test::update_desc, cds_test::lazy_pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( EllenBinTreeMap_HP, item_counting )
+    {
+        struct map_traits: public cc::ellen_bintree::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( EllenBinTreeMap_HP, backoff )
+    {
+        struct map_traits: public cc::ellen_bintree::traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::lazy_pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( EllenBinTreeMap_HP, stat )
+    {
+        struct map_traits: public cc::ellen_bintree::traits
+        {
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cc::ellen_bintree::stat<> stat;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( EllenBinTreeMap_HP, copy_policy )
+    {
+        struct map_traits: public cc::ellen_bintree::traits
+        {
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+            typedef copy_key copy_policy;
+        };
+        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+    TEST_F( EllenBinTreeMap_HP, seq_cst )
+    {
+        struct map_traits: public cc::ellen_bintree::traits
+        {
+            typedef cmp compare;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::lazy_pool_accessor> update_desc_allocator;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        test( m );
+    }
+
+} // namespace
diff --git a/test/unit/tree/ellen_bintree_map_rcu_gpb.cpp b/test/unit/tree/ellen_bintree_map_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..d844cad
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_ellen_bintree_map_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, EllenBinTreeMap, rcu_implementation );
diff --git a/test/unit/tree/ellen_bintree_map_rcu_gpi.cpp b/test/unit/tree/ellen_bintree_map_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..077f98f
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_ellen_bintree_map_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, EllenBinTreeMap, rcu_implementation );
diff --git a/test/unit/tree/ellen_bintree_map_rcu_gpt.cpp b/test/unit/tree/ellen_bintree_map_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..fc9b9a1
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_ellen_bintree_map_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, EllenBinTreeMap, rcu_implementation );
diff --git a/test/unit/tree/ellen_bintree_map_rcu_shb.cpp b/test/unit/tree/ellen_bintree_map_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..3466a1c
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_ellen_bintree_map_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, EllenBinTreeMap, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/tree/ellen_bintree_map_rcu_sht.cpp b/test/unit/tree/ellen_bintree_map_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..c284c27
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_ellen_bintree_map_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, EllenBinTreeMap, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/tree/ellen_bintree_set_dhp.cpp b/test/unit/tree/ellen_bintree_set_dhp.cpp
new file mode 100644 (file)
index 0000000..1e7dc06
--- /dev/null
@@ -0,0 +1,180 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_tree_set_hp.h"
+
+#include <cds/container/ellen_bintree_set_dhp.h>
+#include "test_ellen_bintree_update_desc_pool.h"
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::DHP gc_type;
+
+    class EllenBinTreeSet_DHP : public cds_test::container_tree_set_hp
+    {
+    protected:
+        typedef cds_test::container_tree_set_hp base_class;
+        typedef int key_type;
+
+        struct generic_traits: public cc::ellen_bintree::traits
+        {
+            typedef base_class::key_extractor key_extractor;
+        };
+
+        void SetUp()
+        {
+            typedef cc::EllenBinTreeSet< gc_type, key_type, int_item > set_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct();
+        }
+    };
+
+
+    TEST_F( EllenBinTreeSet_DHP, compare )
+    {
+        typedef cc::EllenBinTreeSet< gc_type, key_type, int_item,
+            typename cc::ellen_bintree::make_set_traits<
+                cc::opt::type_traits< generic_traits >
+                ,cds::opt::compare< cmp >
+            >::type
+        > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( EllenBinTreeSet_DHP, less )
+    {
+        typedef cc::EllenBinTreeSet< gc_type, key_type, int_item,
+            typename cc::ellen_bintree::make_set_traits<
+                cc::opt::type_traits< generic_traits >
+                ,cds::opt::less< base_class::less >
+            >::type
+        > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( EllenBinTreeSet_DHP, cmpmix )
+    {
+        typedef cc::EllenBinTreeSet< gc_type, key_type, int_item,
+            typename cc::ellen_bintree::make_set_traits<
+                cc::opt::type_traits< generic_traits >
+                ,cds::opt::less< base_class::less >
+                ,cds::opt::compare< cmp >
+            >::type
+        > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( EllenBinTreeSet_DHP, update_desc_pool )
+    {
+        struct set_traits: public generic_traits
+        {
+            typedef cmp compare;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeSet< gc_type, key_type, int_item, set_traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( EllenBinTreeSet_DHP, update_desc_lazy_pool )
+    {
+        struct set_traits: public generic_traits
+        {
+            typedef cmp compare;
+            typedef cds::memory::pool_allocator< cds_test::update_desc, cds_test::lazy_pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeSet< gc_type, key_type, int_item, set_traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( EllenBinTreeSet_DHP, item_counting )
+    {
+        struct set_traits: public generic_traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeSet< gc_type, key_type, int_item, set_traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( EllenBinTreeSet_DHP, backoff )
+    {
+        struct set_traits: public generic_traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::lazy_pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeSet< gc_type, key_type, int_item, set_traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( EllenBinTreeSet_DHP, stat )
+    {
+        struct set_traits: public generic_traits
+        {
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cc::ellen_bintree::stat<> stat;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeSet< gc_type, key_type, int_item, set_traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/tree/ellen_bintree_set_hp.cpp b/test/unit/tree/ellen_bintree_set_hp.cpp
new file mode 100644 (file)
index 0000000..1152288
--- /dev/null
@@ -0,0 +1,181 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_tree_set_hp.h"
+
+#include <cds/container/ellen_bintree_set_hp.h>
+#include "test_ellen_bintree_update_desc_pool.h"
+
+namespace {
+    namespace cc = cds::container;
+    typedef cds::gc::HP gc_type;
+
+    class EllenBinTreeSet_HP : public cds_test::container_tree_set_hp
+    {
+    protected:
+        typedef cds_test::container_tree_set_hp base_class;
+        typedef int key_type;
+
+        struct generic_traits: public cc::ellen_bintree::traits
+        {
+            typedef base_class::key_extractor key_extractor;
+        };
+
+        void SetUp()
+        {
+            typedef cc::EllenBinTreeSet< gc_type, key_type, int_item > set_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( set_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+    };
+
+
+    TEST_F( EllenBinTreeSet_HP, compare )
+    {
+        typedef cc::EllenBinTreeSet< gc_type, key_type, int_item,
+            typename cc::ellen_bintree::make_set_traits<
+                cc::opt::type_traits< generic_traits >
+                ,cds::opt::compare< cmp >
+            >::type
+        > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( EllenBinTreeSet_HP, less )
+    {
+        typedef cc::EllenBinTreeSet< gc_type, key_type, int_item,
+            typename cc::ellen_bintree::make_set_traits<
+                cc::opt::type_traits< generic_traits >
+                ,cds::opt::less< base_class::less >
+            >::type
+        > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( EllenBinTreeSet_HP, cmpmix )
+    {
+        typedef cc::EllenBinTreeSet< gc_type, key_type, int_item,
+            typename cc::ellen_bintree::make_set_traits<
+                cc::opt::type_traits< generic_traits >
+                ,cds::opt::less< base_class::less >
+                ,cds::opt::compare< cmp >
+            >::type
+        > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( EllenBinTreeSet_HP, update_desc_pool )
+    {
+        struct set_traits: public generic_traits
+        {
+            typedef cmp compare;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeSet< gc_type, key_type, int_item, set_traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( EllenBinTreeSet_HP, update_desc_lazy_pool )
+    {
+        struct set_traits: public generic_traits
+        {
+            typedef cmp compare;
+            typedef cds::memory::pool_allocator< cds_test::update_desc, cds_test::lazy_pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeSet< gc_type, key_type, int_item, set_traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( EllenBinTreeSet_HP, item_counting )
+    {
+        struct set_traits: public generic_traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeSet< gc_type, key_type, int_item, set_traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( EllenBinTreeSet_HP, backoff )
+    {
+        struct set_traits: public generic_traits
+        {
+            typedef cmp compare;
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::lazy_pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeSet< gc_type, key_type, int_item, set_traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+    TEST_F( EllenBinTreeSet_HP, stat )
+    {
+        struct set_traits: public generic_traits
+        {
+            typedef base_class::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cc::ellen_bintree::stat<> stat;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeSet< gc_type, key_type, int_item, set_traits > set_type;
+
+        set_type s;
+        test( s );
+    }
+
+} // namespace
diff --git a/test/unit/tree/ellen_bintree_set_rcu_gpb.cpp b/test/unit/tree/ellen_bintree_set_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..9314c44
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_ellen_bintree_set_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, EllenBinTreeSet, rcu_implementation );
diff --git a/test/unit/tree/ellen_bintree_set_rcu_gpi.cpp b/test/unit/tree/ellen_bintree_set_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..018ffd0
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_ellen_bintree_set_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, EllenBinTreeSet, rcu_implementation );
diff --git a/test/unit/tree/ellen_bintree_set_rcu_gpt.cpp b/test/unit/tree/ellen_bintree_set_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..8032982
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_ellen_bintree_set_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, EllenBinTreeSet, rcu_implementation );
diff --git a/test/unit/tree/ellen_bintree_set_rcu_shb.cpp b/test/unit/tree/ellen_bintree_set_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..b2a11b0
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_ellen_bintree_set_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, EllenBinTreeSet, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/tree/ellen_bintree_set_rcu_sht.cpp b/test/unit/tree/ellen_bintree_set_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..89bab95
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_ellen_bintree_set_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, EllenBinTreeSet, rcu_implementation );
+
+#endif // CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/tree/ellen_bintree_update_desc_pool.cpp b/test/unit/tree/ellen_bintree_update_desc_pool.cpp
new file mode 100644 (file)
index 0000000..6a986ff
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/container/ellen_bintree_set_hp.h>
+#include "test_ellen_bintree_update_desc_pool.h"
+
+namespace cds_test {
+    pool_type      s_Pool;
+    lazy_pool_type s_LazyPool;
+}
diff --git a/test/unit/tree/intrusive_ellenbintree_dhp.cpp b/test/unit/tree/intrusive_ellenbintree_dhp.cpp
new file mode 100644 (file)
index 0000000..34f5416
--- /dev/null
@@ -0,0 +1,297 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_tree_hp.h"
+
+#include <cds/intrusive/ellen_bintree_dhp.h>
+#include "test_ellen_bintree_update_desc_pool.h"
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::DHP gc_type;
+
+    class IntrusiveEllenBinTree_DHP : public cds_test::intrusive_tree_hp
+    {
+    protected:
+        typedef cds_test::intrusive_tree_hp base_class;
+
+    protected:
+        typedef base_class::key_type key_type;
+
+        typedef typename base_class::base_int_item< ci::ellen_bintree::node<gc_type>> base_item_type;
+        typedef typename base_class::member_int_item< ci::ellen_bintree::node<gc_type>>  member_item_type;
+
+        void SetUp()
+        {
+            struct list_traits : public ci::ellen_bintree::traits
+            {
+                typedef ci::ellen_bintree::base_hook< ci::opt::gc<gc_type>> hook;
+            };
+            typedef ci::EllenBinTree< gc_type, key_type, base_item_type > tree_type;
+
+            cds::gc::dhp::GarbageCollector::Construct( 16, tree_type::c_nHazardPtrCount );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::dhp::GarbageCollector::Destruct();
+        }
+
+        struct generic_traits: public ci::ellen_bintree::traits
+        {
+            typedef base_class::key_extractor key_extractor;
+            typedef mock_disposer disposer;
+        };
+    };
+
+    TEST_F( IntrusiveEllenBinTree_DHP, base_cmp )
+    {
+        typedef ci::EllenBinTree< gc_type, key_type, base_item_type,
+            ci::ellen_bintree::make_traits< 
+                ci::opt::type_traits< generic_traits >
+                ,ci::opt::hook< ci::ellen_bintree::base_hook< ci::opt::gc< gc_type >>>
+                ,ci::opt::compare< cmp<base_item_type>>
+            >::type
+        > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_DHP, base_less )
+    {
+        typedef ci::EllenBinTree< gc_type, key_type, base_item_type,
+            ci::ellen_bintree::make_traits< 
+                ci::opt::type_traits< generic_traits >
+                ,ci::opt::hook< ci::ellen_bintree::base_hook< ci::opt::gc< gc_type >>>
+                ,ci::opt::less< less<base_item_type>>
+            >::type
+        > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_DHP, base_item_counter )
+    {
+        typedef ci::EllenBinTree< gc_type, key_type, base_item_type,
+            ci::ellen_bintree::make_traits< 
+                ci::opt::type_traits< generic_traits >
+                ,ci::opt::hook< ci::ellen_bintree::base_hook< ci::opt::gc< gc_type >>>
+                ,ci::opt::compare< cmp<base_item_type>>
+                ,ci::opt::item_counter< simple_item_counter >
+            >::type
+        > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_DHP, base_backoff )
+    {
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::base_hook< ci::opt::gc< gc_type >> hook;
+            typedef cmp<base_item_type> compare;
+            typedef base_class::less<base_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+        };
+
+        typedef ci::EllenBinTree< gc_type, key_type, base_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_DHP, base_seq_cst )
+    {
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::base_hook< ci::opt::gc< gc_type >> hook;
+            typedef cmp<base_item_type> compare;
+            typedef base_class::less<base_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::pause back_off;
+            typedef ci::opt::v::sequential_consistent memory_model;
+        };
+
+        typedef ci::EllenBinTree< gc_type, key_type, base_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_DHP, base_update_desc_pool )
+    {
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::base_hook< ci::opt::gc< gc_type >> hook;
+            typedef base_class::less<base_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+        };
+
+        typedef ci::EllenBinTree< gc_type, key_type, base_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_DHP, base_update_desc_lazy_pool )
+    {
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::base_hook< ci::opt::gc< gc_type >> hook;
+            typedef base_class::less<base_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::lazy_pool_accessor> update_desc_allocator;
+        };
+
+        typedef ci::EllenBinTree< gc_type, key_type, base_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    // member hook
+    TEST_F( IntrusiveEllenBinTree_DHP, member_cmp )
+    {
+        typedef ci::EllenBinTree< gc_type, key_type, member_item_type,
+            ci::ellen_bintree::make_traits< 
+                ci::opt::type_traits< generic_traits >
+                ,ci::opt::hook< ci::ellen_bintree::member_hook< offsetof( member_item_type, hMember), ci::opt::gc< gc_type >>>
+                ,ci::opt::compare< cmp<member_item_type>>
+            >::type
+        > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_DHP, member_less )
+    {
+        typedef ci::EllenBinTree< gc_type, key_type, member_item_type,
+            ci::ellen_bintree::make_traits< 
+                ci::opt::type_traits< generic_traits >
+                ,ci::opt::hook< ci::ellen_bintree::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< gc_type >>>
+                ,ci::opt::less< less<member_item_type>>
+            >::type
+        > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_DHP, member_item_counter )
+    {
+        typedef ci::EllenBinTree< gc_type, key_type, member_item_type,
+            ci::ellen_bintree::make_traits< 
+                ci::opt::type_traits< generic_traits >
+                ,ci::opt::hook< ci::ellen_bintree::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< gc_type >>>
+                ,ci::opt::compare< cmp<member_item_type>>
+                ,ci::opt::item_counter< simple_item_counter >
+            >::type
+        > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_DHP, member_backoff )
+    {
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< gc_type >> hook;
+            typedef cmp<member_item_type> compare;
+            typedef base_class::less<member_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+        };
+
+        typedef ci::EllenBinTree< gc_type, key_type, member_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_DHP, member_seq_cst )
+    {
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< gc_type >> hook;
+            typedef cmp<member_item_type> compare;
+            typedef base_class::less<member_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::pause back_off;
+            typedef ci::opt::v::sequential_consistent memory_model;
+        };
+
+        typedef ci::EllenBinTree< gc_type, key_type, member_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_DHP, member_update_desc_pool )
+    {
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< gc_type >> hook;
+            typedef base_class::less<member_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+        };
+
+        typedef ci::EllenBinTree< gc_type, key_type, member_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_DHP, member_update_desc_lazy_pool )
+    {
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< gc_type >> hook;
+            typedef base_class::less<member_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::lazy_pool_accessor> update_desc_allocator;
+        };
+
+        typedef ci::EllenBinTree< gc_type, key_type, member_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+} // namespace
diff --git a/test/unit/tree/intrusive_ellenbintree_hp.cpp b/test/unit/tree/intrusive_ellenbintree_hp.cpp
new file mode 100644 (file)
index 0000000..8674c61
--- /dev/null
@@ -0,0 +1,299 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#include "test_intrusive_tree_hp.h"
+
+#include <cds/intrusive/ellen_bintree_hp.h>
+#include "test_ellen_bintree_update_desc_pool.h"
+
+namespace {
+    namespace ci = cds::intrusive;
+    typedef cds::gc::HP gc_type;
+
+    class IntrusiveEllenBinTree_HP : public cds_test::intrusive_tree_hp
+    {
+    protected:
+        typedef cds_test::intrusive_tree_hp base_class;
+
+    protected:
+        typedef base_class::key_type key_type;
+
+        typedef typename base_class::base_int_item< ci::ellen_bintree::node<gc_type>> base_item_type;
+        typedef typename base_class::member_int_item< ci::ellen_bintree::node<gc_type>>  member_item_type;
+
+        void SetUp()
+        {
+            struct tree_traits : public ci::ellen_bintree::traits
+            {
+                typedef ci::ellen_bintree::base_hook< ci::opt::gc<gc_type>> hook;
+            };
+            typedef ci::EllenBinTree< gc_type, key_type, base_item_type > tree_type;
+
+            // +1 - for guarded_ptr
+            cds::gc::hp::GarbageCollector::Construct( tree_type::c_nHazardPtrCount + 1, 1, 16 );
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            cds::gc::hp::GarbageCollector::Destruct( true );
+        }
+
+        struct generic_traits: public ci::ellen_bintree::traits
+        {
+            typedef base_class::key_extractor key_extractor;
+            typedef mock_disposer disposer;
+        };
+    };
+
+
+    TEST_F( IntrusiveEllenBinTree_HP, base_cmp )
+    {
+        typedef ci::EllenBinTree< gc_type, key_type, base_item_type,
+            ci::ellen_bintree::make_traits< 
+                ci::opt::type_traits< generic_traits >
+                ,ci::opt::hook< ci::ellen_bintree::base_hook< ci::opt::gc< gc_type >>>
+                ,ci::opt::compare< cmp<base_item_type>>
+            >::type
+        > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_HP, base_less )
+    {
+        typedef ci::EllenBinTree< gc_type, key_type, base_item_type,
+            ci::ellen_bintree::make_traits< 
+                ci::opt::type_traits< generic_traits >
+                ,ci::opt::hook< ci::ellen_bintree::base_hook< ci::opt::gc< gc_type >>>
+                ,ci::opt::less< less<base_item_type>>
+            >::type
+        > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_HP, base_item_counter )
+    {
+        typedef ci::EllenBinTree< gc_type, key_type, base_item_type,
+            ci::ellen_bintree::make_traits< 
+                ci::opt::type_traits< generic_traits >
+                ,ci::opt::hook< ci::ellen_bintree::base_hook< ci::opt::gc< gc_type >>>
+                ,ci::opt::compare< cmp<base_item_type>>
+                ,ci::opt::item_counter< simple_item_counter >
+            >::type
+        > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_HP, base_backoff )
+    {
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::base_hook< ci::opt::gc< gc_type >> hook;
+            typedef cmp<base_item_type> compare;
+            typedef base_class::less<base_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+        };
+
+        typedef ci::EllenBinTree< gc_type, key_type, base_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_HP, base_seq_cst )
+    {
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::base_hook< ci::opt::gc< gc_type >> hook;
+            typedef cmp<base_item_type> compare;
+            typedef base_class::less<base_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::pause back_off;
+            typedef ci::opt::v::sequential_consistent memory_model;
+        };
+
+        typedef ci::EllenBinTree< gc_type, key_type, base_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_HP, base_update_desc_pool )
+    {
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::base_hook< ci::opt::gc< gc_type >> hook;
+            typedef base_class::less<base_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::memory::pool_allocator< cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+        };
+
+        typedef ci::EllenBinTree< gc_type, key_type, base_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_HP, base_update_desc_lazy_pool )
+    {
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::base_hook< ci::opt::gc< gc_type >> hook;
+            typedef base_class::less<base_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::lazy_pool_accessor> update_desc_allocator;
+        };
+
+        typedef ci::EllenBinTree< gc_type, key_type, base_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    // member hook
+    TEST_F( IntrusiveEllenBinTree_HP, member_cmp )
+    {
+        typedef ci::EllenBinTree< gc_type, key_type, member_item_type,
+            ci::ellen_bintree::make_traits< 
+                ci::opt::type_traits< generic_traits >
+                ,ci::opt::hook< ci::ellen_bintree::member_hook< offsetof( member_item_type, hMember), ci::opt::gc< gc_type >>>
+                ,ci::opt::compare< cmp<member_item_type>>
+            >::type
+        > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_HP, member_less )
+    {
+        typedef ci::EllenBinTree< gc_type, key_type, member_item_type,
+            ci::ellen_bintree::make_traits< 
+                ci::opt::type_traits< generic_traits >
+                ,ci::opt::hook< ci::ellen_bintree::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< gc_type >>>
+                ,ci::opt::less< less<member_item_type>>
+            >::type
+        > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_HP, member_item_counter )
+    {
+        typedef ci::EllenBinTree< gc_type, key_type, member_item_type,
+            ci::ellen_bintree::make_traits< 
+                ci::opt::type_traits< generic_traits >
+                ,ci::opt::hook< ci::ellen_bintree::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< gc_type >>>
+                ,ci::opt::compare< cmp<member_item_type>>
+                ,ci::opt::item_counter< simple_item_counter >
+            >::type
+        > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_HP, member_backoff )
+    {
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< gc_type >> hook;
+            typedef cmp<member_item_type> compare;
+            typedef base_class::less<member_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+        };
+
+        typedef ci::EllenBinTree< gc_type, key_type, member_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_HP, member_seq_cst )
+    {
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< gc_type >> hook;
+            typedef cmp<member_item_type> compare;
+            typedef base_class::less<member_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::pause back_off;
+            typedef ci::opt::v::sequential_consistent memory_model;
+        };
+
+        typedef ci::EllenBinTree< gc_type, key_type, member_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_HP, member_update_desc_pool )
+    {
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< gc_type >> hook;
+            typedef base_class::less<member_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+        };
+
+        typedef ci::EllenBinTree< gc_type, key_type, member_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+    TEST_F( IntrusiveEllenBinTree_HP, member_update_desc_lazy_pool )
+    {
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< gc_type >> hook;
+            typedef base_class::less<member_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::lazy_pool_accessor> update_desc_allocator;
+        };
+
+        typedef ci::EllenBinTree< gc_type, key_type, member_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        test( t );
+    }
+
+} // namespace
diff --git a/test/unit/tree/intrusive_ellenbintree_rcu_gpb.cpp b/test/unit/tree/intrusive_ellenbintree_rcu_gpb.cpp
new file mode 100644 (file)
index 0000000..865f22d
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_buffered.h>
+
+#include "test_intrusive_ellen_bintree_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPB, IntrusiveEllenBinTree, rcu_implementation );
diff --git a/test/unit/tree/intrusive_ellenbintree_rcu_gpi.cpp b/test/unit/tree/intrusive_ellenbintree_rcu_gpi.cpp
new file mode 100644 (file)
index 0000000..d8e9ce2
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_instant.h>
+
+#include "test_intrusive_ellen_bintree_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_instant<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPI, IntrusiveEllenBinTree, rcu_implementation );
diff --git a/test/unit/tree/intrusive_ellenbintree_rcu_gpt.cpp b/test/unit/tree/intrusive_ellenbintree_rcu_gpt.cpp
new file mode 100644 (file)
index 0000000..6f66c1c
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/general_threaded.h>
+
+#include "test_intrusive_ellen_bintree_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::general_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_GPT, IntrusiveEllenBinTree, rcu_implementation );
diff --git a/test/unit/tree/intrusive_ellenbintree_rcu_shb.cpp b/test/unit/tree/intrusive_ellenbintree_rcu_shb.cpp
new file mode 100644 (file)
index 0000000..413134d
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_buffered.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_intrusive_ellen_bintree_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_buffered<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHB, IntrusiveEllenBinTree, rcu_implementation );
+
+#endif // #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/tree/intrusive_ellenbintree_rcu_sht.cpp b/test/unit/tree/intrusive_ellenbintree_rcu_sht.cpp
new file mode 100644 (file)
index 0000000..6cea39f
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/urcu/signal_threaded.h>
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+
+#include "test_intrusive_ellen_bintree_rcu.h"
+
+namespace {
+
+    typedef cds::urcu::signal_threaded<> rcu_implementation;
+
+} // namespace
+
+INSTANTIATE_TYPED_TEST_CASE_P( RCU_SHT, IntrusiveEllenBinTree, rcu_implementation );
+
+#endif // #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
diff --git a/test/unit/tree/test_bronson_avltree_map.h b/test/unit/tree/test_bronson_avltree_map.h
new file mode 100644 (file)
index 0000000..46ebc83
--- /dev/null
@@ -0,0 +1,752 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_TREE_TEST_BRONSON_AVLTREE_MAP_H
+#define CDSUNIT_TREE_TEST_BRONSON_AVLTREE_MAP_H
+
+#include "test_tree_map_data.h"
+#include <cds/container/bronson_avltree_map_rcu.h>
+#include <cds/sync/pool_monitor.h>
+#include <cds/memory/vyukov_queue_pool.h>
+
+namespace {
+
+    namespace cc = cds::container;
+
+    class bronson_avltree_map: public cds_test::tree_map_fixture
+    {
+    public:
+        static size_t const kSize = 1000;
+
+    protected:
+        template <class Map>
+        void test( Map& m )
+        {
+            // Precondition: map is empty
+            // Postcondition: map is empty
+
+            ASSERT_TRUE( m.empty());
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            size_t const kkSize = kSize;
+
+            std::vector<key_type> arrKeys;
+            for ( int i = 0; i < static_cast<int>(kkSize); ++i )
+                arrKeys.push_back( key_type( i ));
+            shuffle( arrKeys.begin(), arrKeys.end());
+
+            std::vector< value_type > arrVals;
+            for ( size_t i = 0; i < kkSize; ++i ) {
+                value_type val;
+                val.nVal = static_cast<int>( i );
+                val.strVal = std::to_string( i );
+                arrVals.push_back( val );
+            }
+
+            // insert/find
+            for ( auto const& i : arrKeys ) {
+                value_type const& val( arrVals.at( i.nKey ));
+
+                ASSERT_FALSE( m.contains( i.nKey ));
+                ASSERT_FALSE( m.contains( i ));
+                ASSERT_FALSE( m.contains( other_item( i.nKey ), other_less()));
+                ASSERT_FALSE( m.find( i, []( key_type const&, value_type& ) {
+                    ASSERT_TRUE( false );
+                } ));
+                ASSERT_FALSE( m.find( i.nKey, []( key_type const&, value_type& ) {
+                    EXPECT_TRUE( false );
+                } ));
+                ASSERT_FALSE( m.find_with( other_item( i.nKey ), other_less(), []( key_type const&, value_type& ) {
+                    EXPECT_TRUE( false );
+                } ));
+
+                std::pair< bool, bool > updResult;
+
+                switch ( i.nKey % 16 ) {
+                case 0:
+                    ASSERT_TRUE( m.insert( i ));
+                    ASSERT_FALSE( m.insert( i ));
+                    ASSERT_TRUE( m.find( i.nKey, []( key_type const& key, value_type& val ) {
+                        val.nVal = key.nKey;
+                        val.strVal = std::to_string( key.nKey );
+                    } ));
+                    break;
+                case 1:
+                    ASSERT_TRUE( m.insert( i.nKey ));
+                    ASSERT_FALSE( m.insert( i.nKey ));
+                    ASSERT_TRUE( m.find( i.nKey, []( key_type const& key, value_type& val ) {
+                        val.nVal = key.nKey;
+                        val.strVal = std::to_string( key.nKey );
+                    } ));
+                    break;
+                case 2:
+                    ASSERT_TRUE( m.insert( std::to_string( i.nKey )));
+                    ASSERT_FALSE( m.insert( std::to_string( i.nKey )));
+                    ASSERT_TRUE( m.find( i.nKey, []( key_type const& key, value_type& val ) {
+                        val.nVal = key.nKey;
+                        val.strVal = std::to_string( key.nKey );
+                    } ));
+                    break;
+                case 3:
+                    ASSERT_TRUE( m.insert( i, val ));
+                    ASSERT_FALSE( m.insert( i, val ));
+                    break;
+                case 4:
+                    ASSERT_TRUE( m.insert( i.nKey, val.strVal ));
+                    ASSERT_FALSE( m.insert( i.nKey, val.strVal ));
+                    break;
+                case 5:
+                    ASSERT_TRUE( m.insert( val.strVal, i.nKey ));
+                    ASSERT_FALSE( m.insert( val.strVal, i.nKey ));
+                    break;
+                case 6:
+                    ASSERT_TRUE( m.insert_with( i, []( key_type const& key, value_type& val ) {
+                        val.nVal = key.nKey;
+                        val.strVal = std::to_string( key.nKey );
+                    } ));
+                    ASSERT_FALSE( m.insert_with( i, []( key_type const& /*key*/, value_type& /*val*/ ) {
+                        EXPECT_TRUE( false );
+                    } ));
+                    break;
+                case 7:
+                    ASSERT_TRUE( m.insert_with( i.nKey, []( key_type const& key, value_type& val ) {
+                        val.nVal = key.nKey;
+                        val.strVal = std::to_string( key.nKey );
+                    } ));
+                    ASSERT_FALSE( m.insert_with( i.nKey, []( key_type const& /*key*/, value_type& /*val*/ ) {
+                        EXPECT_TRUE( false );
+                    } ));
+                    break;
+                case 8:
+                    ASSERT_TRUE( m.insert_with( val.strVal, []( key_type const& key, value_type& val ) {
+                        val.nVal = key.nKey;
+                        val.strVal = std::to_string( key.nKey );
+                    } ));
+                    ASSERT_FALSE( m.insert_with( val.strVal, []( key_type const& /*key*/, value_type& /*val*/ ) {
+                        EXPECT_TRUE( false );
+                    } ));
+                    break;
+                case 9:
+                    updResult = m.update( i.nKey, []( bool, key_type const& /*key*/, value_type& /*val*/ ) {
+                        EXPECT_TRUE( false );
+                    }, false );
+                    ASSERT_FALSE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( i.nKey, []( bool bNew, key_type const& key, value_type& val ) {
+                        EXPECT_TRUE( bNew );
+                        val.nVal = key.nKey;
+                    });
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_TRUE( updResult.second );
+
+                    updResult = m.update( i.nKey, []( bool bNew, key_type const& key, value_type& val ) {
+                        EXPECT_FALSE( bNew );
+                        EXPECT_EQ( key.nKey, val.nVal );
+                        val.strVal = std::to_string( val.nVal );
+                    } );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+                    break;
+                case 10:
+                    updResult = m.update( i, []( bool, key_type const& /*key*/, value_type& /*val*/ ) {
+                        EXPECT_TRUE( false );
+                    }, false );
+                    ASSERT_FALSE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( i, []( bool bNew, key_type const& key, value_type& val ) {
+                        EXPECT_TRUE( bNew );
+                        val.nVal = key.nKey;
+                    });
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_TRUE( updResult.second );
+
+                    updResult = m.update( i, []( bool bNew, key_type const& key, value_type& val ) {
+                        EXPECT_FALSE( bNew );
+                        EXPECT_EQ( key.nKey, val.nVal );
+                        val.strVal = std::to_string( val.nVal );
+                    } );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+                    break;
+                case 11:
+                    updResult = m.update( val.strVal, []( bool, key_type const& /*key*/, value_type& /*val*/ ) {
+                        EXPECT_TRUE( false );
+                    }, false );
+                    ASSERT_FALSE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( val.strVal, []( bool bNew, key_type const& key, value_type& val ) {
+                        EXPECT_TRUE( bNew );
+                        val.nVal = key.nKey;
+                    });
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_TRUE( updResult.second );
+
+                    updResult = m.update( val.strVal, []( bool bNew, key_type const& key, value_type& val ) {
+                        EXPECT_FALSE( bNew );
+                        EXPECT_EQ( key.nKey, val.nVal );
+                        val.strVal = std::to_string( val.nVal );
+                    } );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+                    break;
+                case 12:
+                    ASSERT_TRUE( m.emplace( i.nKey ));
+                    ASSERT_FALSE( m.emplace( i.nKey ));
+                    ASSERT_TRUE( m.find( i.nKey, []( key_type const& key, value_type& val ) {
+                        val.nVal = key.nKey;
+                        val.strVal = std::to_string( key.nKey );
+                    } ));
+                    break;
+                case 13:
+                    ASSERT_TRUE( m.emplace( i, i.nKey ));
+                    ASSERT_FALSE( m.emplace( i, i.nKey ));
+                    break;
+                case 14:
+                    {
+                        std::string str = val.strVal;
+                        ASSERT_TRUE( m.emplace( i, std::move( str )));
+                        ASSERT_TRUE( str.empty());
+                        str = val.strVal;
+                        ASSERT_FALSE( m.emplace( i, std::move( str )));
+                        ASSERT_TRUE( str.empty());
+                    }
+                    break;
+                case 15:
+                    {
+                        std::string str = val.strVal;
+                        ASSERT_TRUE( m.emplace( i, i.nKey, std::move( str )));
+                        ASSERT_TRUE( str.empty());
+                        str = val.strVal;
+                        ASSERT_FALSE( m.emplace( i, i.nKey, std::move( str )));
+                        ASSERT_TRUE( str.empty());
+                    }
+                    break;
+                }
+
+                ASSERT_TRUE( m.contains( i.nKey ));
+                ASSERT_TRUE( m.contains( i ));
+                ASSERT_TRUE( m.contains( other_item( i.nKey ), other_less()));
+                ASSERT_TRUE( m.find( i, []( key_type const& key, value_type& val ) {
+                    EXPECT_EQ( key.nKey, val.nVal );
+                    EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+                } ));
+                ASSERT_TRUE( m.find( i.nKey, []( key_type const& key, value_type& val ) {
+                    EXPECT_EQ( key.nKey, val.nVal );
+                    EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+                } ));
+                ASSERT_TRUE( m.find_with( other_item( i.nKey ), other_less(), []( key_type const& key, value_type& val ) {
+                    EXPECT_EQ( key.nKey, val.nVal );
+                    EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+                } ));
+            }
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            ASSERT_TRUE( m.check_consistency());
+
+            shuffle( arrKeys.begin(), arrKeys.end() );
+
+            // erase/find
+            for ( auto const& i : arrKeys ) {
+                value_type const& val( arrVals.at( i.nKey ) );
+
+                ASSERT_TRUE( m.contains( i.nKey ));
+                ASSERT_TRUE( m.contains( val.strVal ) );
+                ASSERT_TRUE( m.contains( i ));
+                ASSERT_TRUE( m.contains( other_item( i.nKey ), other_less()));
+                ASSERT_TRUE( m.find( i, []( key_type const& key, value_type& val ) {
+                    EXPECT_EQ( key.nKey, val.nVal );
+                    EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+                } ));
+                ASSERT_TRUE( m.find( i.nKey, []( key_type const& key, value_type& val ) {
+                    EXPECT_EQ( key.nKey, val.nVal );
+                    EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+                } ));
+                ASSERT_TRUE( m.find_with( other_item( i.nKey ), other_less(), []( key_type const& key, value_type& val ) {
+                    EXPECT_EQ( key.nKey, val.nVal );
+                    EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+                } ));
+
+
+                switch ( i.nKey % 8 ) {
+                case 0:
+                    ASSERT_TRUE( m.erase( i ));
+                    ASSERT_FALSE( m.erase( i ));
+                    break;
+                case 1:
+                    ASSERT_TRUE( m.erase( i.nKey ));
+                    ASSERT_FALSE( m.erase( i.nKey ));
+                    break;
+                case 2:
+                    ASSERT_TRUE( m.erase( val.strVal ));
+                    ASSERT_FALSE( m.erase( val.strVal ));
+                    break;
+                case 3:
+                    ASSERT_TRUE( m.erase_with( other_item( i.nKey ), other_less()));
+                    ASSERT_FALSE( m.erase_with( other_item( i.nKey ), other_less()));
+                    break;
+                case 4:
+                    ASSERT_TRUE( m.erase( i, []( key_type const& key, value_type& val ) {
+                        EXPECT_EQ( key.nKey, val.nVal );
+                        EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+                    }));
+                    ASSERT_FALSE( m.erase( i, []( key_type const& /*key*/, value_type& /*val*/ ) {
+                        EXPECT_TRUE( false );
+                    }));
+                    break;
+                case 5:
+                    ASSERT_TRUE( m.erase( i.nKey, []( key_type const& key, value_type& val ) {
+                        EXPECT_EQ( key.nKey, val.nVal );
+                        EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+                    }));
+                    ASSERT_FALSE( m.erase( i.nKey, []( key_type const& /*key*/, value_type& /*val*/ ) {
+                        EXPECT_TRUE( false );
+                    }));
+                    break;
+                case 6:
+                    ASSERT_TRUE( m.erase( val.strVal, []( key_type const& key, value_type& val ) {
+                        EXPECT_EQ( key.nKey, val.nVal );
+                        EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+                    }));
+                    ASSERT_FALSE( m.erase( val.strVal, []( key_type const& /*key*/, value_type& /*val*/ ) {
+                        EXPECT_TRUE( false );
+                    }));
+                    break;
+                case 7:
+                    ASSERT_TRUE( m.erase_with( other_item( i.nKey ), other_less(), []( key_type const& key, value_type& val ) {
+                        EXPECT_EQ( key.nKey, val.nVal );
+                        EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+                    }));
+                    ASSERT_FALSE( m.erase_with( other_item( i.nKey ), other_less(), []( key_type const& /*key*/, value_type& /*val*/ ) {
+                        EXPECT_TRUE( false );
+                    }));
+                    break;
+                }
+
+                ASSERT_FALSE( m.contains( i.nKey ));
+                ASSERT_FALSE( m.contains( i ));
+                ASSERT_FALSE( m.contains( val.strVal ));
+                ASSERT_FALSE( m.contains( other_item( i.nKey ), other_less()));
+                ASSERT_FALSE( m.find( i, []( key_type const& /*key*/, value_type& /*val*/ ) {
+                    ASSERT_TRUE( false );
+                } ));
+                ASSERT_FALSE( m.find( i.nKey, []( key_type const& /*key*/, value_type& /*val*/ ) {
+                    EXPECT_TRUE( false );
+                } ));
+                ASSERT_FALSE( m.find_with( other_item( i.nKey ), other_less(), []( key_type const& /*key*/, value_type& /*val*/ ) {
+                    EXPECT_TRUE( false );
+                } ));
+            }
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            // clear
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i ));
+
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            m.clear();
+
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i, arrVals[ i.nKey ] ));
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            typedef typename Map::exempt_ptr exempt_ptr;
+
+            // extract
+            shuffle( arrKeys.begin(), arrKeys.end() );
+
+            exempt_ptr xp;
+            for ( auto const& i : arrKeys ) {
+                value_type const& val = arrVals.at( i.nKey );
+
+                ASSERT_TRUE( m.contains( i.nKey ) );
+
+                switch ( i.nKey % 4 ) {
+                case 0:
+                    xp = m.extract( i.nKey );
+                    break;
+                case 1:
+                    xp = m.extract( i );
+                    break;
+                case 2:
+                    xp = m.extract( val.strVal );
+                    break;
+                case 3:
+                    xp = m.extract_with( other_item( i.nKey ), other_less() );
+                    break;
+                }
+                ASSERT_FALSE( !xp );
+                EXPECT_EQ( xp->nVal, i.nKey );
+
+                ASSERT_FALSE( m.contains( i.nKey ) );
+
+                switch ( i.nKey % 4 ) {
+                case 0:
+                    xp = m.extract( i.nKey );
+                    break;
+                case 1:
+                    xp = m.extract( i );
+                    break;
+                case 2:
+                    xp = m.extract( val.strVal );
+                    break;
+                case 3:
+                    xp = m.extract_with( other_item( i.nKey ), other_less() );
+                    break;
+                }
+                EXPECT_TRUE( !xp );
+            }
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+
+            // extract_min
+            shuffle( arrKeys.begin(), arrKeys.end() );
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i, arrVals[ i.nKey ] ));
+
+            size_t nCount = 0;
+            int nKey = -1;
+            while ( !m.empty() ) {
+                switch ( nCount % 3 ) {
+                case 0:
+                    xp = m.extract_min();
+                    break;
+                case 1:
+                    xp = m.extract_min( [nKey]( key_type const& key ) {
+                        EXPECT_EQ( nKey + 1, key.nKey );
+                    });
+                    break;
+                case 2:
+                    {
+                        key_type key;
+                        xp = m.extract_min_key( key );
+                        EXPECT_EQ( nKey + 1, key.nKey );
+                    }
+                    break;
+                }
+                ASSERT_FALSE( !xp );
+                EXPECT_EQ( xp->nVal, nKey + 1 );
+                nKey = xp->nVal;
+                ++nCount;
+            }
+            xp = m.extract_min();
+            ASSERT_TRUE( !xp );
+            EXPECT_EQ( kkSize, nCount );
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            // extract_max
+            shuffle( arrKeys.begin(), arrKeys.end() );
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i, arrVals[ i.nKey ] ));
+
+            nKey = kkSize;
+            nCount = 0;
+            while ( !m.empty() ) {
+                switch ( nCount % 3 ) {
+                case 0:
+                    xp = m.extract_max();
+                    break;
+                case 1:
+                    xp = m.extract_max( [nKey]( key_type const& key ) {
+                        EXPECT_EQ( nKey - 1, key.nKey );
+                    } );
+                    break;
+                case 2:
+                    {
+                        key_type key;
+                        xp = m.extract_max_key( key );
+                        EXPECT_EQ( nKey - 1, key.nKey );
+                    }
+                    break;
+                }
+                ASSERT_FALSE( !xp );
+                EXPECT_EQ( xp->nVal, nKey - 1 );
+                nKey = xp->nVal;
+                ++nCount;
+            }
+
+            xp = m.extract_max();
+            ASSERT_TRUE( !xp );
+            EXPECT_EQ( kkSize, nCount );
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+        }
+    };
+
+
+    template <class RCU>
+    class BronsonAVLTreeMap: public bronson_avltree_map
+    {
+        typedef bronson_avltree_map base_class;
+    public:
+        typedef cds::urcu::gc<RCU> rcu_type;
+
+    protected:
+        void SetUp()
+        {
+            RCU::Construct();
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            RCU::Destruct();
+        }
+    };
+
+    TYPED_TEST_CASE_P( BronsonAVLTreeMap );
+
+    TYPED_TEST_P( BronsonAVLTreeMap, compare )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type,
+            typename cc::bronson_avltree::make_traits<
+                cds::opt::compare< typename TestFixture::cmp >
+            >::type
+        > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( BronsonAVLTreeMap, less )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type,
+            typename cc::bronson_avltree::make_traits<
+                cds::opt::less< typename TestFixture::less >
+            >::type
+        > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( BronsonAVLTreeMap, cmpmix )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type,
+            typename cc::bronson_avltree::make_traits<
+                cds::opt::less< typename TestFixture::less >
+                , cds::opt::compare< typename TestFixture::cmp >
+            >::type
+        > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( BronsonAVLTreeMap, stat )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct map_traits: public cc::bronson_avltree::traits
+        {
+            typedef typename TestFixture::less  less;
+            typedef cc::bronson_avltree::stat<> stat;
+        };
+
+        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( BronsonAVLTreeMap, item_counting )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct map_traits: public cc::bronson_avltree::traits
+        {
+            typedef typename TestFixture::cmp    compare;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+
+        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    struct bronson_relaxed_insert_traits: public cc::bronson_avltree::traits
+    {
+        static bool const relaxed_insert = true;
+    };
+
+    TYPED_TEST_P( BronsonAVLTreeMap, relaxed_insert )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct map_traits: public bronson_relaxed_insert_traits
+        {
+            typedef typename TestFixture::cmp    compare;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+
+        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( BronsonAVLTreeMap, seq_cst )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct map_traits: public cc::bronson_avltree::traits
+        {
+            typedef typename TestFixture::cmp    compare;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+
+        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( BronsonAVLTreeMap, sync_monitor )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct map_traits: public cc::bronson_avltree::traits
+        {
+            typedef typename TestFixture::cmp    compare;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::sync::pool_monitor< cds::memory::vyukov_queue_pool< std::mutex >> sync_monitor;
+        };
+
+        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( BronsonAVLTreeMap, lazy_sync_monitor )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct map_traits: public cc::bronson_avltree::traits
+        {
+            typedef typename TestFixture::cmp    compare;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::sync::pool_monitor< cds::memory::lazy_vyukov_queue_pool< std::mutex >> sync_monitor;
+        };
+
+        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( BronsonAVLTreeMap, rcu_check_deadlock )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct map_traits: public cc::bronson_avltree::traits
+        {
+            typedef typename TestFixture::cmp    compare;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::sync::pool_monitor< cds::memory::vyukov_queue_pool< std::mutex >> sync_monitor;
+            typedef cds::opt::v::rcu_assert_deadlock rcu_check_deadlock;
+        };
+
+        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( BronsonAVLTreeMap, rcu_no_check_deadlock )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct map_traits: public cc::bronson_avltree::traits
+        {
+            typedef typename TestFixture::cmp    compare;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::sync::pool_monitor< cds::memory::lazy_vyukov_queue_pool< std::mutex >> sync_monitor;
+            typedef cds::opt::v::rcu_no_check_deadlock rcu_check_deadlock;
+        };
+
+        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    REGISTER_TYPED_TEST_CASE_P( BronsonAVLTreeMap,
+        compare, less, cmpmix, stat, item_counting, relaxed_insert, seq_cst, sync_monitor, lazy_sync_monitor, rcu_check_deadlock, rcu_no_check_deadlock
+    );
+
+} // namespace
+
+#endif // #ifndef CDSUNIT_TREE_TEST_BRONSON_AVLTREE_MAP_H
diff --git a/test/unit/tree/test_bronson_avltree_map_ptr.h b/test/unit/tree/test_bronson_avltree_map_ptr.h
new file mode 100644 (file)
index 0000000..6a302d4
--- /dev/null
@@ -0,0 +1,727 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_TREE_TEST_BRONSON_AVLTREE_MAP_PTR_H
+#define CDSUNIT_TREE_TEST_BRONSON_AVLTREE_MAP_PTR_H
+
+#include "test_tree_map_data.h"
+#include <cds/container/bronson_avltree_map_rcu.h>
+#include <cds/sync/pool_monitor.h>
+#include <cds/memory/vyukov_queue_pool.h>
+
+namespace {
+
+    namespace cc = cds::container;
+
+    class bronson_avltree_map_ptr: public cds_test::tree_map_fixture
+    {
+    public:
+        static size_t const kSize = 1000;
+
+        struct value_type: public cds_test::tree_map_fixture::value_type
+        {
+            typedef cds_test::tree_map_fixture::value_type base_class;
+
+            size_t nDisposeCount = 0;
+
+            // Inheriting constructors
+            using base_class::value_type;
+        };
+
+        struct mock_disposer
+        {
+            void operator()( value_type * val ) const
+            {
+                ++val->nDisposeCount;
+            }
+        };
+
+    protected:
+        template <class Map>
+        void test( Map& m )
+        {
+            // Precondition: map is empty
+            // Postcondition: map is empty
+
+            ASSERT_TRUE( m.empty());
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            typedef typename Map::key_type key_type;
+            typedef typename std::remove_pointer< typename Map::mapped_type >::type mapped_type;
+            size_t const kkSize = kSize;
+
+            std::vector<key_type> arrKeys;
+            for ( int i = 0; i < static_cast<int>(kkSize); ++i )
+                arrKeys.push_back( key_type( i ));
+            shuffle( arrKeys.begin(), arrKeys.end());
+
+            std::vector< value_type > arrVals;
+            for ( size_t i = 0; i < kkSize; ++i ) {
+                value_type val;
+                val.nVal = static_cast<int>( i );
+                val.strVal = std::to_string( i );
+                arrVals.push_back( val );
+            }
+
+            // insert/find
+            for ( auto const& i : arrKeys ) {
+                value_type& val( arrVals.at( i.nKey ));
+
+                ASSERT_FALSE( m.contains( i.nKey ));
+                ASSERT_FALSE( m.contains( i ));
+                ASSERT_FALSE( m.contains( other_item( i.nKey ), other_less()));
+                ASSERT_FALSE( m.find( i, []( key_type const&, mapped_type& ) {
+                    ASSERT_TRUE( false );
+                } ));
+                ASSERT_FALSE( m.find( i.nKey, []( key_type const&, mapped_type& ) {
+                    EXPECT_TRUE( false );
+                } ));
+                ASSERT_FALSE( m.find_with( other_item( i.nKey ), other_less(), []( key_type const&, mapped_type& ) {
+                    EXPECT_TRUE( false );
+                } ));
+
+                std::pair< bool, bool > updResult;
+
+                switch ( i.nKey % 6 ) {
+                case 0:
+                    ASSERT_TRUE( m.insert( i, &val ));
+                    ASSERT_FALSE( m.insert( i, &val ));
+                    ASSERT_TRUE( m.find( i.nKey, []( key_type const& key, mapped_type& val ) {
+                        val.nVal = key.nKey;
+                        val.strVal = std::to_string( key.nKey );
+                    } ));
+                    break;
+                case 1:
+                    ASSERT_TRUE( m.insert( i.nKey, &val ));
+                    ASSERT_FALSE( m.insert( i.nKey, &val ));
+                    ASSERT_TRUE( m.find( i.nKey, []( key_type const& key, mapped_type& val ) {
+                        val.nVal = key.nKey;
+                        val.strVal = std::to_string( key.nKey );
+                    } ));
+                    break;
+                case 2:
+                    ASSERT_TRUE( m.insert( std::to_string( i.nKey ), &val ));
+                    ASSERT_FALSE( m.insert( std::to_string( i.nKey ), &val ));
+                    ASSERT_TRUE( m.find( i.nKey, []( key_type const& key, mapped_type& val ) {
+                        val.nVal = key.nKey;
+                        val.strVal = std::to_string( key.nKey );
+                    } ));
+                    break;
+                case 3:
+                    updResult = m.update( i.nKey, &val, false );
+                    ASSERT_FALSE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( i.nKey, &val );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_TRUE( updResult.second );
+
+                    updResult = m.update( i.nKey, &val );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+                    break;
+                case 4:
+                    updResult = m.update( i, &val, false );
+                    ASSERT_FALSE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( i, &val );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_TRUE( updResult.second );
+
+                    updResult = m.update( i, &val );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+                    break;
+                case 5:
+                    updResult = m.update( val.strVal, &val, false );
+                    ASSERT_FALSE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( val.strVal, &val );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_TRUE( updResult.second );
+
+                    updResult = m.update( val.strVal, &val );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+                    break;
+                }
+
+                ASSERT_TRUE( m.contains( i.nKey ));
+                ASSERT_TRUE( m.contains( i ));
+                ASSERT_TRUE( m.contains( other_item( i.nKey ), other_less()));
+                ASSERT_TRUE( m.find( i, []( key_type const& key, mapped_type& val ) {
+                    EXPECT_EQ( key.nKey, val.nVal );
+                    EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+                } ));
+                ASSERT_TRUE( m.find( i.nKey, []( key_type const& key, mapped_type& val ) {
+                    EXPECT_EQ( key.nKey, val.nVal );
+                    EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+                } ));
+                ASSERT_TRUE( m.find_with( other_item( i.nKey ), other_less(), []( key_type const& key, mapped_type& val ) {
+                    EXPECT_EQ( key.nKey, val.nVal );
+                    EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+                } ));
+            }
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            ASSERT_TRUE( m.check_consistency());
+
+            shuffle( arrKeys.begin(), arrKeys.end() );
+
+            // erase/find
+            for ( auto const& i : arrKeys ) {
+                value_type const& val( arrVals.at( i.nKey ) );
+
+                ASSERT_TRUE( m.contains( i.nKey ));
+                ASSERT_TRUE( m.contains( val.strVal ) );
+                ASSERT_TRUE( m.contains( i ));
+                ASSERT_TRUE( m.contains( other_item( i.nKey ), other_less()));
+                ASSERT_TRUE( m.find( i, []( key_type const& key, mapped_type& val ) {
+                    EXPECT_EQ( key.nKey, val.nVal );
+                    EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+                } ));
+                ASSERT_TRUE( m.find( i.nKey, []( key_type const& key, mapped_type& val ) {
+                    EXPECT_EQ( key.nKey, val.nVal );
+                    EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+                } ));
+                ASSERT_TRUE( m.find_with( other_item( i.nKey ), other_less(), []( key_type const& key, mapped_type& val ) {
+                    EXPECT_EQ( key.nKey, val.nVal );
+                    EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+                } ));
+
+
+                switch ( i.nKey % 8 ) {
+                case 0:
+                    ASSERT_TRUE( m.erase( i ));
+                    ASSERT_FALSE( m.erase( i ));
+                    break;
+                case 1:
+                    ASSERT_TRUE( m.erase( i.nKey ));
+                    ASSERT_FALSE( m.erase( i.nKey ));
+                    break;
+                case 2:
+                    ASSERT_TRUE( m.erase( val.strVal ));
+                    ASSERT_FALSE( m.erase( val.strVal ));
+                    break;
+                case 3:
+                    ASSERT_TRUE( m.erase_with( other_item( i.nKey ), other_less()));
+                    ASSERT_FALSE( m.erase_with( other_item( i.nKey ), other_less()));
+                    break;
+                case 4:
+                    ASSERT_TRUE( m.erase( i, []( key_type const& key, mapped_type& val ) {
+                        EXPECT_EQ( key.nKey, val.nVal );
+                        EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+                    }));
+                    ASSERT_FALSE( m.erase( i, []( key_type const& /*key*/, mapped_type& /*val*/ ) {
+                        EXPECT_TRUE( false );
+                    }));
+                    break;
+                case 5:
+                    ASSERT_TRUE( m.erase( i.nKey, []( key_type const& key, mapped_type& v ) {
+                        EXPECT_EQ( key.nKey, v.nVal );
+                        EXPECT_EQ( std::to_string( key.nKey ), v.strVal );
+                    }));
+                    ASSERT_FALSE( m.erase( i.nKey, []( key_type const&, mapped_type& ) {
+                        EXPECT_TRUE( false );
+                    }));
+                    break;
+                case 6:
+                    ASSERT_TRUE( m.erase( val.strVal, []( key_type const& key, mapped_type& v ) {
+                        EXPECT_EQ( key.nKey, v.nVal );
+                        EXPECT_EQ( std::to_string( key.nKey ), v.strVal );
+                    }));
+                    ASSERT_FALSE( m.erase( val.strVal, []( key_type const&, mapped_type& ) {
+                        EXPECT_TRUE( false );
+                    }));
+                    break;
+                case 7:
+                    ASSERT_TRUE( m.erase_with( other_item( i.nKey ), other_less(), []( key_type const& key, mapped_type& v ) {
+                        EXPECT_EQ( key.nKey, v.nVal );
+                        EXPECT_EQ( std::to_string( key.nKey ), v.strVal );
+                    }));
+                    ASSERT_FALSE( m.erase_with( other_item( i.nKey ), other_less(), []( key_type const& key, mapped_type& v ) {
+                        EXPECT_TRUE( false );
+                    }));
+                    break;
+                }
+
+                ASSERT_FALSE( m.contains( i.nKey ));
+                ASSERT_FALSE( m.contains( i ));
+                ASSERT_FALSE( m.contains( val.strVal ));
+                ASSERT_FALSE( m.contains( other_item( i.nKey ), other_less()));
+                ASSERT_FALSE( m.find( i, []( key_type const& /*key*/, mapped_type& /*val*/ ) {
+                    ASSERT_TRUE( false );
+                } ));
+                ASSERT_FALSE( m.find( i.nKey, []( key_type const& /*key*/, mapped_type& /*val*/ ) {
+                    EXPECT_TRUE( false );
+                } ));
+                ASSERT_FALSE( m.find_with( other_item( i.nKey ), other_less(), []( key_type const& /*key*/, mapped_type& /*val*/ ) {
+                    EXPECT_TRUE( false );
+                } ));
+            }
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            Map::gc::force_dispose();
+            for ( auto const& item: arrVals ) {
+                EXPECT_EQ( item.nDisposeCount, 1 );
+            }
+
+            // clear
+            for ( auto const& i : arrKeys ) {
+                value_type& val( arrVals.at( i.nKey ) );
+                ASSERT_TRUE( m.insert( i, &val ));
+            }
+
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            m.clear();
+
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            Map::gc::force_dispose();
+            for ( auto const& item : arrVals ) {
+                EXPECT_EQ( item.nDisposeCount, 2 );
+            }
+
+            ASSERT_TRUE( m.check_consistency() );
+
+
+            // RCU-specific test related to exempt_ptr
+            typedef typename Map::exempt_ptr exempt_ptr;
+            exempt_ptr xp;
+
+            // extract
+            for ( auto const& i : arrKeys ) {
+                value_type& val( arrVals.at( i.nKey ) );
+                ASSERT_TRUE( m.insert( i, &val ) );
+            }
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            for ( auto const& i : arrKeys ) {
+                value_type const& val = arrVals.at( i.nKey );
+
+                EXPECT_TRUE( m.contains( i.nKey ) );
+
+                switch ( i.nKey % 4 ) {
+                case 0:
+                    xp = m.extract( i.nKey );
+                    break;
+                case 1:
+                    xp = m.extract( i );
+                    break;
+                case 2:
+                    xp = m.extract( val.strVal );
+                    break;
+                case 3:
+                    xp = m.extract_with( other_item( i.nKey ), other_less() );
+                    break;
+                }
+                ASSERT_FALSE( !xp );
+                EXPECT_EQ( xp->nVal, i.nKey );
+
+                EXPECT_FALSE( m.contains( i.nKey ) );
+            }
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+            xp.release();
+
+            Map::gc::force_dispose();
+            for ( auto const& item : arrVals ) {
+                EXPECT_EQ( item.nDisposeCount, 3 );
+            }
+
+            // extract_min
+            shuffle( arrKeys.begin(), arrKeys.end() );
+            for ( auto const& i : arrKeys ) {
+                value_type& val( arrVals.at( i.nKey ) );
+                ASSERT_TRUE( m.insert( i, &val ) );
+            }
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+            ASSERT_TRUE( m.check_consistency() );
+
+            int nPrevKey = -1;
+            size_t nCount = 0;
+            while ( !m.empty() ) {
+                switch ( nCount % 3 ) {
+                case 0:
+                    xp = m.extract_min();
+                    break;
+                case 1:
+                    xp = m.extract_min( [nPrevKey]( key_type const& k ) {
+                        EXPECT_EQ( k.nKey, nPrevKey + 1 );
+                    } );
+                    break;
+                case 2:
+                {
+                    key_type key;
+                    xp = m.extract_min_key( key );
+                    EXPECT_EQ( key.nKey, nPrevKey + 1 );
+                }
+                break;
+                }
+                ASSERT_FALSE( !xp );
+                EXPECT_EQ( xp->nVal, nPrevKey + 1 );
+
+                nPrevKey = xp->nVal;
+                ++nCount;
+            }
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+            EXPECT_EQ( nCount, kkSize );
+            xp.release();
+
+            Map::gc::force_dispose();
+            for ( auto const& item : arrVals ) {
+                EXPECT_EQ( item.nDisposeCount, 4 );
+            }
+
+            // extract_max
+            shuffle( arrKeys.begin(), arrKeys.end() );
+            for ( auto const& i : arrKeys ) {
+                value_type& val( arrVals.at( i.nKey ) );
+                ASSERT_TRUE( m.insert( i, &val ) );
+            }
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+            ASSERT_TRUE( m.check_consistency() );
+
+            nPrevKey = static_cast<int>(kkSize);
+            nCount = 0;
+            while ( !m.empty() ) {
+                switch ( nCount % 3 ) {
+                case 0:
+                    xp = m.extract_max();
+                    break;
+                case 1:
+                    xp = m.extract_max( [nPrevKey]( key_type const& k ) {
+                        EXPECT_EQ( k.nKey, nPrevKey - 1 );
+                    } );
+                    break;
+                case 2:
+                {
+                    key_type key;
+                    xp = m.extract_max_key( key );
+                    EXPECT_EQ( key.nKey, nPrevKey - 1 );
+                }
+                break;
+                }
+                ASSERT_FALSE( !xp );
+                EXPECT_EQ( xp->nVal, nPrevKey - 1 );
+
+                nPrevKey = xp->nVal;
+                ++nCount;
+            }
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+            EXPECT_EQ( nCount, kkSize );
+            xp.release();
+
+            Map::gc::force_dispose();
+            for ( auto const& item : arrVals ) {
+                EXPECT_EQ( item.nDisposeCount, 5 );
+            }
+
+            // extract min/max on empty map
+            xp = m.extract_min();
+            EXPECT_TRUE( !xp );
+            xp = m.extract_min( []( key_type const& ) { EXPECT_FALSE( true ); } );
+            EXPECT_TRUE( !xp );
+            xp = m.extract_max();
+            EXPECT_TRUE( !xp );
+            xp = m.extract_max( []( key_type const& ) { EXPECT_FALSE( true ); } );
+            EXPECT_TRUE( !xp );
+            {
+                key_type key;
+                key.nKey = -100;
+                xp = m.extract_min_key( key );
+                EXPECT_TRUE( !xp );
+                EXPECT_EQ( key.nKey, -100 );
+                xp = m.extract_max_key( key );
+                EXPECT_TRUE( !xp );
+                EXPECT_EQ( key.nKey, -100 );
+            }
+
+            // checking empty map
+            ASSERT_TRUE( m.check_consistency() );
+        }
+    };
+
+    template <class RCU>
+    class BronsonAVLTreeMapPtr: public bronson_avltree_map_ptr
+    {
+        typedef bronson_avltree_map_ptr base_class;
+    public:
+        typedef cds::urcu::gc<RCU> rcu_type;
+
+    protected:
+        void SetUp()
+        {
+            RCU::Construct();
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            RCU::Destruct();
+        }
+    };
+
+    struct bronson_traits: public cds::container::bronson_avltree::traits
+    {
+        typedef bronson_avltree_map_ptr::mock_disposer disposer;
+    };
+
+    TYPED_TEST_CASE_P( BronsonAVLTreeMapPtr );
+
+    TYPED_TEST_P( BronsonAVLTreeMapPtr, compare )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type*,
+            typename cc::bronson_avltree::make_traits<
+                cds::opt::compare< typename TestFixture::cmp >
+                ,cds::intrusive::opt::disposer< bronson_avltree_map_ptr::mock_disposer >
+            >::type
+        > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( BronsonAVLTreeMapPtr, less )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type*,
+            typename cc::bronson_avltree::make_traits<
+                cds::opt::less< typename TestFixture::less >
+                , cds::intrusive::opt::disposer< bronson_avltree_map_ptr::mock_disposer >
+            >::type
+        > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( BronsonAVLTreeMapPtr, cmpmix )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type*,
+            typename cc::bronson_avltree::make_traits<
+                cds::opt::less< typename TestFixture::less >
+                ,cds::opt::compare< typename TestFixture::cmp >
+                , cds::intrusive::opt::disposer< bronson_avltree_map_ptr::mock_disposer >
+            >::type
+        > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( BronsonAVLTreeMapPtr, stat )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct map_traits: public bronson_traits
+        {
+            typedef typename TestFixture::less  less;
+            typedef cc::bronson_avltree::stat<> stat;
+        };
+
+        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type*, map_traits > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( BronsonAVLTreeMapPtr, item_counting )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct map_traits: public bronson_traits
+        {
+            typedef typename TestFixture::cmp    compare;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+
+        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type*, map_traits > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    struct bronson_relaxed_insert_traits: public bronson_traits
+    {
+        static bool const relaxed_insert = true;
+    };
+
+    TYPED_TEST_P( BronsonAVLTreeMapPtr, relaxed_insert )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct map_traits: public bronson_relaxed_insert_traits
+        {
+            typedef typename TestFixture::cmp    compare;
+            typedef cds::atomicity::item_counter item_counter;
+        };
+
+        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type*, map_traits > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( BronsonAVLTreeMapPtr, seq_cst )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct map_traits: public bronson_traits
+        {
+            typedef typename TestFixture::cmp    compare;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+
+        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type*, map_traits > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( BronsonAVLTreeMapPtr, sync_monitor )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct map_traits: public bronson_traits
+        {
+            typedef typename TestFixture::cmp    compare;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::sync::pool_monitor< cds::memory::vyukov_queue_pool< std::mutex >> sync_monitor;
+        };
+
+        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type*, map_traits > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( BronsonAVLTreeMapPtr, lazy_sync_monitor )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct map_traits: public bronson_traits
+        {
+            typedef typename TestFixture::cmp    compare;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::sync::pool_monitor< cds::memory::lazy_vyukov_queue_pool< std::mutex >> sync_monitor;
+        };
+
+        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type*, map_traits > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( BronsonAVLTreeMapPtr, rcu_check_deadlock )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct map_traits: public bronson_traits
+        {
+            typedef typename TestFixture::cmp    compare;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::sync::pool_monitor< cds::memory::vyukov_queue_pool< std::mutex >> sync_monitor;
+            typedef cds::opt::v::rcu_assert_deadlock rcu_check_deadlock;
+        };
+
+        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type*, map_traits > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( BronsonAVLTreeMapPtr, rcu_no_check_deadlock )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::key_type key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct map_traits: public bronson_traits
+        {
+            typedef typename TestFixture::cmp    compare;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::sync::pool_monitor< cds::memory::lazy_vyukov_queue_pool< std::mutex >> sync_monitor;
+            typedef cds::opt::v::rcu_no_check_deadlock rcu_check_deadlock;
+        };
+
+        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type*, map_traits > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    REGISTER_TYPED_TEST_CASE_P( BronsonAVLTreeMapPtr,
+        compare, less, cmpmix, stat, item_counting, relaxed_insert, seq_cst, sync_monitor, lazy_sync_monitor, rcu_check_deadlock, rcu_no_check_deadlock
+    );
+
+
+} // namespace
+
+#endif // #ifndef CDSUNIT_TREE_TEST_BRONSON_AVLTREE_MAP_PTR_H
diff --git a/test/unit/tree/test_ellen_bintree_map_rcu.h b/test/unit/tree/test_ellen_bintree_map_rcu.h
new file mode 100644 (file)
index 0000000..746cac6
--- /dev/null
@@ -0,0 +1,234 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_TREE_TEST_ELLEN_BINTREE_MAP_RCU_H
+#define CDSUNIT_TREE_TEST_ELLEN_BINTREE_MAP_RCU_H
+
+#include "test_tree_map_rcu.h"
+#include <cds/container/ellen_bintree_map_rcu.h>
+#include "test_ellen_bintree_update_desc_pool.h"
+
+namespace {
+    namespace cc = cds::container;
+
+    template <class RCU>
+    class EllenBinTreeMap: public cds_test::container_tree_map_rcu
+    {
+        typedef cds_test::container_tree_map_rcu base_class;
+    public:
+        typedef cds::urcu::gc<RCU> rcu_type;
+
+    protected:
+
+        void SetUp()
+        {
+            RCU::Construct();
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            RCU::Destruct();
+        }
+    };
+
+    TYPED_TEST_CASE_P( EllenBinTreeMap );
+
+    TYPED_TEST_P( EllenBinTreeMap, compare )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
+            typename cc::ellen_bintree::make_map_traits<
+                cds::opt::compare< typename TestFixture::cmp >
+            >::type
+        > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( EllenBinTreeMap, less )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
+            typename cc::ellen_bintree::make_map_traits<
+                cds::opt::less< typename TestFixture::less >
+            >::type
+        > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( EllenBinTreeMap, update_desc_pool )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
+            typename cc::ellen_bintree::make_map_traits<
+                cds::opt::less< typename TestFixture::less >
+                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor>>
+            >::type
+        > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( EllenBinTreeMap, update_desc_lazy_pool )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
+            typename cc::ellen_bintree::make_map_traits<
+                cds::opt::less< typename TestFixture::less >
+                , cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator<cds_test::update_desc, cds_test::lazy_pool_accessor>>
+            >::type
+        > map_type;
+
+            map_type m;
+            this->test( m );
+    }
+
+    TYPED_TEST_P( EllenBinTreeMap, cmpmix )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
+            typename cc::ellen_bintree::make_map_traits<
+                cds::opt::less< typename TestFixture::less >
+                ,cds::opt::compare< typename TestFixture::cmp >
+            >::type
+        > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( EllenBinTreeMap, item_counting )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct map_traits: public cc::ellen_bintree::traits
+        {
+            typedef typename TestFixture::cmp compare;
+            typedef typename TestFixture::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( EllenBinTreeMap, backoff )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct map_traits: public cc::ellen_bintree::traits
+        {
+            typedef typename TestFixture::cmp compare;
+            typedef typename TestFixture::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::lazy_pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( EllenBinTreeMap, stat )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct map_traits: public cc::ellen_bintree::traits
+        {
+            typedef typename TestFixture::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cc::ellen_bintree::stat<> stat;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    TYPED_TEST_P( EllenBinTreeMap, copy_policy )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::value_type value_type;
+
+        struct map_traits: public cc::ellen_bintree::traits
+        {
+            typedef typename TestFixture::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cc::ellen_bintree::stat<> stat;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::lazy_pool_accessor> update_desc_allocator;
+            typedef typename TestFixture::copy_key copy_policy;
+        };
+        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type, map_traits > map_type;
+
+        map_type m;
+        this->test( m );
+    }
+
+    REGISTER_TYPED_TEST_CASE_P( EllenBinTreeMap,
+        compare, less, update_desc_pool, update_desc_lazy_pool, cmpmix, item_counting, backoff, stat, copy_policy
+    );
+
+} // namespace
+
+#endif // CDSUNIT_TREE_TEST_ELLEN_BINTREE_MAP_RCU_H
\ No newline at end of file
diff --git a/test/unit/tree/test_ellen_bintree_set_rcu.h b/test/unit/tree/test_ellen_bintree_set_rcu.h
new file mode 100644 (file)
index 0000000..83f68f2
--- /dev/null
@@ -0,0 +1,239 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+#ifndef CDSUNIT_TREE_TEST_ELLEN_BINTREE_SET_RCU_H
+#define CDSUNIT_TREE_TEST_ELLEN_BINTREE_SET_RCU_H
+
+#include "test_tree_set_rcu.h"
+#include <cds/container/ellen_bintree_set_rcu.h>
+#include "test_ellen_bintree_update_desc_pool.h"
+
+
+namespace {
+    namespace cc = cds::container;
+
+    template <class RCU>
+    class EllenBinTreeSet: public cds_test::container_tree_set_rcu
+    {
+        typedef cds_test::container_tree_set_rcu base_class;
+    public:
+        typedef cds::urcu::gc<RCU> rcu_type;
+
+    protected:
+        void SetUp()
+        {
+            RCU::Construct();
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            RCU::Destruct();
+        }
+    };
+
+    TYPED_TEST_CASE_P( EllenBinTreeSet );
+
+    TYPED_TEST_P( EllenBinTreeSet, compare )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::int_item int_item;
+        typedef typename TestFixture::key_extractor key_extractor;
+
+        typedef cc::EllenBinTreeSet< rcu_type, int, int_item,
+            typename cc::ellen_bintree::make_set_traits<
+                cds::opt::compare< typename TestFixture::cmp >
+                ,cc::ellen_bintree::key_extractor< key_extractor >
+            >::type
+        > set_type;
+
+        set_type s;
+        this->test( s );
+    }
+
+    TYPED_TEST_P( EllenBinTreeSet, less )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::int_item int_item;
+        typedef typename TestFixture::key_extractor key_extractor;
+
+        typedef cc::EllenBinTreeSet< rcu_type, int, int_item,
+            typename cc::ellen_bintree::make_set_traits<
+                cds::opt::less< typename TestFixture::less >
+                ,cc::ellen_bintree::key_extractor< key_extractor >
+            >::type
+        > set_type;
+
+        set_type s;
+        this->test( s );
+    }
+
+    TYPED_TEST_P( EllenBinTreeSet, cmpmix )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::int_item int_item;
+        typedef typename TestFixture::key_extractor key_extractor;
+
+        typedef cc::EllenBinTreeSet< rcu_type, int, int_item,
+            typename cc::ellen_bintree::make_set_traits<
+                cds::opt::less< typename TestFixture::less >
+                ,cds::opt::compare< typename TestFixture::cmp >
+                ,cc::ellen_bintree::key_extractor< key_extractor >
+            >::type
+        > set_type;
+
+        set_type s;
+        this->test( s );
+    }
+
+    TYPED_TEST_P( EllenBinTreeSet, update_desc_pool )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::int_item int_item;
+
+        struct set_traits: public cc::ellen_bintree::traits
+        {
+            typedef typename TestFixture::key_extractor key_extractor;
+            typedef typename TestFixture::cmp compare;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeSet< rcu_type, int, int_item, set_traits > set_type;
+
+        set_type s;
+        this->test( s );
+    }
+
+    TYPED_TEST_P( EllenBinTreeSet, update_desc_lazy_pool )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::int_item int_item;
+
+        struct set_traits: public cc::ellen_bintree::traits
+        {
+            typedef typename TestFixture::key_extractor key_extractor;
+            typedef typename TestFixture::less less;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::lazy_pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeSet< rcu_type, int, int_item, set_traits > set_type;
+
+        set_type s;
+        this->test( s );
+    }
+
+    TYPED_TEST_P( EllenBinTreeSet, item_counting )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::int_item int_item;
+
+        struct set_traits: public cc::ellen_bintree::traits
+        {
+            typedef typename TestFixture::key_extractor key_extractor;
+            typedef typename TestFixture::cmp compare;
+            typedef typename TestFixture::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeSet< rcu_type, int, int_item, set_traits > set_type;
+
+        set_type s;
+        this->test( s );
+    }
+
+    TYPED_TEST_P( EllenBinTreeSet, backoff )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::int_item int_item;
+
+        struct set_traits: public cc::ellen_bintree::traits
+        {
+            typedef typename TestFixture::key_extractor key_extractor;
+            typedef typename TestFixture::cmp compare;
+            typedef typename TestFixture::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::lazy_pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeSet< rcu_type, int, int_item, set_traits > set_type;
+
+        set_type s;
+        this->test( s );
+    }
+
+    TYPED_TEST_P( EllenBinTreeSet, stat )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::int_item int_item;
+
+        struct set_traits: public cc::ellen_bintree::traits
+        {
+            typedef typename TestFixture::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cc::ellen_bintree::stat<> stat;
+            typedef typename TestFixture::key_extractor key_extractor;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeSet< rcu_type, int, int_item, set_traits > set_type;
+
+        set_type s;
+        this->test( s );
+    }
+
+    TYPED_TEST_P( EllenBinTreeSet, seq_cst )
+    {
+        typedef typename TestFixture::rcu_type rcu_type;
+        typedef typename TestFixture::int_item int_item;
+
+        struct set_traits: public cc::ellen_bintree::traits
+        {
+            typedef typename TestFixture::less less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+            typedef cc::ellen_bintree::stat<> stat;
+            typedef typename TestFixture::key_extractor key_extractor;
+            typedef cds::memory::pool_allocator<cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+            typedef cds::opt::v::sequential_consistent memory_model;
+        };
+        typedef cc::EllenBinTreeSet< rcu_type, int, int_item, set_traits > set_type;
+
+        set_type s;
+        this->test( s );
+    }
+
+
+    // GCC 5: All this->test names should be written on single line, otherwise a runtime error will be encountered like as
+    // "No this->test named <test_name> can be found in this this->test case"
+    REGISTER_TYPED_TEST_CASE_P( EllenBinTreeSet,
+        compare, less, cmpmix, update_desc_pool, update_desc_lazy_pool, item_counting, backoff, stat, seq_cst
+    );
+} // namespace
+
+#endif // CDSUNIT_TREE_TEST_ELLEN_BINTREE_SET_RCU_H
\ No newline at end of file
diff --git a/test/unit/tree/test_ellen_bintree_update_desc_pool.h b/test/unit/tree/test_ellen_bintree_update_desc_pool.h
new file mode 100644 (file)
index 0000000..89edde7
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_TREE_TEST_ELLEN_BINTREE_UPDATE_DESC_POOL_H
+#define CDSUNIT_TREE_TEST_ELLEN_BINTREE_UPDATE_DESC_POOL_H
+
+#include <cds/memory/vyukov_queue_pool.h>
+#include <cds/memory/pool_allocator.h>
+
+namespace cds_test {
+
+    typedef cds::intrusive::ellen_bintree::update_desc< void, void > update_desc;
+
+    // update_desc pools
+    struct pool_traits: public cds::memory::vyukov_queue_pool_traits
+    {
+        typedef cds::opt::v::static_buffer< update_desc, 256 > buffer;
+    };
+    typedef cds::memory::vyukov_queue_pool< update_desc, pool_traits > pool_type;
+    typedef cds::memory::lazy_vyukov_queue_pool< update_desc, pool_traits > lazy_pool_type;
+
+    extern pool_type      s_Pool;
+    extern lazy_pool_type s_LazyPool;
+
+    struct pool_accessor
+    {
+        typedef pool_type::value_type value_type;
+
+        pool_type& operator()() const
+        {
+            return s_Pool;
+        }
+    };
+
+    struct lazy_pool_accessor
+    {
+        typedef lazy_pool_type::value_type value_type;
+
+        lazy_pool_type& operator()() const
+        {
+            return s_LazyPool;
+        }
+    };
+
+} // namespace cds_test
+
+#endif // #ifndef CDSUNIT_TREE_TEST_ELLEN_BINTREE_UPDATE_DESC_POOL_H
diff --git a/test/unit/tree/test_intrusive_ellen_bintree_rcu.h b/test/unit/tree/test_intrusive_ellen_bintree_rcu.h
new file mode 100644 (file)
index 0000000..1ccffc7
--- /dev/null
@@ -0,0 +1,379 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_TREE_TEST_INTRUSIVE_ELLEN_BINTREE_RCU_H
+#define CDSUNIT_TREE_TEST_INTRUSIVE_ELLEN_BINTREE_RCU_H
+
+#include "test_intrusive_tree_rcu.h"
+
+#include <cds/intrusive/ellen_bintree_rcu.h>
+#include "test_ellen_bintree_update_desc_pool.h"
+
+// forward declaration
+namespace cds { namespace intrusive {}}
+
+namespace {
+
+    namespace ci = cds::intrusive;
+
+    template <class RCU>
+    class IntrusiveEllenBinTree: public cds_test::intrusive_tree_rcu
+    {
+        typedef cds_test::intrusive_tree_rcu base_class;
+
+    public:
+        typedef cds::urcu::gc<RCU> rcu_type;
+
+        typedef base_class::key_type key_type;
+
+        typedef typename base_class::base_int_item< ci::ellen_bintree::node<rcu_type>> base_item_type;
+        typedef typename base_class::member_int_item< ci::ellen_bintree::node<rcu_type>> member_item_type;
+
+        struct generic_traits: public ci::ellen_bintree::traits
+        {
+            typedef base_class::key_extractor key_extractor;
+            typedef mock_disposer disposer;
+        };
+
+    protected:
+        void SetUp()
+        {
+            RCU::Construct();
+            cds::threading::Manager::attachThread();
+        }
+
+        void TearDown()
+        {
+            cds::threading::Manager::detachThread();
+            RCU::Destruct();
+        }
+    };
+
+    TYPED_TEST_CASE_P( IntrusiveEllenBinTree );
+
+
+    TYPED_TEST_P( IntrusiveEllenBinTree, base_cmp )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::base_item_type base_item_type;
+        typedef typename TestFixture::generic_traits generic_traits;
+
+        typedef ci::EllenBinTree< rcu_type, key_type, base_item_type,
+            typename ci::ellen_bintree::make_traits<
+                ci::opt::type_traits< generic_traits >
+                , ci::opt::hook< ci::ellen_bintree::base_hook< ci::opt::gc< rcu_type >>>
+                , ci::opt::compare< typename TestFixture::template cmp<base_item_type>>
+            >::type
+        > tree_type;
+
+        tree_type t;
+        this->test( t );
+    }
+
+    TYPED_TEST_P( IntrusiveEllenBinTree, base_less )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::base_item_type base_item_type;
+        typedef typename TestFixture::generic_traits generic_traits;
+
+        typedef ci::EllenBinTree< rcu_type, key_type, base_item_type,
+            typename ci::ellen_bintree::make_traits<
+                ci::opt::type_traits< generic_traits >
+                , ci::opt::hook< ci::ellen_bintree::base_hook< ci::opt::gc< rcu_type >>>
+                , ci::opt::less< typename TestFixture::template less<base_item_type>>
+            >::type
+        > tree_type;
+
+        tree_type t;
+        this->test( t );
+    }
+
+    TYPED_TEST_P( IntrusiveEllenBinTree, base_item_counter )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::base_item_type base_item_type;
+        typedef typename TestFixture::generic_traits generic_traits;
+
+        typedef ci::EllenBinTree< rcu_type, key_type, base_item_type,
+            typename ci::ellen_bintree::make_traits<
+                ci::opt::type_traits< generic_traits >
+                , ci::opt::hook< ci::ellen_bintree::base_hook< ci::opt::gc< rcu_type >>>
+                , ci::opt::compare< typename TestFixture::template cmp<base_item_type>>
+                , ci::opt::item_counter< typename TestFixture::simple_item_counter >
+            >::type
+        > tree_type;
+
+        tree_type t;
+        this->test( t );
+    }
+
+    TYPED_TEST_P( IntrusiveEllenBinTree, base_backoff )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::base_item_type base_item_type;
+        typedef typename TestFixture::generic_traits generic_traits;
+
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::base_hook< ci::opt::gc< rcu_type >> hook;
+            typedef typename TestFixture::template cmp<base_item_type> compare;
+            typedef typename TestFixture::template less<base_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+        };
+
+        typedef ci::EllenBinTree< rcu_type, key_type, base_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        this->test( t );
+    }
+
+    TYPED_TEST_P( IntrusiveEllenBinTree, base_seq_cst )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::base_item_type base_item_type;
+        typedef typename TestFixture::generic_traits generic_traits;
+
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::base_hook< ci::opt::gc< rcu_type >> hook;
+            typedef typename TestFixture::template cmp<base_item_type> compare;
+            typedef typename TestFixture::template less<base_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::pause back_off;
+            typedef ci::opt::v::sequential_consistent memory_model;
+        };
+
+        typedef ci::EllenBinTree< rcu_type, key_type, base_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        this->test( t );
+    }
+
+    TYPED_TEST_P( IntrusiveEllenBinTree, base_update_desc_pool )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::base_item_type base_item_type;
+        typedef typename TestFixture::generic_traits generic_traits;
+
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::base_hook< ci::opt::gc< rcu_type >> hook;
+            typedef typename TestFixture::template less<base_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::memory::pool_allocator< cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+        };
+
+        typedef ci::EllenBinTree< rcu_type, key_type, base_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        this->test( t );
+    }
+
+    TYPED_TEST_P( IntrusiveEllenBinTree, base_update_desc_lazy_pool )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::base_item_type base_item_type;
+        typedef typename TestFixture::generic_traits generic_traits;
+
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::base_hook< ci::opt::gc< rcu_type >> hook;
+            typedef typename TestFixture::template less<base_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::memory::pool_allocator< cds_test::update_desc, cds_test::lazy_pool_accessor> update_desc_allocator;
+        };
+
+        typedef ci::EllenBinTree< rcu_type, key_type, base_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        this->test( t );
+    }
+
+    // member hook
+    TYPED_TEST_P( IntrusiveEllenBinTree, member_cmp )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::member_item_type member_item_type;
+        typedef typename TestFixture::generic_traits   generic_traits;
+
+        typedef ci::EllenBinTree< rcu_type, key_type, member_item_type,
+            typename ci::ellen_bintree::make_traits<
+                ci::opt::type_traits< generic_traits >
+                , ci::opt::hook< ci::ellen_bintree::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< rcu_type >>>
+                , ci::opt::compare< typename TestFixture::template cmp<member_item_type>>
+            >::type
+        > tree_type;
+
+        tree_type t;
+        this->test( t );
+    }
+
+    TYPED_TEST_P( IntrusiveEllenBinTree, member_less )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::member_item_type member_item_type;
+        typedef typename TestFixture::generic_traits   generic_traits;
+
+        typedef ci::EllenBinTree< rcu_type, key_type, member_item_type,
+            typename ci::ellen_bintree::make_traits<
+                ci::opt::type_traits< generic_traits >
+                , ci::opt::hook< ci::ellen_bintree::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< rcu_type >>>
+                , ci::opt::less< typename TestFixture::template less<member_item_type>>
+            >::type
+        > tree_type;
+
+        tree_type t;
+        this->test( t );
+    }
+
+    TYPED_TEST_P( IntrusiveEllenBinTree, member_item_counter )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::member_item_type member_item_type;
+        typedef typename TestFixture::generic_traits   generic_traits;
+
+        typedef ci::EllenBinTree< rcu_type, key_type, member_item_type,
+            typename ci::ellen_bintree::make_traits<
+                ci::opt::type_traits< generic_traits >
+                , ci::opt::hook< ci::ellen_bintree::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< rcu_type >>>
+                , ci::opt::compare< typename TestFixture::template cmp<member_item_type>>
+                , ci::opt::item_counter< typename TestFixture::simple_item_counter >
+            >::type
+        > tree_type;
+
+        tree_type t;
+        this->test( t );
+    }
+
+    TYPED_TEST_P( IntrusiveEllenBinTree, member_backoff )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::member_item_type member_item_type;
+        typedef typename TestFixture::generic_traits   generic_traits;
+
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< rcu_type >> hook;
+            typedef typename TestFixture::template cmp<member_item_type> compare;
+            typedef typename TestFixture::template less<member_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::yield back_off;
+        };
+
+        typedef ci::EllenBinTree< rcu_type, key_type, member_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        this->test( t );
+    }
+
+    TYPED_TEST_P( IntrusiveEllenBinTree, member_seq_cst )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::member_item_type member_item_type;
+        typedef typename TestFixture::generic_traits   generic_traits;
+
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< rcu_type >> hook;
+            typedef typename TestFixture::template cmp<member_item_type> compare;
+            typedef typename TestFixture::template less<member_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::backoff::pause back_off;
+            typedef ci::opt::v::sequential_consistent memory_model;
+        };
+
+        typedef ci::EllenBinTree< rcu_type, key_type, member_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        this->test( t );
+    }
+
+    TYPED_TEST_P( IntrusiveEllenBinTree, member_update_desc_pool )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::member_item_type member_item_type;
+        typedef typename TestFixture::generic_traits   generic_traits;
+
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< rcu_type >> hook;
+            typedef typename TestFixture::template less<member_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::memory::pool_allocator< cds_test::update_desc, cds_test::pool_accessor> update_desc_allocator;
+        };
+
+        typedef ci::EllenBinTree< rcu_type, key_type, member_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        this->test( t );
+    }
+
+    TYPED_TEST_P( IntrusiveEllenBinTree, member_update_desc_lazy_pool )
+    {
+        typedef typename TestFixture::rcu_type   rcu_type;
+        typedef typename TestFixture::key_type   key_type;
+        typedef typename TestFixture::member_item_type member_item_type;
+        typedef typename TestFixture::generic_traits   generic_traits;
+
+        struct tree_traits: public generic_traits
+        {
+            typedef ci::ellen_bintree::member_hook< offsetof( member_item_type, hMember ), ci::opt::gc< rcu_type >> hook;
+            typedef typename TestFixture::template less<member_item_type> less;
+            typedef cds::atomicity::item_counter item_counter;
+            typedef cds::memory::pool_allocator< cds_test::update_desc, cds_test::lazy_pool_accessor> update_desc_allocator;
+        };
+
+        typedef ci::EllenBinTree< rcu_type, key_type, member_item_type, tree_traits > tree_type;
+
+        tree_type t;
+        this->test( t );
+    }
+
+    REGISTER_TYPED_TEST_CASE_P( IntrusiveEllenBinTree,
+        base_cmp, base_less, base_item_counter, base_backoff, base_seq_cst, base_update_desc_pool, base_update_desc_lazy_pool, member_cmp, member_less, member_item_counter, member_backoff, member_seq_cst, member_update_desc_pool, member_update_desc_lazy_pool
+        );
+
+} // namespace 
+
+#endif // #ifndef CDSUNIT_TREE_TEST_INTRUSIVE_ELLEN_BINTREE_RCU_H
diff --git a/test/unit/tree/test_intrusive_tree.h b/test/unit/tree/test_intrusive_tree.h
new file mode 100644 (file)
index 0000000..3359e81
--- /dev/null
@@ -0,0 +1,480 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_TREE_TEST_INTRUSIVE_TREE_H
+#define CDSUNIT_TREE_TEST_INTRUSIVE_TREE_H
+
+#include <cds_test/check_size.h>
+#include <cds_test/fixture.h>
+
+#include <cds/opt/hash.h>
+// forward declaration
+namespace cds { namespace intrusive {}}
+
+namespace cds_test {
+
+    namespace ci = cds::intrusive;
+
+    class intrusive_tree: public fixture
+    {
+    public:
+        static size_t const kSize = 1000;
+
+        struct stat
+        {
+            unsigned int nDisposeCount  ;   // count of disposer calling
+            unsigned int nFindCount     ;   // count of find-functor calling
+            unsigned int nUpdateNewCount;
+            unsigned int nUpdateCount;
+            mutable unsigned int nEraseCount;
+
+            stat()
+            {
+                clear_stat();
+            }
+
+            void clear_stat()
+            {
+                memset( this, 0, sizeof( *this ) );
+            }
+        };
+
+        typedef int key_type;
+
+        template <typename Node>
+        struct base_int_item
+            : public Node
+            , public stat
+
+        {
+            int nKey;
+            int nVal;
+
+            base_int_item()
+            {}
+
+            explicit base_int_item( int key )
+                : nKey( key )
+                , nVal( key )
+            {}
+
+            base_int_item(int key, int val)
+                : nKey( key )
+                , nVal(val)
+            {}
+
+            base_int_item( base_int_item const& v )
+                : Node()
+                , stat()
+                , nKey( v.nKey )
+                , nVal( v.nVal )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        template <typename Node>
+        struct member_int_item: public stat
+        {
+            int nKey;
+            int nVal;
+
+            Node hMember;
+
+            stat t;
+
+            member_int_item()
+            {}
+
+            explicit member_int_item( int key )
+                : nKey( key )
+                , nVal( key )
+            {}
+
+            member_int_item(int key, int val)
+                : nKey( key )
+                , nVal(val)
+            {}
+
+            member_int_item(member_int_item const& v )
+                : stat()
+                , nKey( v.nKey )
+                , nVal( v.nVal )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        struct key_extractor
+        {
+            template <typename T>
+            void operator()( key_type& key, T const& val ) const
+            {
+                key = val.key();
+            }
+        };
+
+        struct simple_item_counter {
+            size_t  m_nCount;
+
+            simple_item_counter()
+                : m_nCount(0)
+            {}
+
+            size_t operator ++()
+            {
+                return ++m_nCount;
+            }
+
+            size_t operator --()
+            {
+                return --m_nCount;
+            }
+
+            void reset()
+            {
+                m_nCount = 0;
+            }
+
+            operator size_t() const
+            {
+                return m_nCount;
+            }
+        };
+
+
+        template <typename T>
+        struct less
+        {
+            bool operator ()(T const& v1, T const& v2 ) const
+            {
+                return v1.key() < v2.key();
+            }
+
+            bool operator()( T const& lhs, int rhs ) const
+            {
+                return lhs.key() < rhs;
+            }
+
+            bool operator()( int lhs, T const& rhs ) const
+            {
+                return lhs < rhs.key();
+            }
+
+            bool operator()( int lhs, int rhs ) const
+            {
+                return lhs < rhs;
+            }
+        };
+
+        template <typename T>
+        struct cmp 
+        {
+            int operator ()(T const& v1, T const& v2 ) const
+            {
+                if ( v1.key() < v2.key() )
+                    return -1;
+                return v1.key() > v2.key() ? 1 : 0;
+            }
+
+            int operator()( T const& lhs, int rhs ) const
+            {
+                if ( lhs.key() < rhs )
+                    return -1;
+                return lhs.key() > rhs ? 1 : 0;
+            }
+
+            int operator()( int lhs, T const& rhs ) const
+            {
+                if ( lhs < rhs.key() )
+                    return -1;
+                return lhs > rhs.key() ? 1 : 0;
+            }
+
+            int operator()( int lhs, int rhs ) const
+            {
+                if ( lhs < rhs )
+                    return -1;
+                return lhs > rhs ? 1 : 0;
+            }
+        };
+
+        struct other_item {
+            int nKey;
+
+            explicit other_item( int k )
+                : nKey( k )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        struct other_less {
+            template <typename Q, typename T>
+            bool operator()( Q const& lhs, T const& rhs ) const
+            {
+                return lhs.key() < rhs.key();
+            }
+
+            template <typename Q>
+            bool operator()( Q const& lhs, int rhs ) const
+            {
+                return lhs.key() < rhs;
+            }
+
+            template <typename T>
+            bool operator()( int lhs, T const& rhs ) const
+            {
+                return lhs < rhs.key();
+            }
+        };
+
+        struct mock_disposer
+        {
+            template <typename T>
+            void operator ()( T * p )
+            {
+                ++p->nDisposeCount;
+            }
+        };
+
+    protected:
+        template <class Tree>
+        void test( Tree& t )
+        {
+            // Precondition: tree is empty
+            // Postcondition: tree is empty
+
+            ASSERT_TRUE( t.empty() );
+            ASSERT_CONTAINER_SIZE( t, 0 );
+            size_t const nTreeSize = kSize;
+
+            typedef typename Tree::value_type value_type;
+
+            std::vector< value_type > data;
+            std::vector< size_t > indices;
+            data.reserve( kSize );
+            indices.reserve( kSize );
+            for ( size_t key = 0; key < kSize; ++key ) {
+                data.push_back( value_type( static_cast<int>( key )));
+                indices.push_back( key );
+            }
+            shuffle( indices.begin(), indices.end() );
+
+            // insert/find
+            for ( auto idx : indices ) {
+                auto& i = data[ idx ];
+
+                ASSERT_FALSE( t.contains( i.nKey ));
+                ASSERT_FALSE( t.contains( i ));
+                ASSERT_FALSE( t.contains( other_item( i.key()), other_less()));
+                ASSERT_FALSE( t.find( i.nKey, []( value_type&, int ) {} ));
+                ASSERT_FALSE( t.find_with( other_item( i.key()), other_less(), []( value_type&, other_item const& ) {} ));
+
+                std::pair<bool, bool> updResult;
+
+                updResult = t.update( i, []( bool bNew, value_type&, value_type& )
+                {
+                    ASSERT_TRUE( false );
+                }, false );
+                EXPECT_FALSE( updResult.first );
+                EXPECT_FALSE( updResult.second );
+
+                switch ( i.key() % 3 ) {
+                case 0:
+                    ASSERT_TRUE( t.insert( i ));
+                    ASSERT_FALSE( t.insert( i ));
+                    updResult = t.update( i, []( bool bNew, value_type& val, value_type& arg) 
+                        {
+                            EXPECT_FALSE( bNew );
+                            EXPECT_EQ( &val, &arg );
+                        }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+                    break;
+                case 1:
+                    EXPECT_EQ( i.nUpdateNewCount, 0 );
+                    ASSERT_TRUE( t.insert( i, []( value_type& v ) { ++v.nUpdateNewCount;} ));
+                    EXPECT_EQ( i.nUpdateNewCount, 1 );
+                    ASSERT_FALSE( t.insert( i, []( value_type& v ) { ++v.nUpdateNewCount;} ) );
+                    EXPECT_EQ( i.nUpdateNewCount, 1 );
+                    i.nUpdateNewCount = 0;
+                    break;
+                case 2:
+                    updResult = t.update( i, []( bool bNew, value_type& val, value_type& arg )
+                    {
+                        EXPECT_TRUE( false );
+                    }, false );
+                    EXPECT_FALSE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+
+                    EXPECT_EQ( i.nUpdateNewCount, 0 );
+                    updResult = t.update( i, []( bool bNew, value_type& val, value_type& arg )
+                    {
+                        EXPECT_TRUE( bNew );
+                        EXPECT_EQ( &val, &arg );
+                        ++val.nUpdateNewCount;
+                    });
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_TRUE( updResult.second );
+                    EXPECT_EQ( i.nUpdateNewCount, 1 );
+                    i.nUpdateNewCount = 0;
+
+                    EXPECT_EQ( i.nUpdateCount, 0 );
+                    updResult = t.update( i, []( bool bNew, value_type& val, value_type& arg )
+                    {
+                        EXPECT_FALSE( bNew );
+                        EXPECT_EQ( &val, &arg );
+                        ++val.nUpdateCount;
+                    }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+                    EXPECT_EQ( i.nUpdateCount, 1 );
+                    i.nUpdateCount = 0;
+
+                    break;
+                }
+
+                ASSERT_TRUE( t.contains( i.nKey ) );
+                ASSERT_TRUE( t.contains( i ) );
+                ASSERT_TRUE( t.contains( other_item( i.key() ), other_less()));
+                EXPECT_EQ( i.nFindCount, 0 );
+                ASSERT_TRUE( t.find( i.nKey, []( value_type& v, int ) { ++v.nFindCount; } ));
+                EXPECT_EQ( i.nFindCount, 1 );
+                ASSERT_TRUE( t.find_with( other_item( i.key() ), other_less(), []( value_type& v, other_item const& ) { ++v.nFindCount; } ));
+                EXPECT_EQ( i.nFindCount, 2 );
+                ASSERT_TRUE( t.find( i, []( value_type& v, value_type& ) { ++v.nFindCount; } ) );
+                EXPECT_EQ( i.nFindCount, 3 );
+            }
+            ASSERT_FALSE( t.empty() );
+            ASSERT_CONTAINER_SIZE( t, nTreeSize );
+
+            std::for_each( data.begin(), data.end(), []( value_type& v ) { v.clear_stat(); });
+
+            // erase
+            shuffle( indices.begin(), indices.end() );
+            for ( auto idx : indices ) {
+                auto& i = data[ idx ];
+
+                ASSERT_TRUE( t.contains( i.nKey ) );
+                ASSERT_TRUE( t.contains( i ) );
+                ASSERT_TRUE( t.contains( other_item( i.key() ), other_less() ) );
+                EXPECT_EQ( i.nFindCount, 0 );
+                ASSERT_TRUE( t.find( i.nKey, []( value_type& v, int ) { ++v.nFindCount; } ) );
+                EXPECT_EQ( i.nFindCount, 1 );
+                ASSERT_TRUE( t.find_with( other_item( i.key() ), other_less(), []( value_type& v, other_item const& ) { ++v.nFindCount; } ) );
+                EXPECT_EQ( i.nFindCount, 2 );
+
+                value_type v( i );
+                switch ( i.key() % 6 ) {
+                case 0:
+                    ASSERT_FALSE( t.unlink( v ));
+                    ASSERT_TRUE( t.unlink( i ));
+                    ASSERT_FALSE( t.unlink( i ) );
+                    break;
+                case 1:
+                    ASSERT_TRUE( t.erase( i.key()));
+                    ASSERT_FALSE( t.erase( i.key() ) );
+                    break;
+                case 2:
+                    ASSERT_TRUE( t.erase( v ));
+                    ASSERT_FALSE( t.erase( v ) );
+                    break;
+                case 3:
+                    ASSERT_TRUE( t.erase_with( other_item( i.key()), other_less()));
+                    ASSERT_FALSE( t.erase_with( other_item( i.key() ), other_less() ) );
+                    break;
+                case 4:
+                    EXPECT_EQ( i.nEraseCount, 0 );
+                    ASSERT_TRUE( t.erase( v, []( value_type& val ) { ++val.nEraseCount; } ));
+                    EXPECT_EQ( i.nEraseCount, 1 );
+                    ASSERT_FALSE( t.erase( v, []( value_type& val ) { ++val.nEraseCount; } ));
+                    EXPECT_EQ( i.nEraseCount, 1 );
+                    break;
+                case 5:
+                    EXPECT_EQ( i.nEraseCount, 0 );
+                    ASSERT_TRUE( t.erase_with( other_item( i.key() ), other_less(), []( value_type& val ) { ++val.nEraseCount; } ));
+                    EXPECT_EQ( i.nEraseCount, 1 );
+                    ASSERT_FALSE( t.erase_with( other_item( i.key() ), other_less(), []( value_type& val ) { ++val.nEraseCount; } ));
+                    EXPECT_EQ( i.nEraseCount, 1 );
+                    break;
+                }
+
+                ASSERT_FALSE( t.contains( i.nKey ));
+                ASSERT_FALSE( t.contains( i ));
+                ASSERT_FALSE( t.contains( other_item( i.key()), other_less()));
+                ASSERT_FALSE( t.find( i.nKey, []( value_type&, int ) {} ));
+                ASSERT_FALSE( t.find( i,      []( value_type&, value_type const& ) {} ));
+                ASSERT_FALSE( t.find_with( other_item( i.key()), other_less(), []( value_type&, other_item const& ) {} ));
+            }
+            ASSERT_TRUE( t.empty() );
+            ASSERT_CONTAINER_SIZE( t, 0 );
+
+            // Force retiring cycle
+            Tree::gc::force_dispose();
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nDisposeCount, 1 );
+            }
+
+            // clear
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+                i.clear_stat();
+                ASSERT_TRUE( t.insert( i ));
+            }
+            ASSERT_FALSE( t.empty() );
+            ASSERT_CONTAINER_SIZE( t, nTreeSize );
+
+            // clear test
+            t.clear();
+
+            ASSERT_TRUE( t.empty());
+            ASSERT_CONTAINER_SIZE( t, 0 );
+
+            // Force retiring cycle
+            Tree::gc::force_dispose();
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nDisposeCount, 1 );
+            }
+        }
+    };
+
+} // namespace cds_test
+
+#endif // #ifndef CDSUNIT_TREE_TEST_INTRUSIVE_TREE_H
diff --git a/test/unit/tree/test_intrusive_tree_hp.h b/test/unit/tree/test_intrusive_tree_hp.h
new file mode 100644 (file)
index 0000000..0b350c9
--- /dev/null
@@ -0,0 +1,219 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_TREE_TEST_INTRUSIVE_TREE_HP_H
+#define CDSUNIT_TREE_TEST_INTRUSIVE_TREE_HP_H
+
+#include "test_intrusive_tree.h"
+
+// forward declaration
+namespace cds { namespace intrusive {}}
+
+namespace cds_test {
+
+    namespace ci = cds::intrusive;
+
+    class intrusive_tree_hp: public intrusive_tree
+    {
+        typedef intrusive_tree base_class;
+
+    protected:
+
+        template <class Tree>
+        void test( Tree& t )
+        {
+            // Precondition: tree is empty
+            // Postcondition: tree is empty
+
+            base_class::test( t );
+
+            ASSERT_TRUE( t.empty() );
+            ASSERT_CONTAINER_SIZE( t, 0 );
+
+            typedef typename Tree::value_type value_type;
+
+            std::vector< value_type > data;
+            std::vector< size_t> indices;
+            data.reserve( kSize );
+            indices.reserve( kSize );
+            for ( size_t key = 0; key < kSize; ++key ) {
+                data.push_back( value_type( static_cast<int>(key) ) );
+                indices.push_back( key );
+            }
+            shuffle( indices.begin(), indices.end() );
+
+            typename Tree::guarded_ptr gp;
+
+            // get/extract from empty tree
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                gp = t.get( i );
+                ASSERT_TRUE( !gp );
+                gp = t.get( i.key() );
+                ASSERT_TRUE( !gp );
+                gp = t.get_with( other_item( i.key()), other_less());
+                ASSERT_TRUE( !gp );
+
+                gp = t.extract( i );
+                ASSERT_TRUE( !gp );
+                gp = t.extract( i.key());
+                ASSERT_TRUE( !gp );
+                gp = t.extract_with( other_item( i.key()), other_less());
+                ASSERT_TRUE( !gp );
+
+                gp = t.extract_min();
+                ASSERT_TRUE( !gp );
+                gp = t.extract_max();
+                ASSERT_TRUE( !gp );
+            }
+
+            // fill tree
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+                i.nDisposeCount = 0;
+                ASSERT_TRUE( t.insert( i ) );
+            }
+
+            // get/extract
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                EXPECT_EQ( i.nFindCount, 0 );
+                gp = t.get( i );
+                ASSERT_FALSE( !gp );
+                ++gp->nFindCount;
+                EXPECT_EQ( i.nFindCount, 1 );
+
+                gp = t.get( i.key() );
+                ASSERT_FALSE( !gp );
+                ++gp->nFindCount;
+                EXPECT_EQ( i.nFindCount, 2 );
+
+                gp = t.get_with( other_item( i.key()), other_less());
+                ASSERT_FALSE( !gp );
+                ++gp->nFindCount;
+                EXPECT_EQ( i.nFindCount, 3 );
+
+                EXPECT_EQ( i.nEraseCount, 0 );
+                switch ( i.key() % 3 ) {
+                case 0:
+                    gp = t.extract( i.key());
+                    break;
+                case 1:
+                    gp = t.extract( i );
+                    break;
+                case 2:
+                    gp = t.extract_with( other_item( i.key() ), other_less() );
+                    break;
+                }
+                ASSERT_FALSE( !gp );
+                ++gp->nEraseCount;
+                EXPECT_EQ( i.nEraseCount, 1 );
+
+                gp = t.extract( i );
+                ASSERT_TRUE( !gp );
+                gp = t.extract( i.key() );
+                ASSERT_TRUE( !gp );
+                gp = t.extract_with( other_item( i.key() ), other_less() );
+                ASSERT_TRUE( !gp );
+            }
+
+            gp.release();
+
+            ASSERT_TRUE( t.empty() );
+            ASSERT_CONTAINER_SIZE( t, 0 );
+
+            // Force retiring cycle
+            Tree::gc::force_dispose();
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nDisposeCount, 1 );
+            }
+
+            // extract_min
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+                i.nDisposeCount = 0;
+                ASSERT_TRUE( t.insert( i ) );
+            }
+
+            size_t nCount = 0;
+            int nKey = -1;
+            while ( !t.empty() ) {
+                gp = t.extract_min();
+                ASSERT_FALSE( !gp );
+                EXPECT_EQ( gp->key(), nKey + 1 );
+                ++nCount;
+                nKey = gp->key();
+            }
+            gp.release();
+            ASSERT_TRUE( t.empty() );
+            ASSERT_CONTAINER_SIZE( t, 0 );
+            EXPECT_EQ( nCount, data.size() );
+
+            // Force retiring cycle
+            Tree::gc::force_dispose();
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nDisposeCount, 1 );
+            }
+
+            // extract_max
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+                i.nDisposeCount = 0;
+                ASSERT_TRUE( t.insert( i ) );
+            }
+
+            nCount = 0;
+            nKey = static_cast<int>( data.size());
+            while ( !t.empty() ) {
+                gp = t.extract_max();
+                ASSERT_FALSE( !gp );
+                EXPECT_EQ( gp->key(), nKey - 1 );
+                ++nCount;
+                nKey = gp->key();
+            }
+            gp.release();
+            ASSERT_TRUE( t.empty() );
+            ASSERT_CONTAINER_SIZE( t, 0 );
+            EXPECT_EQ( nCount, data.size() );
+
+            // Force retiring cycle
+            Tree::gc::force_dispose();
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nDisposeCount, 1 );
+            }
+
+        }
+    };
+
+} // namespace cds_test
+
+#endif // #ifndef CDSUNIT_TREE_TEST_INTRUSIVE_TREE_HP_H
diff --git a/test/unit/tree/test_intrusive_tree_rcu.h b/test/unit/tree/test_intrusive_tree_rcu.h
new file mode 100644 (file)
index 0000000..ceca126
--- /dev/null
@@ -0,0 +1,227 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_TREE_TEST_INTRUSIVE_TREE_RCU_H
+#define CDSUNIT_TREE_TEST_INTRUSIVE_TREE_RCU_H
+
+#include "test_intrusive_tree.h"
+
+
+// forward declaration
+namespace cds { namespace intrusive {}}
+
+namespace cds_test {
+
+    namespace ci = cds::intrusive;
+
+    class intrusive_tree_rcu: public intrusive_tree
+    {
+        typedef intrusive_tree base_class;
+
+    protected:
+
+
+        template <class Tree>
+        void test( Tree& t )
+        {
+            // Precondition: tree is empty
+            // Postcondition: tree is empty
+
+            base_class::test( t );
+
+            ASSERT_TRUE( t.empty() );
+            ASSERT_CONTAINER_SIZE( t, 0 );
+
+            typedef typename Tree::value_type value_type;
+            typedef typename Tree::rcu_lock   rcu_lock;
+
+            std::vector< value_type > data;
+            std::vector< size_t> indices;
+            data.reserve( kSize );
+            indices.reserve( kSize );
+            for ( size_t key = 0; key < kSize; ++key ) {
+                data.push_back( value_type( static_cast<int>(key) ) );
+                indices.push_back( key );
+            }
+            shuffle( indices.begin(), indices.end() );
+
+            typename Tree::exempt_ptr xp;
+
+            // get/extract from empty tree
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                {
+                    rcu_lock l;
+                    value_type * p = t.get( i );
+                    ASSERT_TRUE( p == nullptr );
+                    p = t.get( i.key() );
+                    ASSERT_TRUE( !p );
+                    p = t.get_with( other_item( i.key() ), other_less() );
+                    ASSERT_TRUE( p == nullptr );
+                }
+
+                xp = t.extract( i );
+                ASSERT_TRUE( !xp );
+                xp = t.extract( i.key());
+                ASSERT_TRUE( !xp );
+                xp = t.extract_with( other_item( i.key()), other_less());
+                ASSERT_TRUE( !xp );
+
+                xp = t.extract_min();
+                ASSERT_TRUE( !xp );
+                xp = t.extract_max();
+                ASSERT_TRUE( !xp );
+            }
+
+            // fill tree
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+                i.nDisposeCount = 0;
+                ASSERT_TRUE( t.insert( i ) );
+            }
+
+            // get/extract
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                {
+                    rcu_lock l;
+
+                    value_type * p;
+                    EXPECT_EQ( i.nFindCount, 0 );
+                    p = t.get( i );
+                    ASSERT_FALSE( !p );
+                    ++p->nFindCount;
+                    EXPECT_EQ( i.nFindCount, 1 );
+
+                    p = t.get( i.key() );
+                    ASSERT_FALSE( !p );
+                    ++p->nFindCount;
+                    EXPECT_EQ( i.nFindCount, 2 );
+
+                    p = t.get_with( other_item( i.key() ), other_less() );
+                    ASSERT_FALSE( !p );
+                    ++p->nFindCount;
+                    EXPECT_EQ( i.nFindCount, 3 );
+                }
+
+                EXPECT_EQ( i.nEraseCount, 0 );
+                switch ( i.key() % 3 ) {
+                case 0:
+                    xp = t.extract( i.key());
+                    break;
+                case 1:
+                    xp = t.extract( i );
+                    break;
+                case 2:
+                    xp = t.extract_with( other_item( i.key() ), other_less() );
+                    break;
+                }
+                ASSERT_FALSE( !xp );
+                ++xp->nEraseCount;
+                EXPECT_EQ( i.nEraseCount, 1 );
+
+                xp = t.extract( i );
+                ASSERT_TRUE( !xp );
+                xp = t.extract( i.key() );
+                ASSERT_TRUE( !xp );
+                xp = t.extract_with( other_item( i.key() ), other_less() );
+                ASSERT_TRUE( !xp );
+            }
+
+            ASSERT_TRUE( t.empty() );
+            ASSERT_CONTAINER_SIZE( t, 0 );
+
+            // Force retiring cycle
+            Tree::gc::force_dispose();
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nDisposeCount, 1 );
+            }
+
+            // extract_min
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+                i.nDisposeCount = 0;
+                ASSERT_TRUE( t.insert( i ) );
+            }
+
+            size_t nCount = 0;
+            int nKey = -1;
+            while ( !t.empty() ) {
+                xp = t.extract_min();
+                ASSERT_FALSE( !xp );
+                EXPECT_EQ( xp->key(), nKey + 1 );
+                ++nCount;
+                nKey = xp->key();
+            }
+            xp.release();
+            ASSERT_TRUE( t.empty() );
+            ASSERT_CONTAINER_SIZE( t, 0 );
+            EXPECT_EQ( nCount, data.size() );
+
+            // Force retiring cycle
+            Tree::gc::force_dispose();
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nDisposeCount, 1 );
+            }
+
+            // extract_max
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+                i.nDisposeCount = 0;
+                ASSERT_TRUE( t.insert( i ) );
+            }
+
+            nCount = 0;
+            nKey = static_cast<int>( data.size());
+            while ( !t.empty() ) {
+                xp = t.extract_max();
+                ASSERT_FALSE( !xp );
+                EXPECT_EQ( xp->key(), nKey - 1 );
+                ++nCount;
+                nKey = xp->key();
+            }
+            xp.release();
+            ASSERT_TRUE( t.empty() );
+            ASSERT_CONTAINER_SIZE( t, 0 );
+            EXPECT_EQ( nCount, data.size() );
+
+            // Force retiring cycle
+            Tree::gc::force_dispose();
+            for ( auto& i : data ) {
+                EXPECT_EQ( i.nDisposeCount, 1 );
+            }
+        }
+    };
+
+} // namespace cds_test
+
+#endif // #ifndef CDSUNIT_TREE_TEST_INTRUSIVE_TREE_RCU_H
diff --git a/test/unit/tree/test_tree_map.h b/test/unit/tree/test_tree_map.h
new file mode 100644 (file)
index 0000000..1733c98
--- /dev/null
@@ -0,0 +1,388 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_TREE_TEST_TREE_MAP_H
+#define CDSUNIT_TREE_TEST_TREE_MAP_H
+
+#include "test_tree_map_data.h"
+
+// forward declaration
+namespace cds { namespace container {} }
+
+namespace cds_test {
+
+    class container_tree_map: public tree_map_fixture
+    {
+    public:
+        static size_t const kSize = 1000;
+
+    protected:
+        template <class Map>
+        void test( Map& m )
+        {
+            // Precondition: map is empty
+            // Postcondition: map is empty
+
+            ASSERT_TRUE( m.empty());
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            typedef typename Map::value_type map_pair;
+            size_t const kkSize = kSize;
+
+            std::vector<key_type> arrKeys;
+            for ( int i = 0; i < static_cast<int>(kkSize); ++i )
+                arrKeys.push_back( key_type( i ));
+            shuffle( arrKeys.begin(), arrKeys.end());
+
+            std::vector< value_type > arrVals;
+            for ( size_t i = 0; i < kkSize; ++i ) {
+                value_type val;
+                val.nVal = static_cast<int>( i );
+                val.strVal = std::to_string( i );
+                arrVals.push_back( val );
+            }
+
+            // insert/find
+            for ( auto const& i : arrKeys ) {
+                value_type const& val( arrVals.at( i.nKey ));
+
+                ASSERT_FALSE( m.contains( i.nKey ));
+                ASSERT_FALSE( m.contains( i ));
+                ASSERT_FALSE( m.contains( other_item( i.nKey ), other_less()));
+                ASSERT_FALSE( m.find( i, []( map_pair const& ) {
+                    ASSERT_TRUE( false );
+                } ));
+                ASSERT_FALSE( m.find( i.nKey, []( map_pair const& ) {
+                    EXPECT_TRUE( false );
+                } ));
+                ASSERT_FALSE( m.find_with( other_item( i.nKey ), other_less(), []( map_pair const& ) {
+                    EXPECT_TRUE( false );
+                } ));
+
+                std::pair< bool, bool > updResult;
+
+                switch ( i.nKey % 16 ) {
+                case 0:
+                    ASSERT_TRUE( m.insert( i ));
+                    ASSERT_FALSE( m.insert( i ));
+                    ASSERT_TRUE( m.find( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    break;
+                case 1:
+                    ASSERT_TRUE( m.insert( i.nKey ));
+                    ASSERT_FALSE( m.insert( i.nKey ));
+                    ASSERT_TRUE( m.find( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    break;
+                case 2:
+                    ASSERT_TRUE( m.insert( std::to_string( i.nKey )));
+                    ASSERT_FALSE( m.insert( std::to_string( i.nKey )));
+                    ASSERT_TRUE( m.find( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    break;
+                case 3:
+                    ASSERT_TRUE( m.insert( i, val ));
+                    ASSERT_FALSE( m.insert( i, val ));
+                    break;
+                case 4:
+                    ASSERT_TRUE( m.insert( i.nKey, val.strVal ));
+                    ASSERT_FALSE( m.insert( i.nKey, val.strVal ));
+                    break;
+                case 5:
+                    ASSERT_TRUE( m.insert( val.strVal, i.nKey ));
+                    ASSERT_FALSE( m.insert( val.strVal, i.nKey ));
+                    break;
+                case 6:
+                    ASSERT_TRUE( m.insert_with( i, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    ASSERT_FALSE( m.insert_with( i, []( map_pair& v ) {
+                        EXPECT_TRUE( false );
+                    } ));
+                    break;
+                case 7:
+                    ASSERT_TRUE( m.insert_with( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    ASSERT_FALSE( m.insert_with( i.nKey, []( map_pair& v ) {
+                        EXPECT_TRUE( false );
+                    } ));
+                    break;
+                case 8:
+                    ASSERT_TRUE( m.insert_with( val.strVal, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    ASSERT_FALSE( m.insert_with( val.strVal, []( map_pair& v ) {
+                        EXPECT_TRUE( false );
+                    } ));
+                    break;
+                case 9:
+                    updResult = m.update( i.nKey, []( bool, map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }, false );
+                    ASSERT_FALSE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( i.nKey, []( bool bNew, map_pair& v ) {
+                        EXPECT_TRUE( bNew );
+                        v.second.nVal = v.first.nKey;
+                    });
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_TRUE( updResult.second );
+
+                    updResult = m.update( i.nKey, []( bool bNew, map_pair& v ) {
+                        EXPECT_FALSE( bNew );
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        v.second.strVal = std::to_string( v.second.nVal );
+                    } );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+                    break;
+                case 10:
+                    updResult = m.update( i, []( bool, map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }, false );
+                    ASSERT_FALSE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( i, []( bool bNew, map_pair& v ) {
+                        EXPECT_TRUE( bNew );
+                        v.second.nVal = v.first.nKey;
+                    });
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_TRUE( updResult.second );
+
+                    updResult = m.update( i, []( bool bNew, map_pair& v ) {
+                        EXPECT_FALSE( bNew );
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        v.second.strVal = std::to_string( v.second.nVal );
+                    } );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+                    break;
+                case 11:
+                    updResult = m.update( val.strVal, []( bool, map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }, false );
+                    ASSERT_FALSE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+
+                    updResult = m.update( val.strVal, []( bool bNew, map_pair& v ) {
+                        EXPECT_TRUE( bNew );
+                        v.second.nVal = v.first.nKey;
+                    });
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_TRUE( updResult.second );
+
+                    updResult = m.update( val.strVal, []( bool bNew, map_pair& v ) {
+                        EXPECT_FALSE( bNew );
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        v.second.strVal = std::to_string( v.second.nVal );
+                    } );
+                    ASSERT_TRUE( updResult.first );
+                    ASSERT_FALSE( updResult.second );
+                    break;
+                case 12:
+                    ASSERT_TRUE( m.emplace( i.nKey ));
+                    ASSERT_FALSE( m.emplace( i.nKey ));
+                    ASSERT_TRUE( m.find( i.nKey, []( map_pair& v ) {
+                        v.second.nVal = v.first.nKey;
+                        v.second.strVal = std::to_string( v.first.nKey );
+                    } ));
+                    break;
+                case 13:
+                    ASSERT_TRUE( m.emplace( i, i.nKey ));
+                    ASSERT_FALSE( m.emplace( i, i.nKey ));
+                    break;
+                case 14:
+                    {
+                        std::string str = val.strVal;
+                        ASSERT_TRUE( m.emplace( i, std::move( str )));
+                        ASSERT_TRUE( str.empty());
+                        str = val.strVal;
+                        ASSERT_FALSE( m.emplace( i, std::move( str )));
+                        ASSERT_TRUE( str.empty());
+                    }
+                    break;
+                case 15:
+                    {
+                        std::string str = val.strVal;
+                        ASSERT_TRUE( m.emplace( i, i.nKey, std::move( str )));
+                        ASSERT_TRUE( str.empty());
+                        str = val.strVal;
+                        ASSERT_FALSE( m.emplace( i, i.nKey, std::move( str )));
+                        ASSERT_TRUE( str.empty());
+                    }
+                    break;
+                }
+
+                ASSERT_TRUE( m.contains( i.nKey ));
+                ASSERT_TRUE( m.contains( i ));
+                ASSERT_TRUE( m.contains( other_item( i.nKey ), other_less()));
+                ASSERT_TRUE( m.find( i, []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ));
+                ASSERT_TRUE( m.find( i.nKey, []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ));
+                ASSERT_TRUE( m.find_with( other_item( i.nKey ), other_less(), []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ));
+            }
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            ASSERT_TRUE( m.check_consistency());
+
+            shuffle( arrKeys.begin(), arrKeys.end() );
+
+            // erase/find
+            for ( auto const& i : arrKeys ) {
+                value_type const& val( arrVals.at( i.nKey ) );
+
+                ASSERT_TRUE( m.contains( i.nKey ));
+                ASSERT_TRUE( m.contains( val.strVal ) );
+                ASSERT_TRUE( m.contains( i ));
+                ASSERT_TRUE( m.contains( other_item( i.nKey ), other_less()));
+                ASSERT_TRUE( m.find( i, []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ));
+                ASSERT_TRUE( m.find( i.nKey, []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ));
+                ASSERT_TRUE( m.find_with( other_item( i.nKey ), other_less(), []( map_pair const& v ) {
+                    EXPECT_EQ( v.first.nKey, v.second.nVal );
+                    EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                } ));
+
+
+                switch ( i.nKey % 8 ) {
+                case 0:
+                    ASSERT_TRUE( m.erase( i ));
+                    ASSERT_FALSE( m.erase( i ));
+                    break;
+                case 1:
+                    ASSERT_TRUE( m.erase( i.nKey ));
+                    ASSERT_FALSE( m.erase( i.nKey ));
+                    break;
+                case 2:
+                    ASSERT_TRUE( m.erase( val.strVal ));
+                    ASSERT_FALSE( m.erase( val.strVal ));
+                    break;
+                case 3:
+                    ASSERT_TRUE( m.erase_with( other_item( i.nKey ), other_less()));
+                    ASSERT_FALSE( m.erase_with( other_item( i.nKey ), other_less()));
+                    break;
+                case 4:
+                    ASSERT_TRUE( m.erase( i, []( map_pair& v ) {
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                    }));
+                    ASSERT_FALSE( m.erase( i, []( map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }));
+                    break;
+                case 5:
+                    ASSERT_TRUE( m.erase( i.nKey, []( map_pair& v ) {
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                    }));
+                    ASSERT_FALSE( m.erase( i.nKey, []( map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }));
+                    break;
+                case 6:
+                    ASSERT_TRUE( m.erase( val.strVal, []( map_pair& v ) {
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                    }));
+                    ASSERT_FALSE( m.erase( val.strVal, []( map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }));
+                    break;
+                case 7:
+                    ASSERT_TRUE( m.erase_with( other_item( i.nKey ), other_less(), []( map_pair& v ) {
+                        EXPECT_EQ( v.first.nKey, v.second.nVal );
+                        EXPECT_EQ( std::to_string( v.first.nKey ), v.second.strVal );
+                    }));
+                    ASSERT_FALSE( m.erase_with( other_item( i.nKey ), other_less(), []( map_pair& ) {
+                        EXPECT_TRUE( false );
+                    }));
+                    break;
+                }
+
+                ASSERT_FALSE( m.contains( i.nKey ));
+                ASSERT_FALSE( m.contains( i ));
+                ASSERT_FALSE( m.contains( val.strVal ));
+                ASSERT_FALSE( m.contains( other_item( i.nKey ), other_less()));
+                ASSERT_FALSE( m.find( i, []( map_pair const& ) {
+                    ASSERT_TRUE( false );
+                } ));
+                ASSERT_FALSE( m.find( i.nKey, []( map_pair const& ) {
+                    EXPECT_TRUE( false );
+                } ));
+                ASSERT_FALSE( m.find_with( other_item( i.nKey ), other_less(), []( map_pair const& ) {
+                    EXPECT_TRUE( false );
+                } ));
+            }
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            // clear
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i ));
+
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            m.clear();
+
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+        }
+    };
+
+} // namespace cds_test
+
+#endif // #ifndef CDSUNIT_TREE_TEST_TREE_MAP_H
diff --git a/test/unit/tree/test_tree_map_data.h b/test/unit/tree/test_tree_map_data.h
new file mode 100644 (file)
index 0000000..236f4b8
--- /dev/null
@@ -0,0 +1,254 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_TREE_TEST_TREE_MAP_DATA_H
+#define CDSUNIT_TREE_TEST_TREE_MAP_DATA_H
+
+#include <cds_test/check_size.h>
+#include <cds_test/fixture.h>
+
+#include <cds/opt/hash.h>
+
+namespace cds_test {
+
+    class tree_map_fixture: public fixture
+    {
+    public:
+        struct key_type {
+            int nKey;
+
+            key_type()
+            {}
+
+            explicit key_type( int n )
+                : nKey( n )
+            {}
+
+            explicit key_type( std::string const& str )
+                : nKey( std::stoi( str ))
+            {}
+
+            key_type( key_type const& s )
+                : nKey( s.nKey )
+            {}
+        };
+
+        struct value_type {
+            int nVal;
+            std::string strVal;
+
+            value_type()
+                : nVal( 0 )
+            {}
+
+            explicit value_type( int n )
+                : nVal( n )
+                , strVal( std::to_string( n ))
+            {}
+
+            explicit value_type( std::string const& str )
+                : nVal( std::stoi( str ))
+                , strVal( str )
+            {}
+
+            explicit value_type( std::string&& str )
+                : nVal( std::stoi( str ))
+                , strVal( std::move( str ))
+            {}
+
+            value_type( int n, std::string const& str )
+                : nVal( n )
+                , strVal( str )
+            {}
+
+            value_type( int n, std::string&& str )
+                : nVal( n )
+                , strVal( std::move( str ))
+            {}
+
+            value_type( value_type&& v )
+                : nVal( v.nVal )
+                , strVal( std::move( v.strVal ))
+            {}
+
+            value_type( value_type const& v )
+                : nVal( v.nVal )
+                , strVal( v.strVal )
+            {}
+
+            value_type& operator=( value_type const& v )
+            {
+                if ( this != &v ) {
+                    nVal = v.nVal;
+                    strVal = v.strVal;
+                }
+                return *this;
+            }
+
+            value_type& operator=( value_type&& v )
+            {
+                if ( this != &v ) {
+                    nVal = v.nVal;
+                    strVal = std::move( v.strVal );
+                }
+                return *this;
+            }
+
+            value_type& operator=( int i )
+            {
+                nVal = i;
+                strVal = std::to_string( i );
+                return *this;
+            }
+
+            value_type& operator=( std::string const& s )
+            {
+                nVal = std::stoi( s );
+                strVal = s;
+                return *this;
+            }
+        };
+
+        typedef std::pair<key_type const, value_type> pair_type;
+
+        struct copy_key {
+            void operator()( key_type& dest, key_type const& src ) const
+            {
+                dest.nKey = src.nKey;
+            }
+        };
+        struct less
+        {
+            bool operator ()( key_type const& v1, key_type const& v2 ) const
+            {
+                return v1.nKey < v2.nKey;
+            }
+
+            bool operator ()( key_type const& v1, int v2 ) const
+            {
+                return v1.nKey < v2;
+            }
+
+            bool operator ()( int v1, key_type const& v2 ) const
+            {
+                return v1 < v2.nKey;
+            }
+
+            bool operator ()( key_type const& v1, std::string const& v2 ) const
+            {
+                return v1.nKey < std::stoi(v2 );
+            }
+
+            bool operator ()( std::string const& v1, key_type const& v2 ) const
+            {
+                return std::stoi( v1 ) < v2.nKey;
+            }
+        };
+
+        struct cmp {
+            int operator ()( key_type const& v1, key_type const& v2 ) const
+            {
+                if ( v1.nKey < v2.nKey )
+                    return -1;
+                return v1.nKey > v2.nKey ? 1 : 0;
+            }
+
+            int operator ()( key_type const& v1, int v2 ) const
+            {
+                if ( v1.nKey < v2 )
+                    return -1;
+                return v1.nKey > v2 ? 1 : 0;
+            }
+
+            int operator ()( int v1, key_type const& v2 ) const
+            {
+                if ( v1 < v2.nKey )
+                    return -1;
+                return v1 > v2.nKey ? 1 : 0;
+            }
+
+            int operator ()( key_type const& v1, std::string const& v2 ) const
+            {
+                int n2 = std::stoi( v2 );
+                if ( v1.nKey < n2 )
+                    return -1;
+                return v1.nKey > n2 ? 1 : 0;
+            }
+
+            int operator ()( std::string const& v1, key_type const& v2 ) const
+            {
+                int n1 = std::stoi( v1 );
+                if ( n1 < v2.nKey )
+                    return -1;
+                return n1 > v2.nKey ? 1 : 0;
+            }
+        };
+
+        struct hash1 {
+            size_t operator()( int i ) const
+            {
+                return cds::opt::v::hash<int>()( i );
+            }
+
+            size_t operator()( std::string const& str ) const
+            {
+                return cds::opt::v::hash<int>()( std::stoi( str ));
+            }
+
+            template <typename T>
+            size_t operator()( T const& i ) const
+            {
+                return cds::opt::v::hash<int>()(i.nKey);
+            }
+        };
+
+        struct other_item {
+            int nKey;
+
+            other_item( int key )
+                : nKey( key )
+            {}
+        };
+
+        struct other_less
+        {
+            bool operator ()( key_type const& v1, other_item const& v2 ) const
+            {
+                return v1.nKey < v2.nKey;
+            }
+            bool operator ()( other_item const& v1, key_type const& v2 ) const
+            {
+                return v1.nKey < v2.nKey;
+            }
+        };
+    };
+} // namespace cds_test
+
+#endif // CDSUNIT_TREE_TEST_TREE_MAP_DATA_H
diff --git a/test/unit/tree/test_tree_map_hp.h b/test/unit/tree/test_tree_map_hp.h
new file mode 100644 (file)
index 0000000..831d0cd
--- /dev/null
@@ -0,0 +1,171 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_TREE_TEST_TREE_MAP_HP_H
+#define CDSUNIT_TREE_TEST_TREE_MAP_HP_H
+
+#include "test_tree_map.h"
+
+namespace cds_test {
+
+    class container_tree_map_hp: public container_tree_map
+    {
+        typedef container_tree_map base_class;
+
+    protected:
+        template <class Map>
+        void test( Map& m )
+        {
+            // Precondition: map is empty
+            // Postcondition: map is empty
+
+            base_class::test( m );
+
+            ASSERT_TRUE( m.empty());
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            typedef typename Map::value_type map_pair;
+            size_t const kkSize = base_class::kSize;
+
+            std::vector<key_type> arrKeys;
+            for ( int i = 0; i < static_cast<int>(kkSize); ++i )
+                arrKeys.push_back( key_type( i ));
+            shuffle( arrKeys.begin(), arrKeys.end());
+
+            std::vector< value_type > arrVals;
+            for ( size_t i = 0; i < kkSize; ++i ) {
+                value_type val;
+                val.nVal = static_cast<int>( i );
+                val.strVal = std::to_string( i );
+                arrVals.push_back( val );
+            }
+
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i ) );
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            // get/extract
+            typedef typename Map::guarded_ptr guarded_ptr;
+            guarded_ptr gp;
+
+            for ( auto const& i : arrKeys ) {
+                value_type const& val = arrVals.at( i.nKey );
+
+                gp = m.get( i.nKey );
+                ASSERT_FALSE( !gp );
+                ASSERT_EQ( gp->first.nKey, i.nKey );
+                gp.release();
+                gp = m.get( i );
+                ASSERT_FALSE( !gp );
+                ASSERT_EQ( gp->first.nKey, i.nKey );
+                gp.release();
+                gp = m.get_with( other_item( i.nKey ), other_less());
+                ASSERT_FALSE( !gp );
+                ASSERT_EQ( gp->first.nKey, i.nKey );
+
+                switch ( i.nKey % 4 ) {
+                case 0:
+                    gp = m.extract( i.nKey );
+                    break;
+                case 1:
+                    gp = m.extract( i );
+                    break;
+                case 2:
+                    gp = m.extract( val.strVal );
+                    break;
+                case 3:
+                    gp = m.extract_with( other_item( i.nKey ), other_less());
+                    break;
+                }
+                ASSERT_FALSE( !gp );
+                ASSERT_EQ( gp->first.nKey, i.nKey );
+                gp.release();
+
+                gp = m.get( i.nKey );
+                ASSERT_TRUE( !gp );
+                gp = m.get( i );
+                ASSERT_TRUE( !gp );
+                gp = m.get_with( other_item( i.nKey ), other_less());
+                ASSERT_TRUE( !gp );
+            }
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            gp = m.extract_min();
+            EXPECT_TRUE( !gp );
+            gp = m.extract_max();
+            EXPECT_TRUE( !gp );
+
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i ) );
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            // extract_min
+            int nKey = -1;
+            size_t nCount = 0;
+            while ( !m.empty() ) {
+                gp = m.extract_min();
+                ASSERT_FALSE( !gp );
+                EXPECT_EQ( gp->first.nKey, nKey + 1 );
+                nKey = gp->first.nKey;
+                ++nCount;
+            }
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+            EXPECT_EQ( nCount, kkSize );
+
+            // extract_max
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i ) );
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            nKey = kkSize;
+            nCount = 0;
+            while ( !m.empty() ) {
+                gp = m.extract_max();
+                ASSERT_FALSE( !gp );
+                EXPECT_EQ( gp->first.nKey, nKey - 1 );
+                nKey = gp->first.nKey;
+                ++nCount;
+            }
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+            EXPECT_EQ( nCount, kkSize );
+
+            ASSERT_TRUE( m.check_consistency());
+        }
+    };
+
+} // namespace cds_test
+
+#endif // #ifndef CDSUNIT_TREE_TEST_TREE_MAP_HP_H
diff --git a/test/unit/tree/test_tree_map_rcu.h b/test/unit/tree/test_tree_map_rcu.h
new file mode 100644 (file)
index 0000000..113a25e
--- /dev/null
@@ -0,0 +1,257 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_TREE_TEST_TREE_MAP_RCU_H
+#define CDSUNIT_TREE_TEST_TREE_MAP_RCU_H
+
+#include "test_tree_map.h"
+
+namespace cds_test {
+
+    class container_tree_map_rcu: public container_tree_map
+    {
+        typedef container_tree_map base_class;
+
+    protected:
+        template <class Map>
+        void test( Map& m )
+        {
+            // Precondition: map is empty
+            // Postcondition: map is empty
+
+            base_class::test( m );
+
+            ASSERT_TRUE( m.empty());
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            typedef typename Map::value_type map_pair;
+            size_t const kkSize = base_class::kSize;
+
+            std::vector<key_type> arrKeys;
+            for ( int i = 0; i < static_cast<int>(kkSize); ++i )
+                arrKeys.push_back( key_type( i ));
+            shuffle( arrKeys.begin(), arrKeys.end());
+
+            std::vector< value_type > arrVals;
+            for ( size_t i = 0; i < kkSize; ++i ) {
+                value_type val;
+                val.nVal = static_cast<int>( i );
+                val.strVal = std::to_string( i );
+                arrVals.push_back( val );
+            }
+
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i ) );
+            ASSERT_FALSE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, kkSize );
+
+            typedef typename Map::exempt_ptr    exempt_ptr;
+            typedef typename Map::value_type *  raw_ptr;
+            typedef typename Map::rcu_lock      rcu_lock;
+
+            // get/extract
+            shuffle( arrKeys.begin(), arrKeys.end() );
+
+            exempt_ptr xp;
+            for ( auto const& i : arrKeys ) {
+                value_type const& val = arrVals.at( i.nKey );
+
+                {
+                    rcu_lock l;
+                    raw_ptr rp;
+
+                    rp = m.get( i.nKey );
+                    ASSERT_FALSE( !rp );
+                    EXPECT_EQ( rp->first.nKey, i.nKey );
+                    rp->second.nVal = rp->first.nKey * 2;
+
+                    rp = m.get( i );
+                    ASSERT_FALSE( !rp );
+                    EXPECT_EQ( rp->first.nKey, i.nKey );
+                    EXPECT_EQ( rp->second.nVal, rp->first.nKey * 2 );
+                    rp->second.nVal = rp->first.nKey * 3;
+
+                    rp = m.get_with( other_item( i.nKey ), other_less());
+                    ASSERT_FALSE( !rp );
+                    EXPECT_EQ( rp->first.nKey, i.nKey );
+                    EXPECT_EQ( rp->second.nVal, rp->first.nKey * 3 );
+                    rp->second.nVal = rp->first.nKey;
+                }
+
+                if ( Map::c_bExtractLockExternal ) {
+                    {
+                        rcu_lock l;
+
+                        switch ( i.nKey % 4 ) {
+                        case 0:
+                            xp = m.extract( i.nKey );
+                            break;
+                        case 1:
+                            xp = m.extract( i );
+                            break;
+                        case 2:
+                            xp = m.extract( val.strVal );
+                            break;
+                        case 3:
+                            xp = m.extract_with( other_item( i.nKey ), other_less() );
+                            break;
+                        }
+                        ASSERT_FALSE( !xp );
+                        EXPECT_EQ( xp->first.nKey, i.nKey );
+                        EXPECT_EQ( xp->second.nVal, xp->first.nKey );
+                    }
+                    xp.release();
+
+                    {
+                        rcu_lock l;
+
+                        switch ( i.nKey % 4 ) {
+                        case 0:
+                            xp = m.extract( i.nKey );
+                            break;
+                        case 1:
+                            xp = m.extract( i );
+                            break;
+                        case 2:
+                            xp = m.extract( val.strVal );
+                            break;
+                        case 3:
+                            xp = m.extract_with( other_item( i.nKey ), other_less() );
+                            break;
+                        }
+                        EXPECT_TRUE( !xp );
+                    }
+                }
+                else {
+                    switch ( i.nKey % 4 ) {
+                    case 0:
+                        xp = m.extract( i.nKey );
+                        break;
+                    case 1:
+                        xp = m.extract( i );
+                        break;
+                    case 2:
+                        xp = m.extract( val.strVal );
+                        break;
+                    case 3:
+                        xp = m.extract_with( other_item( i.nKey ), other_less());
+                        break;
+                    }
+                    ASSERT_FALSE( !xp );
+                    EXPECT_EQ( xp->first.nKey, i.nKey );
+                    EXPECT_EQ( xp->second.nVal, xp->first.nKey );
+
+                    switch ( i.nKey % 4 ) {
+                    case 0:
+                        xp = m.extract( i.nKey );
+                        break;
+                    case 1:
+                        xp = m.extract( i );
+                        break;
+                    case 2:
+                        xp = m.extract( val.strVal );
+                        break;
+                    case 3:
+                        xp = m.extract_with( other_item( i.nKey ), other_less() );
+                        break;
+                    }
+                    EXPECT_TRUE( !xp );
+                }
+
+                {
+                    rcu_lock l;
+                    raw_ptr rp;
+
+                    rp = m.get( i.nKey );
+                    ASSERT_TRUE( !rp );
+                    rp = m.get( i );
+                    ASSERT_TRUE( !rp );
+                    rp = m.get_with( other_item( i.nKey ), other_less() );
+                    ASSERT_TRUE( !rp );
+                }
+            }
+
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+
+            // extract_min
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i ) );
+
+            size_t nCount = 0;
+            int nKey = -1;
+            while ( !m.empty() ) {
+                xp = m.extract_min();
+                ASSERT_FALSE( !xp );
+                EXPECT_EQ( xp->first.nKey, nKey + 1 );
+                nKey = xp->first.nKey;
+                ++nCount;
+            }
+            xp = m.extract_min();
+            ASSERT_TRUE( !xp );
+            xp = m.extract_max();
+            ASSERT_TRUE( !xp );
+            EXPECT_EQ( kkSize, nCount );
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+
+            // extract_max
+            xp = m.extract_min();
+            EXPECT_TRUE( !xp );
+            xp = m.extract_max();
+            EXPECT_TRUE( !xp );
+
+            for ( auto const& i : arrKeys )
+                ASSERT_TRUE( m.insert( i ) );
+
+            nKey = kkSize;
+            nCount = 0;
+            while ( !m.empty() ) {
+                xp = m.extract_max();
+                ASSERT_FALSE( !xp );
+                EXPECT_EQ( xp->first.nKey, nKey - 1 );
+                nKey = xp->first.nKey;
+                ++nCount;
+            }
+
+            xp = m.extract_min();
+            ASSERT_TRUE( !xp );
+            xp = m.extract_max();
+            ASSERT_TRUE( !xp );
+            EXPECT_EQ( kkSize, nCount );
+            ASSERT_TRUE( m.empty() );
+            ASSERT_CONTAINER_SIZE( m, 0 );
+        }
+    };
+
+} // namespace cds_test
+
+#endif // #ifndef CDSUNIT_TREE_TEST_TREE_MAP_RCU_H
diff --git a/test/unit/tree/test_tree_set.h b/test/unit/tree/test_tree_set.h
new file mode 100644 (file)
index 0000000..0c5ce9e
--- /dev/null
@@ -0,0 +1,519 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TEST_TREE_SET_H
+#define CDSUNIT_SET_TEST_TREE_SET_H
+
+#include <cds_test/check_size.h>
+#include <cds_test/fixture.h>
+
+// forward declaration
+namespace cds { namespace container {}}
+
+namespace cds_test {
+
+    class container_tree_set : public fixture
+    {
+    public:
+        static size_t const kSize = 1000;
+
+        struct stat
+        {
+            unsigned int nFindCount;
+            unsigned int nUpdateNewCount;
+            unsigned int nUpdateCount;
+            mutable unsigned int nEraseCount;
+
+            stat()
+            {
+                clear_stat();
+            }
+
+            void clear_stat()
+            {
+                memset( this, 0, sizeof( *this ) );
+            }
+        };
+
+        struct other_item {
+            int nKey;
+
+            explicit other_item( int k )
+                : nKey( k )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        struct int_item: public stat
+        {
+            int nKey;
+            int nVal;
+            std::string strVal;
+
+            int_item()
+                : nKey( 0 )
+                , nVal( 0 )
+            {}
+
+            explicit int_item( int k )
+                : nKey( k )
+                , nVal( k * 2 )
+            {}
+
+            template <typename Q>
+            explicit int_item( Q const& src )
+                : nKey( src.key() )
+                , nVal( 0 )
+            {}
+
+            int_item( int_item const& src )
+                : nKey( src.nKey )
+                , nVal( src.nVal )
+                , strVal( src.strVal )
+            {}
+
+            int_item( int_item&& src )
+                : nKey( src.nKey )
+                , nVal( src.nVal )
+                , strVal( std::move( src.strVal ) )
+            {}
+
+            int_item( int k, std::string&& s )
+                : nKey( k )
+                , nVal( k * 2 )
+                , strVal( std::move( s ) )
+            {}
+
+            explicit int_item( other_item const& s )
+                : nKey( s.key() )
+                , nVal( s.key() * 2 )
+            {}
+
+            int key() const
+            {
+                return nKey;
+            }
+        };
+
+        struct key_extractor
+        {
+            template <typename T>
+            void operator()( int& key, T const& val ) const
+            {
+                key = val.key();
+            }
+        };
+
+        struct simple_item_counter {
+            size_t  m_nCount;
+
+            simple_item_counter()
+                : m_nCount( 0 )
+            {}
+
+            size_t operator ++()
+            {
+                return ++m_nCount;
+            }
+
+            size_t operator --()
+            {
+                return --m_nCount;
+            }
+
+            void reset()
+            {
+                m_nCount = 0;
+            }
+
+            operator size_t() const
+            {
+                return m_nCount;
+            }
+
+        };
+
+        struct less
+        {
+            bool operator ()( int_item const& v1, int_item const& v2 ) const
+            {
+                return v1.key() < v2.key();
+            }
+
+            bool operator()( int lhs, int rhs ) const
+            {
+                return lhs < rhs;
+            }
+
+            template <typename Q>
+            bool operator ()( int_item const& v1, const Q& v2 ) const
+            {
+                return v1.key() < v2;
+            }
+
+            template <typename Q>
+            bool operator ()( const Q& v1, int_item const& v2 ) const
+            {
+                return v1 < v2.key();
+            }
+        };
+
+        struct cmp {
+            int operator ()( int_item const& v1, int_item const& v2 ) const
+            {
+                if ( v1.key() < v2.key() )
+                    return -1;
+                return v1.key() > v2.key() ? 1 : 0;
+            }
+
+            int operator()( int lhs, int rhs ) const
+            {
+                return lhs - rhs;
+            }
+
+            template <typename T>
+            int operator ()( T const& v1, int v2 ) const
+            {
+                if ( v1.key() < v2 )
+                    return -1;
+                return v1.key() > v2 ? 1 : 0;
+            }
+
+            template <typename T>
+            int operator ()( int v1, T const& v2 ) const
+            {
+                if ( v1 < v2.key() )
+                    return -1;
+                return v1 > v2.key() ? 1 : 0;
+            }
+        };
+
+        struct other_less {
+            template <typename Q, typename T>
+            bool operator()( Q const& lhs, T const& rhs ) const
+            {
+                return lhs.key() < rhs.key();
+            }
+
+            bool operator()( int lhs, other_item const& rhs ) const
+            {
+                return lhs < rhs.key();
+            }
+
+            bool operator()( other_item const& lhs, int rhs ) const
+            {
+                return lhs.key() < rhs;
+            }
+        };
+
+    protected:
+        template <typename Set>
+        void test( Set& s )
+        {
+            // Precondition: set is empty
+            // Postcondition: set is empty
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+            size_t const nSetSize = kSize;
+
+            typedef typename Set::value_type value_type;
+
+            std::vector< value_type > data;
+            std::vector< size_t> indices;
+            data.reserve( kSize );
+            indices.reserve( kSize );
+            for ( size_t key = 0; key < kSize; ++key ) {
+                data.push_back( value_type( static_cast<int>(key) ) );
+                indices.push_back( key );
+            }
+            shuffle( indices.begin(), indices.end() );
+
+            // insert/find
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                ASSERT_FALSE( s.contains( i.nKey ) );
+                ASSERT_FALSE( s.contains( i ) );
+                ASSERT_FALSE( s.contains( other_item( i.key() ), other_less()));
+                ASSERT_FALSE( s.find( i.nKey, []( value_type&, int ) {} ));
+                ASSERT_FALSE( s.find( i, []( value_type&, value_type const& ) {} ));
+                ASSERT_FALSE( s.find_with( other_item( i.key()), other_less(), []( value_type&, other_item const& ) {} ));
+
+                std::pair<bool, bool> updResult;
+
+                std::string str;
+                updResult = s.update( i.key(), []( bool bNew, value_type&, int )
+                {
+                    ASSERT_TRUE( false );
+                }, false );
+                EXPECT_FALSE( updResult.first );
+                EXPECT_FALSE( updResult.second );
+
+                switch ( idx % 8 ) {
+                case 0:
+                    ASSERT_TRUE( s.insert( i ));
+                    ASSERT_FALSE( s.insert( i ));
+                    updResult = s.update( i, []( bool bNew, value_type& val, value_type const& arg) 
+                        {
+                            EXPECT_FALSE( bNew );
+                            EXPECT_EQ( val.key(), arg.key() );
+                        }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+                    break;
+                case 1:
+                    ASSERT_TRUE( s.insert( i.key() ));
+                    ASSERT_FALSE( s.insert( i.key() ));
+                    updResult = s.update( i.key(), []( bool bNew, value_type& val, int arg) 
+                        {
+                            EXPECT_FALSE( bNew );
+                            EXPECT_EQ( val.key(), arg );
+                        }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+                    break;
+                case 2:
+                    ASSERT_TRUE( s.insert( i, []( value_type& v ) { ++v.nFindCount; } ));
+                    ASSERT_FALSE( s.insert( i, []( value_type& v ) { ++v.nFindCount; } ));
+                    ASSERT_TRUE( s.find( i.nKey, []( value_type const& v, int key ) 
+                        {
+                            EXPECT_EQ( v.key(), key );
+                            EXPECT_EQ( v.nFindCount, 1 );
+                        }));
+                    break;
+                case 3:
+                    ASSERT_TRUE( s.insert( i.key(), []( value_type& v ) { ++v.nFindCount; } ));
+                    ASSERT_FALSE( s.insert( i.key(), []( value_type& v ) { ++v.nFindCount; } ));
+                    ASSERT_TRUE( s.find( i.nKey, []( value_type const& v, int key ) 
+                        {
+                            EXPECT_EQ( v.key(), key );
+                            EXPECT_EQ( v.nFindCount, 1 );
+                        }));
+                    break;
+                case 4:
+                    updResult = s.update( i, []( bool bNew, value_type& v, value_type const& arg )
+                        {
+                            EXPECT_TRUE( bNew );
+                            EXPECT_EQ( v.key(), arg.key() );
+                            ++v.nUpdateNewCount;
+                        });
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_TRUE( updResult.second );
+
+                    updResult = s.update( i, []( bool bNew, value_type& v, value_type const& arg )
+                        {
+                            EXPECT_FALSE( bNew );
+                            EXPECT_EQ( v.key(), arg.key() );
+                            ++v.nUpdateNewCount;
+                        }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+
+                    ASSERT_TRUE( s.find( i.nKey, []( value_type const& v, int key )
+                        {
+                            EXPECT_EQ( v.key(), key );
+                            EXPECT_EQ( v.nUpdateNewCount, 2 );
+                        }));
+                    break;
+                case 5:
+                    updResult = s.update( i.key(), []( bool bNew, value_type& v, int arg )
+                        {
+                            EXPECT_TRUE( bNew );
+                            EXPECT_EQ( v.key(), arg );
+                            ++v.nUpdateNewCount;
+                        });
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_TRUE( updResult.second );
+
+                    updResult = s.update( i.key(), []( bool bNew, value_type& v, int arg )
+                        {
+                            EXPECT_FALSE( bNew );
+                            EXPECT_EQ( v.key(), arg );
+                            ++v.nUpdateNewCount;
+                        }, false );
+                    EXPECT_TRUE( updResult.first );
+                    EXPECT_FALSE( updResult.second );
+
+                    ASSERT_TRUE( s.find( i, []( value_type const& v, value_type const& arg )
+                        {
+                            EXPECT_EQ( v.key(), arg.key() );
+                            EXPECT_EQ( v.nUpdateNewCount, 2 );
+                        }));
+                    break;
+                case 6:
+                    ASSERT_TRUE( s.emplace( i.key()));
+                    ASSERT_TRUE( s.find( i, []( value_type const& v, value_type const& arg )
+                        {
+                            EXPECT_EQ( v.key(), arg.key() );
+                            EXPECT_EQ( v.nVal, arg.nVal );
+                        }));
+                    break;
+                case 7:
+                    str = "Hello!";
+                    ASSERT_TRUE( s.emplace( i.key(), std::move( str )));
+                    EXPECT_TRUE( str.empty());
+                    ASSERT_TRUE( s.find( i, []( value_type const& v, value_type const& arg )
+                        {
+                            EXPECT_EQ( v.key(), arg.key() );
+                            EXPECT_EQ( v.nVal, arg.nVal );
+                            EXPECT_EQ( v.strVal, std::string( "Hello!" ));
+                        } ) );
+                    break;
+                default:
+                    // forgot anything?..
+                    ASSERT_TRUE( false );
+                }
+
+                ASSERT_TRUE( s.contains( i.nKey ) );
+                ASSERT_TRUE( s.contains( i ) );
+                ASSERT_TRUE( s.contains( other_item( i.key() ), other_less() ) );
+                ASSERT_TRUE( s.find( i.nKey, []( value_type&, int ) {} ) );
+                ASSERT_TRUE( s.find( i, []( value_type&, value_type const& ) {} ) );
+                ASSERT_TRUE( s.find_with( other_item( i.key() ), other_less(), []( value_type&, other_item const& ) {} ) );
+            }
+
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            ASSERT_TRUE( s.check_consistency());
+
+            // erase
+            shuffle( indices.begin(), indices.end() );
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                ASSERT_TRUE( s.contains( i.nKey ) );
+                ASSERT_TRUE( s.contains( i ) );
+                ASSERT_TRUE( s.contains( other_item( i.key() ), other_less() ) );
+                ASSERT_TRUE( s.find( i.nKey, []( value_type& v, int ) 
+                    { 
+                        v.nFindCount = 1;
+                    }));
+                ASSERT_TRUE( s.find( i, []( value_type& v, value_type const& ) 
+                    { 
+                        EXPECT_EQ( ++v.nFindCount, 2 );
+                    }));
+                ASSERT_TRUE( s.find_with( other_item( i.key() ), other_less(), []( value_type& v, other_item const& ) 
+                    { 
+                        EXPECT_EQ( ++v.nFindCount, 3 );
+                    }));
+
+                int nKey = i.key() - 1;
+                switch ( idx % 6 ) {
+                case 0:
+                    ASSERT_TRUE( s.erase( i.key()));
+                    ASSERT_FALSE( s.erase( i.key()));
+                    break;
+                case 1:
+                    ASSERT_TRUE( s.erase( i ));
+                    ASSERT_FALSE( s.erase( i ));
+                    break;
+                case 2:
+                    ASSERT_TRUE( s.erase_with( other_item( i.key()), other_less()));
+                    ASSERT_FALSE( s.erase_with( other_item( i.key() ), other_less() ) );
+                    break;
+                case 3:
+                    ASSERT_TRUE( s.erase( i.key(), [&nKey]( value_type const& v )
+                        {
+                            nKey = v.key();
+                        } ));
+                    EXPECT_EQ( i.key(), nKey );
+
+                    nKey = i.key() - 1;
+                    ASSERT_FALSE( s.erase( i.key(), [&nKey]( value_type const& v )
+                        {
+                            nKey = v.key();
+                        } ));
+                    EXPECT_EQ( i.key(), nKey + 1 );
+                    break;
+                case 4:
+                    ASSERT_TRUE( s.erase( i, [&nKey]( value_type const& v )
+                        {
+                            nKey = v.key();
+                        } ));
+                    EXPECT_EQ( i.key(), nKey );
+
+                    nKey = i.key() - 1;
+                    ASSERT_FALSE( s.erase( i, [&nKey]( value_type const& v )
+                        {
+                            nKey = v.key();
+                        } ));
+                    EXPECT_EQ( i.key(), nKey + 1 );
+                    break;
+                case 5:
+                    ASSERT_TRUE( s.erase_with( other_item( i.key()), other_less(), [&nKey]( value_type const& v )
+                        {
+                            nKey = v.key();
+                        } ));
+                    EXPECT_EQ( i.key(), nKey );
+
+                    nKey = i.key() - 1;
+                    ASSERT_FALSE( s.erase_with( other_item( i.key()), other_less(), [&nKey]( value_type const& v )
+                        {
+                            nKey = v.key();
+                        } ));
+                    EXPECT_EQ( i.key(), nKey + 1 );
+                    break;
+                }
+
+                ASSERT_FALSE( s.contains( i.nKey ) );
+                ASSERT_FALSE( s.contains( i ) );
+                ASSERT_FALSE( s.contains( other_item( i.key() ), other_less()));
+                ASSERT_FALSE( s.find( i.nKey, []( value_type&, int ) {} ));
+                ASSERT_FALSE( s.find( i, []( value_type&, value_type const& ) {} ));
+                ASSERT_FALSE( s.find_with( other_item( i.key()), other_less(), []( value_type&, other_item const& ) {} ));
+            }
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+
+            // clear
+            for ( auto& i : data ) {
+                ASSERT_TRUE( s.insert( i ) );
+            }
+
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            s.clear();
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+        }
+    };
+
+} // namespace cds_test
+
+#endif // CDSUNIT_SET_TEST_TREE_SET_H
diff --git a/test/unit/tree/test_tree_set_hp.h b/test/unit/tree/test_tree_set_hp.h
new file mode 100644 (file)
index 0000000..b0bed2f
--- /dev/null
@@ -0,0 +1,188 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_SET_TEST_TREE_SET_HP_H
+#define CDSUNIT_SET_TEST_TREE_SET_HP_H
+
+#include "test_tree_set.h"
+
+namespace cds_test {
+
+    class container_tree_set_hp: public container_tree_set
+    {
+        typedef container_tree_set base_class;
+
+    protected:
+        template <typename Set>
+        void test( Set& s )
+        {
+            // Precondition: set is empty
+            // Postcondition: set is empty
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            base_class::test( s );
+
+            typedef typename Set::value_type value_type;
+
+            size_t const nSetSize = kSize;
+            std::vector< value_type > data;
+            std::vector< size_t> indices;
+            data.reserve( kSize );
+            indices.reserve( kSize );
+            for ( size_t key = 0; key < kSize; ++key ) {
+                data.push_back( value_type( static_cast<int>(key) ) );
+                indices.push_back( key );
+            }
+            shuffle( indices.begin(), indices.end() );
+
+            for ( auto i : indices ) {
+                ASSERT_TRUE( s.insert( data[i] ) );
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            typedef typename Set::guarded_ptr guarded_ptr;
+            guarded_ptr gp;
+
+            // get()
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                ASSERT_TRUE( !gp );
+                switch ( idx % 3 ) {
+                case 0:
+                    gp = s.get( i.key() );
+                    ASSERT_FALSE( !gp );
+                    break;
+                case 1:
+                    gp = s.get( i );
+                    ASSERT_FALSE( !gp );
+                    break;
+                case 2:
+                    gp = s.get_with( other_item( i.key() ), other_less() );
+                    ASSERT_FALSE( !gp );
+                }
+                EXPECT_EQ( gp->key(), i.key() );
+                gp->nFindCount = gp->key() * 3;
+
+                gp.release();
+            }
+
+            // extract()
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                ASSERT_TRUE( !gp );
+                switch ( idx % 3 ) {
+                case 0:
+                    gp = s.extract( i.key() );
+                    ASSERT_FALSE( !gp );
+                    break;
+                case 1:
+                    gp = s.extract( i );
+                    ASSERT_FALSE( !gp );
+                    break;
+                case 2:
+                    gp = s.extract_with( other_item( i.key() ), other_less() );
+                    ASSERT_FALSE( !gp );
+                    break;
+                }
+                EXPECT_EQ( gp->key(), i.key() );
+                EXPECT_EQ( gp->nFindCount, i.key() * 3 );
+
+                switch ( idx % 3 ) {
+                case 0:
+                    gp = s.extract( i.key() );
+                    break;
+                case 1:
+                    gp = s.extract( i );
+                    break;
+                case 2:
+                    gp = s.extract_with( other_item( i.key() ), other_less() );
+                    break;
+                }
+                ASSERT_TRUE( !gp );
+            }
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            for ( auto i : indices ) {
+                ASSERT_TRUE( s.insert( data[i] ) );
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            // extract_min
+            size_t nCount = 0;
+            int nKey = -1;
+            while ( !s.empty() ) {
+                gp = s.extract_min();
+                ASSERT_FALSE( !gp );
+                EXPECT_EQ( nKey + 1, gp->key() );
+                ++nCount;
+                nKey = gp->key();
+            }
+            gp.release();
+            EXPECT_EQ( nCount, nSetSize );
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            // extract_max
+            for ( auto i : indices ) {
+                ASSERT_TRUE( s.insert( data[i] ));
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            nCount = 0;
+            nKey = nSetSize;
+            while ( !s.empty() ) {
+                gp = s.extract_max();
+                ASSERT_FALSE( !gp );
+                EXPECT_EQ( nKey - 1, gp->key() );
+                ++nCount;
+                nKey = gp->key();
+            }
+            gp.release();
+            EXPECT_EQ( nCount, nSetSize );
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+        }
+
+    };
+} // namespace cds_test
+
+#endif // CDSUNIT_SET_TEST_TREE_SET_HP_H
diff --git a/test/unit/tree/test_tree_set_rcu.h b/test/unit/tree/test_tree_set_rcu.h
new file mode 100644 (file)
index 0000000..e6f9dda
--- /dev/null
@@ -0,0 +1,233 @@
+/*
+    This file is a part of libcds - Concurrent Data Structures library
+
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+*/
+
+#ifndef CDSUNIT_TREE_TEST_TREE_SET_RCU_H
+#define CDSUNIT_TREE_TEST_TREE_SET_RCU_H
+
+#include "test_tree_set.h"
+
+namespace cds_test {
+
+    class container_tree_set_rcu: public container_tree_set
+    {
+        typedef container_tree_set base_class;
+
+    protected:
+        template <typename Set>
+        void test( Set& s )
+        {
+            // Precondition: set is empty
+            // Postcondition: set is empty
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            base_class::test( s );
+
+            typedef typename Set::value_type value_type;
+
+            size_t const nSetSize = kSize;
+            std::vector< value_type > data;
+            std::vector< size_t> indices;
+            data.reserve( kSize );
+            indices.reserve( kSize );
+            for ( size_t key = 0; key < kSize; ++key ) {
+                data.push_back( value_type( static_cast<int>(key) ) );
+                indices.push_back( key );
+            }
+            shuffle( indices.begin(), indices.end() );
+
+            for ( auto i : indices ) {
+                ASSERT_TRUE( s.insert( data[i] ));
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            typedef typename Set::exempt_ptr exempt_ptr;
+            typedef value_type *             raw_ptr;
+            typedef typename Set::rcu_lock   rcu_lock;
+
+            // get()
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                {
+                    rcu_lock l;
+                    raw_ptr  rp{};
+                    ASSERT_TRUE( !rp );
+                    switch ( idx % 3 ) {
+                    case 0:
+                        rp = s.get( i.key() );
+                        ASSERT_FALSE( !rp );
+                        break;
+                    case 1:
+                        rp = s.get( i );
+                        ASSERT_FALSE( !rp );
+                        break;
+                    case 2:
+                        rp = s.get_with( other_item( i.key() ), other_less() );
+                        ASSERT_FALSE( !rp );
+                    }
+                    EXPECT_EQ( rp->key(), i.key() );
+                    rp->nFindCount = rp->key() * 3;
+                }
+            }
+
+            // extract()
+            exempt_ptr xp;
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
+
+                ASSERT_TRUE( !xp );
+                if ( Set::c_bExtractLockExternal ) {
+                    {
+                        rcu_lock l;
+
+                        switch ( idx % 3 ) {
+                        case 0:
+                            xp = s.extract( i.key() );
+                            ASSERT_FALSE( !xp );
+                            break;
+                        case 1:
+                            xp = s.extract( i );
+                            ASSERT_FALSE( !xp );
+                            break;
+                        case 2:
+                            xp = s.extract_with( other_item( i.key() ), other_less() );
+                            ASSERT_FALSE( !xp );
+                            break;
+                        }
+                        EXPECT_EQ( xp->key(), i.key() );
+                        EXPECT_EQ( xp->nFindCount, i.key() * 3 );
+                    }
+                    xp.release();
+
+                    {
+                        rcu_lock l;
+
+                        switch ( idx % 3 ) {
+                        case 0:
+                            xp = s.extract( i.key() );
+                            break;
+                        case 1:
+                            xp = s.extract( i );
+                            break;
+                        case 2:
+                            xp = s.extract_with( other_item( i.key() ), other_less() );
+                            break;
+                        }
+                        ASSERT_TRUE( !xp );
+                    }
+                }
+                else {
+                    switch ( idx % 3 ) {
+                    case 0:
+                        xp = s.extract( i.key() );
+                        ASSERT_FALSE( !xp );
+                        break;
+                    case 1:
+                        xp = s.extract( i );
+                        ASSERT_FALSE( !xp );
+                        break;
+                    case 2:
+                        xp = s.extract_with( other_item( i.key() ), other_less() );
+                        ASSERT_FALSE( !xp );
+                        break;
+                    }
+                    EXPECT_EQ( xp->key(), i.key() );
+                    EXPECT_EQ( xp->nFindCount, i.key() * 3 );
+
+                    switch ( idx % 3 ) {
+                    case 0:
+                        xp = s.extract( i.key() );
+                        break;
+                    case 1:
+                        xp = s.extract( i );
+                        break;
+                    case 2:
+                        xp = s.extract_with( other_item( i.key() ), other_less() );
+                        break;
+                    }
+                    ASSERT_TRUE( !xp );
+                }
+            }
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            for ( auto i : indices ) {
+                ASSERT_TRUE( s.insert( data[i] ) );
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            // extract_min
+            size_t nCount = 0;
+            int nKey = -1;
+            while ( !s.empty() ) {
+                xp = s.extract_min();
+                ASSERT_FALSE( !xp );
+                EXPECT_EQ( nKey + 1, xp->key() );
+                ++nCount;
+                nKey = xp->key();
+            }
+            xp.release();
+            EXPECT_EQ( nCount, nSetSize );
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+
+            // extract_max
+            for ( auto i : indices ) {
+                ASSERT_TRUE( s.insert( data[i] ) );
+            }
+            ASSERT_FALSE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, nSetSize );
+
+            nCount = 0;
+            nKey = nSetSize;
+            while ( !s.empty() ) {
+                xp = s.extract_max();
+                ASSERT_FALSE( !xp );
+                EXPECT_EQ( nKey - 1, xp->key() );
+                ++nCount;
+                nKey = xp->key();
+            }
+            xp.release();
+            EXPECT_EQ( nCount, nSetSize );
+
+            ASSERT_TRUE( s.empty() );
+            ASSERT_CONTAINER_SIZE( s, 0 );
+        }
+
+    };
+} // namespace cds_test
+
+#endif // CDSUNIT_TREE_TEST_TREE_SET_RCU_H
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
deleted file mode 100644 (file)
index 3de9585..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-set(TEST_COMMON test-common)
-
-include_directories(${CMAKE_CURRENT_SOURCE_DIR})
-
-set(SOURCES cppunit/test_main.cpp
-            cppunit/thread.cpp
-            unit/michael_alloc.cpp
-            unit/ellen_bintree_update_desc_pool.cpp
-            hashing/city.cpp)
-
-add_library(${TEST_COMMON} OBJECT ${SOURCES})
-
-add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/test-hdr)
-add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/unit)
-
-file(GLOB CONF_FILES ${PROJECT_SOURCE_DIR}/tests/data/*.conf)
-file(COPY ${CONF_FILES} DESTINATION ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/tests/cppunit/cppunit_mini.h b/tests/cppunit/cppunit_mini.h
deleted file mode 100644 (file)
index 091a25a..0000000
+++ /dev/null
@@ -1,416 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-/*
- * Copyright (c) 2003, 2004
- * Zdenek Nemec
- *
- * This material is provided "as is", with absolutely no warranty expressed
- * or implied. Any use is at your own risk.
- *
- * Permission to use or copy this software for any purpose is hereby granted
- * without fee, provided the above notices are retained on all copies.
- * Permission to modify the code and to distribute modified code is granted,
- * provided the above notices are retained, and a notice that the code was
- * modified is included with the above copyright notice.
- *
- */
-
-/*
-    Partially changed and expanded by Maxim Khiszinsky (cds), 2009
-*/
-
-/* $Id$ */
-
-#ifndef CDS_CPPUNIT_MPFR_H_
-#define CDS_CPPUNIT_MPFR_H_
-
-#include <string.h>
-#include <sstream>
-#include <iostream>
-#include <vector>
-#include <string>
-#include <map>
-#include <random>
-
-#include <assert.h>
-
-#include <boost/lexical_cast.hpp>
-
-namespace CppUnitMini
-{
-  class Reporter {
-  public:
-    virtual ~Reporter() {}
-    virtual void error(const char * /*macroName*/, const char * /*in_macro*/, const char * /*in_file*/, int /*in_line*/) {}
-    virtual void message( const char * /*msg*/ ) {}
-    virtual void progress( const char * /*in_className*/, const char * /*in_testName*/, bool /*ignored*/, bool /* explicit */) {}
-    virtual void end() {}
-    virtual void printSummary() {}
-  };
-
-  struct TestCfg
-  {
-      typedef std::map< std::string, std::string >  cfg_map;
-      cfg_map    m_Cfg ; // map param_name => value
-
-      template <typename T>
-      T get( const std::string& strParamName, T defVal ) const
-      {
-          cfg_map::const_iterator it = m_Cfg.find( strParamName );
-          if ( it == m_Cfg.end() )
-              return defVal ; // param not found -> returns default value
-          try {
-              return boost::lexical_cast< T >( it->second );
-          }
-          catch ( boost::bad_lexical_cast& ex )
-          {
-              std::cerr << "bad_lexical_cast encountered while getting parameter "
-                  << strParamName << "=" << it->second
-                  << ": " << ex.what()
-                  << std::endl
-;
-          }
-          return defVal;
-      }
-
-      template <typename T>
-      T get( const char * pszParamName, T defVal ) const
-      {
-          return get( std::string( pszParamName ), defVal );
-      }
-
-      int getInt( const char * pszParamName, int nDefVal = 0 ) const { return get( pszParamName, nDefVal ) ; }
-      unsigned int getUInt( const char * pszParamName, unsigned int nDefVal = 0 ) const { return get( pszParamName, nDefVal ) ; }
-      long getLong( const char * pszParamName, long nDefVal = 0 ) const { return get( pszParamName, nDefVal ) ; }
-      unsigned long getULong( const char * pszParamName, unsigned long nDefVal = 0 ) const { return get( pszParamName, nDefVal ) ; }
-      size_t getSizeT( const char * pszParamName, size_t nDefVal = 0 ) const
-      {
-          return static_cast<size_t>( getULong( pszParamName, static_cast<unsigned long>(nDefVal)));
-      }
-
-      bool getBool( const char * pszParamName, bool bDefVal = false ) const
-      {
-          std::string strParamName( pszParamName );
-          cfg_map::const_iterator it = m_Cfg.find( strParamName );
-          if ( it == m_Cfg.end() )
-              return bDefVal ; // param not found -> returns default value
-          try {
-              return boost::lexical_cast< int >( it->second ) != 0;
-          }
-          catch ( boost::bad_lexical_cast& ex )
-          {
-              std::cerr << "bad_lexical_cast encountered while getting parameter "
-                  << strParamName << "=" << it->second
-                  << ": " << ex.what()
-                  << std::endl;
-          }
-          return bDefVal;
-      }
-
-  };
-
-  class Config {
-      std::map< std::string, TestCfg>  m_Cfg;
-
-  public:
-      Config() {}
-
-      void load( const char * fileName );
-
-      TestCfg& get( const std::string& strTestName )
-      {
-          return m_Cfg[ strTestName ];
-      }
-  };
-
-  class TestFixture {
-  public:
-    virtual ~TestFixture() {}
-
-    //! \brief Set up context before running a test.
-    virtual void setUp() {}
-
-    //! Clean up after the test run.
-    virtual void tearDown() {}
-  };
-
-  class TestCase : public TestFixture {
-  public:
-    TestCase()
-    {
-        registerTestCase(this);
-    }
-
-    void setUp() { m_failed = false; }
-    static int run(Reporter *in_reporter = 0, const char *in_testName = "", bool invert = false);
-    int numErrors() { return m_numErrors; }
-    static void registerTestCase(TestCase *in_testCase);
-
-    static TestCase * current_test()
-    {
-        assert( m_pCurTestCase );
-        return m_pCurTestCase;
-    }
-
-    virtual void setUpParams( const TestCfg& /*cfg*/ ) {}
-    virtual void endTestCase() {}
-    virtual void myRun(const char * /*in_name*/, bool /*invert*/ = false) {}
-
-    virtual void error(const char *in_macroName, const char *in_macro, const char *in_file, int in_line) {
-      m_failed = true;
-      if (m_reporter) {
-        m_reporter->error(in_macroName, in_macro, in_file, in_line);
-      }
-    }
-    virtual char const * test_name() const = 0;
-
-    static void message(const char *msg) {
-      if (m_reporter) {
-        m_reporter->message(msg);
-      }
-    }
-
-    bool equalDoubles(double in_expected, double in_real, double in_maxErr) {
-      double diff = in_expected - in_real;
-      if (diff < 0.) {
-        diff = -diff;
-      }
-      return diff < in_maxErr;
-    }
-
-    virtual void progress(const char *in_className, const char *in_functionName, bool ignored, bool explicitTest) {
-      ++m_numTests;
-      if (m_reporter) {
-        m_reporter->progress(in_className, in_functionName, ignored, explicitTest);
-      }
-    }
-
-    bool shouldRunThis( const char *in_desiredTest, const char *in_className, const char *in_functionName,
-                        bool invert, bool explicit_test, bool &do_progress );
-
-    void tearDown() {
-      print_gc_state();
-      if (m_failed)
-        ++m_numErrors;
-      m_reporter->end();
-    }
-
-    static void print_gc_state();
-
-    static std::vector<std::string> const&  getTestStrings();
-
-    template <typename RandomIt>
-    static void shuffle( RandomIt first, RandomIt last )
-    {
-        std::shuffle( first, last, m_RandomGen );
-    }
-
-    static void print_test_list();
-
-  protected:
-    static std::vector<std::string>  m_arrStrings ;   // array of test strings
-
-  public:
-      static bool m_bPrintGCState   ;   // print GC state after each test
-      static Config m_Cfg;
-      static std::string m_strTestDataDir;
-      static bool m_bExactMatch;
-
-      // random shuffle support
-      static std::random_device m_RandomDevice;
-      static std::mt19937       m_RandomGen;
-
-  protected:
-    static int m_numErrors;
-    static int m_numTests;
-
-    static TestCase * m_pCurTestCase;
-
-  private:
-    static TestCase *m_root;
-    TestCase *m_next;
-    bool m_failed;
-
-    static Reporter *m_reporter;
-  };
-
-}
-
-#if !defined (CPPUNIT_MINI_HIDE_UNUSED_VARIABLE)
-#  if defined (_MSC_VER)
-#    define CPPUNIT_MINI_HIDE_UNUSED_VARIABLE(v) (v);
-#  else
-#    define CPPUNIT_MINI_HIDE_UNUSED_VARIABLE(v)
-#  endif
-#endif
-
-#define CPPUNIT_TEST_SUITE_(X, cfgBranchName) \
-    typedef CppUnitMini::TestCase Base; \
-    virtual char const * test_name() const { return #X; } \
-    virtual void myRun(const char *in_name, bool invert = false) { \
-    const char *className = #X; CPPUNIT_MINI_HIDE_UNUSED_VARIABLE(className) \
-    bool ignoring = false; CPPUNIT_MINI_HIDE_UNUSED_VARIABLE(ignoring) \
-    setUpParams( m_Cfg.get( cfgBranchName ));
-
-#define CPPUNIT_TEST_SUITE(X) CPPUNIT_TEST_SUITE_(X, #X)
-
-#if defined CPPUNIT_MINI_USE_EXCEPTIONS
-#  define CPPUNIT_TEST_BASE(X, Y) \
-  { \
-    bool do_progress; \
-    bool shouldRun = shouldRunThis(in_name, className, #X, invert, Y, do_progress); \
-    if (shouldRun || do_progress) { \
-      setUp(); \
-      progress(className, #X, ignoring || !shouldRun, !ignoring && Y); \
-      if (shouldRun && !ignoring) { \
-        try { \
-          X(); \
-        } \
-        catch(...) { \
-          Base::error("Test Failed: An exception was thrown.", #X, __FILE__, __LINE__); \
-        } \
-      } \
-      tearDown(); \
-    } \
-  }
-#else
-#  define CPPUNIT_TEST_BASE(X, Y) \
-  { \
-    bool do_progress; \
-    bool shouldRun = shouldRunThis(in_name, className, #X, invert, Y, do_progress); \
-    if (shouldRun || do_progress) { \
-      setUp(); \
-      progress(className, #X, ignoring || !shouldRun, !ignoring && Y); \
-      if (shouldRun && !ignoring) \
-        X(); \
-      tearDown(); \
-    } \
-  }
-#endif
-
-#define CPPUNIT_TEST(X) CPPUNIT_TEST_BASE(X, false)
-#define CPPUNIT_EXPLICIT_TEST(X) CPPUNIT_TEST_BASE(X, true)
-
-#define CDSUNIT_DECLARE_TEST(X) void X();
-
-#define CPPUNIT_IGNORE \
-  ignoring = true
-
-#define CPPUNIT_STOP_IGNORE \
-  ignoring = false
-
-#define CPPUNIT_TEST_SUITE_END() endTestCase(); }
-#define CPPUNIT_TEST_SUITE_END_PART() }
-
-#define CPPUNIT_TEST_SUITE_REGISTRATION_(X, NAME) static X NAME
-#define CPPUNIT_TEST_SUITE_REGISTRATION(X) CPPUNIT_TEST_SUITE_REGISTRATION_(X, local)
-
-#define CPPUNIT_CHECK(X) \
-  if (!(X)) { \
-    Base::error("CPPUNIT_CHECK", #X, __FILE__, __LINE__); \
-  }
-
-#define CPPUNIT_CHECK_CURRENT(X) \
-  if (!(X)) { \
-    CppUnitMini::TestCase::current_test()->error("CPPUNIT_CHECK", #X, __FILE__, __LINE__); \
-  }
-
-#define CPPUNIT_CHECK_EX(X, Y) \
-    if (!(X)) { \
-        std::stringstream st    ;   \
-        st << #X << ": " << Y   ;   \
-        Base::error("CPPUNIT_CHECK", st.str().c_str(), __FILE__, __LINE__); \
-    }
-
-#define CPPUNIT_CHECK_CURRENT_EX(X, Y) \
-    if (!(X)) { \
-        std::stringstream st    ;   \
-        st << #X << ": " << Y   ;   \
-        CppUnitMini::TestCase::current_test()->error("CPPUNIT_CHECK", st.str().c_str(), __FILE__, __LINE__); \
-    }
-
-#define CPPUNIT_ASSERT(X) \
-  if (!(X)) { \
-    Base::error("CPPUNIT_ASSERT", #X, __FILE__, __LINE__); \
-    return; \
-  }
-
-#define CPPUNIT_ASSERT_CURRENT(X) \
-    if (!(X)) { \
-        CppUnitMini::TestCase::current_test()->error("CPPUNIT_ASSERT", #X, __FILE__, __LINE__); \
-        return; \
-    }
-
-
-#define CPPUNIT_ASSERT_EX(A, X) \
-    if (!(A)) { \
-        std::stringstream st    ;   \
-        st << #A << ": " << X   ;   \
-        Base::error("CPPUNIT_ASSERT", st.str().c_str(), __FILE__, __LINE__); \
-        return; \
-    }
-
-#define CPPUNIT_FAIL { \
-    Base::error("CPPUNIT_FAIL", "", __FILE__, __LINE__); \
-    return; \
-  }
-
-#define CPPUNIT_ASSERT_EQUAL(X, Y) \
-  if ((X) != (Y)) { \
-    Base::error("CPPUNIT_ASSERT_EQUAL", #X","#Y, __FILE__, __LINE__); \
-    return; \
-  }
-
-#define CPPUNIT_ASSERT_DOUBLES_EQUAL(X, Y, Z) \
-  if (!equalDoubles((X), (Y), (Z))) { \
-    Base::error("CPPUNIT_ASSERT_DOUBLES_EQUAL", #X","#Y","#Z, __FILE__, __LINE__); \
-    return; \
-  }
-
-// added by cds
-#define CPPUNIT_MSG( X ) \
-    {   \
-        std::stringstream st    ;   \
-        st << X ;   \
-        if ( !st.str().empty() ) \
-            CppUnitMini::TestCase::message( st.str().c_str() );   \
-    }
-
-#define CPPUNIT_MESSAGE(m) CppUnitMini::TestCase::message(m)
-
-#define CPPUNIT_ASSERT_MSG( A, X ) \
-    if ( !(A) ){   \
-        std::stringstream st    ;   \
-        st << #A << ": " << X ;   \
-        error( "CPPUNIT_ASSERT_MSG", st.str().c_str(), __FILE__, __LINE__ )     ;   \
-    }
-
-#endif // #ifndef CDS_CPPUNIT_MPFR_H_
diff --git a/tests/cppunit/cppunit_proxy.h b/tests/cppunit/cppunit_proxy.h
deleted file mode 100644 (file)
index efade93..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-/*
- * Copyright (c) 2003, 2004
- * Zdenek Nemec
- *
- * This material is provided "as is", with absolutely no warranty expressed
- * or implied. Any use is at your own risk.
- *
- * Permission to use or copy this software for any purpose is hereby granted
- * without fee, provided the above notices are retained on all copies.
- * Permission to modify the code and to distribute modified code is granted,
- * provided the above notices are retained, and a notice that the code was
- * modified is included with the above copyright notice.
- *
- */
-
-/* $Id$ */
-
-#ifndef CDS_CPPUNIT_PROXYINTERFACE_H_
-#define CDS_CPPUNIT_PROXYINTERFACE_H_
-
-/*
- * STLport specific
- */
-#if !defined (CPPUNIT_MINI_USE_EXCEPTIONS) && \
-    (!defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS))
-#  define CPPUNIT_MINI_USE_EXCEPTIONS
-#endif
-
-#include "cppunit/cppunit_mini.h"
-#include <cds/algo/atomic.h>   // for cds::atomicity::empty_item_counter
-
-#endif // #ifndef CDS_CPPUNIT_PROXYINTERFACE_H_
diff --git a/tests/cppunit/file_reporter.h b/tests/cppunit/file_reporter.h
deleted file mode 100644 (file)
index c5551c0..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-/*
- * Copyright (c) 2003, 2004
- * Zdenek Nemec
- *
- * This material is provided "as is", with absolutely no warranty expressed
- * or implied. Any use is at your own risk.
- *
- * Permission to use or copy this software for any purpose is hereby granted
- * without fee, provided the above notices are retained on all copies.
- * Permission to modify the code and to distribute modified code is granted,
- * provided the above notices are retained, and a notice that the code was
- * modified is included with the above copyright notice.
- *
- */
-
-/* $Id$ */
-
-#ifndef CDS_CPPUNIT_MINIFILEREPORTERINTERFACE_H_
-#define CDS_CPPUNIT_MINIFILEREPORTERINTERFACE_H_
-
-#include <stdio.h>
-
-#include <cds/os/timer.h>
-
-namespace CppUnitMini {
-    typedef cds::OS::Timer    Timer;
-    //
-    // CppUnit mini file(stream) reporter
-    //
-    class FileReporter : public CppUnitMini::Reporter {
-    private:
-      FileReporter(const FileReporter&);
-      FileReporter& operator=(const FileReporter&);
-    public:
-      // reporting to stderr
-      explicit FileReporter(bool doMonitor = false):
-          m_numErrors(0), m_numIgnored(0), m_numExplicit(0), m_numTests(0), _myStream(false),
-          m_failed(false), m_doMonitor(doMonitor)
-      { _file = stderr; }
-
-      // reporting to the file with the given name
-      explicit FileReporter(const char* file, bool doMonitor = false):
-          m_numErrors(0), m_numIgnored(0), m_numExplicit(0), m_numTests(0), _myStream(true),
-          m_failed(false), m_doMonitor(doMonitor)
-      {
-    #ifndef _STLP_USE_SAFE_STRING_FUNCTIONS
-        _file = fopen(file, "w");
-    #else
-        fopen_s(&_file, file, "w");
-    #endif
-      }
-
-      // reporting to the given file
-      explicit FileReporter(FILE* stream, bool doMonitor = false):
-          m_numErrors(0), m_numIgnored(0), m_numExplicit(0), m_numTests(0), _myStream(false),
-          m_failed(false), m_doMonitor(doMonitor)
-      { _file = stream; }
-
-      virtual ~FileReporter() {
-        if (_myStream)
-          fclose(_file);
-        else
-          fflush(_file);
-      }
-
-      virtual void error(const char *in_macroName, const char *in_macro, const char *in_file, int in_line) {
-        // Error might be called several times between 2 progress calls, we shouldn't however consider
-        // that a test failed twice so we simply keep the info that test failed, number of failed tests
-        // is computed later in end method.
-        m_failed = true;
-        fprintf(_file, "\n\n%s(%d) : %s(%s);", in_file, in_line, in_macroName, in_macro);
-        fflush(_file);
-      }
-
-      virtual void message( const char *msg )
-      { fprintf(_file, "\n\t%s", msg ); fflush(_file); }
-
-      virtual void progress(const char *in_className, const char *in_shortTestName, bool ignored, bool explicitTest) {
-        if (m_doMonitor)
-          m_testTimer.reset();
-
-        ++m_numTests;
-        m_failed = false;
-        if (ignored)
-          ++m_numIgnored;
-        fprintf(_file, "%s::%s", in_className, in_shortTestName);
-        if (ignored) {
-          const char *ignoredReason;
-          if (explicitTest) {
-            ++m_numExplicit;
-            ignoredReason = " EXPLICIT";
-          }
-          else
-            ignoredReason = " IGNORED";
-
-          fprintf(_file, "%s", ignoredReason);
-        }
-      }
-
-      virtual void end() {
-        if (m_doMonitor) {
-          fprintf(_file, " %f msec", m_testTimer.duration());
-        }
-        if (m_failed) {
-          ++m_numErrors;
-        }
-        fprintf(_file, "\n");
-        fflush(_file);
-      }
-
-      virtual void printSummary() {
-        if (m_numErrors > 0) {
-          fprintf(_file, "\nThere were errors! %d of %d tests", m_numErrors, m_numTests);
-        }
-        else {
-          fprintf(_file, "\nOK %d tests", m_numTests);
-        }
-
-        if (m_numIgnored > 0) {
-          fprintf(_file, ", %d ignored", m_numIgnored);
-        }
-
-        if (m_numExplicit > 0) {
-          fprintf(_file, " (%d explicit)", m_numExplicit);
-        }
-
-        fprintf(_file, "\n\n");
-        fflush(_file);
-      }
-    private:
-      int m_numErrors;
-      int m_numIgnored;
-      int m_numExplicit;
-      int m_numTests;
-      // flag whether we own '_file' and are thus responsible for releasing it in the destructor
-      bool  _myStream;
-      bool m_failed;
-      bool m_doMonitor;
-      Timer m_testTimer;
-      FILE* _file;
-    };
-}
-#endif // #ifndef CDS_CPPUNIT_MINIFILEREPORTERINTERFACE_H_
diff --git a/tests/cppunit/test_beans.h b/tests/cppunit/test_beans.h
deleted file mode 100644 (file)
index b326fee..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDS_CPPUNIT_TEST_BEANS_H
-#define CDS_CPPUNIT_TEST_BEANS_H
-
-
-// Forward declarations
-namespace cds {
-    namespace intrusive {}
-    namespace opt {}
-}
-
-// Including this header is a bad thing for header testing. How to avoid it?..
-#include <cds/algo/atomic.h>   // for cds::atomicity::empty_item_counter
-
-namespace test_beans {
-    template <typename ItemCounter>
-    struct check_item_counter {
-        bool operator()( size_t nReal, size_t nExpected )
-        {
-            return nReal == nExpected;
-        }
-    };
-
-    template <>
-    struct check_item_counter<cds::atomicity::empty_item_counter>
-    {
-        bool operator()( size_t nReal, size_t /*nExpected*/ )
-        {
-            return nReal == 0;
-        }
-    };
-} // namespace beans
-
-#endif // #ifndef CDS_CPPUNIT_TEST_BEANS_H
diff --git a/tests/cppunit/test_main.cpp b/tests/cppunit/test_main.cpp
deleted file mode 100644 (file)
index a460a3c..0000000
+++ /dev/null
@@ -1,513 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-/*
- * Copyright (c) 2003, 2004
- * Zdenek Nemec
- *
- * This material is provided "as is", with absolutely no warranty expressed
- * or implied. Any use is at your own risk.
- *
- * Permission to use or copy this software for any purpose is hereby granted
- * without fee, provided the above notices are retained on all copies.
- * Permission to modify the code and to distribute modified code is granted,
- * provided the above notices are retained, and a notice that the code was
- * modified is included with the above copyright notice.
- *
- */
-
-/*
-#if defined(_DEBUG) && _MSC_VER == 1500
-#    define _CRTDBG_MAP_ALLOC
-#    include <stdlib.h>
-#    include <crtdbg.h>
-#endif
-*/
-
-#include "cppunit/cppunit_proxy.h"
-#include "cppunit/file_reporter.h"
-
-#include <cds/init.h>
-#include <cds/gc/hp.h>
-#include <cds/gc/dhp.h>
-#include <cds/urcu/general_instant.h>
-#include <cds/urcu/general_buffered.h>
-#include <cds/urcu/general_threaded.h>
-#include <cds/urcu/signal_buffered.h>
-#include <cds/urcu/signal_threaded.h>
-#include <cds/os/topology.h>
-
-#include "stdio.h"
-#include <fstream>
-#include <iostream>
-#include <set>
-#include <boost/date_time/posix_time/posix_time.hpp>
-#include <boost/thread/mutex.hpp>
-
-// Visual leak detector (see http://vld.codeplex.com/)
-#if defined(CDS_USE_VLD) && CDS_COMPILER == CDS_COMPILER_MSVC
-#   ifdef _DEBUG
-#       include <vld.h>
-#   endif
-#endif
-
-
-std::ostream& operator << (std::ostream& s, const cds::gc::hp::GarbageCollector::InternalState& stat)
-{
-    s << "\nHZP GC internal state:"
-        << "\n\t            HP record allocated=" << stat.nHPRecAllocated
-        << "\n\t                HP records used=" << stat.nHPRecUsed
-        << "\n\t        Total retired ptr count=" << stat.nTotalRetiredPtrCount
-        << "\n\t Retired ptr in free HP records=" << stat.nRetiredPtrInFreeHPRecs
-        << "\n\tEvents:"
-        << "\n\t              HPRec allocations=" << stat.evcAllocHPRec
-        << "\n\t            HPRec retire events=" << stat.evcRetireHPRec
-        << "\n\tnew HPRec allocations from heap=" << stat.evcAllocNewHPRec
-        << "\n\t                HPRec deletions=" << stat.evcDeleteHPRec
-        << "\n\t                Scan call count=" << stat.evcScanCall
-        << "\n\t            HelpScan call count=" << stat.evcHelpScanCall
-        << "\n\t       Scan calls from HelpScan=" << stat.evcScanFromHelpScan
-        << "\n\t       retired object deleting=" << stat.evcDeletedNode
-        << "\n\t        guarded object on Scan=" << stat.evcDeferredNode
-        << std::endl;
-
-    return s;
-}
-
-namespace CppUnitMini
-{
-    int TestCase::m_numErrors = 0;
-    int TestCase::m_numTests = 0;
-    std::vector<std::string>  TestCase::m_arrStrings;
-    bool TestCase::m_bPrintGCState = false;
-    std::string TestCase::m_strTestDataDir(".");
-    Config TestCase::m_Cfg;
-    bool TestCase::m_bExactMatch = false;
-
-    // random shuffle support
-    /*static*/ std::random_device TestCase::m_RandomDevice;
-    /*static*/ std::mt19937       TestCase::m_RandomGen( TestCase::m_RandomDevice() );
-
-    TestCase * TestCase::m_pCurTestCase = nullptr;
-
-    TestCase *TestCase::m_root = 0;
-    Reporter *TestCase::m_reporter = 0;
-
-  void TestCase::registerTestCase(TestCase *in_testCase) {
-    in_testCase->m_next = m_root;
-    m_root = in_testCase;
-  }
-
-  int TestCase::run(Reporter *in_reporter, const char *in_testName, bool invert)
-  {
-    TestCase::m_reporter = in_reporter;
-
-    m_numErrors = 0;
-    m_numTests = 0;
-
-    TestCase *tmp = m_root;
-    while (tmp != 0) {
-      m_pCurTestCase = tmp;
-      try {
-        tmp->myRun(in_testName, invert);
-      } catch ( std::exception& ex ) {
-        in_reporter->message( "EXCEPTION: ");
-        in_reporter->message( ex.what() );
-      }
-      tmp = tmp->m_next;
-    }
-
-    return m_numErrors;
-  }
-
-  bool TestCase::shouldRunThis(const char *in_desiredTest, const char *in_className, const char *in_functionName,
-                       bool invert, bool explicit_test, bool &do_progress)
-  {
-      if ((in_desiredTest) && (in_desiredTest[0] != '\0')) {
-        do_progress = false;
-        const char *ptr = strstr(in_desiredTest, "::");
-        if (ptr) {
-            bool match;
-            if ( m_bExactMatch ) {
-                match = (strncmp( in_desiredTest, in_className, strlen( in_className )) == 0 && in_desiredTest[strlen( in_className )] == ':')
-                     && (strcmp( ptr + 2, in_functionName ) == 0);
-            }
-            else {
-                match = (strncmp( in_desiredTest, in_className, strlen( in_className )) == 0 && in_desiredTest[strlen( in_className )] == ':')
-                     && (strncmp( ptr + 2, in_functionName, strlen( ptr + 2 ) ) == 0);
-            }
-            // Invert shall not make explicit test run:
-            return invert ? (match ? !match : !explicit_test)
-                          : match;
-        }
-        bool match = (strcmp(in_desiredTest, in_className) == 0);
-        do_progress = match;
-        return !explicit_test && (match == !invert);
-      }
-      do_progress = true;
-
-      return !explicit_test;
-  }
-
-
-  void TestCase::print_gc_state()
-  {
-      if ( m_bPrintGCState ) {
-          {
-              cds::gc::hp::GarbageCollector::InternalState stat;
-              std::cout << cds::gc::hp::GarbageCollector::instance().getInternalState( stat ) << std::endl;
-          }
-      }
-  }
-
-  void TestCase::print_test_list()
-  {
-      TestCase *tmp = m_root;
-      std::cout << "Test list:\n";
-      while (tmp != 0) {
-          std::cout << "\t" << tmp->test_name() << "\n";
-          tmp = tmp->m_next;
-      }
-  }
-
-  void Config::load( const char * fileName )
-  {
-      std::ifstream s;
-      s.open( fileName );
-      if ( !s.is_open() ) {
-          std::cerr << "WARNING: Cannot open test cfg file " << fileName
-              << "\n\tUse default settings"
-              << std::endl;
-          return;
-      }
-
-      std::cout << "Using test config file: " << fileName << std::endl;
-
-      char buf[ 4096 ];
-
-      TestCfg * pMap = nullptr;
-      while ( !s.eof() ) {
-          s.getline( buf, sizeof(buf)/sizeof(buf[0]) );
-          char * pszStr = buf;
-          // trim left
-          while ( *pszStr != 0 && (*pszStr == ' ' || *pszStr == '\t' )) ++pszStr;
-          // trim right
-          char * pszEnd = strchr( pszStr, 0 );
-          if ( pszEnd == pszStr )    // empty srtring
-              continue;
-          --pszEnd;
-          while ( pszEnd != pszStr && (*pszEnd ==' ' || *pszEnd=='\t' || *pszEnd=='\n' || *pszEnd=='\r' )) --pszEnd;
-
-          if ( pszStr == pszEnd  )    // empty string
-              continue;
-
-          pszEnd[1] = 0;
-
-          if ( *pszStr == '#' )    // comment
-              continue;
-
-          if ( *pszStr == '[' && *pszEnd == ']' ) {    // chapter header
-              *pszEnd = 0;
-              pMap = &( m_Cfg[ pszStr + 1 ] );
-              continue;
-          }
-
-          if ( !pMap )
-              continue;
-
-          char * pszEq = strchr( pszStr, '=' );
-          if ( !pszEq )
-              continue;
-          if ( pszEq == pszStr )
-              continue;
-
-          pszEnd = pszEq;
-          while ( pszStr <= --pszEnd && (*pszEnd ==' ' || *pszEnd=='\t' || *pszEnd=='\n' || *pszEnd=='\r') );
-
-          if ( pszEnd <= pszStr )
-              continue;
-          pszEnd[1] = 0;
-          pMap->m_Cfg[ pszStr ] = pszEq + 1;
-      }
-      s.close();
-  }
-
-  std::vector<std::string> const & TestCase::getTestStrings()
-  {
-      if ( m_arrStrings.empty() ) {
-          std::string strTestDir = m_strTestDataDir;
-
-          std::ifstream fDict;
-          char bufLine[1024];
-          std::cout << "Loading test data " << strTestDir << "/dictionary.txt..." << std::endl;
-          fDict.open( (strTestDir + "/dictionary.txt").c_str() );
-          if ( fDict.is_open() ) {
-              cds::OS::Timer timer;
-              std::string str;
-              fDict >> str    ;   // number of lines in file
-
-              // Assume that dictionary.txt does not contain doubles.
-              CppUnitMini::TestCase::m_arrStrings.reserve( atol(str.c_str()) );
-              while ( !fDict.eof() ) {
-                  fDict.getline( bufLine, sizeof(bufLine)/sizeof(bufLine[0]) );
-                  if ( bufLine[0] )
-                    m_arrStrings.push_back( bufLine );
-              }
-              fDict.close();
-
-              std::cout << "  Duration=" << timer.duration() << " String count " << CppUnitMini::TestCase::m_arrStrings.size() << std::endl;
-          }
-          else
-              std::cout << "  Failed, file not found" << std::endl;
-
-      }
-      return m_arrStrings;
-  }
-}
-
-static void usage(const char* name)
-{
-    std::cout << "Usage: " << name << " [options] [-t=<class>[::<test>]] [-x=<class>[::<test>]] [-f=<file>]\n"
-                 "\t[-t=<class>[::<test>]] : test class or class::test to execute\n"
-                 "\t[-d=dir] : test data directory (default is .)\n"
-                 "\t[-f=<file>] : output file\n"
-                 "Options:\n"
-                 "\t-exact-match - class::test should be exactly matched to existing test\n"
-                 "\t-gc_state    - print gc state after each test\n"
-                 "\t-cfg=<file>  - config file name for tests\n"
-                 "\t-list        - list all tests\n"
-                 "\t"
-              << std::endl;
-}
-
-int main(int argc, char** argv)
-{
-
-#ifdef CDS_MSVC_MEMORY_LEAKS_DETECTING_ENABLED
-    _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
-#endif
-
-  // CppUnit(mini) test launcher
-  // command line option syntax:
-  // test [Options]
-  // where Options are
-  //  -t=CLASS[::TEST]    run the test class CLASS or member test CLASS::TEST
-  //  -x=CLASS[::TEST]    run all except the test class CLASS or member test CLASS::TEST
-  //  -d=dir              test data directory (default is .)
-  //  -f=FILE             save output in file FILE instead of stdout
-  //  -m                  monitor test(s) execution
-  //  -gc_state           print GC state after test
-  const char *fileName = 0;
-  const char *testName = "";
-  const char *xtestName = "";
-  const char *testDataDir = ".";
-  const char *cfgFileName =
-#ifdef _DEBUG
-      "test-debug.conf"
-#else
-      "test.conf"
-#endif
-;
-  bool doMonitoring = false;
-
-  for (int i = 1; i < argc; ++i) {
-    if (argv[i][0] == '-') {
-      if ( strncmp(argv[i], "-t=", 3) == 0 ) {
-        testName = argv[i]+3;
-        continue;
-      }
-      else if ( strncmp(argv[i], "-f=", 3) == 0 ) {
-        fileName = argv[i]+3;
-        continue;
-      }
-      else if ( strncmp(argv[i], "-x=", 3) == 0 ) {
-        xtestName = argv[i]+3;
-        continue;
-      }
-      else if ( strncmp(argv[i], "-d=", 3) == 0 ) {
-          testDataDir = argv[i] + 3;
-          continue;
-      }
-      else if ( strncmp( argv[i], "-m", 2 ) == 0 ) {
-          doMonitoring = true;
-          continue;
-      }
-      else if ( strncmp( argv[i], "-exact-match", 12 ) == 0 ) {
-          CppUnitMini::TestCase::m_bExactMatch = true;
-          continue;
-      }
-      else if (strncmp(argv[i], "-list", 5) == 0) {
-          CppUnitMini::TestCase::print_test_list();
-          return 0;
-      }
-      else if ( strncmp(argv[i], "-gc_state", 9) == 0 ) {
-          CppUnitMini::TestCase::m_bPrintGCState = true;
-          continue;
-      }
-      else if( strncmp(argv[i], "-cfg=", 5) == 0 ) {
-          cfgFileName = argv[i] + 5;
-          continue;
-      }
-    }
-
-    // invalid option, we display normal usage.
-    usage(argv[0]);
-    return 1;
-
-  }
-
-  {
-    boost::posix_time::ptime cur( boost::posix_time::second_clock::local_time());
-
-    std::cout << "libcds version " << CDS_VERSION_STRING << "\n";
-    std::cout << "Test started " << cur << std::endl;
-  }
-
-
-  CppUnitMini::TestCase::m_strTestDataDir = testDataDir;
-
-  CppUnitMini::Reporter* reporter;
-  if (fileName != 0)
-    reporter = new CppUnitMini::FileReporter(fileName, doMonitoring);
-  else
-    reporter = new CppUnitMini::FileReporter(stdout, doMonitoring);
-
-  // Load config params
-  CppUnitMini::TestCase::m_Cfg.load( cfgFileName );
-
-  // Init CDS runtime
-  cds::Initialize();
-
-  int num_errors;
-  {
-      size_t nHazardPtrCount = 0;
-      size_t dhp_liberateThreshold;
-      size_t dhp_initialThreadGuardCount;
-      size_t dhp_epochCount;
-      {
-        CppUnitMini::TestCfg& cfg = CppUnitMini::TestCase::m_Cfg.get( "General" );
-        nHazardPtrCount = cfg.getULong( "hazard_pointer_count", 0 );
-
-        dhp_liberateThreshold = cfg.getSizeT( "dhp_liberate_threshold", 1024 );
-        dhp_initialThreadGuardCount = cfg.getSizeT( "dhp_init_guard_count", 8 );
-        dhp_epochCount = cfg.getSizeT( "dhp_epoch_count", 16 );
-      }
-
-      // Safe reclamation schemes
-      cds::gc::HP hzpGC( nHazardPtrCount );
-      cds::gc::DHP dhpGC( dhp_liberateThreshold, dhp_initialThreadGuardCount, dhp_epochCount );
-
-      // RCU varieties
-      typedef cds::urcu::gc< cds::urcu::general_instant<> >    rcu_gpi;
-      rcu_gpi   gpiRCU;
-
-      typedef cds::urcu::gc< cds::urcu::general_buffered<> >    rcu_gpb;
-      rcu_gpb   gpbRCU;
-
-      typedef cds::urcu::gc< cds::urcu::general_threaded<> >    rcu_gpt;
-      rcu_gpt   gptRCU;
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-      typedef cds::urcu::gc< cds::urcu::signal_buffered<> >    rcu_shb;
-      rcu_shb   shbRCU( 256, SIGUSR1 );
-
-      typedef cds::urcu::gc< cds::urcu::signal_threaded<> >    rcu_sht;
-      rcu_sht   shtRCU( 256, SIGUSR2 );
-#endif
-
-      // System topology
-      {
-          std::cout
-              << "System topology:\n"
-              << "    Logical processor count: " << std::thread::hardware_concurrency() << "\n";
-          std::cout << std::endl;
-      }
-
-      {
-        CppUnitMini::TestCfg& cfg = CppUnitMini::TestCase::m_Cfg.get( "General" );
-        std::string strHZPScanStrategy = cfg.get( "HZP_scan_strategy", std::string("classic") );
-        if ( strHZPScanStrategy == "inplace" )
-            hzpGC.setScanType( cds::gc::HP::scan_type::inplace );
-        else if ( strHZPScanStrategy == "classic" )
-            hzpGC.setScanType( cds::gc::HP::scan_type::classic );
-        else {
-            std::cout << "Error value of HZP_scan_strategy in General section of test config\n";
-        }
-
-        switch (hzpGC.getScanType()) {
-        case cds::gc::HP::scan_type::inplace:
-            std::cout << "Use in-place scan strategy for Hazard Pointer memory reclamation algorithm\n";
-            break;
-        case cds::gc::HP::scan_type::classic:
-            std::cout << "Use classic scan strategy for Hazard Pointer memory reclamation algorithm\n";
-            break;
-        default:
-            std::cout << "ERROR: use unknown scan strategy for Hazard Pointer memory reclamation algorithm\n";
-            break;
-        }
-
-        std::cout << "     Hazard Pointer count: " << hzpGC.max_hazard_count() << "\n"
-                  << "  Max thread count for HP: " << hzpGC.max_thread_count() << "\n"
-                  << "Retired HP array capacity: " << hzpGC.retired_array_capacity() << "\n";
-      }
-
-      if ( CppUnitMini::TestCase::m_bPrintGCState ) {
-        cds::gc::hp::GarbageCollector::InternalState stat;
-        cds::gc::hp::GarbageCollector::instance().getInternalState( stat );
-
-        std::cout << "HP constants:"
-            << "\n\tHP count per thread=" << stat.nHPCount
-            << "\n\tMax thread count=" << stat.nMaxThreadCount
-            << "\n\tMax retired pointer count per thread=" << stat.nMaxRetiredPtrCount
-            << "\n\tHP record size in bytes=" << stat.nHPRecSize
-            << "\n" << std::endl;
-      }
-
-    // Attach main thread to CDS GC
-    cds::threading::Manager::attachThread();
-
-    if (xtestName[0] != 0)
-        num_errors = CppUnitMini::TestCase::run(reporter, xtestName, true);
-    else
-        num_errors = CppUnitMini::TestCase::run(reporter, testName);
-
-    // Detach main thread from CDS GC
-    cds::threading::Manager::detachThread();
-
-  }
-
-  // Finalize CDS runtime
-  cds::Terminate();
-
-  reporter->printSummary();
-  delete reporter;
-
-  return num_errors;
-}
diff --git a/tests/cppunit/thread.cpp b/tests/cppunit/thread.cpp
deleted file mode 100644 (file)
index 01bc5b6..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include <chrono>
-#include <cds/details/defs.h> // TSan annotations
-#include "cppunit/thread.h"
-
-namespace CppUnitMini {
-
-    void TestThread::threadEntryPoint( TestThread * pInst )
-    {
-        pInst->run();
-    }
-
-    void TestThread::create()
-    {
-        m_pThread = new boost::thread( threadEntryPoint, this );
-    }
-
-    void TestThread::run()
-    {
-        try {
-            init();
-            m_Pool.onThreadInitDone( this );
-
-            test();
-            m_Pool.onThreadTestDone( this );
-
-            fini();
-            m_Pool.onThreadFiniDone( this );
-        }
-        catch ( std::exception& ex )
-        {
-            m_Pool.m_Test.message( "EXCEPTION in working thread: ");
-            m_Pool.m_Test.message( ex.what() );
-        }
-    }
-
-    void TestThread::error(const char *in_macroName, const char *in_macro, const char *in_file, int in_line)
-    {
-        m_Pool.m_Test.error( in_macroName, in_macro, in_file, in_line );
-    }
-
-
-    ThreadPool::~ThreadPool()
-    {
-        delete m_pBarrierStart;
-        delete m_pBarrierDone;
-
-        for ( size_t i = 0; i < m_arrThreads.size(); ++i )
-            delete m_arrThreads[i];
-        m_arrThreads.resize( 0 );
-    }
-
-    void    ThreadPool::add( TestThread * pThread, size_t nCount )
-    {
-        pThread->m_nThreadNo = m_arrThreads.size();
-        m_arrThreads.push_back( pThread );
-        while ( --nCount ) {
-            TestThread * p = pThread->clone();
-            if ( p ) {
-                p->m_nThreadNo = m_arrThreads.size();
-                m_arrThreads.push_back( p );
-            }
-        }
-    }
-
-    void    ThreadPool::run()
-    {
-        const size_t nThreadCount = m_arrThreads.size();
-        m_pBarrierStart = new boost::barrier( (unsigned int) nThreadCount );
-        // nThreadCount threads + current thread
-        m_pBarrierDone = new boost::barrier( (unsigned int) (nThreadCount + 1) );
-
-        for ( size_t i = 0; i < nThreadCount; ++i )
-            m_arrThreads[i]->create();
-
-        // Wait while all threads is done
-        m_pBarrierDone->wait();
-        std::this_thread::sleep_for(std::chrono::milliseconds(500));
-    }
-
-    void ThreadPool::run( unsigned int nDuration )
-    {
-        const size_t nThreadCount = m_arrThreads.size();
-        m_pBarrierStart = new boost::barrier( (unsigned int) nThreadCount );
-        m_pBarrierDone = new boost::barrier( (unsigned int) (nThreadCount + 1) );
-
-        for ( size_t i = 0; i < nThreadCount; ++i )
-            m_arrThreads[i]->create();
-
-        auto stEnd(std::chrono::steady_clock::now() + std::chrono::seconds( nDuration ));
-        do {
-            std::this_thread::sleep_until( stEnd );
-        } while ( std::chrono::steady_clock::now() < stEnd );
-
-        for ( size_t i = 0; i < nThreadCount; ++i )
-            m_arrThreads[i]->stop();
-
-        // Wait while all threads is done
-        m_pBarrierDone->wait();
-        std::this_thread::sleep_for(std::chrono::milliseconds(500));
-    }
-
-    void    ThreadPool::onThreadInitDone( TestThread * pThread )
-    {
-        // Calls in context of caller thread
-        // Wait while all threads started
-        m_pBarrierStart->wait();
-
-        pThread->m_Timer.reset();
-    }
-
-    void    ThreadPool::onThreadTestDone( TestThread * pThread )
-    {
-        // Calls in context of caller thread
-        pThread->m_nDuration = pThread->m_Timer.duration();
-    }
-
-    void    ThreadPool::onThreadFiniDone( TestThread * /*pThread*/ )
-    {
-        // Calls in context of caller thread
-        // Wait while all threads done
-        m_pBarrierDone->wait();
-    }
-}
diff --git a/tests/cppunit/thread.h b/tests/cppunit/thread.h
deleted file mode 100644 (file)
index 76fd62e..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDS_CPPUNIT_THREAD_H
-#define CDS_CPPUNIT_THREAD_H
-
-#include <cds/details/defs.h>
-#include "cppunit/cppunit_mini.h"
-#include <boost/thread.hpp>
-#include <cds/os/timer.h>
-#include <cds/threading/model.h>    // for attach/detach thread
-#include <cds/algo/atomic.h>
-
-// Visual leak detector (see http://vld.codeplex.com/)
-#if defined(CDS_USE_VLD) && CDS_COMPILER == CDS_COMPILER_MSVC
-#   ifdef _DEBUG
-#       include <vld.h>
-#   endif
-#endif
-
-namespace CppUnitMini {
-    static inline unsigned int Rand( unsigned int nMax )
-    {
-        double rnd = double( rand() ) / double( RAND_MAX );
-        unsigned int n = (unsigned int) (rnd * nMax);
-        return n < nMax ? n : (n-1);
-    }
-
-    class ThreadPool;
-    class TestThread
-    {
-    protected:
-        typedef TestThread  Base;
-        friend class ThreadPool;
-
-        ThreadPool&         m_Pool;
-        boost::thread *     m_pThread;
-        cds::OS::Timer      m_Timer;
-        atomics::atomic<bool>    m_bTimeElapsed;
-
-    public:
-        double              m_nDuration;
-        size_t              m_nThreadNo;
-
-    protected:
-        static void threadEntryPoint( TestThread * pThread );
-
-        TestThread( TestThread& src )
-            : m_Pool( src.m_Pool )
-            , m_pThread( nullptr )
-            , m_bTimeElapsed( false )
-            , m_nDuration( 0 )
-            , m_nThreadNo( 0 )
-        {}
-
-        virtual ~TestThread()
-        {
-            if ( m_pThread )
-                delete m_pThread;
-        }
-
-        virtual TestThread *    clone() = 0;
-
-        void create();
-        void run();
-
-        virtual void init() {}
-        virtual void test() = 0;
-        virtual void fini() {}
-        void stop()
-        {
-            m_bTimeElapsed.store( true, atomics::memory_order_release );
-        }
-        bool time_elapsed() const
-        {
-            return m_bTimeElapsed.load( atomics::memory_order_acquire );
-        }
-
-        bool check_timeout( size_t nMaxDuration )
-        {
-            return m_Timer.duration() > nMaxDuration;
-        }
-
-        void error(const char *in_macroName, const char *in_macro, const char *in_file, int in_line);
-
-    public:
-        TestThread( ThreadPool& pool )
-            : m_Pool( pool )
-            , m_pThread( nullptr )
-            , m_nDuration( 0 )
-            , m_nThreadNo( 0 )
-        {}
-    };
-
-    class ThreadPool
-    {
-    public:
-        TestCase&                       m_Test;
-
-    private:
-        typedef std::vector< TestThread * >     thread_vector;
-
-        boost::thread_group             m_Pool;
-        thread_vector                   m_arrThreads;
-
-        boost::barrier * volatile       m_pBarrierStart;
-        boost::barrier * volatile       m_pBarrierDone;
-
-    public:
-        typedef thread_vector::iterator    iterator;
-
-    public:
-        ThreadPool( TestCase& tc )
-            : m_Test( tc )
-            , m_pBarrierStart( nullptr )
-            , m_pBarrierDone( nullptr )
-        {}
-        ~ThreadPool();
-
-        void    add( TestThread * pThread, size_t nCount );
-
-        void    run();
-        void    run( unsigned int nDuration );
-
-        void    onThreadInitDone( TestThread * pThread );
-        void    onThreadTestDone( TestThread * pThread );
-        void    onThreadFiniDone( TestThread * pThread );
-
-        iterator begin() { return m_arrThreads.begin(); }
-        iterator end()   { return m_arrThreads.end() ;   }
-
-        double  avgDuration() const
-        {
-            double nDur = 0;
-            for ( size_t i = 0; i < m_arrThreads.size(); ++i )
-                nDur += m_arrThreads[i]->m_nDuration;
-            return nDur / m_arrThreads.size();
-        }
-    };
-}
-
-#endif    // #ifndef CDS_CPPUNIT_THREAD_H
diff --git a/tests/data/split.pl b/tests/data/split.pl
deleted file mode 100644 (file)
index 3d0f4c7..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/perl\r
-\r
-my %words ;\r
-\r
-open( my $f, "text.txt" ) ;\r
-binmode $f ;\r
-\r
-my $text = ''  ;\r
-$text .= $_ while (<$f>) ;\r
-close $f ;\r
-\r
-my @a = split /[^\w'-]/, $text ;\r
-foreach my $w (@a) {\r
-       $words{$w} += 1 if $w ;\r
-}\r
-for (my $j = 1; $j < 30; ++$j ) {\r
-       for ( my $i = 0; $i + $j - 1 < @a; $i += 1 ) {\r
-               my $s = '';\r
-               for ( my $k = 0; $k < $j; ++$k ) {\r
-                       $s .= ' '.$a[$i+$k];\r
-               }\r
-               $s =~ /\s*(\S.+\S)\s*/;\r
-               $s = $1 ;\r
-               $s =~ s/\s\s+/ /g ;\r
-               $words{$s} += 1 ;\r
-       }\r
-}\r
-\r
-open (my $dst, ">dictionary.txt") ;\r
-binmode $dst ;\r
-\r
-my $nCount = 0 ;\r
-$nCount++ foreach (keys %words) ;\r
-print $dst $nCount, "\n" ;\r
-\r
-print "Generate test dictionary...\n" ;\r
-print $dst $_, "\n" foreach (keys %words)      ;\r
-\r
-close $dst  ;\r
diff --git a/tests/data/test-debug.conf b/tests/data/test-debug.conf
deleted file mode 100644 (file)
index 3052e04..0000000
+++ /dev/null
@@ -1,296 +0,0 @@
-[General]\r
-# HZP scan strategy, possible values are "classic", "inplace". Default is "classic"\r
-HZP_scan_strategy=inplace\r
-hazard_pointer_count=72\r
-\r
-# cds::gc::DHP initialization parameters\r
-dhp_liberate_threshold=1024\r
-dhp_init_guard_count=8\r
-dhp_epoch_count=16\r
-\r
-[Atomic_ST]\r
-iterCount=10000\r
-\r
-[thread_init_fini]\r
-ThreadCount=4\r
-PassCount=100000\r
-\r
-[Allocator_ST]\r
-PassCount=10\r
-# Total allocation per pass, Megabytes\r
-AllocPerPass=1024\r
-\r
-[Linux_Scale]\r
-# Allocation count per test\r
-PassCount=1000000\r
-# Max allocated block size in bytes\r
-MaxBlockSize=65000\r
-# Max thread count. 0 is processor_count * 2\r
-MaxThreadCount=0\r
-\r
-[Hoard_ThreadTest]\r
-MinBlockSize=16\r
-MaxBlockSize=64\r
-BlockCount=5000\r
-PassCount=25\r
-# Max thread count. 0 is processor_count * 2\r
-MaxThreadCount=0\r
-\r
-[Larson]\r
-MinBlockSize=8\r
-MaxBlockSize=1024\r
-PassCount=100000\r
-# Max thread count. 0 is processor_count * 2\r
-MaxThreadCount=0\r
-\r
-[Random_Alloc]\r
-DataSize=1000\r
-MinBlockSize=8\r
-MaxBlockSize=100000\r
-PassCount=100000\r
-# Max thread count. 0 is processor_count * 2\r
-MaxThreadCount=0\r
-\r
-\r
-[Spinlock_MT]\r
-ThreadCount=4\r
-LoopCount=100000\r
-\r
-[Stack_Push]\r
-ThreadCount=8\r
-StackSize=100000\r
-EliminationSize=4\r
-\r
-[Stack_PushPop]\r
-PushThreadCount=16\r
-PopThreadCount=16\r
-StackSize=1600000\r
-EliminationSize=4\r
-\r
-[IntrusiveStack_PushPop]\r
-PushThreadCount=16\r
-PopThreadCount=16\r
-StackSize=1600000\r
-EliminationSize=4\r
-# Flat combining stack parameters\r
-# FCIterate=1 - the test will be run iteratively\r
-#   for combine pass count from 1 to FCCombinePassCount\r
-#   and compact factor from 1 to FCCompactFactor\r
-# FCIterate=0 - the test runs only once for giving\r
-#   FCCombinePassCount and FCCompactFactor\r
-FCIterate=0\r
-FCCombinePassCount=4\r
-FCCompactFactor=64\r
-\r
-[Queue_Push]\r
-ThreadCount=8\r
-QueueSize=100000\r
-\r
-[Queue_Pop]\r
-ThreadCount=8\r
-QueueSize=100000\r
-\r
-[Queue_ReaderWriter]\r
-ReaderCount=3\r
-WriterCount=3\r
-QueueSize=100000\r
-\r
-[IntrusiveQueue_ReaderWriter]\r
-ReaderCount=3\r
-WriterCount=3\r
-QueueSize=100000\r
-\r
-[Queue_Random]\r
-ThreadCount=4\r
-QueueSize=500000\r
-\r
-[BoundedQueue_Fullness]\r
-ThreadCount=4\r
-QueueSize=1024\r
-PassCount=100000\r
-\r
-[PQueue_Push]\r
-ThreadCount=4\r
-QueueSize=10000\r
-\r
-[PQueue_PushPop]\r
-PushThreadCount=4\r
-PopThreadCount=4\r
-QueueSize=10000\r
-\r
-[Map_Nonconcurrent_iterator]\r
-MapSize=1000000\r
-\r
-[Map_Nonconcurrent_iterator_MT]\r
-ThreadCount=4\r
-MapSize=1000000\r
-\r
-[Map_find_int]\r
-ThreadCount=2\r
-MapSize=10000\r
-PercentExists=50\r
-PassCount=2\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=256\r
-CuckooProbesetSize=8\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=8\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_find_string]\r
-ThreadCount=2\r
-MapSize=10000\r
-PercentExists=50\r
-PassCount=2\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=256\r
-CuckooProbesetSize=8\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=8\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_InsDel_int]\r
-InsertThreadCount=4\r
-DeleteThreadCount=4\r
-ThreadPassCount=8\r
-MapSize=50000\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=256\r
-CuckooProbesetSize=8\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=8\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_InsDel_func]\r
-InsertThreadCount=4\r
-DeleteThreadCount=4\r
-UpdateThreadCount=4\r
-ThreadPassCount=8\r
-MapSize=5000\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=256\r
-CuckooProbesetSize=8\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=8\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_InsDel_Item_int]\r
-ThreadCount=4\r
-MapSize=10000\r
-GoalItem=5000\r
-AttemptCount=1000\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=256\r
-CuckooProbesetSize=8\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=8\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_InsDel_string]\r
-InsertThreadCount=4\r
-DeleteThreadCount=4\r
-ThreadPassCount=8\r
-MapSize=10000\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=256\r
-CuckooProbesetSize=8\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=8\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_InsDel_Item_string]\r
-ThreadCount=4\r
-MapSize=10000\r
-GoalItemIndex=5000\r
-AttemptCount=1000\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=256\r
-CuckooProbesetSize=8\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=8\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_InsFind_int]\r
-ThreadCount=0\r
-MapSize=1000\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=256\r
-CuckooProbesetSize=8\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=8\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_InsDelFind]\r
-InitialMapSize=50000\r
-ThreadCount=4\r
-MaxLoadFactor=8\r
-InsertPercentage=5\r
-DeletePercentage=5\r
-Duration=7\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=256\r
-CuckooProbesetSize=8\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=8\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_DelOdd]\r
-MapSize=50000\r
-InsThreadCount=2\r
-DelThreadCount=2\r
-ExtractThreadCount=2\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-#Cuckoo map properties\r
-CuckooInitialSize=256\r
-CuckooProbesetSize=8\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=8\r
-FeldmanMapArrayBits=4\r
diff --git a/tests/data/test-express.conf b/tests/data/test-express.conf
deleted file mode 100644 (file)
index fa9b8ee..0000000
+++ /dev/null
@@ -1,290 +0,0 @@
-[General]\r
-# HZP scan strategy, possible values are "classic", "inplace". Default is "classic"\r
-HZP_scan_strategy=inplace\r
-# Hazard pointer count per thread, for gc::HP\r
-hazard_pointer_count=72\r
-\r
-# cds::gc::DHP initialization parameters\r
-dhp_liberate_threshold=1024\r
-dhp_init_guard_count=16\r
-dhp_epoch_count=16\r
-\r
-[Atomic_ST]\r
-iterCount=1000000\r
-\r
-[thread_init_fini]\r
-ThreadCount=8\r
-PassCount=100000\r
-\r
-[Allocator_ST]\r
-PassCount=5\r
-# Total allocation per pass, Megabytes\r
-AllocPerPass=256\r
-\r
-[Linux_Scale]\r
-# Allocation count per test\r
-PassCount=100000\r
-# Max allocated block size in bytes\r
-MaxBlockSize=10000\r
-# Max thread count. 0 is processor_count * 2\r
-MaxThreadCount=4\r
-\r
-[Hoard_ThreadTest]\r
-MinBlockSize=16\r
-MaxBlockSize=64\r
-BlockCount=10000\r
-PassCount=10\r
-# Max thread count. 0 is processor_count * 2\r
-MaxThreadCount=4\r
-\r
-[Larson]\r
-MinBlockSize=8\r
-MaxBlockSize=1024\r
-BlocksPerThread=1000\r
-PassCount=1000000\r
-# Max thread count. 0 is processor_count * 2\r
-MaxThreadCount=4\r
-\r
-[Random_Alloc]\r
-DataSize=1000\r
-MinBlockSize=8\r
-MaxBlockSize=65000\r
-PassCount=100000\r
-# Max thread count. 0 is processor_count * 2\r
-MaxThreadCount=4\r
-\r
-[Spinlock_MT]\r
-ThreadCount=8\r
-LoopCount=1000000\r
-\r
-[Stack_Push]\r
-ThreadCount=8\r
-StackSize=500000\r
-EliminationSize=4\r
-\r
-[Stack_PushPop]\r
-PushThreadCount=4\r
-PopThreadCount=4\r
-StackSize=4000000\r
-EliminationSize=4\r
-\r
-[IntrusiveStack_PushPop]\r
-PushThreadCount=4\r
-PopThreadCount=4\r
-StackSize=4000000\r
-EliminationSize=4\r
-# Flat combining stack parameters\r
-# FCIterate=1 - the test will be run iteratively\r
-#   for combine pass count from 1 to FCCombinePassCount\r
-#   and compact factor from 1 to FCCompactFactor\r
-# FCIterate=0 - the test runs only once for giving\r
-#   FCCombinePassCount and FCCompactFactor\r
-FCIterate=0\r
-FCCombinePassCount=4\r
-FCCompactFactor=64\r
-\r
-[Queue_Push]\r
-ThreadCount=8\r
-QueueSize=500000\r
-\r
-[Queue_Pop]\r
-ThreadCount=8\r
-QueueSize=500000\r
-\r
-[Queue_ReaderWriter]\r
-ReaderCount=4\r
-WriterCount=4\r
-QueueSize=500000\r
-\r
-[IntrusiveQueue_ReaderWriter]\r
-ReaderCount=4\r
-WriterCount=4\r
-QueueSize=500000\r
-\r
-[Queue_Random]\r
-ThreadCount=8\r
-QueueSize=500000\r
-\r
-[BoundedQueue_Fullness]\r
-ThreadCount=4\r
-QueueSize=1024\r
-PassCount=100000\r
-\r
-[PQueue_Push]\r
-ThreadCount=8\r
-QueueSize=1000000\r
-\r
-[PQueue_PushPop]\r
-PushThreadCount=4\r
-PopThreadCount=4\r
-QueueSize=500000\r
-\r
-[Map_find_int]\r
-ThreadCount=8\r
-MapSize=100000\r
-PercentExists=50\r
-PassCount=2\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=1024\r
-CuckooProbesetSize=16\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=8\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_find_string]\r
-ThreadCount=8\r
-MapSize=100000\r
-PercentExists=50\r
-PassCount=2\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=1024\r
-CuckooProbesetSize=16\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=8\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_InsDel_int]\r
-InsertThreadCount=4\r
-DeleteThreadCount=4\r
-ThreadPassCount=2\r
-MapSize=100000\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=1024\r
-CuckooProbesetSize=16\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=8\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_InsDel_func]\r
-InsertThreadCount=4\r
-DeleteThreadCount=4\r
-UpdateThreadCount=4\r
-ThreadPassCount=4\r
-MapSize=100000\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=1024\r
-CuckooProbesetSize=16\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=8\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_InsDel_Item_int]\r
-ThreadCount=8\r
-MapSize=100000\r
-GoalItem=50000\r
-AttemptCount=100\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=1024\r
-CuckooProbesetSize=16\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=8\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_InsDel_string]\r
-InsertThreadCount=4\r
-DeleteThreadCount=4\r
-ThreadPassCount=2\r
-MapSize=100000\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=1024\r
-CuckooProbesetSize=16\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=8\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_InsDel_Item_string]\r
-ThreadCount=8\r
-MapSize=100000\r
-GoalItemIndex=50000\r
-AttemptCount=100\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=1024\r
-CuckooProbesetSize=16\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=8\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_InsFind_int]\r
-ThreadCount=0\r
-MapSize=1000\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=1024\r
-CuckooProbesetSize=16\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=8\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_InsDelFind]\r
-InitialMapSize=500000\r
-ThreadCount=8\r
-MaxLoadFactor=4\r
-InsertPercentage=5\r
-DeletePercentage=5\r
-Duration=15\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=1024\r
-CuckooProbesetSize=16\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=8\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_DelOdd]\r
-MapSize=500000\r
-InsThreadCount=4\r
-DelThreadCount=3\r
-ExtractThreadCount=3\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-#Cuckoo map properties\r
-CuckooInitialSize=1024\r
-CuckooProbesetSize=16\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=8\r
-FeldmanMapArrayBits=4\r
diff --git a/tests/data/test.conf b/tests/data/test.conf
deleted file mode 100644 (file)
index a74aaa1..0000000
+++ /dev/null
@@ -1,288 +0,0 @@
-[General]\r
-# HZP scan strategy, possible values are "classic", "inplace". Default is "classic"\r
-HZP_scan_strategy=inplace\r
-hazard_pointer_count=72\r
-\r
-# cds::gc::DHP initialization parameters\r
-dhp_liberate_threshold=1024\r
-dhp_init_guard_count=16\r
-dhp_epoch_count=16\r
-\r
-[Atomic_ST]\r
-iterCount=1000000\r
-\r
-[thread_init_fini]\r
-ThreadCount=8\r
-PassCount=100000\r
-\r
-[Allocator_ST]\r
-PassCount=10\r
-# Total allocation per pass, Megabytes\r
-AllocPerPass=1024\r
-\r
-[Linux_Scale]\r
-# Allocation count per test\r
-PassCount=10000000\r
-# Max allocated block size in bytes\r
-MaxBlockSize=66000\r
-# Max thread count. 0 is processor_count * 2\r
-MaxThreadCount=0\r
-\r
-[Hoard_ThreadTest]\r
-MinBlockSize=16\r
-MaxBlockSize=1024\r
-BlockCount=10000\r
-PassCount=500\r
-# Max thread count. 0 is processor_count * 2\r
-MaxThreadCount=0\r
-\r
-[Larson]\r
-MinBlockSize=8\r
-MaxBlockSize=1024\r
-BlocksPerThread=1000\r
-PassCount=5000000\r
-# Max thread count. 0 is processor_count * 2\r
-MaxThreadCount=0\r
-\r
-[Random_Alloc]\r
-DataSize=1000\r
-MinBlockSize=8\r
-MaxBlockSize=100000\r
-PassCount=500000\r
-# Max thread count. 0 is processor_count * 2\r
-MaxThreadCount=0\r
-\r
-[Spinlock_MT]\r
-ThreadCount=8\r
-LoopCount=1000000\r
-\r
-[Stack_Push]\r
-ThreadCount=8\r
-StackSize=2000000\r
-EliminationSize=4\r
-\r
-[Stack_PushPop]\r
-PushThreadCount=16\r
-PopThreadCount=16\r
-StackSize=16000000\r
-EliminationSize=4\r
-\r
-[IntrusiveStack_PushPop]\r
-PushThreadCount=16\r
-PopThreadCount=16\r
-StackSize=32000000\r
-EliminationSize=4\r
-# Flat combining stack parameters\r
-# FCIterate=1 - the test will be run iteratively\r
-#   for combine pass count from 1 to FCCombinePassCount\r
-#   and compact factor from 1 to FCCompactFactor\r
-# FCIterate=0 - the test runs only once for giving\r
-#   FCCombinePassCount and FCCompactFactor\r
-FCIterate=0\r
-FCCombinePassCount=8\r
-FCCompactFactor=64\r
-\r
-[Queue_Push]\r
-ThreadCount=8\r
-QueueSize=5000000\r
-\r
-[Queue_Pop]\r
-ThreadCount=8\r
-QueueSize=5000000\r
-\r
-[Queue_ReaderWriter]\r
-ReaderCount=4\r
-WriterCount=4\r
-QueueSize=5000000\r
-\r
-[IntrusiveQueue_ReaderWriter]\r
-ReaderCount=4\r
-WriterCount=4\r
-QueueSize=5000000\r
-\r
-[Queue_Random]\r
-ThreadCount=8\r
-QueueSize=5000000\r
-\r
-[BoundedQueue_Fullness]\r
-ThreadCount=8\r
-QueueSize=1024\r
-PassCount=1000000\r
-\r
-[PQueue_Push]\r
-ThreadCount=8\r
-QueueSize=10000000\r
-\r
-[PQueue_PushPop]\r
-PushThreadCount=4\r
-PopThreadCount=4\r
-QueueSize=10000000\r
-\r
-[Map_find_int]\r
-ThreadCount=8\r
-MapSize=2000000\r
-PercentExists=50\r
-PassCount=1\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=1024\r
-CuckooProbesetSize=16\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=10\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_find_string]\r
-ThreadCount=8\r
-MapSize=2000000\r
-PercentExists=50\r
-PassCount=1\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=1024\r
-CuckooProbesetSize=16\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=10\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_InsDel_int]\r
-InsertThreadCount=4\r
-DeleteThreadCount=4\r
-ThreadPassCount=2\r
-MapSize=1000000\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=1024\r
-CuckooProbesetSize=16\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=10\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_InsDel_func]\r
-InsertThreadCount=4\r
-DeleteThreadCount=4\r
-UpdateThreadCount=4\r
-ThreadPassCount=2\r
-MapSize=1000000\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=1024\r
-CuckooProbesetSize=16\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=10\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_InsDel_Item_int]\r
-ThreadCount=8\r
-MapSize=10000\r
-GoalItem=5000\r
-AttemptCount=10000\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=1024\r
-CuckooProbesetSize=16\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=10\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_InsDel_string]\r
-InsertThreadCount=4\r
-DeleteThreadCount=4\r
-ThreadPassCount=2\r
-MapSize=500000\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=1024\r
-CuckooProbesetSize=16\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=10\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_InsDel_Item_string]\r
-ThreadCount=8\r
-MapSize=10000\r
-GoalItemIndex=5000\r
-AttemptCount=10000\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=1024\r
-CuckooProbesetSize=16\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=10\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_InsFind_int]\r
-ThreadCount=0\r
-MapSize=5000\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=1024\r
-CuckooProbesetSize=16\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=10\r
-FeldmanMapArrayBits=4\r
-\r
-[Map_InsDelFind]\r
-InitialMapSize=500000\r
-ThreadCount=8\r
-MaxLoadFactor=4\r
-InsertPercentage=20\r
-DeletePercentage=20\r
-Duration=15\r
-PrintGCStateFlag=1\r
-# *** Cuckoo map properties\r
-CuckooInitialSize=1024\r
-CuckooProbesetSize=16\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=10\r
-FeldmanMapArrayBits=4\r
-\r
-\r
-[Map_DelOdd]\r
-MapSize=1000000\r
-InsThreadCount=4\r
-DelThreadCount=3\r
-ExtractThreadCount=3\r
-MaxLoadFactor=4\r
-PrintGCStateFlag=1\r
-#Cuckoo map properties\r
-CuckooInitialSize=1024\r
-CuckooProbesetSize=16\r
-# 0 - use default\r
-CuckooProbesetThreshold=0\r
-\r
-# *** FeldmanHashMap properties\r
-FeldmanMapHeadBits=10\r
-FeldmanMapArrayBits=4\r
diff --git a/tests/data/text.txt b/tests/data/text.txt
deleted file mode 100644 (file)
index 8b800cf..0000000
+++ /dev/null
@@ -1,6611 +0,0 @@
-
-                    <i>There  is  but one problem --
-                    the only one in the world --
-                    to restore to men a spiritual
-                    content, spiritual concerns....</i>
-                              <b>-- A de St. Exupery</b>
-
-
-     The customs  inspector  had  a  round  smooth  face  which
-registered   the   most   benevolent   of   attitudes.  He  was
-respectfully cordial and solicitous.
-     "Welcome," he murmured. "How do you like our sunshine?" He
-glanced at the passport in my hand. "Beautiful  morning,  isn't
-it?"
-     I  proffered him my passport and stood the suitcase on the
-white counter. The inspector rapidly leafed through it with his
-long careful fingers. He was dressed in a  white  uniform  with
-silver  buttons  and silver braid on the shoulders. He laid the
-passport aside and touched the suitcase with the  tips  of  his
-fingers.
-     "Curious,"  he  said.  "The  case has not yet dried. It is
-difficult to imagine that somewhere the weather can be bad."
-     "Yes," I said with a sigh, "we are already well  into  the
-autumn," and opened the suitcase.
-     The  inspector  smiled  sympathetically  and glanced at it
-absent-mindedly.  "It's  impossible  amid   our   sunshine   to
-visualize  an  autumn.  Thank  you,  that  will  be  quite  all
-right.... Rain, wet roofs, wind...
-     "And what if I have something hidden under the  linen?"  I
-asked -- I don't appreciate conversations about the weather. He
-laughed heartily.
-     "Just   an   empty  formality,"  he  said.  "Tradition.  A
-conditioned reflex of all customs inspectors, if you will."  He
-handed  me  a  sheet  of  heavy  paper.  "And  here  is another
-conditioned reflex. Please read it -- it's rather unusual.  And
-sign it if you don't mind."
-     I  read.  It  was a law concerning immigration, printed in
-elegant type on heavy paper and in four languages.  Immigration
-was absolutely forbidden. The customs man regarded me steadily.
-     "Curious, isn't it?" he asked.
-     "In  any  case  it's  intriguing,"  I  replied, drawing my
-fountain pen. "Where do I sign?"
-     "Where and how you please," said the  customs  man.  "Just
-across will do."
-     I signed under the Russian text over the line "I have been
-informed on the immigration laws."
-     'Thank  you,"  said the customs man, filing the paper away
-in his desk, 'Now you know practically all our laws. And during
-your entire stay -- How long will you be staying with us?"
-     I shrugged my shoulders.
-     "It's difficult to say in advance. Depends on how the work
-will go."
-     "Shall we say a month?"
-     'That would be about it. Let's say a month."
-     "And during this whole month," he bent over  the  passport
-making  some notation, "during this entire month you won't need
-any other laws." He handed me my passport.  "I  shouldn't  even
-have  to  mention that you can prolong your stay with us to any
-reasonable extent. But in the meantime, let it be thirty  days.
-If  you  find  it  desirable  to  stay longer, visit the police
-station on the 16th of May  and  pay  one  dollar...  You  have
-dollars?"
-     "Yes."
-     "That's  fine.  By  the way, it is not at all necessary to
-have exclusively a dollar.  We  accept  any  currency.  Rubles,
-pounds, cruzeiros."
-     "I  don't  have  cruzeiros," I said. 'I have only dollars,
-rubles, and some English pounds. Will that suit you?"
-     "Undoubtedly. By the way, so as not to forget,  would  you
-please deposit ninety dollars and seventy-two cents."
-     "With pleasure," I said, "but why?"
-     "It's  customary.  To guarantee the minimum needs. We have
-never had anyone with us who did not have some needs."
-     I counted out  ninety-one  dollars,  and  without  sitting
-down,  he  proceeded  to write out a receipt. His neck grew red
-from the awkward position. I looked around. The  white  counter
-stretched  along  the entire pavilion. On the other side of the
-barrier, customs inspectors in white smiled cordially, laughed,
-explained things  in  a  confidential  manner.  On  this  side,
-brightly  clad  tourists shuffled impatiently, snapped suitcase
-locks, and gaped excitedly. While they waited  they  feverishly
-thumbed through advertising brochures, loudly devised all kinds
-of plans, secretly and openly anticipated happy days ahead, and
-now  thirsted  to  surmount  the  white  counter  as quickly as
-possible.  Sedate  London  clerks  and  their  athletic-looking
-brides, pushy Oklahoma farmers in bright shirts hanging outside
-Bermuda  shorts  and sandals over bare feet, Turin workers with
-their  well-rouged  wives  and  numerous  children,  small-time
-Catholic  bosses from Spain, Finnish lumbermen with their pipes
-considerately banked,  Hungarian  basketball  players,  Iranian
-students, union organizers from Zambia...
-     The  customs  man  gave  me  my  receipt  and  counted out
-twenty-eight cents change.
-     "Well -- there is all the  formality.  I  hope  I  haven't
-detained you too long. May I wish you a pleasant stay!"
-     "Thank you," I said and took my suitcase.
-     He  regarded  me  with  his  head  slightly bent sideways,
-smiling out of his bland, smooth face.
-     "Through this turnstile, please. <i>Au revoir.</i>  May  I
-once more wish you the best."
-     I  went  out  on  the plaza following an Italian pair with
-four kids and two robot redcaps.
-     The sun stood high over mauve mountains. Everything in the
-plaza was bright and shiny and colorful. A bit too  bright  and
-colorful,   as   it   usually  is  in  resort  towns.  Gleaming
-orange-and-red buses surrounded by tourist  crowds,  shiny  and
-polished  green  of  the  vegetation in the squares with white,
-blue, yellow, and gold pavilions, kiosks, and tents. Mirrorlike
-surfaces, vertical, horizontal, and inclined, which flared with
-sunbursts. Smooth matte hexagons underfoot and under the wheels
--- red, black, and gray, just slightly springy  and  smothering
-the  sound  of  footsteps.  I  put down the suitcase and donned
-sunglasses.
-     Out of all the sunny towns it has been my luck  to  visit,
-this  was without a doubt the sunniest. And that was all wrong.
-It would have been much easier if the day  had  been  gray,  if
-there had been dirt and mud, if the pavilion had also been gray
-with  concrete walls, and if on that wet concrete was scratched
-something obscene, tired, and pointless, born of boredom.  Then
-I  would  probably  feel like working at once. I am positive of
-this because such things are irritating and demand action. It's
-still hard to get used to the idea that poverty can be wealthy.
-And so the urge is lacking and there  is  no  desire  to  begin
-immediately,  but  rather  to take one of these buses, like the
-red-and-blue one, and take off to the beach, do a little  scuba
-diving, get a tan, play some ball, or find Peck, stretch out on
-the floor in some cool room and reminisce on all the good stuff
-so  that  he  could  ask  about  Bykov,  about  the Trans-Pluto
-expedition, about the new ships on which I too  am  behind  the
-times,  but  still  know  better  than he, and so that he could
-recollect the uprising and boast of  his  scars  and  his  high
-social  position....  It  would  be most convenient if Peck did
-have a high social position. It would be well if he  were,  for
-example, a mayor....
-     A  small  darkish  rotund individual in a white suit and a
-round white hat set at a rakish angle approached  deliberately,
-wiping  his  lips  with  a  dainty  handkerchief.  The  hat was
-equipped with a transparent green shade and a green  ribbon  on
-which  was  stamped "Welcome." On his right earlobe glistened a
-pendant radio.
-     "Welcome aboard," said the man.
-     "Hello," said I.
-     "A pleasure to have you with us. My name is Ahmad."
-     "And my name is Ivan,"  said  I.  "Pleased  to  make  your
-acquaintance."
-     We nodded to each other and regarded the tourists entering
-the buses.  They  were  happily  noisy and the warm wind rolled
-their discarded butts and crumpled  candy  wrappers  along  the
-square. Ahmad's face bore a green tint from the light filtering
-through his cap visor.
-     "Vacationers,"  he said. "Carefree and loud. Now they will
-be taken to their hotels and will immediately rush off  to  the
-beaches."
-     "I wouldn't mind a run on water skis," I observed.
-     "Really?  I  never would have guessed. There's nothing you
-look less like than a vacationer."
-     "So be it," I said. "In fact I did come to work"
-     "To work? Well, that happens too, some  do  come  to  work
-here.  Two  years  back  Jonathan  Kreis  came  here to paint a
-picture." He laughed. "Later there was  an  assault-and-battery
-case  in  Rome,  some papal nuncio was involved, can't remember
-his name."
-     "Because of the picture?"
-     "No, hardly. He didn't paint a thing here. The casino  was
-where  you  could  find  him  day  or night. Shall we go have a
-drink?"
-     "Let's. You can give me a few pointers."
-     "It's my pleasurable duty -- to give advice," said Ahmad.
-     We bent down simultaneously and both of us  took  hold  of
-the suitcase handle.
-     "It's okay -- I'll manage."
-     "No,"  countered Ahmad, "you are the guest and I the host.
-Let's go to yonder bar. It's quiet there at this time."
-     We went in under a blue  awning.  Ahmad  seated  me  at  a
-table,  put  my  suitcase  on  a  vacant chair, and went to the
-counter. It was cool and  an  air  conditioner  sighed  in  the
-background. Ahmad returned with a tray. There were tall glasses
-and flat plates with butter-gold tidbits.
-     "Not very strong," said Ahmad, "but really cold to make up
-for that."
-     "I don't like it strong in the morning either," I said.
-     I quaffed the glass. The stuff was good.
-     "A  swallow  --  a  bite,"  counseled Ahmad, "Like this: a
-swallow, a bite."
-     The tidbits crunched and melted in the mouth. In my  view,
-they  were  unnecessary. We were silent for some time, watching
-the square from under the marquee. gently  purring,  the  buses
-pulled  out  one after another into their respective tree-lined
-avenues. They looked ponderous yet strangely elegant  in  their
-clumsiness.
-     "It would be too noisy there," said Ahmad. "Fine cottages,
-lots of  women  -- to suit any taste -- and right on the water,
-but no privacy. I don't think it's for you."
-     "Yes," I agreed. "The noise would  bother  me.  Anyway,  I
-don't  like vacationers, Ahmad. Can't stand it when people work
-at having fun."
-     Ahmad nodded and carefully placed the next tidbit  in  his
-mouth. I watched him chew. There was something professional and
-concentrated   in   the  movement  of  his  lower  jaw.  Having
-swallowed, he said, "No, the synthetic will never compare  with
-the natural product. Not the same bouquet." He flexed his lips,
-smacked  them  gently,  and continued, "There are two excellent
-hotels in the center of town, but, in my view..."
-     "Yes, that won't do  either,"  I  said.  "A  hotel  places
-certain  obligations  on  you.  I  never  heard  that  anything
-worthwhile has ever been written in a hotel."
-     "Well, that's not quite true," retorted Ahmad,  critically
-studying  the last tidbit. "I read one book and in it they said
-that it was in fact written in a hotel -- the Hotel Florida."
-     "Aah," I said, "you are correct. But then your city is not
-being shelled by cannons."
-     "Cannons? Of course not. Not as a rule, anyway."
-     "Just as I thought. But, as a matter of fact, it has  been
-noted  that something worthwhile can be written only in a hotel
-which is under bombardment."
-     Ahmad took the last tidbit after all.
-     'That would be difficult to arrange,"  he  said.  "In  our
-times  it's  hard  to  obtain  a  cannon.  Besides,  it's  very
-expensive; the hotel could lose its clientele."
-     "Hotel  Florida  also  lost  its  clients  in  its   time.
-Hemingway lived in it alone."
-     "Who?"
-     "Hemingway."
-     "Ah... but that was so long ago, in the fascist times. But
-times have changed, Ivan."
-     "Yes,"  said  I,  "and  therefore in our times there is no
-point in writing in hotels."
-     "To blazes with hotels then," said Ahmad. "I know what you
-need. You need a boarding  house."  He  took  out  a  notebook.
-"State your requirements and we'll try to match them up."
-     "Boarding house," I said. "I don't know. I don't think so,
-Ahmad.  Do  understand  that I don't want to meet people whom I
-don't want to know. That's to begin with.  And  in  the  second
-place,  who  lives  in  private  boarding  houses?  These  same
-vacationers who don't have enough money for a cottage. They too
-work hard at having fun. They concoct picnics, meets, and  song
-fests.  At night they play the banjo. On top of which they grab
-anyone they can get  hold  of  and  make  them  participate  in
-contests  for the longest uninterrupted kiss. Most important of
-all, they are all transients.  But  I  am  interested  in  your
-country, Ahmad. In your townspeople. I'll tell you what I need:
-I  need a quiet house with a garden. Not too far from downtown.
-A relaxed family, with a respectable housewife.  An  attractive
-young daughter. You get the picture, Ahmad?"
-     Ahmad  took  the  empty glasses, went over to the counter,
-and returned with full ones. Now  they  contained  a  colorless
-transparent  liquid and the small plates were stacked with tiny
-multistoried sandwiches.
-     "I know of such a cozy house," declared Ahmad. "The  widow
-is forty-five and the daughter twenty. The son is eleven. Let's
-finish  the drinks and we'll be on our way. I think you'll like
-it. The rent is standard, but of course it's  more  than  in  a
-hoarding house. You have come to stay for a long time?"
-     "For a month."
-     "Good Lord! Just a month?"
-     "I  don't know how my affairs will go. Perhaps I may tarry
-awhile."
-     "By all means, you will," said Ahmad. "I can see that  you
-have  totally  failed to grasp just where you have arrived. You
-simply don't understand what a good time you can have here  and
-how you don't have to think about a thing."
-     We finished our drinks, got up, and went across the square
-under  the  hot  sun  to  the parking area. Ahmad walked with a
-rapid, slightly rolling gait, with the green visor of  his  cap
-set  low  over  his  eyes,  swinging the suitcase in a debonair
-manner.  The  next  batch  of  tourists  was  being  discharged
-broadcast from the customs house.
-     "Would you like me to... Frankly?" said Ahmad suddenly.
-     "Yes, I would like you to," said I. What else could I say?
-Forty years I have lived in this world and have yet to learn to
-deflect this unpleasant question.
-     "You  won't  write a thing here," said Ahmad. "It's mighty
-hard to write in our town."
-     "It's always hard to write anything. However,  fortunately
-I am not a writer."
-     "I  accept  this  gladly. But in that case, it is slightly
-impossible here. At least for a transient."
-     "You frighten me."
-     "It's not a case of being  frightened.  You  simply  won't
-want  to  work.  You  won't  be able to stay at the typewriter.
-You'll feel annoyed by the typewriter. Do you know what the joy
-of living is?"
-     "How shall I say?"
-     "You don't know anything, Ivan. So  far  you  still  don't
-know  anything  about  it. You are bound to traverse the twelve
-circles of paradise. It's funny, of course, but I envy you."
-     We stopped by a long open car. Ahmad  threw  the  suitcase
-into the back seat and flung the door open for me.
-     "Please," he said.
-     "Presumably  you  have  already  passed  through  them?" I
-asked, sliding into the seat.
-     He got in behind the wheel and started the engine.
-     "What exactly do you mean?"
-     "The twelve circles of paradise."
-     "As for me, Ivan, a long time ago I selected  my  favorite
-circle,"  said Ahmad. The car began to roll noiselessly through
-the square. "The others haven't existed  for  me  for  quite  a
-while.   Unfortunately.   It's  like  old  age,  with  all  its
-privileges and deficiencies."
-     The car rushed through a park and  sped  along  a  shaded,
-straight   thoroughfare.  I  kept  looking  around  with  great
-interest but couldn't recognize  a  thing.  It  was  stupid  to
-expect  to.  We had been landed at night, in a torrential rain;
-seven thousand exhausted tourists stood on the pier looking  at
-the  burning liner. We hadn't seen the city -- in its place was
-a black, wet emptiness dotted with red flashes. It had rattled,
-boomed, and screeched as though being rent asunder.  "We'll  be
-slaughtered  in the dark, like rabbits," Robert had said, and I
-immediately had sent him  back  to  the  barge  to  unload  the
-armored  car.  The gangway had collapsed and the car had fallen
-into the water, and when Peck had pulled Robert out,  all  blue
-from  the  cold,  he  had  come  over  to  me  and said through
-chattering teeth, "Didn't I tell you it was dark?"
-     Ahmad said suddenly, "When I was a boy, we lived near  the
-port  and we used to come out here to beat up the factory kids.
-Many of them had brass knuckles, and that got me a broken nose.
-Half of my life I put up with a crooked nose  until  I  had  it
-fixed last year. I sure loved to scrap when I was young. I used
-to  have a hunk of lead pipe, and once I had to sit in jail for
-six months, but that didn't help."
-     He stopped, grinning. I waited  awhile,  then  said,  "You
-can't  find  a good lead pipe these days. Now rubber truncheons
-are in fashion: you buy them used from the police."
-     "Exactly," said Ahmad. "Or else you buy  a  dumbbell,  cut
-off  one  ball and there you are, ready to go. But the guys are
-not what they used to be. Now you get deported for such stuff."
-     "Yes. And what else did you occupy yourself with  in  your
-youth?"
-     "And you?"
-     "I planned on joining the interplanetary force and trained
-to withstand  overstress.  We also played at who could dive the
-deepest."
-     "We too,"  said  Ahmad.  "We  went  down  ten  meters  for
-automatics  and  whiskey.  Over  by  the  piers they lay on the
-seabed by the case. I used to get nosebleeds. But when the fire
-fights started, we began to find corpses  with  weights  around
-their necks, so we quit that game."
-     "It's  a  very  unpleasant  sight, a corpse under water --
-especially if there is a current," said I.
-     Ahmad chuckled "I've seen worse. I had  occasion  to  work
-with the police."
-     "This was after the fracas?"
-     "Much later. When the anti-gangster laws were passed."
-     'They were called gangsters here too?"
-     "What  else  would you call them? Not brigands, certainly.
-'A group of brigands, armed with flame throwers and gas  bombs,
-have  laid  siege  to the municipal buildings,' " he pronounced
-expressively. "It doesn't sound right, you  can  feel  that.  A
-brigand  is  an  ax,  a  bludgeon, a mustache up to the ears, a
-cleaver --"
-     "A lead pipe," I offered.
-     Ahmad gurgled.
-     "What are you doing tonight?" he asked.
-     "Going for a walk."
-     "You have friends here?"
-     "Yes. Why?"
-     "Well... then it's different."
-     "How come?"
-     "Well, I was going to suggest something to you, but  since
-you have friends..."
-     "By the way, " I said, "who is your mayor?"
-     "Mayor?  The  devil  knows, I don't remember. Somebody was
-elected."
-     "Not Peck Xenai, by any chance?"
-     "I don't know." He sounded regretful. "I wouldn't want  to
-mislead you."
-     "Would you know the man anyway?"
-     "Xenai...  Peck  Xenai...  No,  I  don't knew him; haven't
-heard of him. What is he to you -- a friend?"
-     "Yes, an old friend. I have some others here, but they are
-all visitors."
-     "Well," said Ahmad, "if you should get bored and all kinds
-of thoughts begin to enter your head, come on over for a visit.
-Every single day from  seven  o'clock  on  I  am  at  the  Chez
-Gourmet. Do you like good eating?"
-     "Quite," said I.
-     "Stomach in good shape?"
-     "Like an ostrich's."
-     "Well,  then,  why  don't  you  come by? We'll have a fine
-time, and it won't be necessary to think about a thing."
-     Ahmad braked and turned cautiously into a driveway with an
-iron gate, which silently swung open before us. The car  rolled
-into the yard.
-     "We have arrived," announced Ahmad. "Here is your home."
-     The  house  was  two-storied,  white  with  blue trim. The
-windows were draped on the inside. A clean, deserted patio with
-multi-colored flagstones was surrounded by a fruit-tree garden,
-with apple branches touching the walls.
-     "And where is the widow?" I said.
-     "Let's go inside," said Ahmad.
-     He went up the steps, leafing through his notebook  I  was
-following  him  while looking around. I liked the mini-orchard.
-Ahmad found the right page and set up the  combination  on  the
-small  disc  by  the doorbell. The door opened. Cool, fresh air
-flowed out of the house. It was dark inside, but as soon as  we
-stepped  into  the hall, it lit up with concealed illumination.
-Putting away his notebook, Ahmad said, "To  the  right  is  the
-landlord's  half, to the left is yours. Please come in. Here is
-the living room, and there is the bar. In a minute we'll have a
-drink. And now here is your study. Do you have a phonor?"
-     "No."
-     "It's just as well. You have  everything  you  need  right
-here.  Come  on  over  here.  This is the bedroom. There is the
-control board for acoustic defense. You know how to use it?"
-     "I'll figure it out."
-     "Good. The defense is triple, you can have it quiet  as  a
-tomb  or  turn  the place into a bordello, whatever you like...
-Here's the air-conditioning control,  which,  incidentally,  is
-not  too  convenient,  as  you  can  only  operate  it from the
-bedroom."
-     "I'll manage," I said.
-     "What? Well, okay. Here is the bathroom and powder room."
-     "I  am  interested  in  the  widow,"  I  said,  "and   the
-daughter."
-     "All in good time. Shall I open the drapes?"
-     "What for?"
-     "Right you are, for no reason. Let's go have a drink."
-     We returned to the living room and Ahmad disappeared up to
-his waist in the bar.
-     "You want it on the strong side?" he asked.
-     "You have it backwards."
-     "Would you like an omelette? Sandwiches?"
-     "How about nothing?"
-     "No,"  said  Ahmad,  "an  omelette  it  shall  be  -- with
-tomatoes." He rummaged in the bar. "I don't know what does  it,
-but  this  autocooker  makes  an  altogether astonishingly good
-omelette with tomatoes. While we are at it, I will also have  a
-bite."
-     He  extracted  a  tray from the bar and placed it on a low
-table by a semicircular couch. We sat down.
-     "Now about the widow," I reminded him. "I would like to  .
-present myself."
-     "You like the rooms?"
-     "They'll do."
-     "Well, the widow is quite all right, too. And the daughter
-is not bad either."
-     He  extracted  a  flat  case from an inside pocket. Like a
-cartridge clip it was stacked with a  row  of  ampoules  filled
-with  colored  liquids.  Ahmad  ran his index finger over them,
-smelled the omelette, hesitated, and finally selected one  with
-a  green  fluid, broke it carefully, and dripped a few drops on
-the tomatoes. An aroma pervaded the room.  The  smell  was  not
-unpleasant,  but,  to  my taste, bore no particular relation to
-the food.
-     "Right now," continued Ahmad, "they are still asleep." His
-gaze turned abstracted. "They sleep and see dreams."
-     I looked at my watch.
-     "Well, well!"
-     Ahmad was enjoying his food.
-     "Ten-thirty!" I said.
-     Ahmad was enjoying his food. His cap was  pushed  back  on
-his  head,  and  the  green  visor stuck up vertically like the
-crest of an aroused mimicrodon. His eyes  were  half-closed.  I
-regarded him with interest.
-     Having  swallowed  the  last bit of tomato, he broke off a
-piece of the crust of white bread and carefully wiped  the  pan
-with it. His gaze cleared.
-     "What  were  you  saying?" he asked. "Ten-thirty? Tomorrow
-you too will get up at ten-thirty or maybe even at  twelve.  I,
-for one, will get up at twelve."
-     He got up and stretched luxuriously, cracking his joints.
-     "Well," he said, "it's time to go home, finally. Here's my
-card,  Ivan.  Put it in your desk, and don't throw it out until
-your very last day here." He went over  to  the  flat  box  and
-inserted another card into its slot. There was a loud click.
-     "Now  this  one,"  he said, examining the card against the
-light.  "Please  pass  on  to  the  widow  with  my  very  best
-compliments."
-     "And then what will happen?" said I.
-     "Money  will  happen.  I  trust  you  are not a devotee of
-haggling, Ivan? The widow will name a  figure,  Ivan,  and  you
-shouldn't haggle over it. It's not done."
-     "I  will try not to haggle," I said, "although it would be
-amusing to try it."
-     Ahmad raised his eyebrows.
-     "Well, if you really want to so much, then why not try it?
-Always do what you want to do. Then  you  will  have  excellent
-digestion. I will get your suitcase now."
-     "I  need  prospects,"  I  said. "I need guidebooks. I am a
-writer,  Ahmad.  I  will  require  brochures  on  the  economic
-situation  of  the  masses, statistical references. Where can I
-get all that? And when?"
-     "I will  give  you  a  guidebook,"  said  Ahmad.  "It  has
-statistics,  addresses, telephone numbers, and so on. As far as
-the masses are concerned, I don't think  we  publish  any  such
-nonsense.  Of  course,  you  can send an inquiry to UNESCO, but
-what  would  you  want  with  it?  You'll  see  everything  for
-yourself.  Just hold on a minute. I'll get the suitcase and the
-guidebook."
-     He went out and quickly returned with my suitcase  in  one
-hand and a fat bluish-looking little tome in the other.
-     I stood up.
-     "Judging by the look on your face," he announced, smiling,
-"you are debating whether it's proper to tip me or not."
-     "I confess," I said.
-     "Well then, would you like to do it or not?"
-     "No, I must admit."
-     "You  have  a  healthy, strong character," Ahmad approved.
-"Don't do it. Don't tip anybody. You could collect one  in  the
-face,  especially from the girls. But, on the other hand, don't
-haggle either. You could walk into one that  way  too.  Anyway,
-that's  all  a  lot of rot. For all I know you may like to have
-your face slapped, like that Jonathan  Kreis.  Farewell,  Ivan,
-have  fun,  and come to Chez Gourmet. Any evening at seven. But
-most important of all, don't think about a thing."
-     He waved his hand and left. I picked up the mixture in the
-dewy glass and sat down with the guidebook.
-
-
-<ul><a name=2></a><h2>Chapter TWO</h2></ul>
-
-     The guidebook was printed on bond paper with a gilt  edge.
-Interspersed  with  gorgeous  photographs,  it  contained  some
-curious information. In the  city  there  were  fifty  thousand
-people,  fifteen hundred cats, twenty thousand pigeons, and two
-thousand dogs (including seven hundred winners of medals).  The
-city  had fifteen thousand passenger cars, five thousand helis,
-a thousand taxis (with and without  chauffeurs),  nine  hundred
-automatic  garbage  collectors,  four  hundred  permanent bars,
-cafes, and snack bars, eleven restaurants, and four first-class
-hotels, and was a tourist establishment which served  over  one
-hundred  thousand  visitors  every  year.  The  city  had sixty
-thousand TV sets, fifty movie theaters, eight amusement  parks,
-two Happy Mood salons, sixteen beauty parlors, forty libraries,
-and  one  hundred  and  eighty  automated  barber shops. Eighty
-percent of the population were engaged  in  services,  and  the
-rest worked in two syntho-bakeries and one government shipyard.
-There  were  six  schools  and  one university housed in an old
-castle once the home of crusader Ulrich da Casa.  In  the  city
-there were also eight active civilian societies, among them the
-Society  of  Diligent  Tasters, the Society of Connoisseurs and
-Appraisers, and the Society for the Good  Old  Country  Against
-Evil  Influences.  In  addition,  fifteen hundred citizens were
-members of seven  hundred  and  one  groups  where  they  sang,
-learned  to  act,  to arrange furniture, to breast-feed, and to
-medicate  cats.  As  to  per-capita  consumption  of  alcoholic
-beverages, natural meat, and liquid oxygen, the city was sixth,
-twelfth,  and  thirteenth  highest  in Europe respectively. The
-city had seven men's clubs and five women's clubs, as  well  as
-sport  clubs  named  the  Bulls  and  Rhinos.  By a majority of
-forty-six votes, someone by the  name  of  Flim  Gao  had  been
-elected mayor. Peck was not among the municipal officials.
-     I  put the guidebook aside, took off my jacket, and made a
-thorough examination of my domain. I  approved  of  the  living
-room.  It  was done in blue, and I like that color. The bar was
-full of bottled and refrigerated victuals so that I could at  a
-moment's notice entertain a dozen starving guests.
-     I went into the study. There was a large table in front of
-the window  and  a comfortable chair. The walls were lined with
-shelves tightly filled with collected works. The  clean  bright
-bindings  were  arranged with great skill so that they formed a
-colorful and appealing layout. The top shelf  was  occupied  by
-the  fifty-volume  encyclopedia  of  UNESCO. Lower shelves were
-kaleidoscopic with the shiny wrappers of detective novels.
-     As soon as I saw the telephone  on  the  table,  I  dialed
-Rimeyer's  number,  perching  on  the  chair  arm. The receiver
-sounded with prolonged honkings and I waited, twirling a  small
-dictaphone which someone had left on the table. Rimeyer did not
-answer.  I  hung  up and inspected the dictaphone. The tape was
-half-used-up, and  after  rewinding,  I  punched  the  playback
-button.
-     "Greetings  and  more greetings," said a merry male voice.
-"I clasp your hand heartily or kiss you on the cheek, depending
-on your sex and age. I have lived  here  two  months  and  bear
-witness  that  it  was most enjoyable. Allow me a few points of
-advice. The best institution in town is the Hoity Toity in  the
-Park  of  Dreams. The best girl in town is Basi in the House of
-Models. The best guy in town is me, but I have already left. On
-television just watch Program Nine; everything else  is  chaff.
-Don't  get  involved  with  Intels,  and give the Rhinos a wide
-berth. Don't buy anything on credit -- there'll be  no  end  to
-the  runaround. The widow is a good woman but loves to talk and
-in general... As for Vousi, I didn't get to meet  her,  as  she
-had  left  the  country to visit her grandmother. In my opinion
-she is sweet, and there was a photograph of her in the  widow's
-album,  but I took it. There's more: I expect to come back next
-March, so be a pal, if you decide to return, pick another time.
-Have a --"
-     Music followed abruptly. I listened awhile and turned  off
-the machine.
-     There  wasn't  a  single  tome  I  could  extract from the
-shelves, so well were they stuck in, or maybe  even  glued  on,
-and  as there was nothing else of interest in the study, I went
-into the bedroom.
-     Here it was especially cool and cozy. I have always wanted
-just such a bedroom, but somehow never  had  the  time  to  get
-around to setting one up. The bed was big and low. On the night
-table stood an elegant phonor and a tiny remote-control box for
-the  TV.  The screen stood at the foot of the bed, while at the
-head the widow had hung a very natural-looking picture of field
-flowers in  a  crystal  vase.  The  picture  was  painted  with
-luminous  paints  and  the  dewdrops  glistened in the darkened
-room.
-     I punched the TV control at random and  stretched  out  on
-the bed. It was soft yet somehow firm. The TV roared loudly. An
-inebriated-looking  man  launched  himself  out  of the screen,
-crashed through some sort of railing, and  fell  from  a  great
-height  into a colossal fuming vat. There was a loud splash and
-the phonor exuded a smell. The man disappeared in the  bubbling
-liquid  and  then  reappeared,  holding  in his teeth something
-reminiscent of a well-boiled boot. The  unseen  audience  broke
-out in a storm of horse laughs. Fade out... soft lyrical music.
-A white horse pulling a phaeton appeared out of green woods and
-advanced  toward me. A pretty girl in a bathing suit sat in the
-carriage. I turned off the TV, got up, and went to look at  the
-bathroom.
-     There was a piny smell and flickering of germicidal lamps.
-I undressed,  threw  the underwear into the hopper, and climbed
-into the shower. Taking my time, I  dressed  in  front  of  the
-mirror,  combed  my  hair,  and shaved. The shelves were loaded
-with rows of vials, hygienic devices,  antiseptics,  and  tubes
-with  pastes  and greases. At the edge of one shelf there was a
-pile of flat colorful boxes with the logo "Devon."  I  switched
-off  the  razor  and  took  one of the boxes. A germicidal lamp
-flickered in the mirror, just as it did  that  day  in  Vienna,
-when  I  stood  just like this studiously regarding just such a
-little box, because I did not want to go out  to  the  bedroom,
-where  Raffy  Reisman  loudly  argued  about something with the
-doctor; while the green oily liquid  still  oscillated  in  the
-bath,  over  which hung the steamy vapor and a screeching radio
-receiver, attached to a  porcelain  hook  for  towels,  howled,
-hooted,  and  snorted  until Raffy turned it off in irritation.
-That was in Vienna, and just as here, it was  very  strange  to
-see  in  a bathroom a box of Devon -- a popular repellent which
-did an excellent job of chasing  mosquitoes,  chiggers,  gnats,
-and  other  bloodsucking  insects  which were long forgotten in
-Vienna and here in a seaside resort town. Only in Vienna  there
-had been an overlay of fear.
-     The  box  which  I  held in my hand was almost empty, with
-only one tablet remaining. The rest of  the  boxes  were  still
-scaled.  I finished shaving and returned to the bedroom. I felt
-like calling Rimeyer again, but  abruptly  the  house  came  to
-life.  The  pleated  drapes  flew  open  with a soft whine, the
-windowpanes slid away in their  frames,  and  the  bedroom  was
-flooded  with warm air, laden with the scent of apples. Someone
-was talking somewhere, light footsteps sounded overhead, and  a
-severe-sounding  female voice said, "Vousi -- at least eat some
-cake, do you hear?"
-     Thereupon I imparted a  certain  air  of  disorder  to  my
-clothes  (in  accordance  with  the current style), smoothed my
-temples, and went into the hall, taking one  of  Ahmad's  cards
-from the living room.
-     The  widow  turned  out  to  be  a  youthful  plump woman,
-somewhat languid, with a pleasant fresh face.
-     "How nice!" she said, seeing  me.  "You  are  up  already?
-Hello, my name is Vaina Tuur, but you can call me Vaina."
-     "My pleasure," I said, shuddering fashionably. "My name is
-Ivan."
-     "How   nice,"   said   Aunt   Vaina.   "What  an  original
-soft-sounding name! Have you had breakfast, Ivan?"
-     "With your permission, I intended  to  have  breakfast  in
-town," I said, and proffered her the card.
-     "Ah,"  said  Aunt  Vaina,  looking through the card at the
-light.  "That  nice  Ahmad,  if  you  only  knew  what  a  nice
-responsible fellow he is. But I see you did not have breakfast.
-Lunch you can have in town, but now I will treat you to some of
-my croutons. The major general always said that nowhere else in
-the world could you have such wonderful croutons."
-     "With pleasure," said I, shuddering for the second time.
-     The  door  behind  Aunt  Vaina  was  flung open and a very
-pretty young girl in a short  blue  skirt  and  an  open  white
-blouse  flew  in on clicking high heels. In her hand she held a
-piece of cake, which she  munched  while  humming  a  currently
-popular  song.  Seeing me, she stopped, flung her pocketbook on
-its long strap over her shoulder with a show  of  abandon,  and
-swallowed, bending down her head.
-     "Vousi!"  said  Aunt  Vaina, compressing her lips. "Vousi,
-this is Ivan."
-     "Not bad!" said Vousi. "Greetings."
-     "Vousi," reproached Aunt Vaina.
-     "You came with your wife?" said Vousi, extending her hand.
-     "No," said I. Her  fingers  were  soft  and  cool.  "I  am
-alone."
-     In  that  case,  I'll  show  you all there is to see," she
-said. "Till tonight. I must run now,  but  we'll  go  out  this
-evening."
-     "Vousi!" reproached Aunt Vaina.
-     Vousi  pushed  the rest of the cake into her mouth, bussed
-her mother on the cheek, and  ran  toward  the  door.  She  had
-smooth  sunburned  legs,  long and slender, and a close-cropped
-back of the head.
-     "Ach, Ivan," said Aunt Vaina, who was also looking at  the
-retreating  girl, "in our times it is so difficult to deal with
-young girls. They develop so early and leave us so  soon.  Ever
-since she started working in that salon..."
-     "She is a dressmaker?" I inquired.
-     "Oh  no!  She  works  in  the Happy Mood Salon, in the old
-ladies' department. And do you know, they value her highly. But
-last year she was late once and now she has to be very careful.
-As you can see she could not even have  a  decent  conversation
-with  you,  but it's possible that a client is even now waiting
-for her. You might not believe this,  but  she  already  has  a
-permanent  clientele.  Anyway,  why  are  we standing here? The
-croutons will get cold."
-     We entered the landlord's side. I tried with all my  might
-to  conduct  myself correctly, although I was a bit foggy as to
-what exactly was correct. Aunt Vaina sat me down  at  a  table,
-excused  herself,  and  left.  I looked around. The room was an
-exact copy of mine, except that the walls were rose instead  of
-blue,  and  beyond  the window, in place of the sea was a small
-yard with a low fence dividing it from the street.  Aunt  Vaina
-came  back  with  a  tray  bearing  boiled cream and a plate of
-croutons..
-     "You know," she said, "I think I will have some  breakfast
-too.  My  doctor  does not recommend breakfast, especially with
-boiled cream.  But  we  became  so  accustomed...  it  was  the
-general's  favorite  breakfast. Do you know, I try to have only
-men boarders. That nice Ahmad  understands  me  very  well.  He
-understands  how  much  I  need  to sit just like this, now and
-then, just as we are sitting, and have a cup of boiled cream."
-     "Your cream is wonderfully good," said I, not insincerely.
-     "Ach, Ivan." Aunt Vaina put down her cup and fluttered her
-hands. "But  you  said  that  almost  exactly  like  the  major
-general...  Strange,  you  even  look like him. Except that his
-face was a bit narrower and he  always  had  breakfast  in  his
-uniform."
-     "Yes," I said with regret, "I don't have a uniform."
-     "But there was one once," said she coyly, shaking a finger
-at me.  "Of  course!  I  can  see it. It's so senseless! People
-nowadays have to be ashamed of their military past. Isn't  that
-silly? But they are always betrayed by their bearing, that very
-special manly carriage. You cannot hide it, Ivan!"
-     I  made  a very elaborate non-committal gesture, said, "Mm
--- yes," and took another crouton.
-     "It's all so out of place, isn't  that  right?"  continued
-Aunt  Vaina with great animation. "How can you confuse such two
-opposite concepts -- war and the army? We all detest  war.  War
-is  awful.  My  mother described it to me, she was only a girl,
-but she remembers everything. Suddenly, without warning,  there
-they  are  --  the  soldiers,  crude, alien, speaking a foreign
-tongue,  belching;  and  the  officers,  without  any  manners,
-laughing  loudly,  annoying  the  chambermaids, and smelling --
-forgive me; and that senseless commander's meeting hour... that
-is war and it deserves every condemnation! But the army! That's
-an altogether different affair! Surely you remember, Ivan,  the
-troops  lined  up by battalion, the perfection of the line, the
-manliness of the faces under the helmets, shiny arms, sparkling
-decorations, and  then  the  commanding  officer  riding  in  a
-special  staff car and addressing the battalions, which respond
-willingly and briefly like one man."
-     "No doubt," said I, "this has impressed many people."
-     "Yes! Very much indeed. We have always  said  that  it  is
-necessary  to  disarm,  but  did  we really need to destroy the
-army? It  is  the  last  refuge  of  manhood  in  our  time  of
-widespread  moral  collapse.  It's  weird  and  ridiculous -- a
-government without an army...."
-     "It is funny," I agreed. "You may not believe  it,  but  I
-have been smiling ever since they signed the Pact."
-     "Yes,  I can understand that," said Aunt Vaina. "There was
-nothing else for us to do,  but  to  smile  sarcastically.  The
-Major General Tuur" -- she extricated a handkerchief -- "passed
-away with just such a sarcastic smile on his face." She applied
-the  handkerchief  to  her eyes. "He said to us: 'My friends, I
-still hope to live to the day when everything will fall apart.'
-A broken man, who has lost the meaning of life... he could  not
-stand  the  emptiness  in  his  heart." Suddenly she perked up.
-"Here, let me show you, Ivan."
-     She bustled into the next room and returned with  a  heavy
-old-fashioned photo album.
-     I  looked at my watch at once, but Aunt Vaina did not take
-any notice, and sitting herself down at  my  side,  opened  the
-album at the very first page.
-     "Here is the major general."
-     The  major general looked quite the eagle. He had a narrow
-bony face and translucent eyes. His long body was spangled with
-medals. The biggest, a  multi-pointed  starburst  framed  in  a
-laurel  wreath,  sparkled in the region of the appendix. In his
-left hand the general tightly pressed a pair of gloves, and his
-right hand rested on the hilt of a ceremonial poniard.  A  high
-collar with gold embroidery propped up his lower jaw.
-     "And here is the major general on maneuvers."
-     Here  again  the  general looked the eagle. He was issuing
-instructions to his officers, who were bent over a  map  spread
-on  the  frontal  armor of a gigantic tank. By the shape of the
-treads  and  the  streamlined  appearance  of  the  turret,   I
-recognized it as one of the Mammoth heavy storm vehicles, which
-were  designed for pushing through nuclear strike zones and now
-are successfully employed by deep-sea exploration teams.
-     "And here is the general on his fiftieth birthday."
-     Here too, the general looked the  eagle.  He  stood  by  a
-well-set  table  with  a  wineglass in his hand, listening to a
-toast in his honor. The lower left corner  was  occupied  by  a
-halo  of light from a shiny pate; and to his side, gazing up at
-him with admiration, sat a very  young  and  very  pretty  Aunt
-Vaina.  I  tried  surreptitiously to gauge the thickness of the
-album by feel.
-     "Ah, here is the general on vacation."
-     Even on vacation, the general remained an eagle. With  his
-feet  planted  well  apart,  he  stood  an  the  beach sporting
-tiger-stripe trunks, as he scanned the misty horizon through  a
-pair  of  binoculars.  At his feet a child of three or four was
-digging in  the  sand.  The  general  was  wiry  and  muscular.
-Croutons  and cream did not spoil his figure. I started to wind
-my watch noisily.
-     "And here..." began Aunt Vaina, turning the page,  but  at
-this  point,  a  short  portly  man  entered  the  room without
-knocking. His face and in particular his dress seemed strangely
-familiar.
-     "Good morning," he enunciated, bending his smooth  smiling
-face slightly sideways.
-     It  was  my erstwhile customs man, still in the same white
-uniform with the silver buttons and the  silver  braid  on  the
-shoulders.
-     "Ah!  Pete!"  said  Aunt  Vaina.  "Here  you  are already.
-Please, let me introduce you. Ivan, this is Pete, a  friend  of
-the family."
-     The  customs  man  turned  toward  me without recognition,
-briefly inclined his head, and clicked his  heels.  Aunt  Vaina
-laid the album in my lap and got up.
-     "Have a seat, Pete," she said. "I will bring some cream."
-     Pete clicked his heels once more and sat down by me.
-     "This should interest you," I said, transferring the album
-to his  lap.  "Here is Major General Tuur. In mufti." A strange
-expression appeared on the face of the customs man.  "And  here
-is the major general on maneuvers. You see? And here --"
-     "Thank  you,"  said the customs man raggedly. "Don't exert
-yourself, because --"
-     Aunt Vaina returned with cream and croutons. From  as  far
-back  as  the  doorway,  she  said,  "How  nice to see a man in
-uniform! Isn't that right, Ivan?"
-     The cream for Pete was in a special cup with the  monogram
-"T" surrounded by four stars.
-     "It  rained  last  night,  so  it must have been cloudy. I
-know, because I woke up, and now there is not a  cloud  in  the
-sky. Another cup, Ivan?"
-     I got up.
-     'Thank  you,  I'm  quite full. If you'll excuse me, I must
-take my leave. I have a business appointment,"
-     Carefully closing the door behind me, I  heard  the  widow
-say,  "Don't  you find an extraordinary resemblance between him
-and Staff Major Polom?"
-     In the bedroom, I unpacked the  suitcase  and  transferred
-the  clothing to the wall closet, and again rang Rimeyer. Again
-no one answered. So I sat down at the desk and set to exploring
-the drawers. One contained a portable typewriter, another a set
-of writing paper and an empty bottle of grease  for  arrhythmic
-motors.  The  rest  was  empty,  if you didn't count bundles of
-crumpled receipts, a broken  fountain  pen,  and  a  carelessly
-folded sheet of paper, decorated with doodled faces. I unfolded
-the sheet. Apparently it was the draft of a telegram.
-     "Green  died  while  with  the Fishers receive body Sunday
-with condolences Hugger Martha boys." I read the writing twice,
-turned the sheet over and studied the faces, and read  for  the
-third  time. Obviously Hugger and Martha were not informed that
-normal people notifying of death first of all tell how and  why
-a  person  died  and not whom he was with when he died. I would
-have written, "Green drowned  while  fishing."  Probably  in  a
-drunken stupor. By the way, what address did I have now?
-     I  returned  to  the  hall.  A  small  boy  in short pants
-squatted in the doorway to the landlord's half. Clamping a long
-silvery tube under an armpit, he was panting and  wheezing  and
-hurriedly  unwinding  a  tangle of string. I went up to him and
-said, "Hi."
-     My reflexes are not what they used  to  be,  but  still  I
-managed to duck a long black stream which whizzed by my ear and
-splashed against the wall. I regarded the boy with astonishment
-while  he  stared at me, lying on his side and holding the tube
-in front of him. His face was damp and his  mouth  twisted  and
-open.  I turned to look at the wall. The stuff was oozing down.
-I looked at the boy again. He was getting  up  slowly,  without
-lowering the tube.
-     "Well, well, brother, you are nervous!" said I.
-     "Stand  where you are," said the boy in a hoarse voice." I
-did not say your name."
-     "To say the least," said I.  "You  did  not  even  mention
-yours, and you fire at me like I was a dummy."
-     "Stand where you are," repeated the boy, "and don't move."
-He backed  and  suddenly  blurted in rapid fire, "Hence from my
-hair, hence from my bones, hence from my flesh."
-     "I cannot," I said.  I  was  still  trying  to  understand
-whether he was playing or was really afraid of me.
-     "Why not?" said the boy. "I am saying everything right."
-     "I  can't go without moving," I said. "I am standing where
-I am."
-     His mouth fell open again.
-     "Hugger: I say to  you  --  Hugger  --  begone!"  he  said
-uncertainly.
-     "Why  Hugger?"  I  said.  "My name is Ivan; you confuse me
-with somebody else."
-     The boy closed his eyes and advanced upon me, holding  the
-tube in front of him.
-     "I surrender," I warned. "Be careful not to fire."
-     When  the  tube dented my midriff he stopped and, dropping
-it, suddenly went limp, letting his hands fall. I bent over and
-looked him in the face. Now he was brick-red. I picked  up  the
-tube.  It  was  something  like  a toy rifle, with a convenient
-checkered grip and a flat rectangular flask which was  inserted
-from below, like a clip.
-     "What kind of gadget is this?" I asked.
-     "A splotcher," he said gloomily. "Give it back."
-     I gave him back the toy.
-     "A  splotcher,"  I said, "with which you splotch. And what
-if you had hit me?" I looked at the wall. "Fine thing. Now  you
-won't  get it off inside of a year. You'll have to get the wall
-changed."
-     The boy looked up at me suspiciously. "But it's Splotchy,"
-he said.
-     "Really -- and I thought it was lemonade."
-     His face finally acquired a normal hue and demonstrated an
-obvious resemblance to the  manly  features  of  Major  General
-Tuur.
-     "No, no, it's Splotchy."
-     "So?"
-     "It will dry up."
-     "And then it's really hopeless?"
-     "Of course not. There will simply be nothing left."
-     "Hmm,"  said I, with reservation. "However, you know best.
-Let us hope so. But I am still glad that there will be  nothing
-left on the wall instead of on my face. What's your name?"
-     "Siegfried."
-     "And after you give it some thought?"
-     He gave me a long look.
-     "Lucifer."
-     "What?"
-     "Lucifer."
-     "Lucifer,"   said  I.  "Belial,  Ahriman,  Beelzebub,  and
-Azrael.  How  about  something  a  little  shorter?  It's  very
-inconvenient  to  call  for  help  to  someone with a name like
-Lucifer."
-     "But the doors are closed," he said and backed  one  step.
-His face paled again.
-     "So what?"
-     He  did not respond but continued to back until he reached
-the wall and began to sidle along it without  taking  his  eyes
-off  me. It finally dawned on me that he took me for a murderer
-or a thief and. that he wanted to escape. But for  some  reason
-he  did  not  call  for  help  and  went  by his mother's door,
-continuing toward the house exit.
-     "Siegfried,"  said  I,  "Siegfried,  Lucifer,  you  are  a
-terrible coward. Who do you think I am?" I didn't move but only
-Turned  to keep facing him. "I am your new boarder; your mother
-has just fed me croutons and cream and you go and  fire  at  me
-and  almost splotched me, and now you are afraid of me. It is I
-who should be afraid of you."
-     All this was very much  reminiscent  of  a  scene  in  the
-boarding  school  in Anyudinsk, when they brought me a boy just
-like this one, the son of a sect member.  Hell's  bells,  do  I
-really look so much the gangster?
-     "You  remind  me  of Chuchundra the Muskrat," I said, "who
-spent his life crying because he could not come  out  into  the
-middle  of the room. Your nose is blue from fear, your ears are
-freezing, and your pants are wet so that  you  are  trailing  a
-small stream...."
-     In  such  cases  it makes absolutely no difference what is
-said. It is important to speak calmly and not  to  make  sudden
-movements.  The expression on his face did not change, but when
-I spoke about the stream, he moved his eyes momentarily to take
-a look. But only for a second. Then he jumped toward the  door,
-fluttering  for  a second at the latch, and flew outside, dirty
-bottoms of his sandals flying. I went out after him.
-     He stood in the lilac bush, so that all I  could  see  was
-his  pale face. Like a fleeing cat looking momentarily over its
-shoulder.
-     "Okay, okay," said I. "Would you please explain to me what
-I must do? I have to send home my new address. The  address  of
-this  house  where I am now living." He regarded me in silence.
-"I don't feel right going to your mother -- in the first place,
-she has guests, and in the second--"
-     "Seventy-eight, Second Waterway," he said.
-     Slowly I sat down on the steps. There was  a  distance  of
-some ten meters between us.
-     'That's  quite  a  voice you have," I said confidentially.
-"Just like my friend the barman's at Mirza-Charles."
-     "When did you arrive?" said he.
-     "Well, let's see." I looked at my watch,  "About  an  hour
-and a half ago."
-     "Before  you  there  was  another  one,"  he said, looking
-sideways. "He was a  rat-fink.  He  gave  me  striped  swimming
-trunks, and when I went in the water, they melted away."
-     "Ouch!" I said. "That is really a monster of some sort and
-not a human -- he should have been drowned in Splotchy."
-     "Didn't have time -- I was going to, but he went away."
-     "Was it that same Hugger with Martha and the boys?"
-     "No -- where did you get that idea? Hugger came later."
-     "Also a rat-fink?"
-     He  didn't  answer.  I  leaned  back  against the wall and
-contemplated the street.  A  car  jerkily  backed  out  of  the
-opposite   driveway,   back   and   forthed,  and  roared  off.
-Immediately it was followed by another just such a  car.  There
-was the pungent smell of gasoline. Then cars followed one after
-another,  until  my eyes blurred. Several helis appeared in the
-sky. They were  the  so-called  silent  helis,  but  they  flew
-relatively  low, and while they flew, it was difficult to talk.
-In any case, the boy was apparently not going to talk.  But  he
-wasn't  going to leave, either. He was doing something with his
-splotcher in the bushes and was glancing at me now and then.  I
-was  hoping he wasn't going to splotch me again. The helis kept
-going and going, and the cars kept swishing  and  swishing,  as
-though all the fifteen thousand cars were speeding by on Second
-Waterway,  and all the five hundred helis were hung over Number
-78. The whole thing lasted  about  ten  minutes,  and  the  boy
-seemed to cease paying attention to me while I sat and wondered
-what  questions  I  should  ask  of  Rimeyer.  Then  everything
-returned to its previous state, the smell of exhaust was  gone,
-the sky was cleared.
-     "Where are they all going -- all at once?" I asked.
-     "Don't you know?"
-     "How would I know?"
-     "I don't know either, but somehow you knew about Hugger."
-     "About  Hugger,"  I  said.  "I  know  about  Hugger  quite
-accidentally. And about you I know nothing at  all...  how  you
-live and what you do. For instance, what are you doing now?"
-     "The safeguard is broken."
-     "Well then, give it to me, I'll fix it. Why are you afraid
-of me? Do I look like a rat-fink?"
-     "They all drove off to work," he said.
-     "You  sure  go  to  work late. It's practically dinnertime
-already. Do you know the Hotel Olympic?"
-     "Of course I know."
-     "Would you walk me there?"
-     He hesitated.
-     "No."
-     "Why not?" I asked.
-     "School is about to end -- I must be going home."
-     "Aha! So that's the way of it," said I. "You  are  playing
-hookey,  or  ditching it, as we used to say. What grade are you
-in?"
-     "Third."
-     "I used to be in third grade, too," I said.
-     He came a bit out of the bushes.
-     "And then?"
-     "Then I was in the fourth." I got up.  "Well,  okay.  Talk
-you  won't, go for a walk you won't, and your pants are wet, so
-I am going back in. You won't even tell me your name."
-     He looked at me in silence and  breathed  heavily  through
-his  mouth.  I went back to my quarters. The cream-colored hall
-was irreparably disfigured, it seemed to  me.  The  huge  black
-clot  was  not  drying.  Somebody  is  going to get it today, I
-thought. A ball of string was underfoot. I picked  it  up.  The
-end of the string was tied to the landlady's half-doorknob. So,
-I  thought,  this too is clear. I untied the string and put the
-ball in my pocket.
-     In the study, I got a clean sheet of paper from  the  desk
-and  composed  a  telegram to Matia. "Arrived safely, 78 Second
-Waterway. Kisses. Ivan." I telephoned it to the local PT&T  and
-again dialed Rimeyer's number. Again there was no answer. I put
-on  my  jacket, looked in the mirror, counted my money, and was
-about to set out when I saw that the door to  the  living  room
-was open and an eye was visible through the crack. Naturally, I
-gave  no  sign.  I  carefully  completed  the  inspection of my
-clothing, returned to the bathroom, and vacuumed myself  for  a
-while,  whistling  away  merrily. When I returned to the study,
-the  mouse-eared  head  sticking  through  the  half-open  door
-immediately  vanished.  Only  the silvery tube of the splotcher
-continued to protrude. Sitting down in the chair, I opened  and
-closed  all  the  twelve drawers, including the secret one, and
-only then looked at the door. The boy stood framed in it.
-     "My name is Len," he announced.
-     "Greetings, Len," I said  absent-mindedly.  "I  am  called
-Ivan.  Come  on  in -- although I was going out to have dinner.
-You haven't had dinner yet?"
-     "No."
-     "That's good. Go ask your mother's permission and we'll be
-off "
-     "It's too early," he said.
-     "What's too early? To have dinner?"
-     "No,  to  go.  School  doesn't  end  for  another   twenty
-minutes."  He was silent again. "Besides, there's that fat fink
-with the braid."
-     "He's a bad one?' I asked.
-     "Yeah," said Len. "Are you really leaving now?"
-     "Yes, I am," I said, and took the ball of string  from  my
-pocket. "Here, take it. And what if Mother comes out first?"
-     He shrugged.
-     "If  you  are  really  leaving," he said, "would it be all
-right if I stayed in your place?"
-     "Go ahead, stay."
-     "There's nobody else here?"
-     "Nobody."
-     He still didn't come to me to take the string, but let  me
-come to him, and even allowed me to take his ear. It was indeed
-cold.  I  ruffled  his  head  lightly and pushed him toward the
-table.
-     "Go sit all you want. I won't be back soon."
-     "I'll take a snooze," said Len.
-
-<ul><a name=3></a><h2>Chapter THREE</h2></ul>
-
-     The  Hotel  Olympic  was  a  fifteen-story   red-and-black
-structure. Half the plaza in front of it was covered with cars,
-and  in  its  center  stood  a  monument  surrounded by a small
-flowerbed. It represented a man with  a  proudly  raised  head.
-Detouring  the  monument,  I  suddenly realized that I knew the
-man. In puzzlement I stopped and examined it  more  thoroughly.
-There  was  no doubt about it. There in front of Hotel Olympic,
-in a funny old-fashioned suit  with  his  hand  resting  on  an
-incomprehensible   apparatus   which  I  almost  took  for  the
-extension of  the  abstract-styled  base,  and  with  his  eyes
-staring  at infinity through contemptuously squinting lids, was
-none other than Vladimir Sergeyevitch Yurkovsky. Carved in gold
-letters  on  the  base  was  the  legend  "Vladimir  Yurkovsky,
-December 5, Year of the Scales."
-     I couldn't believe it, because they do not raise monuments
-to Yurkovskys.  While  they live, they are appointed to more or
-less responsible positions, they are honored at jubilees,  they
-are  elected to membership in academies. They are rewarded with
-medals and are honored with international prizes, and when they
-die or perish; they are  the  subjects  of  books,  quotations,
-references,  but always less and less often as time passes, and
-finally they are forgotten altogether. They depart the halls of
-memory and linger on only in books. Vladimir Sergeyevitch was a
-general of the sciences and a remarkable man.  But  it  is  not
-possible  to erect monuments to all generals and all remarkable
-men, especially in  countries  to  which  they  had  no  direct
-relationship and in cities where if they did visit, it was only
-temporarily.  In any case, in that Year of the Scales, which is
-of significance only to them, he was not  even  a  general.  In
-March  he was, jointly with Dauge, completing the investigation
-of the Amorphous Spot on Uranus. That  was  when  the  sounding
-probe  blew up and we all got a dose in the work section -- and
-when we got back to the Planet in September, he was all spotted
-with lilac blotches, mad at the world, promising  himself  that
-he  would  take time out to swim and get sunburned and then get
-right back to the design of a new probe because the old one was
-trash.... I looked at the hotel again to reassure  myself.  The
-only  out  was  to assume that the life of the town was in some
-mysterious and potent manner highly dependent on the  Amorphous
-Spot  on  Uranus.  Yurkovsky  continued  to smile with snobbish
-superiority. Generally, the sculpture was  quite  good,  but  I
-could  not  figure  out  what  it  was  he  was leaning on. The
-apparatus didn't look like the probe.
-     Something hissed by my ear.  I  turned  and  involuntarily
-sprang back. Beside me, staring dully at the monument base, was
-a  tall  gaunt  individual closely encased from head to foot in
-some sort of gray scaly  material  and  with  a  bulky  cubical
-helmet  around  his  head. The face was obscured behind a glass
-plate with holes, from which smoke issued in  synchronism  with
-his  breathing.  The wasted visage behind the plate was covered
-with perspiration and the cheeks twitched in frantic tempo.  At
-first  I  took him for a Wanderer, then I thought that he was a
-tourist executing a curative routine, and only  finally  did  I
-realize that I was looking at an Arter.
-     "Excuse me," I said "Could you please tell me what sort of
-monument this is?"
-     The damp face contorted more desperately. "What?" came the
-dull response from inside the helmet.
-     I bent down.
-     "I am inquiring: what is this monument?"
-     The  man  glared at the statue. The smoke came thicker out
-of the holes. There was more powerful hissing.
-     "Vladimir Yurkovsky," he read, "Fifth of December, Year of
-the Scales... aha... December... so -- it must be some German."
-     "And who put up the monument?"
-     "I don't know," said the man. "But it's written down right
-there. What's it to you?"
-     "I was an acquaintance of his," I explained.
-     "Well then, why do you ask? Ask the man himself."
-     "He is dead."
-     "Aah... Maybe they buried him here?"
-     "No," I said, "he is buried far away."
-     "Where?"
-     "Far away. What's that thing he is holding?"
-     "What thing? It's an eroula."
-     "What?"
-     "I said, an eroula. An electronic roulette."-
-     My eyes popped.
-     "What's a roulette doing here?"
-     "Where?"
-     "Here, on the statue."
-     "I don't know," said the man after  some  thought.  "Maybe
-your friend invented it?"
-     "Hardly," said I. "He worked in a different field."
-     "What was that?"
-     "He was a planetologist and an interplanetary pilot."
-     "Aah...  well,  if he invented it, that was bully for him.
-It's a useful thing. I should remember it: Yurkovsky, Vladimir.
-He must have been a brainy German."
-     "I doubt he invented it," I said. "I repeat -- he  was  an
-interplanetary pilot."
-     The man stared at me.
-     "Well,  if  he  didn't  invent it, then why is he standing
-with it?"
-     "That's the point," I said. "I am amazed myself."
-     "You are a damn liar," said the man suddenly. "You lie and
-you don't even know why you are lying. It's early morning,  and
-he is stoned already.... Alcoholic!"
-     He  turned  away  and shuffled off, dragging his thin legs
-and hissing loudly. I shrugged my shoulders, took a  last  look
-at  Vladimir Sergeyevitch, and set off toward the hotel, across
-the huge plaza.
-     The gigantic doorman  swung  the  door  open  for  me  and
-sounded an energetic welcome.
-     I stopped.
-     "Would  you  be  so  kind," said I. "Do you know what that
-monument is?"
-     The doorman looked toward the plaza over my head. His face
-registered confusion.
-     "Isn't that written on it?"
-     "There is a legend," I said. "But who put it up and why?"
-     The doorman shuffled his feet.
-     "I beg your pardon,"  he  said  guiltily,  "I  just  can't
-answer
-     your  question.  The  monument has been there a long time,
-while I came here very recently. I don't wish to misinform you.
-Maybe the porter..."
-     I sighed.
-     "Well, don't worry about it. Where is a telephone?"
-     "To your right, if you please," he said looking delighted.
-     A porter started out in my direction, but I shook my  head
-and  picked  up  the receiver and dialed Rimeyer's number. This
-time I got a busy signal. I went to the elevator and up to  the
-ninth floor.
-     Rimeyer,  looking untypically fleshy, met me in a dressing
-gown, out of which stuck legs in pants and with shoes  on.  The
-room  stank  of  cigarette  smoke  and  the ashtray was full of
-butts. There was a general air of chaos in the whole suite. One
-of the armchairs was knocked over, a  woman's  slip  was  lying
-crumpled  on  the  couch,  and a whole battery of empty bottles
-glinted under the table.
-     "What can I do for you?" asked Rimeyer  with  a  touch  of
-hostility,  looking  at my chin. Apparently he was recently out
-of his bathroom, and his sparse colorless hair was wet  against
-his  long  skull. I handed him my card in silence. Rimeyer read
-it slowly  and  attentively,  shoved  it  in  his  pocket,  and
-continuing to look at my chin, said, "Sit down."
-     I sat.
-     "It  is  most  unfortunate. I am devilishly busy and don't
-have a minute's time."
-     "I called you several times today," said I.
-     "I just got back. What's your name?"
-     "Ivan."
-     "And your last name?"
-     "Zhilin."
-     "You see, Zhilin, to make it short, I have to get  dressed
-and  leave  again."  He  was  silent awhile, rubbing his flabby
-cheeks. "Anyway there's not much to talk about.... However,  if
-you  wish,  you can sit here and wait for me. If I don't return
-in an hour, come  back  tomorrow  at  twelve.  And  leave  your
-telephone  number and address, write it down right on the table
-there...."
-     He threw off the bathrobe, and dragging it  along,  walked
-off into the adjoining room.
-     "In  the  meantime,"  he continued, "you can see the town,
-and a miserable little town it is.... But you'll have to do  it
-in any case. As for me, I am sick to my stomach of it."
-     He  returned  adjusting his tie. His hands were trembling,
-and the skin on his face looked gray  and  wilted.  Suddenly  I
-felt  that  I  did  not  trust  him  --  the  sight  of him was
-repellent, like that of a neglected sick man.
-     "You look poorly," I  said.  "You  have  changed  a  great
-deal."
-     For the first time he looked me in the eyes.
-     "And how would you know what I was like before?"
-     "I  saw  you  at  Matia's.  You  smoke a lot, Rimeyer, and
-tobacco  is  saturated  regularly  with  all  kinds  of   trash
-nowadays."
-     "Tobacco -- that's a lot of nonsense," he said with sudden
-irritation.  "Here  everything  is  saturated with all kinds of
-tripe.... But perhaps you  may  be  right,  probably  I  should
-quit."  He  pulled  on his jacket slowly; "Time to quit, and in
-any case, I shouldn't have started."
-     "How is the work coming along?"
-     "It could be worse. And unusually absorbing work  it  is."
-He  smiled  in  a  peculiar unpleasant way. "I am going now, as
-they are waiting for me and I am late. So, till  an  hour  from
-now, or until tomorrow at twelve."
-     He nodded to me and left.
-     I  wrote my address and telephone number on the table, and
-as my foot plowed  into  the  mass  of  bottles  underneath,  I
-couldn't  help  but think that the work was indeed absorbing. I
-called room service and requested a chambermaid to clean up the
-room. The most polite of voices replied that  the  occupant  of
-the  suite categorically forbade service personnel to enter his
-room during his absence and had repeated the  prohibition  just
-now  on  leaving  the  hotel.  "Aha," I said, and hung up. This
-didn't sit well  with  me.  For  myself,  I  never  issue  such
-directions  and  have  never hidden even my notebooks, not from
-anyone. It's stupid to work at deception  and  much  better  to
-drink  less. I picked up the overturned armchair, sat down, and
-prepared for a  long  wait,  trying  to  overcome  a  sense  of
-displeasure and disappointment.
-     I  didn't  have  to wait for long. After some ten minutes,
-the door opened a crack and a pretty face  protruded  into  the
-room.
-     "Hey there," it pronounced huskily. "Is Rimeyer in?"
-     "Rimeyer is not in, but you can come in anyway."
-     She   hesitated,  examining  me.  Apparently  she  had  no
-intention of coming in, but was just saying hello, in passing.
-     "Come in, come in," said I. "I have nothing to do."
-     She entered with a light dancing  gait,  and  putting  her
-arms  akimbo,  stood  in front of me. She had a short turned-up
-nose and a disheveled boyish hairdo.  The  hair  was  red,  the
-shorts crimson, and the blouse a bright yolk yellow. A colorful
-woman   and   quite   attractive.  She  must  have  been  about
-twenty-five.
-     "You wait -- right?"
-     Her eyes were unnaturally bright and she smelled of  wine,
-tobacco, and perfume.
-     She  collapsed on the hassock and flung her legs up on the
-telephone table.
-     "Throw a cigarette to a working  girl,"  she  said.  "It's
-five hours since I had one."
-     "I don't smoke. Shall I ring for some?"
-     "Good  Lord,  another sad sack! Never mind the phone .. or
-that dame will show up again. Rummage around in the ashtray and
-find me a good long butt."
-     The ashtray did have a lot of long butts.
-     'They all have lipstick on them," said I.
-     "That's all right; it's my lipstick. What's your name?"
-     "Ivan."
-     She snapped a lighter and lit up.
-     "And mine is Ilina. Are you  a  foreigner,  too?  All  you
-foreigners seem so wide. What are you doing here?"'
-     "Waiting for Rimeyer."
-     "I  don't  mean  that!  What  brought  you  here,  are you
-escaping from your wife?"
-     "I am not married," I said quietly. "I  came  to  write  a
-book."
-     "A book? Some friends this Rimeyer has. He came to write a
-book.  <i>Sex  Problems  of  Impotent Sportsmen</i>. How's your
-situation with the sex problem?"
-     "It is not a problem to me," I said mildly. "And how about
-you?"
-     She lowered her legs from the table.
-     "That's a no-no. Take it slow. This isn't Paris, you know.
-All in good time. Anyway, you should have  your  locks  cut  --
-sitting there like a perch."
-     "Like  a  who?"  I  was  very  patient  as  I  had another
-forty-five minutes to wait.
-     "Like a perch. You know the type." She made vague  motions
-around her ears.
-     "I  don't know about that," I said. "I don't know anything
-yet as I have  just  arrived.  Tell  me  about  it,  it  sounds
-interesting."
-     "Oh no! Not I! We don't chatter. Our bit is a small one --
-serve, clean up, flash your teeth, and keep quiet. Professional
-secret. Have you heard of such an animal?"
-     "I've heard," I said. "But who's 'we' -- an association of
-doctors?
-     For some reason, she thought this was hilarious.
-     "Doctors!  Imagine  that."  She  laughed. "Well, wise guy,
-you're all right -- quite a tongue. We have  one  in  the  once
-like  you.  One  word,  and  we're  all  rolling in the aisles.
-Whenever we cater to the Fishers, he always gets the job,  they
-like a good laugh."
-     "Who doesn't?" said I.
-     "Well, you are wrong. The Intels, for instance, chased him
-out. 'Take  the  fool  away,' they said. Or also recently those
-pregnant males."
-     "Who?"'
-     "The sad ones. Well, I can  see  you  don't  understand  a
-thing. Where in heaven's name did you come from?"
-     "From Vienna."
-     "So -- don't you have the sad ones in Vienna?"
-     "You couldn't imagine what we don't have in Vienna."
-     "Could be you don't even have irregular meetings?"
-     "No,  we  don't  have  them. All our meetings are regular,
-like a bus schedule."
-     She was having a good time.
-     "Perhaps you don't have waitresses either?"
-     "Waitresses we do have, and you can  find  some  excellent
-examples. Are you a waitress then?"
-     She jumped up abruptly.
-     "That  won't  do  at all," she cried. "I've had enough sad
-ones for today. Now you're going to have a loving cup  with  me
-like a good fellow...." She began to search furiously among the
-bottles  by  the window. "Damn him, they're all empty! Could be
-you're a teetotaler? Aha, here's a little vermouth.  You  drink
-that, or shall we order whiskey?"
-     "Let's begin with the vermouth," said I.
-     She  banged  the  bottle on the table and took two glasses
-from the window sill.
-     "Have to wash them. Hold on a minute, everything's full of
-garbage." She went into the bathroom  and  continued  to  speak
-from  there.  "If  you  turned out to be a teetotaler on top of
-everything else. I don't know what I would do with you.... What
-a pigsty he's got in his bathroom -- I love it! Where  are  you
-staying? Here too?"
-     "No, in town," I replied. "On Second Waterway."
-     She came back with the glasses.
-     "Straight or with water?"
-     "Straight, I guess."
-     "All  foreigners  take  it  straight.  But we have it with
-water for some reason." She sat on my armchair and put her arms
-around my shoulders. We drank and kissed without  any  feeling.
-Her  lips  were  heavily lipsticked, and her eyelids were heavy
-from lack of  sleep  and  fatigue.  She  put  down  her  glass,
-searched  out  another butt in the ashtray, and returned to the
-hassock.
-     "Where is that Rimeyer?" she said. "After  all,  how  long
-can you wait for him? Have you known him a long time?"
-     "No, not very."
-     "I  think  maybe he is a louse," she said with sudden ire.
-"He's dug everything out of me, and now he plays hard  to  get.
-He doesn't open his door, the animal, and you can't get through
-to him by phone. Say, he wouldn't be a spy, would he?"
-     "What do you mean, a spy?"
-     "Oh,  there's  loads  of them.... From the Association for
-Sobriety and Morality.... The Connoisseurs and  Appraisers  are
-also a bad lot...."
-     "No, Rimeyer is a decent sort," I said with some effort.
-     "Decent...  you  are all decent. In the beginning, Rimeyer
-too was decent, so good-natured and full of fun... and  now  he
-looks at you like a croc."
-     "Poor fellow," I said. "He must have remembered his family
-and become ashamed of himself."
-     "He doesn't have a family. Anyway, the heck with him! Have
-another drink?"
-     We  had another drink. She lay down and put her hands over
-her head. Finally she spoke.
-     "Don't let it get to you. Spit on it! Wine we have  enough
-of, we'll dance, go to the shivers. Tomorrow there's a football
-game, we'll bet on the Bulls."
-     "I  am not letting it get to me. If you want to bet on the
-Bulls, we'd bet on the Bulls."
-     "Oh those Bulls! They are some boys! I  could  watch  them
-forever, arms like iron, snuggling up against them is just like
-snuggling against a tree trunk, really!"
-     There was a knock on the door.
-     "Come in!" yelled Ilina.
-     A  man  entered and stopped at once. He was tall and bony,
-of middle age, with a brush mustache and light protruding eyes.
-     "I beg your pardon, I was looking for Rimeyer," he said.
-     "Everyone here wants to see Rimeyer," said Ilina. "Have  a
-chair and we'll all wait together."
-     The  stranger  bowed  his  head and sat down by the table,
-crossing his legs.
-     Apparently he had  been  here  before.  He  did  not  look
-around,  but  stared  at  the  wall  directly  in front of him.
-However, perhaps he just was not a curious type. In  any  case,
-it  was  clear  that neither I nor Ilina was of any interest to
-him. This seemed unnatural to me, since I felt that such a pair
-as myself and  Ilina  should  arouse  interest  in  any  normal
-person.  Ilina  raised  up  on her elbow and scrutinized him in
-detail.
-     "I have seen you somewhere," she said.
-     "Really?" said the stranger coldly.
-     "What's your name?"
-     "Oscar. I am Rimeyer's friend."
-     "That's fine," said Ilina. She was obviously irritated  by
-the  stranger's  indifference,  but  she kept herself in check.
-"He's also a friend of Rimeyer." She stuck her  finger  at  me.
-"You know each other?"
-     "No," said. Oscar, continuing to look at the wall.
-     "My  name is Ivan," said I. "And this is Rimeyer's friend,
-Ilina. We just drank to our fraternal friendship."
-     Oscar  glanced  indifferently  in  Ilina's  direction  and
-nodded  his  head  politely. Ilina picked up the bottle without
-taking her eyes off him.
-     "There's still a little left here," she said.  "Would  you
-like a drink, Oscar?"
-     "No, thank you," he said, coldly.
-     "To fraternal friendship!" said Ilina. "No? You don't want
-to? Too bad!"
-     She  splashed  some  wine  in my glass, poured the rest in
-hers, and downed it at once.
-     "Never in my life would I have thought that Rimeyer  could
-have  friends  who  refuse  a  drink.  Still,  I  have seen you
-somewhere before."
-     Oscar shrugged his shoulders.
-     "I doubt it," he said.
-     Ilina was visibly becoming enraged.
-     "Some sort of a fink," she said to me loudly. "Say  there,
-Oscar, you wouldn't be an Intel?"
-     "No."
-     "What  do  you  mean, no?" said Ilina. "You're the one who
-had a set-to with that  baldy  Leiz  at  the  Weasel,  broke  a
-mirror, and had your face slapped by Mody."
-     The stone visage of Oscar grew a shade pinker.
-     "I  assure  you,"  he said courteously, "I am not an Intel
-and have never in my life been in the Weasel."
-     "Are you saying that I'm a liar?" said Ilina
-     At this point I took the bottle off the table and  put  it
-under my armchair, just in case.
-     "I am a visitor," said Oscar. "A tourist."
-     "When did you arrive?" I said to discharge the tension.
-     "Very  recently,"  replied  Oscar. He continued to gaze at
-the wall. Obviously here was a man with iron discipline.
-     "Oh, oh!" said Ilina suddenly. "Now I remember! I  got  it
-all mixed up."
-     She  burst  out  laughing, "Of course you're no Intel! You
-were at our office the day before last. You're the salesman who
-offered our manager some junk like... 'Dugong' or 'Dupont..."
-     "Devon," I prompted. "There is a repellent called Devon."
-     Oscar smiled for the first time.
-     "You are quite right, of course," he said. "But I am not a
-salesman. I was only doing a favor for a relative."
-     "That's different," said Ilina and jumped up. "You  should
-have  said  so.  Ivan,  we  all  need  to  drink to a pledge of
-friendship. I'll call... no, I'll go get it myself. You two can
-have a talk, I'll be right back."
-     She ran out of the room, banging the door.
-     "A fun girl," said I.
-     "Yes, extremely. You live here?"
-     "No, I'm a traveler, too....  What  a  strange  idea  your
-relative had!"
-     "What do you have in mind?"
-     "Who needs Devon in a resort town?"
-     Oscar shrugged.
-     "It's  hard  for me to judge; I'm no chemist. But you will
-agree that it's hard for us to comprehend the  actions  of  our
-fellow  men,  much less their fancies.... So Devon turns out to
-be - What did you call it, a res...?"
-     "Repellent," I said.
-     "That would be for mosquitoes?"
-     "Not so much for as against."
-     "I can see you are quite well up on it," said Oscar.
-     "I had occasion to use it."
-     "Well, well."
-     What the devil, thought I. What is he getting at?  He  was
-no longer staring at the wall He was looking me straight in the
-eyes  and smiling. But if he was going to say something, it was
-already said.
-     He got up.
-     "I don't think I'll wait any longer," he  pronounced.  "It
-looks like I'll have to drink another pledge. But I didn't come
-here  to  drink,  I  came here to get well. Please tell Rimeyer
-that I will call him again tonight. You won't forget?"
-     "No," I said, "I won't forget. If I tell  him  that  Oscar
-was in to see him, he will know whom I am talking about?"
-     "Yes, of course. It's my real name."
-     He   bowed,   and   walked   out  at  a  deliberate  pace,
-ramrod-straight and somehow unnatural-looking. I dipped my hand
-in the ashtray, found a  butt  without  lipstick,  and  inhaled
-several  times. I didn't like the taste and put out the stub. I
-didn't like Oscar, either. Nor Ilina. And especially Rimeyer --
-I didn't like him at all. I pawed through the bottles, but they
-were all empty.
-
-<ul><a name=4></a><h2>Chapter FOUR</h2></ul>
-
-     In the end I didn't wait long enough to see Rimeyer. Ilina
-never came back. Finally I got tired of sitting in  the  smoky,
-stale  atmosphere  of  the  room  and went down to the lobby. I
-intended to have dinner  and  stopped  to  look  around  for  a
-restaurant. A porter immediately materialized at my side.
-     "At  your service," he murmured discreetly. "An auto? Bar?
-Restaurant? Salon?"
-     "What kind of salon?" I asked, my curiosity piqued.
-     "A hair-styling  salon."  He  looked  at  my  hairdo  with
-delicate   concern.   "Master  Gaoway  is  receiving  today.  I
-recommend him most strenuously."
-     I recollected that Ilina had called me a disheveled  perch
-and said, "Well, all right."
-     "Please follow me," said the porter.
-     Crossing  the  lobby,  he  opened a wide low door and said
-into the spacious interior, "Excuse  me,  Master,  you  have  a
-client."
-     "Come in," replied a quiet voice.
-     I  entered.  The  salon  was  light  and  airy and smelled
-pleasantly. Everything in it shone -- the chrome, the  mirrors,
-the  antique  parquet  floor.  Shiny  half-domes  hung from the
-ceiling on glistening rods. In the center stood  a  huge  white
-barber  chair.  The  Master  was  advancing  to meet me. He had
-penetrating immobile eyes, a hooked nose, and a gray Van  Dyke.
-More than anything else he reminded me of a mature, experienced
-surgeon.  I  greeted  him  with  some  timidity, He nodded and,
-surveying me from head to foot, began to circle  around  me.  I
-began to feel uncomfortable.
-     "I  would like you to bring me up to the current fashion,"
-said I, trying not to let him out of my field of view.
-     But he restrained  me  gently  by  my  sleeve  and.  stood
-breathing  softly  behind my back for a few seconds. "No doubt!
-No doubt at all", he murmured, then touched me  lightly  on  my
-shoulder.  "Please," he said sternly, "take a few steps forward
--- five or six -- then turn abruptly to face me."
-     I obeyed. He regarded me pensively, pulling on his  beard.
-I thought he was hesitating.
-     "On the other hand," he said, "sit down."
-     "Where?" I said.
-     "In the chair, in the chair."
-     I  lowered  myself  into  its  softness  and  watched  him
-approach me slowly. His intelligent face was suddenly  suffused
-with a look of profound chagrin.
-     "But  how  is  such  a  thing  possible?"  he  said. "It's
-absolutely awful."
-     I couldn't find anything to say.
-     "Gross disharmony," he muttered. "Repulsive... repulsive."
-     "Is it really that bad?" I asked.
-     "I don't understand why you came to me," he  said,  "since
-you obviously don't place any value at all on your appearance."
-     "I am beginning to, from this day on," I said.
-     He waved his hand.
-     "Never  mind...  I  will work on you, but..." He shook his
-head, turned impulsively, and went to a high table covered with
-shiny devices. The back of the chair depressed smoothly, and  I
-found  myself  in  a  half-reclining position. A big hemisphere
-descended  toward  me  from  above,  radiating  warmth,   while
-hundreds  of  tiny  needles  seemed to sink into the nape of my
-neck, eliciting a strange combination of simultaneous pain  and
-pleasure.
-     "Is it gone yet?" he asked.
-     The sensation abated.
-     "It's gone," I said.
-     "Your  skin  is  good,"  growled the Master with a certain
-satisfaction.
-     He returned  with  an  assortment  of  the  most  unlikely
-instruments and proceeded to palpate my cheeks.
-     "And  still  Mirosa  married  him,"  he  said suddenly. "I
-expected anything and everything, except that. After  all  that
-Levant  had done for her. Do you remember that moment when they
-were both weeping over the  dying  Pina?  You  could  have  bet
-anything that they would be together forever. And now, imagine,
-she is being wed to that literary fellow."
-     I  have  a  rule:  to pick up and sustain any conversation
-that comes along. When you don't know what it's all about, this
-can even be interesting.
-     "Not for long," I said with assurance. "Literary types are
-very inconstant, I can assure you, being one myself."
-     For a moment his hands paused on my temples.
-     "That didn't enter my head,"  he  admitted.  "Still,  it's
-wedlock,  even  though  only a civil one.... I must remember to
-call my wife. She was very upset."
-     "I can sympathize with her," I said. "But  it  did  always
-seem to me that Levant was in love with that... Pina."
-     "In  love?"  exclaimed  the  Master, coming around from my
-other side. "Of course he loved her! Madly! As only  a  lonely,
-rejected-by-all man can love."
-     "And so it was quite natural that after the death of Pina,
-he sought consolation with her best friend."
-     "Her  bosom  friend,  yes,"  said  the Master approvingly,
-while tickling me behind the ear. "Mirosa adored Pina!  It's  a
-very  accurate  term -- bosom friend! One senses a literary man
-in you at once! And Pina, too, adored Mirosa."
-     "But, you notice," I picked  up,  "that.  right  from  the
-beginning  Pina  suspected  that  Mirosa  was  infatuated  with
-Levant."
-     "Well, of course! They are extremely sensitive about  such
-things.  This  was  clear  to everyone -- my wife noticed it at
-once. I recollect that she would nudge me with her  elbow  each
-time  Pina  alighted on Mirosa's tousled head, and so coyly and
-expectantly looked at Levant."
-     This time I kept my peace.
-     "In general, I am  profoundly  convinced,"  he  continued,
-"that birds feel no less sensitively than people."
-     Aha,  thought  I,  and  said, "I don't know about birds in
-general, but Pina was a lot more sensitive than let's say  even
-you or I."
-     Something  bummed  briefly  over  my head, and there was a
-soft clink of metal.
-     "You speak like my wife,  word  for  word,"  observed  the
-Master,  "so  you  most  probably must like Dan. I was overcome
-when he was able  to  construct  a  bunkin  for  that  Japanese
-noblewoman...  can't  think  of  her  name.  After all, not one
-person believed Dan. The Japanese king, himself..."
-     "I beg your pardon," I said. "A bunkin?"
-     "Yes, of course, you are not a specialist.... You remember
-that moment when the Japanese noblewoman comes out  of  prison.
-Her  hair,  in  a high roller of blond hair, is ornamented with
-precious combs..."
-     "Aah," I guessed. "It's a coiffure."
-     "Yes, it even became fashionable for  a  time  last  year.
-Although a true bunkin could be made by a very few... even as a
-real  chignon, by the way. And, of course, no one could believe
-that Dan, with his  burned  hands  and  half-blind  ..  Do  you
-remember how he was blinded?"
-     "It was overpowering," I said.
-     "Oh  yes,  Dan was a true Master. To make a bunkin without
-electro-preparation, without biodevelopment... You know, I just
-had  a  thought,"  he  continued,  and  there  was  a  note  of
-excitement  in his voice. "It just struck me that Mirosa, after
-she parts with that literary guy,  should  marry  Dan  and  not
-Levant.  She  will  be  wheeling  him out on the veranda in his
-chair, and they will be listening to the  singing  nightingales
-in the moonlight -- the two of them together."
-     "And crying quietly out of sheer happiness," I said.
-     "Yes,"  the voice of the Master broke, "that would be only
-right. Otherwise I just don't know, I  just  don't  understand,
-what  all  our struggles are for. No... we must insist. I'll go
-to the union this very day...."
-     I kept quiet, again. The Master was breathing uneasily  by
-my ear.
-     "Let them go and shave at the automates," he said suddenly
-in a vengeful  tone,  "let them look like plucked geese. We let
-them have a taste once before of what it's like; now we'll  see
-how they appreciate it."
-     "I  am  afraid it won't be simple," I said cautiously, not
--- having the vaguest idea of what this was about.
-     "We Masters are used to the complicated. It's not all that
-simple -- when a fat and sweaty stuffed shirt comes to you, and
-you have to make a human being out of him, or at the very best,
-something which under normal circumstances does not differ  too
-much  from  a  human being... is that simple? Remember what Dan
-said: 'Woman gives birth to a human being once in nine  months,
-but  we  Masters  have  to  do  it  every  day.'  Aren't  those
-magnificent words?"
-     "Dan was talking about barbers?" I said, just in case.
-     "Dan was talking about Masters. 'The beauty of  the  world
-rests  on  our  shoulders,'  he  would  say.  And again, do you
-remember: 'In order to make a man out of an ape, Darwin had  to
-be an excellent Master.'"
-     I decided to capitulate and confess.
-     "This I don't remember."
-     "How long have you been watching 'Rose of the Salon'?"
-     "Well, I have arrived just recently."
-     "Aah,  then you have missed a lot. My wife and I have been
-watching the program for seven years, every Tuesday. We  missed
-only  one  show; I had an attack and lost consciousness. But in
-the whole town there is only one man who hasn't missed even one
-show -- Master Mille at the Central Salon."
-     He moved off a few paces, turned various colored lights on
-and off, and resumed his work.
-     "The seventh year," he  repeated.  "And  now  --  can  you
-imagine  -- the year before last they kill off Mirosa and throw
-Levant into a Japanese prison for life, while Dan is burned  at
-the stake. Can you visualize that?"
-     "It's  impossible,"  I  said. "Dan? At the stake? Although
-it's true that they burned Bruno at the stake, too."
-     "It's possible," he said with impatience. "In any case, it
-became clear to us that they want to fold up the program  fast.
-But  we  didn't  put  up  with  that.  We declared a strike and
-struggled for three weeks. Mille  and  I  picketed  the  barber
-automates.  And  let  me  tell  you  that  quite  a  lot of the
-townspeople sympathized with us."
-     "I should think so," I said. "And what happened?  Did  you
-win?
-     "As you see. They grasped very well what was involved, and
-now the  TV  center knows with whom they are dealing. We didn't
-give one step, and if need be, we won't. Anyway we can rest  on
-Tuesdays now just like in the old days -- for real."
-     "And the other days?"
-     "The  other days we wait for Tuesday and try to guess what
-is awaiting us and what you literary fellows will do for us. We
-guess and make bets -- although  we  Masters  don't  have  much
-leisure."
-     "You have a large clientele?"
-     "No, that's not it. I mean homework. It's not difficult to
-become  a Master, it's difficult to remain one. There is a mass
-of literature, lots of new methods, new applications,  and  you
-have  to  keep  up  with  it  all  and  constantly  experiment,
-investigate and keep track of allied fields -- bionics, plastic
-medicine, organic  medicine.  And  with  time,  you  accumulate
-experience,  and  you  get the urge to share your knowledge. So
-Mille and I are writing our second book, and practically  every
-month,  we  have  to  update the manuscript. Everything becomes
-obsolete right before your eyes. I am now completing a treatise
-on a little-known  characteristic  of  the  naturally  straight
-nonplastic  hair;  and do you know I have practically no chance
-of being the first? In our  country  alone,  I  know  of  three
-Masters who are occupied with the same subject. It's only to be
-expected  --  the  naturally straight nonplastic hair is a real
-problem.     It's     considered     to      be      absolutely
-nonaestheticizable....  However, this may not be of interest to
-you? You are a writer?"
-     "Yes," I said.
-     "Well, you know, during the strike, I had a chance to  run
-through a novel. That would not be yours, by any chance?"
-     "I don't know," I said, "What was it about?"
-     "Well,  I  couldn't  say  exactly....  Son  quarrels  with
-father. He has a friend, an unpleasant fellow  with  a  strange
-name. He occupies himself by cutting up frogs."
-     "Can't remember," I lied -- poor Ivan Sergeyevitch.
-     "I  can't remember either. It was some sort of nonsense. I
-have a son, but  he  never  quarrels  with  me,  and  he  never
-tortures animals -- except perhaps when he was a child"
-     He  backed  away  again and made a slow circuit around me.
-His eyes were burning; he seemed to be very pleased.
-     "It looks as though we can stop here," he said.
-     I got out of  the  chair.  "Not  bad.  Not  bad  at  all,"
-murmured  the  Master.  I  approached  the mirror. He turned on
-spotlights, which illuminated me from all sides so  that  there
-were no shadows on my face.
-     In  the  first  instant  I did not notice anything unusual
-about myself. It was my usual self. Then I felt that it was not
-I at all. That it was something much better than I. A whole lot
-better.  Better  looking  than  I.  More  benevolent  than   I.
-Appreciably  more  significant than I. I experienced a sense of
-shame, as though I were deliberately passing myself  off  as  a
-man to whom I couldn't hold a candle.
-     "How did you do this thing?" I said in a strangled tone.
-     "It's nothing," said the Master, smiling in a very special
-way. "You  turned  out to be a fairly easy client, albeit quite
-neglected."
-     I stood before the mirror like Narcissus and couldn't tear
-myself away. Suddenly, I felt awed. The Master was a  magician,
-and an evil one at that, although he probably didn't realize it
-himself.  The  mirror reflected an extremely attractive lie. An
-intelligent, good-looking, monumental vapidity.  Well,  perhaps
-not  a  total  vacuum,  for after all I didn't have that low an
-opinion of myself. But the contrast was too great.  All  of  my
-inner  world,  everything  I valued in myself -- all that could
-just as well have not existed.  It  was  no  longer  needed.  I
-looked at the Master. He was smiling.
-     "You have many clients?" I asked.
-     He  did  not  grasp  my  meaning,  but after all, I didn't
-really want him to understand me.
-     "Don't worry," he replied, "I'll always work on  you  with
-pleasure. The rawest material is the most intriguing."
-     "Thank you," said I, lowering my eyes so as not to see his
-smile. "Thank you. Goodbye."
-     "Just  don't forget to pay," he said placidly. "We Masters
-value our work very highly."
-     "Yes, of course," I caught myself. "Naturally. How much do
-I owe you?"
-     He stated how much I owed.
-     'What?" said I regaining my equilibrium.
-     He repeated with satisfaction.
-     "Madness", I said forthrightly.
-     "Such is the price of beauty,"  he  explained.  "You  came
-here as an ordinary tourist, and you are leaving a king of this
-domain."
-     "An  impersonator  is  what  I am leaving as," I muttered,
-extracting the money.
-     "No, no, not that bad!" he said  confidentially.  "Even  I
-don't  know that for sure. And even you are not convinced of it
-entirely.... Two more dollars, please. Thank you.  Here  is  50
-pfennigs change. You don't mind pfennigs?"
-     I  had nothing against pfennigs. I wanted to leave as fast
-as possible.
-     I stood in the lobby for a while, becoming  myself  again,
-and  gazing  at  the  metallic figure of Vladimir Sergeyevitch.
-After all, all this is not new. After all, millions  of  people
-are  not what they pass themselves for. But the damnable barber
-had made me over into an empiriocritic. Reality was masked with
-gorgeous hieroglyphics. I no longer believed what I saw in this
-city. The plaza covered with  stereo-plastic  was  probably  in
-reality not beautiful at all. Under the elegant contours of the
-autos  lurked  ominous  and  ugly  shapes.  And  that beautiful
-charming woman is no  doubt  in  fact  a  repulsive  malodorous
-hyena,  a  promiscuous  dull-witted  sow.  I closed my eyes and
-shook my head. The old devil!
-     Two meticulously groomed oldsters stopped nearby and began
-to debate  heatedly  the  relative  merits  of  baked  pheasant
-compared  with  pheasant  broiled  with  feathers. They argued,
-drooling saliva, smacking  their  lips  and  choking,  snapping
-their  bony  fingers  under each other's noses. No Master could
-help these two. They were Masters themselves and they  made  no
-bones  about  it.  At  any  rate,  they restored my materialist
-viewpoint. I went to a porter and inquired about a restaurant.
-     "Right in front of you," said he and smiled at the arguing
-oldsters. "Any cuisine in the world."
-     I could have mistaken the entrance to the  restaurant  for
-the  gates  to  a  botanical  garden.  I  entered,  parting the
-branches of exotic trees, stepping alternately  on  soft  grass
-and  coral  flagstones. Unseen birds twittered in the luxuriant
-greenery, and the discreet clatter of utensils was  mixed  with
-the  sound  of  conversation  and  laughter. A golden bird flew
-right in front of my nose, barely able to carry the load  of  a
-caviar tartine in its beak.
-     "I am at your service," said the deep velvety voice.
-     An  imposing giant of a man with epaulettes stepped toward
-me cut of a thicket.
-     "Dinner," I said curtly. I don't like maitres-d'hotel.
-     "Dinner," he said  significantly.  "In  company?  Separate
-table?"'
-     "Separate table. On second thought..."
-     A notebook instantaneously appeared in his hand.
-     "A man of your age would be welcome at the table of
-     Mrs. and Miss Hamilton-Rey."
-     "Go on," I said.
-     "Father Geoffrois..."
-     "I would prefer an aborigine."
-     He turned the page.
-     "Opir,  doctor of philosophy, just now has sat down at his
-table."
-     "That's a possibility," said I.
-     He put away the book and led me along a  path  paved  with
-limestone  slabs. Somewhere around us there were people eating,
-talking,   swishing   seltzer.   Hummingbirds    darted    like
-multicolored  bees  in  the leaves. The maitre-d'hotel inquired
-respectfully, "How would you like to be introduced?"
-     "Ivan. Tourist and litterateur."
-     Doctor Opir was about fifty. I liked him at  once  because
-he immediately and without any ceremony sent the maitre-d'hotel
-packing  after  a  waiter. He was pink and plump, and moved and
-talked incessantly.
-     "Don't trouble yourself," he said when I reached. for  the
-menu.  "It's  all set already. Vodka, anchovies under egg -- we
-call them pacifunties -- potato soup..."
-     "With sour cream," I interjected.
-     "Of course!... steamed sturgeon a la Astrakhan... a  patty
-of veal..."
-     "I would prefer pheasant baked in feathers."
-     "No  -- don't; it's not the season... a slice of beef, eel
-in sweet marinade."
-     "Coffee," I said.
-     "Cognac," he retorted.
-     "Coffee with cognac."
-     "All right, cognac and coffee with cognac. Some pale  wine
-with the fish and a good natural cigar."
-     Dinner  with  Doctor Opir turned out to be most congenial.
-It was possible to eat, drink, and listen. Or  not  to  listen.
-Doctor  Opir  did  not  need  a  conversation.  He  required  a
-listener. I did not have  to  participate  in  the  talking,  I
-didn't  even  supply  any  commentaries,  while  he orated with
-enthusiastic delight, almost without interruption,  waving  his
-fork, while plates and dishes nonetheless became empty in front
-of him with mystifying speed. Never in my life have I met a man
-who was so skilled in conversation while his mouth was so fully
-packed and so busy masticating.
-     "Science!  Her  Majesty!"  he exclaimed. "She matured long
-and painfully, but her fruits turned out  to  be  abundant  and
-sweet. Stop, Moment, you are beautiful! Hundreds of generations
-were  born,  suffered,  and  died,  and not one was impelled to
-pronounce this incantation. We  are  singularly  fortunate.  We
-were  born  in  the  greatest  of  epochs,  the  Epoch  of  the
-Satisfaction  of  Desires.  It  may  be  that   not   everybody
-understands  this  as yet, but ninety-nine percent of my fellow
-citizens are already living in a world where, for all practical
-purposes, a man can have all he can think of. O,  Science!  You
-have  finally  freed  mankind.  You  have  given  us  and  will
-henceforth provide for us everything -- food -- wonderful  food
--- clothing  of  the  best  quality and in any quantity, and to
-suit any taste! -- shelter -- magnificent shelter.  Love,  joy,
-satisfaction,  and  for  those  desiring  it, for those who are
-fatigued by happiness --  tears,  sweet  tears,  little  saving
-sorrows,  pleasant consoling worries which lend us significance
-in our own eyes.... Yes, we philosophers have maligned  science
-long  and  angrily.  We  called  forth  Luddites,  to  break up
-machines, we cursed Einstein, who changed our  whole  universe,
-we  vilified Wiener, who impugned our godlike essence. Well, so
-we really lost that godlike substance. Science robbed us of it.
-But in return! In return,  it  launched  men  to  the  feasting
-tables  of Olympus. Aha! Here is the potato soup, that heavenly
-porridge. No, no, do as I do... take this  spoon,  a  touch  of
-vinegar...  a  dash of pepper... with the other spoon, this one
-here, dip some sour cream and... no, no... gently,  gently  mix
-it.... This too is a science, one of the most ancient, older in
-any  cue  than  the  ubiquitous synthetic.... By the way, don't
-fail to visit  our  synthesizers,  Amalthea's  Horn,  Inc.  You
-wouldn't  be  a  chemist?  Oh  yes,  you are a litterateur! You
-should write about it,  the  greatest  mystery  of  our  times,
-beefsteaks  out of thin air, asparagus from clay, truffles from
-sawdust.... What a pity that Malthus is dead'! The whole  world
-would be laughing at him! Of course, he had certain reasons for
-his  pessimism.  I am prepared to agree with those who consider
-him a genius. But he was too ill-informed, he completely missed
-the possibilities in the natural sciences. He was one of  those
-unlucky  geniuses  who  discover  laws  of  social  development
-precisely at that moment when these laws cease to operate. I am
-genuinely sorry for him. The whole of humanity was but billions
-of hungrily gaping mouths to him. He must have lost sleep  from
-the  sheer horror of it. It is a truly monstrous nightmare -- a
-billion gaping maws and not one head. I  turned  back  and  see
-with  bitterness  how blind they were, the shakers of souls and
-the masters of the minds of the recent  past.  Their  awareness
-was dimmed by unbroken horror. Social Darwinists! They saw only
-the  press  of the struggle for survival: mobs of hunger-crazed
-people, tearing each other to pieces for a place in the sun, as
-though there was only that one single place, as though the  sun
-wasn't  sufficient  for  all!  And  Nietzsche...  maybe  he was
-suitable for the hungry slaves of the Pharaohs' times, with his
-ominous sermons about the master race, with his supermen beyond
-good and evil... who needs to be beyond now? It's not so bad on
-this side, don't you suppose? There were, of course,  Marx  and
-Freud.  Marx,  for example, was the first to understand that it
-all depended on  economics.  He  understood  that  to  rip  the
-economics   out   of   the  hands  of  greedy  nincompoops  and
-fetishists, to make  it  part  of  the  state,  to  develop  it
-limitlessly,  was  the  very  way  to  lay the foundations of a
-Golden Age. And Freud showed us for what, after all, we  needed
-this  Golden  Age.  Recollect  the  source of all human misery.
-Unsatisfied instincts, unrequited love, and unsated  hunger  --
-isn't  that  right?  But  here  comes Her Majesty, Science, and
-presents us with satisfactions. And how rapidly  all  this  has
-come  to  pass! The names of gloomy prognosticators are not yet
-forgotten, and already... How do you like the  sturgeon?  I  am
-under  the  impression  that the sauce is synthetic. Do you see
-the pinkish tint? Yes, it is  synthetic.  In  a  restaurant  we
-should  be  able  to  expect  natural  sauce. Waiter! On second
-thought -- the devil take it, let's not be so finicky.  Go  on,
-go  on...  Now what was I saying? Yes! Love and hunger. Satisfy
-love and hunger, and you'll see a happy man. On  condition,  of
-course,  that  your  man  is secure about the next day. All the
-utopias  of  all  times  are  based   on   this   simplest   of
-considerations.  Free  a man of the worry about his daily bread
-and about the morrow, and he will become truly free and  happy.
-I  am  deeply  convinced  that  children,  yes,  precisely  the
-children, are man's ideal. I see the most profound  meaning  in
-the  remarkable similarity between a child and the carefree man
-who is the object of utopia. Carefree means happy -- and we are
-so close to that ideal! Another few decades, or  maybe  just  a
-few  more  years,  and  we will attain the automated plenty, we
-will discard science as a healed man discards his crutches, and
-the whole of mankind will  become  one  huge  happy  family  of
-children.  The  adults  will be distinguished from the children
-only by their ability to love, and  this  ability  will,  again
-with  the  help  of  science,  become  the  source  of  new and
-unheard-of joys and pleasures.... Excuse me, what is your name?
-Ivan? So, you must be  from  Russia.  Communist?  Aha...  well,
-everything  is  different  there  I  know....  And  here is the
-coffee! Mm, not bad. But where is the cognac? Well, thank  you!
-By  the way, I hear that the Great Wine Taster has retired. The
-most grandiose  scandal  befell  at  the  Brussels  contest  of
-cognacs,  which  was  suppressed  only  with  the  greatest  of
-difficulties. The Grand Prix is awarded to  the  White  Centaur
-brand.   The   jury  is  delighted!  It  is  something  totally
-unprecedented! Such a phenomenal  extravaganza  of  sensations!
-The  declaratory  packet  is  opened,  and,  oh horrors, it's a
-synthetic! The Great Wine Taster turned as white as a sheet  of
-paper  and was physically ill. By the way, I had an opportunity
-to try this cognac, and it's really superb,  but  they  run  it
-from  crude  and  it  doesn't  even  have  a  proper name. H ex
-eighteen naphtha fraction  and  it's  cheaper  than  hydrolyzed
-alcohol....  Have a cigar. Nonsense, what do you mean you don't
-smoke? It's not right not to have a cigar after a  dinner  like
-this....  I  love  this  restaurant.  Every time I come here to
-lecture at the university, I dine at the  Olympic.  And  before
-returning, I invariably visit the Tavern. True, they don't have
-the greenery, nor the tropical birds, and it's a bit stuffy and
-warm  and  smells of smoke, but they have a genuine, inimitable
-cuisine. The Assiduous Tasters gather nowhere but there  --  at
-the  Gourmet.  In  that place you do nothing but eat. You can't
-talk, you can't laugh, it's totally  nonsensical  to  go  there
-with a woman -- you only eat there! Slowly, thoughtfully..."
-     Doctor  Opir  finally  ran down, leaned back in his chair,
-and inhaled deeply with total enjoyment. I sucked on the mighty
-cigar and contemplated the man. I had  him  well  pegged,  this
-doctor  of  philosophy. Always and in all times there have been
-such men, absolutely pleased with their  situation  in  society
-and  therefore  absolutely satisfied with the condition of that
-society. A marvelously well-geared tongue  and  a  lively  pen,
-magnificent  teeth  and  faultless innards, and a well-employed
-sexual apparatus.
-     "And so the world is beautiful, Doctor?"
-     "Yes," said  the  doctor  with  feeling,  "it  is  finally
-beautiful."
-     "You are a gigantic optimist," said I.
-     "Our  time  is the time of optimists. Pessimists go to the
-Good Mood Salon, void the gall  from  their  subconscious,  and
-become  optimists.  The  time of pessimists has passed, just as
-the time of tuberculars, of sexual maniacs, and of the military
-has passed. Pessimism, as an  intellectual  emotion,  is  being
-extirpated  by  that self-same science. And that not indirectly
-through the creation of affluence, but  concretely  by  way  of
-invasion  of  the  dark  world of the subcortex. Let's take the
-dream generator, currently the most popular  diversion  of  the
-masses.  It  is  completely harmless, unusually well adopted to
-general use,  and  is  structurally  simple.  Or  consider  the
-neurostimulators...."
-     I attempted to steer him into the desired channel.
-     "Doesn't   it   seem  to  you  that  right  there  in  the
-pharmaceutical field science is overdoing it a bit sometimes?"
-     Doctor Opir smiled  condescendingly  and  sniffed  at  his
-cigar.
-     "Science  has  always  moved  by trial and error," he said
-weightily. "And I am inclined to  believe  that  the  so-called
-errors  are  always  the  result  of  criminal  application. We
-haven't yet entered the Golden Age, we are just in the  process
-of  doing  so,  and all kinds of throwbacks, mobsters, and just
-plain dirt are under foot. So all kinds of drugs  are  put  out
-which  are  health-destroying,  but  which  are created, as you
-know, from the best of motives; all kinds of aromatics  ...  or
-this...  well,  that  doesn't  suit  a dinner conversation." He
-cackled suddenly and obscenely "You can guess my meaning --  we
-are  mature  people!  What  was  I  saying?  Oh  yes,  all this
-shouldn't disturb you. It will pass just like the atom bombs."
-     "I only wanted to emphasize," I remarked, "that  there  is
-still the problem of alcoholism, and the problem of narcotics."
-     Doctor  Opir's  interest  in  the conversation was visibly
-ebbing. Apparently he imagined that  I  challenged  his  thesis
-that  science  is  a boon. To conduct an argument on this basis
-naturally bored him, as  though,  for  instance,  he  had  been
-affirming  the  salubriousness  of  ocean  swimming  and  I was
-contradicting him on the basis that I had almost  drowned  last
-year.
-     "Well,  of  course..." he mumbled, studying his watch, "we
-can't have it all at once.... You must admit, after  all,  that
-it is the basic trend which is the most important.... Waiter!"
-     Doctor  Opir  had  eaten  well, had a good conversation --
-professing progressive philosophy -- felt well-satisfied, and I
-decided not to press the matter, especially as I really  didn't
-give  a  hang  about  his  progressive philosophy, while in the
-matters which interested me the most, he probably would not  be
-concretely informed at all in the final analysis.
-     We paid up and went out of the restaurant. I inquired, "Do
-you ]mow,  Doctor,  whose  monument  that is? Over there on the
-plaza."
-     Doctor Opir gazed absent-mindedly. "Sure  enough,  it's  a
-monument," he said. "Somehow I overlooked it before.... Shall I
-drop you somewhere?"
-     "Thank you, I prefer to walk."
-     "In  that case, goodbye. It was a pleasure to meet you....
-Of course it's hard to expect to convince  you."  He  grimaced,
-shifting  a  toothpick  around  his  mouth.  "But  it  would be
-interesting to try. Perhaps you will attend my lecture? I begin
-tomorrow at ten."
-     "Thank you," I said. "What is your topic?"
-     "Neo-optimist Philosophy. I will be sure to touch  upon  a
-series of questions which we have so pithily discussed today."
-     "Thank you," I said again. "Most assuredly."
-     I  watched as he went to his long automobile, collapsed in
-the seat, puttered with  the  auto-driver  control,  fell  back
-against  the seat back, and apparently dozed off instantly. The
-car began to roll cautiously across the plaza  and  disappeared
-in the shade and greenery of a side street.
-     Neo-optimism...      Neo-hedonism...      Neo-cretinism...
-Neo-capitalism... "No evil without good," said the fox.  So,  I
-have  landed in the Country of the Boobs. It should he recorded
-that the ratio of congenital fools does not vary as a  function
-of  time.  It  should  be  interesting  to  determine  what  is
-happening to the percentage of fools by conviction. Curious  --
-who  assigned  the  title  of Doctor to him? He is not the only
-one! There  must  have  been  a  whole  flock  of  doctors  who
-ceremoniously granted that title to Neo-optimist Opir. However,
-this occurs not only among philosophers.
-     I saw Rimeyer come into the hall and forgot Doctor Opir at
-once.  The  suit  hung on Rimeyer like a sack. Rimeyer stooped,
-and his face was flabby. I thought he wavered in his  walk.  He
-approached the elevator and I caught him by the sleeve there.
-     He jumped violently and turned on me.
-     "What in hell?" he said. He was clearly unhappy to see me.
-     "Why are you still here?"
-     "I waited for you."
-     "Didn't I tell you to come tomorrow at noon?"
-     "What's the difference?" I said. "Why waste time?"
-     He looked at me, breathing laboriously.
-     "I am expected. A man is waiting for me in my room, and he
-must not see you with me. Do you understand?"
-     "Don't shout," I said. "People are noticing."
-     Rimeyer glanced sideways with watery eyes.
-     "Go in the elevator," he said.
-     We  entered  and  he  pressed the button for the fifteenth
-floor.
-     "Get on with your business quickly," he said.
-     The  order  was  startlingly  stupid,  so   that   I   was
-momentarily disoriented.
-     "You mean to say that you don't know why I am here?"
-     He rubbed his forehead, and then said, "Hell, everything's
-mixed up.... Listen, I forgot, what is your name?"
-     "Zhilin."
-     "Listen, Zhilin, I have nothing new for you. I didn't have
-time to  attend  to  that  business.  It's  all a dream, do you
-understand? Matia's inventions. They sit there, writing papers,
-and invent. They should all be pitched the hell out."
-     We arrived at the  fifteenth  floor  and  he  pressed  the
-button for the first.
-     "Devil  take  it,"  he  said. "Five more minutes and he'll
-leave.... In general I am convinced  of  one  thing,  there  is
-nothing  to it. Not in this town, in any case." He looked at me
-surreptitiously, and turned his eyes away. "Here is something I
-can tell you. Look in at the Fishers. Just like that, to  clear
-your conscience."
-     "The Fishers? What Fishers?"
-     "You'll  find out for yourself," he said impatiently. "But
-don't get tricky with them. Do everything they ask."  Then,  as
-though   defending   himself,  he  added,  "I  don't  want  any
-preconceptions, you understand."
-     The elevator stopped at the first floor  and  he  signaled
-for the ninth.
-     "That's it," he said. "Then we'll meet and talk in detail.
-Let's say tomorrow at noon."
-     "All  right,"  I said slowly. He obviously did not want to
-talk to me. Maybe he didn't trust me. Well, it happens!
-     "By the way," I said, "you have been visited by a  certain
-Oscar."
-     It seemed to me that he started.
-     "Did he see you?"
-     "Naturally.  He  asked  me  to  tell  you  that he will be
-calling tonight."
-     "That's bad, devil take  it,  bad...."  muttered  Rimeyer.
-"Listen... damn, what is your name?"
-     "Zhilin."
-     The elevator stopped.
-     "Listen,  Zhilin,  it's  very bad that he has seen you....
-However, what the hell is the difference. I must  go  now."  Re
-opened  the  elevator  door,  "Tomorrow  we'll have a real good
-talk, okay? Tomorrow... and you look in on the Fishers. Is that
-a deal?"
-     He slammed the door with all his strength.
-     "Where will I look for them?" I asked.
-     I stood awhile, looking after him. He was almost  running,
-receding down the corridor with erratic steps.
-
-<ul><a name=5></a><h2>Chapter FIVE</h2></ul>
-
-     I  walked  slowly,  keeping to the shade of the trees. Now
-and then a car rolled by. One of these stopped and  the  driver
-threw  open  the door, leaned out, and vomited on the pavement.
-He cursed weakly, wiped his mouth with his  palm,  slammed  the
-door,  and  drove  off.  He was on the elderly side, red-faced,
-wearing a loud shirt with nothing under it.
-     Rimeyer  apparently  had  turned  into  a  drunkard.  This
-happens  fairly  often:  a  man  tries  hard,  works  hard,  is
-considered a valuable contributor, he is listened to  and  made
-out as a model, but just when he is needed for a concrete task,
-it  suddenly turns out that he has grown puffy and flabby, that
-wenches are running in and out of his place, and that he smells
-of vodka from early morning.... Your business does not interest
-him, while at  the  same  time,  he  is  frightfully  busy,  is
-constantly  meeting someone, talks confusingly and murkily, and
-is of no help whatsoever. And then he turns up in the alcoholic
-ward, or a mental clinic, or is involved in a legal process. Or
-he gets married unexpectedly -- strangely and  ineptly  --  and
-this  marriage  smells  strongly of blackmail. ... One can only
-comment: "Physician, heal thyself."
-     It would still be nice to hunt up Peck. Peck  is  hard  as
-flint, honest, and he always knows everything. You haven't even
-finished  the  rundown  on  the tech control, and haven't had a
-chance to get off the ship, before he is buddy-buddy  with  the
-cook,   is   already   fully   informed  and  involved  in  the
-investigation of the  dispute  between  the  Commander  of  the
-Pathfinders  and  the  chief  engineer,  who  didn't settle the
-matter of some prize; the technicians are already  planning  an
-evening  in  his honor, and the deputy director is listening to
-his advice in a quiet corner... Priceless Peck! He was born  in
-this city and has spent a third of his life here.
-     I  found  a telephone booth, and rang information for Peck
-Xenai's number and address. I was asked to wait. As usual,  the
-booth  smelled  of  cats.  The  plastic  shelf was covered with
-telephone numbers and obscene images. Someone had carved  quite
-deeply,  as with a knife, the strange word "SLUG." I opened the
-door,  to  lighten  the  string  atmosphere,  and  watched  the
-opposite  shady  side  of  the  street, where a barman stood in
-front of his establishment in a  white  jacket  with  rolled-up
-sleeves, smoking a cigarette. Then I was told that according to
-the  data  at the beginning of the year, Peck resided at No. 31
-Liberty Street, number  11-331.  I  thanked  the  operator  and
-dialed the number at once. A strange voice told me that I had a
-wrong  number.  Yes,  the  number  was  correct, and so was the
-address, but no Peck lived there, and if he  had,  they  didn't
-know  when  he  left  or where he had gone. I hung up, left the
-booth, and crossed the street to the shady side.
-     Catching my eye, the barman came to  life  and  said  from
-afar, "Come in, why don't you?"
-     "Don't know that I'd like to," I said.
-     "So  you won't be friendly, eh?" he said. "Come in anyway.
-We'll have a talk. I feel bored."
-     I stopped.
-     "Tomorrow morning,"  I  said,  "at  ten  o'clock,  at  the
-university, there will be a philosophy lecture on Neo-optimism.
-It will be given by the renowned Doctor Opir from the capital.
-     The  barman listened with avid interest -- he even stopped
-inhaling.
-     "How do you like that!" he said. "So  they  have  come  to
-that!  The  day before yesterday, they chased all the girls out
-of a night club, and now they'll be having lectures. We'll show
-them lectures!"
-     "It's about time," I said.
-     "I  don't  let  them  in,"  he  continued,  getting   more
-animated.  "I  have  a  sharp eye for them. A guy could be just
-approaching the  door,  when  I  can  spot  him  for  an  Intel
-'Fellows,'  I  say,  'an Intel is coming.' And the boys are all
-well picked; Dodd himself is here every night  after  training.
-So,  he  gets  up and meets this Intel at the door, and I don't
-even know what goes on between  them,  but  be  passes  him  on
-elsewhere.  Although  it's  true  that sometimes they travel in
-bunches. In that case, so there wouldn't be a  to-do,  we  lock
-the door -- let them knock. That's the right way, isn't it?"
-     'That's  okay  by  me,"  I  said. I had had enough of him.
-There are people who pall unusually quickly. "Let them."
-     "What do you mean -- let them?"
-     "Let them knock. In other words, knock on any door."
-     The barman looked at me with growing alertness.
-     "What say you move on," he said.
-     "How about a quick one," I offered.
-     "Move along, move along," he said. "You won't  get  served
-here."
-     We   looked   at  each  other  awhile,,  then  he  growled
-something, backed up, and slid the glass door in front of him.
-     "I am no Intel," I said. "I am  a  poor  tourist.  A  rich
-one."
-     He looked at me with his nose flattened against the glass.
-I made  a  motion  as  though knocking a drink back. Re mumbled
-something and went back into the darkness of  the  place  --  I
-could see him wandering aimlessly among empty tables. The place
-was called the Smile. I smiled and went on.
-     Around  the  corner  was  a wide main thoroughfare. A huge
-van, plastered with advertisements, was parked by the curb. Its
-back was  swung  down  for  a  counter,  on  which  were  piled
-mountains    of    cans,   bottles,   toys,   and   stacks   of
-cellophane-wrapped clothing and underwear.  Two  teenage  girls
-twittered  some  sort  of  nonsense  while  selecting  blouses.
-"Pho-o-ny," squeaked one. The other, turning  the  blouse  this
-way  and  that,  replied,  "Spangles,  spangles and not phony."
-"Here by the neck  it  phonies."  "Spangles."  "Even  the  star
-doesn't glimmer."
-     The  driver of the van, a gaunt man with huge, horn-rimmed
-dark glasses, sat on the step of the advertising  rotunda.  His
-eyes  were  not  visible, but, judging by his relaxed mouth and
-sweat-beaded nose, he was asleep. I approached the counter. The
-girls stopped talking and stared at me with parted mouths. They
-must have been about sixteen, and their eyes  were  vacant  and
-blue, like those of young kittens.
-     "Spangles," I said. "No phonying and lots of sparkle."
-     "And around the neck?" asked the one who was trying on the
-blouse.
-     "Around the neck it's practically a masterpiece."
-     "Spangles," said the other uncertainly.
-     "OK,  let's  look  at  another  one,"  offered  the  first
-peacefully. "This one here."
-     "This one is better, the silvery one with the frame."
-     I saw books. They were  magnificent  books.  There  was  a
-Strogoff  with such illustrations as I had never even heard of.
-There was  <i>Change  of  Dream</i>  with  an  introduction  by
-Saroyan.  There  was a Walter Mintz in three volumes. There was
-almost an entire Faulkner, <i>The New  Politics</i>  by  Weber,
-<i>Poles  of  Magnificence</i>  by Ignatova, The <i>Unpublished
-Sian She-Cuey</i>, <i>History of Fascism</i> in the "Memory  of
-Mankind"  edition.  There were current magazines, and almanacs,
-pocket Louvres, Hermitage, and Vatican. There  was  everything!
-"It  phonies too but it has a frame." "Spangles." I grabbed the
-Mintz. Holding the two volumes  under  my  arm,  I  opened  the
-third. Never have I seen such a complete Mintz. There were even
-the Ã©migré letters.
-     "How much will that be?" I called.
-     The  girls  gaped again; the driver sucked in his lips and
-sat up.
-     "What?" he said huskily.
-     "Who is the owner here?" I said.
-     He got up and came to me.
-     "What would you like?"
-     "I want this Mintz. How much is it?"
-     The girls giggled.  He  stared  at  me  in  silence,  then
-removed his glasses.
-     "You are a foreigner?"
-     "Yes, I am a tourist."
-     "It's the most complete Mintz."
-     "Of course, I can see that. I was stunned when I saw it."
-     "Me too," he said, "when I saw what you were after."
-     "He is a tourist," twittered one of the girls. "He doesn't
-understand."
-     "It's all free," said the driver. "Personal needs fund. To
-take care of personal needs."
-     I looked back at the bookshelf.
-     "Did you see <i>Change of Dream</i>?" asked the driver.
-     "Yes, thank you, I have it."
-     "About Strogoff I will not even inquire."
-     "How about the <i>History of Fascism</i>?"
-     "An excellent edition."
-     The  girls  giggled  again.  The  driver's  eyes popped in
-sudden wrath.
-     "Scram, snot faces," he barked.
-     The girls jumped. One of them thievishly  grabbed  several
-blouse packages. They ran across the street, where they stopped
-and continued to gaze at us.
-     "With frames!" said the driver. His thin lips twitched. "I
-should drop this whole idea. Where do you live?"
-     "On Second Waterway."
-     "Aha, in the thick of the mire.... Let's go -- I will drop
-you off.  I  have a complete Schedrin in the van, which I don't
-even exhibit; I have the entire  classics  library;  the  whole
-Golden Library, the complete Treasures of Philosophic Thought."
-     "Including Doctor Opir's?"
-     "Bitch  tripe,"  said  the driver. "Salacious bum! Amoeba!
-Rut do you know Sliy?"
-     "Not much," I said. "I don't like him.  Neo-individualism,
-as Doctor Opir would say."
-     "Doctor  Opir  stinks,"  said the driver. "While Sliy is a
-real man. Of course, there is the individualism. But  at  least
-he  says  what  he  thinks and does what he says. I'll get some
-Sliy for you.... Listen, did you see this? And this!"
-     He dug himself up to his elbows in books. He stroked  them
-tenderly and his face shone with rapture.
-     "And this," he kept on. "And how about this Cervantes?"
-     An  oldish lady of imposing bearing approached and started
-to pick over the canned goods.
-     "You still don't have Danish pickles... didn't I  ask  you
-to get some?"
-     "Go to hell," said the driver absent-mindedly.
-     The woman was stunned. Her face slowly turned crimson.
-     "How dare you!" she hissed.
-     The driver looked at her bullishly.
-     "You heard what I said. Get out of here!"
-     "Don't you dare!" said the woman. "What is your number?"
-     "My    number   is   ninety-three,"   said   the   driver,
-"Ninety-three -- is that clear enough? And I  spit  on  all  of
-you. Is that clear? Any other questions?"
-     "What  a  hooliganism!"  said  the woman with dignity. She
-took two cans of delicacies,  scanned  the  counter,  and  with
-great  precision,  ripped  the  cover off the <i>Cosmic Man</i>
-magazine. "I'll remember you, number ninety-three! These aren't
-the old times for you." She wrapped the two cans in the  cover.
-"We'll see each other in the municipal court."
-     I  took a firm hold on the driver's arm. His rigid muscles
-gradually relaxed.
-     "The nerve!" said she majestically and departed.
-     She stepped  along  the  sidewalk,  proudly  carrying  her
-handsome  head,  which  was  topped  with  a  high  cylindrical
-coiffure. She stopped at the corner, opened one  of  the  cans,
-and proceeded to pick out chunks with elegant fingers.
-     I released the driver's arm.
-     "They  ought  to  be shot," he said suddenly. "We ought to
-strangle them instead of dispensing pretty books to  them."  He
-turned  toward  me,  and  I  could  see his eyes were tortured.
-"Shall I deliver your books?"
-     "Well, no," I said. "Where will I put them?"
-     "In that case, shove off," said the driver. "Did you  take
-your Mintz? Then go and wrap your dirty pantaloons in it."
-     He climbed up into the cab. Something clicked and the back
-door began  to  rise.  You  could  hear everything crashing and
-rolling inside the van. Several books and some  shiny  packets,
-boxes,  and  cans  fell on the pavement. The rear panel had not
-yet closed completely when the driver shut his door and the van
-took off with a jerk.
-     The girls had already disappeared. I stood  alone  on  the
-empty  street  and  watched  the  wind lazily turn the pages of
-History of Fascism at my feet. Later a gang of kids in  striped
-shorts  came  around the corner. They walked by silently, hands
-stuck in their pockets. One jumped down  on  the  pavement  and
-began  to  kick  a can of pineapple, with a slick pretty cover,
-like a football down the street.
-
-<ul><a name=6></a><h2>Chapter SIX</h2></ul>
-
-     On the way home, I was overtaken by the change of  shifts.
-The  streets  filled  up with cars. Controller copters appeared
-over the intersections, and sweaty  police  cleared  constantly
-threatening  jams  with  roaring  bull  horns.  The  cars moved
-slowly, and the drivers stuck heads out of windows to light  up
-from  each  other,  to  yell,  to talk and joke while furiously
-blowing their horns. There was a instant  screech  of  clashing
-bumpers.  Everyone  was  happy,  everyone was good-natured, and
-everyone glowed with savage glee. It seemed as though  a  heavy
-load  had  just  fallen  from  the  soul of the city, as though
-everyone was seized with an enviable anticipation. Fingers were
-pointed at me and the other pedestrians. Several  times  I  was
-prodded  with bumpers while crossing -- the girls doing it with
-the utmost good nature. One of  them  drove  alongside  me  for
-quite   a  while,  and  we  got  acquainted.  Then  a  line  of
-demonstrators  with  sober  faces  walked  by  on  the  median,
-carrying  signs.  The  signs  appealed  to  people  to join the
-amateur club ensemble Songs of the  Fatherland,  to  enter  the
-municipal  Culinary  Art  groups,  and to sign up for condensed
-courses in motherhood and childhood. The people with signs were
-nudged by bumpers with special enthusiasm.  The  drivers  threw
-cigarette  butts,  apple  cores,  and  paper wads at them. They
-yelled such things as "I'll subscribe at once, just wait till I
-put my galoshes on," or "Me,  I'm  sterile,"  or  "Say,  buddy,
-teach  me  motherhood."  The  sign  carriers continued to march
-slowly in between the two solid streams  of  cars,  unperturbed
-and sacrificial, looking straight ahead with the sad dignity of
-camels.
-     Not far from my house, I was set upon by a flock of girls,
-and when  I finally struggled through to Second Waterway, I had
-a white aster in my lapel and drying kisses on my  cheeks,  and
-it seemed I had met half the girls in town. What a barber! What
-a Master!
-     Vousi,  in  a  flaming  orange  blouse, was sitting in the
-chair in my study. Her long legs in pointy shoes rested on  the
-table,  while  her  slender fingers held a long slim cigarette.
-With her head thrown back, she was  blowing  thick  streams  of
-smoke at the ceiling, through her nose.
-     "At long last!" she cried, seeing me. "Where have you been
-all this time? As you can see, I've been waiting for you."
-     "I've  been delayed," I said, trying to recollect if I had
-indeed promised to meet her.
-     Wipe off the lipstick," she  demanded.  "You  look  silly!
-What's this? Books? What do you need books for?"
-     "What do you mean by that?"
-     "You  are  really  quite a problem! Comes back late, hangs
-around with books. Or are those pornos?"
-     "It's Mintz," I said.
-     "Let me have them!" She jumped up and snatched  the  books
-out  of  my  grasp.  "Good  God! What nonsense -- all three are
-alike. What is it?  <i>History  of  Fascism</i>...  are  you  a
-Fascist?"
-     "How can you say that, Vousi!"
-     "Then,  what do you need them for? Are you really going to
-read them?"
-     "Reread them."
-     "I just don't understand," she said  peevishly.  "I  liked
-you from the first. Mother says you're a writer, and I went and
-bragged  to  everyone, like a fool, and then you turn out to be
-the next thing to an Intel."
-     "How could you, Vousi!" I said with reproach. By now I had
-realized that it was impermissible to be taken  for  an  Intel.
-"These  bookos  were  simply  needed  in  my literary business,
-that's all."
-     "Bookos!" she laughed. "Bookos! Look at what  I  can  do."
-She threw back her head and blew two thick streams of smoke out
-of  her  nostrils.  "I  got  it on the second try. Pretty good,
-right?"
-     "Remarkable aptitude," I remarked.
-     "Instead of laughing at me, you should  try  it  yourself.
-... A lady taught me at the salon today. Slobbered all over me,
-the fat cow... Will you try it?"
-     "How come she did that?"
-     "Who?"
-     "The cow."
-     "Not  normal.  Or maybe a sad sack.... What's your name? I
-forgot."
-     "Ivan."
-     "An amusing name! You'll have to remind me again. Are  you
-a Tungus?"
-     "I don't think so."
-     "So-o...  and  I  went  and  told  everyone that you are a
-Tungus. Too bad.... Say, why not have a drink?"
-     "Let's."
-     "Today I  should  have  a  strong  drink  to  forget  that
-slobbering cow."
-     She  ran  out  into  the  living room and came back with a
-tray. We had some brandy and looked at each other,  not  having
-anything  to say. I felt ill at ease. I couldn't say why, but I
-liked her. I sensed something,  something  I  couldn't  put  my
-finger   on;   something   which  distinguished  her  from  the
-long-legged, smooth-skinned pin-up beauties, good only for  the
-bed. I had the impression that she sensed something in me, too.
-     "Beautiful day, today," she said, looking away.
-     "A bit hot," I observed.
-     She sipped some brandy; I did too. The silence stretched.
-     "What do you like to do the most?" she asked.
-     "It depends. And you?"
-     "Same with me. In general, I like to have fun and not have
-to think about anything."
-     "So do I," I said. "At least I do right now."
-     She seemed to perk up a little. I understood suddenly what
-was the  matter:  during  the whole day, I had not met a single
-truly pleasant person, and I simply had  gotten  tired  of  it.
-There was nothing to her, after all.
-     "Let's go somewhere," she said.
-     "We could," I said. I really didn't want to go anywhere, I
-wanted to sit and relax in the cool room for a while.
-     "I can see you're not too eager," she said.
-     "To  be  honest,  I  would prefer to sit around here for a
-bit."
-     "Well then, amuse me."
-     I considered the problem, and recounted the story  of  the
-traveling salesman in the upper bunk. She liked it, but I think
-she  missed  the point. I made a correction in my aim, and told
-her the one about the president and the old maid. She laughed a
-long time, kicking her  wonderfully  long  legs.  Then,  taking
-courage  from  another  shot  of brandy, I told about the widow
-with the mushrooms growing on the wall. She slid  down  to  the
-floor  and  almost knocked over the tray. I picked her up under
-the armpits, hoisted her back up in the  chair,  and  delivered
-the  story of the drunk spaceman and the college girl, at which
-point Aunt Vaina came rushing in and  inquired  fearfully  what
-was  going  on  with  Vousi,  and  whether  I  was tickling her
-unmercifully. I poured  Aunt  Vaina  a  glass,  and  addressing
-myself  to her personally, recounted the one about the Irishman
-who wanted to be a gardener. Vousi  was  completely  shattered,
-but  Aunt  Vaina  smiled  sorrowfully  and  confided that Major
-General Tuur liked to tell the same story, when  he  was  in  a
-good mood. But in it there was, she thought, a Negro instead of
-the Irishman, and he aspired to the duties of a piano tuner and
-not  a  gardener.  "And you know, Ivan, the story ended somehow
-differently," she added after some thought.  At  this  point  I
-noticed Len standing in the doorway, looking at us. I waved and
-smiled  at him. He seemed not to notice, so I winked at him and
-beckoned for him to come in.
-     "Whom are you winking at?" asked Vousi, through  lingering
-laughter.
-     "It's Len," I said. It was really a pleasure to watch her,
-as I love  to see people laugh, especially such a one as Vousi,
-beautiful and almost a child.
-     "Where's Len?" she wondered.
-     There was no Len in the doorway.
-     "Len isn't here," said Aunt Vaina, who  was  sniffing  the
-brandy with approval, and did not notice a thing. "The boy went
-to the Ziroks' birthday party today. If you only knew, Ivan..."
-     "But why does he say it was Len?" asked Vousi, glancing at
-the door again.
-     "Len  was here," I said. "I waved at him, and be ran away.
-You know, he looked a bit wild to me."
-     "Ach, we have a  highly  nervous  boy  there,"  said  Aunt
-Vaina.  "He  was  born  in a very difficult time, and they just
-don't know how to deal with a nervous  child  in  these  modern
-schools. Today I let him go visit."
-     "We'll  go,  too,  now," said Vousi. "You'll walk with me.
-I'll just fix myself up, because on account of  you  everything
-got  smeared.  In  the  meantime, you can put on something more
-decent."
-     Aunt Vaina wouldn't have minded staying behind to tell  me
-a  few  more things and maybe show me a photo album of Len, but
-Vousi dragged her off and I heard her ask her mother behind the
-door, "What's his name? I just can't remember it. He is a jolly
-fellow, isn't he?"
-     "Vousi!" admonished Aunt Vaina.
-     I laid out my entire wardrobe on  the  bed  and  tried  to
-imagine what Vousi would consider a decently dressed man. Until
-now,  I had thought I was dressed quite satisfactorily. Vousi's
-heels were already beating an impatient rat-a-tat on the  study
-floor. Not having come up with anything, I called her in.
-     "That's all you have?" she asked, wrinkling her nose.
-     "It really isn't good enough?"
-     "Well,  it  will pass. Take off the jacket and put on this
-Hawaiian shirt... or better yet, this one here. They sure  have
-dressing  problems in your Tungusia! Hurry up. No, no, take off
-the shirt you have on."
-     "You mean, without an undershirt?"
-     "You know, you really are a Tungus. Where do you think you
-are going -- to the pole or to Mars?  What's  this  under  your
-shoulder blade?"
-     "A  bee  stung me," I said, hurriedly pulling on my shirt.
-"Let's go!"
-     The street was already dark. The fluorescents shone palely
-through dark foliage.
-     "Which way are we bound?" I asked.
-     "Downtown, of course.... Don't grab my arm, it's  hot!  At
-least you know how to fight, I hope?"
-     "I know how."
-     "That's good. I like to watch."
-     "To watch, I like, too," I said.
-     There  were  a  lot more people out in the streets than in
-the daytime. Under  the  trees,  in  the  bushes,  and  in  the
-driveways  there  were groups of unsettled-looking individuals.
-They furiously smoked  crackling  synthetic  cigars,  guffawed,
-spat  negligently  and  often,  and spoke in loud rough voices.
-Over each group hung the racket of radio receivers.  Under  one
-streetlight  a  banjo  twanged, and two youngsters, twisting in
-weird contortions  and  yelling  out  wildly,  were  performing
-fling,  a  currently fashionable dance, a dance of great beauty
-when properly executed. The youngsters knew  how.  Around  them
-stood  a  small  crowd, also yelling lustily and clapping their
-hands in rhythm.
-     "Shall we have a dance?" I offered.
-     "But no, no..." hissed Vousi, taking me by  the  hand  and
-increasing her pace.
-     "And why not? You do fling?"
-     "I'd sooner hop with alligators than this crowd."
-     "Too bad," I said, "They look like regular fellows."
-     "Yes,  each  one  by  himself,"  said  Vousi,  "and in the
-daytime."
-     They  hung  around  on   the   corners,   huddled   around
-streetlights,   gauche,   smoked  to  the  gills,  leaving  the
-sidewalks  behind  them  strewn  with  bits  of  candy   paper,
-cigarette  butts,  and  spittle.  They  were  nervous and showy
-melancholic, yearning, constantly looking around, stooped. They
-were awfully anxious not to look like others, and at  the  same
-time,  assiduously imitated each other and two or three popular
-movie stars. There were really not that many,  but  they  stood
-out  like  sore  thumbs,  and it always seemed to me that every
-town and the whole  world  was  filled  with  them  --  perhaps
-because  every  city  and  the  whole world belonged to them by
-night. And to me, they seemed full of some dark mystery, But  I
-too used to stand around of evenings in the company of friends,
-until  some  real people turned up and took us off the streets,
-and many a time I have seen the same groups in all  the  cities
-of  the world, where there was a lack of capable men to get rid
-of them. But I never did understand to the very end what  force
-it  is  that turns these fellows away from good books, of which
-there are so many, from sport  establishments,  of  which  this
-town  had  plenty,  and even from ordinary television sets, and
-drives them out in the night streets with cigarettes  in  their
-teeth  and  transistor sets in their ears, to stand and spit as
-far as possible, to guffaw as offensively as possible,  and  to
-do  nothing.  Apparently at fifteen, the most attractive of all
-the  treasures  in  the  world  is  the  feeling  of  your  own
-importance  and  ability to excite everyone's admiration, or at
-least attract attention. Everything else seems unbearably  dull
-and  dreary,  including,  perhaps  above  all, those avenues of
-achieving the desirable which are offered by the tired world of
-adults.
-     "This is where old Rouen lives," said Vousi. "He has a new
-one with him every night. The old turnip has managed it so that
-they all come to him of their own will. During the fracas,  his
-leg  was  blown off.... You see there is no light in his place,
-they are listening to the hi-fi. On top of which, he's ugly  as
-mortal sin."
-     "He   lives   well   who   has   but   one  leg,"  I  said
-absent-mindedly.
-     Of course she had to giggle at this, and continued.
-     "And here lives Seus. He is a Fisher. Now  there's  a  man
-for you!"
-     "Fisher,"   I   said.   "And   what   does   he  do,  this
-Seus-Fisher?"'
-     "He Fishers. That's what Fishers do -- they Fisher. Or are
-you asking where he works?"
-     "No, I mean to ask where does he Fisher?"
-     "In the Subway." Suddenly she stopped. "Say, you  wouldn't
-be a Fisher?"
-     "Me? Why, does it show?"
-     "There  is something about you, I noticed at once. We know
-about these bees that sting you in the back."
-     "Is that right?" I said.
-     She slipped her arm through mine.
-     "Tell me a story," she said,  cajoling.  "I  never  had  a
-Fisher among my friends. Will you tell me a story?"
-     "Well  now...  shall  I  tell  you about the pilot and the
-cow?"
-     She tweaked my elbow.
-     "No, really..."
-     "What a hot evening," I said. "It's a good thing  you  had
-me take off my jacket!"
-     "Anyway,  everybody  knows. Seus talks about it, and so do
-others."
-     "Ah, so," I said with interest. "And what does Seus tell?"
-     She let go of my arm at once.
-     "I didn't hear it myself. The girls told me."
-     "And what did they tell?"
-     "Well, this and that.... Maybe they put it all on.  Maybe,
-you know. Seus had nothing to do with it."
-     "Hmmm," I said.
-     "Don't  think  anything about Seus, he's a good guy and he
-keeps his mouth closed."
-     "Why should I be thinking about Seus?"  I  said  to  quiet
-her. "I have never even laid eyes on him."
-     She  took my arm again and enthusiastically announced that
-we were going to have a drink now.
-     "Now's the very time for us to have a drink."
-     She was already using the familiar  address  with  me.  We
-turned  a  corner  and came out on a wide thoroughfare. Here it
-was lighter than day. The lamps shone, the  walls  glowed,  the
-display windows were lambent with multicolored fires. This was,
-apparently,  one of Ahmad's circles of paradise. But I imagined
-it differently. I expected roaring  bands,  grimacing  couples,
-half-naked  and naked people. But here it was relatively quiet.
-There were lots of people, and it seemed to me that  most  were
-drunk,  but they were all very well and differently dressed and
-all were gay. And almost all smoked. There  was  no  wind,  and
-waves of bluish smoke undulated around the lights and lanterns.
-Vousi  dragged  me  into  some establishment, found a couple of
-acquaintances, and  disappeared  after  promising  to  find  me
-later.  The crowd was dense, and I found myself pressed against
-the bar. Before I could gather my wits, I found myself  downing
-a  shot.  A brown middle-aged man with yellow whites of the eye
-was booming into my face.
-     "Kiven hurt his leg -- right? Brush became an antique  and
-is  now  quite  useless.  That makes three -- right? And on the
-right they haven't got nobody. Phinney is  on  the  right,  and
-that's worse than nobody. A waiter, that's what be is."
-     "What are you drinking?" I asked.
-     "I  don't  drink  at  all,"  replied  the  brown  one with
-dignity, breathing strong fumes at me. "I have  jaundice.  Ever
-hear of it?"
-     Behind  me,  someone fell off a stool. The noise modulated
-up and down. The brown  one,  sitting  down  next  to  me,  was
-shouting out some story about some character who almost died of
-fresh  air  after  breaking  some  pipe at work. It was hard to
-understand any part  of  it,  as  various  stories  were  being
-shouted from all sides.
-     "... Like a fool, he quieted down and left, and she called
-s taxi  truck,  loaded  up his stuff, and had it dumped outside
-the town..."
-     "... I wouldn't have your TV in  my  outhouse.  You  can't
-think  of  one  improvement  on  the  Omega,  my neighbor is an
-engineer, and that's just what he says -- you can't think up an
-improvement on the Omega..."
-     "... That's the  way  their  honeymoon  ended.  When  they
-returned  home, his father enticed him in the garage -- and his
-father  is  a  boxer  --  and  trounced  him  until   he   lost
-consciousness. They called a doctor later..."
-     "...  So, all right, we took enough for three... and their
-rule is, you know, take as much as you wish,  but  you  get  to
-swallow all of it... and they are watching us by now, and he is
-carried  away -- and says -- let's take more... well, I says to
-myself, enough of this, time to break knuckles..."
-     "... Dear child, with  your  bust,  I  wouldn't  know  any
-grief,  such  a bosom is one in a thousand, but don't think I'm
-flattering you, that's not my style..."
-     A scrawny girl with bangs down to  the  tip  of  her  nose
-climbed  up  on  the vacant stool next to me and began to pound
-with puny fists on the bar, yelling, "Barman, barman, a drink."
-     The din died down again, and I  could  hear  behind  me  a
-tragic  whisper  -- "Where did he get it?" "From Buba, you know
-him, he is an engineer." "Was it real?" "It's scary, you  could
-croak." "Then you need some kind of pill --" "Quiet, will you?"
-"Oh,  all  right,  who  would be listening to us? You got one?"
-"Buba gave me one package, he says any drugstore  has  them  by
-the ton... here, look." "De... Devon -- what is it?" "Some sort
-of  medicine,  how  would  I  know?"  I  turned around. One was
-red-faced with a shirt unbuttoned down to his navel, and with a
-hairy chest. The other was  strangely  haggard-looking  with  a
-large-pored nose. Both were looking at me.
-     "Shall we have a drink?" I said.
-     "Alcoholic," said the pore-nose.
-     "Don't,  Pete. Don't start up, please," said the red-faced
-one.
-     "If you need some Devon, I've got it," I said loudly.
-     They  jumped  back.  Pore-nose  began   to   look   around
-cautiously.  Out  of  the corner of my eye, I could see several
-faces turn toward us and grow still.
-     "Let's go, Pat," said red-face. "Let's go! The  hell  with
-him."
-     Someone put a hand on my shoulder. I turned around and saw
-a handsome sunburned man with powerful muscles.
-     "Yes?" I said.
-     "Friend,"  he said benevolently, "drop this business. Drop
-it while it's not too late. Are you a Rhinoceros?"
-     "I am a hippopotamus," I joked.
-     "No, don't. I'm serious. Did you get beat up, maybe?"
-     "Black and blue."
-     "All right, don't feel  bad  about  it.  Today  it's  you,
-tomorrow  it's  them....  As  for  Devon and all that -- that's
-crap, believe me. There's lots of crap in the world,  but  that
-is the crap of all crap."
-     The  girl  with  the  bangs  advised me, "Crack him in the
-teeth... what's he sticking his nose in for... lousy dick."
-     "Lapping it up, and doing it up brown, aren't  you?"  said
-the  sunburned  one coolly, and turned his back on us. His back
-was huge, and  studded  with  bulging  muscles  under  a  tight
-half-transparent shirt.
-     "None  of  your business," said the girl at his back. Then
-she said to me, "Listen, friend, call the barman for  me  --  I
-can't seem to get through to him."
-     I gave her my glass and asked, "What's to do?"
-     "In  a  minute,  we'll  all  go," replied the girl. Having
-swallowed the alcohol, she went limp all at once. "As  to  what
-to  do  -- that's up to luck. Without luck, you can't make out.
-Or you need money if you deal with promoters. You're probably a
-visitor? Nobody here drinks that dry vodka. How is it your way,
-you should tell me about it.... I'm not going  anywhere  today,
-I'll go to the salon instead. I feel terrible and nothing seems
-to  help....  Mother says -- have a child. But that's dull too,
-what do I need one for?"
-     She closed her eyes and lowered her chin on  her  entwined
-fingers. She looked brazen, but at the same time crestfallen. I
-attempted  to rouse her but she stopped paying attention to me,
-and suddenly started shouting again, "Barman, barman, a drink!"
-     I looked for Vousi. She was nowhere to be seen.  The  cafe
-began to empty. Everyone was in a hurry to get somewhere. I got
-off  my stool, too, and left the cafe. Streams of people flowed
-down the street. They were all going in the same direction, and
-in about five minutes, I was swept out onto a  big  square.  It
-was  huge and poorly lighted, a wide gloomy space bordered by a
-ring of streetlights and store windows. It was full of people.
-     They stood pressed against each  other,  men,  women,  and
-youngsters, boys and girls, shifting from foot to foot, waiting
-for  I  knew  not  what.  There was almost no talking. Here and
-there  cigarette  tips  flared,  lighting  hollow  cheeks   and
-compressed  lips.  Then  a  clock began to strike the hour, and
-over the square, gigantic luminous panels sprang  into  flaming
-light.  There  were  three  of  them  --  red, blue, and green,
-irregularly shaped rounded  triangles.  The  crowd  surged  and
-stood  still.  Around  me, cigarettes were put out with subdued
-movements. The panels went out momentarily and then started  to
-flash  in  rotation: red-blue-green, red-blue-green... I felt a
-wave of hot air on my face, and was suddenly dizzy.  They  were
-astir  around  me.  I  got  up on tiptoes. In the center of the
-square, the people stood motionless; I had the impression  that
-they  were seized rigid and did not fall only because they were
-pressed  in  by  the  crowd.  Red-blue-green,   red-blue-green.
-Wooden, upturned faces, blackly gaping mouths, staring, bulging
-eyes.  They  weren't  even  winking  there, under the panels. A
-total quiet fell, so that I  jumped  when  a  piercing  woman's
-voice  nearby  yelled:  "Shivers!"  All at once, tens of voices
-responded: "Shivers! Shivers!" People on the  sidewalk  on  the
-square's  perimeter  began  to  clap  hands  in rhythm with the
-flashes, and to chant  in  even  voices,  "Shi-vers!  Shi-vers!
-Shi-vers!"  Somebody prodded me in the back with a sharp elbow.
-I was pressed forward to the center, toward the panels. I  took
-a  step  and another and started through the crowd, pushing the
-stiffened bodies  aside.  Two  youngsters,  rigid  as  icicles,
-suddenly  started  thrashing  wildly,  grabbing  at each other,
-scratching and pounding with  all  their  strength,  but  their
-faces  remained  frozen in the direction of the flashing sky...
-red-blue-green, red-blue-green. And just as  suddenly  as  they
-started, they grew still again.
-     At  this  paint,  finally,  I understood that all this was
-extraordinarily amusing. Everyone laughed. There  was  lots  of
-room around me and music thundered forth. I swept up a charming
-girl  and  we began to dance, as they used to dance, as dancing
-should be done and was done a long, long time ago,  as  it  was
-done  always  with abandon, so that your head swam, and so that
-everyone admired you. We stepped out of the way, and I held  on
-to her hands, and there was no need to talk about anything, and
-she  agreed  that the van driver was a strange man. Can't stand
-alcoholics, said Rimeyer, and pore-nose  is  the  most  genuine
-alcoholic,  and  what  about  Devon  I  said,  how could you be
-without Devon when we have an excellent zoo, the buffaloes love
-to wallow in the mud, and bugs are constantly swarming  out  of
-it.  Rim,  I  said,  there are some fools who said that you are
-fifty years old -- such nonsense when I wouldn't give you  over
-twenty-five  --  and this is Vousi, I told her about you, but I
-am intruding on you, said Rimeyer; no one can  intrude  on  us,
-said  Vousi,  as  for Seus he's the best of Fishers, he grabbed
-the splotcher and got the ray right  in  the  eye,  and  Hugger
-slipped  and  fell  in  the  water  and  said -- wouldn't it be
-something for you to drown -- look your gear are melting  away,
-aren't  you  funny,  said  Len, there is such a game of boy and
-gangster, you know, you remember we played with Maris...  Isn't
-it  wonderful,  I  have  never  felt so good in my life, what a
-pity, when it could be like this  every  day.  Vousi,  I  said,
-aren't  we  great fellows, Vousi, people have never had such an
-important problem before, and we solved it and  there  remained
-only  one  problem,  Vousi,  the  sole problem in the world, to
-return to people a spiritual content, and  spiritual  concerns,
-no, Seus, said Vousi, I love you very much, Oscar, you are very
-nice,  but  forgive  me,  would  you,  I  want it to be Ivan, I
-embraced her and felt that it was right to kiss her and I  said
-I love you...
-     Boom! Boom! Boom! Something exploded in the dark night sky
-and tinkling  sharp  shards  began to fall on us, and at once I
-felt cold and uncomfortable. There were  machine  guns  firing!
-Again  the  guns  rattled.  "Down, Vousi," I yelled, although I
-could not yet understand what was going on, and threw her  down
-on the ground and covered her with my body against the bullets,
-whereupon blows began to rain on my face.
-     Bang, bang, rat-tat-tat-tat... around me people stood like
-wooden  pickets. Some were coming to and rolling their eyeballs
-inanely. I was half reclining on a man's chest,  which  was  as
-hard  as  a  bench,  and right in front of my eyes was his open
-mouth  and   chin   glistening   with   saliva...   Blue-green,
-blue-green, blue-green... Something was missing.
-     There were piercing screams, cursing, someone thrashed and
-screeched  hysterically. A mechanical roar grew louder over the
-square. I raised my head with difficulty. The panels were right
-overhead, the blue and green flashing regularly, while the  red
-was  extinguished and raining glass rubble. Rat-tat-tat-tat and
-the green panel broke and darkened. In the blue remaining light
-unhurried wings floated by, spewing the reddish lightning of  a
-fusillade.
-     Again  I  attempted  to throw myself on the ground, but it
-was impossible, as they  all  stood  around  me  like  pillars.
-Something  made  an ugly snap quite near me, and a yellow-green
-plume rose skyward from which puffed a repulsive  stench.  Pow!
-Pow!  Another two plumes hung over the square. The crowd howled
-and stirred. The yellow vapor was caustic like mustard, my eyes
-and mouth filled, and I began to cry and cough, and around  me,
-everyone began to cry and cough and yell hoarsely: "Lousy bums!
-Scoundrels!  Sock  the  Intels!"  Again  the roar of the engine
-could be heard, coming in louder and louder. The  airplane  was
-returning.  "Down,  you  idiots,"  I yelled. Everyone around me
-flopped down all over each other.  Rat-tat-tat-tat!  This  time
-the  machine  gunner  missed  and the string apparently got the
-building opposite us. To make up for the miss,  the  gas  bombs
-fell  again  right on target. The lights around the square went
-out, and with them the blue panel, as a free-for-all started in
-the pitch-black dark.
-
-<ul><a name=7></a><h2>Chapter SEVEN</h2></ul>
-
-     I'll never know how I arrived at that fountain. It must be
-that I have good instincts and ordinary cold water was  exactly
-what  I  needed. I crawled into the water without taking off my
-clothes, and lay down, feeling better immediately. I was  lying
-on  my back, drops rained on my face, and this was unbelievably
-pleasant. It was quite dark here, and dim stars  shone  through
-the  branches  and  the  water.  It was very quiet. For several
-minutes I was watching a brighter star, for some reason unknown
-to me, which was slowly moving across the sky, until I realized
-that I was watching the relay satellite Europa.  How  far  from
-all  this,  I  thought, how degrading and senseless to remember
-the revolting mess on the square, the disgusting foul mouthings
-and screechings, the wet phrumping of the gas  bombs,  and  the
-putrid  stench  which turned your stomach and lungs inside out.
-Understanding   freedom   as   the   rapid   satisfaction   and
-multiplication  of  needs  and  desires,  I recollected, people
-distort their natures as they engender within  themselves  many
-senseless  and  stupid  desires,  habits  and the most unlikely
-inventions....
-     Priceless Peck, he loved to quote old pundit Zosima as  he
-circled  around  a  well-laid table, rubbing his hands. We were
-snot-nosed undergrads then and ingenuously believed  that  such
-pronouncements,  in  our  time,  were  meant  only  to show off
-flashes  of  humor  and  erudition....  At  this  point  in  my
-reflections,  someone  noisily  plunged into the water some ten
-paces from me.
-     At first he coughed hoarsely, spat and blew his  nose,  so
-that  I  hurried to leave the water, then he started to splash,
-finally became quiet, and  suddenly  discharged  himself  of  a
-string of curses:
-     "Shameless  lice,"  he  growled. "Whores, swine... on live
-people! Stinking hyenas, rotten  scum...  learned  prostitutes,
-filthy  snakes."  He  hawked  furiously again. "It bothers them
-that people are having a good time! Stepped  on  my  face,  the
-crud!"  He  groaned  nasally and painfully, "The hell with this
-shiver business. That will be the day when I'll go again."
-     He moaned again and rose. I could hear the  water  running
-from his clothes. I could dimly perceive his swaying figure. He
-saw me too.
-     "Hey, friend, have a smoke on you?"
-     "I did," I replied.
-     "Low-lifers! I didn't think to take them out. Just fell in
-with everything  on."  He  splashed  over  to  me  and sat down
-alongside. "Some moron stepped on my cheek," he informed me.
-     "They marched over me, too,"  I  said.  "The  people  went
-ape."
-     "But,  you  tell  me,  where do they get the tear gas?" he
-said. "And machine guns?"
-     "And airplanes," I added.
-     "An airplane means nothing," he contradicted. "I have  one
-myself.  I bought it cheap for seven hundred crowns.... What do
-they want, that's what I don't understand."
-     "Hoodlums," I said. "They should have their  faces  pulped
-properly, and that would be the end of that argument."
-     He laughed bitterly.
-     "Someone  did!  For  that you get worked over good.... You
-think they didn't get beat up? And how they got  beat  up!  But
-apparently  that  isn't  enough....  We should have driven them
-right into the ground, together with their  excrement,  but  we
-passed  up  the  chance....  And  now  they  are  giving us the
-business! The people got soft, that's what, I tell you.  Nobody
-gives  a  damn.  They put their four hours in, have a drink and
-off to the shivers! And you can pot them like clay pigeons." He
-slapped his sides in desperation. "Those were  the  times,"  he
-cried.  "They didn't dare open their mouths! Should one of them
-even whisper, guys in black shirts or maybe white  hoods  would
-pay a night visit, crunch him in the teeth, and off to the camp
-he  went,  so  there wouldn't be a peep out of him again.... In
-the schools, my son says, everyone bad-mouths fascism: Oh dear,
-they hurt the Negroes' feelings; oh dear, the  scientists  were
-witch-hunted;  oh  dear,  the camps; oh dear, the dictatorship!
-Well, it wasn't witch-hunting that was needed,  but  to  hammer
-them  into  the  ground,  so  there  wouldn't  be  any left for
-breeding!" He drew his hand under his nose, slurping  long  and
-loud.
-     "Tomorrow  morning,  I have to go to work with my face all
-out of shape.... Let's go have a drink,  or  we'll  both  catch
-cold."
-     We crawled through the bushes and came out on the street.
-     "The Weasel is just around the corner," he informed me.
-     The  Weasel was full of wet-haired half-naked people. They
-seemed depressed, somehow embarrassed,  and  gloomily  bragging
-about their contusions and abrasions. Several young women, clad
-only  in  panties,  clustered  around  the  electric fireplace,
-drying their skirts. The men patted them platonically on  their
-bare  flesh. My companion immediately penetrated into the thick
-of the crowd, and swinging his arms and blowing his  nose  with
-his fingers, began to call for "hammering the bastards into the
-ground." He was getting some weak support.
-     I asked for Russian vodka, and when the girls left, I took
-off my  sport  shirt  and  sat  by  the  fireplace.  The barman
-delivered my glass and returned at once to his crossword in the
-fat magazine. The public continued its conversation.
-     "So, what's the shooting for? Haven't  we  had  enough  of
-shooting?  Just  like little boys, by God... just spoiling some
-good fun."
-     "Bandits, they're worse than gangsters, but like it or not
-that shiver business is no good, too."
-     "That's right. The other day mine says to me, 'Papa, I saw
-you; you were all blue like a corpse and  very  scary'  --  and
-she's only ten. So how can I look her in the eyes? Eh?"
-     "Hey  anybody! What's an entertainment with four letters?"
-asked the barman without raising his head.
-     "So, all right, but who dreamed all this up -- the  shiver
-and the aromatics? Eh and also..."
-     "If you got drenched, brandy is best."
-     "We were waiting for him on the bridge, and along he comes
-with his eyeglasses and some kind of pipe with lenses in it. So
-up he  goes over the rail with his eyeglasses and his pipe, and
-he kicked his legs once and that was that. And then  old  Snoot
-comes  running,  after having been revived, and he looks at the
-guy blowing bubbles. "Fellows," he says, "What the hell is  the
-matter with you, are you drunk or something, that's not the guy
--- I am seeing him for the first time..."
-     "I  think  there  ought to be a law -- if you are married,
-you can't go to the shiver."
-     "Hey somebody," again the bartender,  "What's  a  literary
-work with seven letters -- a booklet, maybe?"
-     "So, I myself had four Intels in my squad, machine gunners
-they were.  It's  quite  true  that  they fought like devils. I
-remember we  were  retreating  from  the  warehouse,  you  know
-they're  still  building a factory there, and two stayed behind
-to cover us. By the way, nobody asked  them,  they  volunteered
-entirely  by  themselves.  Later  we  came  back and found them
-hanging side by side from the rail crane, naked, with all their
-appurtenances ripped off with hot pincers. You understand?  And
-now,  I'm  thinking, where were the other two today? Maybe they
-were the very same guys to treat me to some tear gas, those are
-the types that can do such things."
-     "So who didn't get hung? We got hung  by  various  places,
-too!"
-     "Hammer  them into the ground right up to their noses, and
-that'll be the end of that!"
-     "I'm going. There is no point in hanging around here,  I'm
-getting  heartburn.  They must have fixed everything up by now,
-back there."
-     "Hey, barman, girls, let's have one last one."
-     My shirt had dried, and as the cafe emptied, I  pulled  it
-on  and  went  over  to  sit  at  a  table  and  to  watch. Two
-meticulously dressed gentlemen in the corner were sipping their
-drinks through straws.  They  called  attention  to  themselves
-immediately  -- both were in severe black suits and black ties,
-despite the very warm night. They weren't talking, and  one  of
-them  constantly  referred  to his watch. After a while, I grew
-tired of observing them. Well, Doctor Opir, how do you like the
-shivers? Were you at the square? But of course  you  were  not.
-Too  bad.  It  would  have  been  interesting  to know what you
-thought of it. On the other hand, to the devil with  you.  What
-do  I  care  what  Doctor Opir thinks? What do I think about it
-myself? Well, high-grade barber's raw  material,  what  do  you
-think? It's important to get acclimatized quickly
-     and  not  stuff  the  brain with induction, deduction, and
-technical procedures.  The  most  important  thing  is  to  get
-acclimatized as rapidly as possible. To get to feel like one of
-them....  There,  they  all  went  back  to the square. Despite
-everything that happened, they still went back  to  the  square
-again.  As for me, I don't have the slightest desire to go back
-there. I would, with the greatest of pleasure at this point, go
-back to my room and check out my new bed. But when would  I  go
-to  the  Fishers?  Intels,  Devon, and Fishers. Intels -- maybe
-they are the local version of the Golden Youth? Devon...  Devon
-must be kept in mind, together with Oscar. But now the Fishers.
-     "The Fishers; that's a little bit vulgar," said one of the
-black suits, not whispering, but very quietly.
-     "It  all  depends on temperament," said the other. "As for
-me, personally I don't condemn Karagan in the slightest."
-     "You see, I  don't  condemn  him  either.  It's  a  little
-shocking  that  he picked up his options. A gentleman would not
-have behaved that way."
-     "Forgive me, but Karagan is no gentleman.  He  is  only  a
-general   manager.   Hence   the   small-mindedness   and   the
-mercantilism and a certain what I might call commonness..."
-     "Let's not be so  hard  on  him.  The  Fishers  --  that's
-something  intriguing. And to be honest, I don't see any reason
-why we should not involve ourselves. The old Subway  --  that's
-quite  respectable.  Wild is much more elegant than Nivele, but
-we don't reject Nivele on that account."
-     "'You really are seriously considering?"
-     "Right now, if you wish.... It's five to two, by the  way.
-Shall we go?"
-     They  got  up,  said  a friendly and polite goodbye to the
-bartender, and proceeded toward the exit. They looked  elegant,
-calm,  and  condescendingly remote. This was astounding luck. I
-yawned loudly, and muttering, "Off  to  the  square,"  followed
-them,  pushing  stools  out  of  my  way. The street was poorly
-illuminated, but I saw them immediately. They were in no hurry.
-The one on the right was the  shorter,  and  when  they  passed
-under  the  street lights, you could see his safe, sparse hair.
-As near as I could tell, they were no longer conversing.
-     They detoured  the  square,  turned  into  a  dark  alley,
-avoided  a  drunk  who  tried  to strike up a conversation, and
-suddenly, without one backward glance, turned abruptly  into  a
-garden  in  front of a large gloomy house. I heard a heavy door
-thud shut. It was a minute before two.
-     I pushed off the drunk, entered the garden, and  sat  down
-on  a silver-painted bench under a lilac bush. The wooden bench
-was situated on a sandy path which ran through  the  garden.  A
-blue  lamp  illuminated  the  entrance  of  the  house,  and  I
-discerned two caryatids supporting the balcony over  the  door.
-This  didn't  look  like the entrance to the old subway, but as
-yet, I couldn't tell for sure, so I decided to wait.
-     I didn't have to wait long. There was a  rustle  of  steps
-and  a  dark  figure  in a cloak appeared on the path. It was a
-woman. I did not grasp immediately why her proudly raised  head
-with  a  high  cylindrical  coiffure,  in  which  large  stones
-glistened in the starlight, seemed familiar. I  arose  to  meet
-her,  and  said,  trying  to sound both respectful and mocking,
-"You are late, madam, it's after two."
-     She was not in the least startled.
-     "You don't say!" she exclaimed. "Can it be my watch is  so
-slow?"
-     It  was  the  very same woman who had the altercation with
-the van driver, but of course she did not recognize  me.  Women
-with  such  disdainful-looking lower lips never remember chance
-meetings. I took her by the arm, and we mounted the wide  stone
-steps.  The  door  turned  out to be as heavy as a reactor-well
-cover. There was no  one  in  the  entrance  hall.  The  woman,
-without  turning, flung the cloak on my arm and went ahead, and
-I paused for a second to look at myself  in  the  huge  mirror.
-Good  man,  Master  Gaoway, but it still behooved me to stay in
-the shadows. We entered the ballroom.
-     No, this was anything but a subway. The room was  enormous
-and  incredibly  old-fashioned.  The walls were lined with dark
-wood, and fifteen feet up, there was a gallery with a  railing.
-Pink  blond-curled angels smiled down with only their blue lips
-from a far-flung ceiling. Almost the entire floor of  the  room
-was  covered  with  rows  of  soft  massive chairs covered with
-embossed leather. Elegantly dressed people, mostly  middle-aged
-men,  sat  in  them  in  relaxed and negligent poses. They were
-looking at the far end  of  the  room,  where  a  brightly  lit
-picture blazed against a background of black velvet.
-     No  one  turned to look at us. The woman glided toward the
-front rows, and I sat down near the door. By now, I was  almost
-sure  that  I  had come here for nothing. There was silence and
-some coughs, and lazy streams of smoke curled upward  from  the
-fat cigars; many bald pates glistened under the chandeliers. My
-attention   turned   to   the  picture.  I  am  an  indifferent
-connoisseur of paintings, but it looked like a Raphael, and  if
-it was not genuine, it was certainly a perfect copy.
-     There  was  a deep brassy gong, and simultaneously a tall,
-thin man in a black mask appeared by the side of the picture. A
-black leotard covered  his  body  from  head  to  toe.  He  was
-followed by a limping, hunchbacked dwarf in a red smock. In his
-short, extended pawlike arms, he held a dully glinting sword of
-a  most  wicked appearance. He went to the right of the picture
-and stood still, while the masked  individual  stepped  forward
-and  spoke  in  a measured tone: "In accordance with the bylaws
-and directives of the Honorable Society of Patrons, and in  the
-name  of  Art,  which is holy and irreproducible, and the power
-granted me by you, I have examined the  history  and  worth  of
-this painting and now --"
-     "Request a halt," sounded a curt voice behind me.
-     Everyone  turned around. I also turned around and saw that
-three young, obviously very powerful, and immaculately  dressed
-men  were  looking at me full in the face. One had a monocle in
-his right eye. We studied each other for a few seconds, and the
-man with the monocle twitched his cheek and let it drop. I  got
-up  at once. They moved toward me together, stepping softly and
-soundlessly. I tried the chair, but it was  too  massive.  They
-jumped  me.  I met them as best I could and at first everything
-went well, but very quickly it became evident  that  they  wore
-brass  knuckles,  and I barely managed to evade them. I pressed
-my back against  the  wall  and  looked  at  them  while  they,
-breathing  heavily,  looked at me. There were still two of them
-left. There was the usual coughing in the auditorium. Four more
-were coming down the gallery steps, which squeaked and  groaned
-loudly enough to reverberate in the hall. Bad business, thought
-I, and launched myself to force a breach.
-     It  was hard going, just like the time in Manila, but then
-there were two of us. It would have been better  if  they  were
-armed, as I would have had a chance to expropriate a gun.
-     But  all  six of them met me with knuckles and truncheons.
-Luckily for me it was very crowded. My left  arm  went  out  of
-commission,  and  then the four suddenly jumped back, while the
-fifth drenched me with a clammy liquid from a  flat  container.
-Simultaneously, the lights were extinguished.
-     These tricks were well known to me: now they could see me,
-but I  could  not  see them. In all probability that would have
-been the end of me, were it not that some idiot threw open  the
-door  and announced in a greasy basso, "I beg forgiveness, I am
-terribly late and so sorry..." I charged toward the light, over
-some bodies, mowed down the latecomer, flew across the entrance
-hall, threw open the front door, and pelted down the sandy path
-holding my left arm with my right hand. No one was pursuing me,
-but I traversed two blocks before it dawned on me to stop.
-     I flung myself down on a lawn and lay for a long  time  in
-the short grass, grabbing lungfuls of the warm moist air. In no
-time,   the  curious  gathered  around  me.  They  stood  in  a
-semicircle and ogled me avidly, not saying a word. "Take  off,"
-I  said,  getting  up  finally. Hurriedly, they scooted away. I
-stood awhile, figuring out where I was, and began  a  stumbling
-journey  homeward.  I  had had enough for today. I still didn't
-get it, but I had had quite enough. Whoever  they  were,  these
-members  of  the Honorable Society of Art Patrons -- secret art
-worshippers, extant aristocrat-conspirators or whoever else  --
-they  fought  cruelly and without quarter, and the biggest fool
-in that hall of theirs was still apparently none other than I.
-     I passed by the  square,  where  again  the  color  panels
-pulsed   rhythmically,   and   hundreds  of  hysterical  voices
-screamed, "Shi-vers! Shi-vers!" Of this too I had  had  enough.
-Pleasant dreams are, of course, more attractive than unpleasant
-ones,  but  after  all,  we  do  not  live  in  a dream. In the
-establishment where Vousi had taken  me,  I  had  a  bottle  of
-ice-cold  soda water, observed with curiosity a squad of police
-peacefully camped by the bar, and went out, turning into Second
-Waterway.
-     A lump the size of a tennis ball was rising behind my left
-ear. I weaved badly and walked slowly,  keeping  close  to  the
-fences. Later, I heard the tap of heels behind me and voices:
-     "... Your place is in the museum, not in a cabaret."
-     "Nothing   of   the  sort,  I  am  not  drunk.  Can't  you
-und-derstand, only one measly bottle of wine..."
-     "How disgusting! Soused and picking up a wench."
-     "What's the girl got to do with it? She is a m-model!"
-     "Fighting over a wench. Making us fight over her."
-     "Why in hell d-do you believe them and don't believe me?"
-     "Just because you're drunk! You're a bum, just  like  they
-all are, maybe worse...."
-     "That's  all  right. I'll remember that scoundrel with the
-bracelet quite well.... Don't hold me! I'll walk by myself!"
-     "You'll  remember  nothing,  friend.  Your  glasses   were
-knocked  off in the first instant, and without them, you aren't
-even a man, but a blind sausage.... Stop kicking, or it will be
-the fountain for you...."
-     "I'm warning you, one more  stunt  like  that,  and  we'll
-throw  you out. A drunken <i>kulturfuhrer</i> -- it's enough to
-make you sick."
-     "Stop preaching at him, give a man a chance  to  sleep  it
-off."
-     "Fellows! There he is, the l-louse!"
-     The  street  was  empty,  and  the louse was clearly me. I
-could bend my left arm already, but it hurt like the devil, and
-I stepped back to let them pass. There were three of them. They
-were young, in identical caps, pushed  over  their  eyes.  One,
-thickset and low-slung, was obviously amused and held the other
-one,  a tall, open-faced, loose-jointed fellow, with a powerful
-grip, restraining  his  violent  and  sporadic  movements.  The
-third,  long  and  skinny,  with a narrow and darkish face, was
-following at some distance with his hands behind his  back.  As
-he got alongside me, the loose-jointed one braked determinedly.
-The short one attempted to nudge him off the spot, but in vain.
-     The  long  one  passed  by  and then stopped, looking back
-impatiently over his shoulder.
-     "Thought  you  were  gonna  get  away,  pig!"  he   yelled
-drunkenly,  attempting  to  seize me by the chest with his free
-hand.
-     I retreated to the fence and said,  addressing  myself  to
-the short fellow, "I had no business with you."
-     "Stop being a rowdy," said the distant one sharply.
-     "I  remember  you  very  well  indeed,"  yelled the drunk.
-"You're not going to get away from me! I'll get even with you!"
-     He advanced upon me in surges, dragging the short one,
-     who hung on with bulldog grimness, behind him.
-     "It's not him," cajoled the low-slung one, who  was  still
-very  merry.  "That guy went off to the shivers and this one is
-sober."
-     "You won't fool me."
-     "I'm warning you for the last time. We are going to  expel
-you."
-     "Got scared, the bum! Took off his bracelet."
-     "You  can't  even  see  him. You're worthless without your
-glasses."
-     "I can see everything pe-erfectly!... And even if he isn't
-the one..."
-     "Stop it! Enough is enough!"
-     The long one finally came back and grasped the drunk  from
-the other side.
-     "Will  you  move  on!" he said to me with irritation, "Why
-the devil are you  stopping  here!  Haven't  you  ever  seen  a
-drunk?"
-     "Oh, no! You aren't going to get away from me."
-     I  continued  on  my  way. I had not far to go by now. The
-trio dragged along behind me noisily.
-     "I can see right through  him,  if  you  please.  King  of
-Nature!  Drunk  enough  to  retch, and to beat up whoever comes
-along. Got beat up himself, and that's all he needs.... Let  go
-of me, I'll hang a few good ones on his mug...."
-     "What  have  you come to, we have to walk you along like a
-hood."
-     "So don't walk me!... I loathe them.... Shivers,  wenches,
-whiskey... brainless jelly..."
-     "Sure, sure, take it easy, just don't fall."
-     "Enough  of  your reproofs... I am sick of your hypocrisy,
-your puritanism. We should  blow  them  up,  shoot  them!  Raze
-everything off the face of the earth!"
-     "Drunk as a coot, and I thought he was sobered up!"
-     "I  am  sober. I remember everything... the twenty-eighth,
-right?"
-     "Shut up, you fool."
-     "Shh! Right  you  are!  The  enemy  is  on  the  alert....
-Fellows,  there  was  a spy here somewhere.... Didn't I talk to
-him?... The son of a bitch took off his  bracelet...  but  I'll
-get that dick before the twenty-eighth!"
-     "Will you be quiet!"
-     "Shh!  And  not  another word. That's it! And don't worry,
-the grenade launchers are my baby."
-     "I am going to kill him right now, the bum!"
-     "Lay it on the enemies of civilization.... Fifteen hundred
-meters of tear gas -- personally... six sectors... awk!"
-     I was already by the gate  to  my  house.  When  I  turned
-around  to  look,  the burly man was lying face down, the short
-one was  squatting  alongside,  while  the  long  fellow  stood
-rubbing the edge of his right hand.
-     "Why  did you do that?" said the short man. "You must have
-maimed him."
-     "Enough prattle," said the long one furiously.  "We  can't
-seem  to  learn  to  stop  prattling.  We  can't  learn to stop
-boozing. Enough!"
-     Let us be as children, Doctor Opir,  thought  I,  slipping
-into  the yard as quietly as possible. I held the latch to keep
-it from clicking into place.
-     "Where did he go?" said the long one, lowering his voice.
-     "Who?"
-     "The guy who went ahead of us."
-     "Turned off somewhere."
-     "Where? Did you notice?"
-     "Listen, I wasn't concerned about him."
-     "Too bad. But all right, pick him up, and let's go."
-     Stepping into the shadow of the  apple  trees,  I  watched
-them drag the drunk by the gate. He was wheezing horribly.
-     The house was quiet. I went to my quarters, undressed, and
-took a  hot shower. My shirt and shorts smelled of tear gas and
-were covered with the greasy spots of the  luminous  liquid.  I
-threw  them  into  the  hamper. Next, I inspected myself in the
-mirror and marveled once more at how lightly I had gotten away:
-a bump  behind  the  ear,  a  sizable  contusion  on  the  left
-shoulder, and some scraped ribs. Also skinned knuckles.
-     On   the   night   table,  I  discovered  a  notice  which
-respectfully suggested that I deposit a sum to cover  the  rent
-for  the apartment for the first thirty days. The sum was quite
-considerable, but tolerable. I counted out a  few  credits  and
-stuffed  them into the thoughtfully provided envelope, and then
-lay down on the bed with my hands behind my  head.  The  sheets
-were cool and crisp, and a salty sea breeze blew in through the
-open  window.  The  phonor  susurrated  cozily behind my ear. I
-intended to think awhile before falling  asleep,  but  was  too
-exhausted and quickly dozed off.
-     Later,  some  noise  in  the background awakened me, and I
-grew alert and listened with eyes wide open.
-     Somewhere nearby, someone either cried or sang in  a  thin
-childish  voice.  I  got  up cautiously and leaned out the open
-window. The thin halting voice was intoning: "... having stayed
-in the grave but a short time, they come out and live among the
-living as though alive." There was the sound of sobs. From  far
-away  like  the keening of a mosquito came the chant "Shi-vers!
-Shi-vers!" The pitiable little voice  went  on  --  "Blood  and
-earth  mixed  together  they  can't eat." I thought that it was
-Vousi, drunk and lamenting upstairs in her room, and called out
-softly, "Vousi!" No one replied,  The  thin  voice  cried  out:
-"Hence from my hair, hence from my flesh, hence from my bones,"
-and  I  knew who it was. I climbed over the window sill, jumped
-onto the lawn, and went to the apple grove,  listening  to  the
-sobbing. Light appeared through the trees, and soon I came to a
-garage. The doors were cracked open and I looked in. Inside was
-a  huge  shiny Opel. Two candles were burning on the workbench.
-There was a smell of gasoline and hot wax.
-     Under the candles,  seated  on  a  work  stool,  was  Len,
-dressed  in  a  full-length  white  gown,  in bare feet, with a
-thick, well-worn  book  on  his  knees.  He  regarded  me  with
-wide-open  eyes,  his  face  completely  white  and frozen with
-terror.
-     "What are you doing here?" I said loudly and entered.
-     He continued to look at  me  in  silence  and  started  to
-tremble. I could hear his teeth chattering.
-     "Len,  old  friend," I said, "I guess you didn't recognize
-me. It's me -- Ivan."
-     He dropped the book and hid his hands in his  armpits.  As
-earlier today, in the morning, his face beaded with cold sweat.
-I  sat  down  alongside  of  him  and  put  my  arm  around his
-shoulders. He collapsed against me weakly. He shook all over. I
-looked at the book. A certain Doctor Neuf had blessed the human
-race with <i>An Introduction to  the  Science  of  Necrological
-Phenomena</i>. I kicked the book under the bench.
-     'Whose ear is that?" I asked loudly.
-     "Mo... Mama's..."
-     "A very nice Ford."
-     "It's not a Ford. It's an Opel."
-     "You're right -- it is an Opel... a couple of hundred
-     miles per hour I would guess..."
-     "Yes."
-     "Where did you get the candles?"
-     "I bought them."
-     "Is  that  right!  I didn't know that they sold candles in
-our time. Is your bulb burned out? I went out  in  the  garden,
-you  know, to get an apple off a tree, and then I saw the light
-in the garage."
-     He moved closer to me and said, "Don't leave for  a  while
-yet, will you?"
-     "OK.  What  do you say we blow out the lights and go to my
-place?"
-     "No, I can't go there."
-     "Where can't you go?"
-     "In the house and to your  place."  He  was  talking  with
-tremendous  conviction. "For quite a while yet. Until they fall
-asleep."
-     "Who?"
-     "They."
-     "Who are -- they?"
-     "They -- you hear?"
-     I listened. There was only the rustle of branches in the
-     wind and somewhere very far away the  cry  of:  "Shi-vers!
-Shi-vers!"'
-     "I don't hear anything special," I said.
-     "That's because you don't know. You are new here and
-     they don't bother the new ones."
-     "But who are they, after all?"
-     "All of them. You've seen the fink with the buttons?"
-     "Pete? Yes, I saw him. But why is he a fink? In my
-     opinion, he's an entirely respectable man."
-     Len jumped up.
-     "Come  on,"  he  said in a whisper, "I'll show you. But be
-quiet."
-     We came out of the garage, crept  up  to  the  house,  and
-turned  a  corner.  Len held my hand all the time; his palm was
-cold and wet..
-     "There -- look," he said.
-     Sure enough, the sight was frightening. My customs  friend
-was  lying  on  the  porch  with his head stuck at an unnatural
-angle through the railing. The mercury  vapor  light  from  the
-street  fell  on  his  face, which looked blue and swollen, and
-covered with dark welts. Through half-open lids, the eyes could
-be seen, crossed toward the bridge of the nose.
-     'They walk among the living, like  living  people  in  the
-daytime," murmured Len, holding on to me with both hands. "They
-bow  and  smile,  but at night their faces are white, and blood
-seeps through  their  skin."  I  approached  the  veranda.  The
-customs  man  was  dressed  in pajamas. He breathed noisily and
-exuded a smell of cognac. There  was  blood  on  his  face,  as
-though he'd fallen on his face into some broken glass.
-     "He's  just  drunk,"  I  said  loudly.  "Simply  drunk and
-snoring. Very disgusting."
-     Len shook his head.
-     "You are a newcomer," he whispered. "You see nothing.  But
-I saw." He shook again. "Many of them came. She brought them...
-and  they  carried her in... there was a moon... they sawed off
-the top of her head... and she  screamed  and  screamed...  and
-then  they  started  to eat with spoons. She ate, too, and they
-all laughed when she screamed and flopped around..."
-     "Who? Who was it?"
-     "And then they piled on wood  and  burned  it  and  danced
-around  the  fire...  and  then  they  buried everything in the
-garden... she went out to get the shovel in the car... I saw it
-all... do you want to see where they buried her?"
-     "You know what, friend?" I said. "Let's go to my place."
-     "What for?"
-     "To get some sleep, that's what for. Everyone is  sleeping
--- only you and I are palavering here."
-     "Nobody  is sleeping. You really are new. Right now no one
-is sleeping. You must not sleep now."
-     "Let's go, let's go," said I, "over to my place."
-     "I won't go," he said. "Don't touch me. I didn't say  your
-name."
-     "I  am  going  to  take a belt," I said menacingly, "and I
-will strap your behind."
-     Apparently this calmed him. He clutched my hand again  and
-became silent.
-     "Let's  go,  old  pal, let's go," I said. "You're going to
-sleep and I will sit alongside you.  And  if  anything  at  all
-happens, I will awaken you at once."
-     We  climbed into my room through the window (he absolutely
-refused to enter the house by the front door), and I put him to
-bed. I intended  to  tell  him  a  tale,  but  he  fell  asleep
-immediately. His face looked tortured, and every few minutes he
-quivered  in  his  sleep.  I  pushed  the  chair by the window,
-wrapped myself in a bathrobe, and smoked a cigarette to calm my
-nerves. I attempted  to  think  about  Rimeyer  and  about  the
-Fishers,  with whom I had not met up after all; about what must
-happen on the twenty-eighth; and about  the  Art  Patrons,  but
-nothing  came of it and this irritated me. It was annoying that
-I was unable  to  think  about  my  business  as  something  of
-importance.   The   thoughts  scattered  and  jumbled  emotions
-intruded, and I did not think so much as I felt. I felt that  I
-hadn't  come for nothing, but at the same time, I sensed that I
-had come for altogether the wrong reason.
-     But Len slept. He  did  not  even  awake  when  an  engine
-snorted at the gate, car doors were slammed, there were shouts,
-chokes, and howls in different voices, so that I almost decided
-that a crime was being committed in front of the house, when it
-became  clear  that  it  was  just  Vousi  coming back. Happily
-humming, she began  to  undress  while  still  in  the  garden,
-negligently  draping her blouse, skirt, and other garments over
-the apple branches. She didn't notice me, came into the  house,
-shuffled  around upstairs for a while, dropped something heavy,
-and finally settled down. It was close  to  five  o'clock.  The
-glow of dawn was kindling over the sea.
-
-<ul><a name=8></a><h2>Chapter EIGHT</h2></ul>
-
-     When I woke up, Len was already gone. My shoulder ached so
-badly  that  the pain pounded in my head, and I promised myself
-to take it easy the whole day. Grunting and  feeling  sick  and
-forlorn,  I executed a feeble attempt at set-ting-up exercises,
-approximated a wash-up, took the envelope with the  money,  and
-set  out  far Aunt Vaina, moving edge-wise through the doorway.
-In the hall, I stopped in  indecision:  it  was  quiet  in  the
-house,  and  I wasn't sure that my landlady was up. But at this
-point the door to her side of the house opened, and  Pete,  the
-customs  man, came out into the hall. Well, well, thought I. At
-night he had looked like a drowned drunk. Now in the  light  of
-day, he resembled a victim of a hooligan attack. The lower part
-of  his  face was dark with blood. Fresh blood glistened on his
-chin, and he held a handkerchief under  his  jaw  to  keep  his
-snow-white braided uniform clean. His face was strained and his
-eyes   tended  to  cross,  but  in  general,  he  held  himself
-remarkably calm, as though falling face-down into broken  glass
-was  a  most ordinary event for him. A slight misadventure, you
-know, can happen to anybody; please don't pay it any attention;
-every-thing will be all right.
-     "Good morning," I mumbled.
-     "Good morning," he responded, politely  dabbing  his  chin
-cautiously and sounding a bit nasal.
-     "Anything the matter? Can I help?"
-     "A trifle," he said. ' The chair fell."
-     He  bowed courteously, and passing by me, unhurriedly left
-the  house.  I  observed  his  departure  with   a   thoroughly
-unpleasant  feeling,  and when I turned back toward the door, I
-found Aunt Vaina standing in front of  me.  She  stood  in  the
-doorway,  gracefully  leaning on the jamb, all clean, rosy, and
-perfumed, and looking at me as though I was Major General  Tuur
-or, at least, Staff Major Polom.
-     "Good  morning,  early bird," she cooed. "I was puzzled --
-who would be talking at this hour?"
-     "I  couldn't  bring  myself  to  disturb  you,"  I   said,
-shuddering  fashionably  and mentally howling at the pain in my
-shoulder. "Good morning, and may I take the  }liberty  to  hand
-you --"
-     "How nice! You can tell a real gentleman right away. Major
-General  Tuur  used  to  say  that a true gentleman never makes
-anyone wait. Never. Nobody..."
-     I became aware that slowly but very persistently, she  was
-herding  me  away  from her door. The living room was darkened,
-with the drapes apparently drawn, and some strange sweet  smell
-was wafting out of it into the hall.
-     "But you did not have to be in such a rush, really..."
-     She was finally in a convenient position to close the door
-with a smooth negligent gesture. "However, you can be sure that
-I will  value  your  promptness  appropriately.  Vousi is still
-asleep, and it's time for me to get Len off to  school.  So  if
-you will excuse me... By the way, we have the newspapers on the
-veranda."
-     "Thank you," I said, retreating.
-     "If  you'll  have the patience, I would like to ask you to
-join me for breakfast and a cup of cream."
-     "Unfortunately, I will have to be going," I  said,  bowing
-out.
-     As  to newspapers, there were six. Two local, illustrated,
-fat as almanacs; one from the capital; two luxurious  weeklies;
-and,  for some reason, the Arab <i>El Gunia</i>. The last I put
-aside, and sifted through the  others,  accompanying  the  news
-with sandwiches and hot cocoa.
-     In  Bolivia,  government  troops, after stubborn fighting,
-had occupied the town of Reyes. The rebels were  pushed  across
-the  River  Beni.  In  Moscow,  at the international meeting of
-nuclear physicists, Haggerton and Soloviev announced a  project
-for  a  commercial  installation  to  produce  anti-matter. The
-Tretiakoff  Gallery  had  arrived  in  Leopoldville,   official
-opening  being  scheduled for tomorrow. The scheduled series of
-pilotless craft had been launched from the Staryi  Vostok  base
-on Pluto into the totally free flight zone; communications with
-two  of  the  craft  were  temporarily  disrupted.  The General
-Secretary of  the  UN  had  directed  an  official  message  to
-Orolianos, in which he warned that in the event of a repetition
-of  the  use  of  atomic  grenades by the extremists, UN police
-forces would be introduced into Eldorado. In Central Angola, at
-the sources of the River Kwando, an  archaeological  expedition
-of the Academy of Sciences of the UAR had uncovered the remains
-of a cyclopean construction, apparently dating from well before
-the  ice  age.  A group of specialists of the United Center for
-the Investigation of Subelectronic (Ritrinitive) Structures had
-evaluated  the  energy  reserves  available   to   mankind   as
-sufficient for three billion years. The cosmic branch of Unesco
-had   announced   that   the   relative  population  growth  of
-extraterrestrial  centers  and   bases   now   approached   the
-population  growth on Earth. The head of the British delegation
-to the UN had put forth a proposal, in the name  of  the  great
-powers, for the total demilitarization, by force if need be, of
-the remaining militarized regions on the globe.
-     Information  about how many kilos were pressed by whom and
-about who drove how many balls through whose goal posts  I  did
-not bother to read. Of the local announcements, I was intrigued
-by three. The local paper, Joy of Life, reported: "Last night a
-group of evil-minded men again carried out a private plane raid
-on  Star  Square,  which  was  full  of  citizens  taking their
-leisure. The hooligans fired  several  machine-gun  bursts  and
-dropped  eleven  gas  bombs.  As a result of the ensuing panic,
-several men and women  suffered  severe  injuries.  The  normal
-recreation of hundreds of respectable people was disrupted by a
-small group of bandit (excuse the term) intelligentsia with the
-obvious  connivance of the police. The president of the Society
-for the Good Old Country Against Evil Influences  informed  our
-correspondent  that  the  Society intended to take into its own
-hands the matter of the protection of the well-earned  rest  of
-fellow  citizens.  In no equivocal manner, the president let it
-be known whom specifically the people regarded as the source of
-the   harmful    infection,    banditism,    and    militarized
-hooliganism..."
-     On  page  twelve, the paper devoted a column to an article
-by "the outstanding proponent of  the  latest  philosophy,  the
-laureate  of  many  literary prizes, Doctor Opir." The treatise
-was titled "World Without Worry." With beautiful words and most
-convincingly indeed, Doctor Opir established the omnipotence of
-science, called  for  optimism,  derided  gloomy  skeptics  and
-denigrators, and invited all "to be as children." He assigned a
-specially  important  role  in  the  formation  of contemporary
-(i.e.,    anxiety-free)    psychology    to    electric    wave
-psychotechnics. "Recollect what a wonderful charge of vigor and
-good feeling is imparted by a bright, happy, and joyful dream!"
-exclaimed  this representative of the latest philosophy. "It is
-no wonder that sleep has been known for over a hundred years to
-be a curative agent for many psychic disturbances. But  we  are
-all  a touch ill: we are sick with our worries, we are overcome
-by the trivia of daily routine, we are irritated  by  the  rare
-but  still remaining few malfunctions, the inevitable frictions
-among individuals, the normal healthy  sexual  unsatisfiedness,
-the  dissatisfaction with self which is so common in the makeup
-of each person. ... As fragrant bath salts wash away  the  dust
-of  travel  from  our tired bodies, so does a joyful dream wash
-away and purify a tired psyche. So now, we no  longer  have  to
-fear  any  anxieties  or malfunctions. We well know that at the
-appointed hour, the invisible radiation of the dream generator,
-which together with the public I tend to call by  the  familiar
-name of 'the shivers,' will heal us, fill us with optimism, and
-return  to us the wonderful feeling of the joy of being alive."
-Further, Doctor Opir expounded that the shivers were absolutely
-harmless physically and psychologically, and that  the  attacks
-of detractors who wished to see in the shivers a resemblance to
-narcotics and who demagogically ranted about a "doped mankind,"
-could  not  but  arouse  in  us a painful incomprehension, and,
-conceivably, some stronger public-spirited emotions that  could
-be   dangerous   to  the  malevolently  inclined  citizens.  In
-conclusion, Doctor Opir pronounced a happy dream to be the best
-kind of rest, vaguely hinted that the shivers  constituted  the
-best antidote to alcoholism and drug addiction, and insistently
-warned  that the shivers should not be confused with other (not
-medically approved) methods of electric wave application.
-     The weekly Golden Days informed the public that a valuable
-canvas, ascribed in the opinion of experts to the  gifted  band
-of  Raphael,  had  been stolen from the National Art Galleries.
-The weekly called the attention of the authorities to the  fact
-that  this  criminal  act  was  the  third during the past four
-months of this year, and that neither of the previously  stolen
-works of art had ever been found.
-     All  in  all,  there  was  really  nothing  to read in the
-weeklies. I glanced through them quickly, and they left me with
-the most depressing impression.
-     All  were  filled  with   desolate   witticisms,   artless
-caricatures,  among  which  the  "captionless" series stood out
-with   particular   imbecility,   with   biographies   of   dim
-personalities, slobbering sketches of life in various layers of
-society, nightmarish series of photos with such titles as "Your
-husband  at work and at home," endless amounts of useful advice
-on how to occupy your time without, God forbid, burdening  your
-head,   passionately   idiotic   sallies   against  alcoholism,
-hooliganism, and  debauchery,  and  calls  to  join  clubs  and
-choruses  with  which  I  was already familiar. There were also
-memoirs of participants in the "fracas"  and  in  the  struggle
-against  organized  crime, which were served up in the literary
-style of jackasses totally  lacking  in  taste  or  conscience.
-These   were   obviously   exercises  of  addicts  of  literary
-sensationalism, loaded with suffering  and  tears,  magnificent
-feats  and  saccharine  futures. There were endless crosswords,
-chainwords, rebuses, and puzzle pictures.
-     I flung the pile of papers into the corner. What a  dreary
-place  they  had  here!  The  boob  was  coddled,  the boob was
-lovingly nurtured, and the boob was cultivated;  the  boob  had
-become  the  norm; a little more and he would become the ideal,
-while jubilant doctors of  philosophy  would  exultantly  dance
-attendance  upon him. But the papers were in full choreographic
-swing even now. Oh, what a wonderful  boob  we  have!  Such  an
-optimistic  boob,  and such an intelligent boob, such a healthy
-alert boob, and with such a fine sense of humor; and  oh  boob,
-how well and adroitly you can solve crossword puzzles! But most
-important  of  all,  boob,  don't  you  worry  about  a  thing,
-everything is  quite  all  right,  everything  is  just  dandy,
-everything  is in your service, the science and the literature,
-just so you can be amused and  don't  have  to  think  about  a
-thing....  As  for those seditious skeptics and hoodlums, boob,
-we'll take care of them! With your help, we can't help but take
-care of them! What are they complaining about, anyway? Do  they
-have more needs than other people?
-     Dreariness and desolation! There had to be some curse upon
-these   people,   some   awful  predilection  for  dangers  and
-disasters. Imperialism, fascism, tens  of  millions  of  people
-killed  and  lives  destroyed, including millions of these same
-boobs, guilty and innocent, good and bad. The last  skirmishes,
-the  last  putsches,  especially pitiless because they were the
-last. Criminals,  the  military  driven  berserk  by  prolonged
-uselessness,  all kinds of leftover trash from intelligence and
-counterintelligence,  bored  by  the  sameness  of   commercial
-espionage,  all  slavering  for  power. Again we were forced to
-return  from  space,  to  come  out  of  our  laboratories  and
-factories,  to call back our soldiers. And we managed it again.
-The zephyr was  gently  turning  the  pages  of  <i>History  of
-Fascism</i> by my feet. But hardly had we had the time to savor
-the  cloudless  horizons,  when  out  of  these  same sewers of
-history crept the scum with submachine guns,  homemade  quantum
-pistols, gangsters, syndicates, gangster corporations, gangster
-empires.  "Minor  malfunctions  are  still encountered here and
-there," soothed and calmed Doctor Opir,  while  napalm  bottles
-flew through university windows, cities were seized by bands of
-outlaws,   and  museums  burned  like  candles....  All  right.
-Brushing aside Doctor Opir and his kind, once again we came out
-of space, out of the labs and factories, recalled the soldiers,
-and once again managed the problem. And again  the  skies  were
-clear. Once more the Opirs were out, the weeklies were purring,
-and once more filth was flowing out of the same sewers. Tons of
-heroin,  cisterns  of  opium, and oceans of alcohol, and beyond
-all that something new, something for which we had no  name....
-Again  everything  was  hanging by a thread for them, and boobs
-were solving crosswords, dancing the fling, and desired but one
-thing: to have fun. But somewhere  idiot  children  were  being
-born,  people  were  going insane, some were dying strangely in
-bathtubs, some were dying no less  strangely  with  some  group
-called  the  Fishers,  while art patrons defended their passion
-for art with brass knuckles. And the weeklies  were  attempting
-to  cover  this  foul-smelling  bog  with a crust, fragile as a
-meringue,  of  cloyingly  sweet  prattle,  and  this  or   that
-diplomaed  fool glorified sweet dreams, and thousands of idiots
-surrendered with relish to dreams in lieu  of  drunkenness  (so
-that they need not think)... and again the boobs were persuaded
-that  all  was  well,  that  space  was  being  developed at an
-unprecedented pace (which was true), and that sources of energy
-would last for billions of years (which was  also  true),  that
-life  was  becoming  unquestionably more interesting and varied
-(which was also undoubtedly true, but  not  for  boobs),  while
-demagogue-denigrators (real-thinking men who considered that in
-our times any drop of pus could infect the whole of mankind, as
-once upon a time a beer putsch turned into a world menace) were
-foreign  to  the  people's  interests and deserved of universal
-condemnation. Boobs and criminals, criminals and boobs.
-     "Have to  work  at  it,"  I  said  aloud.  "To  hell  with
-melancholy! We'd show you skeptics!"
-     It  was  time  to  go see Rimeyer. Although there were the
-Fishers. But all right, the Fishers could be attended to later.
-I was tired of poking around in the dark. I  went  out  in  the
-yard. I could hear Aunt Vaina feeding Len.
-     "But, Mom, I don't want any!"
-     "Eat, son, you must eat. You are so pale."
-     "I don't want to. Disgusting lumps l"
-     "What lumps? Here, let me have some myself! Mm! Delicious!
-Just try some and you'll see it's very tasty."
-     "But I don't want any! I'm ill, I'm not going to school."
-     "Len, what are you saying? You've skipped a lot of days as
-it is."
-     "So what?"
-     "What  do  you  mean,  so  what?  The director has already
-called me twice. We'll be fined."
-     "Let them fine us!"
-     "Eat, son, eat. Maybe you didn't get enough sleep?"
-     "I didn't. And my stomach hurts... and my head...  and  my
-tooth, this one here, you see?"
-     Len's  voice sounded peevish, and I immediately visualized
-his pouting lips and his swinging stockinged foot.
-     I went out the gate. The day was again  clear  and  sunny,
-full of bird twitter. It was still too early, so that on my way
-to  the Olympic, I met only two people. They walked together by
-the curb, monstrously out of place in the joyful world of green
-branch and clear blue sky. One was painted  vermilion  and  the
-other  bright  blue.  Sweat  beaded  through the paint on their
-bodies. Their  breaths  heaved  through  open  mouths  and  the
-protruding  eyes were bloodshot. Unconsciously I unbuttoned all
-the buttons of my shirt and  breathed  with  relief  when  this
-strange pair passed me.
-     At  the hotel I went right up to the ninth floor. I was in
-a very determined mood. Whether Rimeyer wanted to  or  not,  he
-would  have to tell me everything I wanted to know. As a matter
-of fact, I needed him now for other things as well. I needed  a
-listener,  and in this sunny bedlam I could talk openly only to
-him, so far. True, this was not the Rimeyer I had  counted  on,
-but this too had to be talked cut in the end....
-     The red-headed Oscar stood by the door to Rimeyer's suite,
-and, seeing  him,  I slowed my steps. He was adjusting his tie,
-gazing pensively at the ceiling. He looked worried.
-     "Greetings," I said -- I had to start somehow.
-     He wiggled his eyebrows and looked  me  over,  and  I  was
-aware that he remembered me. He said slowly, "How do you do."
-     "You want to see Rimeyer, too?" l asked.
-     "Rimeyer  is  not feeling well," he said. He stood hard by
-the door and apparently had no intention of letting me by.
-     "A pity," I said, moving up  on  him.  "And  what  is  his
-problem?"
-     "He is feeling very bad."
-     "Oh, oh!" I said. "Someone should have a look."
-     I  was  now  right up against Oscar. It was obvious he was
-not about to give way. My shoulder responded  at  once  with  a
-flare of pain.
-     "I am not sure it's all that necessary," he said.
-     "What do you mean? Is it really that bad?"
-     "Exactly.  Very  bad.  And  you  shouldn't bother him. Not
-today, or any other day!"
-     It seems I arrived in time, I thought, and  hopefully  not
-too late.
-     "Are you a relative of his?" I asked. My attitude was most
-peaceable.
-     He grinned.
-     "I  am  his  friend.  His  closest  friend in this town. A
-childhood friend, you might say."
-     'This is most touching," I said. "But I am  his  relative.
-Same as a brother. Let's go in together and see what his friend
-and brother can do for poor Rimeyer."
-     "Maybe his brother has already done enough for Rimeyer."
-     "Really now... I only arrived yesterday."
-     "You  wouldn't,  by any chance, have other brothers around
-here?"
-     "I don't think there are any among your friends, with  the
-exception of Rimeyer."
-     While  we  were  carrying  on  with  this  nonsense, I was
-studying him most carefully. He didn't look too nimble  a  type
--- even  considering  my  defective  shoulder.  But he kept his
-hands in his pockets all the time, and although I didn't  think
-he  would  risk  shooting  in the hotel, I was not of a mind to
-chance it. Especially as I had  heard  of  quantum  dischargers
-with limited range.
-     I  have been told critically many times that my intentions
-are  always  clearly  readable  on  my  face.  And  Oscar   was
-apparently  an  adequately  keen  observer. I was coming to the
-conclusion that he obviously did not  have  anything  there  at
-all,  that  the  hands-in-the-pocket  act was a bluff. He moved
-aside and said, "Go on in."
-     We entered. Rimeyer was indeed in a bad way. He lay on the
-couch covered with a torn  drape,  mumbling  in  delirium.  The
-table was overturned, a broken bottle stained the middle of the
-floor,  and  wet  clothes  were  strewn  all  over  the room. I
-approached Rimeyer and sat down by him so as not to lose  sight
-of  Oscar,  who  stood by the window, half-sitting on the sill.
-Rimeyer's eyes were open. I bent over him.
-     "Rimeyer," I called. "It's Ivan. Do you recognize me?"
-     He regarded me dully. There was a fresh cut  on  his  chin
-under the stubble.
-     "So  you got there already..." he muttered. "Don't prolong
-the Fishers... doesn't happen... don't  take  it  so  hard  ...
-bothered me a lot... I can't stand..."
-     It  was pure delirium. I looked at Oscar. He listened with
-interest, his neck stretched out.
-     "Bad when you wake up..." mumbled Rimeyer. "Nobody... wake
-up... they start... then they don't wake up..."
-     I disliked Oscar more and more.  I  was  annoyed  that  he
-should  be  hearing  Rimeyer's ravings. I didn't like his being
-here ahead of  me.  And  again,  I  didn't  like  that  cut  on
-Rimeyer's  chin -- it was quite fresh. How can I be rid of you,
-red-haired mug, I wondered.
-     "We should call a doctor," I said. "Why didn't you call  a
-doctor, Oscar? I think it's delirium tremens."
-     I  regretted  the  words  immediately.  To my considerable
-surprise, Rimeyer did not smell of alcohol at  all,  and  Oscar
-apparently knew it. He grinned and said, "Delirium tremens? Are
-you sure?"
-     "We  have  to call a doctor at once," I said. "Also, get a
-nurse."
-     I put my hand on the phone. He jumped up instantly and put
-his hand on mine.
-     "Why should you do it?" he said. "Better  let  me  call  a
-doctor. You are new here and I know an excellent doctor."
-     "Well,  what kind of a doctor is he?" I objected, studying
-the cut on his knuckles -- which was also quite new.
-     "An exemplary doctor. Just happens to be a  specialist  on
-the DT's."
-     Rimeyer   said   suddenly,   "So  I  commanded...  <i>also
-spracht</i> Rimeyer... alone with the world..."
-     We turned to look at him. He spoke haughtily, but his eyes
-were closed, and his face, draped in loose, gray  skin,  seemed
-pathetic.  That  swine  Oscar, I thought, where does he get the
-gall to linger here? A sudden wild thought flashed  through  my
-head -- it seemed at that moment exceedingly well conceived: to
-disable  Oscar with a blow to the solar plexus, tie him up, and
-force him then and there  to  expose  everything  he  knew.  He
-probably  knew  quite  a lot. Possibly everything. He looked at
-me, and in his pale eyes was a blend of fear and hatred.
-     "All right," I said. "Let the hotel call the doctor."
-     He removed his hand and I called  service.  While  waiting
-for  the doctor, I sat by Rimeyer, and Oscar walked from corner
-to corner, stepping over the liquor puddle. I followed him  out
-of  the  corner  of  my  eye. Suddenly he stooped and picked up
-something off the floor. Something small and multicolored.
-     "What have you got there?" I inquired indifferently.
-     He hesitated a bit and then threw a small flat box with  a
-polychrome sticker on my knees.
-     "Ah!" I said, and looked at Oscar. "Devon."
-     "Devon," he responded. "Strange that it's here rather than
-in the bathroom."
-     The  devil,  I  thought.  Maybe  I  was still too green to
-challenge him openly. I still knew  but  very  little  of  this
-whole mess.
-     "Nothing strange about that," I said at random. "I believe
-you distribute  that  repellent.  It's  probably a sample which
-fell out of your pocket."
-     "Out of my pocket?" He was astonished. "Oh, you think that
-I... But I finished my assignments a long time ago, and now I'm
-just taking it easy. But if you're interested, I can be of some
-help."
-     That s very interesting, I said. "I will consult --"
-     Unfortunately, the door flew open at  this  point,  and  a
-doctor accompanied by two nurses entered the room.
-     The  doctor  turned  out  to  be a decisive individual. He
-gestured me off the couch and flung the drape off  Rimeyer.  He
-was completely naked.
-     "Well, of course," said the doctor. "Again..."
-     He raised Rimeyer's eyelid, pulled down his lower lip, and
-felt his  pulse.  "Nurse - cordeine! And call some chambermaids
-and have them clean out these  stables  till  they  shine."  He
-stood up and looked at me. "A relative?"
-     "Yes," I said, while Oscar kept still.
-     "You found him unconscious?"
-     "He was delirious," said Oscar.
-     "You carried him out here?"
-     Oscar hesitated.
-     "I  only  covered  him  with  the drape," he said. "When I
-arrived, he was lying as he is now. I was afraid he would catch
-cold."
-     The doctor regarded him for a while, and  then  said,  "In
-any  case,  it  is immaterial. Both of you can go. A nurse will
-stay with him. You can call this evening. Goodbye."
-     "What is the matter with him, Doctor?" I asked.
-     "Nothing special. Overtired, nervous exhaustion... besides
-which he apparently smokes too much. Tomorrow he can be  moved,
-and  you  can take him home with you. It would be unhealthy for
-him to stay here with us. There are too many  amusements  here.
-Goodbye."
-     We went out into the corridor.
-     "Let's go have a drink," I said.
-     "You forgot that I don't drink," corrected Oscar.
-     "Too  bad.  This  whole  episode  has upset me. I'd like a
-snort. Rimeyer always was such a healthy specimen."
-     "Well, lately he has slipped a lot," said Oscar carefully.
-     "Yes, I hardly recognized him when I saw him yesterday."
-     "Same here," said Oscar. He didn't believe a word  of  it,
-and neither did I.
-     "Where are you staying?" I asked.
-     "Right  here,"  said  Oscar.  "On  the floor below, number
-817."
-     "Too bad that you don't drink. We could go  to  your  room
-and have a good talk."
-     "Yes,  that wouldn't be a bad idea. But, regretfully, I am
-in a great rush." He was  silent  awhile.  "Let  me  have  your
-address. Tomorrow morning, I'll be back and drop in to see you.
-About ten -- will that suit you? Or you can ring me up."
-     "Why  not?"  I said and gave him my address. "To be honest
-with you, I am quite interested in Devon."
-     "I think we'll be able to come to an understanding,"  said
-Oscar. "Till tomorrow!"
-     He  ran  down  the  stairs.  Apparently he really was in a
-hurry. I went down in the elevator and sent off a  telegram  to
-Matia: "Brother very ill, feeling very lonesome, but keeping up
-spirits,  Ivan."  I truly did feel very much alone. Rimeyer was
-out of the game again, at least for a day. The only hint he had
-given me was the advice about the Fishers. I had  nothing  more
-definite. There were the Fishers, who were located somewhere in
-the  old  subway; there was Devon, which in same peripheral way
-could have something to do with my  business,  but  also  could
-just  as  well  have  no  connection  with it at all; there was
-Oscar, clearly connected  with  Devon  and  Rimeyer,  a  player
-sufficiently ominous and repulsive, but undoubtedly only one of
-many  such  unpleasant  types  on the local cloudless horizons;
-then again there was a certain "Buba," who  supplied  pore-nose
-with  Devon....  After  all,  I have been here just twenty-four
-hours, I thought. There is time. Also, I could still  count  on
-Rimeyer in the final analysis, and there was the possibility of
-finding  Peck.  Suddenly  I  remembered the events of the night
-before and sent a wire to  Sigmund:  "Amateur  concert  on  the
-twenty-eighth,  details  unknown,  Ivan."  Then I beckoned to a
-porter and inquired as to the shortest way to the old subway.
-
-<ul><a name=9></a><h2>Chapter NINE</h2></ul>
-
-     "You would do better to come  at  night.  It's  too  early
-now."
-     "I prefer now."
-     "Can't wait, eh? Perhaps you've got the wrong address?"
-     "Oh no, I haven't got it wrong."
-     "You must have it now, you are sure?"
-     "Yes, now and not later."
-     He clicked his tongue and pulled on his lower lip. He was
-     short,  well  knit,  with  a  round  shaved head. He spoke
-hardly moving his tongue and rolling his eyes  languidly  under
-the lids. I thought he had not had enough sleep. His companion,
-sitting  behind  the  railing in an easy chair, apparently also
-had missed some. But he did not utter a word  and  didn't  even
-look in my direction. It was a gloomy place, with stale air and
-warped  panels  which  had  sprung away from the walls. A bulb,
-dimmed with dust, hung shadeless from the ceiling  on  a  dirty
-cable.
-     "Why not come later?" said the round-head. "When everybody
-comes."
-     "I just got the urge," I said diffidently.
-     "Got  the  urge..."  He  searched  in his table drawer. "I
-don't even have a form left. Eli, do you have some?"
-     The latter, without breaking his silence,  bent  over  and
-pulled  out  a  crumpled sheet of paper from somewhere near the
-railing.
-     The round-head said, yawning, "Guys that come at break  of
-day...  nobody  here...  no  girls... they're still in bed." He
-proffered the form. "Fill it out and sign. Eli and I will  sign
-as  witnesses.  Turn  in  your  money.  Don't worry, we keep it
-honest. Do you have any documents?"
-     "None."
-     "That's good, too."
-     I scanned the form. "In open deposition and of my own
-     free  will,  I,  the  undersigned,  in  the  presence   of
-witnesses,  earnestly request to be subjected to the initiation
-trials toward the mutual quest of membership in the Society  of
-VAL."  There  were  blank spaces for signature of applicant and
-signatures of witnesses.
-     "What is VAL?" I asked.
-     "That's the way we are registered,"  answered  round-head.
-He was counting my money.
-     "But how do you decipher it?"
-     "Who  knows? That was before my time. It's VAL, that's all
-there is to it. Maybe  you  know,  Eli?"  Eli  shook  his  bead
-lazily. "Well, really, what do you care?"
-     "You are absolutely right." I inserted my name and signed.
-     Round-head  looked it over, signed it, and passed the form
-to Eli.
-     "You look like a foreigner," he said.
-     "Right."
-     "In  that  case,  add  your  home  address.  Do  you  have
-relatives?"
-     "No."
-     "Well then, you don't have to. All set, Eli? Put it in the
-folder. Shall we go?"
-     He lifted up the gate in the railway and walked me over to
-a massive  square  door,  probably left over from the days when
-the subway had been fitted out as an atomic shelter.
-     "There is no choice," he said as though  in  self-defense.
-He   pulled   the   slides  and  turned  a  rusty  handle  with
-considerable effort. "Go straight down the  corridor  and  then
-you'll see for yourself."
-     I thought that I heard Eli snickering behind him. I turned
-around.  A  small  screen was fitted in the railing in front of
-Eli. Something was moving on the screen, but I  could  not  see
-what  it  was.  Round-bead put all his weight on the handle and
-swung back the door. A dusty passage became visible. For a  few
-seconds   he  listened  and  then  said,  "Straight  down  this
-corridor."
-     "What will I find there?" I said.
-     "You'll get what you were looking for. Or have you changed
-your mind?"
-     All of which was clearly not what I was looking  for,  but
-as  is  well known, nobody knows anything until he has tried it
-himself I stepped over the high sill and the door  shut  behind
-me with a clang. I could hear the latches screeching home.
-     The  corridor  was  lit  by  a few surviving lamps. It was
-damp, and mold grew an the cement walls. I stood still  awhile,
-listening, but there was nothing to be heard but the infrequent
-tap  of  water drops. I moved forward cautiously. Cement rubble
-crunched underfoot. Soon the corridor came to  an  end,  and  I
-found  myself in a vaulted, poorly lit concrete tunnel. When my
-eyes accommodated to the darkness, I discerned a set of tracks.
-The rails were badly rusted and puddles of dark  water  gleamed
-motionless  along  their  length.  Sagging cables hung from the
-ceiling. The dampness seeped to  the  marrow  of  my  bones.  A
-repulsive  stench  of sewer and carrion filled my nostrils. No,
-this was not what I was looking for. I was not  of  a  mind  to
-fritter away my time and thought of going back and telling them
-that  I would be back some other time. But first, simply out of
-curiosity, I decided to take a short walk along the  tunnel.  I
-went  to  the right toward the light of distant bulbs. I jumped
-puddles, stumbled over the rotting ties, and got  entangled  in
-loose wires. Reaching a lamp, I stopped again.
-     The  rails  had  been  removed. Ties were strewn along the
-walls, and holes filled with water gaped  along  the  right  of
-way.  Then  I  saw the rails. I have never seen rails in such a
-condition.  Some  were  twisted  into  corkscrews.  They   were
-polished  to  a  high  shine  and reminded me of gigantic drill
-bits. Others were driven with titanic force into the floor  and
-walls  of  the  tunnel.  A third group were tied into knots. My
-skin crawled at this sight. Some were simple knots, some with a
-single bow, some with a double bow like  shoelaces.  They  were
-mauve and brown.
-     I looked ahead into the depths of the tunnel. The smell of
-rotting  carrion  wafted  out  of it, and the dim yellow lights
-winked rhythmically as though something swayed  in  the  draft,
-covering  and uncovering them periodically. My nerves gave way.
-I felt that this was nothing more than a  stupid  joke,  but  I
-couldn't  control  myself. I squatted down and looked around. I
-soon found what I was looking  for  --  a  yard-long  piece  of
-reinforcing  rod.  I  stuck it under my arm and went ahead. The
-iron was wet and cold and rough with rust.
-     The reflection of the winking lights glinted  on  slippery
-wet   walls.   I   had   noticed  some  time  back  the  round,
-strange-looking marks on them, but at first did  not  pay  them
-any  attention. Then I became interested and examined them more
-closely. As far as the eye could reach, there were two sets  of
-round  prints on the walls at one-meter intervals. It looked as
-though an elephant had run along the wall -- and not  too  long
-ago at that. On the edge of one of the prints, the remains of a
-crushed  centipede  still  struggled feebly. Enough, I thought,
-time to go back. I looked along the tunnel. Now I could plainly
-see the swaying curves of black cables under the lamps. I  took
-a  better  grip on the rod and went ahead, holding close to the
-wall.
-     The whole thing was getting  through  to  me.  The  cables
-sagged under the arch of the tunnel, and on them, tied by their
-tails  into  hairy clusters, hung hundreds upon hundred of dead
-rats, swaying in the draft. Tiny teeth glinted horribly in  the
-semi-dark,  and  rigid little legs stuck out in all directions.
-The clusters  stretched  in  long  obscene  garlands  into  the
-distance.  A thick, nauseating stench oozed from under the arch
-and flowed along the tunnel, as palpable as glutinous jelly.
-     There was a piercing  screech  and  a  huge  rat  scurried
-between  my  feet.  And  then another and another. I backed up.
-They were fleeing from there, from the dark where there was not
-a single lamp. Suddenly, warm air came pulsing  from  the  same
-direction.  I  felt  a  hollow  space with my elbow and pressed
-myself into the niche. Something  live  squirmed  and  squeaked
-under  my  heel;  I swung my iron rod without looking. I had no
-time for rats, because I could hear something  running  heavily
-but softly along the tunnel, splashing in the puddles. It was a
-mistake  to  get involved in this business, thought I. The iron
-rod seemed very light and insignificant in comparison with  the
-bow-tied  rails.  This was no flying leech, nor a dinosaur from
-the Kongo... don't let  it  be  a  giganto-pithek,  I  thought,
-anything but a giganto-pithek. These donkeys would have the wit
-to  catch  one  and  let it loose in the tunnel. I was thinking
-very poorly in those few seconds. And suddenly for no reason at
-all I thought of Rimeyer. Why had he sent me here? Had he  gone
-out of his mind? If only it was not a giganto-pithek!
-     It  raced  by  me  so fast that I couldn't discern what it
-was.
-     The tunnel boomed from its  gallop.  Then  there  was  the
-despairing  scream  of  a  caught  rat  right  close  by and...
-silence. Cautiously I peeked out. He stood about ten paces away
-directly under one of the lamps, and my legs suddenly went limp
-from relief.
-     "Smart-alec entrepreneurs," I said aloud,  almost  crying.
-'They would dream up something like this."
-     He  heard my voice and raising his stern legs, pronounced:
-"Our temperature is two meters,  twelve  inches,  there  is  no
-humidity, and what there isn't is not there."
-     "Repeat your orders," I said, approaching him.
-     He  let  the  air  out  of  his  suction  cups with a loud
-whistle, twitched his  legs  mindlessly,  and  ran  up  on  the
-ceiling.
-     "Come down," I said sternly, "and answer my question."
-     He  hung  over  my  head,  this  poor long-obsolete cyber,
-intended for work an the asteroids, pitiable and out of  place,
-covered with flakes of corrosion and blobs of black underground
-dirt.
-     "Get down," I barked.
-     He flung the dead rat at me and sped off into the dark.
-     "Basalts!   Granites!"  he  yelled  in  different  voices.
-"Pseudo-metamorphic types! I am over Berlin! Do you copy!  Time
-to get to bed!"
-     I  threw  away  the rod and followed him. He ran as far as
-the next lamp,  came  down,  and  began  to  dig  the  concrete
-rapidly,  like  a  dog,  with his heavy work manipulators. Poor
-chap, even in better times his brain was capable of  performing
-properly only in less than one one-hundredth of a G, and now he
-was  altogether  out  of his mind. I bent over him and began to
-search for the control center under his armor. "The rotters," I
-said aloud. The controls were peened over  as  though  battered
-with a sledge. He stopped digging and grabbed me by the leg.
-     "Stop!" I shouted. "Desist!"
-     He  desisted,  lay  down on his side, and informed me in a
-basso voice, "I am deathly tired of him, Eli. Now would be  the
-time for a shot of brandy."
-     Contacts  clicked  inside  him  and  music  poured  forth.
-Hissing and whistling, he gave a  rendition  of  the  "Hunters'
-March."  I  was  looking  at  him  and  thinking how stupid and
-repulsive it all was, how  ridiculous  and  at  the  same  time
-frightening.  If  I  had  not  been  a  spaceman, if I had been
-frightened and run, he would almost certainly have  killed  me.
-But  nobody  here  knew  I  had  been in space. Nobody. Not one
-person. Even Rimeyer didn't know.
-     "Get up," I said.
-     He buzzed and started to dig the wall, and I turned around
-and went back. All  the  time  while  I  was  returning  to  my
-turn-off  I could hear him rattling and clanging in the pile of
-contorted rails, hissing with  the  electrowelder  and  ranting
-nonsense in two voices.
-     The  anti-atomic door was already open, and I stepped over
-the sill, swinging it shut behind me.
-     "Well, how was it?" asked round-head.
-     "Dumb," I replied.
-     "I had no idea you were a spaceman. You have worked out on
-the planets?"
-     "I have. But it's still dumb. For  fools.  For  illiterate
-keyed-up boobs."
-     "What kind?"
-     "Keyed-up."
-     "Well  --  there you got it wrong. Lots of people like it.
-Anyway, I told you  to  come  at  night.  We  don't  have  much
-amusement  for  singles." He poured some whiskey and added some
-soda from the siphon. "Would you like some?"
-     I took the glass and leaned on the railing.  Eli  gloomily
-regarded  the  screen,  a cigarette sticking to his lip. On the
-screen careened shifting views of the glistening tunnel  walls,
-twisted  rails,  black  puddles,  and  flying  sparks  from the
-welder.
-     'That's  not  for  me,"  I  announced.  "Let  barbers  and
-accountants  enjoy  it. Of course, I have nothing against them,
-but what I need is something the likes of which I have not seen
-in my entire life."
-     "So  you  don't  know  yourself  what  you   want,"   said
-roundhead. "It's a hard case. Excuse me, you aren't an Intel?"
-     "Why?"
-     "Well,  don't  take offense -- we are all equal before the
-grim reaper, you understand. What am  I  trying  to  say?  That
-Intels  are  the most difficult clients, that's all. Isn't that
-right, Eli? If one of your barbers or bookkeepers  comes  here,
-he  knows  very  well  what it is he needs. He needs to get his
-blood going, to show off and be proud of himself,  to  get  the
-girls  squealing,  and exhibit the punctures in his side. These
-fellows are simple, each one wants to consider himself  a  man.
-After  all,  who  is  he  --  our  client? He has no particular
-capabilities, and he doesn't need any. In earlier times, I read
-in a book, people used to be  envious  of  each  other  --  the
-neighbor  is  rolling  in  luxury  and  I  can't  save up for a
-refrigerator -- how could you put up with that?  They  hung  on
-like bulldogs to all kinds of trash, to money, to cushy jobs --
-they  laid  down  their  lives  for such things. The guy with a
-foxier head or a stronger fist would wind up on  top.  But  now
-life  has  become  affluent  and  dull and there is a plenty of
-everything. What shall a man apply himself to? A man is  not  a
-fish, for all that, he is still a man and gets bored, but can't
-dream  up  something  to  do  for  himself. To do that you need
-special talents, you need to read a mountain of books, and  how
-can  he  do  that  when  they  make  him  throw  up.  To become
-world-famous or to invent some new  machine,  that's  something
-that  wouldn't  pop  into his head, but even if it did, of what
-use would it be? Nobody really needs you,  not  even  your  own
-wife  and  children if you examine it honestly. Right, Eli? And
-you don't need  anybody  either.  Nowadays,  it  seems,  clever
-people  think  things  up  for  you,  something  new like these
-aerosols, or the shivers, or a new dance.  There  is  that  new
-drink -- it's called a polecat. Wanna me knock one together for
-you?  So  he  downs some of this polecat, his eyes crawl out of
-their sockets, and he's happy. But as long as his eyes  are  in
-their sockets, life is just as dull as rainwater for him. There
-is an Intel that comes here to us, and every time he complains:
-Life,  he  says,  is dull, my friends... but I leave here a new
-man; after, say, 'bullets' or 'twelve to one,' I see myself  in
-a  completely  new  light. Right, Eli? Everything becomes sweet
-all over again, food, drink, women."
-     "Yes," I said  sympathetically.  "I  understand  you  very
-well. But for me it's all too stale."
-     "Slug is what he needs," said Eli in his bass voice.
-     "What's that again?"
-     "Slug is what I said."
-     Round-head puckered in distaste.
-     "Aw, come on, Eli. What's with you today?"
-     "I  don't  give a hoot for the likes of him," said Eli. "I
-just don't like these guys.  Everything  is  insipid  for  him,
-nothing suits him."
-     "Don't  listen  to him," said round-head. "He hasn't slept
-all night and is very tired."
-     "Well, why not," I contradicted. "I am  quite  interested.
-What is this slug?"
-     Round-head puckered his face again.
-     "It's  not decent, you understand?" he said. "Don't listen
-to Eli, he is a good enough guy,  a  simple  fellow,  but  it's
-nothing  for  him  to  lambaste a man. It's a bad term. Certain
-types have taken to writing it all over the  walls.  Hooligans,
-that's  what  they  are, right? The snot-noses hardly know what
-it's about, but they write anyway. See how we had to plane  off
-the railing? Some son of a bitch carved into it, and if I catch
-him,  I'll  turn  his  hide inside out. We do have women coming
-here too."
-     "Tell  him,"  pronounced  Eli,   addressing   himself   to
-roundhead,  "that  he should get hold of a slug and quiet down.
-Let him find Buba..."
-     "Will you shut  up,  Eli?"  said  round-head,  now  angry.
-"Don't pay any attention to him."
-     Having  heard  the  name  Buba, I helped myself to another
-drink and settled more comfortably on the railing.
-     "What's it all about?" I said. "Some kind of secret vice?"
-     "Secret!" boomed Eli, and let out an obscene horselaugh.
-     Round-head laughed, too.
-     "Nothing can be a secret here,"  he  said.  "What  had  of
-secrets can there be when people are living it up at the age of
-fifteen?  The  dopes,  the  Intels, manufacture secrets. They'd
-like to get a fracas going on the twenty-eighth, they  are  all
-in  a  huddle, took some mine launchers out of town recently to
-hide them, like kids, honest to God! Right, Eli?"
-     "Tell him," the good simple  fellow  Eli  was  persisting.
-"Tell  him  to be off to Hell and gone. And don't go protecting
-him. Just tell him to go to Buba at the Oasis and that's that."
-     He threw my wallet and form on the railing. I finished the
-whiskey. Round-head said soberly, "Of course, it's entirely  up
-to  you,  but  my advice is to stay away from that stuff. Maybe
-we'll all come to it someday, but  the  later,  the  better.  I
-can't  even  explain it to you, I only feel that it is like the
-grave: never too late and always too soon."
-     "Thank you," I said.
-     "He even thanks you." Eli let  loose  another  horselaugh.
-"Have you seen anything like it! He thanks you!"
-     "We kept three dollars," said round-head. "You can tear up
-the blank.  Or  let  me tear it up. God forbid something should
-happen to you, the police will come looking to us."
-     "To be honest with you," I said, putting the wallet  away,
-"I  don't  understand  how  they  haven't  closed  your  office
-already."
-     "Everything is on the up and up with us," said round-head.
-"If you don't want any, no one is forcing you. But if something
-should happen, it's your own fault."
-     "No one is forcing the drug addicts either," I retorted.
-     "That's some comparison! Drugs are a profiteering  corrupt
-business!"
-     "Well,  okay,  I'll  be  seeing  you,"  I  said.  "Thanks,
-fellows. Where did you say to look for Buba?"
-     "At the Oasis," boomed Eli. "It's a cafe. Beat it."
-     "What a polite fellow you are, my  friend,"  I  said.  "It
-gets me right in my heart."
-     "Go on, beat it," repeated Eli. "Stinking Intel."
-     "Don't  get  so  excited,  pal,"  I  said, "or you'll earn
-yourself an ulcer. Save your stomach, it's your  most  valuable
-possession."
-     Eli  started  to  move slowly out from behind the railing,
-and I left. My shoulder had started to ache again.
-     A warm, heavy rain was falling outside. The leaves on  the
-trees  shone  wetly  and  joyfully, there was a smell of ozone,
-freshness and thunderstorm. I stopped  a  taxi  and  named  the
-Oasis.  The  street ran with fresh streams, and the city was so
-pretty and comfortable that it seemed improper to think of  the
-moldy and abandoned Subway.
-     The  rain  was  pelting in full swing when I jumped out of
-the car, ran across the sidewalk, and  burst  into  the  Oasis.
-There  were  quite  a  few  people,  most  of them were eating,
-including the bartender, who was spooning some soup  out  of  a
-dish  placed  among  drinking  glasses.  Those who had finished
-eating  sat  smoking  and  abstractedly  staring  out  of   the
-streaming  window  at  the  street.  I  approached  the bar and
-inquired in a low voice whether Buba was there.  The  bartender
-put down his spoon and surveyed the room.
-     "Naah," he said. "Why don't you have something to eat now,
-and he'll be along soon enough."
-     "How soon?"
-     "Twenty minutes, half an hour maybe."
-     "So!"  I  said.  "In  that case I'll have dinner, and then
-I'll come over and you can point him out to me."
-     "Uhuh," said the bartender, returning to his soup.
-     I picked up a tray, collected some sort of a meal, and sat
-down by the window away from the rest of the patrons. I  wanted
-to  think.  I  sensed  that there was enough data to ponder the
-problem effectively. Some sort of pattern seemed to be forming.
-Boxes of Devon in the bathroom. Pore-nose spoke about Buba  and
-Devon  (in  whispers).  Eli  talked of Buba and "slug." A clear
-chain of  links  --  bath,  Devon,  Buba,  slug.  Further:  the
-sunburned  fellow with the muscles cautioned that Devon was the
-worst of junk, while the roundhead saw  no  difference  between
-slug and the grave. It all had to fit together. It seemed to be
-what  we  were  looking  for.  If so, then Rimeyer had done the
-right thing to send me to  the  Fishers.  Rimeyer,  I  said  to
-myself,  why  did you send me to the Fishers? And even order me
-to do as I was told and not to fuss about it?  And  you  didn't
-know,  after  all,  that  I was a spaceman, Rimeyer. If you did
-know, there were still the other games with  bullets  and  "one
-against  twelve," besides the demented cyber. You really took a
-dislike to me for something or other, Rimeyer. Somehow  I  have
-crossed  you. But no, said I, this cannot be. It is simply that
-you did not trust me, Rimeyer.  It  is  simply  that  there  is
-something  that  I  do not know yet. For example, I do net know
-just who this Oscar is who trades in Devon in this resort  city
-and  who  is  connected with you, Rimeyer. Most likely you have
-been meeting with Oscar before our conversation in the elevator
-... I don't want to think about that.
-     There he was lying like a dead man and here I was thinking
-such things  about  him  when  he  could  not  defend  himself.
-Suddenly  I  felt a repulsive cold crawling feeling inside. All
-right, suppose we trapped this gang.  What  would  change?  The
-shivers  would  remain,  lop-eared Len would be up all night as
-before, Vousi would be coming home  disgustingly  drunk,  while
-customs  inspector  Pete would be smashing his face into broken
-glass. And all would  be  concerned  about  the  "good  of  the
-people."  Some  would be irrigated with tear gas, some would be
-driven into the ground  up  to  their  ears,  others  would  be
-converted  from  apehood  into something which passes muster as
-human.... And then the shivers would go out of  style  and  the
-people would be presented with the super-shivers, while in lieu
-of  the  extirpated slug a super-slug would surface. Everything
-would be for the good of the people. Have  fun,  Boobland,  and
-don't think about a thing!
-     Two  men  in  cloaks sat down at the next table with their
-trays. One of them seemed to me in some way familiar. He had  a
-haughty  thoroughbred  face,  and were it not for a thick white
-bandage on the left side  of  his  jaw,  I  was  sure  I  would
-recognize  him.  The other was a ruddy man with a bald pate and
-fussy movements. They were speaking quietly, but not so  as  to
-be  inaudible,  and  I  could  hear them quite well where I was
-sitting.
-     "Understand  me  correctly,"  the  ruddy  one  said   with
-conviction  while  hurriedly consuming his schnitzel, "I am not
-at all against theaters and museums. But the allocation for the
-municipal theater for the  past  year  has  not  been  expended
-fully, while only tourists visit the museums."
-     "Also picture thieves," inserted the man with the bandage.
-     "Drop  that, please, we don't have pictures that are worth
-the theft. Thank God,  they  have  learned  how  to  synthesize
-Sistine  Madonnas out of sawdust. I wish to call your attention
-to the point that dissemination of culture  in  our  time  must
-occur  in  an  entirely  different  manner. Culture must not be
-inculcated into the people, rather it  must  emanate  from  the
-people.  Public chorister, do-it-yourself groups, mass games --
-that is what our public needs."
-     "What our public needs is a good army of occupation," said
-the man with the bandage.
-     "Please stop talking that way,  when  you  actually  don't
-believe  what  you  are  saying.  Our  coverage  by the various
-associations is really  at  an  unacceptably  poor  level.  For
-instance,  Boella complained to me last night that only one man
-attends her readings, and he apparently only  does  so  out  of
-matrimonial intentions. But we need to distract the people from
-the  shivers,  from  alcohol,  from sexual pastimes. We need to
-raise the tone --"
-     The other interrupted, "What do you want from me?  That  I
-should  defend  your  project  against  that ass, our honorable
-mayor, today? Be my guest! It is absolutely all the same to me.
-But if you would like to hear my opinion about tone and spirit,
-let me tell you it does not exist, my dear Senator; it is  long
-dead! It has been smothered in belly fat! And if I were in your
-place I would take that into account and only that!"
-     The  ruddy  man  seemed to be crushed. He was silent for a
-while and then groaned suddenly, "Dear God, dear God, to  think
-of  what  we  have been driven to concern ourselves with! But I
-ask you -- is not someone flying to the stars? Somewhere  meson
-reactors  are  being  built,  new  learning  systems  are being
-devised! Dear God, I just recently grasped that we are not even
-a backwater, we are a preserve! In the eyes of the whole  world
-we  are  a  sanctuary  of stupidity, ignorance, and pornocracy.
-Imagine, Professor Rubenstein has a chair in our city  for  the
-second  year.  A  sociopsychologist  of  world  renown.  He  is
-studying us like animals.  Instinctive  Sociology  of  Decaying
-Economic  Structures  --  that's  the  name  of his work. He is
-interested in people as bearers of primeval instincts,  and  he
-complained  to  me that it was very difficult for him to gather
-data in countries where instinctive activity is  distorted  and
-suppressed by pedagogical systems! But with us he is in seventh
-heaven! In his own words, we don't have any activity other than
-instinctive!  I  was  insulted,  I was ashamed, but, good Lord,
-what could I say to contradict him? You must understand me! You
-are an intelligent man, my friend, I know you are a  cold  man,
-but  I  can't really believe that you are indifferent to such a
-degree."
-     The man with the bandage looked at him haughtily and then,
-abruptly, his cheek twitched. I recognized him at once: he  was
-the character with the monocle who had thrown the luminous slop
-all over me so deftly yesterday at the Art Patrons' hall.
-     Why,  you  vulture,  thought  I. You thief. So you need an
-army of occupation! Spirit smothered in lard indeed!
-     "Forgive me, Senator," he said. "I do understand  it  all,
-and  that's  precisely  why  it  is  perfectly clear to me that
-everything surrounding you is in a state of dementia. The final
-spasm! Euphoria!"
-     I got up and approached their table.
-     "May I join you?" I asked.
-     He stared at me in astonishment. I sat down.
-     "Please excuse me," I said.  "I  am,  to  be  specific,  a
-tourist  and  just  a  short  time  here;  while you seem to be
-natives and even to have some  connection  with  the  municipal
-government.  So  I  decided  to  inflict  myself on you. I keep
-hearing about Art Patrons, Art Patrons. But what it's all about
-no one seems to know."
-     The man with the bandage experienced another  tie  in  his
-cheek. His eyes grew wide -- he too recognized me.
-     "Art  Patrons?"  said the ruddy one. "Yes, there is such a
-barbarous organization with us here. It is very sad  that  such
-is the case, but it's so."
-     I  nodded,  studying  the  bandage.  My  acquaintance  had
-already regained his composure and was eating  his  jelly  with
-his accustomed haughty look.
-     "In  essence  they are simply modern-age vandals. I simply
-couldn't  find  a  more  appropriate  word.  They  pool   their
-resources  and  buy  up stolen paintings, statues, manuscripts,
-unpublished literary works, patents, and destroy them. Can  you
-imagine  how  revolting  that  is?  They  And some pathological
-delight in the destruction of examples of world  culture.  They
-gather in a large, well-dressed crowd and slowly, deliberately,
-orgiastically destroy them!"
-     "Oh  my,  my,  my!"  I  said,  not  taking my eyes off the
-bandage. "Such people should be hung by their legs."
-     "And we are after them," said the ruddy one.  "We  are  in
-pursuit of them on the legal level. We are unfortunately unable
-to  get  after  the  Artiques  and  the  Perchers,  who are not
-breaking any laws, but as far as the Art Patrons are  concerned
---"
-     "Are  you  finished  yet,  Senator?" inquired the bandaged
-one, ignoring me.
-     The ruddy one caught himself.
-     "Yes, yes. It's time for us to go.  You  will  excuse  us,
-please,"  he  said,  turning  to  me. "We have a meeting of the
-municipal council."
-     "Bartender!" called the bandaged one in a metallic  voice.
-"Would you call us a taxi."
-     "Have you been here long?" asked the ruddy man.
-     "Second day," I replied.
-     "Do you like it?"
-     "A beautiful city."
-     "Mm -- yes," he mumbled.
-     We  were  silent.  The  man  with  the  bandage impudently
-inserted his monocle and pulled out a cigar.
-     "Does it hurt?" I asked sympathetically.
-     "What, exactly?"
-     "The jaw," I said.  "And  the  liver  should  hurt,  too."
-"Nothing ever hurts me," he replied, monocle glinting. "Are you
-two acquainted?" the ruddy one asked in astonishment.
-     "Slightly," I said. "We had an argument about art."
-     The  bartender  called  out that the taxi had arrived. The
-man with the bandage immediately got up.
-     "Let's go, Senator," he said.
-     The ruddy one smiled at me abstractedly and also got up.
-     They set off for the exit. I followed them  with  my  eyes
-and went to the bar.
-     "Brandy?" asked the bartender.
-     "Quite,"  I  said.  I  shuddered with rage. "Who are those
-people I just spoke to?"
-     'The  baldy  is  a  municipal  counselor,  his  field  are
-cultural  affairs.  The  one  with  the  monocle  is  the  city
-comptroller."
-     "Comptroller," I said. "A scoundrel is what he is."
-     "Really?" said the barman with interest.
-     'That's right, really," I said. "Is Buba here?"
-     "Not yet. And how about the comptroller, what is he up
-     to?"
-     "A scoundrel, an embezzler, that's what he is," I said.
-     The bartender thought awhile.
-     "It could well be," he said. "In fact he's a baron -- that
-is, he used to be,  of  course.  His  ways,  sure  enough,  are
-unsavory.  Too  bad  I  didn't  go  vote  or I would have voted
-against him. What's he done to you?"
-     "It's you he's done. And I've given  him  some  back.  And
-I'll give him some more in due time. Such is the situation."
-     The  bartender,  not  understanding  anything,  nodded and
-said, "Hit it again?"
-     "Do," I said.
-     He poured me more brandy and said,
-     "And here is Buba, coming in."
-     I turned around and barely managed to keep the glass in my
-grip. I recognized Buba.
-
-<ul><a name=10></a><h2>Chapter TEN</h2></ul>
-
-     He stood by the door looking about him as though trying to
-remember where he had come and what he was  to  do  there.  His
-appearance was very unlike his old one, but I recognized him at
-once  anyway,  because for four years we sat next to each other
-in the lecture halls of the school, and then there were several
-years when we met almost daily.
-     "Say," I addressed the bartender. "They call him Buba?"
-     "Uhuh," said the bartender.
-     "What is it -- a nickname?"
-     "How should I know? Buba is Buba,  that's  what  they  all
-call him."
-     "Peck," I cried.
-     Everyone  looked  at me. He too slowly turned his head and
-his eyes searched for the caller. But he paid no  attention  to
-me.  As  though  remembering  something, he suddenly started to
-shake the water out of his cape with  convulsive  motions,  and
-then,  dragging  his heels, hobbled over to the bar and climbed
-with difficulty on the stool next to mine.
-     "The usual," he said to the bartender. His voice was  dull
-and strangled, as though someone held him by the throat.
-     "Someone  has  been  waiting  for  you,"  said the barman,
-placing before him a glass of neat  alcohol  and  a  deep  dish
-filled with granulated sugar.
-     Slowly he turned his head and looked at me, saying, "Well,
-what is it you want?"
-     His  drooping  eyelids were inflamed red, with accumulated
-slime in the corners. He breathed through his mouth  as  though
-suffering with adenoids.
-     "Peck  Xenai,"  I said quietly. "Undergraduate Peck Xenai,
-please return from earth to heaven."
-     He continued to regard me without a change in his  manner.
-Then he licked his lips and said, "A classmate, perhaps?"
-     I felt numb and terrified. He turned around, picked up his
-glass,  drank  it  down, gagging in revulsion, and began to eat
-the sugar with a large soup spoon.  The  bartender  poured  him
-another glass.
-     "Peck," I said, "old friend, don't you remember me?"
-     He looked me over again.
-     "I wouldn't say that. I probably did see you somewhere."
-     "Saw  me  somewhere!"  I  said  in desperation. "I am Ivan
-Zhilin. Could it be you have completely forgotten me?"
-     His hand holding the glass quivered almost  imperceptibly,
-and that was all.
-     "No,  friend,"  he  said, "forgive me, please, but I don't
-remember you."
-     "And you don't remember the 'Tahmasib' or Iowa Smith?"
-     "This heartburn has really got to me today,"  he  informed
-the bartender. "Let me have some soda, Con."
-     The bartender, who had listened with curiosity, poured him
-a soda.
-     "Bad  day,  today,  Con,"  he  said. "Can you imagine, two
-automates failed on me today."
-     The bartender shook his head and sighed.
-     "The manager is bitching," continued Buba, "called  me  on
-the  carpet and bawled me out. I am going to quit that place. I
-told him to go to hell and he fired me."
-     "Complain to the union," the bartender advised.
-     "To hell with them." He drank his soda and wiped his mouth
-with the palm of his hand. He did not look at me.
-     I sat as though spat upon, forgetting completely  what  it
-was  I  wanted  Buba for. I needed Buba, not Peck -- that is, I
-needed Peck too. But not this one. This was not Peck, this  was
-some  strange and repulsive Buba, and I watched in horror as he
-sucked up  the  second  glass  of  alcohol  and  again  set  to
-shoveling spoonfuls of sugar into himself. His face effloresced
-with  red  spots,  and  he  kept  gagging  and listening to the
-bartender  as  he  animatedly  recounted  the  latest  football
-exploits. I wanted to cry out, "Peck, what has happened to you?
-Peck, you used to hate all this!" I put my hand on his shoulder
-and said imploringly, "Peck, dear friend, hear me out, please."
-     He shied away.
-     "What's  the matter, friend?" His eyes were now completely
-unseeing. "I am not Peck, I am Buba, do you understand? You are
-confusing me with someone else, there isn't any  Peck  here....
-So what did the Rhinos do then, Con?"
-     I  reminded  myself  where  I  was,  and  forced myself to
-understand that there was no more Peck, and that  there  was  a
-Buba,  here,  an agent of a criminal organization, and this was
-the only reality, while Peck Xenai was a  mirage  --  a  memory
-which must be quickly extirpated if I intended to press on with
-my work.
-     "Hold on, Buba," I said. "I want to talk business to you."
-     He was quite drunk by now.
-     "I  don't  talk  business  at the bar," he announced. "And
-anyway I am through with work. Done. I have no more business of
-any kind. You can apply to the city hall, friend. They'll  help
-you out."
-     "I  am  applying to you, not the city hall," I said. "Will
-you listen to me!"
-     "You I hear all the time, as it is. To the detriment of my
-health."
-     "My business is quite simple," I said. "I need a slug."
-     He shuddered violently.
-     "Are you out of your mind, pal?"
-     "You should be ashamed," said the bartender. "Right out in
-front of people... you have lost all sense of decency."
-     "Shut up," I told him.
-     "You be quiet," the barman said menacingly.  "It  must  be
-some  time  since you've been busted? Watch your step or you'll
-get exported."
-     "I don't give  a  damn  about  the  exportation,"  I  said
-insolently.   "Don't   stick   your  snoot  in  other  people's
-business."
-     "Lousy sluggard," said the bartender.
-     He was visibly incensed, but spoke in a low voice. "A slug
-he wants. I'll call an officer right now and he'll give  you  a
-slug."
-     Buba  slid  off the stool and hurriedly hobbled toward the
-door.
-     I left off with the bartender and hurried  after  him.  He
-shot  out  into  the rain, and forgetting to cover himself with
-his cape, started to look around in search of a taxi. I  caught
-up with him and grasped him by the sleeve.
-     "What  in  God's  name  do  you  want  from  me?"  he said
-miserably. "I'll call the police."
-     "Peck," I said. "Come out of it, Peck. I am  Ivan  Zhilin,
-and you must remember me."
-     He kept looking around and wiping the streaming water from
-his face  with  the palm of his hand. He looked pitiful and run
-down, and I, trying to suppress my irritation,  kept  insisting
-to  myself that this was my Peck, priceless Peck, irreplaceable
-Peck, good, intelligent, joyful Peck, kept trying  to  remember
-him  as he was in front of the Gladiator's control console, and
-I couldn't because I couldn't imagine him  anywhere  except  at
-the bar over a glass of alcohol.
-     "Taxi," he screeched, but the car flew by, full of people.
-     "Peck,"  I  said,  "come  with me. I'll tell you all about
-it."
-     "Leave me alone," he said, his teeth chattering. "I  won't
-go  anywhere with you. Leave off! I didn't bother you, I didn't
-do anything to you, leave me be, for God's sake."
-     "All right," I said, "I'll let you  alone.  But  you  must
-give me a slug and also your address."
-     "I don't know of any slugs," he moaned. "God, what kind of
-a day is this!"
-     Favoring  his  left leg, he wandered off and suddenly dove
-into a  basement  under  an  elegant  and  restrained  sign.  I
-followed.  We  sat  down  at  a  table and a waiter immediately
-brought us hot  meat  and  beer,  although  we  hadn't  ordered
-anything.  Buba  was shivering and his wet face turned blue. He
-pushed the plate away with revulsion and began to  swallow  the
-beer,  both  hands  around  the mug. The basement was quiet and
-empty. Over the sparkling counter hung a white sign  with  gold
-letters reading, "Paid Service Only."
-     Buba  raised  his  head from the beer and said pleadingly,
-"Can I go, Ivan? I can't... What's the point of all this  talk?
-Let me go, please."
-     I put my hand on his.
-     "What's  happening to you, Peck? I searched for you. There
-is no address listed anywhere. I met you quite by accident, and
-I don't understand anything. How did you get involved  in  this
-mess?  Can  I  help you possibly, with anything? Maybe we could
---"
-     Suddenly he jerked his hand away in a rage.
-     "What an executioner," he hissed. "The devil lured  me  to
-that  Oasis....  Stupid chatter, drivel. I have no slug, do you
-understand? I have one, but I won't give it to you.  What'll  I
-do then -- like Archimedes? Don't you have any conscience? Then
-don't torture me, let me go."
-     "I  can't  let you go," I said, "until I get the slug. And
-your address. We must talk."
-     "I don't want to talk to  you,  can't  you  understand?  I
-don't want to talk to anyone about anything. I want to go home.
-I  won't  give  you my slug. What am I -- a factory? Give it to
-you and then chase all over town?"
-     I kept silent. It was clear that he hated me now. That  if
-he  thought he had the strength he would kill me and leave. But
-he knew that he did not have the strength.
-     "Scum," he  said  in  a  fury.  "Why  can't  you  buy  one
-yourself?  Don't  you  have the money? Here! Here!" he began to
-search  convulsively  in  his  pockets,  throwing  coppers  and
-crumpled bills on the table. "Take it, there's plenty."
-     "Buy what? Where?"
-     "There's  a damned jackass! It's... what is it? Hmm... how
-do you call it... Oh hell!" he cried. "May you drop straight to
-hell!"
-     He stuck his fingers into his shirt pocket and pulled  out
-a  flat plastic case. Inside it was a shiny metal tube, similar
-to a pocket radio local oscillator-mixer subassembly. "Here  --
-get  fat!"  He  proffered me the tube. It was quite small, less
-than an inch long and a millimeter thick.
-     "Thank you," I said. "And how do I use it?"
-     Peck's eyes opened wide. I think he even smiled.
-     "Good God!" he said almost tenderly. "Can it be you really
-don't know?"
-     "I know nothing," I said.
-     "Well then, you should have said so from the start. And  I
-thought  you  were  tormenting  me  like a torturer. You have a
-radio? Insert it in place of  the  mixer,  hang  it,  stand  it
-somewhere in the bath, and go to!"
-     "In the tub?"
-     "Yes."
-     "It must be in the bath?"
-     "But yes! It is absolutely necessary that your body be
-     immersed in water. In hot water. What an ass you are!"
-     "And how about Devon?"
-     "The  Devon  goes  in the water. About five tablets in the
-water and one orally. The taste is awful, but you won't  regret
-it  later. And one more thing, be sure to add bath salts to the
-water. And before you  start,  have  a  couple  of  glasses  of
-something  strong. This is required so that... how shall I say?
--- so you can loosen up, sort of."
-     "So," I said. "I got  it.  Now  I've  got  everything."  I
-wrapped the slug in a paper napkin and put it in my pocket. "So
-it's electric wave psychotechnics?"
-     "Good Lord, now what do you care about that?"
-     He was up already, pulling the hood over his head.
-     "No matter," I said. "How much do I owe you?"
-     "A trifle, nonsense! Let's go quickly... what the hell are
-we losing time for?"
-     We went up into the street.
-     "You  made  the  right  decision," said Peck. What kind of
-world is this? Are we men in it? Trash is what it is and not  a
-world. Taxi!" he yelled. "Hey, taxi!"
-     He shook in sudden excitement. "What possessed me to go to
-that Oasis...  Oh  no...  from  now  on  I'll  go  nowhere  ...
-nowhere."
-     "Let me have your address," I said.
-     "What do you want with my address?"
-     A taxi drew up and Buba tore at the door.
-     "Address," I said, grabbing him by the shoulder.
-     "What a dumbhead," said Buba..  "Sunshine  Street,  number
-eleven... Dumbhead!" he repeated, seating himself.
-     "I'll come to see you tomorrow."
-     He paid no more attention to me.
-     "Sunshine," he threw at the driver. "Through downtown, and
-hurry, for God's sake."
-     How  simple,  I thought, looking after his car. How simple
-everything turned out to be. And everything fits. The bath  and
-Devon. Also the screaming radios, which irritated us so, and to
-which we never paid any attention. We simply turned them off. I
-took a taxi and set out for home.
-     But what if he deceived me, I thought. Simply wanted to be
-rid of  me  sooner.  But I would determine that soon enough. He
-doesn't look like a runner, an agent, at all, I thought.  After
-all,  he is Peck. However, no, he is no longer Peck. Poor Peck.
-You are no agent, you are simply a victim. You  know  where  to
-buy  this  filth,  but  you  are only a victim. I don't want to
-interrogate Peck, I don't want to  shake  him  down  like  some
-punk.  True,  he  is  no  longer Peck. Nonsense, what does that
-mean, that he is not Peck. He is  Peck,  and  still  I'll  have
-to...  Electric  wave psychotechnics... But the shivers they're
-wave psychotechnics too.... Somehow, it's a bit too  simple.  I
-haven't passed two days here yet, while Rimeyer has been living
-here  since  the  uprising. We left him behind, and he had gone
-native and everyone was  pleased  with  him,  although  in  his
-latest  reports he wrote that nothing like what we were looking
-for existed here. True, he has nervous exhaustion... and  Devon
-on  the  floor. Also there is Oscar. Further, he did not beg me
-to leave him be, but simply pointed me in the direction of  the
-Fishers.
-     I  didn't  meet  anyone either in the front yard or in the
-hall.. It was almost five.  I  went  to  my  rooms  and  called
-Rimeyer. A quiet female voice answered.
-     "How is the patient?" I asked.
-     "He is asleep. He shouldn't be disturbed."
-     "I won't do that. Is he better?"
-     "I  told  you  he  fell  asleep. And don't call too often,
-please. The phone disturbs him."
-     "You will be with him all the time?"
-     "Till morning, at least. If you call again, I'll have  the
-phone disconnected."
-     "Thank  you,"  I said. "Just, please, don't leave him till
-morning, I'll not trouble you again."
-     I hung up and sat awhile in the big comfortable  chair  in
-front  of  the huge absolutely bare table. Then I took the slug
-out of my pocket and laid it in front  of  me.  A  small  shiny
-tube,  inconspicuous  and  completely  harmless  to all outward
-appearances, an ordinary electronic component. Such can be made
-by the millions. They should cost pennies.
-     "What's that you got there?" asked Len, right next to my
-     He stood alongside and regarded the slug.
-     "Don't you know?" I asked.
-     "It's from a radio. I have one like it  in  my  radio  and
-it's breaking all the time."
-     I pulled my radio out of my pocket and extracted its mixer
-and laid it alongside the slug. The mixer looked like the slug,
-but it was not a slug.
-     "They are not the same," said Len. "But I have seen one of
-those gadgets, too."
-     "What gadget?"
-     "Like the one you have."
-     All at once, his face clouded over and he looked grim.
-     "Did you remember?"
-     "No, I didn't," he said. "I didn't remember anything."
-     "All right, then." I picked up the slug and inserted it in
-place of the mixer in the radio. Len grabbed me by the hand.
-     "Don't," he said.
-     "Why not?"
-     He didn't reply, eyeing the radio warily.
-     "What are you afraid of?" I asked.
-     "I'm not afraid of anything. Where did you get that idea?"
-     "Look  in the mirror," I said. "You look as though you are
-afraid for me." I put the radio in my pocket.
-     "For you?" he said in astonishment.
-     "Obviously for me. Not for yourself, of course, though you
-are still scared of those... necrotic phenomena."
-     He looked sideways.
-     "Where did you  get  that  idea,"  he  said.  "We're  just
-playing."
-     I snorted in disdain.
-     "I am well acquainted with these games. Rut one thing I
-     don't  know:  where in our time do necrotic phenomena come
-from?"
-     He glanced around and began backing up.
-     "I'm going," he said.
-     "O no," I said decisively. "Let's finish what we  started.
-Man to man. Don't think that I am altogether an ignoramus."
-     "What  do  you  know?"  He  was  already near the door and
-talking very quietly.
-     "More than you," I said severely. "But  I  don't  want  to
-shout  it all over the house. If you want to talk, come on over
-here. Climb up on the desk and have yourself  a  seat.  Believe
-me, I'm not a necrotic phenomenon."
-     He  hesitated for a whole minute, and everything for which
-he hoped and everything of which he  was  afraid  appeared  and
-disappeared  on  his face. At last, he said, "Just let me close
-the door."
-     He ran into the  living  room,  closed  the  door  to  the
-hallway, returned to close the study door tight, and approached
-me.  His hands were in his pockets, the face white, contrasting
-with the protruding ears, which were red but cold.
-     "In the first  place,  you  are  a  dope,"  I  pronounced,
-dragging him toward me and standing him between my knees. "Once
-there  was  a boy who lived in such a fear that his pants never
-dried out, not even when he was on a beach, and his  ears  were
-as  cold  as  though  they  had  been  left  in  a refrigerator
-overnight. This boy trembled constantly and so well  that  when
-he  grew  up his legs were all wiggly, and his skin became like
-that of a plucked goose."
-     I was hoping  that  he  would  smile  just  once,  but  he
-listened  very  intently and very seriously inquired, "And what
-was he afraid of?"
-     "He had an elder brother, who was a  nice  fellow,  but  a
-great  one  for  drinking.  And,  as  often  happens, the tipsy
-brother was not at all like the sober brother. He got  to  look
-very  wild  indeed.  And  when he really drank a lot, he got to
-look like a dead man. So this boy..."
-     A contemptuous smile appeared on Len's face.
-     "He sure found something to be scared of.  When  they  are
-drunk is when they turn good."
-     "Who are they?" I asked immediately. "Mother? Vousi?"
-     "That's  it. Mother is just the opposite -- in the morning
-when she gets up, she's  always  nasty,  and  then  she  drinks
-vermouth once, then twice, and that's it. Toward evening she is
-altogether nice because night is near."
-     "And at night?"
-     "At night that creep comes around," Len said reluctantly.
-     "We  are  not  concerned  with  the  creep,"  I  said in a
-businesslike manner. "It's not from him that  you  run  to  the
-garage."
-     "I don't run," he said stubbornly. "It's a game."
-     "I  don't  know,  I  don't  know,"  I said. "There are, of
-course, certain things in this world of which even I am afraid.
-For instance when a boy is crying and trembling. I  can't  look
-at  such things, and it just turns me over inside. Or when your
-teeth hurt and it is required by circumstances that you keep on
-smiling -- that's pretty bad and there is no  way  of  ignoring
-it.  But  there  are  also  just  plain  stupidities. When, for
-example, some idiots help themselves, out of sheer boredom  and
-surfeit,  to  the  brain  of  a living monkey. That's no longer
-frightening, it's just plain  disgusting.  Especially  as  they
-didn't  think  it up by themselves. It was a thousand years ago
-when they thought of  it  first,  and  also  out  of  excessive
-affluence,  the  fat  tyrants of the Far East. And contemporary
-idiots heard and rejoiced.  But  they  should  be  pitied,  not
-feared."
-     "Pity  them?" said Len. "But they don't pity anybody. They
-do whatever they like. It's all the same  to  them,  don't  you
-see?  It  they  are bored, then they don't care whose head they
-saw apart. Idiots... Maybe in the daytime they are idiots,  but
-you don't seem to understand that at night they are not idiots,
-they are all accursed."
-     "How can that be?"
-     "They  are  cursed  by  the  whole  world They can have no
-peace, and they won't ever have it. You  don't  know  anything.
-What's it to you? As you arrived, so you will leave... but they
-are  alive  at  night,  and  in  the  daytime  they  are  dead,
-corpselike."
-     I went to the living room and brought him some  water.  He
-drank down the glass and said, "Will you leave soon?"
-     "Of  course not, how can you think that? I just got here,"
-I said, patting him on the shoulder.
-     "Could I sleep with you?"
-     "Of course."
-     "At first I had a padlock, but she took it away  for  some
-reason. But why she took it she won't say."
-     "OK,"  I  said.  "You will sleep in my living room. Do you
-want to?"
-     "Yes."
-     "Go ahead and lock yourself in and sleep to  your  heart's
-content. And I will climb into the bedroom through the window."
-     He raised his head and gazed at me intently.
-     "You think your doors lock? I know all about this place.
-     Yours don't lock either."
-     "It's  for  you they don't lock," I said as negligently as
-possible. "But for me they'll lock.  It's  only  a  half-hour's
-work."
-     He laughed unpleasantly, like an adult.
-     "You  are afraid, too. All right, I was only joking. Don't
-be afraid, your locks do work"
-     "You dope," I said. "Didn't I tell you I wasn't afraid  of
-anything  of  that  sort?"  He  looked  at me questioningly. "I
-wanted to make the lock work for you in the living room, so you
-could sleep in peace, as long as you are so afraid. As for  me,
-I always sleep with the window open."
-     "I told you, I was joking."
-     We were silent for a bit.
-     "Len,"  I said, "what will you be when you grow up?" "What
-do you mean?" he said. He was  quite  astonished.  "What  do  I
-care?"
-     "Now,  now  --  what do you care. It's all the same to you
-whether you will be a chemist or a bartender?"
-     "I told you -- we are all under a  curse.  You  can't  get
-away  from  it,  why  can't you understand that? When everybody
-knows it?"
-     "So what?" I said. "There were  accursed  peoples  before.
-And then children were born who grew up and removed the curse."
-     "How?"
-     "That  would  take  a long time to explain, old friend." I
-got up. "I'll be sure to tell you all about it. For now, go  on
-out and play. You do play in the daytime? Okay then, run along.
-When the sun sets, come on over, I'll make your bed."
-     He  stuck  his  hands in his pockets and went to the door.
-There he stopped and said aver his shoulder, "That gadget you'd
-better take it out of the radio. What do you think it is?"
-     "A local oscillator-mixer," I said.
-     "It's not a mixer at all. Take it out or it  will  be  bad
-for you." "Why will it be bad for me?" I said.
-     "Take  it out," be said. "You'll hate everybody. Right now
-you are not cursed, blat you will become cursed. Who gave it to
-you? Vousi?"
-     "No."
-     He looked at me imploringly.
-     "Ivan, take it out!"
-     "So be it," I said. "I'll take it out. Run along and play.
-And never be afraid of me. Do you hear?"
-     He didn't say anything and went out, leaving me sitting in
-my chair, with my hands on the desk. Soon I heard him puttering
-about in the lilacs under  the  windows.  He  rustled,  stamped
-about,   muttering  something  under  his  breath,  and  softly
-exclaimed, talking to himself, "Bring the flags  and  put  them
-here  and here... that's it... that's it... and then I got on a
-plane and flew away into the mountains."  I  wondered  when  he
-went  to bed. It would be all right if it were eight o'clock or
-even nine; maybe it was a mistake to start  all  this  business
-with him. I could have locked myself in the bathroom and in two
-hours I would know everything. But no, I couldn't refuse him --
-just imagine I was in his place, I thought. But this is not the
-way;  I  am  catering  to  his  fears,  when  I should think of
-something more clever. But try to come up with it -- this is no
-Anyudinsk boarding school.
-     A boarding school this certainly is not,  I  thought.  How
-different  everything  is, and what lies ahead of me now, which
-circle of paradise, I wonder? But if it  tickles,  I  won't  be
-able  to stand it! Interesting -- the Fishers -- they too are a
-circle of paradise, for sure.  The  Art  Patrons  are  for  the
-aristocrats  of the mind, and the old Subway is for the simpler
-types, although the Intels are also aristocrats of the mind and
-they get intoxicated like swine  and  become  totally  useless,
-even  they are useless. There is too much bate, not enough love
--- it's easy to teach hate, but love  is  hard  to  teach.  But
-then,  love has been too well overdone and slobbered over so it
-has become passive. How is it that love is always  passive  and
-hate  always  active and is thus always attractive? And then it
-is said that hate is natural, while love is  of  the  mind  and
-springs from deep thought.
-     It  should be worthwhile to have a talk with the Intels, I
-thought. They can't all be hysterical  fools,  and  what  if  I
-should  succeed  in  finding a Man. What in fact is good in man
-that comes from nature -- a pound of gray matter. But this  too
-is  not  always good, so that he always must start from a naked
-nothing; maybe it would be good if  man  could  inherit  social
-advances,  but then again, Len would now be a small-scale major
-general. No, better not -- better to start from zero.  True  he
-would  not  now  be afraid of anything, but instead he would be
-frightening others -- those who weren't major generals.
-     I was startled to suddenly see Len perched in the branches
-of the apple tree regarding me fixedly. The next moment he  was
-gone,  leaving only the crash of branches and falling apples as
-an aftermath.  He  doesn't  believe  me  in  the  slightest,  I
-thought.  He  believes  nobody.  And  whom do I believe in this
-town? I went over everyone I could recall. No, I  didn't  trust
-anyone. I picked up the telephone, dialed the Olympic and asked
-for number 817.
-     "Hello! Yes?" said Oscar's voice.
-     I kept quiet, covering the radio with my hand.
-     "Hello,  I'm listening," repeated Oscar irritably. "That's
-the second time," he  said  to  someone  aside.  "Hello!...  Of
-course  not,  what  sort  of  women could I be carrying on with
-here?" He hung up.
-     I picked up the Mintz volume, lay down on the  couch,  and
-read  until  twilight.  I  dearly  love  Mintz,  but I couldn't
-remember a word I read that day. The evening  shift  roared  by
-noisily.  Aunt  Vaina fed Len his supper, stuffing him with hot
-milk and crackers. Len whimpered  and  was  fretful  while  she
-cajoled  him  gently  and  patiently.  Customs  inspector  Pete
-propounded in a commanding yet benevolent tone,  "You  have  to
-eat, you have to eat, if Mother says eat, you must comply."
-     Two  men  of  loose character, if one could judge by their
-voices, came around looking for Vousi and made a play for  Aunt
-Vaina.  I thought they were drunk. It was growing dark rapidly.
-At eight o'clock the phone in the study rang. I ran  barefooted
-and  grabbed  the receiver, but no one spoke. As you holler, so
-it echoes. At eight-ten, there was a knock on the door.  I  was
-delighted, expecting Len, but it turned out to be Vousi.
-     "Why  don't  you  ever come around?" she asked indignantly
-from  the  doorway.  She  was  wearing  shorts  decorated  with
-suggestively  winking  faces,  a tight-fitting sleeveless shirt
-exposing her navel, and a huge translucent scarf: she was fresh
-and firm as a ripe apple. To a surfeit.
-     "I sit and wait for him all day, and all the  time  he  is
-sacked out here. Does something hurt?"
-     I got up and stuck my feet into my shoes.
-     "Have a chair, Vousi." I patted the couch alongside me.
-     "I  am  not going to sit by you. Imagine -- he is reading.
-You could at least offer me a drink."
-     "In the bar," I said, "How is your sloppy cow?"
-     "Thank  God  she  was  not  around  today,"  said   Vousi,
-disappearing in the bar. "Today I drew the mayor's wife. What a
-moron.  Why, she wants to know, doesn't anyone love her?... You
-want yours with water? Eyes white, face red, and a rear end  as
-wide  as a sofa, just like a frog, honest to God. Listen, let's
-make a polecat, nowadays everybody makes polecats."
-     "I don't go for doing like everybody."
-     "I can see that for myself. Everyone is  out  for  a  good
-time, and he is here -- sacked out. And reading to boot."
-     "He -- is tired," I said.
-     "Oh, so? Well then, I can leave!"
-     "But  I  won't let you," I said, catching her by the scarf
-and pulling her down beside me. "Vousi, dear girl,  are  you  a
-specialist  only  for  ladies'  good  humor  or in general? You
-wouldn't be able to put a lonely man whom nobody loves  into  a
-good humor?"
-     "What's  to  love?"  She  looked  me over. "Red eyes and a
-potato for a nose."
-     "Like an alligator's."
-     "Like a dog's. Don't go putting your arm about me, I won't
-allow it. Why didn't you come over?"
-     "And why did you abandon me yesterday?"
-     "How do you like that --.abandoned him!"
-     "All alone in a strange town."
-     "I abandoned him! Why, I locked for you all over.  I  told
-everyone  that you are a Tungus, and you got lost -- that was a
-poor thing for you to do. No -- I won't permit that! Where were
-you last night? Fishering, no doubt. And the same thing  today,
-you won't tell any stories."
-     "Why  shouldn't  I tell?" I said. And I told her about the
-old  Subway.  I  sensed  at  once  that  the  truth  would   be
-inadequate,  and  so  I  spoke  of  men in metallic masks, of a
-terrible oath, of a wall wet with blood, of a sobbing skeleton,
-and I let her feel the bump behind my ear. She liked everything
-very well.
-     "Let's go right now," she said.
-     "Not for anything," I said and lay down.
-     "What kind of manners is that? Get up at once and we'd go.
-Of course, no one will believe me. But you will show your bump,
-and everything will be just perfect."
-     "And then we'll go to the shivers?" I wanted to know.
-     "But yes! You know that turns out to he even good for your
-health."
-     "And we'll drink brandy?"
-     "Brandy and vermouth and a polecat and whiskey."
-     "Enough, enough... and no doubt we'll  also  squeeze  into
-cars  and  drive  at  a  hundred  and  fifty miles per hour?...
-Listen, Vousi, why should you go there?"
-     She finally understood and smiled in discomfiture.
-     "And what's wrong with it? The Fishers also go."
-     "There is nothing bad," I said.  "But  what's  good  about
-it?"
-     "I  don't know. Everybody does it. Sometimes it's a lot of
-fun... and the shivers. There everything  --  all  your  wishes
-come true."
-     "And that's it? That's all there is?"
-     "Well, not everything, of course. But whatever you think
-     about,  whatever  you would like to happen, often happens.
-Just like in a dream."
-     "Well then maybe it would be better to go to bed?"
-     "What's the matter with you?" she said sulkily. "In a real
-dream all kinds of things happen... as though you  don't  know!
-But with the shivers, only what you like!"
-     "And what do you like?"
-     "We-e-ll! Lots of things."'
-     "Still...  imagine I am a magician. And I say to you, have
-three wishes. Anything at all,  whatever  you  wish.  The  most
-impossible. And I will make them come true. Well?"
-     She  thought  very hard so that even her shoulders sagged.
-Then her face lit up.
-     "Let me never grow old," she said.
-     "Excellent," I said. "That's one."
-     "Let me..." she began inspiredly and stopped.
-     I used to enjoy tremendously asking my friends  this  very
-question  and  used  to  ask it at every available opportunity.
-Several times I even assigned compositions to my youngsters  on
-the  theme of three wishes. And it was always most amusing that
-out of a thousand men and women, oldsters  and  children,  only
-two or three dozen figured that it is possible to wish not only
-for  themselves  personally, or their immediate close ones, but
-also for the world at large, for mankind as a whole.  No,  this
-was  not  witness to the ineradicable human egotism; the wishes
-were not invariably  strictly  selfish,  and  the  majority  in
-subsequent  discussions,  when reminded of missed opportunities
-and the large problems of all mankind, did a double take and in
-honest anger reproached me  that  I  hadn't  explained  at  the
-beginning.  But  one  way or another they all began their reply
-along the lines of "Let me..." This was a manifestation of some
-kind of ancient subconscious conviction that your own  personal
-wishes  cannot  change anything in the wide world, and it makes
-no difference whether you do or do not have a magic wand.
-     "Let me..." began Vousi once more, and again was silent. I
-was watching  her  surreptitiously.  She  noticed   this,   and
-dissolving  into  a  broad smile, said with a wave of her hand,
-"So that's your game. Some card you are!"
-     "No -- no -- no," I said. "You should always  be  prepared
-to  answer  this question. Because I knew a man once who always
-asked it of everyone, and then was inconsolable -- 'Oh what  an
-opportunity  I missed, how could I not have figured it out?' So
-you see it's entirely in earnest. Your first wish is  never  to
-grow old. And then?"
-     "Let's  see  --  what else? Of course, it would be nice to
-have a handsome fellow, whom they  would  all  chase,  but  who
-would be with me only. Always."
-     "Wonderful," I said. "That's two. And what else?"
-     Her  face  showed that the game had already palled on her,
-and that any second she'd drop a bomb. And she did. All I could
-do was blink my eyes.
-     "Yes," I said, "of course that, too. But that happens even
-without any magic."
-     "Yes and no," she argued and began to  develop  the  idea,
-based  on the misfortunes of her clients. All of which was very
-gay and amusing to her,  while  I,  in  ignominious  confusion,
-gulped brandy with lemon and tittered in embarrassment, feeling
-like a virgin wall flower. Well, if all this went on in a night
-club,  I  could  handle  it.  Well,  well,  well...  some  fine
-activities go on in those salons of the Good Mood. How  do  you
-like these elderly ladies...
-     "Enough,"  I  said. "Vousi, you embarrass me, and anyway I
-understand it all very well now. I can  see  that  it's  really
-impossible to do without magic. It's a good thing that I am not
-a magician."
-     "I  really  stung  you  well," she said happily. "And what
-would you wish for yourself, now?"
-     I decided I'd reciprocate in kind.
-     "I don't need anything of that sort," I said.  "Anyway,  I
-am not good at things like that. I'd like a good solid slug."
-     She smiled gaily.
-     "I  don't  need three wishes," I explained, "I can do with
-one."
-     She was still smiling, but the smile  became  empty,  then
-crooked, and then disappeared altogether.
-     "What?" she said in a small voice.
-     "Vousi!" I said, getting up. "Vousi!"
-     She didn't seem to know what to do. She jumped up and then
-sat down  and  then jumped up again. The coffee table fell over
-with all the bottles. There were tears in  her  eyes,  and  her
-face  looked  pitiable,  like  that  of  a  child  who has been
-brutally, insolently, cruelly,  tauntingly  deceived.  Suddenly
-she  bit  her  lip  and  with all her strength slapped my face.
-While I was blinking, she, now in full tears, kicked  away  the
-overturned  table and ran out of the room. I sat, with my mouth
-open. An engine roared into life and lights sprang  up  in  the
-dark  garden, followed by the sound of the motor traversing the
-yard and disappearing in the distance.
-     I felt my face. Some joke. Never in my life have  I  joked
-so  effectively.  What  an old fool I was! How do you like that
-for a slug?
-     "May we?" asked Len. He stood in the door, and he was  not
-alone.  With him was a gloomy, freckle-faced boy with a cleanly
-shaved head.
-     "This is Reg," said Len. "Could he sleep here too?"
-     "Reg," I said, pensively smoothing my eyelids. "Of  course
--- even  two  Regs  would  be okay. Listen, Len, why didn't you
-come ten minutes earlier!"
-     "But she was here," said Len.  "We  were  looking  in  the
-window, waiting for her to leave."
-     "Really?"  I  said.  "Very interesting. Reg, old chum, how
-about what your parents will say?"
-     Reg didn't reply. Len said, "He doesn't have parents."
-     "Well, all right," I said, feeling a  bit  tired.  "You're
-not going to have a pillow fight?"
-     "No," said Len, not smiling, "we are going to sleep."
-     "Fair  enough,"  I  said. "I'll make your beds and you can
-give all this a quick clean-up."
-     I made their beds on the couch and the big chair and  they
-took  off  their  clothes at once and went to bed. I locked the
-door to the hall, turned out their lights,  and  went  into  my
-bedroom,  where  I  sat  awhile  listening  to them whispering,
-moving furniture, and settling  down.  Then  they  were  quiet.
-About  eleven  o'clock  there  was  the  sound  of broken glass
-somewhere in the house.  Aunt  Vaina's  voice  could  be  heard
-singing  some  sort of marching song, followed by more breaking
-glass. Apparently the tireless Pete again was falling down face
-first. From the center  of  town  came  the  cry  of  "Shivers,
-shivers." Someone was loudly sick on the street.
-     I  locked the window and lowered the shades. I also locked
-the door to the study. Then I went to the bathroom  and  turned
-on  the hot water. I did everything per instructions. The radio
-went on the soap shelf, I threw several Devon  tablets  in  the
-water,  together  with  some  salt  crystals,  and was about to
-swallow the tablet when I remembered that it was propitious  to
-"loosen  up."  I didn't want to disturb the boys, but it wasn't
-necessary -- an open bottle of brandy  stood  in  the  medicine
-chest.  I took a few swallows right out of the bottle, stripped
-down to the skin, climbed into the  bath,  and  turned  on  the
-radio.
-
-<ul><a name=11></a><h2>Chapter ELEVEN</h2></ul>
-
-     I  intentionally did not set the thermo-regulator, so that
-when the water cooled off, I  returned  to  consciousness.  The
-radio was still shrieking and the sparkle of white light on the
-walls  hurt  my eyes. I was thoroughly chilled and covered with
-goose bumps. Switching off the radio, I turned on the hot water
-and remained in the bath, basking in the flooding warmth and  a
-very   strange,  very  novel  sensation  of  total,  cosmically
-enormous emptiness. I expected a  hangover,  but  there  wasn't
-any.  I  simply  felt  good. And there were very many memories.
-Also my thoughts flowed inordinately well, as  though  after  a
-long rest in the mountains.
-     In  the  middle  of  the last century, Olds and Miller had
-conducted  experiments  on  brain  stimulation.  They  inserted
-electrodes  into  the  brains  of  white  rats. They employed a
-primitive technology and a barbarous  methodology,  but  having
-located pleasure centers in the rats' brains, they succeeded in
-having the animals press the lever which closed the contacts to
-the electrodes, hour after hour, producing up to eight thousand
-auto-excitations  per hour. These rats did not need anything in
-the real world. They weren't in  the  slightest  interested  in
-anything  but  the  lever.  They  ignored  food, water, danger,
-females;  they  were  indifferent  to  everything  except   the
-stimulation  lever.  Later,  these  experiments  were  tried on
-monkeys and produced the same results. Rumors were  about  that
-someone  carried out similar experiments on criminals condemned
-to death....
-     That was a difficult time for mankind: a time of  struggle
-against  atomic  destruction, a time of increasing limited wars
-over the entire face of the planet, a time when the majority of
-mankind was starving, but even  so,  the  contemporary  English
-writer   and  critic  Kingsley  Amis,  having  learned  of  the
-experiments with rats, wrote:  "I  cannot  be  sure  that  this
-frightens  me  more  than  a  Berlin or a Taiwan crisis, but it
-should, I believe, frighten me more." He feared much about  the
-future,  this  brilliant  and venomous author of <i>New Maps of
-Hell</i>, and: in particular, he foresaw the  possibilities  of
-brain  stimulation  for  the creation of an illusory existence,
-just as intense as the actual, or more intense.
-     By the end of the century, when the first triumphs of wave
-psychotechnology were  realized,  and  when  psychiatric  wards
-began  to  empty,  amid the chorus of exulting cries of science
-commentators, the little brochure by Krinitsky and  Milanovitch
-had  sounded  like  an irritating dissonance. In its concluding
-section the Soviet educators wrote approximately as follows: In
-the overwhelming majority of countries, the  education  of  the
-young  exists  on  the  level  of the eighteenth and nineteenth
-centuries. This ancient system  of  education  always  did  and
-continues  to  posit  as  its objective, first of all and above
-all, the preparation for society  of  qualified  but  stupefied
-contributors  to  the  production  process.  This system is not
-interested in all the other potentialities of the  human  mind,
-and for this reason, outside of the production process, man, en
-masse,   remains   psychologically  a  cave  dweller,  Man  the
-Uneducated. The  disuse  of  these  potentialities  causes  the
-individuals'  inability  to comprehend our complex world in all
-its contradictions, to correlate  psychologically  incompatible
-concepts and phenomena, to obtain pleasure from the examination
-of  connections  and laws when these do not pertain directly to
-the satisfaction of the most  primitive  social  instincts.  In
-other  words,  this  system  of  education  for  all  practical
-purposes does not develop in man pure imagination,  untrammeled
-vision,  and  as  an immediate consequence, the sense of humor.
-The  Uneducated  Man  perceives  the  world  as  some  sort  of
-essentially trivial, routine, and traditionally simple process,
-a  world from which it is possible only by dint of great effort
-to extract pleasures which are, in the end,  also  compulsively
-routine and traditional. But even the unutilized potentialities
-remain,  apparently,  a  hidden reality of the human brain. The
-problem  for  scientific  education   consists   precisely   in
-initiating  the  action of these possibilities, in teaching man
-to dream,  in  bringing  the  multiordinality  and  variety  of
-psychic   associations   into   quantitative   and  qualitative
-coordination  with   the   multiordinality   and   variety   of
-interrelationships in the world of reality. This problem is the
-one  which,  as  is well known, must become the fundamental one
-for mankind in the  coming  proximate  epoch.  But  until  this
-problem  is resolved, there remains some basis to fear that the
-successes of  psychotechnics  will  lead  to  such  methods  of
-electrical  stimulation  as  will  endow  man  with an illusory
-existence which can exceed the real existence in intensity  and
-variety  by  a  considerable  margin. And if one remembers that
-imagination allows man to  be  both  a  rational  being  and  a
-sensual  animal,  and  if  one  adds  to that the fact that the
-psychic subject matter evoked by the  Uneducated  Man  for  his
-illusory  life  of  splendor  derives  from  the  darkest, most
-primitive reflexes, then it is not hard to perceive  the  awful
-temptation hidden in such possibilities.
-     And therefore -- slug.
-     It  is  now  understandable, I thought, why they write the
-word "slug" on fences.
-     Everything is now  understandable.  It's  odious,  that  I
-understand....  Better if I understood nothing, better if, upon
-regaining consciousness, I shrugged my  shoulders  and  climbed
-out  of the bath. Would it have been understandable to Strogoff
-and Einstein and Petrarch? Imagination is a priceless gift, but
-it must not be given an inward direction.  Only  outward,  only
-outward...  What  a  tasty worm some corrupter has dropped from
-his rod into this stagnant pool! And how accurately timed!  Yes
-indeed,  if  I  were  commander of Wells' Martians, I would not
-have bothered with fighter tripods, heat rays, and  other  such
-nonsense.  Illusory existence ... no, this is not a narcotic, a
-narcotic has a long way to go to approach it. In a. way this is
-exactly appropriate. Here. Now. To each  time  its  own.  Poppy
-seeds  and hemp, the kingdom of sweet blurred shadows and peace
--- for the beggar, the worn-out, the downtrodden... But here no
-one wants peace, here no one is dying of hunger, here is simply
-a bore. A well-fed, well-heated, drunken bore.  It's  not  that
-the  world  is  bad,  it's  just  plain  dreary.  World without
-prospects, world without promise. But in the end man is  not  a
-carp,  he still remains a man. Yes, it is no kingdom of shades,
-it is indeed the real existence,  without  detraction,  without
-dreary  confusion.  Slug  is  moving on the world and the world
-will not mind subjecting itself to it.
-     Suddenly, for a fraction of a moment, I felt  that  I  was
-lost.  And  it  was  cozy  to  be destroyed. Fortunately I grew
-angry. Splashing out water, I climbed out of the bath,  cursing
-and  stoking  my  ire,  pulled  my shorts and shirt over my wet
-body, and grabbed my watch. It was three o'clock, and it  could
-have been three in the afternoon or three the following morning
-or  three  o'clock  after  a  hundred  years. Idiot, I thought,
-pulling on my trousers. Softened up and let Buba go when he was
-ready to give  me  the  address  of  the  gangsters'  den.  The
-operatives  could  have  been  there  by  now and we could have
-nabbed the whole accursed nest, the vile nest. The vermin nest.
-The repulsive cloaca... And at this instant  against  the  very
-depth  of  my  consciousness,  like  a  dancing  spot of light,
-flicked a very calm thought. But I could not fasten upon it.
-     I located  some  Potomac  in  the  medicine  cabinet,  the
-strongest  stimulant  which  I could find in it. I started into
-the living room, but the youngsters were snoring away there, so
-I climbed out the window. The  city  was  resting,  of  course.
-Guffawing  louts hung around under the street lamp on Waterway,
-bawling crowds surged on the brightly  lit  avenues.  Somewhere
-songs  were  shouted,  somewhere  they  were yelling "Shivers!"
-Somewhere glass was being broken. I picked out a  chauffeurless
-taxi, found the index for Sunshine Street, and dialed it on the
-control  console. The car took off across town. The cab smelled
-sour and bottles  rolled  underfoot.  At  one  intersection  it
-almost  plowed  into  a daisy chain of howling humanity, and at
-another there was the rhythmic flashing of  colored  lights  --
-apparently it was possible to set up the shivers elsewhere than
-the  plaza.  They  were  resting, resting with all their might,
-these benevolent patrons from  the  Happy  Mood  Salons,  these
-polite  customs  inspectors, clever barbers, tender mothers and
-manly  fathers,  innocent  youths  and  maidens  --  they   all
-exchanged  their  diurnal  aspects  for the nocturnal, they all
-worked hard to have fun and so that it wouldn't be necessary to
-think about a thing....
-     The taxi braked. It was  the  very  same  place.  It  even
-seemed as though there was that same burning smell...
-     ...  Peck registered a hit on the armored carrier with the
-Fulminator. It spun on a single tread, hopping in the piles  of
-broken bricks, and two fascists immediately jumped out in their
-unbuttoned  camouflage  shirts,  flung  a grenade apiece in our
-direction, and sped off into the darkness. They moved knowingly
-and adeptly, and it was obvious that these were not  youngsters
-from  the  Royal Academy or lifers from the Golden Brigade, but
-genuine full-blown tank corps officers. Robert  cut  them  down
-point-blank  with a burst from his machine gun. The carrier was
-bulging with cases of beer. It  struck  us  that  we  had  been
-constantly  thirsty for the last two days. Iowa Smith clambered
-into the carrier and began handing out the  cans.  Peck  opened
-them  with a knife. Robert, putting the machine gun against the
-carrier, punched holes into the cans with a sharp point on  the
-armor. And the Teacher, adjusting his pince-nez, tripped on the
-Fulminator  straps  and  muttered, "Wait a minute, Smith; can't
-you see I've got my hands full?" A five-story  building  burned
-briskly  at  the  end of the street, there was a thick smell of
-smoke and hot metal, and we avidly downed the  warm  beer,  and
-were  drenched through and through, and it was very hot and the
-dead officers lay on the broken and crushed bricks, with  their
-legs  identically  flung  out  in  their  black  pants, and the
-camouflage shirts bunched at their necks, and  the  skin  still
-glistening with perspiration on their backs.
-     'They are officers," said the Teacher. "Thank God. I can't
-bear the sight of any more dead kids. Accursed politics! People
-forget God on account of it."
-     "What  god  is  that?"  inquired  Iowa  Smith  out  of the
-carrier. "I've never heard of him."
-     "Don't jest about that, Smith," said  the  Teacher.  "This
-will  all  end  soon,  and  from then on no one nowhere will be
-permitted to poison the souls of men with vanity."
-     "And how then shall they multiply?" asked Iowa  Smith.  He
-bent  over  the  beer again, and we could see the burn holes in
-his pants.
-     "I am talking about politics," said the Teacher  modestly.
-"The  fascists  must be destroyed. They are beasts. But that is
-not enough. There are many other political parties,  and  there
-is no place for them and all their propaganda in our land." The
-Teacher  came from this town and lived within two blocks of our
-post.  "Social  anarchists,  technocrats,  communists,  are  of
-course -- "
-     "I  am  a  communist,"  announced Iowa Smith, "at least by
-conviction. I am for the commune."
-     The Teacher looked at him in bewilderment.
-     "Also I am a godless man," added Iowa Smith. "There is  no
-god, Teacher, and there's nothing you can do about it."
-     At  which  point  we  all  began  to  say that we were all
-atheists, and Peck  said  that  on  top  of  that  he  was  for
-technocracy,  while  Robert  announced  that  his  father was a
-social anarchist and his grandfather was a social anarchist and
-he, Robert, probably could not escape being a social anarchist,
-although he didn't know what it was all about.
-     "Well now, if the  beer  would  get  ice-cold,  said  Peck
-pensively, "I would at once believe in God with great delight."
-     Teacher  smiled embarrassedly and kept wiping his glasses.
-He was a good man and we always kidded him, but he  never  took
-offense.  From the very first night I observed that his courage
-was not great, but he never retreated without being  commanded.
-We were still chattering and joking when there was a thunderous
-crash, the burning building wall collapsed, and straight out of
-the  swirling  flames  and  clouds  of  smoke and sparks swam a
-Mammoth attack tank, floating a yard above the  pavement.  This
-was  a  new  horror,  the  likes  of  which we hadn't seen yet.
-Floating out in the  middle  of  the  street,  it  rotated  its
-thrower as though looking around, and then, hovering on its air
-cushion,  began  to  move  in  our  direction,  screeching  and
-clanking metallically. I regained my wits only by  the  time  I
-was  behind  a gate post. The tank was now considerably closer,
-and at first I couldn't see anyone at all, but then Iowa  Smith
-stood up in full view out of the carrier, and propping the butt
-of  the  Fulminator  against his stomach, took aim. I could see
-the recoil double him up. I saw  a  bright  flash  against  the
-black  brow  of  the  tank. And then the street was filled with
-roar and flame, and when I raised my burned eyelids with  great
-effort, the street was empty and contained only the tank. There
-was  no carrier, no mounds of broken brick, no leaning kiosk by
-the neighboring house -- there was only the  tank.  It  was  as
-though the monster had come awake and was spewing waterfalls of
-flame and the street ceased being a street and became a square.
-Peck  slapped  me  hard  on the neck and I could see his glassy
-eyes right in front of my face, but there was no  time  to  run
-toward the trench and break out the launcher.
-     We  both picked up the mine and started running toward the
-tank, and all I remember is looking continually at the back  of
-his  head,  and gasping for breath and counting steps, when the
-helmet flew off Peck's head, and he fell, so I  almost  dropped
-the  mine  and  fell  on  top  of him. The tank was blown up by
-Robert and Teacher. I still don't know how they did it or when;
-it must be they were running behind us with another mine. I sat
-until morning in  the  middle  of  the  street  holding  Peck's
-bandaged  head on my knees and staring at the awesome treads of
-the tank sticking out of the asphalt lake.  That  same  morning
-the  whole  bloody thing came to an end all at once. Zun Padana
-surrendered with all his staff and was shot in  the  street  by
-some crazed woman when already a prisoner....
-     This  was  the  very  same place. I even thought I smelled
-smoke and burned metal. Even the kiosk stood on the corner, and
-it too was a bit crooked in the latest style  of  architecture.
-The  part  of  the  street  which  the tank turned into a plaza
-remained a plaza, and on the site of the asphalt lake there was
-a small square in which someone was being  beaten.  Iowa  Smith
-was  an urban planner from Iowa, U.S.A., Robert Sventisky was a
-movie  director  form  Krakow,  Poland.  The  Teacher   was   a
-schoolteacher  from this town. No one ever saw them again, even
-dead. And Peck was Peck, who had now become Buba
-     Buba lived in the same sort of cottage as I, and its front
-door was open. I knocked, but no one responded  and  no  one  -
-came  out  to  meet me. I entered the dark hall. The lights did
-not go on. The door to the right was locked, and I looked  into
-the  one  on  the  left. In the living room a bearded man, in a
-jacket, but without pants, was sleeping on  a  tattered  couch.
-Someone's feet stuck out from under the overturned table. There
-was  a  smell  of brandy, tobacco smoke, and of something else,
-cloyingly sweet, like in Aunt Vaina's room the  other  day.  In
-the  door  to the study, I bumped into a handsome florid woman,
-who was not in the slightest surprised to see me.
-     "Good evening," I said. Please excuse me,  but  does  Buba
-live here?"
-     "Here,"   she   said,   examining  me  out  of  glistening
-oily-looking eyes.
-     "Can I see him?"
-     "And why not -- all you want."
-     "Where is he?"
-     "Funny man. Where would he be?" she laughed.
-     I could guess where, but said, "In the bedroom?"
-     "You are warm," she said.
-     "What do you mean -- warm?"
-     "What a dunce, and sober yet! Would you like a drink?"
-     "No," I said, angry. "Where is he? I need him right away."
-     "Your prospects are poor," she said gaily. "But search on,
-search on. As for me, I must go."
-     She patted me on the cheek and went out.
-     The study was empty. There was a large crystal vase on the
-table with some kind of reddish fluid in it. Everything smelled
-of that nauseatingly sweet odor. The bedroom  was  also  empty;
-crumpled  sheets and pillows were scattered about. I approached
-the bathroom door. The door was full of holes,  obviously  made
-by  bullets  shot  from  the  inside, judging by their shape. I
-hesitated, then took hold of the handle. The door was locked.
-     I opened it with considerable difficulty. Buba lay in  the
-bath  up  to  his  neck  in greenish water; steam rose from its
-surface. The radio howled and wheezed on the edge of the tub. I
-stood  and  looked  at  Buba.  At   the   erstwhile   cosmonaut
-experimenter,  Peck  Xenai.  At the once-upon-a-time supple and
-well-muscled fellow, who at eighteen left his warm city by  the
-warm  sea, and went into space for the glory of man, and who at
-thirty returned to  his  country  to  fight  the  last  of  the
-fascists  and  to  remain here forever. I was repelled to think
-that only an hour ago, I had looked like  him.  I  touched  his
-face  and  pulled  his  thin hair. He did not stir. Then I bent
-over him to let him sniff some Potomac, and suddenly  saw  that
-he was dead.
-     I knocked the radio off the edge of the tub and crushed it
-under  heel.  There was a pistol on the floor. But Peck had not
-shot himself; it must have been simply that someone  interfered
-with  him  and  he  shot  through  the door in order to be left
-alone. I stuck my arms in the hot water,  picked  him  up,  and
-carried  him  to  the  bed. He lay there all limp and terrible,
-with eyes sunken under his  brows.  If  only  he  were  not  my
-friend...  if  only he were not such a wonderful guy... if only
-he were not such an outstanding worker...
-     I called emergency aid on the phone and  sat  down  beside
-Peck.  I  tried not to think of him. I tried to think about the
-business at hand. And I tried to be cold and harsh, because  at
-the  very  bottom  of  my  conscious  mind,  that flick of warm
-feeling, like a speck of light, flashed again, and this time  I
-understood what the thought was.
-     By  the  time  the doctor came, I knew what I was going to
-do. I would find Eli. I would pay any sum. Maybe I  would  beat
-him.  If  necessary, I would torture him. And he would tell me,
-whence this plague flows out upon  the  world.  He  would  name
-names  and  addresses.  He would tell me all. And we would find
-these men. We would locate and burn their secret  laboratories,
-and  as for themselves, we would ship them out so far that they
-would never return. Whoever they might be. We would catch  them
-all,  we  would catch all who ever tried slug and isolate them,
-too. Whoever they were. Then I would demand  that  I,  too,  be
-isolated  because  I knew what slug was. Because I grasped what
-sort of thought I had, because I was socially  dangerous,  just
-as  they all are. And all that would be only the beginning. The
-beginning of all beginnings, and ahead would remain that  which
-was  most  important:  to  make  it so that people would never,
-never, wish to know what  slug  was.  Probably  that  would  be
-outlandish. Probably many would say that it was too outlandish,
-too harsh, too stupid -- but we would still have to do it if we
-wanted mankind not to stop....
-     The  doctor,  an  old  gray  man, put down his white case,
-leaned over Buba, looked  him  over,  and  said  indifferently,
-"Hopeless."
-     "Call the police," I said.
-     Slowly he put away his instruments.
-     "There  is  no need of that whatsoever," he said. "There's
-no criminal content, here. It is a neurostimulator...."
-     "Yes, I know."
-     "There you are -- the second case this  night.  They  just
-don't know when to stop."
-     "When did it start?"
-     "Not very long ago... a few months."
-     "Then why in hell do you keep it quiet?"
-     "Keep  it quiet? I don't understand. This is my sixth call
-tonight, young man. The second case of nervous  exhaustion  and
-four cases of brain fever. Are you a relative?"
-     "No."
-     "Well,  all  right,  I'll send some men." He stood awhile,
-looking at Peck. "Join some  choruses,"  he  said.  "Enter  the
-League of Reformed Sluts..."
-     He  was  mumbling something else as he left, an old, bent,
-uncaring man. I covered Peck with a sheet,  pulled  the  drape,
-and  went  out  into  the  living room. The drunks were snoring
-obscenely, filling the air with alcoholic  fumes,  and  I  took
-them  both  by  the  heels  and  dragged  them out in the yard,
-leaving them in the puddle by the fountain.
-     Dawn was breaking once more and the stars were dimming  in
-the  paling  sky. I got into the taxi and dialed the old Subway
-on the console.
-     It was full of people. It was impossible to get through to
-the railing, although it seemed to me that only  two  or  three
-men  were  filling  out  the  forms,  while  the rest were just
-looking,  stretching   their   necks   eagerly.   Neither   the
-round-headed  man  nor  Eli were to be seen behind the barrier,
-and no one knew where  they  could  be  found.  Below,  in  the
-cross-passages  and tunnels, drunken, shouting, half-crazed men
-and hysterical women were  milling  about.  There  were  shots,
-distant  and  muffled  and  some  loud  and close, the concrete
-underfoot shook with the detonations, and a mixture  of  smells
--- gunpowder,  sweat,  smoke, gasoline, perfume, and whiskey --
-coated in the air.
-     Squealing and arm-waving teenagers surrounded a big fellow
-who dripped blood and whose pale face  shone  with  a  look  of
-triumph. Somewhere wild beasts roared menacingly. In the halls,
-the  audience  was  going wild in front of huge screens showing
-somebody blindfolded, firing a spray of bullets from a  machine
-gun  held  against  his  belly,  and someone else sat up to his
-chest in some black and heavy liquid, blue from  the  cold  and
-smoking   a   crackling   cigar,   and   another   one  with  a
-tension-twisted face, suspended as though cast in stone in some
-sort of web of taut cords...
-     Then I found out where Eli was.  I  saw  round-head  by  a
-dirty  room  full of old sandbags. He stood in the doorway, his
-face covered with soot, smelling of burnt gunpowder, the pupils
-of his eyes fully distended. Every few seconds he bent down and
-brushed his knees, not hearing me at all,  so  that  I  had  to
-shake him to make him take notice of me.
-     "There  is  no  Eli," he barked. "Gone, do you understand?
-Nothing but smoke -- get  it?  Twenty  kilovolts,  one  hundred
-amperes, see? He didn't leap far enough!"
-     He  pushed  me away vigorously and took off into the dirty
-room, jumping over the sandbags. Elbowing the  curious  out  of
-the way, he got to a low metal door.
-     "Let  me through," he howled. "Let me at it once more. God
-favors a third time!"
-     The door shut heavily and the mob surged  away,  stumbling
-and  falling  over the bags. I didn't wait for him to come out.
-Or not to come out. He was no longer of any use  to  me.  There
-was  only  Rimeyer  left.  There was also Vousi, but I couldn't
-count on her. So there was really only Rimeyer. I was not going
-to wake him. I'd wait outside his room.
-     The sun was already  up  and  the  filthied  streets  were
-empty.
-     The   auto-streetcleaners   were   coming   out  of  their
-underground garages to do their job. All they  knew  was  work;
-they  had  no potentialities to be developed, but they also had
-no primitive reflexes. Near the Olympic, I had to  stop  for  a
-long  chain of red and green men followed by a string of people
-enclosed in some sort of scales, who  dragged  their  shuffling
-feet  from one street into the next, leaving behind a stench of
-sweat and paint. I stood and waited for them to pass, while the
-sun had already lit up the huge mass of  the  hotel  and  shone
-gaily  in  the metallic face of Yurkovsky, who, as he had while
-alive, looked out over the heads of all men. After they passed,
-I went into the hotel. The clerk was dozing behind his counter.
-Awaking, he smiled professionally and asked in a cheery  voice,
-"Would you like a room?"
-     "No," I replied, "I am visiting Rimeyer."
-     ' Rimeyer? Excuse me -- room 902?"
-     I stopped.
-     "I believe so. What's the matter?"
-     "I beg your pardon, but he is not in."
-     "What do you mean, not in?"
-     "He checked out."
-     "Can't  be,  he  has  been ill. You are not mistaken? Room
-902?"
-     "Exactly right, 902, Rimeyer. Our perpetual  client.  It's
-an  hour  and a half since he left. More accurately, flew away.
-His friends helped him down and aboard a copter."
-     "What friends?" I asked hopelessly.
-     "Friends,  as  I  said,  but,   excuse   me,   they   were
-acquaintances.  There  were three of them, two of whom I really
-don't know. Just young athletic-looking men. But I do know  Mr.
-Pebblebridge,  he was our permanent guest. But he signed out --
-today."
-     "Pebblebridge?"
-     "Exactly. Lately he has been meeting Rimeyer quite  often,
-so  I concluded that they were quite well acquainted. He stayed
-in  room  817.  A  fairly  imposing   gentleman,   middle-aged,
-red-headed..."
-     "Oscar!"
-     "Exactly, Oscar Pebblebridge.
-     'That  makes  sense,"  I  said,  trying  to keep a hold on
-myself. "You say they helped him?"
-     "That's right. He has been very sick and they even sent  a
-doctor  up:  to  him  yesterday. He was still very weak and the
-young men held him up by his elbows, and almost carried him."
-     "And the nurse? He had an attendant nurse with him?"
-     "Yes, there was one. But she left right after them -- they
-let her go."
-     "And what is your name?"
-     "Val, at your service."
-     "Listen, Val," I said. "You are sure it didn't  look  like
-they were taking him away forcibly?"
-     I looked hard at him. He blinked in confusion.
-     "No,"  he  said.  "Although,  now  that you have mentioned
-it..."
-     "All right," I said. "Give me the key to his room and come
-with me."
-     Clerks are, as a rule, quite savvy types. Their  sense  of
-smell, at least for certain things, is quite impressive. It was
-perfectly obvious that he had guessed who I was. And maybe even
-where  I  came from. He called a porter, whispered something to
-him, and we went up to the ninth floor.
-     "What currency did he pay in?" I asked.
-     "Who? Pebblebridge?"
-     "Yes."
-     "I think... ah yes, marks, German marks."
-     "And when did he arrive here?"
-     "One minute... it will come to  me...  sixteen  marks  ...
-precisely four days ago."
-     "Did he know that Rimeyer stayed with you?"
-     "Excuse me, but I can't say. But the day before yesterday,
-they had  dinner  together. And yesterday, they had a long talk
-in the foyer. Early in the morning while  everybody  was  still
-up."
-     It  was  unusually  clean  and  tidy  in Rimeyer's room. I
-walked about looking over the place.  Suitcases  stood  in  the
-closet.  The  bed  was  rumpled,  but  I  could see no signs of
-struggle. The bathroom also was clean and tidy. Boxes of  Devon
-were stacked on the shelf.
-     "What do you think -- should I call the police?" asked the
-clerk.
-     "I    don't   know,"   I   replied.   "Check   with   your
-administration."
-     "You understand that I am in doubt again. True, he  didn't
-say  goodbye.  But  it all looked completely innocent. He could
-have given me a sign, and I would have  understood  him  --  we
-have  known  each  other  a  long  time.  He  was  pleading Mr.
-Pebblebridge: 'The radio, please don't forget the radio.'"
-     The radio lay under the mirror, hidden  by  a  negligently
-thrown towel.
-     "Yes?"  I  said.  "And  what  did  Mr. Pebblebridge say to
-that?"
-     Mr. Pebblebridge was soothing him, saying, "Of course,  of
-course, don't worry..."
-     I  took  the  radio, and leaving the bathroom, sat down at
-the desk. The clerk looked back and forth from the radio to me.
-     So, I thought, now he knows why I came here. I  turned  it
-an. It moaned and howled. They all know about slug. No need for
-Eli,  nor  Rimeyer;  you can take anyone at random. This clerk,
-for instance. Right now, for instance.  I  turned  it  off  and
-said, "Please be good enough to turn on the combo."
-     He  ran  over  to it with mincing steps, turned it on, and
-eyed me questioningly.
-     "Leave it on that station. A little softer. Thank you."
-     "So you don't advise me to call the police?"
-     "As you wish."
-     "It seemed you had something quite definite in  mind  when
-you questioned me."
-     "It  only  seemed  so,"  I  said coldly. "It's just that I
-dislike Mr. Pebblebridge. But that does not concern you."
-     The clerk bowed.
-     "I'll stay here for a while,  Val,"  I  said.  "I  have  a
-notion  that  this  Mr.  Pebblebridge will be back. It won't be
-necessary to announce that I am here. In the meantime, you  are
-free to go."
-     "Yes, sir," he said.
-     When  he left, I rang up the service bureau and dictated a
-telegram; "Have found the meaning of life but am lonely brother
-departed unexpectedly come at once Ivan." Then I turned on  the
-radio  again, and again it howled and screeched. I took off the
-back and pulled out  the  local  oscillator-mixer.  It  was  no
-mixer.  It  was  a  slug. A beautiful precision subassembly, of
-obviously mass-produced derivation, and the more  I  looked  at
-it, the more it seemed that somewhere, sometime, long before my
-arrival  here,  and  more  than  once, I had already seen these
-components  in  some  very  familiar  device.  I  attempted  to
-recollect  where I had seen them, but instead, I remembered the
-room  clerk  and  his  face  with  a   weak   smile   and   his
-understanding,  commiserating  eyes. They are all infected. No,
-they hadn't tried slug -- heaven forbid! They hadn't even  seen
-one!  It  is  so indecent! It is the worst of the worst! Not so
-loud, my dear, how can you say that in front of the boy...  but
-I've  been told it's something out of this world.... Me?... How
-can you think that, you must have a low  opinion  of  me  after
-all....  I don't know, they say over at the Oasis, Buba has it,
-but as for myself -- I don't know....  And  why  not?  I  am  a
-moderate man -- if I feel something is not right, I'll stop....
-Let  me  have  five packets of Devon, we have made up a fishing
-party (hee, hee!). Fifty thousand people. And their friends  in
-other  towns.  And  a hundred thousand tourists every year. The
-problem is not with the gang. That's the least of our  worries,
-for what does it take to scatter them? The problem is that they
-are  all  ready,  all  eager,  and  there  is not the slightest
-prospect of the  possibility  to  prove  to  them  that  it  is
-terribly  frightening,  that it is the end, that it is the last
-debasement.
-     I clasped the slug in my fist, propped up my head  on  it,
-and stared at Rimeyer's dress jacket with the ribbon bar on it,
-hanging  on  the  back of the chair. Just like me, he must have
-sat in this chair a few months ago, and also held the slug  and
-radio  for  the  second time, and the same warm flick of desire
-wandered through the depths  of  his  consciousness:  there  is
-nothing  to  worry  about,  because  now  there is light in any
-darkness, sweetness in any grief, joy in any pain....
-     ...There, there, said Rimeyer. Now you have  got  it.  You
-just  have  to be honest with yourself. It is a little shameful
-at first, and then you begin to understand how  much  time  you
-have lost for nothing.... ...Rimeyer, I said, I wasted time not
-for  myself.  This  cannot  be  done,  it  simply cannot, it is
-destruction  for  everyone,  you  can't   replace   life   with
-dreams.... ...Zhilin, said Rimeyer, when man does something, it
-is  always  for himself. There may be absolute egotists in this
-world, but perfect altruists are just impossible.  If  you  are
-thinking  of  death  in a bathtub, then, in the first place, we
-are all mortal, and in the second place,  if  science  gave  us
-slug,  it will see to it that it will be rendered harmless. And
-in the meantime, all that is required is moderation. And  don't
-talk  to me of the substitution of reality with dreams. You are
-no novice, you know perfectly well that these dreams  are  also
-part  of  reality.  They constitute an entire world. Why do you
-then call this acquisition ruin?... ...Rimeyer, I said, because
-this world is still illusory, it's all within you, not  outside
-of  you, and everything you do in it remains in yourself. It is
-the opposite of the real  world,  it  is  antagonistic  to  it.
-People  who  escape  into this illusory world cease to exist in
-the real world. They become as dead. And when  everyone  enters
-the  illusory  world  --  and you know it could end thus -- the
-history of man  will  terminate....  ...Zhilin,  said  Rimeyer,
-history  is  the  history  of people. Every man wants to live a
-life which has not been in vain, and  slug  gives  you  such  a
-life....  Yes, I know that you consider your life as not having
-been in vain without slug, but, admit it, you have never  lived
-so luminously, so fully as you have today in the tub. You are a
-bit  ashamed  to recollect it, and you wouldn't risk recounting
-it to others. Don't. They have their life, you  have  yours....
-...Rimeyer,  I  said,  all  that  is true. But the past! Space,
-schools, the struggle with fascists, gangsters -- is  all  that
-for naught? Forty years for nothing? And the others -- they did
-it all for nothing, too?... ...Zhilin, said Rimeyer, nothing is
-for  nothing  in  history.  Some  fought  and did not live long
-enough to have slug.  You  fought  and  lived  long  enough....
-...Rimeyer, I said, I fear for mankind. This is really the end.
-It's  the  end  of  man interacting with nature, the end of the
-interplay of man  with  society,  the  end  of  liaisons  among
-individuals, the end of progress, Rimeyer. AU these billions of
-people  submerged  in.  hot  water and in themselves... only in
-themselves....  ...  Zhilin,  said  Rimeyer,  it's  frightening
-because it's unfamiliar. And as for progress -- it will come to
-an  end  only for the real society, only for the real progress.
-But each separate man will lose nothing,  he  will  only  gain,
-since  his world will become infinitely brighter, his ties with
-nature,  illusory  though  they  may  be,  will   become   more
-multifaceted;  and  ties with society, also illusory but not so
-known to him, will become more powerful and fruitful.  And  you
-don't  have  to  mourn  the  end  of progress. You do know that
-everything comes to an end. So now comes the end of progress in
-the objective world. Heretofore, we didn't know how  if,  would
-end,  But  we  know  now. We hadn't had time to realize all the
-potential intensity of objective existence, it could be that we
-would have reached such knowledge in a few hundred  years,  but
-now  it  has  been  put  in  our  grasp.  Slug brings a gift of
-understanding of our remotest ancestors which you  cannot  ever
-have  in  real life. You are simply the prisoner of an obsolete
-ideal, but be logical, the ideal which slug offers you is  just
-as  beautiful.  Hadn't  you  always  dreamed  of  man  with the
-greatest  scope  of  fantasy   and   gigantic   imagination....
-...Rimeyer,  I  replied,  if  you  only  knew how tired I am of
-arguing. All my life I have argued with myself and with others.
-I have always loved to argue, because  otherwise  life  is  not
-worth  living. But I am tired right now and don't wish to argue
-over  slug,  of  all  things....  ...Then  go  on,  Ivan,  said
-Rimeyer....
-     I  inserted the slug into the radio. As he had then, I got
-up. As he did then, I was past thought, past belonging in  this
-world, but I still heard him say: don't forget to lock the door
-tight so that you won't be disturbed.
-     And  then I sat down. ...So that's the way of it, Rimeyer!
-said I. So that's how it went. You surrendered. You closed  the
-door  tight.  And  then  you sent lying reports to your friends
-that there wasn't any slug. And then  again,  after  hesitating
-but  a  moment,  you  sent  me  to  my death so that I wouldn't
-disturb you. Your ideal, Rimeyer,  is  offal.  If  man  has  to
-perform what is base in the name of an ideal, then the worth of
-such ideal is -- less than dross....
-     I  glanced at the watch and shoved the radio in my pocket.
-I was past waiting for Oscar. I was hungry. And beyond  that  I
-had  the  feeling  that for once I had done something useful in
-this town. I left my phone number with the  room  clerk  --  in
-case  Oscar  or  Rimeyer should return -- and went out onto the
-plaza. I did not believe that Rimeyer would come back  or  even
-that  I  would  ever see him again, but Oscar could hold to his
-promise, though more likely, I would have to seek him out.  And
-probably not alone. And probably not here.
-
-<ul><a name=12></a><h2>Chapter TWELVE</h2></ul>
-
-     There   was   but  one  visitor  in  the  automated  cafe.
-Barricaded behind bottles and hors d'oeuvres at a corner  table
-sat a dark man of oriental cast, magnificently but outlandishly
-dressed.  I  took  some yogurt and blintzes with sour cream and
-set to, glancing at him now and then. He ate and drank much and
-avidly, his face shiny with sweat, hot  inside  his  ridiculous
-formal  clothes.  He  sighed,  leaning  back  in  his chair and
-loosening his belt. The motion exposed a  long  yellow  holster
-glistening in the sunlight under the clothing.
-     I  was  on  my  way  into the last of the blintzes when he
-hailed me: "Hello," he said. "Are you a native here?"
-     "No," I said. "A tourist."
-     "So that means you don't understand anything either."
-     I went to the bar, threw a juice  cocktail  together,  and
-approached him.
-     "Why  is  it  empty  here?"  he continued. He had a lively
-spare face and a bold gaze. "Where are the inhabitants? Why  is
-everything  closed  up?  Everyone  is asleep, you can't get any
-service."
-     "You just arrived?"
-     "Yes."
-     He pushed an empty plate away, moved up a  full  one,  and
-gulped some light beer.
-     "Where are you from?" I asked. He glared at me menacingly,
-and I added quickly, "If it's not a secret, of course."
-     "No,"  he  said, "it's not a secret," and went back to his
-eating.
-     I finished the juice and got ready to leave. Then he said,
-"They live well, the dogs. Such food and as much as  you  want,
-and all for free."
-     "Well, not quite for free," I contradicted.
-     "Ninety dollars! Pennies! I'll show them how to eat ninety
-dollars   within   three   days!"   His   eyes  stopped  roving
-momentarily, "D-dogs!" he muttered and fell to again.
-     I was quite familiar  with  such  types.  They  came  from
-minuscule,  totally milked kingdoms and prefectdoms, reduced to
-utter poverty, and greedily ate and drank, mindful of  the  hot
-dusty  streets  of  their  home  towns,  where in the niggardly
-ribbons  of  shade,  moribund  men  and  women  lay  dying  and
-immobile, while children with distended bellies rummaged in the
-garbage  piles of foreign consulates. They were surcharged with
-hatred and needed only two things -- food and weapons. Food for
-their own gang, which was the opposition, and weapons to  fight
-the  other gang, which was in power. They were the most flaming
-patriots, who spoke hotly and effusively of their love for  the
-people,  but  resolutely refused all help from without, because
-they loved nothing but their power and no one  but  themselves,
-and  were  ready  in  the name of the people and the victory of
-high principles to mortify the same people, right down  to  the
-last   man,   if   necessary,  with  hunger  and  machine  gun.
-Microhitlers!
-     "Weapons? Food?" I asked.
-     He grew wary.
-     "Yes," he said. "Food and weapons. Only without any  silly
-conditions.  And  as  free  as  possible.  Or  on  credit. True
-patriots never have any money. While the ruling  clique  drowns
-in luxury...."
-     "Famine?" I asked.
-     "Anything  you  want.  While  you here swim in luxury." He
-gazed at me with hatred. "The whole world is drowning in wealth
-and we alone are starving. But your  hopes  are  in  vain!  The
-revolution cannot be stopped!"
-     "Yes," I said. "And whom is the revolution against?"
-     "We  are  fighting  the  blood leeches of Boadshah! We are
-against corruption and debauchery of the ruling top  layer,  we
-are for freedom and true democracy. The people are with us, but
-they  have  to be fed. And you tell us that you'll give us food
-only after we disarm. And even threaten  intervention....  What
-filthy,  lying  demagogy!  What  deception of the revolutionary
-masses! To disarm in the face of  those  bloodsuckers  --  that
-means to throw a hangman's noose over the heads of all the true
-freedom fighters! We answer you -- no! You will not deceive the
-people.  Let  Boadshah and his brutes disarm! Then we shall see
-what needs doing!"
-     "Yes," I said. "But Boadshah  also,  in  all  probability,
-does not wish a noose thrown over his neck."
-     He  put  the beer down savagely, and his hand moved toward
-the holster in a habitual gesture. But then he  quickly  caught
-himself.
-     "I  should  have known you don't understand a damn thing,"
-he said. "You who are well fed have grown drowsy  from  a  full
-stomach,  you  are too conceited to understand us. You wouldn't
-have dared to talk to me like that in the jungle."
-     In the jungle, I would have  talked  differently  to  you,
-bandit, I thought, and said:
-     "I  really  don't  understand many things. For instance, I
-don't understand what will happen when you gain the upper hand.
-Let us imagine that you have won, Boadshah has been hanged,  if
-be, in his turn, hasn't fled to seek food and weapons --"
-     "He  won't  get  away.  He'll  get  his  just deserts. The
-revolutionary people will tear him to shreds. That's when we'll
-go to work. We will regain the  territory  seized  from  us  by
-affluent  neighbors, we will carry out the entire program which
-the lying Boadshah  constantly  shouts  about  to  deceive  the
-people....  I'll  show  them how to strike! They'll learn about
-strikes with me on top -- there'll be no strikes!  They'll  all
-go under arms and forward march! We will win and then..."
-     He shut his eyes and moaned a bit, shaking his head.
-     "And  then  you  will be well fed, you will swim in luxury
-and sleep till noon?"
-     He laughed.
-     "I deserve that. The people deserve it. No one  will  dare
-reproach  us. We will eat and drink as much as we wish, we will
-live in real houses, we will say to the  people:  now  you  are
-free -- divert yourselves!"
-     "And  don't  think about a thing," I added. "But don't you
-think that all that could come out badly for you?"
-     "Forget it," he said. "That's sheer demagogy.  You  are  a
-demagogue.   Also  a  dogmatist.  We  too  have  all  kinds  of
-dogmatists similar to yourself. Man, they say,  will  lose  the
-meaning  of life. No, we reply, man will lose nothing. Man will
-acquire and not lose. You have to feel the people. You have  to
-be  from  the  people yourself. The people don't like sophists.
-What the hell for do I let myself be fed on by wood leeches and
-feed on worms myself?" Suddenly he smiled  amiably.  "You  must
-have  taken  offense  at me a bit, for calling you well fed and
-other things. Please don't. Affluence is  bad  when  you  don't
-have  it,  but  your  neighbor  does. But achieved affluence --
-that's a great thing! It's worth fighting for. Everybody fought
-for it. It must be obtained  with  weapons  in  hand,  and  not
-traded for freedom and democracy."
-     "So your final goal is still abundance? Just abundance?"
-     "Obviously!  The  final objective always is abundance. The
-difference is that we are choosy about the means to get it."
-     "I have already grasped that. But what about man?"
-     "What do you mean, man?"
-     I did understand that it was futile to argue.
-     "You have never been here before?" I asked.
-     "Why?"
-     "Look into it, I said. This town gives excellent practical
-lessons in abundance."
-     He shrugged his shoulders.
-     "So far, I like it here." Again he pushed  away  an  empty
-plate  and  replaced  it with a full one. "These hors d'oeuvres
-are strange to me.... Everything is tasty  and  cheap....  It's
-enviable."  He  swallowed  a few forkfuls of salad and growled.
-"We know that all great revolutionaries fought  for  abundance.
-We  don't  have  time to theorize, but there is no need for it,
-anyway. There are  enough  theories  without  us.  Furthermore,
-abundance is in no way threatening us. It won't threaten us for
-quite a while yet. We have much more pressing problems."
-     "To hang Boadshah," I said.
-     "Yes  --  to begin with. Next we will need to do away with
-the dogmatists. I can perceive that even now.  Next  comes  the
-realization  of  our  legitimate  claims. After that, something
-else will come up. And only then, and after many other  things,
-will  abundance arrive. I am an optimist, but I don't believe I
-will live to see it. Don't you worry -- we'll  manage  somehow.
-If  we can stand hunger then we can take abundance for sure....
-The dogmatists prattle that abundance is  not  an  end,  but  a
-means.  We  reply  that  every  means  was once an goal. Today,
-abundance is a goal. Tomorrow, perhaps it may become a means."
-     I got up.
-     "Tomorrow may be too late," I said. "It  is  incorrect  of
-you  to fall back on great revolutionaries. They would not have
-accepted your shibboleth: now you are free -- enjoy yourselves.
-They spoke otherwise: now that you are free -- work. After all,
-they never fought  for  abundance  for  the  belly,  they  were
-interested in abundance for the soul and the mind."
-     His  hand  twitched toward the holster again, and again he
-caught himself.
-     "A Marxist!" he said with astonishment. "But  then  again,
-you  are  a  visitor.  We have almost no Marxists, we take them
-and..."
-     I kept control of myself.
-     Passing by the window, I took another look at him. He  sat
-with  his  back to the street and ate and ate, his elbows stuck
-out.
-     When I got home, the living room was already  vacant.  The
-youngsters  had  piled the bedsheets and pillows in the corner.
-There was a note under the telephone on the desk. Written in  a
-childish   scrawl,   it  read:  "Take  care.  She  has  plotted
-something. She was fussing in the bedroom." I  sighed  and  sat
-down in the armchair.
-     There  was  still  an  hour  until the meeting with Oscar,
-assuming he came. There was no sense in going to sleep, but  in
-addition,  it  might  not be safe -- Oscar could bring company,
-and come earlier than expected, possibly not through the  door.
-I  got  the  pistol  out  of  the  suitcase, put in a clip, and
-dropped it in my side pocket. Next  I  climbed  into  the  bar,
-brewed myself some coffee, and went back to the study.
-     I  took  the  slug  out  of  my  radio  and the one out of
-Rimeyer's, lay them down in front  of  me  on  the  table,  and
-attempted  again to recollect where indeed I had seen just such
-components and why I thought that I had seen  them  before  and
-more than once. And then it came to me. I went into the bedroom
-and  brought in the phonor. I didn't even need a screwdriver. I
-took the case off the phonor, stuck my index finger  under  the
-odorizer  horn, and, catching it with my finger nail, extracted
-a vacuum tubusoid FX-92-U, four outputs, static field, capacity
-equals two. Sold in consumer electronic stores at  fifty  cents
-each. In local patois -- a slug.
-     It   had   to   be,  I  thought.  We  are  disoriented  by
-conversations about a new drug. We are constantly  derailed  by
-talk  about  horrific  new  inventions.  We  have  already made
-several similar blunders.
-     There was the time when Alhagana and Burris  served  up  a
-complaint  in  the  U.N.  that the separatists were using a new
-type of weapon -- freeze bombs. We  threw  ourselves  furiously
-into  a  search  for underground laboratories and even arrested
-two genuine underground inventors (sixteen and ninety-six years
-old, respectively). And then it turned out that  the  inventors
-were  in  no  way  connected,  and  the awful freeze bombs were
-acquired by the  separatists  in  Munich  from  a  refrigerator
-warehouse  -- and were in fact reject super-freezers. True, the
-effect of these super-freezers was  indeed  horrible.  Used  in
-conjunction  with molecular detonators (widely used by undersea
-archaeologists  in  the  Amazon  for   dispersing   crocs   and
-piranhas),  the  super-freezers  were  capable of instantaneous
-temperature  depression  of  one  hundred  and  fifty   degrees
-centigrade  over a radius of twenty meters. Afterward, we spent
-much effort indoctrinating ourselves with the concept  that  we
-should  keep  in mind that in our times, literally every month,
-masses of new inventions  appear  with  the  most  peaceful  of
-applications,  but with the most unexpected side effects. These
-characteristics are often such that lawbreaking in the area  of
-weapons  manufacture  and  stockpiling  becomes meaningless. We
-became extremely cautious about new types of armament, employed
-by various extremists, and only a  year  later  got  caught  by
-another  twist, when we went looking for a mysterious apparatus
-with which poachers lured pterodactyls from the Uganda Preserve
-at  a  great  distance.  We  found  a   clever   do-it-yourself
-adaptation  of  the  "Up-down" toy in combination with a fairly
-generally available medical device.
-     And now we had caught slug -- a combination of a  standard
-radio with a standard tubusoid and a standard chemical and very
-common plumbing-supplied hot water.
-     To  make  a  long  story  short, there would be no need to
-search for secret factories. We'd have to look  for  some  very
-adroit  and unprincipled speculators who sensed very delicately
-indeed that  they  found  themselves  in  the  Country  of  the
-Boob....  They'd  be  like  trichinae  in  a  ham.  Five or six
-enterprising self-seekers. An innocent cottage somewhere in the
-suburbs. Just go to a department store, buy the vacuum tubusoid
-for fifty cents, peel off the plastic wrapping, and place in an
-elegant box with a glassite cover. And then sell it  for  fifty
-marks  --  "only  to you and only through friends." True, there
-was still the inventor. Probably he was  not  alone,  and  most
-certainly he was not the only one.... But probably they had not
-survived;  for  this  was nothing like a lure for pterodactyls.
-Anyway, was the matter really one of speculators? Let them sell
-another forty slugs, or a hundred. Even in the City  of  Boobs,
-people  had to figure out in the end what it was all about. And
-when that happened, slug would spread like wildfire.
-     The first ones to see to that would be the moralists  from
-the  Joy  of  Living.  They  would be followed by Dr. Opir, who
-would sally forth and announce  that  according  to  scientific
-endings,  slug  was  conducive  to  clarity  of thought and was
-unsurpassed in the treatment of alcoholism and  depression.  In
-general,  the  future  ideal  was a vast trough filled with hot
-water. Then they would stop writing  the  word  "slug"  on  the
-fences.
-     That's  who  should  be taken by the throat, I thought, if
-anybody. The trouble is not the profiteers. The trouble is that
-there  exists  this  Country   of   the   Boob,   this   filthy
-misconstruction.  It  has  taken the shivers under its wing and
-can't wait to legalize slug....
-     There was a knock on the door. Oscar came into the  study,
-and he was not alone. With him was Matia himself, stocky, gray,
-with  dark  glasses  and  thick cane, as always, looking like a
-veteran  who  has  lost   his   sight.   Oscar   was   smirking
-self-satisfiedly.
-     "Hello,  Ivan,"  said  Matia.  "Meet  your  back-up, Oscar
-Pebblebridge, from the southwest section."
-     We shook hands. What I  have  always  disliked  about  our
-Security  Council  is  the  plethora  of  mossy traditions, and
-especially   infuriating   is    the    idiotic    system    of
-cross-investigation,  due  to  which we are constantly tripping
-over each other's sleuthing, busting each other's mugs, and not
-uncommonly shooting each other with fair accuracy. I can hardly
-see that as serious work -- more like  adolescents  playing  at
-detectives. Let them go soak their heads in a swamp.
-     "I was going to take you in today," confided Oscar. "Never
-in my life have I seen such a suspicious character."
-     Without saying a word, I took the pistol out of my pocket,
-unloaded it, and threw it in the desk drawer. Oscar followed my
-actions  with approval. I said, addressing Matia, "I guess that
-the  investigation  would  simply  collapse,  without   getting
-started,  had I known about Oscar. But I must inform you that I
-almost maimed him yesterday."
-     "I read you right," said Oscar smugly.
-     Grunting, Matia lowered himself into the armchair.
-     "I can't ever remember a situation," he said,  "when  Ivan
-was  pleased  with everything. But conspiracy is the foundation
-of our business.... Take a chair and sit  down,  both  of  you.
-You,  Oscar,  had  no right to be maimed, and you, Ivan, had no
-right to be arrested. That's how you should regard it. And what
-have you got here?" he said, taking off  his  dark  glasses  to
-look  at the slugs, "Taking up radio as a hobby in between your
-work? Laudable, laudable!"
-     It was evident that they didn't know a  thing.  Oscar  was
-leafing through his notebook, where everything was encrypted in
-his  own personal code, and was apparently preparing himself to
-make a report, while Matia scanned  over  the  slugs  with  his
-fleshy  nose,  holding the glasses aloft in his hand. There was
-something symbolic in this spectacle.
-     "And so, agent Zhilin is enriching his leisure with  radio
-technology," continued Matia, restoring his glasses and leaning
-back  in  his chair. "He has lots of free time, he has switched
-to a four-hour day.... And bow do you stand on the question  of
-the  meaning  of  life,  agent  Zhilin? It appears you may have
-found it. I hope it won't be necessary to take  you  away  like
-agent Rimeyer?"
-     "It  won't be required," I said. "I had not enough time to
-become addicted. Did Rimeyer tell you anything?"
-     "But of course not,"  he  said  with  vast  sarcasm.  "Why
-should he do that? He was ordered to find the drug, and he did,
-and  he  used  it,  and  now  he  apparently considers his duty
-discharged. He became an addict himself, don't you see.  He  is
-silent.  He  is  loaded with this brew up to his ears, and it's
-useless to talk to him! He raves that he has murdered  you  and
-constantly  asks  for his radio." Matia stopped short and gazed
-at the radios. "Strange," he said and looked at me. "However, I
-like orderliness. Oscar got here  first,  and  he  has  certain
-deductions  both  about  the  goodies  and  the  conduct of the
-operation. Let's begin with him."
-     I looked at Oscar.
-     "About what operation?"
-     "The devil knows," said Matia.
-     "The raiding of the center. You haven't located the center
-yet?"
-     The hunt is on, I thought, and  said,  "No,  I  didn't.  A
-center I haven't latched on to. But --"
-     "All  in good order, in proper order," said Matia severely
-and banged the table with the flat of his hand. "Oscar, you may
-begin, and as for you, Ivan, you listen  attentively  and  make
-your deductions. If you are still capable, that is."
-     Oscar  began.  Obviously  he  was  a good worker. He moved
-fast,  energetically,  and  purposefully.  True,  Rimeyer   had
-twisted   him   around  his  finger  as  well  as  he  had  me.
-Nevertheless, Oscar had been able to grasp much in spite of it.
-He understood that the sought-for "goodies" were known  locally
-as  "slug."  Very rapidly he had grasped the connection between
-slug and Devon. He divined that neither the  Fishers,  nor  the
-Perches,  nor the Sorrowers had any relation to our problem. He
-had deduced with superb  insight  that  in  this  town  it  was
-practically  impossible  to  hide  any secret. He had even been
-able to insinuate himself into the confidence  of  the  Intels,
-and  had  established beyond any doubt that there were only two
-truly secret societies -- the Art Patrons and the Intels. Since
-the Art  Patrons  could  be  eliminated,  that  left  only  the
-Intels....
-     "It  was  not  contrary  to  the  conviction  which  I had
-formed," said Oscar, "that  the  only  people  with  access  to
-laboratories   and   capable   of   conducting   scientific  or
-quasi-scientific research were the students and  professors  in
-the  university.  It's true that the factories in the city also
-have laboratories. There are only four  of  them,  and  I  have
-investigated  them  all.  These  laboratories  are  stringently
-specialized and are loaded to the limit with ongoing  work.  As
-the  factories  work  around  the  clock,  there  is  no  basis
-whatsoever to postulate that the industrial labs  could  become
-centers  of  slug  manufacture.  On  the other hand, out of the
-seven university labs, two are  obviously  surrounded  with  an
-atmosphere  of  mystery. I was unable to determine what goes on
-in them, but I spotted three students, who, I  believe,  should
-know for sure...."
-     I listened to him intently, amazed at how much he had been
-able to accomplish here, but it was already all too clear to me
-where  his main error lay. I could see he was following a false
-trail, and alongside of that, there  grew  within  me  a  vague
-feeling  of an even more significant error, of a most important
-error, the error in the underlying premises of the Council.
-     "I arrived at the  visualization,"  he  continued,  "of  a
-gangsterlike  organization of the vertical type with rigorously
-separated functions in decentralized sections.  The  production
-section  is  involved  in the manufacture and perfection of the
-slug.... I should inform you that slug, whatever it may be,  is
-being perfected: I was able to establish that in the beginning.
-Devon  was  not employed at all.... Next, the marketing section
-is concerned with expanding the slug  distribution,  while  the
-strong-arm section terrorizes the population and interdicts all
-debate on that topic.... The intimidation of the people..."
-     Now I understood it all.
-     "Just a minute, Oscar," I said. "Can you guarantee that in
-the entire city there are only two secret organizations?"
-     "Yes," he said. "Only the Art Patrons and the Intels."
-     "Please  continue, Oscar," said Matia with displeasure. "I
-would ask you not to interrupt, Ivan."
-     "Sorry," I said. Oscar continued to talk,  but  I  was  no
-longer  listening. Something flared in my mind. The traditional
-initial model for all  our  undertakings,  with  its  invariant
-axiom  predicating  the existence of a ramified organization of
-evildoers, had been shattered into dust, and I was only  amazed
-that  I had failed heretofore to recognize its inane complexity
-in the context of this simple-minded  country.  There  were  no
-secret  shops  guarded  by  gloomy persons with brass knuckles,
-there were no wary, unprincipled  businessmen,  there  were  no
-traveling  salesmen  with  double-walled  shirt collars stuffed
-with contraband, and it was quite for nothing  that  Oscar  was
-drafting the elegant chart of squares and circles, connected by
-a  confusion  of  lines, and inscribed with the words "center,"
-"staff," and numerous question  marks.  There  was  nothing  to
-demolish  and  be and no one to send off to Baffin Land.... But
-there was modern industry involved  in  everyday  trade,  there
-were state stores where slugs were sold for fifty cents apiece,
-and  there  were  --  but  only  in  the  beginning  one or two
-individuals not devoid of inventiveness and dying of inactivity
-and  thirsting  for  new  sensations.   And   there   was   the
-medium-sized  country  where,  once  upon a time, abundance and
-affluence were the end to  be  attained,  and  they  never  did
-become  the  means  to  another  end. And that was all that was
-needed.
-     Someone inserted a slug into a radio by  mistake  and  lay
-down  in  the bath to relax and maybe listen to some good music
-or to hear the latest news -- and it started.  The  news  oozed
-and remnants of phonors found their way into the garbage ducts,
-then  someone figured out that slugs could be obtained not only
-from phonors, but could simply be bought in stores. Someone was
-inspired to use aromatic  salts  and  someone  employed  Devon.
-People  started  to die in their baths from nervous exhaustion,
-and  the  statistical  department  of  the   Security   Council
-submitted  a  top  secret  report  to  the Presidium. It became
-apparent at once that all such deaths occurred with people  who
-had come here as tourists. And furthermore, that there were far
-more  such  deaths  in  this  country than anywhere else on the
-planet. As so often happens, a false theory was constructed  on
-well-verified  facts,  and we, one after another, well schooled
-in conspiracy, were sent here to uncover  the  secret  gang  of
-dealers  in a new and unknown drug, and we arrived here and did
-stupid things. But, as always, no labor goes for naught, and if
-you must look for the guilty, then all were  guilty,  from  the
-mayor to Rimeyer, and if so, then no one was guilty, and now we
-have to --
-     "Ivan," said Matia irritably, "are you asleep?"
-     They  were  both looking at me. Oscar was extending me his
-notebook with the diagrams. I took the notebook and threw it on
-the table.
-     "Listen," I said. "Oscar has done wonders, of course,  but
-we  have come a cropper again! Oscar, you have seen such a lot,
-but you understood nothing. If there are  any  people  in  this
-land  who  hate  slug,  it's  the  Intels.  The  Intels are not
-gangsters, they are desperate men and patriots. They  have  but
-one  aim  --  to stir this bog. By any means. To give this city
-some kind of purpose, to force it away from the trough They are
-sacrificing themselves, do you  understand?  They  invite  fire
-upon themselves, they are attempting to arouse the town to come
-sort  of common emotion, even if it has to be hatred. Can it be
-you haven't heard of the tear  gas,  the  shooting  up  of  the
-shivers? They are not making slug in the laboratories, they are
-building  bombs and cooking tear gas ... and generally breaking
-the laws on weapons technology. They are preparing a putsch for
-the twenty-eighth, but as for slug -- here it is!"
-     I shoved one at each of them, and simultaneously expounded
-everything I thought on the subject.
-     At first, they listened to  me  in  disbelief.  Then  they
-stared  at  the slugs, not taking their eyes off them until I'd
-finished, and when I did, they were quiet for  quite  a  while.
-Matia held his slug as though it were a buzzing wasp. There was
-displeasure written on his face.
-     "Vacuum  tubusoid...  Hmmm...  In  fact...  and radios ...
-there is something to it."
-     Matia stuck the slug in his  shirt  pocket  and  announced
-decisively,  "There  is nothing in it. That is, of course, I am
-very pleased with you, Ivan, since you  have  apparently  found
-that  which was needed, but your work is in the Council and not
-with the Commission of World Problems.  They  adore  philosophy
-there,  and  haven't done a single useful thing to date. As for
-you, you have been working with us for ten years now,  but  you
-still  haven't  grasped  the simple truth: if there is a crime,
-there must be a criminal."
-     'That's not true," I said.
-     "That is true!" said Matia. "Don't start a debate with me!
-You are eternally debating!... Be quiet, Oscar. It's my turn to
-talk. I am asking you, Ivan, what is the worth of your version?
-What do  you  propose  to  do?  But  be  concrete,  please!  Be
-concrete!"
-     "Concretely..." I faltered.
-     True enough, my version did not suit them.
-     They probably didn't even consider it a version.
-     For  them it was just philosophizing. They were men, so to
-say,  of  resolute  action,  knights  of   immediate   decisive
-measures.,  They  let nothing slide. They cut through knots and
-demounted Damocles' swords.  They  made  rapid  decisions,  and
-having  made them, they no longer doubted. They didn't know how
-to be otherwise. That was their world-view --  and  I  was  the
-only  one  to  consider that their time had passed. Patience, I
-thought. I am going to need an awful lot of patience. Suddenly,
-I understood that life's logic was again ripping me  away  from
-my  best comrades, and that now it would be especially hard for
-me, since the resolution of this argument  would  take  a  long
-time, a very long time.... They were both looking at me.
-     "Concretely," I repeated. "Concretely I suggest a plan for
-the development  and  spread  of a humanistic viewpoint in this
-country."
-     Oscar grimaced with distaste, and Matia said biliously:
-     "Nah! I am talking seriously."
-     "So am I. What we need is not detectives, nor squads armed
-with machine pistols."
-     "We need a decision!" said Matia, "not conversations,  but
-decisions!"
-     'That's precisely what I am proposing -- a decision."
-     Matia reddened
-     "We  have  to  save  people,"  he said. "Souls we can save
-after we save the people.... Don't annoy me, Ivan!"
-     "While you are  restructuring  world-views,"  said  Oscar,
-"people will be dying or turning into idiots."
-     I  didn't  want  to  argue,  but  said anyway, "As long as
-world-views are not restructured,  people  will  be  dying  and
-turning   into  idiots,  and  no  squads  will  help.  Remember
-Rimeyer!"
-     "Rimeyer forgot his duty," raged Matia.
-     "Exactly," said I.
-     Matia slammed his mouth shut and, tearing off his glasses,
-was silent for a while, his  eyes  rotating  angrily.  He  was,
-without  a  doubt, a man of iron; you could actually watch turn
-drive his rage inward. In a minute he  was  entirely  calm  and
-smiling placidly.
-     "Yes,"  he  said. "It seems that I am forced to admit that
-intelligence as a  social  institution  has  regressed  to  the
-piteous  end.  Apparently  we  destroyed  the  last of the true
-operatives in  the  time  of  the  last  putsches.  "Knife"  --
-Dannziger;  "Bamboo"  --  Savada;  "Doll"  --  Grover; "Ram" --
-Boas... True, they were bought and they were sold, they had  no
-country,  they were scum, lumpens, but they worked! "Sirius" --
-Haram... worked for four intelligences and was a scoundrel.  He
-was  a  filthy  animal. But if he gave information, it was real
-information,  clear,  precise,  and  timely.  I  can  recollect
-ordering  him  hung without the slightest pity, but when I look
-at my current co-workers, I can understand what a loss
-     that was.... Granted, a man can fail in the end and become
-a drug addict, as "Bamboo" Savada did finally.  But  why  write
-lying  reports? Rather resign, excuse yourself, don't write any
-reports at all.... I  arrive  in  this  town  in  the  profound
-conviction  that  I know it through and through, because I have
-had here for ten years an experienced, proved, resident  agent.
-And  suddenly  I determine that I know precisely nothing. Every
-local kid knows who the Fishers are. But I don't know.  I  know
-only  that the KVS Society which occupied itself with about the
-same things as the Fishers was  disbanded  and  outlawed  three
-years ago. I know this from the reports of the resident. But at
-the  local police I am informed that the VAL Society was formed
-two years ago, which  I  did  not  learn  from  the  resident's
-reports.  I  am  employing a simplified example, since I really
-don't  give  a  damn  about  the  Fishers,  but  this   becomes
-transformed  into a general style of work. Reports are delayed,
-reports lie, reports misinform... in the end reports are simply
-invented. One man openly resigns from the Council  and  doesn't
-consider  it  incumbent  upon him to so inform his superior. He
-has enough, you see;  he  had  intentions  to  communicate  but
-somehow couldn't find the time.... Another, instead of fighting
-the  drug  problem, becomes an addict himself.... And the third
-philosophizes."
-     He nodded at me with regretful bitterness.
-     "Understand me correctly, Ivan," he continued. "I  am  not
-opposed to philosophy. But philosophy is one thing and our work
-altogether  another.  Judge  for yourself, Ivan. If there is no
-secret  headquarters,  if  we  are  faced  with  a  deluge   of
-do-it-yourself  enterprise, then why all the secretiveness? All
-this conspiratorial atmosphere? Why is slug enveloped  in  such
-mystery?  I  allow  that  Rimeyer is silent because of pangs of
-conscience in general and specifically on your  account,  Ivan.
-But  the rest? Slug is not illegal; everyone knows about it and
-yet  everyone  keeps  it  a  secret.   Oscar,   here,   doesn't
-philosophize;  he  postulates  that  the inhabitants are simply
-terrorized. I can understand that. And what do  you  postulate,
-Ivan?"
-     "In  your  pocket,"  I  said,  "there is a slug. Go in the
-bathroom. There's Devon on the shelf -- one tablet orally, four
-in the water. There's some whiskey in the medicine chest. Oscar
-and I will wait. And then you can tell  us  aloud,  so  we  can
-hear,  we your comrades in work and your underlings, about your
-sensations and experiences. And we -- better it should be Oscar
--- should listen, but as for me, I think I'll leave."
-     Matia put on his glasses and stared at me.
-     "You are implying that I won't tell? You propose  that  I,
-too, will be derelict in my duty?"
-     "What  you  will learn will have no relation whatsoever to
-your duty.  That  you  will  renege  on  subsequently.  As  did
-Rimeyer.  Comrades,  this  is  slug.  It's a cute device, which
-awakens fantasy and directs  it  where  it  will,  particularly
-where  you yourself subconsciously -- and I mean subconsciously
--- would like to direct it. The further you  are  removed  from
-the  animal, the more inoffensive would slug be, but the closer
-to the animal, the more you would be impelled to adhere to  the
-conspiratorial  way.  The  animals  themselves  are  altogether
-silent. They just know how to press the lever."
-     "What lever?"
-     I explained about the rats to them.
-     "Did you try it yourself?" asked Matia.
-     "Yes."
-     "And?"
-     "As you can see, I tend to silence."
-     Matia sibilated for some time and then said, "Well,  I  am
-no nearer to the animal than you are. How do you put it in?"
-     I  loaded  the  radio  and  handed  it  to  him. Oscar was
-following all this with interest.
-     "God be with me," said Matia, "Where is  your  bath?  I'll
-wash after my trip while I'm at it."
-     He  locked  himself  in,  and  we  could hear him dropping
-things.
-     "Strange affair," said Oscar.
-     "It's really not an affair," I contradicted. "It's a piece
-of history, Oscar, and you would like to fit it into a file and
-tie it with a ribbon. But this  is  no  gangster  business.  It
-should be obvious to a hedgehog, as Yurkovsky used to say."
-     "Who?"
-     "Yurkovsky,   Vladimir  Sergeyevitch.  There  was  such  a
-renowned planetologist. I worked with him."
-     "Aah," said Oscar, "By the way, on the plaza by the  Hotel
-Olympic there is a monument to a Yurkovsky."
-     "The very same man."
-     "Really?"  said  Oscar.  "On  the  other  hand, it's quite
-possible. However, the monument was not put up because he was a
-renowned planetologist. It's simply that for the first time  in
-the history of the city, he broke the electronic roulette bank.
-It was decided to immortalize such a feat."
-     "I  expected  something  of  the sort," I murmured. I felt
-depressed.
-     The shower began to hiss in the bathroom, and there was  a
-frightful  roar  from Matia, At first, I decided that he turned
-on ice water instead of warm, but  he  kept  yelling  and  then
-began  to  curse  in  the  most  horrendous  terms. Oscar and I
-exchanged glances. He was generally calm, interpreting this  as
-the   typical   action  of  slug,  and  his  face  exhibited  a
-compassionate expression. The latch rattled  wildly,  the  door
-flew  open with a crash. Bare heels slapped in the bedroom, and
-a naked Matia rolled into the study.
-     "Are you some kind of an idiot?" he bellowed at me.  "What
-sort of filthy trick is this?"
-     I  went  numb.  Matia  resembled  a  grotesque  zebra. His
-well-fed body was covered with poison-green  vertical  stripes.
-He reared and stamped his feet, spraying emerald drops. When we
-regained  our  composure  and  investigated  the  site  of  the
-accident, we learned that the shower head had been stuffed with
-a sponge saturated with a green dye. I  remembered  Len's  note
-and guessed that Vousi was the culprit. It took a long while to
-restore  a  normal  atmosphere.  Matia viewed the incident as a
-boorish joke  and  an  inadmissible  disregard  of  subordinate
-discipline  and behavior. Oscar horse-laughed. I scrubbed Matia
-with a brush and explained. Then Matia announced that from  now
-on  he wouldn't trust anyone and would try out slug when he got
-home. He dressed and went into conference  with  Oscar  on  the
-plans for blockading the city.
-     I was cleaning up in the bath and thinking that with this,
-my work  in  the Council was coming to an end, and another kind
-of work was beginning -- which I did not know how to  begin.  I
-would  have  liked  to include myself in the blockade planning,
-not because I considered it necessary, but because  it  was  so
-simple,  so  much  more  simple  than to return to people their
-souls which had been devoured by affluence, and to  teach  each
-one  to  think  of  world  problems  in the same way as his own
-personal ones.
-     "Isolate this pus bag from the rest of the world,  isolate
-it  totally, that's the total of our philosophy," orated Matia.
-That was aimed at me. But perhaps not even me. For Matia was  a
-brilliant  mind.  He  understood  too  well  that isolation was
-always a defense, but here we had to attack. But he knew how to
-advance only with squads, and this was embarrassing to him.
-     To rescue. For how long  would  you  need  rescuing?  When
-would  you  learn  to rescue yourselves? Why were you eternally
-harkening to priests, fascists, demagogues, and imbecile Opirs?
-Why didn't you want to exert your brains? Why  did  you  resist
-thinking  so?  Why  couldn't  you  understand that the world is
-vast, complex, and fascinating? Why was everything  simple  and
-boring  tc  you? In what way did your mind differ from the mind
-of Rabelais, Swift, Lenin, Einstein, Makarenko, Hemingway,  and
-Strogoff?  Someday I would grow tired of all this. Someday when
-I had no more strength and conviction. For  I  was  similar  to
-you.  But  I  wanted  to  help you, and you didn't want to help
-me....
-     <i>Reg and Len came over after school, and Len  said,  "We
-have decided, Ivan. We will go to the Gobi Central." He had red
-fuzz  on  his  lip  and huge red hands, and I could see that it
-divas he who had thought up the Gobi trip, and  quite  recently
--- not  more  than  ten minutes ago. Reg, as usual, was silent,
-chewing on a blade of grass and placidly studying me  with  his
-calm  gray  eyes. He has become altogether a square, I thought,
-and said, "Wonderful book, isn't it?" "Yes, indeed," said  Len.
-"We  understood  at  once  where  we should go." Reg was quiet.
-"Heat and stench are suspended in  the  shadow  of  these  hard
-laboring  dragons," I said from memory. "They devour everything
-under them -- the ancient Mongolian prayer gate, the bones of a
-two-humped beast fallen in some sand storm..." "Yes," said Len,
-while Reg went on chewing his blade of grass. "Every  time,"  I
-continued  (now  from  Ichin-dagli), "that the sun arrives at a
-mathematically precise  required  position,  a  strange  mirage
-blossoms out in the East -- of a strange city with white towers
-which  no  one  has yet seen in reality. " "One should see that
-with his own eyes," said Len,  and  laughed.  "Friend  Len,"  I
-said,  "it's too fascinating and therefore too simple. You will
-see that it's  too  simple  yourself  and  it  will  become  an
-unpleasant disappointment." No, I hadn't said it right. "Friend
-Len,"  I  said,  "what  sort  of a mirage is that? Here is one.
-Seven years  ago,  in  your  mother's  house,  I  saw  a  truly
-marvelous  mirage:  both of you standing before me almost grown
-up..." No -- I was saying that for myself,  not  for  them.  It
-should  be said differently. "Friend Len," I said, "seven years
-ago you explained to me that your people were accursed. We came
-here and removed the curse from you and Reg and from many other
-children who had no parents. And now it's your turn to  remove,
-the curse, which..."
-     It  will  be  very difficult, but I'll explain it to them.
-One way or another, I'll get it  across.  We  have  known  from
-childhood  how  to  remove  the curses on the barricades and on
-construction sites and in laboratories, and you will remove the
-last of the  curses,  you  will  be  the  future  teachers  and
-educators.  In  the last war -- the most bloodless and the most
-difficult for its soldiers.</i>
-     Upstairs Vousi screeched and Len started to cry piteously.
-Oscar's voice boomed in the  study.  How  well  off  he  is,  I
-thought. Simple: slug is bad, harmful, unnatural. Therefore, it
-must  be  destroyed,  forbidden by law, and then you must watch
-closely that the  law  is  strictly  enforced.  Only  Matia  is
-smarter  than  that,  because he is older and more experienced.
-Matia can still be pulled over to my side. My word doesn't mean
-anything to him, but others will  be  found  to  whom  he  will
-listen....  How  wonderful  that I can now cry out to the whole
-world and be heard by millions of like-thinkers!
-     And then I thought that I would not leave  this  place.  I
-had  been  here only three days. It could not be that there was
-no one here who would be with us. No one  who  hated  all  this
-with a deadly hatred, who wanted to blast this dull sated world
-out  of its stasis. Such people always existed and always will.
-Perhaps that bibliophile driver or that tall, harsh one of  the
-Intels...  and  who  knew how many more. They stumbled about as
-though they were blind. We would do everything in our power  to
-help  them so that they would not waste their anger on trifles.
-It was our place to be here now. And my place, too.
-     What a labor lies ahead, I thought, what a task!  For  the
-time being, I didn't know where to begin in this Country of the
-Boob,  caught  unprepared  in  a flood of affluence, but I knew
-that I wouldn't leave here as  long  as  the  immigration  laws
-permitted.  And  when they stopped permitting it, I would break
-them....
diff --git a/tests/hashing/city.cpp b/tests/hashing/city.cpp
deleted file mode 100644 (file)
index 69ba0e6..0000000
+++ /dev/null
@@ -1,630 +0,0 @@
-// Copyright (c) 2011 Google, Inc.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-//
-// CityHash, by Geoff Pike and Jyrki Alakuijala
-//
-// This file provides CityHash64() and related functions.
-//
-// It's probably possible to create even faster hash functions by
-// writing a program that systematically explores some of the space of
-// possible hash functions, by using SIMD instructions, or by
-// compromising on hash quality.
-
-//#include "config.h"
-#include "city.h"
-#if CDS_BUILD_BITS == 64
-
-#include <algorithm>
-#include <string.h>  // for memcpy and memset
-
-using namespace std;
-
-static uint64 UNALIGNED_LOAD64(const char *p) {
-  uint64 result;
-  memcpy(&result, p, sizeof(result));
-  return result;
-}
-
-static uint32 UNALIGNED_LOAD32(const char *p) {
-  uint32 result;
-  memcpy(&result, p, sizeof(result));
-  return result;
-}
-
-#ifdef _MSC_VER
-
-#include <stdlib.h>
-#define bswap_32(x) _byteswap_ulong(x)
-#define bswap_64(x) _byteswap_uint64(x)
-
-#elif defined(__APPLE__)
-
-// Mac OS X / Darwin features
-#include <libkern/OSByteOrder.h>
-#define bswap_32(x) OSSwapInt32(x)
-#define bswap_64(x) OSSwapInt64(x)
-
-#elif defined(__NetBSD__)
-
-#include <sys/types.h>
-#include <machine/bswap.h>
-#if defined(__BSWAP_RENAME) && !defined(__bswap_32)
-#define bswap_32(x) bswap32(x)
-#define bswap_64(x) bswap64(x)
-#endif
-
-#else
-
-#include <byteswap.h>
-
-#endif
-
-#ifdef WORDS_BIGENDIAN
-#define uint32_in_expected_order(x) (bswap_32(x))
-#define uint64_in_expected_order(x) (bswap_64(x))
-#else
-#define uint32_in_expected_order(x) (x)
-#define uint64_in_expected_order(x) (x)
-#endif
-
-#if !defined(LIKELY)
-#if HAVE_BUILTIN_EXPECT
-#define LIKELY(x) (__builtin_expect(!!(x), 1))
-#else
-#define LIKELY(x) (x)
-#endif
-#endif
-
-static uint64 Fetch64(const char *p) {
-  return uint64_in_expected_order(UNALIGNED_LOAD64(p));
-}
-
-static uint32 Fetch32(const char *p) {
-  return uint32_in_expected_order(UNALIGNED_LOAD32(p));
-}
-
-// Some primes between 2^63 and 2^64 for various uses.
-static const uint64 k0 = 0xc3a5c85c97cb3127ULL;
-static const uint64 k1 = 0xb492b66fbe98f273ULL;
-static const uint64 k2 = 0x9ae16a3b2f90404fULL;
-
-// Magic numbers for 32-bit hashing.  Copied from Murmur3.
-static const uint32_t c1 = 0xcc9e2d51;
-static const uint32_t c2 = 0x1b873593;
-
-// A 32-bit to 32-bit integer hash copied from Murmur3.
-static uint32 fmix(uint32 h)
-{
-  h ^= h >> 16;
-  h *= 0x85ebca6b;
-  h ^= h >> 13;
-  h *= 0xc2b2ae35;
-  h ^= h >> 16;
-  return h;
-}
-
-static uint32 Rotate32(uint32 val, int shift) {
-  // Avoid shifting by 32: doing so yields an undefined result.
-  return shift == 0 ? val : ((val >> shift) | (val << (32 - shift)));
-}
-
-#undef PERMUTE3
-#define PERMUTE3(a, b, c) do { std::swap(a, b); std::swap(a, c); } while (0)
-
-static uint32 Mur(uint32 a, uint32 h) {
-  // Helper from Murmur3 for combining two 32-bit values.
-  a *= c1;
-  a = Rotate32(a, 17);
-  a *= c2;
-  h ^= a;
-  h = Rotate32(h, 19);
-  return h * 5 + 0xe6546b64;
-}
-
-static uint32 Hash32Len13to24(const char *s, size_t len) {
-  uint32 a = Fetch32(s - 4 + (len >> 1));
-  uint32 b = Fetch32(s + 4);
-  uint32 c = Fetch32(s + len - 8);
-  uint32 d = Fetch32(s + (len >> 1));
-  uint32 e = Fetch32(s);
-  uint32 f = Fetch32(s + len - 4);
-  uint32 h = len;
-
-  return fmix(Mur(f, Mur(e, Mur(d, Mur(c, Mur(b, Mur(a, h)))))));
-}
-
-static uint32 Hash32Len0to4(const char *s, size_t len) {
-  uint32 b = 0;
-  uint32 c = 9;
-  for (int i = 0; i < len; i++) {
-    signed char v = s[i];
-    b = b * c1 + v;
-    c ^= b;
-  }
-  return fmix(Mur(b, Mur(len, c)));
-}
-
-static uint32 Hash32Len5to12(const char *s, size_t len) {
-  uint32 a = len, b = len * 5, c = 9, d = b;
-  a += Fetch32(s);
-  b += Fetch32(s + len - 4);
-  c += Fetch32(s + ((len >> 1) & 4));
-  return fmix(Mur(c, Mur(b, Mur(a, d))));
-}
-
-uint32 CityHash32(const char *s, size_t len) {
-  if (len <= 24) {
-    return len <= 12 ?
-        (len <= 4 ? Hash32Len0to4(s, len) : Hash32Len5to12(s, len)) :
-        Hash32Len13to24(s, len);
-  }
-
-  // len > 24
-  uint32 h = len, g = c1 * len, f = g;
-  uint32 a0 = Rotate32(Fetch32(s + len - 4) * c1, 17) * c2;
-  uint32 a1 = Rotate32(Fetch32(s + len - 8) * c1, 17) * c2;
-  uint32 a2 = Rotate32(Fetch32(s + len - 16) * c1, 17) * c2;
-  uint32 a3 = Rotate32(Fetch32(s + len - 12) * c1, 17) * c2;
-  uint32 a4 = Rotate32(Fetch32(s + len - 20) * c1, 17) * c2;
-  h ^= a0;
-  h = Rotate32(h, 19);
-  h = h * 5 + 0xe6546b64;
-  h ^= a2;
-  h = Rotate32(h, 19);
-  h = h * 5 + 0xe6546b64;
-  g ^= a1;
-  g = Rotate32(g, 19);
-  g = g * 5 + 0xe6546b64;
-  g ^= a3;
-  g = Rotate32(g, 19);
-  g = g * 5 + 0xe6546b64;
-  f += a4;
-  f = Rotate32(f, 19);
-  f = f * 5 + 0xe6546b64;
-  size_t iters = (len - 1) / 20;
-  do {
-    uint32 a0 = Rotate32(Fetch32(s) * c1, 17) * c2;
-    uint32 a1 = Fetch32(s + 4);
-    uint32 a2 = Rotate32(Fetch32(s + 8) * c1, 17) * c2;
-    uint32 a3 = Rotate32(Fetch32(s + 12) * c1, 17) * c2;
-    uint32 a4 = Fetch32(s + 16);
-    h ^= a0;
-    h = Rotate32(h, 18);
-    h = h * 5 + 0xe6546b64;
-    f += a1;
-    f = Rotate32(f, 19);
-    f = f * c1;
-    g += a2;
-    g = Rotate32(g, 18);
-    g = g * 5 + 0xe6546b64;
-    h ^= a3 + a1;
-    h = Rotate32(h, 19);
-    h = h * 5 + 0xe6546b64;
-    g ^= a4;
-    g = bswap_32(g) * 5;
-    h += a4 * 5;
-    h = bswap_32(h);
-    f += a0;
-    PERMUTE3(f, h, g);
-    s += 20;
-  } while (--iters != 0);
-  g = Rotate32(g, 11) * c1;
-  g = Rotate32(g, 17) * c1;
-  f = Rotate32(f, 11) * c1;
-  f = Rotate32(f, 17) * c1;
-  h = Rotate32(h + g, 19);
-  h = h * 5 + 0xe6546b64;
-  h = Rotate32(h, 17) * c1;
-  h = Rotate32(h + f, 19);
-  h = h * 5 + 0xe6546b64;
-  h = Rotate32(h, 17) * c1;
-  return h;
-}
-
-// Bitwise right rotate.  Normally this will compile to a single
-// instruction, especially if the shift is a manifest constant.
-static uint64 Rotate(uint64 val, int shift) {
-  // Avoid shifting by 64: doing so yields an undefined result.
-  return shift == 0 ? val : ((val >> shift) | (val << (64 - shift)));
-}
-
-static uint64 ShiftMix(uint64 val) {
-  return val ^ (val >> 47);
-}
-
-static uint64 HashLen16(uint64 u, uint64 v) {
-  return Hash128to64(uint128(u, v));
-}
-
-static uint64 HashLen16(uint64 u, uint64 v, uint64 mul) {
-  // Murmur-inspired hashing.
-  uint64 a = (u ^ v) * mul;
-  a ^= (a >> 47);
-  uint64 b = (v ^ a) * mul;
-  b ^= (b >> 47);
-  b *= mul;
-  return b;
-}
-
-static uint64 HashLen0to16(const char *s, size_t len) {
-  if (len >= 8) {
-    uint64 mul = k2 + len * 2;
-    uint64 a = Fetch64(s) + k2;
-    uint64 b = Fetch64(s + len - 8);
-    uint64 c = Rotate(b, 37) * mul + a;
-    uint64 d = (Rotate(a, 25) + b) * mul;
-    return HashLen16(c, d, mul);
-  }
-  if (len >= 4) {
-    uint64 mul = k2 + len * 2;
-    uint64 a = Fetch32(s);
-    return HashLen16(len + (a << 3), Fetch32(s + len - 4), mul);
-  }
-  if (len > 0) {
-    uint8 a = s[0];
-    uint8 b = s[len >> 1];
-    uint8 c = s[len - 1];
-    uint32 y = static_cast<uint32>(a) + (static_cast<uint32>(b) << 8);
-    uint32 z = len + (static_cast<uint32>(c) << 2);
-    return ShiftMix(y * k2 ^ z * k0) * k2;
-  }
-  return k2;
-}
-
-// This probably works well for 16-byte strings as well, but it may be overkill
-// in that case.
-static uint64 HashLen17to32(const char *s, size_t len) {
-  uint64 mul = k2 + len * 2;
-  uint64 a = Fetch64(s) * k1;
-  uint64 b = Fetch64(s + 8);
-  uint64 c = Fetch64(s + len - 8) * mul;
-  uint64 d = Fetch64(s + len - 16) * k2;
-  return HashLen16(Rotate(a + b, 43) + Rotate(c, 30) + d,
-                   a + Rotate(b + k2, 18) + c, mul);
-}
-
-// Return a 16-byte hash for 48 bytes.  Quick and dirty.
-// Callers do best to use "random-looking" values for a and b.
-static pair<uint64, uint64> WeakHashLen32WithSeeds(
-    uint64 w, uint64 x, uint64 y, uint64 z, uint64 a, uint64 b) {
-  a += w;
-  b = Rotate(b + a + z, 21);
-  uint64 c = a;
-  a += x;
-  a += y;
-  b += Rotate(a, 44);
-  return make_pair(a + z, b + c);
-}
-
-// Return a 16-byte hash for s[0] ... s[31], a, and b.  Quick and dirty.
-static pair<uint64, uint64> WeakHashLen32WithSeeds(
-    const char* s, uint64 a, uint64 b) {
-  return WeakHashLen32WithSeeds(Fetch64(s),
-                                Fetch64(s + 8),
-                                Fetch64(s + 16),
-                                Fetch64(s + 24),
-                                a,
-                                b);
-}
-
-// Return an 8-byte hash for 33 to 64 bytes.
-static uint64 HashLen33to64(const char *s, size_t len) {
-  uint64 mul = k2 + len * 2;
-  uint64 a = Fetch64(s) * k2;
-  uint64 b = Fetch64(s + 8);
-  uint64 c = Fetch64(s + len - 24);
-  uint64 d = Fetch64(s + len - 32);
-  uint64 e = Fetch64(s + 16) * k2;
-  uint64 f = Fetch64(s + 24) * 9;
-  uint64 g = Fetch64(s + len - 8);
-  uint64 h = Fetch64(s + len - 16) * mul;
-  uint64 u = Rotate(a + g, 43) + (Rotate(b, 30) + c) * 9;
-  uint64 v = ((a + g) ^ d) + f + 1;
-  uint64 w = bswap_64((u + v) * mul) + h;
-  uint64 x = Rotate(e + f, 42) + c;
-  uint64 y = (bswap_64((v + w) * mul) + g) * mul;
-  uint64 z = e + f + c;
-  a = bswap_64((x + z) * mul + y) + b;
-  b = ShiftMix((z + a) * mul + d + h) * mul;
-  return b + x;
-}
-
-uint64 CityHash64(const char *s, size_t len) {
-  if (len <= 32) {
-    if (len <= 16) {
-      return HashLen0to16(s, len);
-    } else {
-      return HashLen17to32(s, len);
-    }
-  } else if (len <= 64) {
-    return HashLen33to64(s, len);
-  }
-
-  // For strings over 64 bytes we hash the end first, and then as we
-  // loop we keep 56 bytes of state: v, w, x, y, and z.
-  uint64 x = Fetch64(s + len - 40);
-  uint64 y = Fetch64(s + len - 16) + Fetch64(s + len - 56);
-  uint64 z = HashLen16(Fetch64(s + len - 48) + len, Fetch64(s + len - 24));
-  pair<uint64, uint64> v = WeakHashLen32WithSeeds(s + len - 64, len, z);
-  pair<uint64, uint64> w = WeakHashLen32WithSeeds(s + len - 32, y + k1, x);
-  x = x * k1 + Fetch64(s);
-
-  // Decrease len to the nearest multiple of 64, and operate on 64-byte chunks.
-  len = (len - 1) & ~static_cast<size_t>(63);
-  do {
-    x = Rotate(x + y + v.first + Fetch64(s + 8), 37) * k1;
-    y = Rotate(y + v.second + Fetch64(s + 48), 42) * k1;
-    x ^= w.second;
-    y += v.first + Fetch64(s + 40);
-    z = Rotate(z + w.first, 33) * k1;
-    v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first);
-    w = WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch64(s + 16));
-    std::swap(z, x);
-    s += 64;
-    len -= 64;
-  } while (len != 0);
-  return HashLen16(HashLen16(v.first, w.first) + ShiftMix(y) * k1 + z,
-                   HashLen16(v.second, w.second) + x);
-}
-
-uint64 CityHash64WithSeed(const char *s, size_t len, uint64 seed) {
-  return CityHash64WithSeeds(s, len, k2, seed);
-}
-
-uint64 CityHash64WithSeeds(const char *s, size_t len,
-                           uint64 seed0, uint64 seed1) {
-  return HashLen16(CityHash64(s, len) - seed0, seed1);
-}
-
-// A subroutine for CityHash128().  Returns a decent 128-bit hash for strings
-// of any length representable in signed long.  Based on City and Murmur.
-static uint128 CityMurmur(const char *s, size_t len, uint128 seed) {
-  uint64 a = Uint128Low64(seed);
-  uint64 b = Uint128High64(seed);
-  uint64 c = 0;
-  uint64 d = 0;
-  signed long l = len - 16;
-  if (l <= 0) {  // len <= 16
-    a = ShiftMix(a * k1) * k1;
-    c = b * k1 + HashLen0to16(s, len);
-    d = ShiftMix(a + (len >= 8 ? Fetch64(s) : c));
-  } else {  // len > 16
-    c = HashLen16(Fetch64(s + len - 8) + k1, a);
-    d = HashLen16(b + len, c + Fetch64(s + len - 16));
-    a += d;
-    do {
-      a ^= ShiftMix(Fetch64(s) * k1) * k1;
-      a *= k1;
-      b ^= a;
-      c ^= ShiftMix(Fetch64(s + 8) * k1) * k1;
-      c *= k1;
-      d ^= c;
-      s += 16;
-      l -= 16;
-    } while (l > 0);
-  }
-  a = HashLen16(a, c);
-  b = HashLen16(d, b);
-  return uint128(a ^ b, HashLen16(b, a));
-}
-
-uint128 CityHash128WithSeed(const char *s, size_t len, uint128 seed) {
-  if (len < 128) {
-    return CityMurmur(s, len, seed);
-  }
-
-  // We expect len >= 128 to be the common case.  Keep 56 bytes of state:
-  // v, w, x, y, and z.
-  pair<uint64, uint64> v, w;
-  uint64 x = Uint128Low64(seed);
-  uint64 y = Uint128High64(seed);
-  uint64 z = len * k1;
-  v.first = Rotate(y ^ k1, 49) * k1 + Fetch64(s);
-  v.second = Rotate(v.first, 42) * k1 + Fetch64(s + 8);
-  w.first = Rotate(y + z, 35) * k1 + x;
-  w.second = Rotate(x + Fetch64(s + 88), 53) * k1;
-
-  // This is the same inner loop as CityHash64(), manually unrolled.
-  do {
-    x = Rotate(x + y + v.first + Fetch64(s + 8), 37) * k1;
-    y = Rotate(y + v.second + Fetch64(s + 48), 42) * k1;
-    x ^= w.second;
-    y += v.first + Fetch64(s + 40);
-    z = Rotate(z + w.first, 33) * k1;
-    v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first);
-    w = WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch64(s + 16));
-    std::swap(z, x);
-    s += 64;
-    x = Rotate(x + y + v.first + Fetch64(s + 8), 37) * k1;
-    y = Rotate(y + v.second + Fetch64(s + 48), 42) * k1;
-    x ^= w.second;
-    y += v.first + Fetch64(s + 40);
-    z = Rotate(z + w.first, 33) * k1;
-    v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first);
-    w = WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch64(s + 16));
-    std::swap(z, x);
-    s += 64;
-    len -= 128;
-  } while (LIKELY(len >= 128));
-  x += Rotate(v.first + z, 49) * k0;
-  y = y * k0 + Rotate(w.second, 37);
-  z = z * k0 + Rotate(w.first, 27);
-  w.first *= 9;
-  v.first *= k0;
-  // If 0 < len < 128, hash up to 4 chunks of 32 bytes each from the end of s.
-  for (size_t tail_done = 0; tail_done < len; ) {
-    tail_done += 32;
-    y = Rotate(x + y, 42) * k0 + v.second;
-    w.first += Fetch64(s + len - tail_done + 16);
-    x = x * k0 + w.first;
-    z += w.second + Fetch64(s + len - tail_done);
-    w.second += v.first;
-    v = WeakHashLen32WithSeeds(s + len - tail_done, v.first + z, v.second);
-    v.first *= k0;
-  }
-  // At this point our 56 bytes of state should contain more than
-  // enough information for a strong 128-bit hash.  We use two
-  // different 56-byte-to-8-byte hashes to get a 16-byte final result.
-  x = HashLen16(x, v.first);
-  y = HashLen16(y + z, w.first);
-  return uint128(HashLen16(x + v.second, w.second) + y,
-                 HashLen16(x + w.second, y + v.second));
-}
-
-uint128 CityHash128(const char *s, size_t len) {
-  return len >= 16 ?
-      CityHash128WithSeed(s + 16, len - 16,
-                          uint128(Fetch64(s), Fetch64(s + 8) + k0)) :
-      CityHash128WithSeed(s, len, uint128(k0, k1));
-}
-
-#ifdef __SSE4_2__
-#include "citycrc.h"
-#include <nmmintrin.h>
-
-// Requires len >= 240.
-static void CityHashCrc256Long(const char *s, size_t len,
-                               uint32 seed, uint64 *result) {
-  uint64 a = Fetch64(s + 56) + k0;
-  uint64 b = Fetch64(s + 96) + k0;
-  uint64 c = result[0] = HashLen16(b, len);
-  uint64 d = result[1] = Fetch64(s + 120) * k0 + len;
-  uint64 e = Fetch64(s + 184) + seed;
-  uint64 f = 0;
-  uint64 g = 0;
-  uint64 h = c + d;
-  uint64 x = seed;
-  uint64 y = 0;
-  uint64 z = 0;
-
-  // 240 bytes of input per iter.
-  size_t iters = len / 240;
-  len -= iters * 240;
-  do {
-#undef CHUNK
-#define CHUNK(r)                                \
-    PERMUTE3(x, z, y);                          \
-    b += Fetch64(s);                            \
-    c += Fetch64(s + 8);                        \
-    d += Fetch64(s + 16);                       \
-    e += Fetch64(s + 24);                       \
-    f += Fetch64(s + 32);                       \
-    a += b;                                     \
-    h += f;                                     \
-    b += c;                                     \
-    f += d;                                     \
-    g += e;                                     \
-    e += z;                                     \
-    g += x;                                     \
-    z = _mm_crc32_u64(z, b + g);                \
-    y = _mm_crc32_u64(y, e + h);                \
-    x = _mm_crc32_u64(x, f + a);                \
-    e = Rotate(e, r);                           \
-    c += e;                                     \
-    s += 40
-
-    CHUNK(0); PERMUTE3(a, h, c);
-    CHUNK(33); PERMUTE3(a, h, f);
-    CHUNK(0); PERMUTE3(b, h, f);
-    CHUNK(42); PERMUTE3(b, h, d);
-    CHUNK(0); PERMUTE3(b, h, e);
-    CHUNK(33); PERMUTE3(a, h, e);
-  } while (--iters > 0);
-
-  while (len >= 40) {
-    CHUNK(29);
-    e ^= Rotate(a, 20);
-    h += Rotate(b, 30);
-    g ^= Rotate(c, 40);
-    f += Rotate(d, 34);
-    PERMUTE3(c, h, g);
-    len -= 40;
-  }
-  if (len > 0) {
-    s = s + len - 40;
-    CHUNK(33);
-    e ^= Rotate(a, 43);
-    h += Rotate(b, 42);
-    g ^= Rotate(c, 41);
-    f += Rotate(d, 40);
-  }
-  result[0] ^= h;
-  result[1] ^= g;
-  g += h;
-  a = HashLen16(a, g + z);
-  x += y << 32;
-  b += x;
-  c = HashLen16(c, z) + h;
-  d = HashLen16(d, e + result[0]);
-  g += e;
-  h += HashLen16(x, f);
-  e = HashLen16(a, d) + g;
-  z = HashLen16(b, c) + a;
-  y = HashLen16(g, h) + c;
-  result[0] = e + z + y + x;
-  a = ShiftMix((a + y) * k0) * k0 + b;
-  result[1] += a + result[0];
-  a = ShiftMix(a * k0) * k0 + c;
-  result[2] = a + result[1];
-  a = ShiftMix((a + e) * k0) * k0;
-  result[3] = a + result[2];
-}
-
-// Requires len < 240.
-static void CityHashCrc256Short(const char *s, size_t len, uint64 *result) {
-  char buf[240];
-  memcpy(buf, s, len);
-  memset(buf + len, 0, 240 - len);
-  CityHashCrc256Long(buf, 240, ~static_cast<uint32>(len), result);
-}
-
-void CityHashCrc256(const char *s, size_t len, uint64 *result) {
-  if (LIKELY(len >= 240)) {
-    CityHashCrc256Long(s, len, 0, result);
-  } else {
-    CityHashCrc256Short(s, len, result);
-  }
-}
-
-uint128 CityHashCrc128WithSeed(const char *s, size_t len, uint128 seed) {
-  if (len <= 900) {
-    return CityHash128WithSeed(s, len, seed);
-  } else {
-    uint64 result[4];
-    CityHashCrc256(s, len, result);
-    uint64 u = Uint128High64(seed) + result[0];
-    uint64 v = Uint128Low64(seed) + result[1];
-    return uint128(HashLen16(u, v + result[2]),
-                   HashLen16(Rotate(v, 32), u * k0 + result[3]));
-  }
-}
-
-uint128 CityHashCrc128(const char *s, size_t len) {
-  if (len <= 900) {
-    return CityHash128(s, len);
-  } else {
-    uint64 result[4];
-    CityHashCrc256(s, len, result);
-    return uint128(result[2], result[3]);
-  }
-}
-
-#endif
-#endif // #if CDS_BUILD_BITS == 64
diff --git a/tests/hashing/city.h b/tests/hashing/city.h
deleted file mode 100644 (file)
index 5987470..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright (c) 2011 Google, Inc.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-//
-// CityHash, by Geoff Pike and Jyrki Alakuijala
-//
-// http://code.google.com/p/cityhash/
-//
-// This file provides a few functions for hashing strings.  All of them are
-// high-quality functions in the sense that they pass standard tests such
-// as Austin Appleby's SMHasher.  They are also fast.
-//
-// For 64-bit x86 code, on short strings, we don't know of anything faster than
-// CityHash64 that is of comparable quality.  We believe our nearest competitor
-// is Murmur3.  For 64-bit x86 code, CityHash64 is an excellent choice for hash
-// tables and most other hashing (excluding cryptography).
-//
-// For 64-bit x86 code, on long strings, the picture is more complicated.
-// On many recent Intel CPUs, such as Nehalem, Westmere, Sandy Bridge, etc.,
-// CityHashCrc128 appears to be faster than all competitors of comparable
-// quality.  CityHash128 is also good but not quite as fast.  We believe our
-// nearest competitor is Bob Jenkins' Spooky.  We don't have great data for
-// other 64-bit CPUs, but for long strings we know that Spooky is slightly
-// faster than CityHash on some relatively recent AMD x86-64 CPUs, for example.
-// Note that CityHashCrc128 is declared in citycrc.h.
-//
-// For 32-bit x86 code, we don't know of anything faster than CityHash32 that
-// is of comparable quality.  We believe our nearest competitor is Murmur3A.
-// (On 64-bit CPUs, it is typically faster to use the other CityHash variants.)
-//
-// Functions in the CityHash family are not suitable for cryptography.
-//
-// Please see CityHash's README file for more details on our performance
-// measurements and so on.
-//
-// WARNING: This code has been only lightly tested on big-endian platforms!
-// It is known to work well on little-endian platforms that have a small penalty
-// for unaligned reads, such as current Intel and AMD moderate-to-high-end CPUs.
-// It should work on all 32-bit and 64-bit platforms that allow unaligned reads;
-// bug reports are welcome.
-//
-// By the way, for some hash functions, given strings a and b, the hash
-// of a+b is easily derived from the hashes of a and b.  This property
-// doesn't hold for any hash functions in this file.
-
-#ifndef CITY_HASH_H_
-#define CITY_HASH_H_
-
-#include <cds/details/defs.h>
-#if CDS_BUILD_BITS == 64
-
-#include <stdlib.h>  // for size_t.
-#include <stdint.h>
-#include <utility>
-
-typedef uint8_t uint8;
-typedef uint32_t uint32;
-typedef uint64_t uint64;
-typedef std::pair<uint64, uint64> uint128;
-
-inline uint64 Uint128Low64(const uint128& x) { return x.first; }
-inline uint64 Uint128High64(const uint128& x) { return x.second; }
-
-// Hash function for a byte array.
-uint64 CityHash64(const char *buf, size_t len);
-
-// Hash function for a byte array.  For convenience, a 64-bit seed is also
-// hashed into the result.
-uint64 CityHash64WithSeed(const char *buf, size_t len, uint64 seed);
-
-// Hash function for a byte array.  For convenience, two seeds are also
-// hashed into the result.
-uint64 CityHash64WithSeeds(const char *buf, size_t len,
-                           uint64 seed0, uint64 seed1);
-
-// Hash function for a byte array.
-uint128 CityHash128(const char *s, size_t len);
-
-// Hash function for a byte array.  For convenience, a 128-bit seed is also
-// hashed into the result.
-uint128 CityHash128WithSeed(const char *s, size_t len, uint128 seed);
-
-// Hash function for a byte array.  Most useful in 32-bit binaries.
-uint32 CityHash32(const char *buf, size_t len);
-
-// Hash 128 input bits down to 64 bits of output.
-// This is intended to be a reasonably good hash function.
-inline uint64 Hash128to64(const uint128& x) {
-  // Murmur-inspired hashing.
-  const uint64 kMul = 0x9ddfea08eb382d69ULL;
-  uint64 a = (Uint128Low64(x) ^ Uint128High64(x)) * kMul;
-  a ^= (a >> 47);
-  uint64 b = (Uint128High64(x) ^ a) * kMul;
-  b ^= (b >> 47);
-  b *= kMul;
-  return b;
-}
-
-#endif // #if CDS_BUILD_BITS == 64
-#endif  // CITY_HASH_H_
diff --git a/tests/hashing/citycrc.h b/tests/hashing/citycrc.h
deleted file mode 100644 (file)
index 054d188..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (c) 2011 Google, Inc.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-//
-// CityHash, by Geoff Pike and Jyrki Alakuijala
-//
-// This file declares the subset of the CityHash functions that require
-// _mm_crc32_u64().  See the CityHash README for details.
-//
-// Functions in the CityHash family are not suitable for cryptography.
-
-#ifndef CITY_HASH_CRC_H_
-#define CITY_HASH_CRC_H_
-
-#include "city.h"
-
-// Hash function for a byte array.
-uint128 CityHashCrc128(const char *s, size_t len);
-
-// Hash function for a byte array.  For convenience, a 128-bit seed is also
-// hashed into the result.
-uint128 CityHashCrc128WithSeed(const char *s, size_t len, uint128 seed);
-
-// Hash function for a byte array.  Sets result[0] ... result[3].
-void CityHashCrc256(const char *s, size_t len, uint64 *result);
-
-#endif  // CITY_HASH_CRC_H_
diff --git a/tests/hashing/hash_func.h b/tests/hashing/hash_func.h
deleted file mode 100644 (file)
index abbc780..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-//$$CDS-header$$
-
-#ifndef CDSUNIT_HASH_FUNC_H
-#define CDSUNIT_HASH_FUNC_H
-
-#include <cds/details/defs.h>
-
-#if CDS_BUILD_BITS == 64
-#   include "hashing/city.h"
-#endif
-
-namespace hashing {
-
-#if CDS_BUILD_BITS == 64
-    class city32 {
-    public:
-        typedef uint32_t hash_type;
-
-        hash_type operator()( void const * pBuf, size_t len )
-        {
-            return CityHash32( reinterpret_cast<char const *>( pBuf ), len );
-        }
-
-        hash_type operator()( std::string const& s )
-        {
-            return CityHash32( s.c_str(), s.length() );
-        }
-
-        template <typename T>
-        hash_type operator()( T const& s )
-        {
-            return CityHash32( reinterpret_cast<char const *>( &s ), sizeof(s));
-        }
-
-        struct less
-        {
-            bool operator()( hash_type lhs, hash_type rhs ) const
-            {
-                return lhs < rhs;
-            }
-        };
-    };
-
-    class city64 {
-    public:
-        typedef uint64_t hash_type;
-
-        hash_type operator()( void const * pBuf, size_t len )
-        {
-            return CityHash64( reinterpret_cast<char const *>( pBuf ), len );
-        }
-
-        hash_type operator()( std::string const& s )
-        {
-            return CityHash64( s.c_str(), s.length() );
-        }
-
-        template <typename T>
-        hash_type operator()( T const& s )
-        {
-            return CityHash64( reinterpret_cast<char const *>( &s ), sizeof(s));
-        }
-
-        struct less
-        {
-            bool operator()( hash_type lhs, hash_type rhs ) const
-            {
-                return lhs < rhs;
-            }
-        };
-    };
-
-    class city128 {
-    public:
-        typedef uint128 hash_type;
-
-        hash_type operator()( void const * pBuf, size_t len )
-        {
-            return CityHash128( reinterpret_cast<char const *>( pBuf ), len );
-        }
-
-        hash_type operator()( std::string const& s )
-        {
-            return CityHash128( s.c_str(), s.length() );
-        }
-
-        template <typename T>
-        hash_type operator()( T const& s )
-        {
-            return CityHash128( reinterpret_cast<char const *>( &s ), sizeof(s));
-        }
-
-        struct less
-        {
-            bool operator()( hash_type const& lhs, hash_type const& rhs ) const
-            {
-                if ( lhs.first != rhs.first )
-                    return lhs.second < rhs.second;
-                return lhs.first < rhs.first;
-            }
-        };
-    };
-#endif // #if CDS_BUILD_BITS == 64
-
-
-} // namespace hashing
-
-#endif // #ifndef CDSUNIT_HASH_FUNC_H
diff --git a/tests/test-hdr/CMakeLists.txt b/tests/test-hdr/CMakeLists.txt
deleted file mode 100644 (file)
index 7e41be4..0000000
+++ /dev/null
@@ -1,417 +0,0 @@
-set(PACKAGE_NAME test-hdr)\r
-\r
-set(CDS_TESTHDR_MAP\r
-    map/hdr_michael_map_hp.cpp\r
-    map/hdr_michael_map_dhp.cpp\r
-    map/hdr_michael_map_rcu_gpi.cpp\r
-    map/hdr_michael_map_rcu_gpb.cpp\r
-    map/hdr_michael_map_rcu_gpt.cpp\r
-    map/hdr_michael_map_rcu_shb.cpp\r
-    map/hdr_michael_map_rcu_sht.cpp\r
-    map/hdr_michael_map_nogc.cpp\r
-    map/hdr_michael_map_lazy_hp.cpp\r
-    map/hdr_michael_map_lazy_dhp.cpp\r
-    map/hdr_michael_map_lazy_rcu_gpi.cpp\r
-    map/hdr_michael_map_lazy_rcu_gpb.cpp\r
-    map/hdr_michael_map_lazy_rcu_gpt.cpp\r
-    map/hdr_michael_map_lazy_rcu_shb.cpp\r
-    map/hdr_michael_map_lazy_rcu_sht.cpp\r
-    map/hdr_michael_map_lazy_nogc.cpp\r
-    map/hdr_feldman_hashmap_hp.cpp\r
-    map/hdr_feldman_hashmap_dhp.cpp\r
-    map/hdr_feldman_hashmap_rcu_gpb.cpp\r
-    map/hdr_feldman_hashmap_rcu_gpi.cpp\r
-    map/hdr_feldman_hashmap_rcu_gpt.cpp\r
-    map/hdr_feldman_hashmap_rcu_shb.cpp\r
-    map/hdr_feldman_hashmap_rcu_sht.cpp\r
-    map/hdr_refinable_hashmap_hashmap_std.cpp\r
-    map/hdr_refinable_hashmap_boost_list.cpp\r
-    map/hdr_refinable_hashmap_list.cpp\r
-    map/hdr_refinable_hashmap_map.cpp\r
-    map/hdr_refinable_hashmap_boost_map.cpp\r
-    map/hdr_refinable_hashmap_boost_flat_map.cpp\r
-    map/hdr_refinable_hashmap_boost_unordered_map.cpp\r
-    map/hdr_refinable_hashmap_slist.cpp\r
-    map/hdr_skiplist_map_hp.cpp\r
-    map/hdr_skiplist_map_dhp.cpp\r
-    map/hdr_skiplist_map_rcu_gpi.cpp\r
-    map/hdr_skiplist_map_rcu_gpb.cpp\r
-    map/hdr_skiplist_map_rcu_gpt.cpp\r
-    map/hdr_skiplist_map_rcu_shb.cpp\r
-    map/hdr_skiplist_map_rcu_sht.cpp\r
-    map/hdr_skiplist_map_nogc.cpp\r
-    map/hdr_splitlist_map_hp.cpp\r
-    map/hdr_splitlist_map_dhp.cpp\r
-    map/hdr_splitlist_map_nogc.cpp\r
-    map/hdr_splitlist_map_rcu_gpi.cpp\r
-    map/hdr_splitlist_map_rcu_gpb.cpp\r
-    map/hdr_splitlist_map_rcu_gpt.cpp\r
-    map/hdr_splitlist_map_rcu_shb.cpp\r
-    map/hdr_splitlist_map_rcu_sht.cpp\r
-    map/hdr_splitlist_map_lazy_hp.cpp\r
-    map/hdr_splitlist_map_lazy_dhp.cpp\r
-    map/hdr_splitlist_map_lazy_nogc.cpp\r
-    map/hdr_splitlist_map_lazy_rcu_gpi.cpp\r
-    map/hdr_splitlist_map_lazy_rcu_gpb.cpp\r
-    map/hdr_splitlist_map_lazy_rcu_gpt.cpp\r
-    map/hdr_splitlist_map_lazy_rcu_sht.cpp\r
-    map/hdr_splitlist_map_lazy_rcu_shb.cpp\r
-    map/hdr_striped_hashmap_hashmap_std.cpp\r
-    map/hdr_striped_hashmap_boost_list.cpp\r
-    map/hdr_striped_hashmap_list.cpp\r
-    map/hdr_striped_hashmap_map.cpp\r
-    map/hdr_striped_hashmap_boost_map.cpp\r
-    map/hdr_striped_hashmap_boost_flat_map.cpp\r
-    map/hdr_striped_hashmap_boost_unordered_map.cpp\r
-    map/hdr_striped_hashmap_slist.cpp\r
-    map/hdr_striped_map_reg.cpp)\r
-\r
-set(CDS_TESTHDR_DEQUE\r
-    deque/hdr_fcdeque.cpp)\r
-\r
-set(CDS_TESTHDR_LIST\r
-    list/hdr_lazy_dhp.cpp\r
-    list/hdr_lazy_hp.cpp\r
-    list/hdr_lazy_nogc.cpp\r
-    list/hdr_lazy_nogc_unord.cpp
-    list/hdr_lazy_rcu_gpi.cpp\r
-    list/hdr_lazy_rcu_gpb.cpp\r
-    list/hdr_lazy_rcu_gpt.cpp\r
-    list/hdr_lazy_rcu_shb.cpp\r
-    list/hdr_lazy_rcu_sht.cpp\r
-    list/hdr_lazy_kv_dhp.cpp\r
-    list/hdr_lazy_kv_hp.cpp\r
-    list/hdr_lazy_kv_nogc.cpp\r
-    list/hdr_lazy_kv_nogc_unord.cpp
-    list/hdr_lazy_kv_rcu_gpb.cpp\r
-    list/hdr_lazy_kv_rcu_gpi.cpp\r
-    list/hdr_lazy_kv_rcu_gpt.cpp\r
-    list/hdr_lazy_kv_rcu_shb.cpp\r
-    list/hdr_lazy_kv_rcu_sht.cpp\r
-    list/hdr_michael_dhp.cpp\r
-    list/hdr_michael_hp.cpp\r
-    list/hdr_michael_nogc.cpp\r
-    list/hdr_michael_rcu_gpi.cpp\r
-    list/hdr_michael_rcu_gpb.cpp\r
-    list/hdr_michael_rcu_gpt.cpp\r
-    list/hdr_michael_rcu_shb.cpp\r
-    list/hdr_michael_rcu_sht.cpp\r
-    list/hdr_michael_kv_dhp.cpp\r
-    list/hdr_michael_kv_hp.cpp\r
-    list/hdr_michael_kv_nogc.cpp\r
-    list/hdr_michael_kv_rcu_gpi.cpp\r
-    list/hdr_michael_kv_rcu_gpb.cpp\r
-    list/hdr_michael_kv_rcu_gpt.cpp\r
-    list/hdr_michael_kv_rcu_shb.cpp\r
-    list/hdr_michael_kv_rcu_sht.cpp)\r
-\r
-set(CDS_TESTHDR_PQUEUE\r
-    priority_queue/hdr_intrusive_mspqueue_dyn.cpp\r
-    priority_queue/hdr_intrusive_mspqueue_static.cpp\r
-    priority_queue/hdr_mspqueue_dyn.cpp\r
-    priority_queue/hdr_mspqueue_static.cpp\r
-    priority_queue/hdr_fcpqueue_boost_stable_vector.cpp\r
-    priority_queue/hdr_fcpqueue_deque.cpp\r
-    priority_queue/hdr_fcpqueue_vector.cpp\r
-    priority_queue/hdr_priority_queue_reg.cpp)\r
-\r
-set(CDS_TESTHDR_QUEUE\r
-    queue/hdr_queue_register.cpp\r
-    queue/hdr_intrusive_fcqueue.cpp\r
-    queue/hdr_intrusive_segmented_queue_hp.cpp\r
-    queue/hdr_intrusive_segmented_queue_dhp.cpp\r
-    queue/hdr_intrusive_tsigas_cycle_queue.cpp\r
-    queue/hdr_intrusive_vyukovmpmc_cycle_queue.cpp\r
-    queue/hdr_basketqueue_hp.cpp\r
-    queue/hdr_basketqueue_dhp.cpp\r
-    queue/hdr_fcqueue.cpp\r
-    queue/hdr_moirqueue_hp.cpp\r
-    queue/hdr_moirqueue_dhp.cpp\r
-    queue/hdr_msqueue_hp.cpp\r
-    queue/hdr_msqueue_dhp.cpp\r
-    queue/hdr_optimistic_hp.cpp\r
-    queue/hdr_optimistic_dhp.cpp\r
-    queue/hdr_rwqueue.cpp\r
-    queue/hdr_segmented_queue_hp.cpp\r
-    queue/hdr_segmented_queue_dhp.cpp\r
-    queue/hdr_tsigas_cycle_queue.cpp\r
-    queue/hdr_vyukov_mpmc_cyclic.cpp)\r
-\r
-set(CDS_TESTHDR_SET\r
-    set/hdr_intrusive_feldman_hashset_hp.cpp\r
-    set/hdr_intrusive_feldman_hashset_dhp.cpp\r
-    set/hdr_intrusive_feldman_hashset_rcu_gpi.cpp\r
-    set/hdr_intrusive_feldman_hashset_rcu_gpb.cpp\r
-    set/hdr_intrusive_feldman_hashset_rcu_gpt.cpp\r
-    set/hdr_intrusive_feldman_hashset_rcu_shb.cpp\r
-    set/hdr_intrusive_feldman_hashset_rcu_sht.cpp\r
-    set/hdr_intrusive_refinable_hashset_avlset.cpp\r
-    set/hdr_intrusive_refinable_hashset_list.cpp\r
-    set/hdr_intrusive_refinable_hashset_set.cpp\r
-    set/hdr_intrusive_refinable_hashset_sgset.cpp\r
-    set/hdr_intrusive_refinable_hashset_slist.cpp\r
-    set/hdr_intrusive_refinable_hashset_splayset.cpp\r
-    set/hdr_intrusive_refinable_hashset_treapset.cpp\r
-    set/hdr_intrusive_refinable_hashset_uset.cpp\r
-    set/hdr_intrusive_skiplist_hp.cpp\r
-    set/hdr_intrusive_skiplist_dhp.cpp\r
-    set/hdr_intrusive_skiplist_rcu_gpb.cpp\r
-    set/hdr_intrusive_skiplist_rcu_gpi.cpp\r
-    set/hdr_intrusive_skiplist_rcu_gpt.cpp\r
-    set/hdr_intrusive_skiplist_rcu_shb.cpp\r
-    set/hdr_intrusive_skiplist_rcu_sht.cpp\r
-    set/hdr_intrusive_skiplist_nogc.cpp\r
-    set/hdr_intrusive_striped_hashset_avlset.cpp\r
-    set/hdr_intrusive_striped_hashset_list.cpp\r
-    set/hdr_intrusive_striped_hashset_set.cpp\r
-    set/hdr_intrusive_striped_hashset_sgset.cpp\r
-    set/hdr_intrusive_striped_hashset_slist.cpp\r
-    set/hdr_intrusive_striped_hashset_splayset.cpp\r
-    set/hdr_intrusive_striped_hashset_treapset.cpp\r
-    set/hdr_intrusive_striped_hashset_uset.cpp\r
-    set/hdr_intrusive_striped_set.cpp\r
-    set/hdr_michael_set_hp.cpp\r
-    set/hdr_michael_set_dhp.cpp\r
-    set/hdr_michael_set_rcu_gpi.cpp\r
-    set/hdr_michael_set_rcu_gpb.cpp\r
-    set/hdr_michael_set_rcu_gpt.cpp\r
-    set/hdr_michael_set_rcu_shb.cpp\r
-    set/hdr_michael_set_rcu_sht.cpp\r
-    set/hdr_michael_set_nogc.cpp\r
-    set/hdr_michael_set_lazy_hp.cpp\r
-    set/hdr_michael_set_lazy_dhp.cpp\r
-    set/hdr_michael_set_lazy_rcu_gpi.cpp\r
-    set/hdr_michael_set_lazy_rcu_gpb.cpp\r
-    set/hdr_michael_set_lazy_rcu_gpt.cpp\r
-    set/hdr_michael_set_lazy_rcu_shb.cpp\r
-    set/hdr_michael_set_lazy_rcu_sht.cpp\r
-    set/hdr_michael_set_lazy_nogc.cpp\r
-    set/hdr_feldman_hashset_hp.cpp\r
-    set/hdr_feldman_hashset_dhp.cpp\r
-    set/hdr_feldman_hashset_rcu_gpb.cpp\r
-    set/hdr_feldman_hashset_rcu_gpi.cpp\r
-    set/hdr_feldman_hashset_rcu_gpt.cpp\r
-    set/hdr_feldman_hashset_rcu_shb.cpp\r
-    set/hdr_feldman_hashset_rcu_sht.cpp\r
-    set/hdr_refinable_hashset_hashset_std.cpp\r
-    set/hdr_refinable_hashset_boost_flat_set.cpp\r
-    set/hdr_refinable_hashset_boost_list.cpp\r
-    set/hdr_refinable_hashset_boost_set.cpp\r
-    set/hdr_refinable_hashset_boost_stable_vector.cpp\r
-    set/hdr_refinable_hashset_boost_unordered_set.cpp\r
-    set/hdr_refinable_hashset_boost_vector.cpp\r
-    set/hdr_refinable_hashset_list.cpp\r
-    set/hdr_refinable_hashset_set.cpp\r
-    set/hdr_refinable_hashset_slist.cpp\r
-    set/hdr_refinable_hashset_vector.cpp\r
-    set/hdr_skiplist_set_hp.cpp\r
-    set/hdr_skiplist_set_dhp.cpp\r
-    set/hdr_skiplist_set_rcu_gpi.cpp\r
-    set/hdr_skiplist_set_rcu_gpb.cpp\r
-    set/hdr_skiplist_set_rcu_gpt.cpp\r
-    set/hdr_skiplist_set_rcu_shb.cpp\r
-    set/hdr_skiplist_set_rcu_sht.cpp\r
-    set/hdr_skiplist_set_nogc.cpp\r
-    set/hdr_splitlist_set_hp.cpp\r
-    set/hdr_splitlist_set_nogc.cpp\r
-    set/hdr_splitlist_set_dhp.cpp\r
-    set/hdr_splitlist_set_rcu_gpi.cpp\r
-    set/hdr_splitlist_set_rcu_gpb.cpp\r
-    set/hdr_splitlist_set_rcu_gpt.cpp\r
-    set/hdr_splitlist_set_rcu_shb.cpp\r
-    set/hdr_splitlist_set_rcu_sht.cpp\r
-    set/hdr_splitlist_set_lazy_hp.cpp\r
-    set/hdr_splitlist_set_lazy_nogc.cpp\r
-    set/hdr_splitlist_set_lazy_dhp.cpp\r
-    set/hdr_splitlist_set_lazy_rcu_gpi.cpp\r
-    set/hdr_splitlist_set_lazy_rcu_gpb.cpp\r
-    set/hdr_splitlist_set_lazy_rcu_gpt.cpp\r
-    set/hdr_splitlist_set_lazy_rcu_shb.cpp\r
-    set/hdr_splitlist_set_lazy_rcu_sht.cpp\r
-    set/hdr_striped_hashset_hashset_std.cpp\r
-    set/hdr_striped_hashset_boost_flat_set.cpp\r
-    set/hdr_striped_hashset_boost_list.cpp\r
-    set/hdr_striped_hashset_boost_set.cpp\r
-    set/hdr_striped_hashset_boost_stable_vector.cpp\r
-    set/hdr_striped_hashset_boost_unordered_set.cpp\r
-    set/hdr_striped_hashset_boost_vector.cpp\r
-    set/hdr_striped_hashset_list.cpp\r
-    set/hdr_striped_hashset_set.cpp\r
-    set/hdr_striped_hashset_slist.cpp\r
-    set/hdr_striped_hashset_vector.cpp)\r
-\r
-set(CDS_TESTHDR_STACK\r
-    stack/hdr_intrusive_fcstack.cpp\r
-    stack/hdr_treiber_stack_hp.cpp\r
-    stack/hdr_treiber_stack_dhp.cpp\r
-    stack/hdr_elimination_stack_hp.cpp\r
-    stack/hdr_elimination_stack_dhp.cpp\r
-    stack/hdr_fcstack.cpp)\r
-\r
-set(CDS_TESTHDR_TREE\r
-    tree/hdr_tree_reg.cpp
-    tree/hdr_intrusive_ellen_bintree_hp.cpp
-    tree/hdr_intrusive_ellen_bintree_dhp.cpp
-    tree/hdr_intrusive_ellen_bintree_rcu_gpb.cpp
-    tree/hdr_intrusive_ellen_bintree_rcu_gpi.cpp
-    tree/hdr_intrusive_ellen_bintree_rcu_gpt.cpp
-    tree/hdr_intrusive_ellen_bintree_rcu_shb.cpp
-    tree/hdr_intrusive_ellen_bintree_rcu_sht.cpp
-    tree/hdr_ellenbintree_map_hp.cpp
-    tree/hdr_ellenbintree_map_dhp.cpp
-    tree/hdr_ellenbintree_map_rcu_gpb.cpp
-    tree/hdr_ellenbintree_map_rcu_gpi.cpp
-    tree/hdr_ellenbintree_map_rcu_gpt.cpp
-    tree/hdr_ellenbintree_map_rcu_shb.cpp
-    tree/hdr_ellenbintree_map_rcu_sht.cpp
-    tree/hdr_ellenbintree_set_hp.cpp
-    tree/hdr_ellenbintree_set_dhp.cpp
-    tree/hdr_ellenbintree_set_rcu_gpb.cpp
-    tree/hdr_ellenbintree_set_rcu_gpi.cpp
-    tree/hdr_ellenbintree_set_rcu_gpt.cpp
-    tree/hdr_ellenbintree_set_rcu_shb.cpp
-    tree/hdr_ellenbintree_set_rcu_sht.cpp
-    tree/hdr_bronson_avltree_map_rcu_gpb.cpp
-    tree/hdr_bronson_avltree_map_rcu_gpb_pool_monitor.cpp
-    tree/hdr_bronson_avltree_map_rcu_gpi.cpp
-    tree/hdr_bronson_avltree_map_rcu_gpi_pool_monitor.cpp
-    tree/hdr_bronson_avltree_map_rcu_gpt.cpp
-    tree/hdr_bronson_avltree_map_rcu_gpt_pool_monitor.cpp
-    tree/hdr_bronson_avltree_map_rcu_shb.cpp
-    tree/hdr_bronson_avltree_map_rcu_shb_pool_monitor.cpp
-    tree/hdr_bronson_avltree_map_rcu_sht.cpp
-    tree/hdr_bronson_avltree_map_rcu_sht_pool_monitor.cpp
-   )
-
-set(CDS_TESTHDR_MISC\r
-    misc/cxx11_atomic_class.cpp\r
-    misc/cxx11_atomic_func.cpp\r
-    misc/find_option.cpp\r
-    misc/allocator_test.cpp\r
-    misc/michael_allocator.cpp\r
-    misc/hash_tuple.cpp\r
-    misc/bitop_st.cpp\r
-    misc/split_bitstring.cpp\r
-    misc/permutation_generator.cpp\r
-    misc/thread_init_fini.cpp)\r
-\r
-set(CDS_TESTHDR_OFFSETOF_MAP\r
-    map/hdr_cuckoo_map.cpp)\r
-\r
-set(CDS_TESTHDR_OFFSETOF_SET\r
-    set/hdr_cuckoo_set.cpp\r
-    set/hdr_intrusive_cuckoo_set.cpp\r
-    set/hdr_intrusive_cuckoo_refinable_set.cpp\r
-    set/hdr_intrusive_michael_set_hp.cpp\r
-    set/hdr_intrusive_michael_set_dhp.cpp\r
-    set/hdr_intrusive_michael_set_nogc.cpp\r
-    set/hdr_intrusive_michael_set_rcu_gpi.cpp\r
-    set/hdr_intrusive_michael_set_rcu_gpb.cpp\r
-    set/hdr_intrusive_michael_set_rcu_gpt.cpp\r
-    set/hdr_intrusive_michael_set_rcu_shb.cpp\r
-    set/hdr_intrusive_michael_set_rcu_sht.cpp\r
-    set/hdr_intrusive_michael_set_hp_lazy.cpp\r
-    set/hdr_intrusive_michael_set_dhp_lazy.cpp\r
-    set/hdr_intrusive_michael_set_nogc_lazy.cpp\r
-    set/hdr_intrusive_michael_set_rcu_gpi_lazy.cpp\r
-    set/hdr_intrusive_michael_set_rcu_gpb_lazy.cpp\r
-    set/hdr_intrusive_michael_set_rcu_gpt_lazy.cpp\r
-    set/hdr_intrusive_michael_set_rcu_shb_lazy.cpp\r
-    set/hdr_intrusive_michael_set_rcu_sht_lazy.cpp\r
-    set/hdr_intrusive_skiplist_hp_member.cpp\r
-    set/hdr_intrusive_skiplist_dhp_member.cpp\r
-    set/hdr_intrusive_skiplist_rcu_gpi_member.cpp\r
-    set/hdr_intrusive_skiplist_rcu_gpb_member.cpp\r
-    set/hdr_intrusive_skiplist_rcu_gpt_member.cpp\r
-    set/hdr_intrusive_skiplist_rcu_shb_member.cpp\r
-    set/hdr_intrusive_skiplist_rcu_sht_member.cpp\r
-    set/hdr_intrusive_skiplist_nogc_member.cpp\r
-    set/hdr_intrusive_splitlist_set_hp.cpp\r
-    set/hdr_intrusive_splitlist_set_nogc.cpp\r
-    set/hdr_intrusive_splitlist_set_dhp.cpp\r
-    set/hdr_intrusive_splitlist_set_rcu_gpb.cpp\r
-    set/hdr_intrusive_splitlist_set_rcu_gpi.cpp\r
-    set/hdr_intrusive_splitlist_set_rcu_gpt.cpp\r
-    set/hdr_intrusive_splitlist_set_rcu_shb.cpp\r
-    set/hdr_intrusive_splitlist_set_rcu_sht.cpp\r
-    set/hdr_intrusive_splitlist_set_hp_lazy.cpp\r
-    set/hdr_intrusive_splitlist_set_nogc_lazy.cpp\r
-    set/hdr_intrusive_splitlist_set_dhp_lazy.cpp\r
-    set/hdr_intrusive_splitlist_set_rcu_gpb_lazy.cpp\r
-    set/hdr_intrusive_splitlist_set_rcu_gpi_lazy.cpp\r
-    set/hdr_intrusive_splitlist_set_rcu_gpt_lazy.cpp\r
-    set/hdr_intrusive_splitlist_set_rcu_shb_lazy.cpp\r
-    set/hdr_intrusive_splitlist_set_rcu_sht_lazy.cpp)\r
-\r
-set(CDS_TESTHDR_OFFSETOF_LIST\r
-    list/hdr_intrusive_lazy_dhp.cpp\r
-    list/hdr_intrusive_lazy_hp.cpp\r
-    list/hdr_intrusive_lazy_nogc.cpp\r
-    list/hdr_intrusive_lazy_nogc_unord.cpp
-    list/hdr_intrusive_lazy_rcu_gpb.cpp\r
-    list/hdr_intrusive_lazy_rcu_gpi.cpp\r
-    list/hdr_intrusive_lazy_rcu_gpt.cpp\r
-    list/hdr_intrusive_lazy_rcu_shb.cpp\r
-    list/hdr_intrusive_lazy_rcu_sht.cpp\r
-    list/hdr_intrusive_michael_dhp.cpp\r
-    list/hdr_intrusive_michael_hp.cpp\r
-    list/hdr_intrusive_michael_nogc.cpp\r
-    list/hdr_intrusive_michael_list_rcu_gpb.cpp\r
-    list/hdr_intrusive_michael_list_rcu_gpi.cpp\r
-    list/hdr_intrusive_michael_list_rcu_gpt.cpp\r
-    list/hdr_intrusive_michael_list_rcu_shb.cpp\r
-    list/hdr_intrusive_michael_list_rcu_sht.cpp)\r
-\r
-set(CDS_TESTHDR_OFFSETOF_QUEUE\r
-    queue/hdr_intrusive_basketqueue_hp.cpp\r
-    queue/hdr_intrusive_basketqueue_dhp.cpp\r
-    queue/hdr_intrusive_moirqueue_hp.cpp\r
-    queue/hdr_intrusive_moirqueue_dhp.cpp\r
-    queue/hdr_intrusive_msqueue_hp.cpp\r
-    queue/hdr_intrusive_msqueue_dhp.cpp\r
-    queue/hdr_intrusive_optimisticqueue_hp.cpp\r
-    queue/hdr_intrusive_optimisticqueue_dhp.cpp)\r
-\r
-set(CDS_TESTHDR_OFFSETOF_STACK\r
-    stack/hdr_intrusive_treiber_stack_hp.cpp\r
-    stack/hdr_intrusive_treiber_stack_dhp.cpp\r
-    stack/hdr_intrusive_elimination_stack_hp.cpp\r
-    stack/hdr_intrusive_elimination_stack_dhp.cpp)\r
-\r
-set(CDS_TESTHDR_OFFSETOF_TREE\r
-    tree/hdr_intrusive_ellen_bintree_hp_member.cpp\r
-    tree/hdr_intrusive_ellen_bintree_dhp_member.cpp\r
-    tree/hdr_intrusive_ellen_bintree_rcu_gpb_member.cpp\r
-    tree/hdr_intrusive_ellen_bintree_rcu_gpi_member.cpp\r
-    tree/hdr_intrusive_ellen_bintree_rcu_gpt_member.cpp\r
-    tree/hdr_intrusive_ellen_bintree_rcu_shb_member.cpp\r
-    tree/hdr_intrusive_ellen_bintree_rcu_sht_member.cpp)\r
-\r
-set(CDS_TESTHDR_OFFSETOF_SOURCES\r
-       ${CDS_TESTHDR_OFFSETOF_QUEUE}\r
-       ${CDS_TESTHDR_OFFSETOF_STACK}\r
-       ${CDS_TESTHDR_OFFSETOF_MAP}\r
-       ${CDS_TESTHDR_OFFSETOF_SET}\r
-       ${CDS_TESTHDR_OFFSETOF_LIST}\r
-       ${CDS_TESTHDR_OFFSETOF_TREE})\r
-\r
-add_library(test-hdr-offsetof OBJECT ${CDS_TESTHDR_OFFSETOF_SOURCES})\r
-\r
-if(CMAKE_COMPILER_IS_GNUCC)\r
-  set_property(TARGET test-hdr-offsetof APPEND_STRING PROPERTY COMPILE_FLAGS -Wno-invalid-offsetof)\r
-endif(CMAKE_COMPILER_IS_GNUCC)\r
-\r
-set(CDS_TESTHDR_SOURCES\r
-    ${CDS_TESTHDR_QUEUE}\r
-    ${CDS_TESTHDR_PQUEUE}\r
-    ${CDS_TESTHDR_STACK}\r
-    ${CDS_TESTHDR_MAP}\r
-    ${CDS_TESTHDR_DEQUE}\r
-    ${CDS_TESTHDR_LIST}\r
-    ${CDS_TESTHDR_SET}\r
-    ${CDS_TESTHDR_TREE}\r
-    ${CDS_TESTHDR_MISC})\r
-\r
-add_executable(${PACKAGE_NAME} ${CDS_TESTHDR_SOURCES} $<TARGET_OBJECTS:test-hdr-offsetof> $<TARGET_OBJECTS:${TEST_COMMON}>)\r
-target_link_libraries(${PACKAGE_NAME} ${CDS_SHARED_LIBRARY} ${Boost_THREAD_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})\r
-add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/tests/test-hdr/deque/hdr_fcdeque.cpp b/tests/test-hdr/deque/hdr_fcdeque.cpp
deleted file mode 100644 (file)
index b174303..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/cppunit_proxy.h"
-#include "cppunit/test_beans.h"
-#include <cds/container/fcdeque.h>
-#include <boost/container/deque.hpp>
-
-namespace deque {
-
-    class HdrFCDeque: public CppUnitMini::TestCase
-    {
-        template <class Deque>
-        void test_with( Deque& dq )
-        {
-            size_t const c_nSize = 100;
-
-            // push_front/pop_front
-            for ( int i = 0; i < static_cast<int>( c_nSize ); ++i )
-                CPPUNIT_CHECK( dq.push_front( i ) );
-            CPPUNIT_CHECK( dq.size() == c_nSize );
-
-            size_t nCount = 0;
-            int val;
-            while ( !dq.empty() ) {
-                CPPUNIT_CHECK( dq.pop_front( val ) );
-                ++nCount;
-                CPPUNIT_CHECK( static_cast<int>(c_nSize - nCount) == val );
-            }
-            CPPUNIT_CHECK( nCount == c_nSize );
-
-            // push_back/pop_back
-            for ( int i = 0; i < static_cast<int>( c_nSize ); ++i )
-                CPPUNIT_CHECK( dq.push_back( i ) );
-            CPPUNIT_CHECK( dq.size() == c_nSize );
-
-            nCount = 0;
-            while ( !dq.empty() ) {
-                CPPUNIT_CHECK( dq.pop_back( val ) );
-                ++nCount;
-                CPPUNIT_CHECK( static_cast<int>(c_nSize - nCount) == val );
-            }
-            CPPUNIT_CHECK( nCount == c_nSize );
-
-            // push_back/pop_front
-            for ( int i = 0; i < static_cast<int>( c_nSize ); ++i )
-                CPPUNIT_CHECK( dq.push_back( i ) );
-            CPPUNIT_CHECK( dq.size() == c_nSize );
-
-            nCount = 0;
-            while ( !dq.empty() ) {
-                CPPUNIT_CHECK( dq.pop_front( val ) );
-                CPPUNIT_CHECK( static_cast<int>( nCount ) == val );
-                ++nCount;
-            }
-            CPPUNIT_CHECK( nCount == c_nSize );
-
-            // push_front/pop_back
-            for ( int i = 0; i < static_cast<int>( c_nSize ); ++i )
-                CPPUNIT_CHECK( dq.push_front( i ) );
-            CPPUNIT_CHECK( dq.size() == c_nSize );
-
-            nCount = 0;
-            while ( !dq.empty() ) {
-                CPPUNIT_CHECK( dq.pop_back( val ) );
-                CPPUNIT_CHECK( static_cast<int>( nCount ) == val );
-                ++nCount;
-            }
-            CPPUNIT_CHECK( nCount == c_nSize );
-
-            // clear
-            for ( int i = 0; i < static_cast<int>( c_nSize ); ++i )
-                CPPUNIT_CHECK( dq.push_front( i ) );
-            CPPUNIT_CHECK( dq.size() == c_nSize );
-
-            CPPUNIT_CHECK( !dq.empty() );
-            dq.clear();
-            CPPUNIT_CHECK( dq.empty() );
-        }
-
-        template <class Deque>
-        void test()
-        {
-            Deque dq;
-            test_with( dq );
-        }
-
-        void fcDeque()
-        {
-            typedef cds::container::FCDeque<int> deque_type;
-            test<deque_type>();
-        }
-
-        void fcDeque_elimination()
-        {
-            typedef cds::container::FCDeque<int, std::deque<int>,
-                cds::container::fcdeque::make_traits<
-                    cds::opt::enable_elimination< true >
-                >::type
-            > deque_type;
-            test<deque_type>();
-        }
-
-        void fcDeque_stat()
-        {
-            typedef cds::container::FCDeque<int, std::deque<int>,
-                cds::container::fcdeque::make_traits<
-                    cds::opt::stat< cds::container::fcdeque::stat<> >
-                >::type
-            > deque_type;
-            test<deque_type>();
-        }
-
-        void fcDeque_mutex()
-        {
-            struct deque_traits : public
-                cds::container::fcdeque::make_traits<
-                    cds::opt::enable_elimination< true >
-                >::type
-            {
-                typedef std::mutex lock_type;
-            };
-            typedef cds::container::FCDeque<int, std::deque<int>, deque_traits > deque_type;
-            test<deque_type>();
-        }
-
-        void fcDeque_boost()
-        {
-            typedef cds::container::FCDeque<int, boost::container::deque<int> > deque_type;
-            test<deque_type>();
-        }
-
-        void fcDeque_boost_elimination()
-        {
-            typedef cds::container::FCDeque<int, boost::container::deque<int>,
-                cds::container::fcdeque::make_traits<
-                    cds::opt::enable_elimination< true >
-                >::type
-            > deque_type;
-            test<deque_type>();
-        }
-
-        void fcDeque_boost_stat()
-        {
-            typedef cds::container::FCDeque<int, boost::container::deque<int>,
-                cds::container::fcdeque::make_traits<
-                    cds::opt::stat< cds::container::fcdeque::stat<> >
-                >::type
-            > deque_type;
-            test<deque_type>();
-        }
-
-        void fcDeque_boost_mutex()
-        {
-            typedef cds::container::FCDeque<int, boost::container::deque<int>,
-                cds::container::fcdeque::make_traits<
-                    cds::opt::enable_elimination< true >
-                    ,cds::opt::lock_type< std::mutex >
-                >::type
-            > deque_type;
-            test<deque_type>();
-        }
-
-        CPPUNIT_TEST_SUITE(HdrFCDeque)
-            CPPUNIT_TEST(fcDeque)
-            CPPUNIT_TEST(fcDeque_elimination)
-            CPPUNIT_TEST(fcDeque_stat)
-            CPPUNIT_TEST(fcDeque_mutex)
-            CPPUNIT_TEST(fcDeque_boost)
-            CPPUNIT_TEST(fcDeque_boost_elimination)
-            CPPUNIT_TEST(fcDeque_boost_stat)
-            CPPUNIT_TEST(fcDeque_boost_mutex)
-        CPPUNIT_TEST_SUITE_END()
-    };
-
-} // namespace deque
-
-CPPUNIT_TEST_SUITE_REGISTRATION(deque::HdrFCDeque);
diff --git a/tests/test-hdr/list/hdr_intrusive_lazy.h b/tests/test-hdr/list/hdr_intrusive_lazy.h
deleted file mode 100644 (file)
index 79de4ba..0000000
+++ /dev/null
@@ -1,1096 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_INTRUSIVE_LAZY_H
-#define CDSTEST_HDR_INTRUSIVE_LAZY_H
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/intrusive/details/lazy_list_base.h>
-
-namespace ordlist {
-    namespace ci = cds::intrusive;
-    namespace co = cds::opt;
-
-    class IntrusiveLazyListHeaderTest: public CppUnitMini::TestCase
-    {
-    public:
-
-        struct stat {
-            int nDisposeCount;
-            int nUpdateExistsCall;
-            int nUpdateNewCall;
-            int nFindCall;
-            int nEraseCall;
-
-            stat()
-                : nDisposeCount(0)
-                , nUpdateExistsCall(0)
-                , nUpdateNewCall(0)
-                , nFindCall(0)
-                , nEraseCall(0)
-            {}
-
-            stat( const stat& s )
-            {
-                *this = s;
-            }
-
-            stat& operator =(const stat& s)
-            {
-                memcpy( this, &s, sizeof(s));
-                return *this;
-            }
-        };
-
-        template <typename GC>
-        struct base_int_item: public ci::lazy_list::node< GC >
-        {
-            int nKey;
-            int nVal;
-
-            mutable stat    s;
-
-            base_int_item()
-            {}
-
-            base_int_item(int key, int val)
-                : nKey( key )
-                , nVal(val)
-                , s()
-            {}
-
-            base_int_item(const base_int_item& v )
-                : nKey( v.nKey )
-                , nVal( v.nVal )
-                , s()
-            {}
-
-            const int& key() const
-            {
-                return nKey;
-            }
-        };
-
-        template <typename GC>
-        struct member_int_item
-        {
-            int nKey;
-            int nVal;
-
-            ci::lazy_list::node< GC > hMember;
-
-            mutable stat s;
-
-            member_int_item()
-            {}
-
-            member_int_item(int key, int val)
-                : nKey( key )
-                , nVal(val)
-                , s()
-            {}
-
-            member_int_item(const member_int_item& v )
-                : nKey( v.nKey )
-                , nVal( v.nVal )
-                , s()
-            {}
-
-            const int& key() const
-            {
-                return nKey;
-            }
-        };
-
-        template <typename T>
-        struct less
-        {
-            bool operator ()(const T& v1, const T& v2 ) const
-            {
-                return v1.key() < v2.key();
-            }
-
-            template <typename Q>
-            bool operator ()(const T& v1, const Q& v2 ) const
-            {
-                return v1.key() < v2;
-            }
-
-            template <typename Q>
-            bool operator ()(const Q& v1, const T& v2 ) const
-            {
-                return v1 < v2.key();
-            }
-        };
-
-        template <typename T>
-        struct cmp {
-            int operator ()(const T& v1, const T& v2 ) const
-            {
-                if ( v1.key() < v2.key() )
-                    return -1;
-                return v1.key() > v2.key() ? 1 : 0;
-            }
-
-            template <typename Q>
-            int operator ()(const T& v1, const Q& v2 ) const
-            {
-                if ( v1.key() < v2 )
-                    return -1;
-                return v1.key() > v2 ? 1 : 0;
-            }
-
-            template <typename Q>
-            int operator ()(const Q& v1, const T& v2 ) const
-            {
-                if ( v1 < v2.key() )
-                    return -1;
-                return v1 > v2.key() ? 1 : 0;
-            }
-        };
-
-        template <typename T>
-        struct equal_to {
-            bool operator ()(const T& v1, const T& v2 ) const
-            {
-                return v1.key() == v2.key();
-            }
-
-            template <typename Q>
-            bool operator ()(const T& v1, const Q& v2 ) const
-            {
-                return v1.key() == v2;
-            }
-
-            template <typename Q>
-            bool operator ()(const Q& v1, const T& v2 ) const
-            {
-                return v1 == v2.key();
-            }
-        };
-
-        struct other_item {
-            int nKey;
-
-            other_item( int n )
-                : nKey(n)
-            {}
-        };
-
-        struct other_less {
-            template <typename T, typename Q>
-            bool operator()( T const& i1, Q const& i2) const
-            {
-                return i1.nKey < i2.nKey;
-            }
-        };
-
-        struct other_equal {
-            template <typename T, typename Q>
-            bool operator()( T const& i1, Q const& i2) const
-            {
-                return i1.nKey == i2.nKey;
-            }
-        };
-
-        struct faked_disposer
-        {
-            template <typename T>
-            void operator ()( T * p )
-            {
-                ++p->s.nDisposeCount;
-            }
-        };
-
-        struct update_functor
-        {
-            template <typename T>
-            void operator ()(bool bNew, T& item, T& /*val*/ )
-            {
-                if ( bNew )
-                    ++item.s.nUpdateNewCall;
-                else
-                    ++item.s.nUpdateExistsCall;
-            }
-        };
-
-        struct find_functor
-        {
-            template <typename T, typename Q>
-            void operator ()( T& item, Q& /*val*/ )
-            {
-                ++item.s.nFindCall;
-            }
-        };
-
-        struct erase_functor
-        {
-            template <typename T>
-            void operator()( T const& item )
-            {
-                item.s.nEraseCall++;
-            }
-        };
-
-        template <class OrdList>
-        void test_int_common()
-        {
-            typedef typename OrdList::value_type    value_type;
-
-            value_type v1( 10, 50 );
-            value_type v2( 5, 25  );
-            value_type v3( 20, 100 );
-            {
-                OrdList l;
-                CPPUNIT_ASSERT( l.empty() );
-
-                CPPUNIT_ASSERT( l.insert( v1 ))     ;   // true
-                CPPUNIT_ASSERT( l.contains( v1.key() ));
-
-                CPPUNIT_ASSERT( v1.s.nFindCall == 0 );
-                CPPUNIT_ASSERT( l.find( v1.key(), find_functor() ));
-                CPPUNIT_ASSERT( v1.s.nFindCall == 1 );
-
-                CPPUNIT_ASSERT( !l.contains( v2.key(), less<value_type>() ));
-                CPPUNIT_ASSERT( !l.find( v3.key(), find_functor() ));
-                CPPUNIT_ASSERT( !l.empty() );
-
-                //CPPUNIT_ASSERT( !l.insert( v1 ))    ;   // assertion "is_empty" is raised
-
-                {
-                    value_type v( v1 );
-                    CPPUNIT_ASSERT( !l.insert( v )) ;   // false
-                }
-
-                std::pair<bool, bool> ret = l.update( v2, update_functor() );
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( ret.second );
-                CPPUNIT_ASSERT( v2.s.nUpdateNewCall == 1 );
-                CPPUNIT_ASSERT( v2.s.nUpdateExistsCall == 0 );
-
-                //CPPUNIT_ASSERT( !l.insert( v2 ))    ;   // assertion "is_empty"
-
-                CPPUNIT_ASSERT( l.contains( v1.key() )) ;   // true
-
-                CPPUNIT_ASSERT( v1.s.nFindCall == 1 );
-                CPPUNIT_ASSERT( l.find( v1.key(), find_functor() ));
-                CPPUNIT_ASSERT( v1.s.nFindCall == 2 );
-
-                CPPUNIT_ASSERT( l.contains( v2.key() ));
-
-                CPPUNIT_ASSERT( v2.s.nFindCall == 0 );
-                CPPUNIT_ASSERT( l.find_with( v2.key(), less<value_type>(), find_functor() ));
-                CPPUNIT_ASSERT( v2.s.nFindCall == 1 );
-
-                CPPUNIT_ASSERT( !l.contains( v3.key() ));
-
-                {
-                    CPPUNIT_ASSERT( v2.s.nUpdateExistsCall == 0 );
-                    CPPUNIT_ASSERT( v2.s.nUpdateNewCall == 1 );
-
-                    value_type v( v2 );
-                    ret = l.update( v, update_functor() );
-
-                    CPPUNIT_ASSERT( ret.first );
-                    CPPUNIT_ASSERT( !ret.second );
-                    CPPUNIT_ASSERT( v2.s.nUpdateExistsCall == 1 );
-                    CPPUNIT_ASSERT( v2.s.nUpdateNewCall == 1 );
-                    CPPUNIT_ASSERT( v.s.nUpdateExistsCall == 0 );
-                    CPPUNIT_ASSERT( v.s.nUpdateNewCall == 0 );
-                }
-
-                CPPUNIT_ASSERT( !l.empty() );
-
-                CPPUNIT_ASSERT( l.insert( v3 ))     ;   // true
-                CPPUNIT_ASSERT( l.contains( v3.key() ));
-
-                CPPUNIT_ASSERT( v3.s.nFindCall == 0 );
-                CPPUNIT_ASSERT( l.find( v3.key(), find_functor() ));
-                CPPUNIT_ASSERT( v3.s.nFindCall == 1 );
-
-                CPPUNIT_ASSERT( l.unlink( v2 ) );
-                CPPUNIT_ASSERT( l.contains( v1.key() )) ;   // true
-                CPPUNIT_ASSERT( !l.contains( v2.key() )) ;   // true
-                CPPUNIT_ASSERT( l.contains( v3.key() )) ;   // true
-                CPPUNIT_ASSERT( !l.empty() );
-                CPPUNIT_ASSERT( !l.unlink( v2 ) );
-
-                {
-                    // v1 key is in the list but v NODE is not in the list
-                    value_type v( v1 );
-                    CPPUNIT_ASSERT( !l.unlink( v ) );
-                }
-
-                CPPUNIT_ASSERT( l.unlink( v1 ) );
-                CPPUNIT_ASSERT( !l.unlink( v1 ) );
-                CPPUNIT_ASSERT( !l.contains( v1.key() ));
-                CPPUNIT_ASSERT( !l.contains( v2.key() ));
-                CPPUNIT_ASSERT( l.contains( v3.key() ));
-                CPPUNIT_ASSERT( !l.empty() );
-                CPPUNIT_ASSERT( !l.unlink( v1 ) );
-                CPPUNIT_ASSERT( !l.unlink( v2 ) );
-
-                CPPUNIT_ASSERT( l.unlink( v3 ) );
-                CPPUNIT_ASSERT( !l.contains( v1.key() ));
-                CPPUNIT_ASSERT( !l.contains( v2.key(), less<value_type>() ));
-                CPPUNIT_ASSERT( !l.contains( v3.key() ));
-                CPPUNIT_ASSERT( l.empty() );
-                CPPUNIT_ASSERT( !l.unlink( v1 ) );
-                CPPUNIT_ASSERT( !l.unlink( v2 ) );
-                CPPUNIT_ASSERT( !l.unlink( v3 ) );
-
-                // Apply retired pointer to clean links
-                OrdList::gc::force_dispose();
-
-                stat s( v3.s );
-                ret = l.update( v3, update_functor() );
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( ret.second );
-                CPPUNIT_ASSERT( v3.s.nUpdateNewCall == s.nUpdateNewCall + 1);
-                CPPUNIT_ASSERT( v3.s.nUpdateExistsCall == s.nUpdateExistsCall );
-                CPPUNIT_ASSERT( !l.empty() );
-
-                s = v2.s;
-                ret = l.update( v2, update_functor() );
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( ret.second );
-                CPPUNIT_ASSERT( v2.s.nUpdateNewCall == s.nUpdateNewCall + 1);
-                CPPUNIT_ASSERT( v2.s.nUpdateExistsCall == s.nUpdateExistsCall );
-                CPPUNIT_ASSERT( !l.empty() );
-
-                s = v1.s;
-                ret = l.update( v1, update_functor() );
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( ret.second );
-                CPPUNIT_ASSERT( v1.s.nUpdateNewCall == s.nUpdateNewCall + 1);
-                CPPUNIT_ASSERT( v1.s.nUpdateExistsCall == s.nUpdateExistsCall );
-                CPPUNIT_ASSERT( !l.empty() );
-
-                // Erase test
-                CPPUNIT_ASSERT( l.erase( v1.key()) );
-                //CPPUNIT_ASSERT( v1.s.nDisposeCount == 0 );
-                CPPUNIT_ASSERT( !l.empty() );
-
-                CPPUNIT_ASSERT( v2.s.nEraseCall == 0 );
-                CPPUNIT_ASSERT( l.erase_with( v2.key(), less<value_type>(), erase_functor()) );
-                CPPUNIT_ASSERT( v2.s.nEraseCall == 1 );
-                CPPUNIT_ASSERT( !l.erase_with( v2.key(), less<value_type>()));
-                CPPUNIT_ASSERT( v2.s.nEraseCall == 1 );
-                //CPPUNIT_ASSERT( v2.s.nDisposeCount == 0 );
-                CPPUNIT_ASSERT( !l.empty() );
-
-                CPPUNIT_ASSERT( !l.erase( v2 ));
-                CPPUNIT_ASSERT( !l.erase( v1 ));
-                //CPPUNIT_ASSERT( v2.s.nDisposeCount == 0 );
-                CPPUNIT_ASSERT( !l.empty() );
-
-                CPPUNIT_ASSERT( v3.s.nEraseCall == 0 );
-                CPPUNIT_ASSERT( l.erase( v3, erase_functor() ));
-                CPPUNIT_ASSERT( v3.s.nEraseCall == 1 );
-                //CPPUNIT_ASSERT( v3.s.nDisposeCount == 0 );
-                CPPUNIT_ASSERT( l.empty() );
-
-                // Apply retired pointer to clean links
-                OrdList::gc::force_dispose();
-
-                // Unlink test
-                CPPUNIT_ASSERT( l.insert( v1 ));
-                CPPUNIT_ASSERT( l.insert( v3 ));
-                CPPUNIT_ASSERT( !l.empty() );
-                CPPUNIT_ASSERT( !l.unlink( v2 ));
-                CPPUNIT_ASSERT( l.unlink( v1 ));
-                CPPUNIT_ASSERT( !l.unlink( v1 ));
-                CPPUNIT_ASSERT( l.unlink( v3 ));
-                CPPUNIT_ASSERT( !l.unlink( v3 ));
-                CPPUNIT_ASSERT( l.empty() );
-
-                // Apply retired pointer
-                OrdList::gc::force_dispose();
-                CPPUNIT_ASSERT( v1.s.nDisposeCount == 3 );
-                CPPUNIT_ASSERT( v2.s.nDisposeCount == 2 );
-                CPPUNIT_ASSERT( v3.s.nDisposeCount == 3 );
-
-                // Destructor test (call disposer)
-                CPPUNIT_ASSERT( l.insert( v1 ));
-                CPPUNIT_ASSERT( l.insert( v3 ));
-                CPPUNIT_ASSERT( l.insert( v2 ));
-
-                // Iterator test
-                {
-                    typename OrdList::iterator it = l.begin();
-                    typename OrdList::const_iterator cit = l.cbegin();
-                    CPPUNIT_ASSERT( it != l.end() );
-                    CPPUNIT_ASSERT( it != l.cend() );
-                    CPPUNIT_ASSERT( cit != l.end() );
-                    CPPUNIT_ASSERT( cit != l.cend() );
-                    CPPUNIT_ASSERT( cit == it );
-
-                    CPPUNIT_ASSERT( it->nKey == v2.nKey );
-                    CPPUNIT_ASSERT( it->nVal == v2.nVal );
-                    CPPUNIT_ASSERT( ++it != l.end() );
-                    CPPUNIT_ASSERT( it->nKey == v1.nKey );
-                    CPPUNIT_ASSERT( it->nVal == v1.nVal );
-                    CPPUNIT_ASSERT( ++it != l.end() );
-                    CPPUNIT_ASSERT( it->nKey == v3.nKey );
-                    CPPUNIT_ASSERT( it->nVal == v3.nVal );
-                    CPPUNIT_ASSERT( ++it == l.end() );
-                }
-
-                {
-                    OrdList const & lref = l;
-                    typename OrdList::const_iterator it = lref.begin();
-                    CPPUNIT_ASSERT( it != l.end() );
-                    CPPUNIT_ASSERT( it->nKey == v2.nKey );
-                    CPPUNIT_ASSERT( it->nVal == v2.nVal );
-                    CPPUNIT_ASSERT( ++it != lref.end() );
-                    CPPUNIT_ASSERT( it->nKey == v1.nKey );
-                    CPPUNIT_ASSERT( it->nVal == v1.nVal );
-                    CPPUNIT_ASSERT( ++it != l.end() );
-                    CPPUNIT_ASSERT( it->nKey == v3.nKey );
-                    CPPUNIT_ASSERT( it->nVal == v3.nVal );
-                    CPPUNIT_ASSERT( ++it == l.end() );
-                }
-            }
-
-            // Apply retired pointer
-            OrdList::gc::force_dispose();
-
-            CPPUNIT_ASSERT( v1.s.nDisposeCount == 4 );
-            CPPUNIT_ASSERT( v2.s.nDisposeCount == 3 );
-            CPPUNIT_ASSERT( v3.s.nDisposeCount == 4 );
-        }
-
-        template <class OrdList>
-        void test_int()
-        {
-            test_int_common<OrdList>();
-
-            OrdList l;
-            typename OrdList::guarded_ptr gp;
-
-            static int const nLimit = 20;
-            typename OrdList::value_type arrItem[nLimit];
-
-            {
-                int a[nLimit];
-                for (int i = 0; i < nLimit; ++i)
-                    a[i]=i;
-                shuffle( a, a + nLimit );
-
-                for (int i = 0; i < nLimit; ++i) {
-                    arrItem[i].nKey = a[i];
-                    arrItem[i].nVal = a[i] * 2;
-                }
-
-                // extract/get
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( l.insert( arrItem[i] ) );
-
-                for ( int i=0; i < nLimit; ++i ) {
-                    gp = l.get( arrItem[i].nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_ASSERT( gp->nKey == arrItem[i].nKey );
-                    CPPUNIT_ASSERT( gp->nVal == arrItem[i].nVal );
-
-                    gp = l.extract( arrItem[i].nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_ASSERT( gp->nKey == arrItem[i].nKey );
-                    CPPUNIT_ASSERT( gp->nVal == arrItem[i].nVal );
-
-                    gp = l.get( arrItem[i].nKey );
-                    CPPUNIT_ASSERT( !gp );
-                    CPPUNIT_ASSERT( gp.empty());
-                    CPPUNIT_ASSERT( !l.extract( arrItem[i].nKey ));
-                    CPPUNIT_ASSERT( gp.empty());
-                }
-                CPPUNIT_ASSERT( l.empty() );
-                CPPUNIT_ASSERT( !l.get( nLimit/2 ));
-                CPPUNIT_ASSERT( !l.extract( nLimit/2 ));
-
-                // Apply retired pointer
-                OrdList::gc::force_dispose();
-
-                // extract_with/get_with
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( l.insert( arrItem[i] ) );
-
-                for ( int i=0; i < nLimit; ++i ) {
-                    other_item itm( arrItem[i].nKey );
-                    gp = l.get_with( itm, other_less() );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_ASSERT( gp->nKey == arrItem[i].nKey );
-                    CPPUNIT_ASSERT( gp->nVal == arrItem[i].nVal );
-
-                    gp = l.extract_with( itm, other_less() );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_ASSERT( gp->nKey == arrItem[i].nKey );
-                    CPPUNIT_ASSERT( gp->nVal == arrItem[i].nVal );
-
-                    gp = l.get_with( itm, other_less() );
-                    CPPUNIT_ASSERT( !gp );
-                    CPPUNIT_ASSERT( gp.empty());
-                    CPPUNIT_ASSERT( !l.extract_with( itm, other_less() ));
-                    CPPUNIT_ASSERT( gp.empty());
-                }
-                CPPUNIT_ASSERT( l.empty() );
-                CPPUNIT_ASSERT( !l.get_with( other_item(nLimit/2), other_less() ));
-                CPPUNIT_ASSERT( gp.empty());
-                CPPUNIT_ASSERT( !l.extract_with( other_item(nLimit/2), other_less() ));
-                CPPUNIT_ASSERT( gp.empty());
-
-                // Apply retired pointer
-                OrdList::gc::force_dispose();
-
-                for ( int i=0; i < nLimit; i++ ) {
-                    CPPUNIT_ASSERT( arrItem[i].s.nDisposeCount == 2 );
-                }
-            }
-        }
-
-        template <class OrdList>
-        void test_rcu_int()
-        {
-            test_int_common<OrdList>();
-
-            OrdList l;
-            static int const nLimit = 20;
-            typename OrdList::value_type arrItem[nLimit];
-
-            typedef typename OrdList::rcu_lock rcu_lock;
-            typedef typename OrdList::value_type value_type;
-            typedef typename OrdList::gc rcu_type;
-
-            {
-                int a[nLimit];
-                for (int i = 0; i < nLimit; ++i)
-                    a[i]=i;
-                shuffle( a, a + nLimit );
-
-                for (int i = 0; i < nLimit; ++i) {
-                    arrItem[i].nKey = a[i];
-                    arrItem[i].nVal = a[i] * 2;
-                }
-
-                typename OrdList::exempt_ptr ep;
-
-                // extract/get
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( l.insert( arrItem[i] ) );
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    {
-                        rcu_lock lock;
-                        value_type * pGet = l.get( a[i] );
-                        CPPUNIT_ASSERT( pGet != nullptr );
-                        CPPUNIT_CHECK( pGet->nKey == a[i] );
-                        CPPUNIT_CHECK( pGet->nVal == a[i] * 2 );
-
-                        ep = l.extract( a[i] );
-                        CPPUNIT_ASSERT( ep );
-                        CPPUNIT_ASSERT( !ep.empty() );
-                        CPPUNIT_CHECK( ep->nKey == a[i] );
-                        CPPUNIT_CHECK( (*ep).nVal == a[i] * 2 );
-                    }
-                    ep.release();
-                    {
-                        rcu_lock lock;
-                        CPPUNIT_CHECK( l.get( a[i] ) == nullptr );
-                        CPPUNIT_CHECK( !l.extract( a[i] ) );
-                        CPPUNIT_CHECK( ep.empty() );
-                    }
-                }
-                CPPUNIT_ASSERT( l.empty() );
-
-                {
-                    rcu_lock lock;
-                    CPPUNIT_CHECK( l.get( a[0] ) == nullptr );
-                    ep = l.extract( a[0] );
-                    CPPUNIT_CHECK( !ep );
-                    CPPUNIT_CHECK( ep.empty() );
-                }
-                // Apply retired pointer
-                OrdList::gc::force_dispose();
-
-                // extract_with/get_with
-                for ( int i = 0; i < nLimit; ++i ) {
-                    CPPUNIT_ASSERT( l.insert( arrItem[i] ) );
-                }
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    other_item itm( a[i] );
-                    {
-                        rcu_lock lock;
-                        value_type * pGet = l.get_with( itm, other_less() );
-                        CPPUNIT_ASSERT( pGet != nullptr );
-                        CPPUNIT_CHECK( pGet->nKey == a[i] );
-                        CPPUNIT_CHECK( pGet->nVal == a[i] * 2 );
-
-                        ep = l.extract_with( itm, other_less() );
-                        CPPUNIT_ASSERT( ep );
-                        CPPUNIT_ASSERT( !ep.empty() );
-                        CPPUNIT_CHECK( ep->nKey == a[i] );
-                        CPPUNIT_CHECK( ep->nVal == a[i] * 2 );
-                    }
-                    ep.release();
-                    {
-                        rcu_lock lock;
-                        CPPUNIT_CHECK( l.get_with( itm, other_less() ) == nullptr );
-                        ep = l.extract_with( itm, other_less() );
-                        CPPUNIT_CHECK( !ep );
-                        CPPUNIT_CHECK( ep.empty() );
-                    }
-                }
-                CPPUNIT_ASSERT( l.empty() );
-
-                {
-                    rcu_lock lock;
-                    CPPUNIT_CHECK( l.get_with( other_item( 0 ), other_less() ) == nullptr );
-                    CPPUNIT_CHECK( !l.extract_with( other_item(0), other_less() ));
-                    CPPUNIT_CHECK( ep.empty() );
-                }
-                // Apply retired pointer
-                OrdList::gc::force_dispose();
-            }
-        }
-
-        template <class OrdList>
-        void test_nogc_int()
-        {
-            typedef typename OrdList::value_type    value_type;
-
-            {
-                value_type v1( 10, 50 );
-                value_type v2( 5, 25  );
-                value_type v3( 20, 100 );
-                {
-                    OrdList l;
-                    CPPUNIT_ASSERT( l.empty() );
-
-                    CPPUNIT_ASSERT( l.insert( v1 ))     ;   // true
-                    CPPUNIT_ASSERT( l.contains( v1.key() ) == &v1 );
-
-                    CPPUNIT_ASSERT( v1.s.nFindCall == 0 );
-                    CPPUNIT_ASSERT( l.find( v1.key(), find_functor() ));
-                    CPPUNIT_ASSERT( v1.s.nFindCall == 1 );
-
-                    CPPUNIT_ASSERT( l.contains( v2.key(), less<value_type>() ) == nullptr );
-                    CPPUNIT_ASSERT( l.contains( v3.key() ) == nullptr );
-                    CPPUNIT_ASSERT( !l.empty() );
-
-                    //CPPUNIT_ASSERT( !l.insert( v1 ))    ;   // assertion "is_empty" is raised
-
-                    {
-                        value_type v( v1 );
-                        CPPUNIT_ASSERT( !l.insert( v )) ;   // false
-                    }
-
-                    std::pair<bool, bool> ret = l.update( v2, update_functor() );
-                    CPPUNIT_ASSERT( ret.first );
-                    CPPUNIT_ASSERT( ret.second );
-                    CPPUNIT_ASSERT( v2.s.nUpdateNewCall == 1 );
-                    CPPUNIT_ASSERT( v2.s.nUpdateExistsCall == 0 );
-
-                    //CPPUNIT_ASSERT( !l.insert( v2 ))    ;   // assertion "is_empty"
-
-                    CPPUNIT_ASSERT( l.contains( v1.key() ) == &v1 ) ;   // true
-
-                    CPPUNIT_ASSERT( v1.s.nFindCall == 1 );
-                    CPPUNIT_ASSERT( l.find( v1.key(), find_functor() ));
-                    CPPUNIT_ASSERT( v1.s.nFindCall == 2 );
-
-                    CPPUNIT_ASSERT( l.contains( v2.key(), less<value_type>() ) == &v2 );
-
-                    CPPUNIT_ASSERT( v2.s.nFindCall == 0 );
-                    CPPUNIT_ASSERT( l.find_with( v2.key(), less<value_type>(), find_functor() ));
-                    CPPUNIT_ASSERT( v2.s.nFindCall == 1 );
-
-                    CPPUNIT_ASSERT( !l.contains( v3.key() ));
-
-                    {
-                        value_type v( v2 );
-                        ret = l.update( v, update_functor() );
-
-                        CPPUNIT_ASSERT( ret.first );
-                        CPPUNIT_ASSERT( !ret.second );
-                        CPPUNIT_ASSERT( v2.s.nUpdateExistsCall == 1 );
-                        CPPUNIT_ASSERT( v.s.nUpdateExistsCall == 0 && v.s.nUpdateNewCall == 0 );
-                    }
-
-                    CPPUNIT_ASSERT( !l.empty() );
-
-                    CPPUNIT_ASSERT( l.insert( v3 ))     ;   // true
-                    CPPUNIT_ASSERT( l.contains( v3.key() ) == &v3 );
-
-                    CPPUNIT_ASSERT( v3.s.nFindCall == 0 );
-                    CPPUNIT_ASSERT( l.find( v3.key(), find_functor() ));
-                    CPPUNIT_ASSERT( v3.s.nFindCall == 1 );
-
-                    {
-                        typename OrdList::iterator it = l.begin();
-                        typename OrdList::const_iterator cit = l.cbegin();
-                        CPPUNIT_ASSERT( it != l.end() );
-                        CPPUNIT_ASSERT( it != l.cend() );
-                        CPPUNIT_ASSERT( cit != l.end() );
-                        CPPUNIT_ASSERT( cit != l.cend() );
-                        CPPUNIT_ASSERT( cit == it );
-
-                        CPPUNIT_ASSERT( it->nKey == v2.nKey );
-                        CPPUNIT_ASSERT( it->nVal == v2.nVal );
-                        CPPUNIT_ASSERT( ++it != l.end() );
-                        CPPUNIT_ASSERT( it->nKey == v1.nKey );
-                        CPPUNIT_ASSERT( it->nVal == v1.nVal );
-                        CPPUNIT_ASSERT( it++ != l.end() );
-                        CPPUNIT_ASSERT( it->nKey == v3.nKey );
-                        CPPUNIT_ASSERT( it->nVal == v3.nVal );
-                        CPPUNIT_ASSERT( it++ != l.end() );
-                        CPPUNIT_ASSERT( it == l.end() );
-                    }
-
-                    {
-                        OrdList const & lref = l;
-                        typename OrdList::const_iterator it = lref.begin();
-                        CPPUNIT_ASSERT( it != l.end() );
-                        CPPUNIT_ASSERT( it->nKey == v2.nKey );
-                        CPPUNIT_ASSERT( it->nVal == v2.nVal );
-                        CPPUNIT_ASSERT( ++it != lref.end() );
-                        CPPUNIT_ASSERT( it->nKey == v1.nKey );
-                        CPPUNIT_ASSERT( it->nVal == v1.nVal );
-                        CPPUNIT_ASSERT( it++ != l.end() );
-                        CPPUNIT_ASSERT( it->nKey == v3.nKey );
-                        CPPUNIT_ASSERT( it->nVal == v3.nVal );
-                        CPPUNIT_ASSERT( it++ != lref.end() );
-                        CPPUNIT_ASSERT( it == l.end() );
-                    }
-                }
-
-                // Disposer called on list destruction
-                CPPUNIT_ASSERT( v1.s.nDisposeCount == 1 );
-                CPPUNIT_ASSERT( v2.s.nDisposeCount == 1 );
-                CPPUNIT_ASSERT( v3.s.nDisposeCount == 1 );
-            }
-        }
-
-        template <class UnordList>
-        void test_nogc_int_unordered()
-        {
-            typedef typename UnordList::value_type    value_type;
-            {
-                value_type v1( 10, 50 );
-                value_type v2( 5, 25  );
-                value_type v3( 20, 100 );
-                {
-                    UnordList l;
-                    CPPUNIT_ASSERT( l.empty() );
-
-                    CPPUNIT_ASSERT( l.insert( v1 ));   // true
-                    CPPUNIT_ASSERT( l.contains( v1.key() ) == &v1 );
-
-                    CPPUNIT_ASSERT( v1.s.nFindCall == 0 );
-                    CPPUNIT_ASSERT( l.find( v1.key(), find_functor() ));
-                    CPPUNIT_ASSERT( v1.s.nFindCall == 1 );
-
-                    CPPUNIT_ASSERT( l.contains( v2.key(), equal_to<value_type>() ) == nullptr );
-                    CPPUNIT_ASSERT( l.contains( v3.key() ) == nullptr );
-                    CPPUNIT_ASSERT( !l.empty() );
-
-                    //CPPUNIT_ASSERT( !l.insert( v1 ))    ;   // assertion "is_empty" is raised
-
-                    {
-                        value_type v( v1 );
-                        CPPUNIT_ASSERT( !l.insert( v )) ;   // false
-                    }
-
-                    std::pair<bool, bool> ret = l.update( v2, update_functor() );
-                    CPPUNIT_ASSERT( ret.first );
-                    CPPUNIT_ASSERT( ret.second );
-                    CPPUNIT_ASSERT( v2.s.nUpdateNewCall == 1 );
-                    CPPUNIT_ASSERT( v2.s.nUpdateExistsCall == 0 );
-
-                    //CPPUNIT_ASSERT( !l.insert( v2 ))    ;   // assertion "is_empty"
-
-                    CPPUNIT_ASSERT( l.contains( v1.key() ) == &v1 ) ;   // true
-
-                    CPPUNIT_ASSERT( v1.s.nFindCall == 1 );
-                    CPPUNIT_ASSERT( l.find( v1.key(), find_functor() ));
-                    CPPUNIT_ASSERT( v1.s.nFindCall == 2 );
-
-                    CPPUNIT_ASSERT( l.contains( v2.key(), equal_to<value_type>() ) == &v2 );
-
-                    CPPUNIT_ASSERT( v2.s.nFindCall == 0 );
-                    CPPUNIT_ASSERT( l.find_with( v2.key(), equal_to<value_type>(), find_functor() ));
-                    CPPUNIT_ASSERT( v2.s.nFindCall == 1 );
-
-                    CPPUNIT_ASSERT( !l.contains( v3.key() ));
-
-                    {
-                        value_type v( v2 );
-                        ret = l.update( v, update_functor() );
-
-                        CPPUNIT_ASSERT( ret.first );
-                        CPPUNIT_ASSERT( !ret.second );
-                        CPPUNIT_ASSERT( v2.s.nUpdateExistsCall == 1 );
-                        CPPUNIT_ASSERT( v.s.nUpdateExistsCall == 0 && v.s.nUpdateNewCall == 0 );
-                    }
-
-                    CPPUNIT_ASSERT( !l.empty() );
-
-                    CPPUNIT_ASSERT( l.insert( v3 ))     ;   // true
-                    CPPUNIT_ASSERT( l.contains( v3.key() ) == &v3 );
-
-                    CPPUNIT_ASSERT( v3.s.nFindCall == 0 );
-                    CPPUNIT_ASSERT( l.find( v3.key(), find_functor() ));
-                    CPPUNIT_ASSERT( v3.s.nFindCall == 1 );
-
-                    {
-                        typename UnordList::iterator it = l.begin();
-                        typename UnordList::const_iterator cit = l.cbegin();
-                        CPPUNIT_ASSERT( it != l.end() );
-                        CPPUNIT_ASSERT( it != l.cend() );
-                        CPPUNIT_ASSERT( cit != l.end() );
-                        CPPUNIT_ASSERT( cit != l.cend() );
-                        CPPUNIT_ASSERT( cit == it );
-
-                        CPPUNIT_ASSERT( it->nKey == v1.nKey );
-                        CPPUNIT_ASSERT( it->nVal == v1.nVal );
-                        CPPUNIT_ASSERT( ++it != l.end() );
-                        CPPUNIT_ASSERT( it->nKey == v2.nKey );
-                        CPPUNIT_ASSERT( it->nVal == v2.nVal );
-                        CPPUNIT_ASSERT( it++ != l.end() );
-                        CPPUNIT_ASSERT( it->nKey == v3.nKey );
-                        CPPUNIT_ASSERT( it->nVal == v3.nVal );
-                        CPPUNIT_ASSERT( it++ != l.end() );
-                        CPPUNIT_ASSERT( it == l.end() );
-                    }
-
-                    {
-                        UnordList const & lref = l;
-                        typename UnordList::const_iterator it = lref.begin();
-                        CPPUNIT_ASSERT( it != l.end() );
-                        CPPUNIT_ASSERT( it->nKey == v1.nKey );
-                        CPPUNIT_ASSERT( it->nVal == v1.nVal );
-                        CPPUNIT_ASSERT( ++it != lref.end() );
-                        CPPUNIT_ASSERT( it->nKey == v2.nKey );
-                        CPPUNIT_ASSERT( it->nVal == v2.nVal );
-                        CPPUNIT_ASSERT( it++ != l.end() );
-                        CPPUNIT_ASSERT( it->nKey == v3.nKey );
-                        CPPUNIT_ASSERT( it->nVal == v3.nVal );
-                        CPPUNIT_ASSERT( it++ != lref.end() );
-                        CPPUNIT_ASSERT( it == l.end() );
-                    }
-                }
-
-                // Disposer called on list destruction
-                CPPUNIT_ASSERT( v1.s.nDisposeCount == 1 );
-                CPPUNIT_ASSERT( v2.s.nDisposeCount == 1 );
-                CPPUNIT_ASSERT( v3.s.nDisposeCount == 1 );
-            }
-        }
-
-
-        void HP_base_cmp();
-        void HP_base_less();
-        void HP_base_cmpmix();
-        void HP_base_ic();
-        void HP_member_cmp();
-        void HP_member_less();
-        void HP_member_cmpmix();
-        void HP_member_ic();
-
-        void DHP_base_cmp();
-        void DHP_base_less();
-        void DHP_base_cmpmix();
-        void DHP_base_ic();
-        void DHP_member_cmp();
-        void DHP_member_less();
-        void DHP_member_cmpmix();
-        void DHP_member_ic();
-
-        void RCU_GPI_base_cmp();
-        void RCU_GPI_base_less();
-        void RCU_GPI_base_cmpmix();
-        void RCU_GPI_base_ic();
-        void RCU_GPI_member_cmp();
-        void RCU_GPI_member_less();
-        void RCU_GPI_member_cmpmix();
-        void RCU_GPI_member_ic();
-
-        void RCU_GPB_base_cmp();
-        void RCU_GPB_base_less();
-        void RCU_GPB_base_cmpmix();
-        void RCU_GPB_base_ic();
-        void RCU_GPB_member_cmp();
-        void RCU_GPB_member_less();
-        void RCU_GPB_member_cmpmix();
-        void RCU_GPB_member_ic();
-
-        void RCU_GPT_base_cmp();
-        void RCU_GPT_base_less();
-        void RCU_GPT_base_cmpmix();
-        void RCU_GPT_base_ic();
-        void RCU_GPT_member_cmp();
-        void RCU_GPT_member_less();
-        void RCU_GPT_member_cmpmix();
-        void RCU_GPT_member_ic();
-
-        void RCU_SHB_base_cmp();
-        void RCU_SHB_base_less();
-        void RCU_SHB_base_cmpmix();
-        void RCU_SHB_base_ic();
-        void RCU_SHB_member_cmp();
-        void RCU_SHB_member_less();
-        void RCU_SHB_member_cmpmix();
-        void RCU_SHB_member_ic();
-
-        void RCU_SHT_base_cmp();
-        void RCU_SHT_base_less();
-        void RCU_SHT_base_cmpmix();
-        void RCU_SHT_base_ic();
-        void RCU_SHT_member_cmp();
-        void RCU_SHT_member_less();
-        void RCU_SHT_member_cmpmix();
-        void RCU_SHT_member_ic();
-
-        void nogc_base_cmp();
-        void nogc_base_less();
-        void nogc_base_cmpmix();
-        void nogc_base_ic();
-        void nogc_member_cmp();
-        void nogc_member_less();
-        void nogc_member_cmpmix();
-        void nogc_member_ic();
-
-        void nogc_base_cmp_unord();
-        void nogc_base_less_unord();
-        void nogc_base_equal_to_unord();
-        void nogc_base_cmpmix_unord();
-        void nogc_base_equal_to_mix_unord();
-        void nogc_base_ic_unord();
-        void nogc_member_cmp_unord();
-        void nogc_member_less_unord();
-        void nogc_member_equal_to_unord();
-        void nogc_member_cmpmix_unord();
-        void nogc_member_equal_to_mix_unord();
-        void nogc_member_ic_unord();
-
-        CPPUNIT_TEST_SUITE(IntrusiveLazyListHeaderTest)
-            CPPUNIT_TEST(HP_base_cmp)
-            CPPUNIT_TEST(HP_base_less)
-            CPPUNIT_TEST(HP_base_cmpmix)
-            CPPUNIT_TEST(HP_base_ic)
-            CPPUNIT_TEST(HP_member_cmp)
-            CPPUNIT_TEST(HP_member_less)
-            CPPUNIT_TEST(HP_member_cmpmix)
-            CPPUNIT_TEST(HP_member_ic)
-
-            CPPUNIT_TEST(DHP_base_cmp)
-            CPPUNIT_TEST(DHP_base_less)
-            CPPUNIT_TEST(DHP_base_cmpmix)
-            CPPUNIT_TEST(DHP_base_ic)
-            CPPUNIT_TEST(DHP_member_cmp)
-            CPPUNIT_TEST(DHP_member_less)
-            CPPUNIT_TEST(DHP_member_cmpmix)
-            CPPUNIT_TEST(DHP_member_ic)
-
-            CPPUNIT_TEST(RCU_GPI_base_cmp)
-            CPPUNIT_TEST(RCU_GPI_base_less)
-            CPPUNIT_TEST(RCU_GPI_base_cmpmix)
-            CPPUNIT_TEST(RCU_GPI_base_ic)
-            CPPUNIT_TEST(RCU_GPI_member_cmp)
-            CPPUNIT_TEST(RCU_GPI_member_less)
-            CPPUNIT_TEST(RCU_GPI_member_cmpmix)
-            CPPUNIT_TEST(RCU_GPI_member_ic)
-
-            CPPUNIT_TEST(RCU_GPB_base_cmp)
-            CPPUNIT_TEST(RCU_GPB_base_less)
-            CPPUNIT_TEST(RCU_GPB_base_cmpmix)
-            CPPUNIT_TEST(RCU_GPB_base_ic)
-            CPPUNIT_TEST(RCU_GPB_member_cmp)
-            CPPUNIT_TEST(RCU_GPB_member_less)
-            CPPUNIT_TEST(RCU_GPB_member_cmpmix)
-            CPPUNIT_TEST(RCU_GPB_member_ic)
-
-            CPPUNIT_TEST(RCU_GPT_base_cmp)
-            CPPUNIT_TEST(RCU_GPT_base_less)
-            CPPUNIT_TEST(RCU_GPT_base_cmpmix)
-            CPPUNIT_TEST(RCU_GPT_base_ic)
-            CPPUNIT_TEST(RCU_GPT_member_cmp)
-            CPPUNIT_TEST(RCU_GPT_member_less)
-            CPPUNIT_TEST(RCU_GPT_member_cmpmix)
-            CPPUNIT_TEST(RCU_GPT_member_ic)
-
-            CPPUNIT_TEST(RCU_SHB_base_cmp)
-            CPPUNIT_TEST(RCU_SHB_base_less)
-            CPPUNIT_TEST(RCU_SHB_base_cmpmix)
-            CPPUNIT_TEST(RCU_SHB_base_ic)
-            CPPUNIT_TEST(RCU_SHB_member_cmp)
-            CPPUNIT_TEST(RCU_SHB_member_less)
-            CPPUNIT_TEST(RCU_SHB_member_cmpmix)
-            CPPUNIT_TEST(RCU_SHB_member_ic)
-
-            CPPUNIT_TEST(RCU_SHT_base_cmp)
-            CPPUNIT_TEST(RCU_SHT_base_less)
-            CPPUNIT_TEST(RCU_SHT_base_cmpmix)
-            CPPUNIT_TEST(RCU_SHT_base_ic)
-            CPPUNIT_TEST(RCU_SHT_member_cmp)
-            CPPUNIT_TEST(RCU_SHT_member_less)
-            CPPUNIT_TEST(RCU_SHT_member_cmpmix)
-            CPPUNIT_TEST(RCU_SHT_member_ic)
-
-            CPPUNIT_TEST(nogc_base_cmp)
-            CPPUNIT_TEST(nogc_base_less)
-            CPPUNIT_TEST(nogc_base_cmpmix)
-            CPPUNIT_TEST(nogc_base_ic)
-            CPPUNIT_TEST(nogc_member_cmp)
-            CPPUNIT_TEST(nogc_member_less)
-            CPPUNIT_TEST(nogc_member_cmpmix)
-            CPPUNIT_TEST(nogc_member_ic)
-
-            CPPUNIT_TEST(nogc_base_cmp_unord)
-            CPPUNIT_TEST(nogc_base_less_unord)
-            CPPUNIT_TEST(nogc_base_equal_to_unord)
-            CPPUNIT_TEST(nogc_base_cmpmix_unord)
-            CPPUNIT_TEST(nogc_base_equal_to_mix_unord)
-            CPPUNIT_TEST(nogc_base_ic_unord)
-            CPPUNIT_TEST(nogc_member_cmp_unord)
-            CPPUNIT_TEST(nogc_member_less_unord)
-            CPPUNIT_TEST(nogc_member_equal_to_unord)
-            CPPUNIT_TEST(nogc_member_cmpmix_unord)
-            CPPUNIT_TEST(nogc_member_equal_to_mix_unord)
-            CPPUNIT_TEST(nogc_member_ic_unord)
-
-        CPPUNIT_TEST_SUITE_END()
-    };
-}   // namespace ordlist
-
-#endif // #ifndef CDSTEST_HDR_INTRUSIVE_LAZY_H
diff --git a/tests/test-hdr/list/hdr_intrusive_lazy_dhp.cpp b/tests/test-hdr/list/hdr_intrusive_lazy_dhp.cpp
deleted file mode 100644 (file)
index 43040bc..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_intrusive_lazy.h"
-#include <cds/intrusive/lazy_list_dhp.h>
-
-namespace ordlist {
-    void IntrusiveLazyListHeaderTest::DHP_base_cmp()
-    {
-        typedef base_int_item< cds::gc::DHP > item;
-        struct traits : public ci::lazy_list::traits
-        {
-            typedef ci::lazy_list::base_hook< co::gc<cds::gc::DHP> > hook;
-            typedef cmp<item> compare;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::LazyList< cds::gc::DHP, item, traits > list;
-        test_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::DHP_base_less()
-    {
-        typedef base_int_item< cds::gc::DHP > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::DHP_base_cmpmix()
-    {
-        typedef base_int_item< cds::gc::DHP > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::DHP_base_ic()
-    {
-        typedef base_int_item< cds::gc::DHP > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::DHP_member_cmp()
-    {
-        typedef member_int_item< cds::gc::DHP > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::DHP_member_less()
-    {
-        typedef member_int_item< cds::gc::DHP > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::DHP_member_cmpmix()
-    {
-        typedef member_int_item< cds::gc::DHP > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::DHP_member_ic()
-    {
-        typedef member_int_item< cds::gc::DHP > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-
-} // namespace ordlist
diff --git a/tests/test-hdr/list/hdr_intrusive_lazy_hp.cpp b/tests/test-hdr/list/hdr_intrusive_lazy_hp.cpp
deleted file mode 100644 (file)
index f4ad2e3..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_intrusive_lazy.h"
-#include <cds/intrusive/lazy_list_hp.h>
-
-namespace ordlist {
-    void IntrusiveLazyListHeaderTest::HP_base_cmp()
-    {
-        typedef base_int_item< cds::gc::HP > item;
-        struct traits : public ci::lazy_list::traits
-        {
-            typedef ci::lazy_list::base_hook< co::gc<cds::gc::HP> > hook;
-            typedef cmp<item> compare;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::LazyList< cds::gc::HP, item, traits > list;
-        test_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::HP_base_less()
-    {
-        typedef base_int_item< cds::gc::HP > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::HP_base_cmpmix()
-    {
-        typedef base_int_item< cds::gc::HP > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::HP_base_ic()
-    {
-        typedef base_int_item< cds::gc::HP > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::HP_member_cmp()
-    {
-        typedef member_int_item< cds::gc::HP > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::HP_member_less()
-    {
-        typedef member_int_item< cds::gc::HP > item;
-        struct traits : public ci::lazy_list::traits
-        {
-            typedef ci::lazy_list::member_hook< offsetof( item, hMember ), co::gc<cds::gc::HP>> hook;
-            typedef IntrusiveLazyListHeaderTest::less<item> less;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::LazyList< cds::gc::HP, item, traits > list;
-        test_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::HP_member_cmpmix()
-    {
-        typedef member_int_item< cds::gc::HP > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::HP_member_ic()
-    {
-        typedef member_int_item< cds::gc::HP > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-}   // namespace ordlist
-
-CPPUNIT_TEST_SUITE_REGISTRATION(ordlist::IntrusiveLazyListHeaderTest);
diff --git a/tests/test-hdr/list/hdr_intrusive_lazy_nogc.cpp b/tests/test-hdr/list/hdr_intrusive_lazy_nogc.cpp
deleted file mode 100644 (file)
index f147fda..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_intrusive_lazy.h"
-#include <cds/intrusive/lazy_list_nogc.h>
-
-namespace ordlist {
-    void IntrusiveLazyListHeaderTest::nogc_base_cmp()
-    {
-        typedef base_int_item< cds::gc::nogc > item;
-        struct traits : public ci::lazy_list::traits {
-            typedef ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > hook;
-            typedef cmp<item> compare;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::LazyList< cds::gc::nogc, item, traits > list;
-        test_nogc_int<list>();
-    }
-
-    void IntrusiveLazyListHeaderTest::nogc_base_less()
-    {
-        typedef base_int_item< cds::gc::nogc > item;
-        struct traits: public
-            ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        {};
-        typedef ci::LazyList< cds::gc::nogc, item, traits > list;
-        test_nogc_int<list>();
-    }
-
-    void IntrusiveLazyListHeaderTest::nogc_base_cmpmix()
-    {
-        typedef base_int_item< cds::gc::nogc > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_nogc_int<list>();
-    }
-
-    void IntrusiveLazyListHeaderTest::nogc_base_ic()
-    {
-        typedef base_int_item< cds::gc::nogc > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_nogc_int<list>();
-    }
-
-    void IntrusiveLazyListHeaderTest::nogc_member_cmp()
-    {
-        typedef member_int_item< cds::gc::nogc > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_nogc_int<list>();
-    }
-
-    void IntrusiveLazyListHeaderTest::nogc_member_less()
-    {
-        typedef member_int_item< cds::gc::nogc > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_nogc_int<list>();
-    }
-
-    void IntrusiveLazyListHeaderTest::nogc_member_cmpmix()
-    {
-        typedef member_int_item< cds::gc::nogc > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_nogc_int<list>();
-    }
-
-    void IntrusiveLazyListHeaderTest::nogc_member_ic()
-    {
-        typedef member_int_item< cds::gc::nogc > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_nogc_int<list>();
-    }
-
-} // namespace ordlist
diff --git a/tests/test-hdr/list/hdr_intrusive_lazy_nogc_unord.cpp b/tests/test-hdr/list/hdr_intrusive_lazy_nogc_unord.cpp
deleted file mode 100644 (file)
index 0286e94..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_intrusive_lazy.h"
-#include <cds/intrusive/lazy_list_nogc.h>
-
-namespace ordlist {
-    namespace {
-        typedef IntrusiveLazyListHeaderTest::base_int_item< cds::gc::nogc > base_item;
-        typedef IntrusiveLazyListHeaderTest::member_int_item< cds::gc::nogc > member_item;
-
-        struct cmp_traits : public ci::lazy_list::traits {
-            typedef ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > hook;
-            typedef IntrusiveLazyListHeaderTest::cmp<base_item> compare;
-            typedef IntrusiveLazyListHeaderTest::faked_disposer disposer;
-            static const bool sort = false;
-        };
-
-        struct less_traits: public ci::lazy_list::traits {
-            typedef ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > hook;
-            typedef IntrusiveLazyListHeaderTest::less<base_item> less;
-            typedef IntrusiveLazyListHeaderTest::faked_disposer disposer;
-            static const bool sort = false;
-        };
-
-        struct equal_to_traits: public ci::lazy_list::traits {
-            typedef ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > hook;
-            typedef IntrusiveLazyListHeaderTest::equal_to<base_item> equal_to;
-            typedef IntrusiveLazyListHeaderTest::faked_disposer disposer;
-            static const bool sort = false;
-        };
-
-        typedef ci::lazy_list::make_traits<
-            ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
-            ,co::less< IntrusiveLazyListHeaderTest::less<base_item> >
-            ,co::compare< IntrusiveLazyListHeaderTest::cmp<base_item> >
-            ,ci::opt::disposer< IntrusiveLazyListHeaderTest::faked_disposer >
-            ,co::sort< false > >::type cmpmix_traits;
-
-        typedef ci::lazy_list::make_traits<
-            ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
-            ,co::compare< IntrusiveLazyListHeaderTest::cmp<base_item> >
-            ,co::equal_to< IntrusiveLazyListHeaderTest::equal_to<base_item> >
-            ,ci::opt::disposer< IntrusiveLazyListHeaderTest::faked_disposer >
-            ,co::sort< false > >::type equal_to_mix_traits;
-
-        typedef ci::lazy_list::make_traits<
-            ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
-            ,co::equal_to< IntrusiveLazyListHeaderTest::equal_to<base_item> >
-            ,ci::opt::disposer< IntrusiveLazyListHeaderTest::faked_disposer >
-            ,co::item_counter< cds::atomicity::item_counter >
-            ,co::sort< false > >::type ic_traits;
-
-        typedef ci::lazy_list::make_traits<
-            ci::opt::hook< ci::lazy_list::member_hook<
-                offsetof( member_item, hMember )
-                ,co::gc<cds::gc::nogc> > >
-            ,co::compare< IntrusiveLazyListHeaderTest::cmp<member_item> >
-            ,ci::opt::disposer< IntrusiveLazyListHeaderTest::faked_disposer >
-            ,co::sort< false > >::type member_cmp_traits;
-
-        typedef ci::lazy_list::make_traits<
-            ci::opt::hook< ci::lazy_list::member_hook<
-                offsetof( member_item, hMember )
-                ,co::gc<cds::gc::nogc> > >
-            ,co::less< IntrusiveLazyListHeaderTest::less<member_item> >
-            ,ci::opt::disposer< IntrusiveLazyListHeaderTest::faked_disposer >
-            ,co::sort< false > >::type member_less_traits;
-
-        typedef ci::lazy_list::make_traits<
-            ci::opt::hook< ci::lazy_list::member_hook<
-                offsetof( member_item, hMember )
-                ,co::gc<cds::gc::nogc> > >
-            ,co::equal_to< IntrusiveLazyListHeaderTest::equal_to<member_item> >
-            ,ci::opt::disposer< IntrusiveLazyListHeaderTest::faked_disposer >
-            ,co::sort< false > >::type member_equal_to_traits;
-
-        typedef ci::lazy_list::make_traits<
-            ci::opt::hook< ci::lazy_list::member_hook<
-                offsetof( member_item, hMember )
-                ,co::gc<cds::gc::nogc> > >
-            ,co::less< IntrusiveLazyListHeaderTest::less<member_item> >
-            ,co::compare< IntrusiveLazyListHeaderTest::cmp<member_item> >
-            ,ci::opt::disposer< IntrusiveLazyListHeaderTest::faked_disposer >
-            ,co::sort< false > >::type member_cmpmix_traits;
-
-        typedef ci::lazy_list::make_traits<
-            ci::opt::hook< ci::lazy_list::member_hook<
-                offsetof( member_item, hMember )
-                ,co::gc<cds::gc::nogc> > >
-            ,co::compare< IntrusiveLazyListHeaderTest::cmp<member_item> >
-            ,co::equal_to< IntrusiveLazyListHeaderTest::equal_to<member_item> >
-            ,ci::opt::disposer< IntrusiveLazyListHeaderTest::faked_disposer >
-            ,co::sort< false > >::type member_equal_to_mix_traits;
-
-        typedef ci::lazy_list::make_traits<
-            ci::opt::hook< ci::lazy_list::member_hook<
-                offsetof( member_item, hMember ),
-                co::gc<cds::gc::nogc> > >
-            ,co::equal_to< IntrusiveLazyListHeaderTest::equal_to<member_item> >
-            ,ci::opt::disposer< IntrusiveLazyListHeaderTest::faked_disposer >
-            ,co::item_counter< cds::atomicity::item_counter >
-            ,co::sort< false > >::type member_ic_traits;
-
-    }
-    void IntrusiveLazyListHeaderTest::nogc_base_cmp_unord()
-    {
-        typedef ci::LazyList< cds::gc::nogc, base_item, cmp_traits > list;
-        test_nogc_int_unordered<list>();
-    }
-    void IntrusiveLazyListHeaderTest::nogc_base_less_unord()
-    {
-        typedef ci::LazyList< cds::gc::nogc, base_item, less_traits > list;
-        test_nogc_int_unordered<list>();
-    }
-    void IntrusiveLazyListHeaderTest::nogc_base_equal_to_unord()
-    {
-        typedef ci::LazyList< cds::gc::nogc, base_item, equal_to_traits > list;
-        test_nogc_int_unordered<list>();
-    }
-    void IntrusiveLazyListHeaderTest::nogc_base_cmpmix_unord()
-    {
-        typedef ci::LazyList< cds::gc::nogc, base_item, cmpmix_traits > list;
-        test_nogc_int_unordered<list>();
-    }
-    void IntrusiveLazyListHeaderTest::nogc_base_equal_to_mix_unord()
-    {
-        typedef ci::LazyList< cds::gc::nogc, base_item, equal_to_mix_traits > list;
-        test_nogc_int_unordered<list>();
-    }
-    void IntrusiveLazyListHeaderTest::nogc_base_ic_unord()
-    {
-        typedef ci::LazyList< cds::gc::nogc, base_item, ic_traits > list;
-        test_nogc_int_unordered<list>();
-    }
-    void IntrusiveLazyListHeaderTest::nogc_member_cmp_unord()
-    {
-        typedef ci::LazyList< cds::gc::nogc, member_item, member_cmp_traits > list;
-        test_nogc_int_unordered<list>();
-    }
-    void IntrusiveLazyListHeaderTest::nogc_member_less_unord()
-    {
-        typedef ci::LazyList< cds::gc::nogc, member_item, member_less_traits > list;
-        test_nogc_int_unordered<list>();
-    }
-    void IntrusiveLazyListHeaderTest::nogc_member_equal_to_unord()
-    {
-        typedef ci::LazyList< cds::gc::nogc, member_item, member_equal_to_traits > list;
-        test_nogc_int_unordered<list>();
-    }
-    void IntrusiveLazyListHeaderTest::nogc_member_cmpmix_unord()
-    {
-        typedef ci::LazyList< cds::gc::nogc, member_item, member_cmpmix_traits > list;
-        test_nogc_int_unordered<list>();
-    }
-    void IntrusiveLazyListHeaderTest::nogc_member_equal_to_mix_unord()
-    {
-        typedef ci::LazyList< cds::gc::nogc, member_item, member_equal_to_mix_traits > list;
-        test_nogc_int_unordered<list>();
-    }
-    void IntrusiveLazyListHeaderTest::nogc_member_ic_unord()
-    {
-        typedef ci::LazyList< cds::gc::nogc, member_item, member_ic_traits > list;
-        test_nogc_int_unordered<list>();
-    }
-
-} // namespace ordlist
diff --git a/tests/test-hdr/list/hdr_intrusive_lazy_rcu_gpb.cpp b/tests/test-hdr/list/hdr_intrusive_lazy_rcu_gpb.cpp
deleted file mode 100644 (file)
index 9595efc..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_intrusive_lazy.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/intrusive/lazy_list_rcu.h>
-
-namespace ordlist {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> >    RCU;
-    }
-
-    void IntrusiveLazyListHeaderTest::RCU_GPB_base_cmp()
-    {
-        typedef base_int_item< RCU > item;
-        typedef ci::lazy_list::make_traits<
-            ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-            ,co::compare< cmp<item> >
-            ,ci::opt::disposer< faked_disposer >
-        >::type list_traits;
-        typedef ci::LazyList< RCU, item, list_traits > list;
-
-        test_rcu_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::RCU_GPB_base_less()
-    {
-        typedef base_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::RCU_GPB_base_cmpmix()
-    {
-        typedef base_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::RCU_GPB_base_ic()
-    {
-        typedef base_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::RCU_GPB_member_cmp()
-    {
-        typedef member_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::RCU_GPB_member_less()
-    {
-        typedef member_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::RCU_GPB_member_cmpmix()
-    {
-        typedef member_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::RCU_GPB_member_ic()
-    {
-        typedef member_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-}   // namespace ordlist
diff --git a/tests/test-hdr/list/hdr_intrusive_lazy_rcu_gpi.cpp b/tests/test-hdr/list/hdr_intrusive_lazy_rcu_gpi.cpp
deleted file mode 100644 (file)
index 1c0fad1..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_intrusive_lazy.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/intrusive/lazy_list_rcu.h>
-
-namespace ordlist {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> >    RCU;
-    }
-
-    void IntrusiveLazyListHeaderTest::RCU_GPI_base_cmp()
-    {
-        typedef base_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::RCU_GPI_base_less()
-    {
-        typedef base_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::RCU_GPI_base_cmpmix()
-    {
-        typedef base_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::RCU_GPI_base_ic()
-    {
-        typedef base_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::RCU_GPI_member_cmp()
-    {
-        typedef member_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::RCU_GPI_member_less()
-    {
-        typedef member_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::RCU_GPI_member_cmpmix()
-    {
-        typedef member_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::RCU_GPI_member_ic()
-    {
-        typedef member_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-}   // namespace ordlist
diff --git a/tests/test-hdr/list/hdr_intrusive_lazy_rcu_gpt.cpp b/tests/test-hdr/list/hdr_intrusive_lazy_rcu_gpt.cpp
deleted file mode 100644 (file)
index fd07280..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_intrusive_lazy.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/intrusive/lazy_list_rcu.h>
-
-namespace ordlist {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> >    RCU;
-    }
-
-    void IntrusiveLazyListHeaderTest::RCU_GPT_base_cmp()
-    {
-        typedef base_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::RCU_GPT_base_less()
-    {
-        typedef base_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::RCU_GPT_base_cmpmix()
-    {
-        typedef base_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::RCU_GPT_base_ic()
-    {
-        typedef base_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::RCU_GPT_member_cmp()
-    {
-        typedef member_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::RCU_GPT_member_less()
-    {
-        typedef member_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::RCU_GPT_member_cmpmix()
-    {
-        typedef member_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveLazyListHeaderTest::RCU_GPT_member_ic()
-    {
-        typedef member_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-}   // namespace ordlist
diff --git a/tests/test-hdr/list/hdr_intrusive_lazy_rcu_shb.cpp b/tests/test-hdr/list/hdr_intrusive_lazy_rcu_shb.cpp
deleted file mode 100644 (file)
index ec54a13..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_intrusive_lazy.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/intrusive/lazy_list_rcu.h>
-
-namespace ordlist {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> >    RCU;
-    }
-#endif
-
-    void IntrusiveLazyListHeaderTest::RCU_SHB_base_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< RCU > item;
-        typedef ci::lazy_list::make_traits<
-            ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-            ,co::compare< cmp<item> >
-            ,ci::opt::disposer< faked_disposer >
-        >::type list_traits;
-        typedef ci::LazyList< RCU, item, list_traits > list;
-
-        test_rcu_int<list>();
-#endif
-    }
-
-    void IntrusiveLazyListHeaderTest::RCU_SHB_base_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-
-    void IntrusiveLazyListHeaderTest::RCU_SHB_base_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-
-    void IntrusiveLazyListHeaderTest::RCU_SHB_base_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-
-    void IntrusiveLazyListHeaderTest::RCU_SHB_member_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-
-    void IntrusiveLazyListHeaderTest::RCU_SHB_member_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-
-    void IntrusiveLazyListHeaderTest::RCU_SHB_member_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-
-    void IntrusiveLazyListHeaderTest::RCU_SHB_member_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-
-}   // namespace ordlist
diff --git a/tests/test-hdr/list/hdr_intrusive_lazy_rcu_sht.cpp b/tests/test-hdr/list/hdr_intrusive_lazy_rcu_sht.cpp
deleted file mode 100644 (file)
index 6738b4b..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_intrusive_lazy.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/intrusive/lazy_list_rcu.h>
-
-namespace ordlist {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> >    RCU;
-    }
-#endif
-
-    void IntrusiveLazyListHeaderTest::RCU_SHT_base_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-    void IntrusiveLazyListHeaderTest::RCU_SHT_base_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-    void IntrusiveLazyListHeaderTest::RCU_SHT_base_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-    void IntrusiveLazyListHeaderTest::RCU_SHT_base_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-    void IntrusiveLazyListHeaderTest::RCU_SHT_member_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-    void IntrusiveLazyListHeaderTest::RCU_SHT_member_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-    void IntrusiveLazyListHeaderTest::RCU_SHT_member_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-    void IntrusiveLazyListHeaderTest::RCU_SHT_member_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< RCU > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-}   // namespace ordlist
diff --git a/tests/test-hdr/list/hdr_intrusive_michael.h b/tests/test-hdr/list/hdr_intrusive_michael.h
deleted file mode 100644 (file)
index 4c701c2..0000000
+++ /dev/null
@@ -1,938 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_INTRUSIVE_MICHAEL_H
-#define CDSTEST_HDR_INTRUSIVE_MICHAEL_H
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/intrusive/details/michael_list_base.h>
-
-namespace ordlist {
-    namespace ci = cds::intrusive;
-    namespace co = cds::opt;
-
-    class IntrusiveMichaelListHeaderTest: public CppUnitMini::TestCase
-    {
-    public:
-
-        struct stat {
-            int nDisposeCount;
-            int nUpdateExistsCall;
-            int nUpdateNewCall;
-            int nFindCall;
-            int nEraseCall;
-
-            stat()
-                : nDisposeCount(0)
-                , nUpdateExistsCall(0)
-                , nUpdateNewCall(0)
-                , nFindCall(0)
-                , nEraseCall(0)
-            {}
-
-            stat( const stat& s )
-            {
-                *this = s;
-            }
-
-            stat& operator =(const stat& s)
-            {
-                memcpy( this, &s, sizeof(s));
-                return *this;
-            }
-        };
-
-        template <typename GC>
-        struct base_int_item: public ci::michael_list::node< GC >
-        {
-            int nKey;
-            int nVal;
-
-            mutable stat    s;
-
-            base_int_item()
-            {}
-
-            base_int_item(int key, int val)
-                : nKey( key )
-                , nVal(val)
-                , s()
-            {}
-
-            base_int_item(const base_int_item& v )
-                : nKey( v.nKey )
-                , nVal( v.nVal )
-                , s()
-            {}
-
-            const int& key() const
-            {
-                return nKey;
-            }
-        };
-
-        template <typename GC>
-        struct member_int_item
-        {
-            int nKey;
-            int nVal;
-
-            ci::michael_list::node< GC > hMember;
-
-            mutable stat s;
-
-            member_int_item()
-            {}
-
-            member_int_item(int key, int val)
-                : nKey( key )
-                , nVal(val)
-                , s()
-            {}
-
-            member_int_item(const member_int_item& v )
-                : nKey( v.nKey )
-                , nVal( v.nVal )
-                , s()
-            {}
-
-            const int& key() const
-            {
-                return nKey;
-            }
-        };
-
-        template <typename T>
-        struct less
-        {
-            bool operator ()(const T& v1, const T& v2 ) const
-            {
-                return v1.key() < v2.key();
-            }
-
-            template <typename Q>
-            bool operator ()(const T& v1, const Q& v2 ) const
-            {
-                return v1.key() < v2;
-            }
-
-            template <typename Q>
-            bool operator ()(const Q& v1, const T& v2 ) const
-            {
-                return v1 < v2.key();
-            }
-        };
-
-        struct other_item {
-            int nKey;
-
-            other_item( int n )
-                : nKey(n)
-            {}
-        };
-
-        struct other_less {
-            template <typename T, typename Q>
-            bool operator()( T const& i1, Q const& i2) const
-            {
-                return i1.nKey < i2.nKey;
-            }
-        };
-
-        template <typename T>
-        struct cmp {
-            int operator ()(const T& v1, const T& v2 ) const
-            {
-                if ( v1.key() < v2.key() )
-                    return -1;
-                return v1.key() > v2.key() ? 1 : 0;
-            }
-
-            template <typename Q>
-            int operator ()(const T& v1, const Q& v2 ) const
-            {
-                if ( v1.key() < v2 )
-                    return -1;
-                return v1.key() > v2 ? 1 : 0;
-            }
-
-            template <typename Q>
-            int operator ()(const Q& v1, const T& v2 ) const
-            {
-                if ( v1 < v2.key() )
-                    return -1;
-                return v1 > v2.key() ? 1 : 0;
-            }
-        };
-
-        struct faked_disposer
-        {
-            template <typename T>
-            void operator ()( T * p )
-            {
-                ++p->s.nDisposeCount;
-            }
-        };
-
-        struct update_functor
-        {
-            template <typename T>
-            void operator ()(bool bNew, T& item, T& /*val*/ )
-            {
-                if ( bNew )
-                    ++item.s.nUpdateNewCall;
-                else
-                    ++item.s.nUpdateExistsCall;
-            }
-        };
-
-        struct find_functor
-        {
-            template <typename T, typename Q>
-            void operator ()( T& item, Q& /*val*/ )
-            {
-                ++item.s.nFindCall;
-            }
-        };
-
-        struct erase_functor
-        {
-            template <typename T>
-            void operator()( T const& item )
-            {
-                item.s.nEraseCall++;
-            }
-        };
-
-        template <class OrdList>
-        void test_int_common()
-        {
-            typedef typename OrdList::value_type    value_type;
-
-            value_type v1( 10, 50 );
-            value_type v2( 5, 25  );
-            value_type v3( 20, 100 );
-            {
-                OrdList l;
-                CPPUNIT_ASSERT( l.empty() );
-
-                CPPUNIT_ASSERT( l.insert( v1 ))     ;   // true
-                CPPUNIT_ASSERT( l.contains( v1.key() ));
-
-                CPPUNIT_ASSERT( v1.s.nFindCall == 0 );
-                CPPUNIT_ASSERT( l.find( v1.key(), find_functor() ));
-                CPPUNIT_ASSERT( v1.s.nFindCall == 1 );
-
-                CPPUNIT_ASSERT( !l.contains( v2.key() ));
-                CPPUNIT_ASSERT( !l.contains( v3.key(), less<value_type>() ));
-                CPPUNIT_ASSERT( !l.empty() );
-
-                CPPUNIT_ASSERT( !l.insert( v1 ))    ;   // assertion "is_empty" is not raised since pNext is nullptr
-
-                {
-                    value_type v( v1 );
-                    CPPUNIT_ASSERT( !l.insert( v )) ;   // false
-                }
-
-                std::pair<bool, bool> ret = l.update( v2, update_functor() );
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( ret.second );
-                CPPUNIT_ASSERT( v2.s.nUpdateNewCall == 1 );
-                CPPUNIT_ASSERT( v2.s.nUpdateExistsCall == 0 );
-
-                //CPPUNIT_ASSERT( !l.insert( v2 ))    ;   // assertion "is_empty"
-
-                CPPUNIT_ASSERT( l.contains( v1.key(), less<value_type>() )) ;   // true
-
-                CPPUNIT_ASSERT( v1.s.nFindCall == 1 );
-                CPPUNIT_ASSERT( l.find_with( v1.key(), less<value_type>(), find_functor() ));
-                CPPUNIT_ASSERT( v1.s.nFindCall == 2 );
-
-                CPPUNIT_ASSERT( l.contains( v2.key() ));
-
-                CPPUNIT_ASSERT( v2.s.nFindCall == 0 );
-                CPPUNIT_ASSERT( l.find( v2.key(), find_functor() ));
-                CPPUNIT_ASSERT( v2.s.nFindCall == 1 );
-
-                CPPUNIT_ASSERT( !l.contains( v3.key() ));
-
-                {
-                    CPPUNIT_ASSERT( v2.s.nUpdateExistsCall == 0 );
-                    CPPUNIT_ASSERT( v2.s.nUpdateNewCall == 1 );
-
-                    value_type v( v2 );
-                    ret = l.update( v, update_functor() );
-
-                    CPPUNIT_ASSERT( ret.first );
-                    CPPUNIT_ASSERT( !ret.second );
-                    CPPUNIT_ASSERT( v2.s.nUpdateExistsCall == 1 );
-                    CPPUNIT_ASSERT( v2.s.nUpdateNewCall == 1 );
-                    CPPUNIT_ASSERT( v.s.nUpdateExistsCall == 0 );
-                    CPPUNIT_ASSERT( v.s.nUpdateNewCall == 0 );
-                }
-
-                CPPUNIT_ASSERT( !l.empty() );
-
-                CPPUNIT_ASSERT( l.insert( v3 ))     ;   // true
-                CPPUNIT_ASSERT( l.contains( v3.key() ));
-
-                CPPUNIT_ASSERT( v3.s.nFindCall == 0 );
-                CPPUNIT_ASSERT( l.find( v3.key(), find_functor() ));
-                CPPUNIT_ASSERT( v3.s.nFindCall == 1 );
-
-                CPPUNIT_ASSERT( l.unlink( v2 ) );
-                CPPUNIT_ASSERT( l.contains( v1.key() )) ;   // true
-                CPPUNIT_ASSERT( !l.contains( v2.key() )) ;   // true
-                CPPUNIT_ASSERT( l.contains( v3.key() )) ;   // true
-                CPPUNIT_ASSERT( !l.empty() );
-                CPPUNIT_ASSERT( !l.unlink( v2 ) );
-
-                {
-                    // v1 key is in the list but v NODE is not in the list
-                    value_type v( v1 );
-                    CPPUNIT_ASSERT( !l.unlink( v ) );
-                }
-
-                CPPUNIT_ASSERT( l.unlink( v1 ) );
-                CPPUNIT_ASSERT( !l.unlink( v1 ) );
-                CPPUNIT_ASSERT( !l.contains( v1.key() ));
-                CPPUNIT_ASSERT( !l.contains( v2.key() ));
-                CPPUNIT_ASSERT( l.contains( v3.key() ));
-                CPPUNIT_ASSERT( !l.empty() );
-                CPPUNIT_ASSERT( !l.unlink( v1 ) );
-                CPPUNIT_ASSERT( !l.unlink( v2 ) );
-
-                CPPUNIT_ASSERT( l.unlink( v3 ) );
-                CPPUNIT_ASSERT( !l.contains( v1.key(), less<value_type>() ));
-                CPPUNIT_ASSERT( !l.find_with( v2.key(), less<value_type>(), find_functor() ));
-                CPPUNIT_ASSERT( !l.find( v3.key(), find_functor() ));
-                CPPUNIT_ASSERT( l.empty() );
-                CPPUNIT_ASSERT( !l.unlink( v1 ) );
-                CPPUNIT_ASSERT( !l.unlink( v2 ) );
-                CPPUNIT_ASSERT( !l.unlink( v3 ) );
-
-                // Apply retired pointer to clean links
-                OrdList::gc::force_dispose();
-
-                stat s( v3.s );
-                ret = l.update( v3, update_functor() );
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( ret.second );
-                CPPUNIT_ASSERT( v3.s.nUpdateNewCall == s.nUpdateNewCall + 1);
-                CPPUNIT_ASSERT( v3.s.nUpdateExistsCall == s.nUpdateExistsCall );
-                CPPUNIT_ASSERT( !l.empty() );
-
-                s = v2.s;
-                ret = l.update( v2, update_functor() );
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( ret.second );
-                CPPUNIT_ASSERT( v2.s.nUpdateNewCall == s.nUpdateNewCall + 1);
-                CPPUNIT_ASSERT( v2.s.nUpdateExistsCall == s.nUpdateExistsCall );
-                CPPUNIT_ASSERT( !l.empty() );
-
-                s = v1.s;
-                ret = l.update( v1, update_functor() );
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( ret.second );
-                CPPUNIT_ASSERT( v1.s.nUpdateNewCall == s.nUpdateNewCall + 1);
-                CPPUNIT_ASSERT( v1.s.nUpdateExistsCall == s.nUpdateExistsCall );
-                CPPUNIT_ASSERT( !l.empty() );
-
-                // Erase test
-                CPPUNIT_ASSERT( v1.s.nEraseCall == 0 );
-                CPPUNIT_ASSERT( l.erase( v1.key(), erase_functor()) );
-                CPPUNIT_ASSERT( v1.s.nEraseCall == 1 );
-                //CPPUNIT_ASSERT( v1.s.nDisposeCount == 0 );
-                CPPUNIT_ASSERT( !l.empty() );
-
-                CPPUNIT_ASSERT( l.erase_with( v2.key(), less<value_type>() ) );
-                CPPUNIT_ASSERT( !l.erase( v2.key()));
-                //CPPUNIT_ASSERT( v2.s.nDisposeCount == 0 );
-                CPPUNIT_ASSERT( !l.empty() );
-
-                CPPUNIT_ASSERT( v2.s.nEraseCall == 0 );
-                CPPUNIT_ASSERT( !l.erase( v2, erase_functor() ));
-                CPPUNIT_ASSERT( v2.s.nEraseCall == 0 );
-                CPPUNIT_ASSERT( !l.erase( v1 ));
-                //CPPUNIT_ASSERT( v2.s.nDisposeCount == 0 );
-                CPPUNIT_ASSERT( !l.empty() );
-
-                CPPUNIT_ASSERT( v3.s.nEraseCall == 0 );
-                CPPUNIT_ASSERT( l.erase_with( v3, less<value_type>(), erase_functor() ));
-                CPPUNIT_ASSERT( v3.s.nEraseCall == 1 );
-                //CPPUNIT_ASSERT( v3.s.nDisposeCount == 0 );
-                CPPUNIT_ASSERT( l.empty() );
-
-                // Apply retired pointer to clean links
-                OrdList::gc::force_dispose();
-
-                // Unlink test
-                CPPUNIT_ASSERT( l.insert( v1 ));
-                CPPUNIT_ASSERT( l.insert( v3 ));
-                CPPUNIT_ASSERT( !l.empty() );
-                CPPUNIT_ASSERT( !l.unlink( v2 ));
-                CPPUNIT_ASSERT( l.unlink( v1 ));
-                CPPUNIT_ASSERT( !l.unlink( v1 ));
-                CPPUNIT_ASSERT( l.unlink( v3 ));
-                CPPUNIT_ASSERT( !l.unlink( v3 ));
-                CPPUNIT_ASSERT( l.empty() );
-
-                // Apply retired pointer
-                OrdList::gc::force_dispose();
-                CPPUNIT_ASSERT( v1.s.nDisposeCount == 3 );
-                CPPUNIT_ASSERT( v2.s.nDisposeCount == 2 );
-                CPPUNIT_ASSERT( v3.s.nDisposeCount == 3 );
-
-                // Destructor test (call disposer)
-                CPPUNIT_ASSERT( l.insert( v1 ));
-                CPPUNIT_ASSERT( l.insert( v3 ));
-                CPPUNIT_ASSERT( l.insert( v2 ));
-
-                // Iterator test
-                // begin/end
-                {
-                    typename OrdList::iterator it = l.begin();
-                    typename OrdList::const_iterator cit = l.cbegin();
-                    CPPUNIT_ASSERT( it != l.end() );
-                    CPPUNIT_ASSERT( it != l.cend() );
-                    CPPUNIT_ASSERT( cit != l.end() );
-                    CPPUNIT_ASSERT( cit != l.cend() );
-                    CPPUNIT_ASSERT( cit == it );
-
-                    CPPUNIT_ASSERT( it->nKey == v2.nKey );
-                    CPPUNIT_ASSERT( it->nVal == v2.nVal );
-                    CPPUNIT_ASSERT( ++it != l.end() );
-                    CPPUNIT_ASSERT( it->nKey == v1.nKey );
-                    CPPUNIT_ASSERT( it->nVal == v1.nVal );
-                    CPPUNIT_ASSERT( ++it != l.end() );
-                    CPPUNIT_ASSERT( it->nKey == v3.nKey );
-                    CPPUNIT_ASSERT( it->nVal == v3.nVal );
-                    CPPUNIT_ASSERT( ++it == l.end() );
-                }
-
-                // cbegin/cend
-                {
-                    typename OrdList::const_iterator it = l.cbegin();
-                    CPPUNIT_ASSERT( it != l.cend() );
-                    CPPUNIT_ASSERT( it->nKey == v2.nKey );
-                    CPPUNIT_ASSERT( it->nVal == v2.nVal );
-                    CPPUNIT_ASSERT( ++it != l.cend() );
-                    CPPUNIT_ASSERT( it->nKey == v1.nKey );
-                    CPPUNIT_ASSERT( it->nVal == v1.nVal );
-                    CPPUNIT_ASSERT( ++it != l.cend() );
-                    CPPUNIT_ASSERT( it->nKey == v3.nKey );
-                    CPPUNIT_ASSERT( it->nVal == v3.nVal );
-                    CPPUNIT_ASSERT( ++it == l.cend() );
-                }
-
-                // const begin/end
-                {
-                    OrdList const & lref = l;
-                    typename OrdList::const_iterator it = lref.begin();
-                    CPPUNIT_ASSERT( it != l.end() );
-                    CPPUNIT_ASSERT( it->nKey == v2.nKey );
-                    CPPUNIT_ASSERT( it->nVal == v2.nVal );
-                    CPPUNIT_ASSERT( ++it != lref.end() );
-                    CPPUNIT_ASSERT( it->nKey == v1.nKey );
-                    CPPUNIT_ASSERT( it->nVal == v1.nVal );
-                    CPPUNIT_ASSERT( ++it != l.end() );
-                    CPPUNIT_ASSERT( it->nKey == v3.nKey );
-                    CPPUNIT_ASSERT( it->nVal == v3.nVal );
-                    CPPUNIT_ASSERT( ++it == l.end() );
-                }
-            }
-
-            // Apply retired pointer
-            OrdList::gc::force_dispose();
-
-            CPPUNIT_ASSERT( v1.s.nDisposeCount == 4 );
-            CPPUNIT_ASSERT( v2.s.nDisposeCount == 3 );
-            CPPUNIT_ASSERT( v3.s.nDisposeCount == 4 );
-        }
-
-        template <class OrdList>
-        void test_int()
-        {
-            test_int_common<OrdList>();
-
-            OrdList l;
-            typename OrdList::guarded_ptr gp;
-
-            static int const nLimit = 20;
-            typename OrdList::value_type arrItem[nLimit];
-
-            {
-                int a[nLimit];
-                for (int i = 0; i < nLimit; ++i)
-                    a[i]=i;
-                shuffle( a, a + nLimit );
-
-                for (int i = 0; i < nLimit; ++i) {
-                    arrItem[i].nKey = a[i];
-                    arrItem[i].nVal = a[i] * 2;
-                }
-
-                // extract/get
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( l.insert( arrItem[i] ) );
-
-                for ( int i=0; i < nLimit; ++i ) {
-                    gp = l.get( arrItem[i].nKey );
-                    CPPUNIT_ASSERT_EX( gp, "i=" << i );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == arrItem[i].nKey );
-                    CPPUNIT_CHECK( gp->nVal == arrItem[i].nVal );
-                    gp.release();
-
-                    gp = l.extract( arrItem[i].nKey );
-                    CPPUNIT_ASSERT_EX( gp, "i=" << i );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == arrItem[i].nKey );
-                    CPPUNIT_CHECK( gp->nVal == arrItem[i].nVal );
-                    gp.release();
-
-                    gp = l.get( arrItem[i].nKey );
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_CHECK( gp.empty());
-                    CPPUNIT_CHECK( !l.extract( arrItem[i].nKey ));
-                    CPPUNIT_CHECK( gp.empty());
-                }
-                CPPUNIT_ASSERT( l.empty() );
-                CPPUNIT_ASSERT( !l.get( nLimit/2 ));
-                CPPUNIT_ASSERT( gp.empty());
-                CPPUNIT_ASSERT( !l.extract( nLimit/2 ));
-                CPPUNIT_ASSERT( gp.empty());
-
-                // Apply retired pointer
-                OrdList::gc::force_dispose();
-
-                // extract_with/get_with
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( l.insert( arrItem[i] ) );
-
-                for ( int i=0; i < nLimit; ++i ) {
-                    other_item itm( arrItem[i].nKey );
-                    gp = l.get_with( itm, other_less() );
-                    CPPUNIT_ASSERT_EX( gp, "i=" << i );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == arrItem[i].nKey );
-                    CPPUNIT_CHECK( gp->nVal == arrItem[i].nVal );
-                    gp.release();
-
-                    gp = l.extract_with( itm, other_less() );
-                    CPPUNIT_ASSERT_EX( gp, "i=" << i );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == arrItem[i].nKey );
-                    CPPUNIT_CHECK( gp->nVal == arrItem[i].nVal );
-                    gp.release();
-
-                    gp = l.get_with( itm, other_less() );
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_CHECK( gp.empty());
-                    CPPUNIT_CHECK( !l.extract_with( itm, other_less() ));
-                    CPPUNIT_CHECK( gp.empty());
-                }
-                CPPUNIT_ASSERT( l.empty() );
-                CPPUNIT_ASSERT( !l.get_with( other_item(nLimit/2), other_less() ));
-                CPPUNIT_ASSERT( gp.empty());
-                CPPUNIT_ASSERT( !l.extract_with( other_item(nLimit/2), other_less() ));
-                CPPUNIT_ASSERT( gp.empty());
-
-                // Apply retired pointer
-                OrdList::gc::force_dispose();
-
-                for ( int i=0; i < nLimit; i++ ) {
-                    CPPUNIT_ASSERT( arrItem[i].s.nDisposeCount == 2 );
-                }
-            }
-        }
-
-        template <class OrdList>
-        void test_rcu_int()
-        {
-            test_int_common<OrdList>();
-
-            OrdList l;
-            static int const nLimit = 20;
-            typename OrdList::value_type arrItem[nLimit];
-
-            typedef typename OrdList::rcu_lock rcu_lock;
-            typedef typename OrdList::value_type value_type;
-            typedef typename OrdList::gc rcu_type;
-
-            {
-                int a[nLimit];
-                for (int i = 0; i < nLimit; ++i)
-                    a[i]=i;
-                shuffle( a, a + nLimit );
-
-                for (int i = 0; i < nLimit; ++i) {
-                    arrItem[i].nKey = a[i];
-                    arrItem[i].nVal = a[i] * 2;
-                }
-
-                // extract/get
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( l.insert( arrItem[i] ) );
-
-                typename OrdList::exempt_ptr ep;
-                typename OrdList::raw_ptr rp;
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    {
-                        rcu_lock lock;
-                        rp = l.get( a[i] );
-                        CPPUNIT_ASSERT( rp );
-                        CPPUNIT_CHECK( rp->nKey == a[i] );
-                        CPPUNIT_CHECK( rp->nVal == a[i] * 2 );
-                    }
-                    rp.release();
-
-                    ep = l.extract( a[i] );
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty() );
-                    CPPUNIT_CHECK( ep->nKey == a[i] );
-                    CPPUNIT_CHECK( (*ep).nVal == a[i] * 2 );
-                    ep.release();
-
-                    {
-                        rcu_lock lock;
-                        CPPUNIT_CHECK( !l.get( a[i] ));
-                    }
-                    CPPUNIT_CHECK( !l.extract( a[i] ));
-                    CPPUNIT_CHECK( ep.empty() );
-                }
-                CPPUNIT_ASSERT( l.empty() );
-
-                {
-                    rcu_lock lock;
-                    CPPUNIT_CHECK( !l.get( a[0] ));
-                }
-                ep = l.extract( a[0] );
-                CPPUNIT_CHECK( !ep );
-                CPPUNIT_CHECK( ep.empty() );
-
-                // Apply retired pointer
-                OrdList::gc::force_dispose();
-
-                // extract_with/get_with
-                for ( int i = 0; i < nLimit; ++i ) {
-                    CPPUNIT_ASSERT( l.insert( arrItem[i] ) );
-                }
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    other_item itm( a[i] );
-                    {
-                        rcu_lock lock;
-                        rp = l.get_with( itm, other_less() );
-                        CPPUNIT_ASSERT( rp );
-                        CPPUNIT_CHECK( rp->nKey == a[i] );
-                        CPPUNIT_CHECK( rp->nVal == a[i] * 2 );
-                    }
-                    rp.release();
-
-                    ep = l.extract_with( itm, other_less() );
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty() );
-                    CPPUNIT_CHECK( ep->nKey == a[i] );
-                    CPPUNIT_CHECK( ep->nVal == a[i] * 2 );
-                    ep.release();
-
-                    {
-                        rcu_lock lock;
-                        CPPUNIT_CHECK( !l.get_with( itm, other_less() ));
-                    }
-                    ep = l.extract_with( itm, other_less() );
-                    CPPUNIT_CHECK( !ep );
-                    CPPUNIT_CHECK( ep.empty() );
-                }
-                CPPUNIT_ASSERT( l.empty() );
-
-                {
-                    rcu_lock lock;
-                    CPPUNIT_CHECK( !l.get_with( other_item( 0 ), other_less() ));
-                }
-                CPPUNIT_CHECK( !l.extract_with( other_item(0), other_less() ));
-                CPPUNIT_CHECK( ep.empty() );
-
-                // Apply retired pointer
-                OrdList::gc::force_dispose();
-            }
-        }
-
-        template <class OrdList>
-        void test_nogc_int()
-        {
-            typedef typename OrdList::value_type    value_type;
-            {
-                value_type v1( 10, 50 );
-                value_type v2( 5, 25  );
-                value_type v3( 20, 100 );
-                {
-                    OrdList l;
-                    CPPUNIT_ASSERT( l.empty() );
-
-                    CPPUNIT_ASSERT( l.insert( v1 ))     ;   // true
-                    CPPUNIT_ASSERT( l.contains( v1.key() ) == &v1 );
-
-                    CPPUNIT_ASSERT( v1.s.nFindCall == 0 );
-                    CPPUNIT_ASSERT( l.find( v1.key(), find_functor() ));
-                    CPPUNIT_ASSERT( v1.s.nFindCall == 1 );
-
-                    CPPUNIT_ASSERT( l.contains( v2.key(), less<value_type>() ) == nullptr );
-                    CPPUNIT_ASSERT( !l.find_with( v3.key(), less<value_type>(), find_functor() ));
-                    CPPUNIT_ASSERT( !l.empty() );
-
-                    CPPUNIT_ASSERT( !l.insert( v1 ))    ;   // assertion "is_empty" is not raised since pNext is nullptr
-
-                    {
-                        value_type v( v1 );
-                        CPPUNIT_ASSERT( !l.insert( v )) ;   // false
-                    }
-
-                    std::pair<bool, bool> ret = l.update( v2, update_functor() );
-                    CPPUNIT_ASSERT( ret.first );
-                    CPPUNIT_ASSERT( ret.second );
-                    CPPUNIT_ASSERT( v2.s.nUpdateNewCall == 1 );
-                    CPPUNIT_ASSERT( v2.s.nUpdateExistsCall == 0 );
-
-                    //CPPUNIT_ASSERT( !l.insert( v2 ))    ;   // assertion "is_empty"
-
-                    CPPUNIT_ASSERT( l.contains( v1.key() ) == &v1 ) ;   // true
-
-                    CPPUNIT_ASSERT( v1.s.nFindCall == 1 );
-                    CPPUNIT_ASSERT( l.find( v1.key(), find_functor() ));
-                    CPPUNIT_ASSERT( v1.s.nFindCall == 2 );
-
-                    CPPUNIT_ASSERT( l.contains( v2.key() ) == &v2 );
-
-                    CPPUNIT_ASSERT( v2.s.nFindCall == 0 );
-                    CPPUNIT_ASSERT( l.find( v2.key(), find_functor() ));
-                    CPPUNIT_ASSERT( v2.s.nFindCall == 1 );
-
-                    CPPUNIT_ASSERT( !l.contains( v3.key() ));
-
-                    {
-                        value_type v( v2 );
-                        ret = l.update( v, update_functor() );
-
-                        CPPUNIT_ASSERT( ret.first );
-                        CPPUNIT_ASSERT( !ret.second );
-                        CPPUNIT_ASSERT( v2.s.nUpdateExistsCall == 1 );
-                        CPPUNIT_ASSERT( v.s.nUpdateExistsCall == 0 && v.s.nUpdateNewCall == 0 );
-                    }
-
-                    CPPUNIT_ASSERT( !l.empty() );
-
-                    CPPUNIT_ASSERT( l.insert( v3 ))     ;   // true
-                    CPPUNIT_ASSERT( l.contains( v3.key() ) == &v3 );
-
-                    CPPUNIT_ASSERT( v3.s.nFindCall == 0 );
-                    CPPUNIT_ASSERT( l.find( v3.key(), find_functor() ));
-                    CPPUNIT_ASSERT( v3.s.nFindCall == 1 );
-
-                    {
-                        typename OrdList::iterator it = l.begin();
-                        typename OrdList::const_iterator cit = l.cbegin();
-                        CPPUNIT_ASSERT( it != l.end() );
-                        CPPUNIT_ASSERT( it != l.cend() );
-                        CPPUNIT_ASSERT( cit != l.end() );
-                        CPPUNIT_ASSERT( cit != l.cend() );
-                        CPPUNIT_ASSERT( cit == it );
-
-                        CPPUNIT_ASSERT( it->nKey == v2.nKey );
-                        CPPUNIT_ASSERT( it->nVal == v2.nVal );
-                        CPPUNIT_ASSERT( ++it != l.end() );
-                        CPPUNIT_ASSERT( it->nKey == v1.nKey );
-                        CPPUNIT_ASSERT( it->nVal == v1.nVal );
-                        CPPUNIT_ASSERT( it++ != l.end() );
-                        CPPUNIT_ASSERT( it->nKey == v3.nKey );
-                        CPPUNIT_ASSERT( it->nVal == v3.nVal );
-                        CPPUNIT_ASSERT( it++ != l.end() );
-                        CPPUNIT_ASSERT( it == l.end() );
-                    }
-
-                    {
-                        OrdList const & lref = l;
-                        typename OrdList::const_iterator it = lref.begin();
-                        CPPUNIT_ASSERT( it != l.end() );
-                        CPPUNIT_ASSERT( it->nKey == v2.nKey );
-                        CPPUNIT_ASSERT( it->nVal == v2.nVal );
-                        CPPUNIT_ASSERT( ++it != lref.end() );
-                        CPPUNIT_ASSERT( it->nKey == v1.nKey );
-                        CPPUNIT_ASSERT( it->nVal == v1.nVal );
-                        CPPUNIT_ASSERT( it++ != l.end() );
-                        CPPUNIT_ASSERT( it->nKey == v3.nKey );
-                        CPPUNIT_ASSERT( it->nVal == v3.nVal );
-                        CPPUNIT_ASSERT( it++ != lref.end() );
-                        CPPUNIT_ASSERT( it == l.end() );
-                    }
-                }
-
-                // Disposer called on list destruction
-                CPPUNIT_ASSERT( v1.s.nDisposeCount == 1 );
-                CPPUNIT_ASSERT( v2.s.nDisposeCount == 1 );
-                CPPUNIT_ASSERT( v3.s.nDisposeCount == 1 );
-            }
-        }
-
-        void HP_base_cmp();
-        void HP_base_less();
-        void HP_base_cmpmix();
-        void HP_base_ic();
-        void HP_member_cmp();
-        void HP_member_less();
-        void HP_member_cmpmix();
-        void HP_member_ic();
-
-        void DHP_base_cmp();
-        void DHP_base_less();
-        void DHP_base_cmpmix();
-        void DHP_base_ic();
-        void DHP_member_cmp();
-        void DHP_member_less();
-        void DHP_member_cmpmix();
-        void DHP_member_ic();
-
-        void RCU_GPI_base_cmp();
-        void RCU_GPI_base_less();
-        void RCU_GPI_base_cmpmix();
-        void RCU_GPI_base_ic();
-        void RCU_GPI_member_cmp();
-        void RCU_GPI_member_less();
-        void RCU_GPI_member_cmpmix();
-        void RCU_GPI_member_ic();
-
-        void RCU_GPB_base_cmp();
-        void RCU_GPB_base_less();
-        void RCU_GPB_base_cmpmix();
-        void RCU_GPB_base_ic();
-        void RCU_GPB_member_cmp();
-        void RCU_GPB_member_less();
-        void RCU_GPB_member_cmpmix();
-        void RCU_GPB_member_ic();
-
-        void RCU_GPT_base_cmp();
-        void RCU_GPT_base_less();
-        void RCU_GPT_base_cmpmix();
-        void RCU_GPT_base_ic();
-        void RCU_GPT_member_cmp();
-        void RCU_GPT_member_less();
-        void RCU_GPT_member_cmpmix();
-        void RCU_GPT_member_ic();
-
-        void RCU_SHB_base_cmp();
-        void RCU_SHB_base_less();
-        void RCU_SHB_base_cmpmix();
-        void RCU_SHB_base_ic();
-        void RCU_SHB_member_cmp();
-        void RCU_SHB_member_less();
-        void RCU_SHB_member_cmpmix();
-        void RCU_SHB_member_ic();
-
-        void RCU_SHT_base_cmp();
-        void RCU_SHT_base_less();
-        void RCU_SHT_base_cmpmix();
-        void RCU_SHT_base_ic();
-        void RCU_SHT_member_cmp();
-        void RCU_SHT_member_less();
-        void RCU_SHT_member_cmpmix();
-        void RCU_SHT_member_ic();
-
-        void nogc_base_cmp();
-        void nogc_base_less();
-        void nogc_base_cmpmix();
-        void nogc_base_ic();
-        void nogc_member_cmp();
-        void nogc_member_less();
-        void nogc_member_cmpmix();
-        void nogc_member_ic();
-
-
-        CPPUNIT_TEST_SUITE(IntrusiveMichaelListHeaderTest)
-            CPPUNIT_TEST(HP_base_cmp)
-            CPPUNIT_TEST(HP_base_less)
-            CPPUNIT_TEST(HP_base_cmpmix)
-            CPPUNIT_TEST(HP_base_ic)
-            CPPUNIT_TEST(HP_member_cmp)
-            CPPUNIT_TEST(HP_member_less)
-            CPPUNIT_TEST(HP_member_cmpmix)
-            CPPUNIT_TEST(HP_member_ic)
-
-            CPPUNIT_TEST(DHP_base_cmp)
-            CPPUNIT_TEST(DHP_base_less)
-            CPPUNIT_TEST(DHP_base_cmpmix)
-            CPPUNIT_TEST(DHP_base_ic)
-            CPPUNIT_TEST(DHP_member_cmp)
-            CPPUNIT_TEST(DHP_member_less)
-            CPPUNIT_TEST(DHP_member_cmpmix)
-            CPPUNIT_TEST(DHP_member_ic)
-
-            CPPUNIT_TEST(RCU_GPI_base_cmp)
-            CPPUNIT_TEST(RCU_GPI_base_less)
-            CPPUNIT_TEST(RCU_GPI_base_cmpmix)
-            CPPUNIT_TEST(RCU_GPI_base_ic)
-            CPPUNIT_TEST(RCU_GPI_member_cmp)
-            CPPUNIT_TEST(RCU_GPI_member_less)
-            CPPUNIT_TEST(RCU_GPI_member_cmpmix)
-            CPPUNIT_TEST(RCU_GPI_member_ic)
-
-            CPPUNIT_TEST(RCU_GPB_base_cmp)
-            CPPUNIT_TEST(RCU_GPB_base_less)
-            CPPUNIT_TEST(RCU_GPB_base_cmpmix)
-            CPPUNIT_TEST(RCU_GPB_base_ic)
-            CPPUNIT_TEST(RCU_GPB_member_cmp)
-            CPPUNIT_TEST(RCU_GPB_member_less)
-            CPPUNIT_TEST(RCU_GPB_member_cmpmix)
-            CPPUNIT_TEST(RCU_GPB_member_ic)
-
-            CPPUNIT_TEST(RCU_GPT_base_cmp)
-            CPPUNIT_TEST(RCU_GPT_base_less)
-            CPPUNIT_TEST(RCU_GPT_base_cmpmix)
-            CPPUNIT_TEST(RCU_GPT_base_ic)
-            CPPUNIT_TEST(RCU_GPT_member_cmp)
-            CPPUNIT_TEST(RCU_GPT_member_less)
-            CPPUNIT_TEST(RCU_GPT_member_cmpmix)
-            CPPUNIT_TEST(RCU_GPT_member_ic)
-
-            CPPUNIT_TEST(nogc_base_cmp)
-            CPPUNIT_TEST(nogc_base_less)
-            CPPUNIT_TEST(nogc_base_cmpmix)
-            CPPUNIT_TEST(nogc_base_ic)
-            CPPUNIT_TEST(nogc_member_cmp)
-            CPPUNIT_TEST(nogc_member_less)
-            CPPUNIT_TEST(nogc_member_cmpmix)
-            CPPUNIT_TEST(nogc_member_ic)
-
-        CPPUNIT_TEST_SUITE_END()
-    };
-}   // namespace ordlist
-
-#endif // CDSTEST_HDR_INTRUSIVE_MICHAEL_H
diff --git a/tests/test-hdr/list/hdr_intrusive_michael_dhp.cpp b/tests/test-hdr/list/hdr_intrusive_michael_dhp.cpp
deleted file mode 100644 (file)
index 61581ba..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_intrusive_michael.h"
-#include <cds/intrusive/michael_list_dhp.h>
-
-namespace ordlist {
-    void IntrusiveMichaelListHeaderTest::DHP_base_cmp()
-    {
-        typedef base_int_item< cds::gc::DHP > item;
-        struct traits : public ci::michael_list::traits {
-            typedef ci::michael_list::base_hook< co::gc<cds::gc::DHP> > hook;
-            typedef cmp<item> compare;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::MichaelList< cds::gc::DHP, item, traits > list;
-        test_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::DHP_base_less()
-    {
-        typedef base_int_item< cds::gc::DHP > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::DHP_base_cmpmix()
-    {
-        typedef base_int_item< cds::gc::DHP > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::DHP_base_ic()
-    {
-        typedef base_int_item< cds::gc::DHP > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::DHP_member_cmp()
-    {
-        typedef member_int_item< cds::gc::DHP > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::DHP_member_less()
-    {
-        typedef member_int_item< cds::gc::DHP > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::DHP_member_cmpmix()
-    {
-        typedef member_int_item< cds::gc::DHP > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::DHP_member_ic()
-    {
-        typedef member_int_item< cds::gc::DHP > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-
-} // namespace ordlist
diff --git a/tests/test-hdr/list/hdr_intrusive_michael_hp.cpp b/tests/test-hdr/list/hdr_intrusive_michael_hp.cpp
deleted file mode 100644 (file)
index 11281e9..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_intrusive_michael.h"
-#include <cds/intrusive/michael_list_hp.h>
-
-namespace ordlist {
-    void IntrusiveMichaelListHeaderTest::HP_base_cmp()
-    {
-        typedef base_int_item< cds::gc::HP > item;
-        struct traits : public ci::michael_list::traits {
-            typedef ci::michael_list::base_hook< co::gc<cds::gc::HP> > hook;
-            typedef cmp<item> compare;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::MichaelList< cds::gc::HP, item, traits > list;
-        test_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::HP_base_less()
-    {
-        typedef base_int_item< cds::gc::HP > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::HP_base_cmpmix()
-    {
-        typedef base_int_item< cds::gc::HP > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::HP_base_ic()
-    {
-        typedef base_int_item< cds::gc::HP > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::HP_member_cmp()
-    {
-        typedef member_int_item< cds::gc::HP > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::HP_member_less()
-    {
-        typedef member_int_item< cds::gc::HP > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::HP_member_cmpmix()
-    {
-        typedef member_int_item< cds::gc::HP > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::HP_member_ic()
-    {
-        typedef member_int_item< cds::gc::HP > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_int<list>();
-    }
-}   // namespace ordlist
-
-CPPUNIT_TEST_SUITE_REGISTRATION(ordlist::IntrusiveMichaelListHeaderTest);
diff --git a/tests/test-hdr/list/hdr_intrusive_michael_list_rcu_gpb.cpp b/tests/test-hdr/list/hdr_intrusive_michael_list_rcu_gpb.cpp
deleted file mode 100644 (file)
index f4750dd..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_intrusive_michael.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/intrusive/michael_list_rcu.h>
-
-namespace ordlist {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> >    RCU;
-    }
-
-    void IntrusiveMichaelListHeaderTest::RCU_GPB_base_cmp()
-    {
-        typedef base_int_item< RCU > item;
-        struct traits : public ci::michael_list::traits
-        {
-            typedef ci::michael_list::base_hook< co::gc<RCU> > hook;
-            typedef cmp<item> compare;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::MichaelList< RCU, item, traits > list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_GPB_base_less()
-    {
-        typedef base_int_item< RCU > item;
-        struct traits : public ci::michael_list::traits
-        {
-            typedef ci::michael_list::base_hook< co::gc<RCU> > hook;
-            typedef IntrusiveMichaelListHeaderTest::less<item> less;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::MichaelList< RCU, item, traits > list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_GPB_base_cmpmix()
-    {
-        typedef base_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_GPB_base_ic()
-    {
-        typedef base_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_GPB_member_cmp()
-    {
-        typedef member_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_GPB_member_less()
-    {
-        typedef member_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_GPB_member_cmpmix()
-    {
-        typedef member_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_GPB_member_ic()
-    {
-        typedef member_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-
-}
diff --git a/tests/test-hdr/list/hdr_intrusive_michael_list_rcu_gpi.cpp b/tests/test-hdr/list/hdr_intrusive_michael_list_rcu_gpi.cpp
deleted file mode 100644 (file)
index 3853e26..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_intrusive_michael.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/intrusive/michael_list_rcu.h>
-
-namespace ordlist {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> >    RCU;
-    }
-
-    void IntrusiveMichaelListHeaderTest::RCU_GPI_base_cmp()
-    {
-        typedef base_int_item< RCU > item;
-        struct traits : public ci::michael_list::traits
-        {
-            typedef ci::michael_list::base_hook< co::gc<RCU> > hook;
-            typedef cmp<item> compare;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::MichaelList< RCU, item, traits > list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_GPI_base_less()
-    {
-        typedef base_int_item< RCU > item;
-        struct traits : public ci::michael_list::traits
-        {
-            typedef ci::michael_list::base_hook< co::gc<RCU> > hook;
-            typedef IntrusiveMichaelListHeaderTest::less<item> less;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::MichaelList< RCU, item, traits > list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_GPI_base_cmpmix()
-    {
-        typedef base_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_GPI_base_ic()
-    {
-        typedef base_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_GPI_member_cmp()
-    {
-        typedef member_int_item< RCU > item;
-        struct traits: public
-            ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        {};
-        typedef ci::MichaelList< RCU, item, traits > list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_GPI_member_less()
-    {
-        typedef member_int_item< RCU > item;
-        struct traits: public
-            ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        {};
-        typedef ci::MichaelList< RCU, item, traits > list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_GPI_member_cmpmix()
-    {
-        typedef member_int_item< RCU > item;
-        struct traits: public
-            ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        {};
-        typedef ci::MichaelList< RCU, item, traits > list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_GPI_member_ic()
-    {
-        typedef member_int_item< RCU > item;
-        struct traits: public
-            ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef ci::MichaelList< RCU, item, traits > list;
-        test_rcu_int<list>();
-    }
-} // namespace ordlist
diff --git a/tests/test-hdr/list/hdr_intrusive_michael_list_rcu_gpt.cpp b/tests/test-hdr/list/hdr_intrusive_michael_list_rcu_gpt.cpp
deleted file mode 100644 (file)
index c01b5f9..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_intrusive_michael.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/intrusive/michael_list_rcu.h>
-
-namespace ordlist {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> >    RCU;
-    }
-
-    void IntrusiveMichaelListHeaderTest::RCU_GPT_base_cmp()
-    {
-        typedef base_int_item< RCU > item;
-        struct traits : public ci::michael_list::traits
-        {
-            typedef ci::michael_list::base_hook< co::gc<RCU> > hook;
-            typedef cmp<item> compare;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::MichaelList< RCU, item, traits > list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_GPT_base_less()
-    {
-        typedef base_int_item< RCU > item;
-        struct traits : public ci::michael_list::traits
-        {
-            typedef ci::michael_list::base_hook< co::gc<RCU> > hook;
-            typedef IntrusiveMichaelListHeaderTest::less<item> less;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::MichaelList< RCU, item, traits > list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_GPT_base_cmpmix()
-    {
-        typedef base_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_GPT_base_ic()
-    {
-        typedef base_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_GPT_member_cmp()
-    {
-        typedef member_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_GPT_member_less()
-    {
-        typedef member_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_GPT_member_cmpmix()
-    {
-        typedef member_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_GPT_member_ic()
-    {
-        typedef member_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-    }
-
-}
diff --git a/tests/test-hdr/list/hdr_intrusive_michael_list_rcu_shb.cpp b/tests/test-hdr/list/hdr_intrusive_michael_list_rcu_shb.cpp
deleted file mode 100644 (file)
index edb95b9..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_intrusive_michael.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/intrusive/michael_list_rcu.h>
-
-namespace ordlist {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> >    RCU;
-    }
-#endif
-
-    void IntrusiveMichaelListHeaderTest::RCU_SHB_base_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< RCU > item;
-        struct traits : public ci::michael_list::traits
-        {
-            typedef ci::michael_list::base_hook< co::gc<RCU> > hook;
-            typedef cmp<item> compare;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::MichaelList< RCU, item, traits > list;
-        test_rcu_int<list>();
-#endif
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_SHB_base_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< RCU > item;
-        struct traits : public ci::michael_list::traits
-        {
-            typedef ci::michael_list::base_hook< co::gc<RCU> > hook;
-            typedef IntrusiveMichaelListHeaderTest::less<item> less;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::MichaelList< RCU, item, traits > list;
-        test_rcu_int<list>();
-#endif
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_SHB_base_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_SHB_base_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_SHB_member_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_SHB_member_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_SHB_member_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_SHB_member_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-
-}
diff --git a/tests/test-hdr/list/hdr_intrusive_michael_list_rcu_sht.cpp b/tests/test-hdr/list/hdr_intrusive_michael_list_rcu_sht.cpp
deleted file mode 100644 (file)
index 96a2424..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_intrusive_michael.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/intrusive/michael_list_rcu.h>
-
-namespace ordlist {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> >    RCU;
-    }
-#endif
-
-    void IntrusiveMichaelListHeaderTest::RCU_SHT_base_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< RCU > item;
-        struct traits : public ci::michael_list::traits
-        {
-            typedef ci::michael_list::base_hook< co::gc<RCU> > hook;
-            typedef cmp<item> compare;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::MichaelList< RCU, item, traits > list;
-        test_rcu_int<list>();
-#endif
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_SHT_base_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< RCU > item;
-        struct traits : public ci::michael_list::traits
-        {
-            typedef ci::michael_list::base_hook< co::gc<RCU> > hook;
-            typedef IntrusiveMichaelListHeaderTest::less<item> less;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::MichaelList< RCU, item, traits > list;
-        test_rcu_int<list>();
-#endif
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_SHT_base_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_SHT_base_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_SHT_member_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_SHT_member_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_SHT_member_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-    void IntrusiveMichaelListHeaderTest::RCU_SHT_member_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< RCU > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_rcu_int<list>();
-#endif
-    }
-
-}
diff --git a/tests/test-hdr/list/hdr_intrusive_michael_nogc.cpp b/tests/test-hdr/list/hdr_intrusive_michael_nogc.cpp
deleted file mode 100644 (file)
index 6626286..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_intrusive_michael.h"
-#include <cds/intrusive/michael_list_nogc.h>
-
-namespace ordlist {
-    void IntrusiveMichaelListHeaderTest::nogc_base_cmp()
-    {
-        typedef base_int_item< cds::gc::nogc > item;
-        struct traits : public ci::michael_list::traits
-        {
-            typedef ci::michael_list::base_hook< co::gc<cds::gc::nogc> > hook;
-            typedef cmp<item> compare;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::MichaelList< cds::gc::nogc, item, traits > list;
-        test_nogc_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::nogc_base_less()
-    {
-        typedef base_int_item< cds::gc::nogc > item;
-        struct traits : public ci::michael_list::traits
-        {
-            typedef ci::michael_list::base_hook< co::gc<cds::gc::nogc> > hook;
-            typedef IntrusiveMichaelListHeaderTest::less<item> less;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::MichaelList< cds::gc::nogc, item, traits > list;
-        test_nogc_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::nogc_base_cmpmix()
-    {
-        typedef base_int_item< cds::gc::nogc > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_nogc_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::nogc_base_ic()
-    {
-        typedef base_int_item< cds::gc::nogc > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_nogc_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::nogc_member_cmp()
-    {
-        typedef member_int_item< cds::gc::nogc > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_nogc_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::nogc_member_less()
-    {
-        typedef member_int_item< cds::gc::nogc > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_nogc_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::nogc_member_cmpmix()
-    {
-        typedef member_int_item< cds::gc::nogc > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    list;
-        test_nogc_int<list>();
-    }
-    void IntrusiveMichaelListHeaderTest::nogc_member_ic()
-    {
-        typedef member_int_item< cds::gc::nogc > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >    list;
-        test_nogc_int<list>();
-    }
-
-} // namespace ordlist
diff --git a/tests/test-hdr/list/hdr_lazy.h b/tests/test-hdr/list/hdr_lazy.h
deleted file mode 100644 (file)
index ddc3f9b..0000000
+++ /dev/null
@@ -1,976 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_LAZY_H
-#define CDSTEST_HDR_LAZY_H
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/container/details/lazy_list_base.h>
-
-namespace ordlist {
-    namespace cc = cds::container;
-    namespace co = cds::container::opt;
-
-    class LazyListTestHeader: public CppUnitMini::TestCase
-    {
-    public:
-        struct stat {
-            int nUpdateExistsCall;
-            int nUpdateNewCall;
-
-            stat()
-            {
-                nUpdateExistsCall
-                    = nUpdateNewCall
-                    = 0;
-            }
-        };
-
-        struct item {
-            int     nKey;
-            int     nVal;
-
-            stat    s;
-
-            item(int key)
-                : nKey( key )
-                , nVal( key * 2 )
-                , s()
-            {}
-
-            item(int key, int val)
-                : nKey( key )
-                , nVal(val)
-                , s()
-            {}
-
-            item( item const& v )
-                : nKey( v.nKey )
-                , nVal( v.nVal )
-                , s()
-            {}
-
-            int key() const
-            {
-                return nKey;
-            }
-        };
-
-        template <typename T>
-        struct lt
-        {
-            bool operator ()(const T& v1, const T& v2 ) const
-            {
-                return v1.key() < v2.key();
-            }
-
-            template <typename Q>
-            bool operator ()(const T& v1, const Q& v2 ) const
-            {
-                return v1.key() < v2;
-            }
-
-            template <typename Q>
-            bool operator ()(const Q& v1, const T& v2 ) const
-            {
-                return v1 < v2.key();
-            }
-        };
-
-        template <typename T>
-        struct equal_to
-        {
-            bool operator ()(const T& v1, const T& v2 ) const
-            {
-                return v1.key() == v2.key();
-            }
-
-            template <typename Q>
-            bool operator ()(const T& v1, const Q& v2 ) const
-            {
-                return v1.key() == v2;
-            }
-
-            template <typename Q>
-            bool operator ()(const Q& v1, const T& v2 ) const
-            {
-                return v1 == v2.key();
-            }
-        };
-
-        template <typename T>
-        struct cmp {
-            int operator ()(const T& v1, const T& v2 ) const
-            {
-                if ( v1.key() < v2.key() )
-                    return -1;
-                return v1.key() > v2.key() ? 1 : 0;
-            }
-
-            template <typename Q>
-            int operator ()(const T& v1, const Q& v2 ) const
-            {
-                if ( v1.key() < v2 )
-                    return -1;
-                return v1.key() > v2 ? 1 : 0;
-            }
-
-            template <typename Q>
-            int operator ()(const Q& v1, const T& v2 ) const
-            {
-                if ( v1 < v2.key() )
-                    return -1;
-                return v1 > v2.key() ? 1 : 0;
-            }
-        };
-
-        struct insert_functor {
-            void operator ()( item& i )
-            {
-                i.nVal = i.nKey * 1033;
-            }
-        };
-        struct dummy_insert_functor {
-            void operator ()( item& /*i*/ )
-            {
-                // This functor should not be called
-                TestCase::current_test()->error( "CPPUNIT_ASSERT", "dummy_insert_functor should not be called", __FILE__, __LINE__ );
-            }
-        };
-
-        static void insert_function( item& i )
-        {
-            i.nVal = i.nKey * 1024;
-        }
-        static void dummy_insert_function( item& /*i*/ )
-        {
-            // This function should not be called
-            TestCase::current_test()->error( "CPPUNIT_ASSERT", "dummy_insert_function should not be called", __FILE__, __LINE__ );
-        }
-
-        struct erase_functor {
-            unsigned int nEraseCall;
-
-            erase_functor()
-                : nEraseCall(0)
-            {}
-
-            void operator()( item const& /*i*/)
-            {
-                ++nEraseCall;
-            }
-        };
-
-        struct check_value {
-            unsigned int m_nMultiplier;
-
-            check_value( unsigned int nMultiplier )
-                : m_nMultiplier( nMultiplier )
-            {}
-
-            check_value( const check_value& s )
-                : m_nMultiplier( s.m_nMultiplier )
-            {}
-
-            void operator()( item& i, int )
-            {
-                CPPUNIT_ASSERT_CURRENT( int(i.nKey * m_nMultiplier) == i.nVal );
-            }
-        };
-
-        struct check_exact_value {
-            int m_nExpected;
-
-            check_exact_value( int nExpected )
-                : m_nExpected( nExpected )
-            {}
-
-            check_exact_value( check_exact_value const& s)
-                : m_nExpected( s.m_nExpected )
-            {}
-
-            void operator()( item& i, int )
-            {
-                CPPUNIT_ASSERT_CURRENT( i.nVal == m_nExpected );
-            }
-        };
-
-        struct dummy_check_value {
-            void operator()( item& /*i*/, int )
-            {
-                // This functor should not be called
-                TestCase::current_test()->error( "CPPUNIT_ASSERT", "dummy_check_value should not be called", __FILE__, __LINE__ );
-            }
-        };
-
-        struct update_functor {
-            void operator()( bool /*bNew*/, item& i, int /*n*/ )
-            {
-                i.nVal = i.nKey * 1024;
-            }
-        };
-
-        static void update_func( bool /*bNew*/, item& i, int n )
-        {
-            i.nVal = n * 1033;
-        }
-
-        struct other_item
-        {
-            int nKey;
-
-            other_item()
-            {}
-
-            other_item(int n)
-                : nKey(n)
-            {}
-        };
-
-        struct other_less
-        {
-            template <typename T1, typename T2>
-            bool operator()( T1 const& t1, T2 const& t2 ) const
-            {
-                return t1.nKey < t2.nKey;
-            }
-        };
-
-    protected:
-        template <class OrdList>
-        void test_with( OrdList& l )
-        {
-            typedef typename OrdList::value_type    value_type;
-
-            // The list should be empty
-            CPPUNIT_ASSERT( l.empty() );
-
-            // insert test
-            CPPUNIT_ASSERT( l.insert( 50 ) );
-            CPPUNIT_ASSERT( l.insert( item( 25 )) );
-            CPPUNIT_ASSERT( l.insert( item( 100 )) );
-
-            // insert failed - such key exists
-            CPPUNIT_ASSERT( !l.insert( 50 ) );
-            CPPUNIT_ASSERT( !l.insert( item( 100 )) );
-
-            // clear test
-
-            // The list should not be empty
-            CPPUNIT_ASSERT( !l.empty() );
-            l.clear();
-            // and now the list is empty
-            CPPUNIT_ASSERT( l.empty() );
-
-            // Test insert with functor
-
-            CPPUNIT_ASSERT( l.insert( 100, insert_functor() ) );
-            // passed by ref
-            {
-                insert_functor f;
-                CPPUNIT_ASSERT( l.insert( item( 25 ), std::ref( f ) ) );
-                CPPUNIT_ASSERT( !l.insert( item( 100 ), std::ref( f ) ) );
-            }
-            // Test insert with function
-            CPPUNIT_ASSERT( l.insert( 50, insert_function ));
-            CPPUNIT_ASSERT( !l.insert( 25, dummy_insert_function ));
-            CPPUNIT_ASSERT( !l.insert( 100, dummy_insert_functor() ));
-
-            // The list should not be empty
-            CPPUNIT_ASSERT( !l.empty() );
-
-            // Check inserted values
-            {
-                int i;
-                i = 100;
-
-                CPPUNIT_ASSERT( l.contains( 100 ));
-                CPPUNIT_ASSERT( l.find( i, check_value(1033) ));
-                {
-                    check_value f(1033);
-                    i = 25;
-                    CPPUNIT_ASSERT( l.contains( 25, lt<value_type>() ));
-                    CPPUNIT_ASSERT( l.find_with( i, lt<value_type>(), std::ref( f ) ) );
-                }
-                i = 50;
-                CPPUNIT_ASSERT( l.contains( 50 ));
-                CPPUNIT_ASSERT( l.find( i, check_value(1024) ));
-
-                i = 10;
-                CPPUNIT_ASSERT( !l.contains( 10, lt<value_type>() ));
-                CPPUNIT_ASSERT( !l.find_with( i, lt<value_type>(), dummy_check_value() ));
-                i = 75;
-                CPPUNIT_ASSERT( !l.contains( 75 ));
-                CPPUNIT_ASSERT( !l.find( i, dummy_check_value() ));
-                i = 150;
-                CPPUNIT_ASSERT( !l.contains( 150 ));
-                CPPUNIT_ASSERT( !l.find( i, dummy_check_value() ));
-            }
-
-            // The list should not be empty
-            CPPUNIT_ASSERT( !l.empty() );
-            l.clear();
-            // and now the list is empty
-            CPPUNIT_ASSERT( l.empty() );
-
-            // Update test
-            {
-                std::pair<bool, bool>   updateResult;
-                update_functor f;
-                updateResult = l.update( 100, update_functor() );
-                CPPUNIT_ASSERT( updateResult.first );
-                CPPUNIT_ASSERT( updateResult.second );
-
-                updateResult = l.update( 200, std::ref( f ) );
-                CPPUNIT_ASSERT( updateResult.first );
-                CPPUNIT_ASSERT( updateResult.second );
-
-                updateResult = l.update( 50, update_func );
-                CPPUNIT_ASSERT( updateResult.first );
-                CPPUNIT_ASSERT( updateResult.second );
-
-                int i;
-                i = 100;
-                CPPUNIT_ASSERT( l.find( i, check_value(1024) ));
-                i = 50;
-                CPPUNIT_ASSERT( l.find( i, check_value(1033) ));
-                i = 200;
-                CPPUNIT_ASSERT( l.find( i, check_value(1024) ));
-
-                // update existing key
-                updateResult = l.update( 200, update_func );
-                CPPUNIT_ASSERT( updateResult.first );
-                CPPUNIT_ASSERT( !updateResult.second );
-                i = 200;
-                CPPUNIT_ASSERT( l.find( i, check_value(1033) ));
-
-                updateResult = l.update( 50, update_functor() );
-                CPPUNIT_ASSERT( updateResult.first );
-                CPPUNIT_ASSERT( !updateResult.second );
-                i = 50;
-                CPPUNIT_ASSERT( l.find( i, check_value(1024) ));
-            }
-
-            // erase test (list: 50, 100, 200)
-            CPPUNIT_ASSERT( !l.empty() );
-            CPPUNIT_ASSERT( l.insert(160));
-            CPPUNIT_ASSERT( l.insert(250));
-            CPPUNIT_ASSERT( !l.empty() );
-
-            CPPUNIT_ASSERT( !l.erase( 150 ));
-
-            CPPUNIT_ASSERT( l.erase( 100 ));
-            CPPUNIT_ASSERT( !l.erase( 100 ));
-
-            CPPUNIT_ASSERT( l.erase_with( 200, lt<value_type>() ));
-            CPPUNIT_ASSERT( !l.erase_with( 200, lt<value_type>() ));
-
-            {
-                erase_functor ef;
-                CPPUNIT_ASSERT( ef.nEraseCall == 0 );
-                CPPUNIT_ASSERT( l.erase_with( 160, lt<value_type>(), std::ref(ef) ));
-                CPPUNIT_ASSERT( ef.nEraseCall == 1 );
-                CPPUNIT_ASSERT( !l.erase_with( 160, lt<value_type>(), std::ref(ef) ));
-                CPPUNIT_ASSERT( ef.nEraseCall == 1 );
-
-                CPPUNIT_ASSERT( l.erase( 250, std::ref(ef) ));
-                CPPUNIT_ASSERT( ef.nEraseCall == 2 );
-                CPPUNIT_ASSERT( !l.erase( 250, std::ref(ef) ));
-                CPPUNIT_ASSERT( ef.nEraseCall == 2 );
-            }
-
-            CPPUNIT_ASSERT( l.erase( 50 ));
-            CPPUNIT_ASSERT( !l.erase( 50 ));
-
-            CPPUNIT_ASSERT( l.empty() );
-
-            // clear empty list
-            l.clear();
-            CPPUNIT_ASSERT( l.empty() );
-
-            {
-                int i;
-                // insert test
-                CPPUNIT_ASSERT( l.emplace( 501 ) );
-                CPPUNIT_ASSERT( l.emplace( 251, 152 ));
-                CPPUNIT_ASSERT( l.emplace( item( 1001 )) );
-
-                // insert failed - such key exists
-                CPPUNIT_ASSERT( !l.emplace( 501, 2 ) );
-                CPPUNIT_ASSERT( !l.emplace( 251, 10) );
-
-                i = 501;
-                CPPUNIT_ASSERT( l.find( i, check_exact_value(501*2) ));
-                i = 251;
-                CPPUNIT_ASSERT( l.find( i, check_exact_value(152) ));
-                i = 1001;
-                CPPUNIT_ASSERT( l.find( i, check_exact_value(1001*2) ));
-
-                l.clear();
-                CPPUNIT_ASSERT( l.empty() );
-            }
-
-            // Iterator test
-            {
-                int nCount = 100;
-                for ( int i = 0; i < nCount; ++i )
-                    CPPUNIT_ASSERT( l.insert( i ) );
-
-                {
-                    typename OrdList::iterator it( l.begin() );
-                    typename OrdList::const_iterator cit( l.cbegin() );
-                    CPPUNIT_CHECK( it == cit );
-                    CPPUNIT_CHECK( it != l.end() );
-                    CPPUNIT_CHECK( it != l.cend() );
-                    CPPUNIT_CHECK( cit != l.end() );
-                    CPPUNIT_CHECK( cit != l.cend() );
-                    ++it;
-                    CPPUNIT_CHECK( it != cit );
-                    CPPUNIT_CHECK( it != l.end() );
-                    CPPUNIT_CHECK( it != l.cend() );
-                    CPPUNIT_CHECK( cit != l.end() );
-                    CPPUNIT_CHECK( cit != l.cend() );
-                    ++cit;
-                    CPPUNIT_CHECK( it == cit );
-                    CPPUNIT_CHECK( it != l.end() );
-                    CPPUNIT_CHECK( it != l.cend() );
-                    CPPUNIT_CHECK( cit != l.end() );
-                    CPPUNIT_CHECK( cit != l.cend() );
-                }
-
-                int i = 0;
-                for ( typename OrdList::iterator it = l.begin(), itEnd = l.end(); it != itEnd; ++it, ++i ) {
-                    it->nVal = i * 2;
-                    CPPUNIT_ASSERT( it->nKey == i );
-                }
-
-                // Check that we have visited all items
-                for ( int i = 0; i < nCount; ++i )
-                    CPPUNIT_ASSERT( l.find( i, check_value(2) ));
-
-                l.clear();
-                CPPUNIT_ASSERT( l.empty() );
-
-                // Const iterator
-                for ( int i = 0; i < nCount; ++i )
-                    CPPUNIT_ASSERT( l.insert(i) );
-
-                i = 0;
-                const OrdList& rl = l;
-                for ( typename OrdList::const_iterator it = rl.begin(), itEnd = rl.end(); it != itEnd; ++it, ++i ) {
-                    // it->nVal = i * 2    ;    // not!
-                    CPPUNIT_ASSERT( it->nKey == i );
-                }
-
-                // Check that we have visited all items
-                for ( int i = 0; i < nCount; ++i )
-                    CPPUNIT_ASSERT( l.find_with( i, lt<value_type>(), check_value(2) ));
-
-                l.clear();
-                CPPUNIT_ASSERT( l.empty() );
-            }
-        }
-
-        template <class OrdList>
-        void test()
-        {
-            typedef typename OrdList::guarded_ptr guarded_ptr;
-            typedef typename OrdList::value_type value_type;
-
-            OrdList l;
-            test_with( l );
-
-            static int const nLimit = 20;
-            int arr[nLimit];
-            for ( int i = 0; i < nLimit; i++ )
-                arr[i] = i;
-            shuffle( arr, arr + nLimit );
-
-            // extract/get
-            for ( int i = 0; i < nLimit; ++i )
-                l.insert( arr[i] );
-            {
-                guarded_ptr gp;
-                for ( int i = 0; i < nLimit; ++i ) {
-                    int nKey = arr[i];
-
-                    gp = l.get( nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-                    CPPUNIT_CHECK( gp->nVal == nKey * 2 );
-                    gp.release();
-
-                    gp = l.extract( nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-                    CPPUNIT_CHECK( gp->nVal == nKey*2 );
-                    gp.release();
-
-                    gp = l.get( nKey );
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_CHECK( gp.empty());
-                    CPPUNIT_CHECK( !l.extract( nKey));
-                    CPPUNIT_CHECK( gp.empty());
-                }
-                CPPUNIT_ASSERT( l.empty());
-                CPPUNIT_CHECK( !l.get(arr[0]));
-                CPPUNIT_CHECK( gp.empty());
-                CPPUNIT_CHECK( !l.extract( arr[0]));
-                CPPUNIT_CHECK( gp.empty());
-            }
-
-            // extract_with/get_with
-            for ( int i = 0; i < nLimit; ++i )
-                l.insert( arr[i] );
-            {
-                guarded_ptr gp;
-                for ( int i = 0; i < nLimit; ++i ) {
-                    int nKey = arr[i];
-                    other_item key( nKey );
-
-                    gp = l.get_with( key, other_less() );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-                    CPPUNIT_CHECK( gp->nVal == nKey * 2 );
-                    gp.release();
-
-                    gp = l.extract_with( key, other_less() );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-                    CPPUNIT_CHECK( gp->nVal == nKey*2 );
-                    gp.release();
-
-                    gp = l.get_with( key, other_less() );
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_CHECK( gp.empty());
-                    CPPUNIT_CHECK( !l.extract_with( key, other_less()));
-                    CPPUNIT_CHECK( gp.empty());
-                }
-                CPPUNIT_ASSERT( l.empty());
-                CPPUNIT_CHECK( !l.get_with(other_item(arr[0]), other_less()));
-                CPPUNIT_CHECK( gp.empty());
-                CPPUNIT_CHECK( !l.extract_with( other_item(arr[0]), other_less()));
-                CPPUNIT_CHECK( gp.empty());
-            }
-
-        }
-
-        template <class OrdList>
-        void test_rcu()
-        {
-            OrdList l;
-            test_with( l );
-
-            static int const nLimit = 20;
-
-            typedef typename OrdList::rcu_lock rcu_lock;
-            typedef typename OrdList::value_type value_type;
-            typedef typename OrdList::gc rcu_type;
-
-            {
-                int a[nLimit];
-                for (int i = 0; i < nLimit; ++i)
-                    a[i]=i;
-                shuffle( a, a + nLimit );
-
-                // extract/get
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( l.insert( a[i] ) );
-
-                typename OrdList::exempt_ptr ep;
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    {
-                        rcu_lock lock;
-                        value_type * pGet = l.get( a[i] );
-                        CPPUNIT_ASSERT( pGet != nullptr );
-                        CPPUNIT_CHECK( pGet->nKey == a[i] );
-                        CPPUNIT_CHECK( pGet->nVal == a[i] * 2 );
-
-                        ep = l.extract( a[i] );
-                        CPPUNIT_ASSERT( ep );
-                        CPPUNIT_ASSERT( !ep.empty() );
-                        CPPUNIT_CHECK( ep->nKey == a[i] );
-                        CPPUNIT_CHECK( (*ep).nVal == a[i] * 2 );
-                    }
-                    ep.release();
-                    {
-                        rcu_lock lock;
-                        CPPUNIT_CHECK( l.get( a[i] ) == nullptr );
-                        CPPUNIT_CHECK( !l.extract( a[i] ));
-                    }
-                }
-                CPPUNIT_ASSERT( l.empty() );
-
-                {
-                    rcu_lock lock;
-                    CPPUNIT_CHECK( l.get( a[0] ) == nullptr );
-                    ep = l.extract( a[0] );
-                    CPPUNIT_CHECK( !ep );
-                    CPPUNIT_CHECK( ep.empty() );
-                }
-
-                // extract_with/get_with
-                for ( int i = 0; i < nLimit; ++i ) {
-                    CPPUNIT_ASSERT( l.insert( a[i] ) );
-                }
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    other_item itm( a[i] );
-                    {
-                        rcu_lock lock;
-                        value_type * pGet = l.get_with( itm, other_less() );
-                        CPPUNIT_ASSERT( pGet != nullptr );
-                        CPPUNIT_CHECK( pGet->nKey == a[i] );
-                        CPPUNIT_CHECK( pGet->nVal == a[i] * 2 );
-
-                        ep = l.extract_with( itm, other_less() );
-                        CPPUNIT_ASSERT( ep );
-                        CPPUNIT_ASSERT( !ep.empty() );
-                        CPPUNIT_CHECK( ep->nKey == a[i] );
-                        CPPUNIT_CHECK( ep->nVal == a[i] * 2 );
-                    }
-                    ep.release();
-                    {
-                        rcu_lock lock;
-                        CPPUNIT_CHECK( l.get_with( itm, other_less() ) == nullptr );
-                        ep = l.extract_with( itm, other_less() );
-                        CPPUNIT_CHECK( !ep );
-                        CPPUNIT_CHECK( ep.empty() );
-                    }
-                }
-                CPPUNIT_ASSERT( l.empty() );
-
-                {
-                    rcu_lock lock;
-                    CPPUNIT_CHECK( l.get_with( other_item( 0 ), other_less() ) == nullptr );
-                    CPPUNIT_CHECK( !l.extract_with( other_item(0), other_less() ));
-                    CPPUNIT_CHECK( ep.empty() );
-                }
-            }
-        }
-
-        template <class OrdList>
-        void nogc_test()
-        {
-            typedef OrdList list;
-            typedef typename list::value_type    value_type;
-            typedef std::pair<typename list::iterator, bool> update_result;
-
-            typename list::iterator it;
-
-            list l;
-            CPPUNIT_ASSERT( l.empty() );
-            CPPUNIT_ASSERT( l.insert(50) != l.end() );
-            CPPUNIT_ASSERT( !l.empty() );
-
-            update_result eres = l.update( item(100, 33) );
-            CPPUNIT_ASSERT( eres.second );
-            CPPUNIT_ASSERT( eres.first != l.end() );
-            CPPUNIT_ASSERT( l.insert( item(150) ) != l.end() );
-
-            CPPUNIT_ASSERT( l.insert(100) == l.end() );
-            eres = l.update( item(50, 33) );
-            CPPUNIT_ASSERT( !eres.second );
-            CPPUNIT_ASSERT( eres.first->nVal == eres.first->nKey * 2 );
-            eres.first->nVal = 63;
-
-            it = l.contains( 33 );
-            CPPUNIT_ASSERT( it == l.end() );
-
-            it = l.contains( 50 );
-            CPPUNIT_ASSERT( it != l.end() );
-            CPPUNIT_ASSERT( it->nKey == 50 );
-            CPPUNIT_ASSERT( it->nVal == 63 );
-
-            it = l.contains( 100 );
-            CPPUNIT_ASSERT( it != l.end() );
-            CPPUNIT_ASSERT( it->nKey == 100 );
-            CPPUNIT_ASSERT( it->nVal == 33 );
-
-            it = l.contains( 150, lt<value_type>() );
-            CPPUNIT_ASSERT( it != l.end() );
-            CPPUNIT_ASSERT( it->nKey == 150 );
-            CPPUNIT_ASSERT( it->nVal == it->nKey * 2 );
-
-            CPPUNIT_ASSERT( !l.empty() );
-            l.clear();
-            CPPUNIT_ASSERT( l.empty() );
-
-            // insert test
-            CPPUNIT_ASSERT( l.emplace( 501 ) != l.end());
-            CPPUNIT_ASSERT( l.emplace( 251, 152 ) != l.end());
-            CPPUNIT_ASSERT( l.emplace( item( 1001 )) != l.end());
-
-            // insert failed - such key exists
-            CPPUNIT_ASSERT( l.emplace( 501, 2 ) == l.end());
-            CPPUNIT_ASSERT( l.emplace( 251, 10) == l.end());
-
-            it = l.contains( 501 );
-            CPPUNIT_ASSERT( it != l.end() );
-            CPPUNIT_ASSERT( it->nKey == 501 );
-            CPPUNIT_ASSERT( it->nVal == 501 * 2 );
-
-            it = l.contains( 251, lt<value_type>() );
-            CPPUNIT_ASSERT( it != l.end() );
-            CPPUNIT_ASSERT( it->nKey == 251 );
-            CPPUNIT_ASSERT( it->nVal == 152 );
-
-            it = l.contains( 1001 );
-            CPPUNIT_ASSERT( it != l.end() );
-            CPPUNIT_ASSERT( it->nKey == 1001 );
-            CPPUNIT_ASSERT( it->nVal == 1001 * 2 );
-
-            {
-                typename OrdList::iterator it( l.begin() );
-                typename OrdList::const_iterator cit( l.cbegin() );
-                CPPUNIT_CHECK( it == cit );
-                CPPUNIT_CHECK( it != l.end() );
-                CPPUNIT_CHECK( it != l.cend() );
-                CPPUNIT_CHECK( cit != l.end() );
-                CPPUNIT_CHECK( cit != l.cend() );
-                ++it;
-                CPPUNIT_CHECK( it != cit );
-                CPPUNIT_CHECK( it != l.end() );
-                CPPUNIT_CHECK( it != l.cend() );
-                CPPUNIT_CHECK( cit != l.end() );
-                CPPUNIT_CHECK( cit != l.cend() );
-                ++cit;
-                CPPUNIT_CHECK( it == cit );
-                CPPUNIT_CHECK( it != l.end() );
-                CPPUNIT_CHECK( it != l.cend() );
-                CPPUNIT_CHECK( cit != l.end() );
-                CPPUNIT_CHECK( cit != l.cend() );
-            }
-
-
-            l.clear();
-            CPPUNIT_ASSERT( l.empty() );
-        }
-
-        template <class UnordList>
-        void nogc_unord_test()
-        {
-            typedef UnordList list;
-            typedef typename list::value_type    value_type;
-            typedef std::pair<typename list::iterator, bool> update_result;
-
-            typename list::iterator it;
-
-            list l;
-            CPPUNIT_ASSERT( l.empty() );
-            CPPUNIT_ASSERT( l.insert(50) != l.end() );
-            CPPUNIT_ASSERT( !l.empty() );
-
-            update_result eres = l.update( item(100, 33) );
-            CPPUNIT_ASSERT( eres.second );
-            CPPUNIT_ASSERT( eres.first != l.end() );
-            CPPUNIT_ASSERT( l.insert( item(150) ) != l.end() );
-
-            CPPUNIT_ASSERT( l.insert(100) == l.end() );
-            eres = l.update( item(50, 33) );
-            CPPUNIT_ASSERT( !eres.second );
-            CPPUNIT_ASSERT( eres.first->nVal == eres.first->nKey * 2 );
-            eres.first->nVal = 63;
-
-            it = l.contains( 33 );
-            CPPUNIT_ASSERT( it == l.end() );
-
-            it = l.contains( 50 );
-            CPPUNIT_ASSERT( it != l.end() );
-            CPPUNIT_ASSERT( it->nKey == 50 );
-            CPPUNIT_ASSERT( it->nVal == 63 );
-
-            it = l.contains( 100 );
-            CPPUNIT_ASSERT( it != l.end() );
-            CPPUNIT_ASSERT( it->nKey == 100 );
-            CPPUNIT_ASSERT( it->nVal == 33 );
-
-            it = l.contains( 150, equal_to<value_type>() );
-            CPPUNIT_ASSERT( it != l.end() );
-            CPPUNIT_ASSERT( it->nKey == 150 );
-            CPPUNIT_ASSERT( it->nVal == it->nKey * 2 );
-
-            CPPUNIT_ASSERT( !l.empty() );
-            l.clear();
-            CPPUNIT_ASSERT( l.empty() );
-
-            // insert test
-            CPPUNIT_ASSERT( l.emplace( 501 ) != l.end());
-            CPPUNIT_ASSERT( l.emplace( 251, 152 ) != l.end());
-            CPPUNIT_ASSERT( l.emplace( item( 1001 )) != l.end());
-
-            // insert failed - such key exists
-            CPPUNIT_ASSERT( l.emplace( 501, 2 ) == l.end());
-            CPPUNIT_ASSERT( l.emplace( 251, 10) == l.end());
-
-            it = l.contains( 501 );
-            CPPUNIT_ASSERT( it != l.end() );
-            CPPUNIT_ASSERT( it->nKey == 501 );
-            CPPUNIT_ASSERT( it->nVal == 501 * 2 );
-
-            it = l.contains( 1001 );
-            CPPUNIT_ASSERT( it != l.end() );
-            CPPUNIT_ASSERT( it->nKey == 1001 );
-            CPPUNIT_ASSERT( it->nVal == 1001 * 2 );
-
-            {
-                typename UnordList::iterator it( l.begin() );
-                typename UnordList::const_iterator cit( l.cbegin() );
-                CPPUNIT_CHECK( it == cit );
-                CPPUNIT_CHECK( it != l.end() );
-                CPPUNIT_CHECK( it != l.cend() );
-                CPPUNIT_CHECK( cit != l.end() );
-                CPPUNIT_CHECK( cit != l.cend() );
-                ++it;
-                CPPUNIT_CHECK( it != cit );
-                CPPUNIT_CHECK( it != l.end() );
-                CPPUNIT_CHECK( it != l.cend() );
-                CPPUNIT_CHECK( cit != l.end() );
-                CPPUNIT_CHECK( cit != l.cend() );
-                ++cit;
-                CPPUNIT_CHECK( it == cit );
-                CPPUNIT_CHECK( it != l.end() );
-                CPPUNIT_CHECK( it != l.cend() );
-                CPPUNIT_CHECK( cit != l.end() );
-                CPPUNIT_CHECK( cit != l.cend() );
-            }
-
-
-            l.clear();
-            CPPUNIT_ASSERT( l.empty() );
-        }
-
-        void HP_cmp();
-        void HP_less();
-        void HP_cmpmix();
-        void HP_ic();
-
-        void DHP_cmp();
-        void DHP_less();
-        void DHP_cmpmix();
-        void DHP_ic();
-
-        void RCU_GPI_cmp();
-        void RCU_GPI_less();
-        void RCU_GPI_cmpmix();
-        void RCU_GPI_ic();
-
-        void RCU_GPB_cmp();
-        void RCU_GPB_less();
-        void RCU_GPB_cmpmix();
-        void RCU_GPB_ic();
-
-        void RCU_GPT_cmp();
-        void RCU_GPT_less();
-        void RCU_GPT_cmpmix();
-        void RCU_GPT_ic();
-
-        void RCU_SHB_cmp();
-        void RCU_SHB_less();
-        void RCU_SHB_cmpmix();
-        void RCU_SHB_ic();
-
-        void RCU_SHT_cmp();
-        void RCU_SHT_less();
-        void RCU_SHT_cmpmix();
-        void RCU_SHT_ic();
-
-        void NOGC_cmp();
-        void NOGC_less();
-        void NOGC_cmpmix();
-        void NOGC_ic();
-
-        void NOGC_cmp_unord();
-        void NOGC_less_unord();
-        void NOGC_equal_to_unord();
-        void NOGC_cmpmix_unord();
-        void NOGC_equal_to_mix_unord();
-        void NOGC_ic_unord();
-
-
-        CPPUNIT_TEST_SUITE(LazyListTestHeader)
-            CPPUNIT_TEST(HP_cmp)
-            CPPUNIT_TEST(HP_less)
-            CPPUNIT_TEST(HP_cmpmix)
-            CPPUNIT_TEST(HP_ic)
-
-            CPPUNIT_TEST(DHP_cmp)
-            CPPUNIT_TEST(DHP_less)
-            CPPUNIT_TEST(DHP_cmpmix)
-            CPPUNIT_TEST(DHP_ic)
-
-            CPPUNIT_TEST(RCU_GPI_cmp)
-            CPPUNIT_TEST(RCU_GPI_less)
-            CPPUNIT_TEST(RCU_GPI_cmpmix)
-            CPPUNIT_TEST(RCU_GPI_ic)
-
-            CPPUNIT_TEST(RCU_GPB_cmp)
-            CPPUNIT_TEST(RCU_GPB_less)
-            CPPUNIT_TEST(RCU_GPB_cmpmix)
-            CPPUNIT_TEST(RCU_GPB_ic)
-
-            CPPUNIT_TEST(RCU_GPT_cmp)
-            CPPUNIT_TEST(RCU_GPT_less)
-            CPPUNIT_TEST(RCU_GPT_cmpmix)
-            CPPUNIT_TEST(RCU_GPT_ic)
-
-            CPPUNIT_TEST(RCU_SHB_cmp)
-            CPPUNIT_TEST(RCU_SHB_less)
-            CPPUNIT_TEST(RCU_SHB_cmpmix)
-            CPPUNIT_TEST(RCU_SHB_ic)
-
-            CPPUNIT_TEST(RCU_SHT_cmp)
-            CPPUNIT_TEST(RCU_SHT_less)
-            CPPUNIT_TEST(RCU_SHT_cmpmix)
-            CPPUNIT_TEST(RCU_SHT_ic)
-
-            CPPUNIT_TEST(NOGC_cmp)
-            CPPUNIT_TEST(NOGC_less)
-            CPPUNIT_TEST(NOGC_cmpmix)
-            CPPUNIT_TEST(NOGC_ic)
-
-            CPPUNIT_TEST(NOGC_cmp_unord)
-            CPPUNIT_TEST(NOGC_less_unord)
-            CPPUNIT_TEST(NOGC_equal_to_unord)
-            CPPUNIT_TEST(NOGC_cmpmix_unord)
-            CPPUNIT_TEST(NOGC_equal_to_mix_unord)
-            CPPUNIT_TEST(NOGC_ic_unord)
-
-        CPPUNIT_TEST_SUITE_END()
-    };
-
-}   // namespace ordlist
-
-#endif // #ifndef CDSTEST_HDR_LAZY_H
diff --git a/tests/test-hdr/list/hdr_lazy_dhp.cpp b/tests/test-hdr/list/hdr_lazy_dhp.cpp
deleted file mode 100644 (file)
index 2293719..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_lazy.h"
-#include <cds/container/lazy_list_dhp.h>
-
-namespace ordlist {
-    namespace {
-        struct DHP_cmp_traits: public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::cmp<LazyListTestHeader::item>   compare;
-        };
-    }
-    void LazyListTestHeader::DHP_cmp()
-    {
-        // traits-based version
-        typedef cc::LazyList< cds::gc::DHP, item, DHP_cmp_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< cds::gc::DHP, item,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<item> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct DHP_less_traits: public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>   less;
-        };
-    }
-    void LazyListTestHeader::DHP_less()
-    {
-        // traits-based version
-        typedef cc::LazyList< cds::gc::DHP, item, DHP_less_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< cds::gc::DHP, item,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct DHP_cmpmix_traits: public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::cmp<LazyListTestHeader::item>   compare;
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>  less;
-        };
-    }
-    void LazyListTestHeader::DHP_cmpmix()
-    {
-        // traits-based version
-        typedef cc::LazyList< cds::gc::DHP, item, DHP_cmpmix_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< cds::gc::DHP, item,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<item> >
-                ,cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct DHP_ic_traits: public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void LazyListTestHeader::DHP_ic()
-    {
-        // traits-based version
-        typedef cc::LazyList< cds::gc::DHP, item, DHP_ic_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< cds::gc::DHP, item,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<item> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-}   // namespace ordlist
-
diff --git a/tests/test-hdr/list/hdr_lazy_hp.cpp b/tests/test-hdr/list/hdr_lazy_hp.cpp
deleted file mode 100644 (file)
index dbb909e..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_lazy.h"
-#include <cds/container/lazy_list_hp.h>
-
-namespace ordlist {
-    namespace {
-        struct HP_cmp_traits: public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::cmp<LazyListTestHeader::item> compare;
-        };
-
-    }
-    void LazyListTestHeader::HP_cmp()
-    {
-        // traits-based version
-        typedef cc::LazyList< cds::gc::HP, item, HP_cmp_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< cds::gc::HP, item,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<item> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct HP_less_traits: public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>   less;
-        };
-    }
-    void LazyListTestHeader::HP_less()
-    {
-        // traits-based version
-        typedef cc::LazyList< cds::gc::HP, item, HP_less_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< cds::gc::HP, item,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct HP_cmpmix_traits: public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::cmp<LazyListTestHeader::item>   compare;
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>  less;
-        };
-    }
-    void LazyListTestHeader::HP_cmpmix()
-    {
-        // traits-based version
-        typedef cc::LazyList< cds::gc::HP, item, HP_cmpmix_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< cds::gc::HP, item,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<item> >
-                ,cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct HP_ic_traits: public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void LazyListTestHeader::HP_ic()
-    {
-        // traits-based version
-        typedef cc::LazyList< cds::gc::HP, item, HP_ic_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< cds::gc::HP, item,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<item> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-}   // namespace ordlist
-
-CPPUNIT_TEST_SUITE_REGISTRATION(ordlist::LazyListTestHeader);
diff --git a/tests/test-hdr/list/hdr_lazy_kv.h b/tests/test-hdr/list/hdr_lazy_kv.h
deleted file mode 100644 (file)
index 8833a20..0000000
+++ /dev/null
@@ -1,961 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_LAZY_KV_H
-#define CDSTEST_HDR_LAZY_KV_H
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/container/details/lazy_list_base.h>
-
-namespace ordlist {
-    namespace cc = cds::container;
-    namespace co = cds::container::opt;
-
-    class LazyKVListTestHeader: public CppUnitMini::TestCase
-    {
-    public:
-        typedef int key_type;
-        struct value_type {
-            int m_val;
-
-            value_type()
-                : m_val(0)
-            {}
-
-            value_type( int n )
-                : m_val( n )
-            {}
-        };
-
-        template <typename T>
-        struct lt
-        {
-            bool operator ()(const T& v1, const T& v2 ) const
-            {
-                return v1 < v2;
-            }
-        };
-
-        template <typename T>
-        struct cmp {
-            int operator ()(const T& v1, const T& v2 ) const
-            {
-                if ( v1 < v2 )
-                    return -1;
-                return v1 > v2 ? 1 : 0;
-            }
-        };
-
-        template <typename T>
-        struct eq {
-            bool operator ()(const T& v1, const T& v2 ) const
-            {
-                return v1 == v2;
-            }
-        };
-
-        struct check_value {
-            int     m_nExpected;
-
-            check_value( int nExpected )
-                : m_nExpected( nExpected )
-            {}
-
-            template <typename T>
-            void operator ()( T& pair )
-            {
-                CPPUNIT_ASSERT_CURRENT( pair.second.m_val == m_nExpected );
-            }
-        };
-
-        struct insert_functor {
-            template <typename T>
-            void operator()( T& pair )
-            {
-                pair.second.m_val = pair.first * 10;
-            }
-        };
-
-        struct update_functor {
-            template <typename T>
-            void operator()( bool /*bNew*/, T& pair )
-            {
-                pair.second.m_val = pair.first * 50;
-            }
-        };
-
-        struct erase_functor {
-            int     nKey;
-            int     nVal;
-
-            erase_functor()
-                : nKey(0)
-                , nVal(0)
-            {}
-
-            template <typename T>
-            void operator()( T& i )
-            {
-                nKey = i.first;
-                nVal = i.second.m_val;
-            }
-        };
-
-        typedef float other_key;
-        struct other_less {
-            bool operator()( float f, int i ) const
-            {
-                return int(f) < i;
-            }
-            bool operator()( int i, float f ) const
-            {
-                return i < int(f);
-            }
-        };
-
-    protected:
-        template <class OrdList>
-        void test_with( OrdList& l)
-        {
-            typedef typename OrdList::value_type    value_type;
-
-            typename OrdList::iterator itTest;
-            typename OrdList::const_iterator citTest;
-
-            CPPUNIT_ASSERT( l.empty() );
-
-            // insert / find test
-            CPPUNIT_ASSERT( !l.contains( 100 ));
-            CPPUNIT_ASSERT( l.insert( 100 ));
-            CPPUNIT_ASSERT( !l.empty() );
-            CPPUNIT_ASSERT( l.contains( 100 ));
-
-            check_value chk(0);
-            CPPUNIT_ASSERT( l.find( 100, std::ref( chk ) ) );
-
-            CPPUNIT_ASSERT( !l.contains( 50, lt<key_type>() ));
-            CPPUNIT_ASSERT( l.insert( 50, 500 ));
-            CPPUNIT_ASSERT( l.contains( 50, lt<key_type>() ));
-            CPPUNIT_ASSERT( !l.insert( 50, 5 ));
-            chk.m_nExpected = 500;
-            CPPUNIT_ASSERT( l.find( 50, std::ref( chk ) ) );
-            chk.m_nExpected = 0;
-            CPPUNIT_ASSERT( l.find( 100, std::ref( chk ) ) );
-            CPPUNIT_ASSERT( !l.empty() );
-
-            CPPUNIT_ASSERT( !l.contains( 150 ));
-            CPPUNIT_ASSERT( l.insert_with( 150, insert_functor() ));
-            CPPUNIT_ASSERT( l.contains( 150 ));
-            chk.m_nExpected = 1500;
-            CPPUNIT_ASSERT( l.find_with( 150, lt<key_type>(), std::ref( chk ) ) );
-            chk.m_nExpected = 0;
-            CPPUNIT_ASSERT( l.find( 100, std::ref( chk ) ) );
-            chk.m_nExpected = 500;
-            CPPUNIT_ASSERT( l.find( 50, std::ref( chk ) ) );
-            CPPUNIT_ASSERT( !l.empty() );
-
-            // erase test
-
-            CPPUNIT_ASSERT( !l.erase( 500 ));
-            CPPUNIT_ASSERT( !l.empty() );
-
-            CPPUNIT_ASSERT( l.contains( 50 ));
-            {
-                erase_functor ef;
-                l.erase( 50, std::ref( ef ) );
-                CPPUNIT_ASSERT( ef.nKey == 50 );
-                CPPUNIT_ASSERT( ef.nVal == 500 );
-            }
-            CPPUNIT_ASSERT( !l.contains( 50 ));
-
-            // update test
-            std::pair<bool, bool> bUpdateResult;
-            bUpdateResult = l.update( 100, update_functor() );
-            CPPUNIT_ASSERT( bUpdateResult.first );
-            CPPUNIT_ASSERT( !bUpdateResult.second );
-            chk.m_nExpected = 5000;
-            CPPUNIT_ASSERT( l.find( 100, std::ref( chk ) ) );
-
-            {
-                update_functor ef;
-                bUpdateResult = l.update( 50, std::ref( ef ) );
-            }
-            CPPUNIT_ASSERT( bUpdateResult.first );
-            CPPUNIT_ASSERT( bUpdateResult.second );
-            chk.m_nExpected = 2500;
-            CPPUNIT_ASSERT( l.find( 50, std::ref( chk ) ) );
-
-            // erase test
-            CPPUNIT_ASSERT( !l.empty() );
-            CPPUNIT_ASSERT( l.insert_with( 200, insert_functor() ));
-            CPPUNIT_ASSERT( l.insert( 25 ));
-            CPPUNIT_ASSERT( l.erase( 100 ));
-            CPPUNIT_ASSERT( l.erase( 150 ));
-            {
-                erase_functor ef;
-                CPPUNIT_ASSERT( l.erase_with( 200, lt<key_type>(), std::ref(ef)) );
-                CPPUNIT_ASSERT( ef.nKey == 200 );
-                CPPUNIT_ASSERT( ef.nVal == 2000 );
-            }
-            CPPUNIT_ASSERT( l.erase_with( 25, lt<key_type>()))
-            CPPUNIT_ASSERT( l.erase( 50 ));
-            CPPUNIT_ASSERT( l.empty() );
-
-            // clear empty list
-            l.clear();
-            CPPUNIT_ASSERT( l.empty() );
-
-            // insert test
-            CPPUNIT_ASSERT( l.emplace( 501 ) );
-            CPPUNIT_ASSERT( l.emplace( 251, 152 ));
-
-            // insert failed - such key exists
-            CPPUNIT_ASSERT( !l.emplace( 501, 2 ) );
-            CPPUNIT_ASSERT( !l.emplace( 251, 10) );
-
-            check_value cv(0);
-            CPPUNIT_ASSERT( l.find( 501, std::ref(cv) ));
-            cv.m_nExpected = 152;
-            CPPUNIT_ASSERT( l.find( 251, std::ref(cv) ));
-
-            l.clear();
-            CPPUNIT_ASSERT( l.empty() );
-
-            // Iterator test
-            {
-                int nCount = 100;
-                for ( int i = 0; i < nCount; ++i )
-                    CPPUNIT_ASSERT( l.insert(i, i * 2 ) );
-
-                {
-                    typename OrdList::iterator it( l.begin() );
-                    typename OrdList::const_iterator cit( l.cbegin() );
-                    CPPUNIT_CHECK( it == cit );
-                    CPPUNIT_CHECK( it != l.end() );
-                    CPPUNIT_CHECK( it != l.cend() );
-                    CPPUNIT_CHECK( cit != l.end() );
-                    CPPUNIT_CHECK( cit != l.cend() );
-                    ++it;
-                    CPPUNIT_CHECK( it != cit );
-                    CPPUNIT_CHECK( it != l.end() );
-                    CPPUNIT_CHECK( it != l.cend() );
-                    CPPUNIT_CHECK( cit != l.end() );
-                    CPPUNIT_CHECK( cit != l.cend() );
-                    ++cit;
-                    CPPUNIT_CHECK( it == cit );
-                    CPPUNIT_CHECK( it != l.end() );
-                    CPPUNIT_CHECK( it != l.cend() );
-                    CPPUNIT_CHECK( cit != l.end() );
-                    CPPUNIT_CHECK( cit != l.cend() );
-                }
-
-                int i = 0;
-                for ( typename OrdList::iterator it = l.begin(), itEnd = l.end(); it != itEnd; ++it, ++i ) {
-                    CPPUNIT_ASSERT( it.key() == i );
-                    CPPUNIT_ASSERT( it.val().m_val == i * 2 );
-                    it.val().m_val = i * 3;
-                }
-
-                // Check that we have visited all items
-                for ( int i = 0; i < nCount; ++i ) {
-                    chk.m_nExpected = i * 3;
-                    CPPUNIT_ASSERT( l.find( i, std::ref( chk ) ) );
-                }
-
-                l.clear();
-                CPPUNIT_ASSERT( l.empty() );
-
-                // Const iterator
-                for ( int i = 0; i < nCount; ++i )
-                    CPPUNIT_ASSERT( l.insert(i, i * 7) );
-
-                i = 0;
-                const OrdList& rl = l;
-                for ( typename OrdList::const_iterator it = rl.begin(), itEnd = rl.end(); it != itEnd; ++it, ++i ) {
-                    CPPUNIT_ASSERT( it.key() == i );
-                    CPPUNIT_ASSERT( it.val().m_val == i * 7 );
-                }
-
-                // Check that we have visited all items
-                for ( int i = nCount; i > 0; --i ) {
-                    chk.m_nExpected = (i - 1) * 7;
-                    CPPUNIT_ASSERT( l.find_with( i - 1, lt<key_type>(), std::ref( chk ) ) );
-                }
-
-                l.clear();
-                CPPUNIT_ASSERT( l.empty() );
-            }
-        }
-
-        template <class OrdList>
-        void test()
-        {
-            OrdList l;
-            test_with(l);
-
-            typedef typename OrdList::guarded_ptr guarded_ptr;
-
-            static int const nLimit = 20;
-            int arr[nLimit];
-            for ( int i = 0; i < nLimit; i++ )
-                arr[i] = i;
-            shuffle( arr, arr + nLimit );
-
-            // extract/get
-            for ( int i = 0; i < nLimit; ++i )
-                l.insert( arr[i], arr[i] * 2 );
-            {
-                guarded_ptr gp;
-                for ( int i = 0; i < nLimit; ++i ) {
-                    int nKey = arr[i];
-
-                    gp = l.get( nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->first == nKey );
-                    CPPUNIT_CHECK( gp->second.m_val == nKey * 2 );
-                    gp.release();
-
-                    gp = l.extract( nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->first == nKey );
-                    CPPUNIT_CHECK( gp->second.m_val == nKey*2 );
-                    gp.release();
-
-                    gp = l.get( nKey );
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_CHECK( gp.empty());
-                    CPPUNIT_CHECK( !l.extract( nKey));
-                    CPPUNIT_CHECK( gp.empty());
-                }
-                CPPUNIT_ASSERT( l.empty());
-                CPPUNIT_CHECK( !l.get(arr[0]));
-                CPPUNIT_CHECK( gp.empty());
-                CPPUNIT_CHECK( !l.extract( arr[0]));
-                CPPUNIT_CHECK( gp.empty());
-            }
-
-            // extract_with/get_with
-            for ( int i = 0; i < nLimit; ++i )
-                l.insert( arr[i], arr[i] * 2 );
-            {
-                guarded_ptr gp;
-                for ( int i = 0; i < nLimit; ++i ) {
-                    int nKey = arr[i];
-                    other_key key = float(nKey + 0.3);
-
-                    gp = l.get_with( key, other_less() );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->first == nKey );
-                    CPPUNIT_CHECK( gp->second.m_val == nKey * 2 );
-                    gp.release();
-
-                    gp = l.extract_with( key, other_less() );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->first == nKey );
-                    CPPUNIT_CHECK( gp->second.m_val == nKey*2 );
-                    gp.release();
-
-                    gp = l.get_with( key, other_less() );
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_CHECK( gp.empty());
-                    CPPUNIT_CHECK( !l.extract_with( key, other_less()));
-                    CPPUNIT_CHECK( gp.empty());
-                }
-                CPPUNIT_ASSERT( l.empty());
-                CPPUNIT_CHECK( !l.get_with(3.4f, other_less()));
-                CPPUNIT_CHECK( gp.empty());
-                CPPUNIT_CHECK( !l.extract_with( 3.4f, other_less()));
-                CPPUNIT_CHECK( gp.empty());
-            }
-        }
-
-        template <class OrdList>
-        void test_rcu()
-        {
-            OrdList l;
-            test_with(l);
-
-            static int const nLimit = 20;
-
-            typedef typename OrdList::rcu_lock rcu_lock;
-            typedef typename OrdList::value_type value_type;
-            typedef typename OrdList::gc rcu_type;
-
-            {
-                int a[nLimit];
-                for (int i = 0; i < nLimit; ++i)
-                    a[i]=i;
-                shuffle( a, a + nLimit );
-
-                // extract/get
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( l.insert( a[i], a[i]*2 ) );
-
-                typename OrdList::exempt_ptr ep;
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    {
-                        rcu_lock lock;
-                        value_type * pGet = l.get( a[i] );
-                        CPPUNIT_ASSERT( pGet != nullptr );
-                        CPPUNIT_CHECK( pGet->first == a[i] );
-                        CPPUNIT_CHECK( pGet->second.m_val == a[i] * 2 );
-
-                        ep = l.extract( a[i] );
-                        CPPUNIT_ASSERT( ep );
-                        CPPUNIT_ASSERT( !ep.empty() );
-                        CPPUNIT_CHECK( ep->first == a[i] );
-                        CPPUNIT_CHECK( (*ep).second.m_val == a[i] * 2 );
-                    }
-                    ep.release();
-                    {
-                        rcu_lock lock;
-                        CPPUNIT_CHECK( l.get( a[i] ) == nullptr );
-                        ep = l.extract( a[i] );
-                        CPPUNIT_CHECK( !ep );
-                        CPPUNIT_CHECK( ep.empty() );
-                    }
-                }
-                CPPUNIT_ASSERT( l.empty() );
-
-                {
-                    rcu_lock lock;
-                    CPPUNIT_CHECK( l.get( a[0] ) == nullptr );
-                    CPPUNIT_CHECK( !l.extract( a[0] ) );
-                }
-
-                // extract_with/get_with
-                for ( int i = 0; i < nLimit; ++i ) {
-                    CPPUNIT_ASSERT( l.insert( a[i], a[i]*2 ) );
-                }
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    float itm = a[i] + 0.3f;
-                    {
-                        rcu_lock lock;
-                        value_type * pGet = l.get_with( itm, other_less() );
-                        CPPUNIT_ASSERT( pGet != nullptr );
-                        CPPUNIT_CHECK( pGet->first == a[i] );
-                        CPPUNIT_CHECK( pGet->second.m_val == a[i] * 2 );
-
-                        ep = l.extract_with( itm, other_less() );
-                        CPPUNIT_ASSERT( ep );
-                        CPPUNIT_ASSERT( !ep.empty() );
-                        CPPUNIT_CHECK( ep->first == a[i] );
-                        CPPUNIT_CHECK( ep->second.m_val == a[i] * 2 );
-                    }
-                    ep.release();
-                    {
-                        rcu_lock lock;
-                        CPPUNIT_CHECK( l.get_with( itm, other_less()) == nullptr );
-                        ep = l.extract_with( itm, other_less() );
-                        CPPUNIT_CHECK( !ep );
-                        CPPUNIT_CHECK( ep.empty() );
-                    }
-                }
-                CPPUNIT_ASSERT( l.empty() );
-
-                {
-                    rcu_lock lock;
-                    CPPUNIT_CHECK( l.get_with( 3.14f, other_less() ) == nullptr );
-                    CPPUNIT_CHECK( !l.extract_with( 3.14f, other_less() ));
-                    CPPUNIT_CHECK( ep.empty() );
-                }
-            }
-        }
-
-        template <class OrdList>
-        void nogc_test()
-        {
-            typedef typename OrdList::value_type    value_type;
-            typedef typename OrdList::iterator      iterator;
-
-            {
-                OrdList l;
-                iterator it;
-
-                CPPUNIT_ASSERT( l.empty() );
-
-                // insert / find test
-                CPPUNIT_ASSERT( l.contains( 100 ) == l.end() );
-                CPPUNIT_ASSERT( l.insert( 100 ) != l.end() );
-                CPPUNIT_ASSERT( !l.empty() );
-                it = l.contains( 100 );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 100 );
-                CPPUNIT_ASSERT( it.val().m_val == 0 );
-
-                CPPUNIT_ASSERT( l.contains( 50, lt<key_type>() ) == l.end() );
-                CPPUNIT_ASSERT( l.insert( 50, 500 ) != l.end());
-                it = l.contains( 50 );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 50 );
-                CPPUNIT_ASSERT( it.val().m_val == 500 );
-
-                CPPUNIT_ASSERT( l.insert( 50, 5 ) == l.end() );
-                it = l.contains( 50 );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 50 );
-                CPPUNIT_ASSERT( it.val().m_val == 500 );
-                CPPUNIT_ASSERT( !l.empty() );
-
-                CPPUNIT_ASSERT( l.contains( 150 ) == l.end() );
-                CPPUNIT_ASSERT( l.insert_with( 150, insert_functor() ) != l.end() );
-                it = l.contains( 150 );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 150 );
-                CPPUNIT_ASSERT( it.val().m_val == 1500 );
-                it = l.contains( 100 );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 100 );
-                CPPUNIT_ASSERT( it.val().m_val == 0 );
-                it = l.contains( 50 );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 50 );
-                CPPUNIT_ASSERT( it.val().m_val == 500 );
-                it.val().m_val = 25;
-                it = l.contains( 50 );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 50 );
-                CPPUNIT_ASSERT( it.val().m_val == 25 );
-                CPPUNIT_ASSERT( !l.empty() );
-
-                // update existing item
-                std::pair<iterator, bool> updateResult;
-                updateResult = l.update( 100 );
-                CPPUNIT_ASSERT( !updateResult.second );
-                CPPUNIT_ASSERT( updateResult.first.key() == 100 );
-                CPPUNIT_ASSERT( updateResult.first.val().m_val == 0   );
-                updateResult.first.val().m_val = 5;
-                it = l.contains( 100 );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 100 );
-                CPPUNIT_ASSERT( it.val().m_val == 5 );
-
-                CPPUNIT_ASSERT( !l.empty() );
-
-                // update new item
-                updateResult = l.update( 1000 );
-                CPPUNIT_ASSERT( updateResult.second );
-                CPPUNIT_ASSERT( updateResult.first.key() == 1000 );
-                CPPUNIT_ASSERT( updateResult.first.val().m_val == 0   );
-                updateResult.first.val().m_val = 33;
-                updateResult = l.update( 1000 );
-                CPPUNIT_ASSERT( !updateResult.second );
-                CPPUNIT_ASSERT( updateResult.first.key() == 1000 );
-                CPPUNIT_ASSERT( updateResult.first.val().m_val == 33   );
-
-                // clear test
-                l.clear();
-                CPPUNIT_ASSERT( l.empty() );
-
-                // insert test
-                CPPUNIT_ASSERT( l.emplace( 501 ) != l.end());
-                CPPUNIT_ASSERT( l.emplace( 251, 152 ) != l.end());
-
-                // insert failed - such key exists
-                CPPUNIT_ASSERT( l.emplace( 501, 2 ) == l.end());
-                CPPUNIT_ASSERT( l.emplace( 251, 10) == l.end());
-
-                it = l.contains(501);
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 501 );
-                CPPUNIT_ASSERT( it.val().m_val == 0 );
-
-                it = l.contains(251);
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 251 );
-                CPPUNIT_ASSERT( it.val().m_val == 152 );
-
-                l.clear();
-                CPPUNIT_ASSERT( l.empty() );
-
-                // Iterator test
-                {
-                    int nCount = 100;
-                    for ( int i = 0; i < nCount; ++i )
-                        CPPUNIT_ASSERT( l.insert(i, i * 2 ) != l.end() );
-
-                    {
-                        typename OrdList::iterator it( l.begin() );
-                        typename OrdList::const_iterator cit( l.cbegin() );
-                        CPPUNIT_CHECK( it == cit );
-                        CPPUNIT_CHECK( it != l.end() );
-                        CPPUNIT_CHECK( it != l.cend() );
-                        CPPUNIT_CHECK( cit != l.end() );
-                        CPPUNIT_CHECK( cit != l.cend() );
-                        ++it;
-                        CPPUNIT_CHECK( it != cit );
-                        CPPUNIT_CHECK( it != l.end() );
-                        CPPUNIT_CHECK( it != l.cend() );
-                        CPPUNIT_CHECK( cit != l.end() );
-                        CPPUNIT_CHECK( cit != l.cend() );
-                        ++cit;
-                        CPPUNIT_CHECK( it == cit );
-                        CPPUNIT_CHECK( it != l.end() );
-                        CPPUNIT_CHECK( it != l.cend() );
-                        CPPUNIT_CHECK( cit != l.end() );
-                        CPPUNIT_CHECK( cit != l.cend() );
-                    }
-
-                    int i = 0;
-                    for ( typename OrdList::iterator iter = l.begin(), itEnd = l.end(); iter != itEnd; ++iter, ++i ) {
-                        CPPUNIT_ASSERT( iter.key() == i );
-                        CPPUNIT_ASSERT( iter->first == i );
-                        CPPUNIT_ASSERT( (*iter).first == i );
-
-                        CPPUNIT_ASSERT( iter.val().m_val == i * 2 );
-                        CPPUNIT_ASSERT( iter->second.m_val == i * 2 );
-                        CPPUNIT_ASSERT( (*iter).second.m_val == i * 2 );
-
-                        iter.val().m_val = i * 3;
-                    }
-
-                    // Check that we have visited all items
-                    for ( int i = 0; i < nCount; ++i ) {
-                        it = l.contains( i );
-                        CPPUNIT_ASSERT( it != l.end() );
-                        CPPUNIT_ASSERT( it.key() == i );
-                        CPPUNIT_ASSERT( it.val().m_val == i * 3 );
-                    }
-
-                    l.clear();
-                    CPPUNIT_ASSERT( l.empty() );
-
-                    // Const iterator
-                    for ( int i = 0; i < nCount; ++i )
-                        CPPUNIT_ASSERT( l.insert(i, i * 7) != l.end() );
-
-                    i = 0;
-                    const OrdList& rl = l;
-                    for ( typename OrdList::const_iterator iter = rl.begin(), itEnd = rl.end(); iter != itEnd; ++iter, ++i ) {
-                        CPPUNIT_ASSERT( iter.key() == i );
-                        CPPUNIT_ASSERT( iter->first == i );
-                        CPPUNIT_ASSERT( (*iter).first == i );
-
-                        CPPUNIT_ASSERT( iter.val().m_val == i * 7 );
-                        CPPUNIT_ASSERT( iter->second.m_val == i * 7 );
-                        CPPUNIT_ASSERT( (*iter).second.m_val == i * 7 );
-                        // it.val().m_val = i * 3    ; // error: const-iterator
-                    }
-
-                    l.clear();
-                    CPPUNIT_ASSERT( l.empty() );
-                }
-
-            }
-        }
-
-        template <class UnordList>
-        void nogc_unord_test()
-        {
-            typedef typename UnordList::value_type    value_type;
-            typedef typename UnordList::iterator      iterator;
-
-            {
-                UnordList l;
-                iterator it;
-
-                CPPUNIT_ASSERT( l.empty() );
-
-                // insert / find test
-                CPPUNIT_ASSERT( l.contains( 100 ) == l.end() );
-                CPPUNIT_ASSERT( l.insert( 100 ) != l.end() );
-                CPPUNIT_ASSERT( !l.empty() );
-                it = l.contains( 100 );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 100 );
-                CPPUNIT_ASSERT( it.val().m_val == 0 );
-
-                CPPUNIT_ASSERT( l.contains( 50, eq<key_type>() ) == l.end() );
-                CPPUNIT_ASSERT( l.insert( 50, 500 ) != l.end());
-                it = l.contains( 50 );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 50 );
-                CPPUNIT_ASSERT( it.val().m_val == 500 );
-
-                CPPUNIT_ASSERT( l.insert( 50, 5 ) == l.end() );
-                it = l.contains( 50 );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 50 );
-                CPPUNIT_ASSERT( it.val().m_val == 500 );
-                CPPUNIT_ASSERT( !l.empty() );
-
-                CPPUNIT_ASSERT( l.contains( 150 ) == l.end() );
-                CPPUNIT_ASSERT( l.insert_with( 150, insert_functor() ) != l.end() );
-                it = l.contains( 150 );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 150 );
-                CPPUNIT_ASSERT( it.val().m_val == 1500 );
-                it = l.contains( 100 );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 100 );
-                CPPUNIT_ASSERT( it.val().m_val == 0 );
-                it = l.contains( 50 );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 50 );
-                CPPUNIT_ASSERT( it.val().m_val == 500 );
-                it.val().m_val = 25;
-                it = l.contains( 50 );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 50 );
-                CPPUNIT_ASSERT( it.val().m_val == 25 );
-                CPPUNIT_ASSERT( !l.empty() );
-
-                // update existing item
-                std::pair<iterator, bool> updateResult;
-                updateResult = l.update( 100 );
-                CPPUNIT_ASSERT( !updateResult.second );
-                CPPUNIT_ASSERT( updateResult.first.key() == 100 );
-                CPPUNIT_ASSERT( updateResult.first.val().m_val == 0   );
-                updateResult.first.val().m_val = 5;
-                it = l.contains( 100 );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 100 );
-                CPPUNIT_ASSERT( it.val().m_val == 5 );
-
-                CPPUNIT_ASSERT( !l.empty() );
-
-                // update new item
-                updateResult = l.update( 1000 );
-                CPPUNIT_ASSERT( updateResult.second );
-                CPPUNIT_ASSERT( updateResult.first.key() == 1000 );
-                CPPUNIT_ASSERT( updateResult.first.val().m_val == 0   );
-                updateResult.first.val().m_val = 33;
-                updateResult = l.update( 1000 );
-                CPPUNIT_ASSERT( !updateResult.second );
-                CPPUNIT_ASSERT( updateResult.first.key() == 1000 );
-                CPPUNIT_ASSERT( updateResult.first.val().m_val == 33   );
-
-                // clear test
-                l.clear();
-                CPPUNIT_ASSERT( l.empty() );
-
-                // insert test
-                CPPUNIT_ASSERT( l.emplace( 501 ) != l.end());
-                CPPUNIT_ASSERT( l.emplace( 251, 152 ) != l.end());
-
-                // insert failed - such key exists
-                CPPUNIT_ASSERT( l.emplace( 501, 2 ) == l.end());
-                CPPUNIT_ASSERT( l.emplace( 251, 10) == l.end());
-
-                it = l.contains(501);
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 501 );
-                CPPUNIT_ASSERT( it.val().m_val == 0 );
-
-                it = l.contains(251);
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 251 );
-                CPPUNIT_ASSERT( it.val().m_val == 152 );
-
-                l.clear();
-                CPPUNIT_ASSERT( l.empty() );
-
-                // Iterator test
-                {
-                    int nCount = 100;
-                    for ( int i = 0; i < nCount; ++i )
-                        CPPUNIT_ASSERT( l.insert(i, i * 2 ) != l.end() );
-
-                    {
-                        typename UnordList::iterator it( l.begin() );
-                        typename UnordList::const_iterator cit( l.cbegin() );
-                        CPPUNIT_CHECK( it == cit );
-                        CPPUNIT_CHECK( it != l.end() );
-                        CPPUNIT_CHECK( it != l.cend() );
-                        CPPUNIT_CHECK( cit != l.end() );
-                        CPPUNIT_CHECK( cit != l.cend() );
-                        ++it;
-                        CPPUNIT_CHECK( it != cit );
-                        CPPUNIT_CHECK( it != l.end() );
-                        CPPUNIT_CHECK( it != l.cend() );
-                        CPPUNIT_CHECK( cit != l.end() );
-                        CPPUNIT_CHECK( cit != l.cend() );
-                        ++cit;
-                        CPPUNIT_CHECK( it == cit );
-                        CPPUNIT_CHECK( it != l.end() );
-                        CPPUNIT_CHECK( it != l.cend() );
-                        CPPUNIT_CHECK( cit != l.end() );
-                        CPPUNIT_CHECK( cit != l.cend() );
-                    }
-
-                    int i = 0;
-                    for ( typename UnordList::iterator iter = l.begin(), itEnd = l.end(); iter != itEnd; ++iter, ++i ) {
-                        CPPUNIT_ASSERT( iter.key() == i );
-                        CPPUNIT_ASSERT( iter->first == i );
-                        CPPUNIT_ASSERT( (*iter).first == i );
-
-                        CPPUNIT_ASSERT( iter.val().m_val == i * 2 );
-                        CPPUNIT_ASSERT( iter->second.m_val == i * 2 );
-                        CPPUNIT_ASSERT( (*iter).second.m_val == i * 2 );
-
-                        iter.val().m_val = i * 3;
-                    }
-
-                    // Check that we have visited all items
-                    for ( int i = 0; i < nCount; ++i ) {
-                        it = l.contains( i );
-                        CPPUNIT_ASSERT( it != l.end() );
-                        CPPUNIT_ASSERT( it.key() == i );
-                        CPPUNIT_ASSERT( it.val().m_val == i * 3 );
-                    }
-
-                    l.clear();
-                    CPPUNIT_ASSERT( l.empty() );
-
-                    // Const iterator
-                    for ( int i = 0; i < nCount; ++i )
-                        CPPUNIT_ASSERT( l.insert(i, i * 7) != l.end() );
-
-                    i = 0;
-                    const UnordList& rl = l;
-                    for ( typename UnordList::const_iterator iter = rl.begin(), itEnd = rl.end(); iter != itEnd; ++iter, ++i ) {
-                        CPPUNIT_ASSERT( iter.key() == i );
-                        CPPUNIT_ASSERT( iter->first == i );
-                        CPPUNIT_ASSERT( (*iter).first == i );
-
-                        CPPUNIT_ASSERT( iter.val().m_val == i * 7 );
-                        CPPUNIT_ASSERT( iter->second.m_val == i * 7 );
-                        CPPUNIT_ASSERT( (*iter).second.m_val == i * 7 );
-                        // it.val().m_val = i * 3    ; // error: const-iterator
-                    }
-
-                    l.clear();
-                    CPPUNIT_ASSERT( l.empty() );
-                }
-
-            }
-        }
-
-
-        void HP_cmp();
-        void HP_less();
-        void HP_cmpmix();
-        void HP_ic();
-
-        void DHP_cmp();
-        void DHP_less();
-        void DHP_cmpmix();
-        void DHP_ic();
-
-        void RCU_GPI_cmp();
-        void RCU_GPI_less();
-        void RCU_GPI_cmpmix();
-        void RCU_GPI_ic();
-
-        void RCU_GPB_cmp();
-        void RCU_GPB_less();
-        void RCU_GPB_cmpmix();
-        void RCU_GPB_ic();
-
-        void RCU_GPT_cmp();
-        void RCU_GPT_less();
-        void RCU_GPT_cmpmix();
-        void RCU_GPT_ic();
-
-        void RCU_SHB_cmp();
-        void RCU_SHB_less();
-        void RCU_SHB_cmpmix();
-        void RCU_SHB_ic();
-
-        void RCU_SHT_cmp();
-        void RCU_SHT_less();
-        void RCU_SHT_cmpmix();
-        void RCU_SHT_ic();
-
-        void NOGC_cmp();
-        void NOGC_less();
-        void NOGC_cmpmix();
-        void NOGC_ic();
-
-        void NOGC_cmp_unord();
-        void NOGC_less_unord();
-        void NOGC_equal_to_unord();
-        void NOGC_cmpmix_unord();
-        void NOGC_ic_unord();
-
-        CPPUNIT_TEST_SUITE(LazyKVListTestHeader)
-            CPPUNIT_TEST(HP_cmp)
-            CPPUNIT_TEST(HP_less)
-            CPPUNIT_TEST(HP_cmpmix)
-            CPPUNIT_TEST(HP_ic)
-
-            CPPUNIT_TEST(DHP_cmp)
-            CPPUNIT_TEST(DHP_less)
-            CPPUNIT_TEST(DHP_cmpmix)
-            CPPUNIT_TEST(DHP_ic)
-
-            CPPUNIT_TEST(RCU_GPI_cmp)
-            CPPUNIT_TEST(RCU_GPI_less)
-            CPPUNIT_TEST(RCU_GPI_cmpmix)
-            CPPUNIT_TEST(RCU_GPI_ic)
-
-            CPPUNIT_TEST(RCU_GPB_cmp)
-            CPPUNIT_TEST(RCU_GPB_less)
-            CPPUNIT_TEST(RCU_GPB_cmpmix)
-            CPPUNIT_TEST(RCU_GPB_ic)
-
-            CPPUNIT_TEST(RCU_GPT_cmp)
-            CPPUNIT_TEST(RCU_GPT_less)
-            CPPUNIT_TEST(RCU_GPT_cmpmix)
-            CPPUNIT_TEST(RCU_GPT_ic)
-
-            CPPUNIT_TEST(RCU_SHB_cmp)
-            CPPUNIT_TEST(RCU_SHB_less)
-            CPPUNIT_TEST(RCU_SHB_cmpmix)
-            CPPUNIT_TEST(RCU_SHB_ic)
-
-            CPPUNIT_TEST(RCU_SHT_cmp)
-            CPPUNIT_TEST(RCU_SHT_less)
-            CPPUNIT_TEST(RCU_SHT_cmpmix)
-            CPPUNIT_TEST(RCU_SHT_ic)
-
-            CPPUNIT_TEST(NOGC_cmp)
-            CPPUNIT_TEST(NOGC_less)
-            CPPUNIT_TEST(NOGC_cmpmix)
-            CPPUNIT_TEST(NOGC_ic)
-
-            CPPUNIT_TEST(NOGC_cmp_unord)
-            CPPUNIT_TEST(NOGC_less_unord)
-            CPPUNIT_TEST(NOGC_equal_to_unord)
-            CPPUNIT_TEST(NOGC_cmpmix_unord)
-            CPPUNIT_TEST(NOGC_ic_unord)
-
-        CPPUNIT_TEST_SUITE_END()
-    };
-
-}   // namespace ordlist
-
-#endif // #ifndef CDSTEST_HDR_LAZY_KV_H
diff --git a/tests/test-hdr/list/hdr_lazy_kv_dhp.cpp b/tests/test-hdr/list/hdr_lazy_kv_dhp.cpp
deleted file mode 100644 (file)
index dc1b172..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_lazy_kv.h"
-#include <cds/container/lazy_kvlist_dhp.h>
-
-namespace ordlist {
-    namespace {
-        struct DHP_cmp_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::cmp<LazyKVListTestHeader::key_type>   compare;
-        };
-    }
-    void LazyKVListTestHeader::DHP_cmp()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< cds::gc::DHP, key_type, value_type, DHP_cmp_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< cds::gc::DHP, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct DHP_less_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>   less;
-        };
-    }
-    void LazyKVListTestHeader::DHP_less()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< cds::gc::DHP, key_type, value_type, DHP_less_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< cds::gc::DHP, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct DHP_cmpmix_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::cmp<LazyKVListTestHeader::key_type>   compare;
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>  less;
-        };
-    }
-    void LazyKVListTestHeader::DHP_cmpmix()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< cds::gc::DHP, key_type, value_type, DHP_cmpmix_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< cds::gc::DHP, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-                ,cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct DHP_ic_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void LazyKVListTestHeader::DHP_ic()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< cds::gc::DHP, key_type, value_type, DHP_ic_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< cds::gc::DHP, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<key_type> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-}   // namespace ordlist
-
diff --git a/tests/test-hdr/list/hdr_lazy_kv_hp.cpp b/tests/test-hdr/list/hdr_lazy_kv_hp.cpp
deleted file mode 100644 (file)
index a8c4bff..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_lazy_kv.h"
-#include <cds/container/lazy_kvlist_hp.h>
-
-namespace ordlist {
-    namespace {
-        struct HP_cmp_traits: public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::cmp<LazyKVListTestHeader::key_type>   compare;
-        };
-
-    }
-    void LazyKVListTestHeader::HP_cmp()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< cds::gc::HP, key_type, value_type, HP_cmp_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< cds::gc::HP,
-            key_type,
-            value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct HP_less_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>   less;
-        };
-    }
-    void LazyKVListTestHeader::HP_less()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< cds::gc::HP, key_type, value_type, HP_less_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< cds::gc::HP, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct HP_cmpmix_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::cmp<LazyKVListTestHeader::key_type>   compare;
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>  less;
-        };
-    }
-    void LazyKVListTestHeader::HP_cmpmix()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< cds::gc::HP, key_type, value_type, HP_cmpmix_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< cds::gc::HP, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-                ,cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct HP_ic_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void LazyKVListTestHeader::HP_ic()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< cds::gc::HP, key_type, value_type, HP_ic_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< cds::gc::HP, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<key_type> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-}   // namespace ordlist
-
-CPPUNIT_TEST_SUITE_REGISTRATION(ordlist::LazyKVListTestHeader);
diff --git a/tests/test-hdr/list/hdr_lazy_kv_nogc.cpp b/tests/test-hdr/list/hdr_lazy_kv_nogc.cpp
deleted file mode 100644 (file)
index 673ce4a..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_lazy_kv.h"
-#include <cds/container/lazy_kvlist_nogc.h>
-
-namespace ordlist {
-    namespace {
-        struct NOGC_cmp_traits: public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::cmp<LazyKVListTestHeader::key_type>   compare;
-        };
-
-    }
-    void LazyKVListTestHeader::NOGC_cmp()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< cds::gc::nogc, key_type, value_type, NOGC_cmp_traits > list;
-        nogc_test< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< cds::gc::nogc,
-            key_type,
-            value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-            >::type
-        > opt_list;
-        nogc_test< opt_list >();
-    }
-
-    namespace {
-        struct NOGC_less_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>   less;
-        };
-    }
-    void LazyKVListTestHeader::NOGC_less()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< cds::gc::nogc, key_type, value_type, NOGC_less_traits > list;
-        nogc_test< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< cds::gc::nogc, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        nogc_test< opt_list >();
-    }
-
-    namespace {
-        struct NOGC_cmpmix_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::cmp<LazyKVListTestHeader::key_type>   compare;
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>  less;
-        };
-    }
-    void LazyKVListTestHeader::NOGC_cmpmix()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< cds::gc::nogc, key_type, value_type, NOGC_cmpmix_traits > list;
-        nogc_test< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< cds::gc::nogc, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-                ,cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        nogc_test< opt_list >();
-    }
-
-    namespace {
-        struct NOGC_ic_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void LazyKVListTestHeader::NOGC_ic()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< cds::gc::nogc, key_type, value_type, NOGC_ic_traits > list;
-        nogc_test< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< cds::gc::nogc, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<key_type> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        nogc_test< opt_list >();
-    }
-
-}   // namespace ordlist
-
diff --git a/tests/test-hdr/list/hdr_lazy_kv_nogc_unord.cpp b/tests/test-hdr/list/hdr_lazy_kv_nogc_unord.cpp
deleted file mode 100644 (file)
index 7ed1202..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_lazy_kv.h"
-#include <cds/container/lazy_kvlist_nogc.h>
-
-namespace ordlist {
-    namespace {
-        struct NOGC_cmp_traits: public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::cmp<LazyKVListTestHeader::key_type>   compare;
-            static const bool sort = false;
-        };
-
-    }
-    void LazyKVListTestHeader::NOGC_cmp_unord()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< cds::gc::nogc, key_type, value_type, NOGC_cmp_traits > list;
-        nogc_unord_test< list >();
-
-        // option-based version
-        typedef cc::LazyKVList< cds::gc::nogc,
-            key_type,
-            value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-                ,cc::opt::sort<false>
-            >::type
-        > opt_list;
-        nogc_unord_test< opt_list >();
-    }
-
-    namespace {
-        struct NOGC_less_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>   less;
-            static const bool sort = false;
-        };
-    }
-    void LazyKVListTestHeader::NOGC_less_unord()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< cds::gc::nogc, key_type, value_type, NOGC_less_traits > list;
-        nogc_unord_test< list >();
-
-        // option-based version
-        typedef cc::LazyKVList< cds::gc::nogc, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<key_type> >
-                ,cc::opt::sort<false>
-            >::type
-        > opt_list;
-        nogc_unord_test< opt_list >();
-    }
-
-    namespace {
-        struct NOGC_equal_to_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::eq<LazyKVListTestHeader::key_type>   equal_to;
-            static const bool sort = false;
-        };
-    }
-    void LazyKVListTestHeader::NOGC_equal_to_unord()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< cds::gc::nogc, key_type, value_type, NOGC_equal_to_traits > list;
-        nogc_unord_test< list >();
-
-        // option-based version
-        typedef cc::LazyKVList< cds::gc::nogc, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::equal_to< eq<key_type> >
-                ,cc::opt::sort<false>
-            >::type
-        > opt_list;
-        nogc_unord_test< opt_list >();
-    }
-
-    namespace {
-        struct NOGC_cmpmix_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::cmp<LazyKVListTestHeader::key_type>   compare;
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>  less;
-            typedef LazyKVListTestHeader::eq<LazyKVListTestHeader::key_type>   equal_to;
-            static const bool sort = false;
-        };
-    }
-    void LazyKVListTestHeader::NOGC_cmpmix_unord()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< cds::gc::nogc, key_type, value_type, NOGC_cmpmix_traits > list;
-        nogc_unord_test< list >();
-
-        // option-based version
-        typedef cc::LazyKVList< cds::gc::nogc, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-                ,cc::opt::less< lt<key_type> >
-                ,cc::opt::equal_to< eq<key_type> >
-                ,cc::opt::sort<false>
-            >::type
-        > opt_list;
-        nogc_unord_test< opt_list >();
-    }
-
-    namespace {
-        struct NOGC_ic_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::eq<LazyKVListTestHeader::key_type>   equal_to;
-            typedef cds::atomicity::item_counter item_counter;
-            static const bool sort = false;
-        };
-    }
-    void LazyKVListTestHeader::NOGC_ic_unord()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< cds::gc::nogc, key_type, value_type, NOGC_ic_traits > list;
-        nogc_unord_test< list >();
-
-        // option-based version
-        typedef cc::LazyKVList< cds::gc::nogc, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::equal_to< eq<key_type> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-                ,cc::opt::sort<false>
-            >::type
-        > opt_list;
-        nogc_unord_test< opt_list >();
-    }
-
-}   // namespace ordlist
diff --git a/tests/test-hdr/list/hdr_lazy_kv_rcu_gpb.cpp b/tests/test-hdr/list/hdr_lazy_kv_rcu_gpb.cpp
deleted file mode 100644 (file)
index 48f555e..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_lazy_kv.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/container/lazy_kvlist_rcu.h>
-
-namespace ordlist {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_type;
-
-        struct RCU_GPB_cmp_traits: public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::cmp<LazyKVListTestHeader::key_type>   compare;
-        };
-    }
-    void LazyKVListTestHeader::RCU_GPB_cmp()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< rcu_type, key_type, value_type, RCU_GPB_cmp_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< rcu_type, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPB_less_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>   less;
-        };
-    }
-    void LazyKVListTestHeader::RCU_GPB_less()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< rcu_type, key_type, value_type, RCU_GPB_less_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< rcu_type, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPB_cmpmix_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::cmp<LazyKVListTestHeader::key_type>   compare;
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>  less;
-        };
-    }
-    void LazyKVListTestHeader::RCU_GPB_cmpmix()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< rcu_type, key_type, value_type, RCU_GPB_cmpmix_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< rcu_type, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-                ,cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPB_ic_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void LazyKVListTestHeader::RCU_GPB_ic()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< rcu_type, key_type, value_type, RCU_GPB_ic_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< rcu_type, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<key_type> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-}   // namespace ordlist
-
diff --git a/tests/test-hdr/list/hdr_lazy_kv_rcu_gpi.cpp b/tests/test-hdr/list/hdr_lazy_kv_rcu_gpi.cpp
deleted file mode 100644 (file)
index c6a5c3e..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_lazy_kv.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/container/lazy_kvlist_rcu.h>
-
-namespace ordlist {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
-
-        struct RCU_GPI_cmp_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::cmp<LazyKVListTestHeader::key_type>   compare;
-        };
-    }
-    void LazyKVListTestHeader::RCU_GPI_cmp()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< rcu_type, key_type, value_type, RCU_GPI_cmp_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< rcu_type, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPI_less_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>   less;
-        };
-    }
-    void LazyKVListTestHeader::RCU_GPI_less()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< rcu_type, key_type, value_type, RCU_GPI_less_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< rcu_type, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPI_cmpmix_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::cmp<LazyKVListTestHeader::key_type>   compare;
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>  less;
-        };
-    }
-    void LazyKVListTestHeader::RCU_GPI_cmpmix()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< rcu_type, key_type, value_type, RCU_GPI_cmpmix_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< rcu_type, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-                ,cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPI_ic_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void LazyKVListTestHeader::RCU_GPI_ic()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< rcu_type, key_type, value_type, RCU_GPI_ic_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< rcu_type, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<key_type> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-}   // namespace ordlist
-
diff --git a/tests/test-hdr/list/hdr_lazy_kv_rcu_gpt.cpp b/tests/test-hdr/list/hdr_lazy_kv_rcu_gpt.cpp
deleted file mode 100644 (file)
index 7294c44..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_lazy_kv.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/container/lazy_kvlist_rcu.h>
-
-namespace ordlist {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_type;
-
-        struct RCU_GPT_cmp_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::cmp<LazyKVListTestHeader::key_type>   compare;
-        };
-    }
-    void LazyKVListTestHeader::RCU_GPT_cmp()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< rcu_type, key_type, value_type, RCU_GPT_cmp_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< rcu_type, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPT_less_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>   less;
-        };
-    }
-    void LazyKVListTestHeader::RCU_GPT_less()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< rcu_type, key_type, value_type, RCU_GPT_less_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< rcu_type, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPT_cmpmix_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::cmp<LazyKVListTestHeader::key_type>   compare;
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>  less;
-        };
-    }
-    void LazyKVListTestHeader::RCU_GPT_cmpmix()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< rcu_type, key_type, value_type, RCU_GPT_cmpmix_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< rcu_type, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-                ,cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPT_ic_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void LazyKVListTestHeader::RCU_GPT_ic()
-    {
-        // traits-based version
-        typedef cc::LazyKVList< rcu_type, key_type, value_type, RCU_GPT_ic_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< rcu_type, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<key_type> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-}   // namespace ordlist
-
diff --git a/tests/test-hdr/list/hdr_lazy_kv_rcu_shb.cpp b/tests/test-hdr/list/hdr_lazy_kv_rcu_shb.cpp
deleted file mode 100644 (file)
index fa8ca52..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_lazy_kv.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/container/lazy_kvlist_rcu.h>
-
-namespace ordlist {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_type;
-
-        struct RCU_SHB_cmp_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::cmp<LazyKVListTestHeader::key_type>   compare;
-        };
-    }
-#endif
-
-    void LazyKVListTestHeader::RCU_SHB_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::LazyKVList< rcu_type, key_type, value_type, RCU_SHB_cmp_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< rcu_type, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHB_less_traits: public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>   less;
-        };
-    }
-#endif
-
-    void LazyKVListTestHeader::RCU_SHB_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::LazyKVList< rcu_type, key_type, value_type, RCU_SHB_less_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< rcu_type, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHB_cmpmix_traits: public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::cmp<LazyKVListTestHeader::key_type>   compare;
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>  less;
-        };
-    }
-#endif
-
-    void LazyKVListTestHeader::RCU_SHB_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::LazyKVList< rcu_type, key_type, value_type, RCU_SHB_cmpmix_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< rcu_type, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-                ,cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHB_ic_traits: public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-#endif
-
-    void LazyKVListTestHeader::RCU_SHB_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::LazyKVList< rcu_type, key_type, value_type, RCU_SHB_ic_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< rcu_type, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<key_type> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-}   // namespace ordlist
diff --git a/tests/test-hdr/list/hdr_lazy_kv_rcu_sht.cpp b/tests/test-hdr/list/hdr_lazy_kv_rcu_sht.cpp
deleted file mode 100644 (file)
index 25a7891..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_lazy_kv.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/container/lazy_kvlist_rcu.h>
-
-namespace ordlist {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_type;
-
-        struct RCU_SHT_cmp_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::cmp<LazyKVListTestHeader::key_type>   compare;
-        };
-    }
-#endif
-    void LazyKVListTestHeader::RCU_SHT_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::LazyKVList< rcu_type, key_type, value_type, RCU_SHT_cmp_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< rcu_type, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHT_less_traits : public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>   less;
-        };
-    }
-#endif
-    void LazyKVListTestHeader::RCU_SHT_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::LazyKVList< rcu_type, key_type, value_type, RCU_SHT_less_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< rcu_type, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHT_cmpmix_traits: public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::cmp<LazyKVListTestHeader::key_type>   compare;
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>  less;
-        };
-    }
-#endif
-    void LazyKVListTestHeader::RCU_SHT_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::LazyKVList< rcu_type, key_type, value_type, RCU_SHT_cmpmix_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< rcu_type, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-                ,cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHT_ic_traits: public cc::lazy_list::traits
-        {
-            typedef LazyKVListTestHeader::lt<LazyKVListTestHeader::key_type>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-#endif
-    void LazyKVListTestHeader::RCU_SHT_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::LazyKVList< rcu_type, key_type, value_type, RCU_SHT_ic_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyKVList< rcu_type, key_type, value_type,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<key_type> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-}   // namespace ordlist
-
diff --git a/tests/test-hdr/list/hdr_lazy_nogc.cpp b/tests/test-hdr/list/hdr_lazy_nogc.cpp
deleted file mode 100644 (file)
index d872a5c..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_lazy.h"
-#include <cds/container/lazy_list_nogc.h>
-
-namespace ordlist {
-    namespace {
-        struct NOGC_cmp_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::cmp<LazyListTestHeader::item>   compare;
-        };
-    }
-    void LazyListTestHeader::NOGC_cmp()
-    {
-        // traits-based version
-        typedef cc::LazyList< cds::gc::nogc, item, NOGC_cmp_traits > list;
-        nogc_test< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< cds::gc::nogc, item,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<item> >
-            >::type
-        > opt_list;
-        nogc_test< opt_list >();
-    }
-
-    namespace {
-        struct NOGC_less_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>   less;
-        };
-    }
-    void LazyListTestHeader::NOGC_less()
-    {
-        // traits-based version
-        typedef cc::LazyList< cds::gc::nogc, item, NOGC_less_traits > list;
-        nogc_test< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< cds::gc::nogc, item,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        nogc_test< opt_list >();
-    }
-
-    namespace {
-        struct NOGC_cmpmix_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::cmp<LazyListTestHeader::item>   compare;
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>  less;
-        };
-    }
-    void LazyListTestHeader::NOGC_cmpmix()
-    {
-        // traits-based version
-        typedef cc::LazyList< cds::gc::nogc, item, NOGC_cmpmix_traits > list;
-        nogc_test< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< cds::gc::nogc, item,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<item> >
-                ,cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        nogc_test< opt_list >();
-    }
-
-    namespace {
-        struct NOGC_ic_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void LazyListTestHeader::NOGC_ic()
-    {
-        // traits-based version
-        typedef cc::LazyList< cds::gc::nogc, item, NOGC_ic_traits > list;
-        nogc_test< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< cds::gc::nogc, item,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<item> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        nogc_test< opt_list >();
-    }
-}   // namespace ordlist
-
diff --git a/tests/test-hdr/list/hdr_lazy_nogc_unord.cpp b/tests/test-hdr/list/hdr_lazy_nogc_unord.cpp
deleted file mode 100644 (file)
index c07be9c..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_lazy.h"
-#include <cds/container/lazy_list_nogc.h>
-
-namespace ordlist {
-    namespace {
-        struct NOGC_cmp_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::cmp<LazyListTestHeader::item>   compare;
-            static const bool sort = false;
-        };
-    }
-    void LazyListTestHeader::NOGC_cmp_unord()
-    {
-        // traits-based version
-        typedef cc::LazyList< cds::gc::nogc, item, NOGC_cmp_traits > list;
-        nogc_unord_test< list >();
-
-        // option-based version
-        typedef cc::LazyList< cds::gc::nogc, item,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<item> >
-                ,cc::opt::sort<false>
-            >::type
-        > opt_list;
-        nogc_unord_test< opt_list >();
-    }
-
-    namespace {
-        struct NOGC_less_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>   less;
-            static const bool sort = false;
-        };
-    }
-    void LazyListTestHeader::NOGC_less_unord()
-    {
-        // traits-based version
-        typedef cc::LazyList< cds::gc::nogc, item, NOGC_less_traits > list;
-        nogc_unord_test< list >();
-
-        // option-based version
-        typedef cc::LazyList< cds::gc::nogc, item,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<item> >
-                ,cc::opt::sort<false>
-            >::type
-        > opt_list;
-        nogc_unord_test< opt_list >();
-    }
-
-    namespace {
-        struct NOGC_equal_to_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::equal_to<LazyListTestHeader::item> equal_to;
-            static const bool sort = false;
-        };
-    }
-    void LazyListTestHeader::NOGC_equal_to_unord()
-    {
-        // traits-based version
-        typedef cc::LazyList< cds::gc::nogc, item, NOGC_equal_to_traits > list;
-        nogc_unord_test< list >();
-
-        // option-based version
-        typedef cc::LazyList< cds::gc::nogc, item,
-            cc::lazy_list::make_traits<
-                cc::opt::equal_to< equal_to<item> >
-                ,cc::opt::sort<false>
-            >::type
-        > opt_list;
-        nogc_unord_test< opt_list >();
-    }
-
-    namespace {
-        struct NOGC_cmpmix_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::cmp<LazyListTestHeader::item>   compare;
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>  less;
-            static const bool sort = false;
-        };
-    }
-    void LazyListTestHeader::NOGC_cmpmix_unord()
-    {
-        // traits-based version
-        typedef cc::LazyList< cds::gc::nogc, item, NOGC_cmpmix_traits > list;
-        nogc_unord_test< list >();
-
-        // option-based version
-        typedef cc::LazyList< cds::gc::nogc, item,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<item> >
-                ,cc::opt::less< lt<item> >
-                ,cc::opt::sort<false>
-            >::type
-        > opt_list;
-        nogc_unord_test< opt_list >();
-    }
-
-    namespace {
-        struct NOGC_equal_to_mix_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::cmp<LazyListTestHeader::item> compare;
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item> less;
-            typedef LazyListTestHeader::equal_to<LazyListTestHeader::item> equal_to;
-            static const bool sort = false;
-        };
-    }
-    void LazyListTestHeader::NOGC_equal_to_mix_unord()
-    {
-        // traits-based version
-        typedef cc::LazyList< cds::gc::nogc, item, NOGC_equal_to_mix_traits > list;
-        nogc_unord_test< list >();
-
-        // option-based version
-        typedef cc::LazyList< cds::gc::nogc, item,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<item> >
-                ,cc::opt::less< lt<item> >
-                ,cc::opt::equal_to< equal_to<item> >
-                ,cc::opt::sort<false>
-            >::type
-        > opt_list;
-        nogc_unord_test< opt_list >();
-    }
-    namespace {
-        struct NOGC_ic_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::equal_to<LazyListTestHeader::item> equal_to;
-            typedef cds::atomicity::item_counter item_counter;
-            static const bool sort = false;
-        };
-    }
-    void LazyListTestHeader::NOGC_ic_unord()
-    {
-        // traits-based version
-        typedef cc::LazyList< cds::gc::nogc, item, NOGC_ic_traits > list;
-        nogc_unord_test< list >();
-
-        // option-based version
-        typedef cc::LazyList< cds::gc::nogc, item,
-            cc::lazy_list::make_traits<
-                cc::opt::equal_to< equal_to<item> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-                ,cc::opt::sort<false>
-            >::type
-        > opt_list;
-        nogc_unord_test< opt_list >();
-    }
-
-}   // namespace ordlist
diff --git a/tests/test-hdr/list/hdr_lazy_rcu_gpb.cpp b/tests/test-hdr/list/hdr_lazy_rcu_gpb.cpp
deleted file mode 100644 (file)
index 33c4a3e..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_lazy.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/container/lazy_list_rcu.h>
-
-namespace ordlist {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> >    rcu_type;
-
-        struct RCU_GPB_cmp_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::cmp<LazyListTestHeader::item>   compare;
-        };
-    }
-    void LazyListTestHeader::RCU_GPB_cmp()
-    {
-        // traits-based version
-        typedef cc::LazyList< rcu_type, item, RCU_GPB_cmp_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< rcu_type, item,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPB_less_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>   less;
-        };
-    }
-    void LazyListTestHeader::RCU_GPB_less()
-    {
-        // traits-based version
-        typedef cc::LazyList< rcu_type, item, RCU_GPB_less_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< rcu_type, item,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPB_cmpmix_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::cmp<LazyListTestHeader::item>   compare;
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>  less;
-        };
-    }
-    void LazyListTestHeader::RCU_GPB_cmpmix()
-    {
-        // traits-based version
-        typedef cc::LazyList< rcu_type, item, RCU_GPB_cmpmix_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< rcu_type, item,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<item> >
-                ,cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPB_ic_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void LazyListTestHeader::RCU_GPB_ic()
-    {
-        // traits-based version
-        typedef cc::LazyList< rcu_type, item, RCU_GPB_ic_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< rcu_type, item,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<item> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-}   // namespace ordlist
-
diff --git a/tests/test-hdr/list/hdr_lazy_rcu_gpi.cpp b/tests/test-hdr/list/hdr_lazy_rcu_gpi.cpp
deleted file mode 100644 (file)
index bc749d1..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_lazy.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/container/lazy_list_rcu.h>
-
-namespace ordlist {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> >    rcu_type;
-
-        struct RCU_GPI_cmp_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::cmp<LazyListTestHeader::item>   compare;
-        };
-    }
-    void LazyListTestHeader::RCU_GPI_cmp()
-    {
-        // traits-based version
-        typedef cc::LazyList< rcu_type, item, RCU_GPI_cmp_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< rcu_type, item,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPI_less_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>   less;
-        };
-    }
-    void LazyListTestHeader::RCU_GPI_less()
-    {
-        // traits-based version
-        typedef cc::LazyList< rcu_type, item, RCU_GPI_less_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< rcu_type, item,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPI_cmpmix_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::cmp<LazyListTestHeader::item>   compare;
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>  less;
-        };
-    }
-    void LazyListTestHeader::RCU_GPI_cmpmix()
-    {
-        // traits-based version
-        typedef cc::LazyList< rcu_type, item, RCU_GPI_cmpmix_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< rcu_type, item,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<item> >
-                ,cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPI_ic_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void LazyListTestHeader::RCU_GPI_ic()
-    {
-        // traits-based version
-        typedef cc::LazyList< rcu_type, item, RCU_GPI_ic_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< rcu_type, item,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<item> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-}   // namespace ordlist
-
diff --git a/tests/test-hdr/list/hdr_lazy_rcu_gpt.cpp b/tests/test-hdr/list/hdr_lazy_rcu_gpt.cpp
deleted file mode 100644 (file)
index d342376..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_lazy.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/container/lazy_list_rcu.h>
-
-namespace ordlist {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> >    rcu_type;
-
-        struct RCU_GPT_cmp_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::cmp<LazyListTestHeader::item>   compare;
-        };
-    }
-    void LazyListTestHeader::RCU_GPT_cmp()
-    {
-        // traits-based version
-        typedef cc::LazyList< rcu_type, item, RCU_GPT_cmp_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< rcu_type, item,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPT_less_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>   less;
-        };
-    }
-    void LazyListTestHeader::RCU_GPT_less()
-    {
-        // traits-based version
-        typedef cc::LazyList< rcu_type, item, RCU_GPT_less_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< rcu_type, item,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPT_cmpmix_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::cmp<LazyListTestHeader::item>   compare;
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>  less;
-        };
-    }
-    void LazyListTestHeader::RCU_GPT_cmpmix()
-    {
-        // traits-based version
-        typedef cc::LazyList< rcu_type, item, RCU_GPT_cmpmix_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< rcu_type, item,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<item> >
-                ,cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPT_ic_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void LazyListTestHeader::RCU_GPT_ic()
-    {
-        // traits-based version
-        typedef cc::LazyList< rcu_type, item, RCU_GPT_ic_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< rcu_type, item,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<item> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-}   // namespace ordlist
-
diff --git a/tests/test-hdr/list/hdr_lazy_rcu_shb.cpp b/tests/test-hdr/list/hdr_lazy_rcu_shb.cpp
deleted file mode 100644 (file)
index 6f4c1fe..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_lazy.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/container/lazy_list_rcu.h>
-
-namespace ordlist {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> >    rcu_type;
-
-        struct RCU_SHB_cmp_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::cmp<LazyListTestHeader::item>   compare;
-        };
-    }
-#endif
-    void LazyListTestHeader::RCU_SHB_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::LazyList< rcu_type, item, RCU_SHB_cmp_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< rcu_type, item,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHB_less_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>   less;
-        };
-    }
-#endif
-    void LazyListTestHeader::RCU_SHB_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::LazyList< rcu_type, item, RCU_SHB_less_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< rcu_type, item,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHB_cmpmix_traits: public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::cmp<LazyListTestHeader::item>   compare;
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>  less;
-        };
-    }
-#endif
-    void LazyListTestHeader::RCU_SHB_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::LazyList< rcu_type, item, RCU_SHB_cmpmix_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< rcu_type, item,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<item> >
-                ,cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHB_ic_traits: public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-#endif
-    void LazyListTestHeader::RCU_SHB_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::LazyList< rcu_type, item, RCU_SHB_ic_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< rcu_type, item,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<item> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-}   // namespace ordlist
-
diff --git a/tests/test-hdr/list/hdr_lazy_rcu_sht.cpp b/tests/test-hdr/list/hdr_lazy_rcu_sht.cpp
deleted file mode 100644 (file)
index 69c94d2..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_lazy.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/container/lazy_list_rcu.h>
-
-namespace ordlist {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> >    rcu_type;
-
-        struct RCU_SHT_cmp_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::cmp<LazyListTestHeader::item>   compare;
-        };
-    }
-#endif
-    void LazyListTestHeader::RCU_SHT_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::LazyList< rcu_type, item, RCU_SHT_cmp_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< rcu_type, item,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHT_less_traits : public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>   less;
-        };
-    }
-#endif
-    void LazyListTestHeader::RCU_SHT_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::LazyList< rcu_type, item, RCU_SHT_less_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< rcu_type, item,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHT_cmpmix_traits: public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::cmp<LazyListTestHeader::item>   compare;
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>  less;
-        };
-    }
-#endif
-    void LazyListTestHeader::RCU_SHT_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::LazyList< rcu_type, item, RCU_SHT_cmpmix_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< rcu_type, item,
-            cc::lazy_list::make_traits<
-                cc::opt::compare< cmp<item> >
-                ,cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHT_ic_traits: public cc::lazy_list::traits
-        {
-            typedef LazyListTestHeader::lt<LazyListTestHeader::item>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-#endif
-    void LazyListTestHeader::RCU_SHT_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::LazyList< rcu_type, item, RCU_SHT_ic_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::LazyList< rcu_type, item,
-            cc::lazy_list::make_traits<
-                cc::opt::less< lt<item> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-}   // namespace ordlist
-
diff --git a/tests/test-hdr/list/hdr_michael.h b/tests/test-hdr/list/hdr_michael.h
deleted file mode 100644 (file)
index f5ad84d..0000000
+++ /dev/null
@@ -1,853 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_MICHAEL_H
-#define CDSTEST_HDR_MICHAEL_H
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/container/details/michael_list_base.h>
-
-namespace ordlist {
-    namespace cc = cds::container;
-    namespace co = cds::container::opt;
-
-    class MichaelListTestHeader: public CppUnitMini::TestCase
-    {
-    public:
-        struct stat {
-            int nUpdateExistsCall;
-            int nUpdateNewCall;
-
-            stat()
-            {
-                nUpdateExistsCall
-                    = nUpdateNewCall
-                    = 0;
-            }
-        };
-
-        struct item {
-            int     nKey;
-            int     nVal;
-
-            stat    s;
-
-            item(int key)
-                : nKey( key )
-                , nVal( key * 2 )
-                , s()
-            {}
-
-            item(int key, int val)
-                : nKey( key )
-                , nVal(val)
-                , s()
-            {}
-
-            item( const item& v )
-                : nKey( v.nKey )
-                , nVal( v.nVal )
-                , s()
-            {}
-
-            int key() const
-            {
-                return nKey;
-            }
-        };
-
-        template <typename T>
-        struct lt
-        {
-            bool operator ()(const T& v1, const T& v2 ) const
-            {
-                return v1.key() < v2.key();
-            }
-
-            template <typename Q>
-            bool operator ()(const T& v1, const Q& v2 ) const
-            {
-                return v1.key() < v2;
-            }
-
-            template <typename Q>
-            bool operator ()(const Q& v1, const T& v2 ) const
-            {
-                return v1 < v2.key();
-            }
-        };
-
-        template <typename T>
-        struct cmp {
-            int operator ()(const T& v1, const T& v2 ) const
-            {
-                if ( v1.key() < v2.key() )
-                    return -1;
-                return v1.key() > v2.key() ? 1 : 0;
-            }
-
-            template <typename Q>
-            int operator ()(const T& v1, const Q& v2 ) const
-            {
-                if ( v1.key() < v2 )
-                    return -1;
-                return v1.key() > v2 ? 1 : 0;
-            }
-
-            template <typename Q>
-            int operator ()(const Q& v1, const T& v2 ) const
-            {
-                if ( v1 < v2.key() )
-                    return -1;
-                return v1 > v2.key() ? 1 : 0;
-            }
-        };
-
-        struct insert_functor {
-            void operator ()( item& i )
-            {
-                i.nVal = i.nKey * 1033;
-            }
-        };
-        struct dummy_insert_functor {
-            void operator ()( item& /*i*/ )
-            {
-                // This functor should not be called
-                TestCase::current_test()->error( "CPPUNIT_ASSERT", "dummy_insert_functor should not be called", __FILE__, __LINE__ );
-            }
-        };
-
-        struct erase_functor {
-            unsigned int nEraseCall;
-
-            erase_functor()
-                : nEraseCall(0)
-            {}
-
-            void operator()( item const& /*i*/)
-            {
-                ++nEraseCall;
-            }
-        };
-
-        static void insert_function( item& i )
-        {
-            i.nVal = i.nKey * 1024;
-        }
-        static void dummy_insert_function( item& /*i*/ )
-        {
-            // This function should not be called
-            TestCase::current_test()->error( "CPPUNIT_ASSERT", "dummy_insert_function should not be called", __FILE__, __LINE__ );
-        }
-
-
-        struct check_value {
-            unsigned int m_nMultiplier;
-
-            check_value( unsigned int nMultiplier )
-                : m_nMultiplier( nMultiplier )
-            {}
-
-            check_value( const check_value& s )
-                : m_nMultiplier( s.m_nMultiplier )
-            {}
-
-            void operator()( item& i, int )
-            {
-                CPPUNIT_ASSERT_CURRENT( int(i.nKey * m_nMultiplier) == i.nVal );
-            }
-        };
-
-        struct check_exact_value {
-            int m_nExpected;
-
-            check_exact_value( int nExpected )
-                : m_nExpected( nExpected )
-            {}
-
-            check_exact_value( check_exact_value const& s)
-                : m_nExpected( s.m_nExpected )
-            {}
-
-            void operator()( item& i, int )
-            {
-                CPPUNIT_ASSERT_CURRENT( i.nVal == m_nExpected );
-            }
-        };
-
-        struct dummy_check_value {
-            void operator()( item& /*i*/, int )
-            {
-                // This functor should not be called
-                TestCase::current_test()->error( "CPPUNIT_ASSERT", "dummy_check_value should not be called", __FILE__, __LINE__ );
-            }
-        };
-
-        struct update_functor {
-            void operator()( bool /*bNew*/, item& i, int /*n*/ )
-            {
-                i.nVal = i.nKey * 1024;
-            }
-        };
-
-        static void update_func( bool /*bNew*/, item& i, int n )
-        {
-            i.nVal = n * 1033;
-        }
-
-        struct other_item
-        {
-            int nKey;
-
-            other_item()
-            {}
-
-            other_item(int n)
-                : nKey(n)
-            {}
-        };
-
-        struct other_less
-        {
-            template <typename T1, typename T2>
-            bool operator()( T1 const& t1, T2 const& t2 ) const
-            {
-                return t1.nKey < t2.nKey;
-            }
-        };
-
-    protected:
-        template <class OrdList>
-        void test_with( OrdList& l )
-        {
-            typedef typename OrdList::value_type    value_type;
-
-            // The list should be empty
-            CPPUNIT_ASSERT( l.empty() );
-
-            // insert test
-            CPPUNIT_ASSERT( l.insert( 50 ) );
-            CPPUNIT_ASSERT( l.insert( item( 25 )) );
-            CPPUNIT_ASSERT( l.insert( item( 100 )) );
-
-            // insert failed - such key exists
-            CPPUNIT_ASSERT( !l.insert( 50 ) );
-            CPPUNIT_ASSERT( !l.insert( item( 100 )) );
-
-            // clear test
-
-            // The list should not be empty
-            CPPUNIT_ASSERT( !l.empty() );
-            l.clear();
-            // and now the list is empty
-            CPPUNIT_ASSERT( l.empty() );
-
-            // Test insert with functor
-
-            CPPUNIT_ASSERT( l.insert( 100, insert_functor() ) );
-            // passed by ref
-            {
-                insert_functor f;
-                CPPUNIT_ASSERT( l.insert( item( 25 ), std::ref( f ) ) );
-                CPPUNIT_ASSERT( !l.insert( item( 100 ), std::ref( f ) ) );
-            }
-            // Test insert with function
-            CPPUNIT_ASSERT( l.insert( 50, insert_function ));
-            CPPUNIT_ASSERT( !l.insert( 25, dummy_insert_function ));
-            CPPUNIT_ASSERT( !l.insert( 100, dummy_insert_functor() ));
-
-            // The list should not be empty
-            CPPUNIT_ASSERT( !l.empty() );
-
-            // Check inserted values
-            {
-                int i;
-                i = 100;
-                CPPUNIT_ASSERT( l.contains( 100 ));
-                CPPUNIT_ASSERT( l.find( i, check_value(1033) ));
-                {
-                    check_value f(1033);
-                    i = 25;
-                    CPPUNIT_ASSERT( l.contains( 25, lt<value_type>() ));
-                    CPPUNIT_ASSERT( l.find_with( i, lt<value_type>(), std::ref( f ) ) );
-                }
-                i = 50;
-                CPPUNIT_ASSERT( l.contains( 50 ));
-                CPPUNIT_ASSERT( l.find( i, check_value(1024) ));
-
-                i = 10;
-                CPPUNIT_ASSERT( !l.contains( 10, lt<value_type>() ));
-                CPPUNIT_ASSERT( !l.find_with( i, lt<value_type>(), dummy_check_value() ));
-                i = 75;
-                CPPUNIT_ASSERT( !l.contains( 75 ));
-                CPPUNIT_ASSERT( !l.find( i, dummy_check_value() ));
-                i = 150;
-                CPPUNIT_ASSERT( !l.contains( 150 ));
-                CPPUNIT_ASSERT( !l.find( i, dummy_check_value() ));
-            }
-
-            // The list should not be empty
-            CPPUNIT_ASSERT( !l.empty() );
-            l.clear();
-            // and now the list is empty
-            CPPUNIT_ASSERT( l.empty() );
-
-            // Update test
-            {
-                std::pair<bool, bool>   updateResult;
-                update_functor f;
-                updateResult = l.update( 100, update_functor() );
-                CPPUNIT_ASSERT( updateResult.first );
-                CPPUNIT_ASSERT( updateResult.second );
-
-                updateResult = l.update( 200, std::ref( f ) );
-                CPPUNIT_ASSERT( updateResult.first );
-                CPPUNIT_ASSERT( updateResult.second );
-
-                updateResult = l.update( 50, update_func );
-                CPPUNIT_ASSERT( updateResult.first );
-                CPPUNIT_ASSERT( updateResult.second );
-
-                int i;
-                i = 100;
-                CPPUNIT_ASSERT( l.find( i, check_value(1024) ));
-                i = 50;
-                CPPUNIT_ASSERT( l.find( i, check_value(1033) ));
-                i = 200;
-                CPPUNIT_ASSERT( l.find( i, check_value(1024) ));
-
-                // update existing key
-                updateResult = l.update( 200, update_func );
-                CPPUNIT_ASSERT( updateResult.first );
-                CPPUNIT_ASSERT( !updateResult.second );
-                i = 200;
-                CPPUNIT_ASSERT( l.find( i, check_value(1033) ));
-
-                updateResult = l.update( 50, update_functor() );
-                CPPUNIT_ASSERT( updateResult.first );
-                CPPUNIT_ASSERT( !updateResult.second );
-                i = 50;
-                CPPUNIT_ASSERT( l.find( i, check_value(1024) ));
-            }
-
-            // erase test (list: 50, 100, 200)
-            CPPUNIT_ASSERT( !l.empty() );
-            CPPUNIT_ASSERT( l.insert(160));
-            CPPUNIT_ASSERT( l.insert(250));
-            CPPUNIT_ASSERT( !l.empty() );
-
-            CPPUNIT_ASSERT( !l.erase( 150 ));
-
-            CPPUNIT_ASSERT( l.erase( 100 ));
-            CPPUNIT_ASSERT( !l.erase( 100 ));
-
-            CPPUNIT_ASSERT( l.erase_with( 200, lt<value_type>() ));
-            CPPUNIT_ASSERT( !l.erase_with( 200, lt<value_type>() ));
-
-            {
-                erase_functor ef;
-                CPPUNIT_ASSERT( ef.nEraseCall == 0 );
-                CPPUNIT_ASSERT( l.erase_with( 160, lt<value_type>(), std::ref(ef) ));
-                CPPUNIT_ASSERT( ef.nEraseCall == 1 );
-                CPPUNIT_ASSERT( !l.erase_with( 160, lt<value_type>(), std::ref(ef) ));
-                CPPUNIT_ASSERT( ef.nEraseCall == 1 );
-
-                CPPUNIT_ASSERT( l.erase( 250, std::ref(ef) ));
-                CPPUNIT_ASSERT( ef.nEraseCall == 2 );
-                CPPUNIT_ASSERT( !l.erase( 250, std::ref(ef) ));
-                CPPUNIT_ASSERT( ef.nEraseCall == 2 );
-            }
-
-            CPPUNIT_ASSERT( l.erase( 50 ));
-            CPPUNIT_ASSERT( !l.erase( 50 ));
-
-            CPPUNIT_ASSERT( l.empty() );
-
-            // clear empty list
-            l.clear();
-            CPPUNIT_ASSERT( l.empty() );
-
-            {
-                int i;
-
-                // insert test
-                CPPUNIT_ASSERT( l.emplace( 501 ) );
-                CPPUNIT_ASSERT( l.emplace( 251, 152 ));
-                CPPUNIT_ASSERT( l.emplace( item( 1001 )) );
-
-                // insert failed - such key exists
-                CPPUNIT_ASSERT( !l.emplace( 501, 2 ) );
-                CPPUNIT_ASSERT( !l.emplace( 251, 10) );
-
-                i = 501;
-                CPPUNIT_ASSERT( l.find( i, check_exact_value(501*2) ));
-                i = 251;
-                CPPUNIT_ASSERT( l.find( i, check_exact_value(152) ));
-                i = 1001;
-                CPPUNIT_ASSERT( l.find( i, check_exact_value(1001*2) ));
-
-                l.clear();
-                CPPUNIT_ASSERT( l.empty() );
-            }
-
-            // Iterator test
-            {
-                int nCount = 100;
-                for ( int i = 0; i < nCount; ++i )
-                    CPPUNIT_ASSERT( l.insert(i) );
-
-                {
-                    typename OrdList::iterator it( l.begin() );
-                    typename OrdList::const_iterator cit( l.cbegin() );
-                    CPPUNIT_CHECK( it == cit );
-                    CPPUNIT_CHECK( it != l.end() );
-                    CPPUNIT_CHECK( it != l.cend() );
-                    CPPUNIT_CHECK( cit != l.end() );
-                    CPPUNIT_CHECK( cit != l.cend() );
-                    ++it;
-                    CPPUNIT_CHECK( it != cit );
-                    CPPUNIT_CHECK( it != l.end() );
-                    CPPUNIT_CHECK( it != l.cend() );
-                    CPPUNIT_CHECK( cit != l.end() );
-                    CPPUNIT_CHECK( cit != l.cend() );
-                    ++cit;
-                    CPPUNIT_CHECK( it == cit );
-                    CPPUNIT_CHECK( it != l.end() );
-                    CPPUNIT_CHECK( it != l.cend() );
-                    CPPUNIT_CHECK( cit != l.end() );
-                    CPPUNIT_CHECK( cit != l.cend() );
-                }
-
-                int i = 0;
-                for ( typename OrdList::iterator it = l.begin(), itEnd = l.end(); it != itEnd; ++it, ++i ) {
-                    it->nVal = i * 2;
-                    CPPUNIT_ASSERT( it->nKey == i );
-                }
-
-                // Check that we have visited all items
-                for ( int i = 0; i < nCount; ++i )
-                    CPPUNIT_ASSERT( l.find( i, check_value(2) ));
-
-                l.clear();
-                CPPUNIT_ASSERT( l.empty() );
-
-                // Const iterator
-                for ( int i = 0; i < nCount; ++i )
-                    CPPUNIT_ASSERT( l.insert(i) );
-
-                i = 0;
-                const OrdList& rl = l;
-                for ( typename OrdList::const_iterator it = rl.begin(), itEnd = rl.end(); it != itEnd; ++it, ++i ) {
-                    // it->nVal = i * 2    ;    // not!
-                    CPPUNIT_ASSERT( it->nKey == i );
-                }
-
-                // Check that we have visited all items
-                for ( int i = 0; i < nCount; ++i )
-                    CPPUNIT_ASSERT( l.find( i, check_value(2) ));
-
-                l.clear();
-                CPPUNIT_ASSERT( l.empty() );
-            }
-        }
-
-        template <typename OrdList>
-        void test()
-        {
-            typedef typename OrdList::guarded_ptr guarded_ptr;
-            typedef typename OrdList::value_type value_type;
-
-            OrdList l;
-            test_with(l);
-
-            static int const nLimit = 20;
-            int arr[nLimit];
-            for ( int i = 0; i < nLimit; i++ )
-                arr[i] = i;
-            shuffle( arr, arr + nLimit );
-
-            // extract/get
-            for ( int i = 0; i < nLimit; ++i )
-                l.insert( arr[i] );
-            {
-                guarded_ptr gp;
-                for ( int i = 0; i < nLimit; ++i ) {
-                    int nKey = arr[i];
-
-                    gp = l.get( nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-                    CPPUNIT_CHECK( gp->nVal == nKey * 2 );
-                    gp.release();
-
-                    gp = l.extract( nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-                    CPPUNIT_CHECK( gp->nVal == nKey*2 );
-                    gp.release();
-
-                    gp = l.get( nKey );
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_CHECK( gp.empty());
-                    CPPUNIT_CHECK( !l.extract( nKey));
-                    CPPUNIT_CHECK( gp.empty());
-                }
-                CPPUNIT_ASSERT( l.empty());
-                CPPUNIT_CHECK( !l.get(arr[0]));
-                CPPUNIT_CHECK( gp.empty());
-                CPPUNIT_CHECK( !l.extract( arr[0]));
-                CPPUNIT_CHECK( gp.empty());
-            }
-
-            // extract_with/get_with
-            for ( int i = 0; i < nLimit; ++i )
-                l.insert( arr[i] );
-            {
-                guarded_ptr gp;
-                for ( int i = 0; i < nLimit; ++i ) {
-                    int nKey = arr[i];
-                    other_item key( nKey );
-
-                    gp = l.get_with( key, other_less() );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-                    CPPUNIT_CHECK( gp->nVal == nKey * 2 );
-                    gp.release();
-
-                    gp = l.extract_with( key, other_less() );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-                    CPPUNIT_CHECK( gp->nVal == nKey*2 );
-                    gp.release();
-
-                    gp = l.get_with( key, other_less() );
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_CHECK( gp.empty());
-                    CPPUNIT_CHECK( !l.extract_with( key, other_less()));
-                    CPPUNIT_CHECK( gp.empty());
-                }
-                CPPUNIT_ASSERT( l.empty());
-                CPPUNIT_CHECK( !l.get_with(other_item(arr[0]), other_less()));
-                CPPUNIT_CHECK( gp.empty());
-                CPPUNIT_CHECK( !l.extract_with( other_item(arr[0]), other_less()));
-                CPPUNIT_CHECK( gp.empty());
-            }
-        }
-
-        template <typename OrdList>
-        void test_rcu()
-        {
-            OrdList l;
-            test_with(l);
-
-            static int const nLimit = 20;
-
-            typedef typename OrdList::rcu_lock rcu_lock;
-            typedef typename OrdList::value_type value_type;
-            typedef typename OrdList::gc rcu_type;
-
-            {
-                int a[nLimit];
-                for (int i = 0; i < nLimit; ++i)
-                    a[i]=i;
-                shuffle( a, a + nLimit );
-
-                // extract/get
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( l.insert( a[i] ) );
-
-                typename OrdList::exempt_ptr ep;
-                typename OrdList::raw_ptr    rp;
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    {
-                        rcu_lock lock;
-                        rp = l.get( a[i] );
-                        CPPUNIT_ASSERT( rp );
-                        CPPUNIT_CHECK( rp->nKey == a[i] );
-                        CPPUNIT_CHECK( rp->nVal == a[i] * 2 );
-                    }
-                    rp.release();
-
-                    ep = l.extract( a[i] );
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty() );
-                    CPPUNIT_CHECK( ep->nKey == a[i] );
-                    CPPUNIT_CHECK( (*ep).nVal == a[i] * 2 );
-                    ep.release();
-
-                    {
-                        rcu_lock lock;
-                        CPPUNIT_CHECK( !l.get( a[i] ));
-                    }
-                    ep = l.extract( a[i] );
-                    CPPUNIT_CHECK( !ep );
-                    CPPUNIT_CHECK( ep.empty() );
-                }
-                CPPUNIT_ASSERT( l.empty() );
-
-                {
-                    rcu_lock lock;
-                    CPPUNIT_CHECK( !l.get( a[0] ));
-                }
-                CPPUNIT_CHECK( !l.extract( a[0] ) );
-                CPPUNIT_CHECK( ep.empty() );
-
-                // extract_with/get_with
-                for ( int i = 0; i < nLimit; ++i ) {
-                    CPPUNIT_ASSERT( l.insert( a[i] ) );
-                }
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    other_item itm( a[i] );
-                    {
-                        rcu_lock lock;
-                        rp = l.get_with( itm, other_less() );
-                        CPPUNIT_ASSERT( rp );
-                        CPPUNIT_CHECK( rp->nKey == a[i] );
-                        CPPUNIT_CHECK( rp->nVal == a[i] * 2 );
-                    }
-                    rp.release();
-
-                    ep = l.extract_with( itm, other_less() );
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty() );
-                    CPPUNIT_CHECK( ep->nKey == a[i] );
-                    CPPUNIT_CHECK( ep->nVal == a[i] * 2 );
-                    ep.release();
-
-                    {
-                        rcu_lock lock;
-                        CPPUNIT_CHECK( !l.get_with( itm, other_less()));
-                    }
-                    ep = l.extract_with( itm, other_less() );
-                    CPPUNIT_CHECK( !ep );
-                    CPPUNIT_CHECK( ep.empty() );
-                }
-                CPPUNIT_ASSERT( l.empty() );
-
-                {
-                    rcu_lock lock;
-                    CPPUNIT_CHECK( !l.get_with( other_item( 0 ), other_less()));
-                }
-                CPPUNIT_CHECK( !l.extract_with( other_item(0), other_less() ));
-                CPPUNIT_CHECK( ep.empty() );
-            }
-
-        }
-
-        template <class OrdList>
-        void nogc_test()
-        {
-            typedef OrdList list;
-            typedef typename list::value_type    value_type;
-            typedef std::pair<typename list::iterator, bool> update_result;
-
-            typename list::iterator it;
-
-            list l;
-            CPPUNIT_ASSERT( l.empty() );
-            CPPUNIT_ASSERT( l.insert(50) != l.end() );
-            CPPUNIT_ASSERT( !l.empty() );
-
-            update_result eres = l.update( item(100, 33) );
-            CPPUNIT_ASSERT( eres.second );
-            CPPUNIT_ASSERT( eres.first != l.end() );
-            CPPUNIT_ASSERT( l.insert( item(150) ) != l.end() );
-
-            CPPUNIT_ASSERT( l.insert(100) == l.end() );
-            eres = l.update( item(50, 33) );
-            CPPUNIT_ASSERT( !eres.second );
-            CPPUNIT_ASSERT( eres.first->nVal == eres.first->nKey * 2 );
-            eres.first->nVal = 63;
-
-            it = l.contains( 33 );
-            CPPUNIT_ASSERT( it == l.end() );
-
-            it = l.contains( 50 );
-            CPPUNIT_ASSERT( it != l.end() );
-            CPPUNIT_ASSERT( it->nKey == 50 );
-            CPPUNIT_ASSERT( it->nVal == 63 );
-
-            it = l.contains( 100, lt<value_type>() );
-            CPPUNIT_ASSERT( it != l.end() );
-            CPPUNIT_ASSERT( it->nKey == 100 );
-            CPPUNIT_ASSERT( it->nVal == 33 );
-
-            it = l.contains( 150 );
-            CPPUNIT_ASSERT( it != l.end() );
-            CPPUNIT_ASSERT( it->nKey == 150 );
-            CPPUNIT_ASSERT( it->nVal == it->nKey * 2 );
-
-            CPPUNIT_ASSERT( !l.empty() );
-            l.clear();
-            CPPUNIT_ASSERT( l.empty() );
-
-            // insert test
-            CPPUNIT_ASSERT( l.emplace( 501 ) != l.end() );
-            CPPUNIT_ASSERT( l.emplace( 251, 152 ) != l.end());
-            CPPUNIT_ASSERT( l.emplace( item( 1001 )) != l.end() );
-
-            // insert failed - such key exists
-            CPPUNIT_ASSERT( l.emplace( 501, 2 ) == l.end() );
-            CPPUNIT_ASSERT( l.emplace( 251, 10) == l.end() );
-
-            it = l.contains( 501 );
-            CPPUNIT_ASSERT( it != l.end() );
-            CPPUNIT_ASSERT( it->nKey == 501 );
-            CPPUNIT_ASSERT( it->nVal == 501 * 2 );
-
-            it = l.contains( 251 );
-            CPPUNIT_ASSERT( it != l.end() );
-            CPPUNIT_ASSERT( it->nKey == 251 );
-            CPPUNIT_ASSERT( it->nVal == 152 );
-
-            it = l.contains( 1001 );
-            CPPUNIT_ASSERT( it != l.end() );
-            CPPUNIT_ASSERT( it->nKey == 1001 );
-            CPPUNIT_ASSERT( it->nVal == 1001 * 2 );
-
-            {
-                typename OrdList::iterator it( l.begin() );
-                typename OrdList::const_iterator cit( l.cbegin() );
-                CPPUNIT_CHECK( it == cit );
-                CPPUNIT_CHECK( it != l.end() );
-                CPPUNIT_CHECK( it != l.cend() );
-                CPPUNIT_CHECK( cit != l.end() );
-                CPPUNIT_CHECK( cit != l.cend() );
-                ++it;
-                CPPUNIT_CHECK( it != cit );
-                CPPUNIT_CHECK( it != l.end() );
-                CPPUNIT_CHECK( it != l.cend() );
-                CPPUNIT_CHECK( cit != l.end() );
-                CPPUNIT_CHECK( cit != l.cend() );
-                ++cit;
-                CPPUNIT_CHECK( it == cit );
-                CPPUNIT_CHECK( it != l.end() );
-                CPPUNIT_CHECK( it != l.cend() );
-                CPPUNIT_CHECK( cit != l.end() );
-                CPPUNIT_CHECK( cit != l.cend() );
-            }
-
-
-            l.clear();
-            CPPUNIT_ASSERT( l.empty() );
-        }
-
-        void HP_cmp();
-        void HP_less();
-        void HP_cmpmix();
-        void HP_ic();
-
-        void DHP_cmp();
-        void DHP_less();
-        void DHP_cmpmix();
-        void DHP_ic();
-
-        void RCU_GPI_cmp();
-        void RCU_GPI_less();
-        void RCU_GPI_cmpmix();
-        void RCU_GPI_ic();
-
-        void RCU_GPB_cmp();
-        void RCU_GPB_less();
-        void RCU_GPB_cmpmix();
-        void RCU_GPB_ic();
-
-        void RCU_GPT_cmp();
-        void RCU_GPT_less();
-        void RCU_GPT_cmpmix();
-        void RCU_GPT_ic();
-
-        void RCU_SHB_cmp();
-        void RCU_SHB_less();
-        void RCU_SHB_cmpmix();
-        void RCU_SHB_ic();
-
-        void RCU_SHT_cmp();
-        void RCU_SHT_less();
-        void RCU_SHT_cmpmix();
-        void RCU_SHT_ic();
-
-        void NOGC_cmp();
-        void NOGC_less();
-        void NOGC_cmpmix();
-        void NOGC_ic();
-
-        CPPUNIT_TEST_SUITE(MichaelListTestHeader)
-            CPPUNIT_TEST(HP_cmp)
-            CPPUNIT_TEST(HP_less)
-            CPPUNIT_TEST(HP_cmpmix)
-            CPPUNIT_TEST(HP_ic)
-
-            CPPUNIT_TEST(DHP_cmp)
-            CPPUNIT_TEST(DHP_less)
-            CPPUNIT_TEST(DHP_cmpmix)
-            CPPUNIT_TEST(DHP_ic)
-
-            CPPUNIT_TEST(RCU_GPI_cmp)
-            CPPUNIT_TEST(RCU_GPI_less)
-            CPPUNIT_TEST(RCU_GPI_cmpmix)
-            CPPUNIT_TEST(RCU_GPI_ic)
-
-            CPPUNIT_TEST(RCU_GPB_cmp)
-            CPPUNIT_TEST(RCU_GPB_less)
-            CPPUNIT_TEST(RCU_GPB_cmpmix)
-            CPPUNIT_TEST(RCU_GPB_ic)
-
-            CPPUNIT_TEST(RCU_GPT_cmp)
-            CPPUNIT_TEST(RCU_GPT_less)
-            CPPUNIT_TEST(RCU_GPT_cmpmix)
-            CPPUNIT_TEST(RCU_GPT_ic)
-
-            CPPUNIT_TEST(RCU_SHB_cmp)
-            CPPUNIT_TEST(RCU_SHB_less)
-            CPPUNIT_TEST(RCU_SHB_cmpmix)
-            CPPUNIT_TEST(RCU_SHB_ic)
-
-            CPPUNIT_TEST(RCU_SHT_cmp)
-            CPPUNIT_TEST(RCU_SHT_less)
-            CPPUNIT_TEST(RCU_SHT_cmpmix)
-            CPPUNIT_TEST(RCU_SHT_ic)
-
-            CPPUNIT_TEST(NOGC_cmp)
-            CPPUNIT_TEST(NOGC_less)
-            CPPUNIT_TEST(NOGC_cmpmix)
-            CPPUNIT_TEST(NOGC_ic)
-        CPPUNIT_TEST_SUITE_END()
-    };
-
-}   // namespace ordlist
-
-#endif // #ifndef CDSTEST_HDR_MICHAEL_H
diff --git a/tests/test-hdr/list/hdr_michael_dhp.cpp b/tests/test-hdr/list/hdr_michael_dhp.cpp
deleted file mode 100644 (file)
index 50ba6ca..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_michael.h"
-#include <cds/container/michael_list_dhp.h>
-
-namespace ordlist {
-    namespace {
-        struct DHP_cmp_traits: public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::cmp<MichaelListTestHeader::item>   compare;
-        };
-    }
-    void MichaelListTestHeader::DHP_cmp()
-    {
-        // traits-based version
-        typedef cc::MichaelList< cds::gc::DHP, item, DHP_cmp_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< cds::gc::DHP, item,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<item> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct DHP_less_traits: public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>   less;
-        };
-    }
-    void MichaelListTestHeader::DHP_less()
-    {
-        // traits-based version
-        typedef cc::MichaelList< cds::gc::DHP, item, DHP_less_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< cds::gc::DHP, item,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct DHP_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::cmp<MichaelListTestHeader::item>   compare;
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>  less;
-        };
-    }
-    void MichaelListTestHeader::DHP_cmpmix()
-    {
-        // traits-based version
-        typedef cc::MichaelList< cds::gc::DHP, item, DHP_cmpmix_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< cds::gc::DHP, item,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<item> >
-                ,cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct DHP_ic_traits: public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void MichaelListTestHeader::DHP_ic()
-    {
-        // traits-based version
-        typedef cc::MichaelList< cds::gc::DHP, item, DHP_ic_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< cds::gc::DHP, item,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<item> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-}   // namespace ordlist
-
diff --git a/tests/test-hdr/list/hdr_michael_hp.cpp b/tests/test-hdr/list/hdr_michael_hp.cpp
deleted file mode 100644 (file)
index b1c6d5a..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_michael.h"
-#include <cds/container/michael_list_hp.h>
-
-namespace ordlist {
-    namespace {
-        struct HP_cmp_traits: public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::cmp<MichaelListTestHeader::item>   compare;
-        };
-
-    }
-    void MichaelListTestHeader::HP_cmp()
-    {
-        // traits-based version
-        typedef cc::MichaelList< cds::gc::HP, item, HP_cmp_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< cds::gc::HP, item,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<item> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct HP_less_traits: public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>   less;
-        };
-    }
-    void MichaelListTestHeader::HP_less()
-    {
-        // traits-based version
-        typedef cc::MichaelList< cds::gc::HP, item, HP_less_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< cds::gc::HP, item,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct HP_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::cmp<MichaelListTestHeader::item>   compare;
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>  less;
-        };
-    }
-    void MichaelListTestHeader::HP_cmpmix()
-    {
-        // traits-based version
-        typedef cc::MichaelList< cds::gc::HP, item, HP_cmpmix_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< cds::gc::HP, item,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<item> >
-                ,cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct HP_ic_traits: public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void MichaelListTestHeader::HP_ic()
-    {
-        // traits-based version
-        typedef cc::MichaelList< cds::gc::HP, item, HP_ic_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< cds::gc::HP, item,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<item> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-}   // namespace ordlist
-
-CPPUNIT_TEST_SUITE_REGISTRATION(ordlist::MichaelListTestHeader);
diff --git a/tests/test-hdr/list/hdr_michael_kv.h b/tests/test-hdr/list/hdr_michael_kv.h
deleted file mode 100644 (file)
index 2ec6d22..0000000
+++ /dev/null
@@ -1,773 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_MICHAEL_KV_H
-#define CDSTEST_HDR_MICHAEL_KV_H
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/container/details/michael_list_base.h>
-
-namespace ordlist {
-    namespace cc = cds::container;
-    namespace co = cds::container::opt;
-
-    class MichaelKVListTestHeader: public CppUnitMini::TestCase
-    {
-    public:
-        typedef int key_type;
-        struct value_type {
-            int m_val;
-
-            value_type()
-                : m_val(0)
-            {}
-
-            value_type( int n )
-                : m_val( n )
-            {}
-        };
-
-        template <typename T>
-        struct lt
-        {
-            bool operator ()(const T& v1, const T& v2 ) const
-            {
-                return v1 < v2;
-            }
-        };
-
-        template <typename T>
-        struct cmp {
-            int operator ()(const T& v1, const T& v2 ) const
-            {
-                if ( v1 < v2 )
-                    return -1;
-                return v1 > v2 ? 1 : 0;
-            }
-        };
-
-        struct check_value {
-            int     m_nExpected;
-
-            check_value( int nExpected )
-                : m_nExpected( nExpected )
-            {}
-
-            template <typename T>
-            void operator ()( T& pair )
-            {
-                CPPUNIT_ASSERT_CURRENT( pair.second.m_val == m_nExpected );
-            }
-        };
-
-        struct insert_functor {
-            template <typename T>
-            void operator()( T& pair )
-            {
-                pair.second.m_val = pair.first * 10;
-            }
-        };
-
-        struct update_functor {
-            template <typename T>
-            void operator()( bool /*bNew*/, T& pair )
-            {
-                pair.second.m_val = pair.first * 50;
-            }
-        };
-
-        struct erase_functor {
-            int     nKey;
-            int     nVal;
-
-            erase_functor()
-                : nKey(0)
-                , nVal(0)
-            {}
-
-            template <typename T>
-            void operator()( T& i )
-            {
-                nKey = i.first;
-                nVal = i.second.m_val;
-            }
-        };
-
-        typedef float other_key;
-        struct other_less {
-            bool operator()( float f, int i ) const
-            {
-                return int(f) < i;
-            }
-            bool operator()( int i, float f ) const
-            {
-                return i < int(f);
-            }
-        };
-
-    protected:
-        template <class OrdList>
-        void test_with( OrdList& l)
-        {
-            typedef typename OrdList::value_type    value_type;
-
-            typename OrdList::iterator itTest;
-            typename OrdList::const_iterator citTest;
-
-            CPPUNIT_ASSERT( l.empty() );
-
-            // insert / contains test
-            CPPUNIT_ASSERT( !l.contains( 100 ));
-            CPPUNIT_ASSERT( l.insert( 100 ));
-            CPPUNIT_ASSERT( !l.empty() );
-            CPPUNIT_ASSERT( l.contains( 100 ));
-
-            check_value chk(0);
-            CPPUNIT_ASSERT( l.find( 100, std::ref( chk ) ) );
-
-            CPPUNIT_ASSERT( !l.contains( 50, lt<key_type>() ));
-            CPPUNIT_ASSERT( l.insert( 50, 500 ));
-            CPPUNIT_ASSERT( l.contains( 50, lt<key_type>() ));
-            CPPUNIT_ASSERT( !l.insert( 50, 5 ));
-            chk.m_nExpected = 500;
-            CPPUNIT_ASSERT( l.find_with( 50, lt<key_type>(), std::ref( chk ) ) );
-            chk.m_nExpected = 0;
-            CPPUNIT_ASSERT( l.find_with( 100, lt<key_type>(), std::ref( chk ) ) );
-            CPPUNIT_ASSERT( !l.empty() );
-
-            CPPUNIT_ASSERT( !l.contains( 150 ));
-            CPPUNIT_ASSERT( l.insert_with( 150, insert_functor() ));
-            CPPUNIT_ASSERT( l.contains( 150 ));
-            chk.m_nExpected = 1500;
-            CPPUNIT_ASSERT( l.find( 150, std::ref( chk ) ) );
-            chk.m_nExpected = 0;
-            CPPUNIT_ASSERT( l.find( 100, std::ref( chk ) ) );
-            chk.m_nExpected = 500;
-            CPPUNIT_ASSERT( l.find( 50, std::ref( chk ) ) );
-            CPPUNIT_ASSERT( !l.empty() );
-
-            // erase test
-
-            CPPUNIT_ASSERT( !l.erase( 500 ));
-            CPPUNIT_ASSERT( !l.empty() );
-
-            CPPUNIT_ASSERT( l.contains( 50 ));
-            {
-                erase_functor ef;
-                l.erase( 50, std::ref( ef ) );
-                CPPUNIT_ASSERT( ef.nKey == 50 );
-                CPPUNIT_ASSERT( ef.nVal == 500 );
-            }
-            CPPUNIT_ASSERT( !l.contains( 50 ));
-
-            // update test
-            std::pair<bool, bool> bupdateResult;
-            bupdateResult = l.update( 100, update_functor() );
-            CPPUNIT_ASSERT( bupdateResult.first );
-            CPPUNIT_ASSERT( !bupdateResult.second );
-            chk.m_nExpected = 5000;
-            CPPUNIT_ASSERT( l.find( 100, std::ref( chk ) ) );
-
-            {
-                update_functor ef;
-                bupdateResult = l.update( 50, std::ref( ef ) );
-            }
-            CPPUNIT_ASSERT( bupdateResult.first );
-            CPPUNIT_ASSERT( bupdateResult.second );
-            chk.m_nExpected = 2500;
-            CPPUNIT_ASSERT( l.find( 50, std::ref( chk ) ) );
-
-            // erase test
-            CPPUNIT_ASSERT( !l.empty() );
-            CPPUNIT_ASSERT( l.insert_with( 200, insert_functor() ));
-            CPPUNIT_ASSERT( l.insert( 25 ));
-            CPPUNIT_ASSERT( l.erase( 100 ));
-            CPPUNIT_ASSERT( l.erase( 150 ));
-            {
-                erase_functor ef;
-                CPPUNIT_ASSERT( l.erase_with( 200, lt<key_type>(), std::ref(ef)) );
-                CPPUNIT_ASSERT( ef.nKey == 200 );
-                CPPUNIT_ASSERT( ef.nVal == 2000 );
-            }
-            CPPUNIT_ASSERT( l.erase_with( 25, lt<key_type>()))
-            CPPUNIT_ASSERT( l.erase( 50 ));
-            CPPUNIT_ASSERT( l.empty() );
-
-            // clear empty list
-            l.clear();
-            CPPUNIT_ASSERT( l.empty() );
-
-            // insert test
-            CPPUNIT_ASSERT( l.emplace( 501 ) );
-            CPPUNIT_ASSERT( l.emplace( 251, 152 ));
-
-            // insert failed - such key exists
-            CPPUNIT_ASSERT( !l.emplace( 501, 2 ) );
-            CPPUNIT_ASSERT( !l.emplace( 251, 10) );
-
-            check_value cv(0);
-            CPPUNIT_ASSERT( l.find( 501, std::ref(cv) ));
-            cv.m_nExpected = 152;
-            CPPUNIT_ASSERT( l.find( 251, std::ref(cv) ));
-
-            l.clear();
-            CPPUNIT_ASSERT( l.empty() );
-
-            // Iterator test
-            {
-                int nCount = 100;
-                for ( int i = 0; i < nCount; ++i )
-                    CPPUNIT_ASSERT( l.insert(i, i * 2 ) );
-
-                {
-                    typename OrdList::iterator it( l.begin() );
-                    typename OrdList::const_iterator cit( l.cbegin() );
-                    CPPUNIT_CHECK( it == cit );
-                    CPPUNIT_CHECK( it != l.end() );
-                    CPPUNIT_CHECK( it != l.cend() );
-                    CPPUNIT_CHECK( cit != l.end() );
-                    CPPUNIT_CHECK( cit != l.cend() );
-                    ++it;
-                    CPPUNIT_CHECK( it != cit );
-                    CPPUNIT_CHECK( it != l.end() );
-                    CPPUNIT_CHECK( it != l.cend() );
-                    CPPUNIT_CHECK( cit != l.end() );
-                    CPPUNIT_CHECK( cit != l.cend() );
-                    ++cit;
-                    CPPUNIT_CHECK( it == cit );
-                    CPPUNIT_CHECK( it != l.end() );
-                    CPPUNIT_CHECK( it != l.cend() );
-                    CPPUNIT_CHECK( cit != l.end() );
-                    CPPUNIT_CHECK( cit != l.cend() );
-                }
-
-                int i = 0;
-                for ( typename OrdList::iterator it = l.begin(), itEnd = l.end(); it != itEnd; ++it, ++i ) {
-                    CPPUNIT_ASSERT( it.key() == i );
-                    CPPUNIT_ASSERT( it->first == i );
-                    CPPUNIT_ASSERT( (*it).first == i );
-
-                    CPPUNIT_ASSERT( it.val().m_val == i * 2 );
-                    CPPUNIT_ASSERT( it->second.m_val == i * 2 );
-                    CPPUNIT_ASSERT( (*it).second.m_val == i * 2 );
-                    it.val().m_val = i * 3;
-                }
-
-                // Check that we have visited all items
-                for ( int i = 0; i < nCount; ++i ) {
-                    chk.m_nExpected = i * 3;
-                    CPPUNIT_ASSERT( l.find( i, std::ref( chk ) ) );
-                }
-
-                l.clear();
-                CPPUNIT_ASSERT( l.empty() );
-
-                // Const iterator
-                for ( int i = 0; i < nCount; ++i )
-                    CPPUNIT_ASSERT( l.insert(i, i * 7) );
-
-                i = 0;
-                const OrdList& rl = l;
-                for ( typename OrdList::const_iterator it = rl.begin(), itEnd = rl.end(); it != itEnd; ++it, ++i ) {
-                    CPPUNIT_ASSERT( it.key() == i );
-                    CPPUNIT_ASSERT( it->first == i );
-                    CPPUNIT_ASSERT( (*it).first == i );
-
-                    CPPUNIT_ASSERT( it.val().m_val == i * 7 );
-                    CPPUNIT_ASSERT( it->second.m_val == i * 7 );
-                    CPPUNIT_ASSERT( (*it).second.m_val == i * 7 );
-                }
-
-                // Check that we have visited all items
-                for ( int i = 0; i < nCount; ++i ) {
-                    chk.m_nExpected = i * 7;
-                    CPPUNIT_ASSERT( l.find_with( i, lt<key_type>(), std::ref( chk ) ) );
-                }
-
-                l.clear();
-                CPPUNIT_ASSERT( l.empty() );
-            }
-        }
-
-        template <class OrdList>
-        void test()
-        {
-            OrdList l;
-            test_with(l);
-
-            typedef typename OrdList::guarded_ptr guarded_ptr;
-
-            static int const nLimit = 20;
-            int arr[nLimit];
-            for ( int i = 0; i < nLimit; i++ )
-                arr[i] = i;
-            shuffle( arr, arr + nLimit );
-
-            // extract/get
-            for ( int i = 0; i < nLimit; ++i )
-                l.insert( arr[i], arr[i] * 2 );
-            {
-                guarded_ptr gp;
-                for ( int i = 0; i < nLimit; ++i ) {
-                    int nKey = arr[i];
-
-                    gp = l.get( nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->first == nKey );
-                    CPPUNIT_CHECK( gp->second.m_val == nKey * 2 );
-                    gp.release();
-                    CPPUNIT_CHECK( gp.empty() );
-
-                    gp = l.extract( nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->first == nKey );
-                    CPPUNIT_CHECK( gp->second.m_val == nKey*2 );
-                    gp.release();
-
-                    gp = l.get( nKey );
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_CHECK( gp.empty());
-                    CPPUNIT_CHECK( !l.extract( nKey));
-                    CPPUNIT_CHECK( gp.empty());
-                }
-                CPPUNIT_ASSERT( l.empty());
-                CPPUNIT_CHECK( !l.get(arr[0]));
-                CPPUNIT_CHECK( gp.empty());
-                CPPUNIT_CHECK( !l.extract( arr[0]));
-                CPPUNIT_CHECK( gp.empty());
-            }
-
-            // extract_with/get_with
-            for ( int i = 0; i < nLimit; ++i )
-                l.insert( arr[i], arr[i] * 2 );
-            {
-                guarded_ptr gp;
-                for ( int i = 0; i < nLimit; ++i ) {
-                    int nKey = arr[i];
-                    other_key key = float(nKey + 0.3);
-
-                    gp = l.get_with( key, other_less() );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->first == nKey );
-                    CPPUNIT_CHECK( gp->second.m_val == nKey * 2 );
-                    gp.release();
-
-                    gp = l.extract_with( key, other_less() );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->first == nKey );
-                    CPPUNIT_CHECK( gp->second.m_val == nKey*2 );
-                    gp.release();
-
-                    gp = l.get_with( key, other_less() );
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_CHECK( gp.empty());
-                    CPPUNIT_CHECK( !l.extract_with( key, other_less()));
-                    CPPUNIT_CHECK( gp.empty());
-                }
-                CPPUNIT_ASSERT( l.empty());
-                CPPUNIT_CHECK( !l.get_with( 3.4f, other_less()));
-                CPPUNIT_CHECK( gp.empty());
-                CPPUNIT_CHECK( !l.extract_with( 3.4f, other_less()));
-                CPPUNIT_CHECK( gp.empty());
-            }
-        }
-
-        template <class OrdList>
-        void test_rcu()
-        {
-            OrdList l;
-            test_with(l);
-
-            static int const nLimit = 20;
-
-            typedef typename OrdList::rcu_lock rcu_lock;
-            typedef typename OrdList::value_type value_type;
-            typedef typename OrdList::gc rcu_type;
-
-            {
-                int a[nLimit];
-                for (int i = 0; i < nLimit; ++i)
-                    a[i]=i;
-                shuffle( a, a + nLimit );
-
-                // extract/get
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( l.insert( a[i], a[i]*2 ) );
-
-                typename OrdList::exempt_ptr ep;
-                typename OrdList::raw_ptr    rp;
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    {
-                        rcu_lock lock;
-                        rp = l.get( a[i] );
-                        CPPUNIT_ASSERT( rp );
-                        CPPUNIT_CHECK( rp->first == a[i] );
-                        CPPUNIT_CHECK( rp->second.m_val == a[i] * 2 );
-                    }
-                    rp.release();
-
-                    ep = l.extract( a[i] );
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty() );
-                    CPPUNIT_CHECK( ep->first == a[i] );
-                    CPPUNIT_CHECK( (*ep).second.m_val == a[i] * 2 );
-                    ep.release();
-                    {
-                        rcu_lock lock;
-                        CPPUNIT_CHECK( !l.get( a[i] ));
-                    }
-                    ep = l.extract( a[i] );
-                    CPPUNIT_CHECK( !ep );
-                    CPPUNIT_CHECK( ep.empty() );
-                }
-                CPPUNIT_ASSERT( l.empty() );
-
-                {
-                    rcu_lock lock;
-                    CPPUNIT_CHECK( !l.get( a[0] ));
-                }
-                CPPUNIT_CHECK( !l.extract( a[0] ) );
-                CPPUNIT_CHECK( ep.empty() );
-
-                // extract_with/get_with
-                for ( int i = 0; i < nLimit; ++i ) {
-                    CPPUNIT_ASSERT( l.insert( a[i], a[i]*2 ) );
-                }
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    float itm = a[i] + 0.3f;
-                    {
-                        rcu_lock lock;
-                        rp = l.get_with( itm, other_less() );
-                        CPPUNIT_ASSERT( rp );
-                        CPPUNIT_CHECK( rp->first == a[i] );
-                        CPPUNIT_CHECK( rp->second.m_val == a[i] * 2 );
-                    }
-                    rp.release();
-
-                    ep = l.extract_with( itm, other_less() );
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty() );
-                    CPPUNIT_CHECK( ep->first == a[i] );
-                    CPPUNIT_CHECK( ep->second.m_val == a[i] * 2 );
-                    ep.release();
-                    {
-                        rcu_lock lock;
-                        CPPUNIT_CHECK( !l.get_with( itm, other_less()));
-                    }
-                    ep = l.extract_with( itm, other_less() );
-                    CPPUNIT_CHECK( !ep );
-                    CPPUNIT_CHECK( ep.empty() );
-                }
-                CPPUNIT_ASSERT( l.empty() );
-
-                {
-                    rcu_lock lock;
-                    CPPUNIT_CHECK( !l.get_with( 3.14f, other_less() ));
-                }
-                CPPUNIT_CHECK( !l.extract_with( 3.14f, other_less() ));
-                CPPUNIT_CHECK( ep.empty() );
-            }
-        }
-
-        template <class OrdList>
-        void nogc_test()
-        {
-            typedef typename OrdList::value_type    value_type;
-            typedef typename OrdList::iterator      iterator;
-
-            {
-                OrdList l;
-                iterator it;
-
-                CPPUNIT_ASSERT( l.empty() );
-
-                // insert / find test
-                CPPUNIT_ASSERT( l.contains( 100 ) == l.end() );
-                CPPUNIT_ASSERT( l.insert( 100 ) != l.end() );
-                CPPUNIT_ASSERT( !l.empty() );
-                it = l.contains( 100, lt<key_type>() );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 100 );
-                CPPUNIT_ASSERT( it.val().m_val == 0 );
-
-                CPPUNIT_ASSERT( l.contains( 50, lt<key_type>() ) == l.end() );
-                CPPUNIT_ASSERT( l.insert( 50, 500 ) != l.end());
-                it = l.contains( 50 );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 50 );
-                CPPUNIT_ASSERT( it.val().m_val == 500 );
-
-                CPPUNIT_ASSERT( l.insert( 50, 5 ) == l.end() );
-                it = l.contains( 50 );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 50 );
-                CPPUNIT_ASSERT( it.val().m_val == 500 );
-                CPPUNIT_ASSERT( !l.empty() );
-
-                CPPUNIT_ASSERT( l.contains( 150 ) == l.end() );
-                CPPUNIT_ASSERT( l.insert_with( 150, insert_functor() ) != l.end() );
-                it = l.contains( 150 );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 150 );
-                CPPUNIT_ASSERT( it.val().m_val == 1500 );
-                it = l.contains( 100 );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 100 );
-                CPPUNIT_ASSERT( it.val().m_val == 0 );
-                it = l.contains( 50 );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 50 );
-                CPPUNIT_ASSERT( it.val().m_val == 500 );
-                it.val().m_val = 25;
-                it = l.contains( 50 );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 50 );
-                CPPUNIT_ASSERT( it.val().m_val == 25 );
-                CPPUNIT_ASSERT( !l.empty() );
-
-                // update existing item
-                std::pair<iterator, bool> updateResult;
-                updateResult = l.update( 100 );
-                CPPUNIT_ASSERT( !updateResult.second );
-                CPPUNIT_ASSERT( updateResult.first.key() == 100 );
-                CPPUNIT_ASSERT( updateResult.first.val().m_val == 0   );
-                updateResult.first.val().m_val = 5;
-                it = l.contains( 100 );
-                CPPUNIT_ASSERT( it != l.end() );
-                CPPUNIT_ASSERT( it.key() == 100 );
-                CPPUNIT_ASSERT( it.val().m_val == 5 );
-
-                CPPUNIT_ASSERT( !l.empty() );
-
-                // update new item
-                updateResult = l.update( 1000 );
-                CPPUNIT_ASSERT( updateResult.second );
-                CPPUNIT_ASSERT( updateResult.first.key() == 1000 );
-                CPPUNIT_ASSERT( updateResult.first.val().m_val == 0   );
-                updateResult.first.val().m_val = 33;
-                updateResult = l.update( 1000 );
-                CPPUNIT_ASSERT( !updateResult.second );
-                CPPUNIT_ASSERT( updateResult.first.key() == 1000 );
-                CPPUNIT_ASSERT( updateResult.first.val().m_val == 33   );
-
-                // clear test
-                l.clear();
-                CPPUNIT_ASSERT( l.empty() );
-
-                // insert test
-                CPPUNIT_ASSERT( l.emplace( 501 ) != l.end());
-                CPPUNIT_ASSERT( l.emplace( 251, 152 ) != l.end());
-
-                // insert failed - such key exists
-                CPPUNIT_ASSERT( l.emplace( 501, 2 ) == l.end());
-                CPPUNIT_ASSERT( l.emplace( 251, 10) == l.end());
-
-                it = l.contains( 501 );
-                CPPUNIT_ASSERT( it != l.end());
-                CPPUNIT_ASSERT( it.key() == 501 );
-                CPPUNIT_ASSERT( it.val().m_val == 0 );
-
-                it = l.contains( 251 );
-                CPPUNIT_ASSERT( it != l.end());
-                CPPUNIT_ASSERT( it.key() == 251 );
-                CPPUNIT_ASSERT( it.val().m_val == 152 );
-
-                l.clear();
-                CPPUNIT_ASSERT( l.empty() );
-
-                // Iterator test
-                {
-                    int nCount = 100;
-                    for ( int i = 0; i < nCount; ++i )
-                        CPPUNIT_ASSERT( l.insert(i, i * 2 ) != l.end() );
-
-                    {
-                        typename OrdList::iterator it( l.begin() );
-                        typename OrdList::const_iterator cit( l.cbegin() );
-                        CPPUNIT_CHECK( it == cit );
-                        CPPUNIT_CHECK( it != l.end() );
-                        CPPUNIT_CHECK( it != l.cend() );
-                        CPPUNIT_CHECK( cit != l.end() );
-                        CPPUNIT_CHECK( cit != l.cend() );
-                        ++it;
-                        CPPUNIT_CHECK( it != cit );
-                        CPPUNIT_CHECK( it != l.end() );
-                        CPPUNIT_CHECK( it != l.cend() );
-                        CPPUNIT_CHECK( cit != l.end() );
-                        CPPUNIT_CHECK( cit != l.cend() );
-                        ++cit;
-                        CPPUNIT_CHECK( it == cit );
-                        CPPUNIT_CHECK( it != l.end() );
-                        CPPUNIT_CHECK( it != l.cend() );
-                        CPPUNIT_CHECK( cit != l.end() );
-                        CPPUNIT_CHECK( cit != l.cend() );
-                    }
-
-                    int i = 0;
-                    for ( typename OrdList::iterator iter = l.begin(), itEnd = l.end(); iter != itEnd; ++iter, ++i ) {
-                        CPPUNIT_ASSERT( iter.key() == i );
-                        CPPUNIT_ASSERT( iter->first == i );
-                        CPPUNIT_ASSERT( (*iter).first == i );
-
-                        CPPUNIT_ASSERT( iter.val().m_val == i * 2 );
-                        CPPUNIT_ASSERT( iter->second.m_val == i * 2 );
-                        CPPUNIT_ASSERT( (*iter).second.m_val == i * 2 );
-
-                        iter.val().m_val = i * 3;
-                    }
-
-                    // Check that we have visited all items
-                    for ( int i = 0; i < nCount; ++i ) {
-                        it = l.contains( i );
-                        CPPUNIT_ASSERT( it != l.end() );
-                        CPPUNIT_ASSERT( it.key() == i );
-                        CPPUNIT_ASSERT( it.val().m_val == i * 3 );
-                    }
-
-                    l.clear();
-                    CPPUNIT_ASSERT( l.empty() );
-
-                    // Const iterator
-                    for ( int i = 0; i < nCount; ++i )
-                        CPPUNIT_ASSERT( l.insert(i, i * 7) != l.end() );
-
-                    i = 0;
-                    const OrdList& rl = l;
-                    for ( typename OrdList::const_iterator iter = rl.begin(), itEnd = rl.end(); iter != itEnd; ++iter, ++i ) {
-                        CPPUNIT_ASSERT( iter.key() == i );
-                        CPPUNIT_ASSERT( iter->first == i );
-                        CPPUNIT_ASSERT( (*iter).first == i );
-
-                        CPPUNIT_ASSERT( iter.val().m_val == i * 7 );
-                        CPPUNIT_ASSERT( iter->second.m_val == i * 7 );
-                        CPPUNIT_ASSERT( (*iter).second.m_val == i * 7 );
-
-                        // it.val().m_val = i * 3    ; // error: const-iterator
-                    }
-
-                    l.clear();
-                    CPPUNIT_ASSERT( l.empty() );
-                }
-
-            }
-        }
-
-        void HP_cmp();
-        void HP_less();
-        void HP_cmpmix();
-        void HP_ic();
-
-        void DHP_cmp();
-        void DHP_less();
-        void DHP_cmpmix();
-        void DHP_ic();
-
-        void RCU_GPI_cmp();
-        void RCU_GPI_less();
-        void RCU_GPI_cmpmix();
-        void RCU_GPI_ic();
-
-        void RCU_GPB_cmp();
-        void RCU_GPB_less();
-        void RCU_GPB_cmpmix();
-        void RCU_GPB_ic();
-
-        void RCU_GPT_cmp();
-        void RCU_GPT_less();
-        void RCU_GPT_cmpmix();
-        void RCU_GPT_ic();
-
-        void RCU_SHB_cmp();
-        void RCU_SHB_less();
-        void RCU_SHB_cmpmix();
-        void RCU_SHB_ic();
-
-        void RCU_SHT_cmp();
-        void RCU_SHT_less();
-        void RCU_SHT_cmpmix();
-        void RCU_SHT_ic();
-
-        void NOGC_cmp();
-        void NOGC_less();
-        void NOGC_cmpmix();
-        void NOGC_ic();
-
-        CPPUNIT_TEST_SUITE(MichaelKVListTestHeader)
-            CPPUNIT_TEST(HP_cmp)
-            CPPUNIT_TEST(HP_less)
-            CPPUNIT_TEST(HP_cmpmix)
-            CPPUNIT_TEST(HP_ic)
-
-            CPPUNIT_TEST(DHP_cmp)
-            CPPUNIT_TEST(DHP_less)
-            CPPUNIT_TEST(DHP_cmpmix)
-            CPPUNIT_TEST(DHP_ic)
-
-            CPPUNIT_TEST(RCU_GPI_cmp)
-            CPPUNIT_TEST(RCU_GPI_less)
-            CPPUNIT_TEST(RCU_GPI_cmpmix)
-            CPPUNIT_TEST(RCU_GPI_ic)
-
-            CPPUNIT_TEST(RCU_GPB_cmp)
-            CPPUNIT_TEST(RCU_GPB_less)
-            CPPUNIT_TEST(RCU_GPB_cmpmix)
-            CPPUNIT_TEST(RCU_GPB_ic)
-
-            CPPUNIT_TEST(RCU_GPT_cmp)
-            CPPUNIT_TEST(RCU_GPT_less)
-            CPPUNIT_TEST(RCU_GPT_cmpmix)
-            CPPUNIT_TEST(RCU_GPT_ic)
-
-            CPPUNIT_TEST(RCU_SHB_cmp)
-            CPPUNIT_TEST(RCU_SHB_less)
-            CPPUNIT_TEST(RCU_SHB_cmpmix)
-            CPPUNIT_TEST(RCU_SHB_ic)
-
-            CPPUNIT_TEST(RCU_SHT_cmp)
-            CPPUNIT_TEST(RCU_SHT_less)
-            CPPUNIT_TEST(RCU_SHT_cmpmix)
-            CPPUNIT_TEST(RCU_SHT_ic)
-
-            CPPUNIT_TEST(NOGC_cmp)
-            CPPUNIT_TEST(NOGC_less)
-            CPPUNIT_TEST(NOGC_cmpmix)
-            CPPUNIT_TEST(NOGC_ic)
-        CPPUNIT_TEST_SUITE_END()
-    };
-
-}   // namespace ordlist
-
-#endif // #ifndef CDSTEST_HDR_MICHAEL_KV_H
diff --git a/tests/test-hdr/list/hdr_michael_kv_dhp.cpp b/tests/test-hdr/list/hdr_michael_kv_dhp.cpp
deleted file mode 100644 (file)
index 55d76ba..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_michael_kv.h"
-#include <cds/container/michael_kvlist_dhp.h>
-
-namespace ordlist {
-    namespace {
-        struct DHP_cmp_traits: public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::cmp<MichaelKVListTestHeader::key_type>   compare;
-        };
-    }
-    void MichaelKVListTestHeader::DHP_cmp()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< cds::gc::DHP, key_type, value_type, DHP_cmp_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< cds::gc::DHP, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct DHP_less_traits: public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>   less;
-        };
-    }
-    void MichaelKVListTestHeader::DHP_less()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< cds::gc::DHP, key_type, value_type, DHP_less_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< cds::gc::DHP, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct DHP_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::cmp<MichaelKVListTestHeader::key_type>   compare;
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>  less;
-        };
-    }
-    void MichaelKVListTestHeader::DHP_cmpmix()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< cds::gc::DHP, key_type, value_type, DHP_cmpmix_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< cds::gc::DHP, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-                ,cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct DHP_ic_traits: public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void MichaelKVListTestHeader::DHP_ic()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< cds::gc::DHP, key_type, value_type, DHP_ic_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< cds::gc::DHP, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<key_type> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-}   // namespace ordlist
-
diff --git a/tests/test-hdr/list/hdr_michael_kv_hp.cpp b/tests/test-hdr/list/hdr_michael_kv_hp.cpp
deleted file mode 100644 (file)
index 96c1709..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_michael_kv.h"
-#include <cds/container/michael_kvlist_hp.h>
-
-namespace ordlist {
-    namespace {
-        struct HP_cmp_traits: public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::cmp<MichaelKVListTestHeader::key_type>   compare;
-        };
-
-    }
-    void MichaelKVListTestHeader::HP_cmp()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< cds::gc::HP, key_type, value_type, HP_cmp_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< cds::gc::HP,
-            key_type,
-            value_type,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct HP_less_traits : public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>   less;
-        };
-    }
-    void MichaelKVListTestHeader::HP_less()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< cds::gc::HP, key_type, value_type, HP_less_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< cds::gc::HP, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct HP_cmpmix_traits : public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::cmp<MichaelKVListTestHeader::key_type>   compare;
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>  less;
-        };
-    }
-    void MichaelKVListTestHeader::HP_cmpmix()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< cds::gc::HP, key_type, value_type, HP_cmpmix_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< cds::gc::HP, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-                ,cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-    namespace {
-        struct HP_ic_traits : public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void MichaelKVListTestHeader::HP_ic()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< cds::gc::HP, key_type, value_type, HP_ic_traits > list;
-        test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< cds::gc::HP, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<key_type> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test< opt_list >();
-    }
-
-}   // namespace ordlist
-
-CPPUNIT_TEST_SUITE_REGISTRATION(ordlist::MichaelKVListTestHeader);
diff --git a/tests/test-hdr/list/hdr_michael_kv_nogc.cpp b/tests/test-hdr/list/hdr_michael_kv_nogc.cpp
deleted file mode 100644 (file)
index ef5477e..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_michael_kv.h"
-#include <cds/container/michael_kvlist_nogc.h>
-
-namespace ordlist {
-    namespace {
-        struct NOGC_cmp_traits : public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::cmp<MichaelKVListTestHeader::key_type>   compare;
-        };
-
-    }
-    void MichaelKVListTestHeader::NOGC_cmp()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< cds::gc::nogc, key_type, value_type, NOGC_cmp_traits > list;
-        nogc_test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< cds::gc::nogc,
-            key_type,
-            value_type,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-            >::type
-        > opt_list;
-        nogc_test< opt_list >();
-    }
-
-    namespace {
-        struct NOGC_less_traits : public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>   less;
-        };
-    }
-    void MichaelKVListTestHeader::NOGC_less()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< cds::gc::nogc, key_type, value_type, NOGC_less_traits > list;
-        nogc_test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< cds::gc::nogc, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        nogc_test< opt_list >();
-    }
-
-    namespace {
-        struct NOGC_cmpmix_traits : public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::cmp<MichaelKVListTestHeader::key_type>   compare;
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>  less;
-        };
-    }
-    void MichaelKVListTestHeader::NOGC_cmpmix()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< cds::gc::nogc, key_type, value_type, NOGC_cmpmix_traits > list;
-        nogc_test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< cds::gc::nogc, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-                ,cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        nogc_test< opt_list >();
-    }
-
-    namespace {
-        struct NOGC_ic_traits : public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void MichaelKVListTestHeader::NOGC_ic()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< cds::gc::nogc, key_type, value_type, NOGC_ic_traits > list;
-        nogc_test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< cds::gc::nogc, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<key_type> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        nogc_test< opt_list >();
-    }
-
-}   // namespace ordlist
-
diff --git a/tests/test-hdr/list/hdr_michael_kv_rcu_gpb.cpp b/tests/test-hdr/list/hdr_michael_kv_rcu_gpb.cpp
deleted file mode 100644 (file)
index 6bcc565..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_michael_kv.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/container/michael_kvlist_rcu.h>
-
-namespace ordlist {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_type;
-        struct RCU_GPB_cmp_traits : public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::cmp<MichaelKVListTestHeader::key_type>   compare;
-        };
-    }
-    void MichaelKVListTestHeader::RCU_GPB_cmp()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_GPB_cmp_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPB_less_traits : public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>   less;
-        };
-    }
-    void MichaelKVListTestHeader::RCU_GPB_less()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_GPB_less_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPB_cmpmix_traits : public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::cmp<MichaelKVListTestHeader::key_type>   compare;
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>  less;
-        };
-    }
-    void MichaelKVListTestHeader::RCU_GPB_cmpmix()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_GPB_cmpmix_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-                ,cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPB_ic_traits : public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void MichaelKVListTestHeader::RCU_GPB_ic()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_GPB_ic_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<key_type> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-}   // namespace ordlist
-
diff --git a/tests/test-hdr/list/hdr_michael_kv_rcu_gpi.cpp b/tests/test-hdr/list/hdr_michael_kv_rcu_gpi.cpp
deleted file mode 100644 (file)
index da32637..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_michael_kv.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/container/michael_kvlist_rcu.h>
-
-namespace ordlist {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
-        struct RCU_GPI_cmp_traits : public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::cmp<MichaelKVListTestHeader::key_type>   compare;
-        };
-    }
-    void MichaelKVListTestHeader::RCU_GPI_cmp()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_GPI_cmp_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPI_less_traits : public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>   less;
-        };
-    }
-    void MichaelKVListTestHeader::RCU_GPI_less()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_GPI_less_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPI_cmpmix_traits : public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::cmp<MichaelKVListTestHeader::key_type>   compare;
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>  less;
-        };
-    }
-    void MichaelKVListTestHeader::RCU_GPI_cmpmix()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_GPI_cmpmix_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-                ,cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPI_ic_traits : public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void MichaelKVListTestHeader::RCU_GPI_ic()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_GPI_ic_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<key_type> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-}   // namespace ordlist
-
diff --git a/tests/test-hdr/list/hdr_michael_kv_rcu_gpt.cpp b/tests/test-hdr/list/hdr_michael_kv_rcu_gpt.cpp
deleted file mode 100644 (file)
index 0faee96..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_michael_kv.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/container/michael_kvlist_rcu.h>
-
-namespace ordlist {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_type;
-        struct RCU_GPT_cmp_traits: public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::cmp<MichaelKVListTestHeader::key_type>   compare;
-        };
-    }
-    void MichaelKVListTestHeader::RCU_GPT_cmp()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_GPT_cmp_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPT_less_traits : public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>   less;
-        };
-    }
-    void MichaelKVListTestHeader::RCU_GPT_less()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_GPT_less_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPT_cmpmix_traits : public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::cmp<MichaelKVListTestHeader::key_type>   compare;
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>  less;
-        };
-    }
-    void MichaelKVListTestHeader::RCU_GPT_cmpmix()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_GPT_cmpmix_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-                ,cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPT_ic_traits : public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void MichaelKVListTestHeader::RCU_GPT_ic()
-    {
-        // traits-based version
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_GPT_ic_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<key_type> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-}   // namespace ordlist
-
diff --git a/tests/test-hdr/list/hdr_michael_kv_rcu_shb.cpp b/tests/test-hdr/list/hdr_michael_kv_rcu_shb.cpp
deleted file mode 100644 (file)
index a8275bf..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_michael_kv.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/container/michael_kvlist_rcu.h>
-
-namespace ordlist {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_type;
-        struct RCU_SHB_cmp_traits: public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::cmp<MichaelKVListTestHeader::key_type>   compare;
-        };
-    }
-#endif
-    void MichaelKVListTestHeader::RCU_SHB_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_SHB_cmp_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHB_less_traits: public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>   less;
-        };
-    }
-#endif
-    void MichaelKVListTestHeader::RCU_SHB_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_SHB_less_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHB_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::cmp<MichaelKVListTestHeader::key_type>   compare;
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>  less;
-        };
-    }
-#endif
-    void MichaelKVListTestHeader::RCU_SHB_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_SHB_cmpmix_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-                ,cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHB_ic_traits: public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-#endif
-    void MichaelKVListTestHeader::RCU_SHB_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_SHB_ic_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<key_type> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-}   // namespace ordlist
diff --git a/tests/test-hdr/list/hdr_michael_kv_rcu_sht.cpp b/tests/test-hdr/list/hdr_michael_kv_rcu_sht.cpp
deleted file mode 100644 (file)
index 93f486a..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_michael_kv.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/container/michael_kvlist_rcu.h>
-
-namespace ordlist {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_type;
-        struct RCU_SHT_cmp_traits: public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::cmp<MichaelKVListTestHeader::key_type>   compare;
-        };
-    }
-#endif
-    void MichaelKVListTestHeader::RCU_SHT_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_SHT_cmp_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHT_less_traits: public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>   less;
-        };
-    }
-#endif
-    void MichaelKVListTestHeader::RCU_SHT_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_SHT_less_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHT_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::cmp<MichaelKVListTestHeader::key_type>   compare;
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>  less;
-        };
-    }
-#endif
-    void MichaelKVListTestHeader::RCU_SHT_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_SHT_cmpmix_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<key_type> >
-                ,cc::opt::less< lt<key_type> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHT_ic_traits: public cc::michael_list::traits
-        {
-            typedef MichaelKVListTestHeader::lt<MichaelKVListTestHeader::key_type>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-#endif
-    void MichaelKVListTestHeader::RCU_SHT_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type, RCU_SHT_ic_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelKVList< rcu_type, key_type, value_type,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<key_type> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-}   // namespace ordlist
diff --git a/tests/test-hdr/list/hdr_michael_nogc.cpp b/tests/test-hdr/list/hdr_michael_nogc.cpp
deleted file mode 100644 (file)
index 870f414..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_michael.h"
-#include <cds/container/michael_list_nogc.h>
-
-namespace ordlist {
-    namespace {
-        struct NOGC_cmp_traits: public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::cmp<MichaelListTestHeader::item>   compare;
-        };
-    }
-    void MichaelListTestHeader::NOGC_cmp()
-    {
-        // traits-based version
-        typedef cc::MichaelList< cds::gc::nogc, item, NOGC_cmp_traits > list;
-        nogc_test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< cds::gc::nogc, item,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<item> >
-            >::type
-        > opt_list;
-        nogc_test< opt_list >();
-    }
-
-    namespace {
-        struct NOGC_less_traits: public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>   less;
-        };
-    }
-    void MichaelListTestHeader::NOGC_less()
-    {
-        // traits-based version
-        typedef cc::MichaelList< cds::gc::nogc, item, NOGC_less_traits > list;
-        nogc_test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< cds::gc::nogc, item,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        nogc_test< opt_list >();
-    }
-
-    namespace {
-        struct NOGC_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::cmp<MichaelListTestHeader::item>   compare;
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>  less;
-        };
-    }
-    void MichaelListTestHeader::NOGC_cmpmix()
-    {
-        // traits-based version
-        typedef cc::MichaelList< cds::gc::nogc, item, NOGC_cmpmix_traits > list;
-        nogc_test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< cds::gc::nogc, item,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<item> >
-                ,cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        nogc_test< opt_list >();
-    }
-
-    namespace {
-        struct NOGC_ic_traits: public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void MichaelListTestHeader::NOGC_ic()
-    {
-        // traits-based version
-        typedef cc::MichaelList< cds::gc::nogc, item, NOGC_ic_traits > list;
-        nogc_test< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< cds::gc::nogc, item,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<item> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        nogc_test< opt_list >();
-    }
-
-}   // namespace ordlist
-
diff --git a/tests/test-hdr/list/hdr_michael_rcu_gpb.cpp b/tests/test-hdr/list/hdr_michael_rcu_gpb.cpp
deleted file mode 100644 (file)
index 4a8dad7..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_michael.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/container/michael_list_rcu.h>
-
-namespace ordlist {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> >    rcu_type;
-
-        struct RCU_GPB_cmp_traits: public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::cmp<MichaelListTestHeader::item>   compare;
-        };
-    }
-
-    void MichaelListTestHeader::RCU_GPB_cmp()
-    {
-        // traits-based version
-        typedef cc::MichaelList< rcu_type, item, RCU_GPB_cmp_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< rcu_type, item,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPB_less_traits: public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>   less;
-        };
-    }
-    void MichaelListTestHeader::RCU_GPB_less()
-    {
-        // traits-based version
-        typedef cc::MichaelList< rcu_type, item, RCU_GPB_less_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< rcu_type, item,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPB_cmpmix_traits : public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::cmp<MichaelListTestHeader::item>   compare;
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>  less;
-        };
-    }
-    void MichaelListTestHeader::RCU_GPB_cmpmix()
-    {
-        // traits-based version
-        typedef cc::MichaelList< rcu_type, item, RCU_GPB_cmpmix_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< rcu_type, item,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<item> >
-                ,cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPB_ic_traits : public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void MichaelListTestHeader::RCU_GPB_ic()
-    {
-        // traits-based version
-        typedef cc::MichaelList< rcu_type, item, RCU_GPB_ic_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< rcu_type, item,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<item> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-}   // namespace ordlist
-
diff --git a/tests/test-hdr/list/hdr_michael_rcu_gpi.cpp b/tests/test-hdr/list/hdr_michael_rcu_gpi.cpp
deleted file mode 100644 (file)
index 3a93da3..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_michael.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/container/michael_list_rcu.h>
-
-namespace ordlist {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> >    rcu_type;
-
-        struct RCU_GPI_cmp_traits : public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::cmp<MichaelListTestHeader::item>   compare;
-        };
-    }
-
-    void MichaelListTestHeader::RCU_GPI_cmp()
-    {
-        // traits-based version
-        typedef cc::MichaelList< rcu_type, item, RCU_GPI_cmp_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< rcu_type, item,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPI_less_traits : public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>   less;
-        };
-    }
-    void MichaelListTestHeader::RCU_GPI_less()
-    {
-        // traits-based version
-        typedef cc::MichaelList< rcu_type, item, RCU_GPI_less_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< rcu_type, item,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPI_cmpmix_traits : public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::cmp<MichaelListTestHeader::item>   compare;
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>  less;
-        };
-    }
-    void MichaelListTestHeader::RCU_GPI_cmpmix()
-    {
-        // traits-based version
-        typedef cc::MichaelList< rcu_type, item, RCU_GPI_cmpmix_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< rcu_type, item,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<item> >
-                ,cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPI_ic_traits : public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void MichaelListTestHeader::RCU_GPI_ic()
-    {
-        // traits-based version
-        typedef cc::MichaelList< rcu_type, item, RCU_GPI_ic_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< rcu_type, item,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<item> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-}   // namespace ordlist
-
diff --git a/tests/test-hdr/list/hdr_michael_rcu_gpt.cpp b/tests/test-hdr/list/hdr_michael_rcu_gpt.cpp
deleted file mode 100644 (file)
index 49ceab8..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_michael.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/container/michael_list_rcu.h>
-
-namespace ordlist {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> >    rcu_type;
-
-        struct RCU_GPT_cmp_traits : public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::cmp<MichaelListTestHeader::item>   compare;
-        };
-    }
-
-    void MichaelListTestHeader::RCU_GPT_cmp()
-    {
-        // traits-based version
-        typedef cc::MichaelList< rcu_type, item, RCU_GPT_cmp_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< rcu_type, item,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPT_less_traits : public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>   less;
-        };
-    }
-    void MichaelListTestHeader::RCU_GPT_less()
-    {
-        // traits-based version
-        typedef cc::MichaelList< rcu_type, item, RCU_GPT_less_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< rcu_type, item,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPT_cmpmix_traits : public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::cmp<MichaelListTestHeader::item>   compare;
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>  less;
-        };
-    }
-    void MichaelListTestHeader::RCU_GPT_cmpmix()
-    {
-        // traits-based version
-        typedef cc::MichaelList< rcu_type, item, RCU_GPT_cmpmix_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< rcu_type, item,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<item> >
-                ,cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-    namespace {
-        struct RCU_GPT_ic_traits : public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void MichaelListTestHeader::RCU_GPT_ic()
-    {
-        // traits-based version
-        typedef cc::MichaelList< rcu_type, item, RCU_GPT_ic_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< rcu_type, item,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<item> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-    }
-
-}   // namespace ordlist
-
diff --git a/tests/test-hdr/list/hdr_michael_rcu_shb.cpp b/tests/test-hdr/list/hdr_michael_rcu_shb.cpp
deleted file mode 100644 (file)
index a60d88b..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_michael.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/container/michael_list_rcu.h>
-
-namespace ordlist {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> >    rcu_type;
-
-        struct RCU_SHB_cmp_traits : public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::cmp<MichaelListTestHeader::item>   compare;
-        };
-    }
-#endif
-
-    void MichaelListTestHeader::RCU_SHB_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::MichaelList< rcu_type, item, RCU_SHB_cmp_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< rcu_type, item,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHB_less_traits : public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>   less;
-        };
-    }
-#endif
-    void MichaelListTestHeader::RCU_SHB_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::MichaelList< rcu_type, item, RCU_SHB_less_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< rcu_type, item,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHB_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::cmp<MichaelListTestHeader::item>   compare;
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>  less;
-        };
-    }
-#endif
-    void MichaelListTestHeader::RCU_SHB_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::MichaelList< rcu_type, item, RCU_SHB_cmpmix_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< rcu_type, item,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<item> >
-                ,cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHB_ic_traits: public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-#endif
-    void MichaelListTestHeader::RCU_SHB_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::MichaelList< rcu_type, item, RCU_SHB_ic_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< rcu_type, item,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<item> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-}   // namespace ordlist
diff --git a/tests/test-hdr/list/hdr_michael_rcu_sht.cpp b/tests/test-hdr/list/hdr_michael_rcu_sht.cpp
deleted file mode 100644 (file)
index 3cd2ec6..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "list/hdr_michael.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/container/michael_list_rcu.h>
-
-namespace ordlist {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> >    rcu_type;
-
-        struct RCU_SHT_cmp_traits : public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::cmp<MichaelListTestHeader::item>   compare;
-        };
-    }
-#endif
-
-    void MichaelListTestHeader::RCU_SHT_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::MichaelList< rcu_type, item, RCU_SHT_cmp_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< rcu_type, item,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHT_less_traits: public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>   less;
-        };
-    }
-#endif
-    void MichaelListTestHeader::RCU_SHT_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::MichaelList< rcu_type, item, RCU_SHT_less_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< rcu_type, item,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHT_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::cmp<MichaelListTestHeader::item>   compare;
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>  less;
-        };
-    }
-#endif
-    void MichaelListTestHeader::RCU_SHT_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::MichaelList< rcu_type, item, RCU_SHT_cmpmix_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< rcu_type, item,
-            cc::michael_list::make_traits<
-                cc::opt::compare< cmp<item> >
-                ,cc::opt::less< lt<item> >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct RCU_SHT_ic_traits: public cc::michael_list::traits
-        {
-            typedef MichaelListTestHeader::lt<MichaelListTestHeader::item>   less;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-#endif
-    void MichaelListTestHeader::RCU_SHT_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::MichaelList< rcu_type, item, RCU_SHT_ic_traits > list;
-        test_rcu< list >();
-
-        // option-based version
-
-        typedef cc::MichaelList< rcu_type, item,
-            cc::michael_list::make_traits<
-                cc::opt::less< lt<item> >
-                ,cc::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        > opt_list;
-        test_rcu< opt_list >();
-#endif
-    }
-
-}   // namespace ordlist
diff --git a/tests/test-hdr/map/hdr_cuckoo_map.cpp b/tests/test-hdr/map/hdr_cuckoo_map.cpp
deleted file mode 100644 (file)
index 643010a..0000000
+++ /dev/null
@@ -1,682 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_cuckoo_map.h"
-#include <cds/container/cuckoo_map.h>
-
-namespace map {
-
-    namespace {
-        typedef CuckooMapHdrTest::hash_int    hash1;
-        struct hash2: private hash1
-        {
-            typedef hash1 base_class;
-
-            size_t operator()( int i ) const
-            {
-                size_t h = ~( base_class::operator()(i));
-                return ~h + 0x9e3779b9 + (h << 6) + (h >> 2);
-            }
-        };
-    }
-
-    void CuckooMapHdrTest::Cuckoo_striped_list()
-    {
-        CPPUNIT_MESSAGE( "equal");
-        {
-            struct map_traits : public cc::cuckoo::traits {
-                typedef std::equal_to<int> equal_to;
-                typedef co::hash_tuple< hash1, hash2 > hash;
-            };
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type, map_traits > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "equal, store hash");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::mutex_policy< cc::cuckoo::striping<> >
-                    ,co::equal_to< std::equal_to< int > >
-                    ,cc::cuckoo::store_hash< true >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "cmp");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::compare< CuckooMapHdrTest::cmp >
-                    ,cc::cuckoo::store_hash< false >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "cmp, store hash");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::mutex_policy< cc::cuckoo::striping<> >
-                    ,co::compare< CuckooMapHdrTest::cmp >
-                    ,cc::cuckoo::store_hash< true >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::less< std::less<int> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                    ,co::mutex_policy< cc::cuckoo::striping<> >
-                    ,cc::cuckoo::store_hash< false >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less, store hash");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::mutex_policy< cc::cuckoo::striping<> >
-                    ,co::less< std::less<int> >
-                    ,cc::cuckoo::store_hash< true >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less+cmp");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::less< std::less<int> >
-                    ,co::compare< CuckooMapHdrTest::cmp >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                    ,co::mutex_policy< cc::cuckoo::striping<> >
-                    ,cc::cuckoo::store_hash< false >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less+cmp, store hash");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::mutex_policy< cc::cuckoo::striping<> >
-                    ,co::less< std::less<int> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                    ,co::compare< CuckooMapHdrTest::cmp >
-                    ,cc::cuckoo::store_hash< true >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less+cmp+equal");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::less< std::less<int> >
-                    ,co::compare< CuckooMapHdrTest::cmp >
-                    ,co::equal_to< std::equal_to<int> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                    ,co::mutex_policy< cc::cuckoo::striping<> >
-                    ,cc::cuckoo::store_hash< false >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less+cmp+equal, store hash");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::mutex_policy< cc::cuckoo::striping<> >
-                    ,co::less< std::less<int> >
-                    ,co::compare< CuckooMapHdrTest::cmp >
-                    ,co::equal_to< std::equal_to< int > >
-                    ,cc::cuckoo::store_hash< true >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-    }
-
-
-    void CuckooMapHdrTest::Cuckoo_striped_vector()
-    {
-        CPPUNIT_MESSAGE( "equal");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::equal_to< std::equal_to<int> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "equal, store hash");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::mutex_policy< cc::cuckoo::striping<> >
-                    ,co::equal_to< std::equal_to< int > >
-                    ,cc::cuckoo::store_hash< true >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "cmp");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::compare< CuckooMapHdrTest::cmp >
-                    ,cc::cuckoo::store_hash< false >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "cmp, store hash");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::mutex_policy< cc::cuckoo::striping<> >
-                    ,co::compare< CuckooMapHdrTest::cmp >
-                    ,cc::cuckoo::store_hash< true >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::less< std::less<int> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                    ,co::mutex_policy< cc::cuckoo::striping<> >
-                    ,cc::cuckoo::store_hash< false >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less, store hash");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::mutex_policy< cc::cuckoo::striping<> >
-                    ,co::less< std::less<int> >
-                    ,cc::cuckoo::store_hash< true >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less+cmp");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::less< std::less<int> >
-                    ,co::compare< CuckooMapHdrTest::cmp >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                    ,co::mutex_policy< cc::cuckoo::striping<> >
-                    ,cc::cuckoo::store_hash< false >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less+cmp, store hash");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::mutex_policy< cc::cuckoo::striping<> >
-                    ,co::less< std::less<int> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                    ,co::compare< CuckooMapHdrTest::cmp >
-                    ,cc::cuckoo::store_hash< true >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less+cmp+equal");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::less< std::less<int> >
-                    ,co::compare< CuckooMapHdrTest::cmp >
-                    ,co::equal_to< std::equal_to<int> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                    ,co::mutex_policy< cc::cuckoo::striping<> >
-                    ,cc::cuckoo::store_hash< false >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less+cmp+equal, store hash");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::mutex_policy< cc::cuckoo::striping<> >
-                    ,co::less< std::less<int> >
-                    ,co::compare< CuckooMapHdrTest::cmp >
-                    ,co::equal_to< std::equal_to< int > >
-                    ,cc::cuckoo::store_hash< true >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-    }
-
-
-    void CuckooMapHdrTest::Cuckoo_refinable_list()
-    {
-        CPPUNIT_MESSAGE( "equal");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::equal_to< std::equal_to<int> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                    ,co::mutex_policy< cc::cuckoo::refinable<> >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "equal, store hash");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::mutex_policy< cc::cuckoo::refinable<> >
-                    ,co::equal_to< std::equal_to< int > >
-                    ,cc::cuckoo::store_hash< true >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "cmp");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::compare< CuckooMapHdrTest::cmp >
-                    ,cc::cuckoo::store_hash< false >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                    ,co::mutex_policy< cc::cuckoo::refinable<> >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "cmp, store hash");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::mutex_policy< cc::cuckoo::refinable<> >
-                    ,co::compare< CuckooMapHdrTest::cmp >
-                    ,cc::cuckoo::store_hash< true >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::less< std::less<int> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                    ,co::mutex_policy< cc::cuckoo::refinable<> >
-                    ,cc::cuckoo::store_hash< false >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less, store hash");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::mutex_policy< cc::cuckoo::refinable<> >
-                    ,co::less< std::less<int> >
-                    ,cc::cuckoo::store_hash< true >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less+cmp");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::less< std::less<int> >
-                    ,co::compare< CuckooMapHdrTest::cmp >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                    ,co::mutex_policy< cc::cuckoo::refinable<> >
-                    ,cc::cuckoo::store_hash< false >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less+cmp, store hash");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::mutex_policy< cc::cuckoo::refinable<> >
-                    ,co::less< std::less<int> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                    ,co::compare< CuckooMapHdrTest::cmp >
-                    ,cc::cuckoo::store_hash< true >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less+cmp+equal");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::less< std::less<int> >
-                    ,co::compare< CuckooMapHdrTest::cmp >
-                    ,co::equal_to< std::equal_to<int> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                    ,co::mutex_policy< cc::cuckoo::refinable<> >
-                    ,cc::cuckoo::store_hash< false >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less+cmp+equal, store hash");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::mutex_policy< cc::cuckoo::refinable<> >
-                    ,co::less< std::less<int> >
-                    ,co::compare< CuckooMapHdrTest::cmp >
-                    ,co::equal_to< std::equal_to< int > >
-                    ,cc::cuckoo::store_hash< true >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-    }
-
-
-    void CuckooMapHdrTest::Cuckoo_refinable_vector()
-    {
-        CPPUNIT_MESSAGE( "equal");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::equal_to< std::equal_to<int> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                    ,co::mutex_policy< cc::cuckoo::refinable<> >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "equal, store hash");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::mutex_policy< cc::cuckoo::refinable<> >
-                    ,co::equal_to< std::equal_to< int > >
-                    ,cc::cuckoo::store_hash< true >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "cmp");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::compare< CuckooMapHdrTest::cmp >
-                    ,cc::cuckoo::store_hash< false >
-                    ,co::mutex_policy< cc::cuckoo::refinable<> >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "cmp, store hash");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::mutex_policy< cc::cuckoo::refinable<> >
-                    ,co::compare< CuckooMapHdrTest::cmp >
-                    ,cc::cuckoo::store_hash< true >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::less< std::less<int> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                    ,cc::cuckoo::store_hash< false >
-                    ,co::mutex_policy< cc::cuckoo::refinable<> >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less, store hash");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::mutex_policy< cc::cuckoo::refinable<> >
-                    ,co::less< std::less<int> >
-                    ,cc::cuckoo::store_hash< true >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less+cmp");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::less< std::less<int> >
-                    ,co::compare< CuckooMapHdrTest::cmp >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                    ,co::mutex_policy< cc::cuckoo::refinable<> >
-                    ,cc::cuckoo::store_hash< false >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less+cmp, store hash");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::mutex_policy< cc::cuckoo::refinable<> >
-                    ,co::less< std::less<int> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                    ,co::compare< CuckooMapHdrTest::cmp >
-                    ,cc::cuckoo::store_hash< true >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less+cmp+equal");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::less< std::less<int> >
-                    ,co::compare< CuckooMapHdrTest::cmp >
-                    ,co::equal_to< std::equal_to<int> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                    ,co::mutex_policy< cc::cuckoo::refinable<> >
-                    ,cc::cuckoo::store_hash< false >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-
-        CPPUNIT_MESSAGE( "less+cmp+equal, store hash");
-        {
-            typedef cc::CuckooMap< CuckooMapHdrTest::key_type, CuckooMapHdrTest::value_type,
-                cc::cuckoo::make_traits<
-                    co::mutex_policy< cc::cuckoo::refinable<> >
-                    ,co::less< std::less<int> >
-                    ,co::compare< CuckooMapHdrTest::cmp >
-                    ,co::equal_to< std::equal_to< int > >
-                    ,cc::cuckoo::store_hash< true >
-                    ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                    ,co::hash< std::tuple< hash1, hash2 > >
-                >::type
-            > map_t;
-
-            test_cuckoo<map_t>();
-        }
-    }
-
-}   // namespace map
-
-CPPUNIT_TEST_SUITE_REGISTRATION(map::CuckooMapHdrTest);
diff --git a/tests/test-hdr/map/hdr_cuckoo_map.h b/tests/test-hdr/map/hdr_cuckoo_map.h
deleted file mode 100644 (file)
index 7135645..0000000
+++ /dev/null
@@ -1,421 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_CUCKOO_MAP_H
-#define CDSTEST_HDR_CUCKOO_MAP_H
-#include "size_check.h"
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/os/timer.h>
-#include <cds/opt/hash.h>
-#include <functional>   // ref
-
-namespace cds { namespace container {}}
-
-namespace map {
-    using misc::check_size;
-
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-
-    class CuckooMapHdrTest: public CppUnitMini::TestCase
-    {
-    public:
-        typedef int key_type;
-
-        struct value_type {
-            int m_val;
-
-            value_type()
-                : m_val(0)
-            {}
-
-            value_type( int n )
-                : m_val( n )
-            {}
-
-            value_type( value_type&& v )
-                : m_val( v.m_val )
-            {}
-
-            value_type( value_type const& v )
-                : m_val( v.m_val )
-            {}
-
-            value_type& operator=( value_type const& v )
-            {
-                m_val = v.m_val;
-                return *this;
-            }
-        };
-
-        typedef std::pair<key_type const, value_type> pair_type;
-
-        struct less
-        {
-            bool operator ()(int v1, int v2 ) const
-            {
-                return v1 < v2;
-            }
-        };
-
-        struct cmp {
-            int operator ()(int v1, int v2 ) const
-            {
-                if ( v1 < v2 )
-                    return -1;
-                return v1 > v2 ? 1 : 0;
-            }
-        };
-
-        struct equal {
-            bool operator ()(int v1, int v2 ) const
-            {
-                return v1 == v2;
-            }
-        };
-
-        struct hash_int {
-            size_t operator()( int i ) const
-            {
-                return co::v::hash<int>()( i );
-            }
-        };
-
-        struct simple_item_counter {
-            size_t  m_nCount;
-
-            simple_item_counter()
-                : m_nCount(0)
-            {}
-
-            size_t operator ++()
-            {
-                return ++m_nCount;
-            }
-
-            size_t operator --()
-            {
-                return --m_nCount;
-            }
-
-            void reset()
-            {
-                m_nCount = 0;
-            }
-
-            operator size_t() const
-            {
-                return m_nCount;
-            }
-        };
-
-        template <typename Map>
-        struct insert_functor
-        {
-            typedef typename Map::value_type pair_type;
-
-            // insert ftor
-            void operator()( pair_type& item )
-            {
-                item.second.m_val = item.first * 3;
-            }
-
-            // update() ftor
-            void operator()( bool bNew, pair_type& item )
-            {
-                if ( bNew )
-                    item.second.m_val = item.first * 2;
-                else
-                    item.second.m_val = item.first * 5;
-            }
-        };
-
-        struct check_value {
-            int     m_nExpected;
-
-            check_value( int nExpected )
-                : m_nExpected( nExpected )
-            {}
-
-            template <typename T>
-            void operator ()( T& pair )
-            {
-                CPPUNIT_ASSERT_CURRENT( pair.second.m_val == m_nExpected );
-            }
-            template <typename T, typename Q>
-            void operator ()( T& pair, Q )
-            {
-                CPPUNIT_ASSERT_CURRENT( pair.second.m_val == m_nExpected );
-            }
-        };
-
-        struct extract_functor
-        {
-            int *   m_pVal;
-            void operator()( pair_type const& val )
-            {
-                *m_pVal = val.second.m_val;
-            }
-        };
-
-        /*
-        template <class Map>
-        void test_iter( Map& s)
-        {
-            typedef typename Map::iterator          iterator;
-            typedef typename Map::const_iterator    const_iterator;
-
-            const int nMaxCount = 500;
-            for ( int i = 0; i < nMaxCount; ++i ) {
-                CPPUNIT_ASSERT( s.insert( i, i * 2 ));
-            }
-
-            int nCount = 0;
-            for ( iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( it->first * 2 == it->second.m_val );
-                CPPUNIT_ASSERT( (*it).first * 2 == (*it).second.m_val );
-                it->second.m_val = it->first;
-                ++nCount;
-            }
-            CPPUNIT_ASSERT( nCount == nMaxCount );
-
-            Map const& refSet = s;
-            nCount = 0;
-            for ( const_iterator it = refSet.begin(), itEnd = refSet.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( it->first == it->second.m_val );
-                CPPUNIT_ASSERT( (*it).first == (*it).second.m_val );
-                ++nCount;
-            }
-            CPPUNIT_ASSERT( nCount == nMaxCount );
-        }
-        */
-
-
-        template <class Map>
-        void test_cuckoo()
-        {
-            Map m( 32, 4, 3 );
-            CPPUNIT_ASSERT( m.bucket_count() == 32 );
-            CPPUNIT_ASSERT( m.lock_count() == 32 );
-
-            test_cuckoo_with( m );
-
-            // Iterators is not yet supported for CuckooMap
-            //m.clear();
-            //CPPUNIT_ASSERT( m.empty() );
-            //CPPUNIT_ASSERT( check_size( m, 0 ));
-            //test_iter(m);
-        }
-
-        //*******************************************
-        // If erase_with && find_with are supported
-        template <class Map>
-        void test_int_with( Map& m )
-        {
-            std::pair<bool, bool> updateResult;
-            typedef typename std::conditional< Map::c_isSorted, less, equal >::type predicate;
-
-            // insert
-            CPPUNIT_ASSERT( m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 0 ));
-            CPPUNIT_ASSERT( !m.contains(25) );
-            CPPUNIT_ASSERT( m.insert( 25 ) )    ;   // value = 0
-            CPPUNIT_ASSERT( m.contains(25) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 1 ));
-            CPPUNIT_ASSERT( m.contains(25) );
-
-            CPPUNIT_ASSERT( !m.insert( 25 ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 1 ));
-
-            CPPUNIT_ASSERT( !m.contains(10, predicate()) );
-            CPPUNIT_ASSERT( m.insert( 10, 10 ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 2 ));
-            CPPUNIT_ASSERT( m.contains(10, predicate()) );
-
-            CPPUNIT_ASSERT( !m.insert( 10, 20 ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 2 ));
-
-            CPPUNIT_ASSERT( !m.contains(30) );
-            CPPUNIT_ASSERT( m.insert_with( 30, insert_functor<Map>() ) )    ; // value = 90
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-            CPPUNIT_ASSERT( m.contains(30) );
-
-            CPPUNIT_ASSERT( !m.insert_with( 10, insert_functor<Map>() ) );
-            CPPUNIT_ASSERT( !m.insert_with( 25, insert_functor<Map>() ) );
-            CPPUNIT_ASSERT( !m.insert_with( 30, insert_functor<Map>() ) );
-
-            // update (new key)
-            CPPUNIT_ASSERT( !m.contains(27) );
-            updateResult = m.update(27, insert_functor<Map>(), false);
-            CPPUNIT_ASSERT(!updateResult.first);
-            CPPUNIT_ASSERT(!updateResult.second);
-            CPPUNIT_ASSERT(!m.contains(27));
-            updateResult = m.update( 27, insert_functor<Map>() ) ;   // value = 54
-            CPPUNIT_ASSERT( updateResult.first );
-            CPPUNIT_ASSERT( updateResult.second );
-            CPPUNIT_ASSERT( m.contains(27) );
-
-            // find test
-            check_value chk(10);
-            CPPUNIT_ASSERT( m.find( 10, std::ref(chk) ));
-            chk.m_nExpected = 0;
-            CPPUNIT_ASSERT( m.find_with( 25, predicate(), std::ref(chk) ));
-            chk.m_nExpected = 90;
-            CPPUNIT_ASSERT( m.find( 30, std::ref(chk) ));
-            chk.m_nExpected = 54;
-            CPPUNIT_ASSERT( m.find( 27, std::ref(chk) ));
-
-            updateResult = m.update( 10, insert_functor<Map>() ) ;   // value = 50
-            CPPUNIT_ASSERT( updateResult.first );
-            CPPUNIT_ASSERT( !updateResult.second );
-            chk.m_nExpected = 50;
-            CPPUNIT_ASSERT( m.find( 10, std::ref(chk) ));
-
-            // erase test
-            CPPUNIT_ASSERT( !m.contains(100) );
-            CPPUNIT_ASSERT( !m.erase( 100 )) ;  // not found
-
-            CPPUNIT_ASSERT( m.contains(25) );
-            CPPUNIT_ASSERT( check_size( m, 4 ));
-            CPPUNIT_ASSERT( m.erase( 25 ));
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-            CPPUNIT_ASSERT( !m.contains(25) );
-            CPPUNIT_ASSERT( !m.erase( 25 ));
-
-            CPPUNIT_ASSERT( !m.contains(258) );
-            CPPUNIT_ASSERT( m.insert(258))
-            CPPUNIT_ASSERT( check_size( m, 4 ));
-            CPPUNIT_ASSERT( m.contains(258, predicate()) );
-            CPPUNIT_ASSERT( m.erase_with( 258, predicate() ));
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-            CPPUNIT_ASSERT( !m.contains(258) );
-            CPPUNIT_ASSERT( !m.erase_with( 258, predicate() ));
-
-            int nVal;
-            extract_functor ext;
-            ext.m_pVal = &nVal;
-
-            CPPUNIT_ASSERT( !m.contains(29) );
-            CPPUNIT_ASSERT( m.insert(29, 290))
-            CPPUNIT_ASSERT( m.erase_with( 29, predicate(), std::ref(ext)));
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-            CPPUNIT_ASSERT( nVal == 290 );
-            nVal = -1;
-            CPPUNIT_ASSERT( !m.erase_with( 29, predicate(), std::ref( ext ) ) );
-            CPPUNIT_ASSERT( nVal == -1 );
-
-            CPPUNIT_ASSERT( m.erase( 30, std::ref( ext ) ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 2 ));
-            CPPUNIT_ASSERT( nVal == 90 );
-            nVal = -1;
-            CPPUNIT_ASSERT( !m.erase( 30, std::ref( ext ) ) );
-            CPPUNIT_ASSERT( nVal == -1 );
-
-            m.clear();
-            CPPUNIT_ASSERT( m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 0 ));
-
-            // emplace test
-            CPPUNIT_ASSERT( m.emplace(126) ) ; // key = 126, val = 0
-            CPPUNIT_ASSERT( m.emplace(137, 731))    ;   // key = 137, val = 731
-            CPPUNIT_ASSERT( m.emplace( 149, value_type(941) ))   ;   // key = 149, val = 941
-
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-
-            chk.m_nExpected = 0;
-            CPPUNIT_ASSERT( m.find( 126, std::ref(chk) ));
-            chk.m_nExpected = 731;
-            CPPUNIT_ASSERT( m.find_with( 137, predicate(), std::ref(chk) ));
-            chk.m_nExpected = 941;
-            CPPUNIT_ASSERT( m.find( 149, std::ref(chk) ));
-
-            CPPUNIT_ASSERT( !m.emplace(126, 621)) ; // already in map
-            chk.m_nExpected = 0;
-            CPPUNIT_ASSERT( m.find( 126, std::ref(chk) ));
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-
-            m.clear();
-            CPPUNIT_ASSERT( m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 0 ));
-        }
-
-        template <class Map>
-        void test_cuckoo_with(Map& m)
-        {
-            cds::OS::Timer    timer;
-
-            test_int_with( m );
-
-            // Iterators is not yet supported
-            //m.clear();
-            //CPPUNIT_ASSERT( m.empty() );
-            //CPPUNIT_ASSERT( check_size( m, 0 ));
-            //test_iter(m);
-
-            m.clear();
-            CPPUNIT_ASSERT( m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 0 ));
-
-            // Resizing test
-            for ( int i = 0; i < 40000; i++ ) {
-                m.insert( i );
-            }
-
-            CPPUNIT_MSG( "   Duration=" << timer.duration() );
-        }
-
-        void Cuckoo_striped_list();
-        void Cuckoo_striped_vector();
-        void Cuckoo_refinable_list();
-        void Cuckoo_refinable_vector();
-
-        CPPUNIT_TEST_SUITE(CuckooMapHdrTest)
-            CPPUNIT_TEST(Cuckoo_striped_list)
-            CPPUNIT_TEST(Cuckoo_striped_vector)
-            CPPUNIT_TEST(Cuckoo_refinable_list)
-            CPPUNIT_TEST(Cuckoo_refinable_vector)
-        CPPUNIT_TEST_SUITE_END()
-
-    };
-}   // namespace map
-
-#endif // #ifndef CDSTEST_HDR_CUCKOO_MAP_H
diff --git a/tests/test-hdr/map/hdr_feldman_hashmap.h b/tests/test-hdr/map/hdr_feldman_hashmap.h
deleted file mode 100644 (file)
index a7bcbd2..0000000
+++ /dev/null
@@ -1,827 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_FELDMAN_HASHMAP_H
-#define CDSTEST_HDR_FELDMAN_HASHMAP_H
-
-#include "cppunit/cppunit_proxy.h"
-
-// forward declaration
-namespace cds {
-    namespace container {}
-    namespace opt {}
-}
-
-namespace map {
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-
-    class FeldmanHashMapHdrTest : public CppUnitMini::TestCase
-    {
-        struct Item
-        {
-            unsigned int nInsertCall;
-            unsigned int nFindCall;
-            unsigned int nEraseCall;
-            mutable unsigned int nIteratorCall;
-
-            Item()
-                : nInsertCall(0)
-                , nFindCall(0)
-                , nEraseCall(0)
-                , nIteratorCall(0)
-            {}
-
-            explicit Item( unsigned int n )
-                : nInsertCall(n)
-                , nFindCall(0)
-                , nEraseCall(0)
-                , nIteratorCall(0)
-            {}
-        };
-
-        struct hash128
-        {
-            size_t lo;
-            size_t hi;
-
-            hash128() {}
-            hash128(size_t l, size_t h) : lo(l), hi(h) {}
-            hash128( hash128 const& h) : lo(h.lo), hi(h.hi) {}
-
-            struct make {
-                hash128 operator()( size_t n ) const
-                {
-                    return hash128( std::hash<size_t>()( n ), std::hash<size_t>()( ~n ));
-                }
-                hash128 operator()( hash128 const& n ) const
-                {
-                    return hash128( std::hash<size_t>()( n.lo ), std::hash<size_t>()( ~n.hi ));
-                }
-            };
-
-            struct less {
-                bool operator()( hash128 const& lhs, hash128 const& rhs ) const
-                {
-                    if ( lhs.hi != rhs.hi )
-                        return lhs.hi < rhs.hi;
-                    return lhs.lo < rhs.lo;
-                }
-            };
-
-            struct cmp {
-                int operator()( hash128 const& lhs, hash128 const& rhs ) const
-                {
-                    if ( lhs.hi != rhs.hi )
-                        return lhs.hi < rhs.hi ? -1 : 1;
-                    return lhs.lo < rhs.lo ? -1 : lhs.lo == rhs.lo ? 0 : 1;
-                }
-            };
-
-            friend bool operator==( hash128 const& lhs, hash128 const& rhs )
-            {
-                return cmp()( lhs, rhs ) == 0;
-            }
-            friend bool operator!=(hash128 const& lhs, hash128 const& rhs)
-            {
-                return !( lhs == rhs );
-            }
-        };
-
-        template <typename Map>
-        void test_hp( size_t nHeadBits, size_t nArrayBits )
-        {
-            typedef typename Map::hash_type hash_type;
-            typedef typename Map::key_type key_type;
-            typedef typename Map::mapped_type mapped_type;
-            typedef typename Map::value_type value_type;
-            typedef typename Map::guarded_ptr guarded_ptr;
-
-            size_t const capacity = 1000;
-
-            Map m( nHeadBits, nArrayBits );
-            CPPUNIT_MSG("Array size: head=" << m.head_size() << ", array_node=" << m.array_node_size());
-            //CPPUNIT_ASSERT(m.head_size() >= (size_t(1) << nHeadBits));
-            //CPPUNIT_ASSERT(m.array_node_size() == (size_t(1) << nArrayBits));
-
-            CPPUNIT_ASSERT(m.empty());
-            CPPUNIT_ASSERT(m.size() == 0);
-
-            // insert( key )/update()/get()/find()
-            for ( size_t i = 0; i < capacity; ++i ) {
-                size_t key = i * 57;
-                CPPUNIT_ASSERT(!m.contains( key ))
-                CPPUNIT_ASSERT(m.insert( key ));
-                CPPUNIT_ASSERT(m.contains( key ));
-                CPPUNIT_ASSERT(m.size() == i + 1);
-
-                auto ret = m.update(key, [] ( value_type& v, value_type * old ) {
-                    CPPUNIT_ASSERT_CURRENT( old != nullptr );
-                    ++v.second.nInsertCall;
-                }, false );
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( !ret.second );
-
-                CPPUNIT_ASSERT(m.find(key, [](value_type& v) { ++v.second.nFindCall;} ));
-
-                guarded_ptr gp{ m.get( key ) };
-                CPPUNIT_ASSERT( gp );
-                CPPUNIT_ASSERT( gp->first == key );
-                CPPUNIT_ASSERT( gp->second.nInsertCall == 1 );
-                CPPUNIT_ASSERT( gp->second.nFindCall == 1 );
-            }
-            CPPUNIT_ASSERT(!m.empty());
-            CPPUNIT_ASSERT(m.size() == capacity);
-
-            // iterator test
-            size_t nCount = 0;
-            for ( auto it = m.begin(), itEnd = m.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( it->second.nIteratorCall == 0 );
-                CPPUNIT_ASSERT( it->second.nInsertCall == 1 );
-                CPPUNIT_ASSERT( (*it).second.nFindCall == 1 );
-                it->second.nIteratorCall += 1;
-                ++nCount;
-            }
-            CPPUNIT_ASSERT( nCount == capacity );
-
-            nCount = 0;
-            for ( auto it = m.rbegin(), itEnd = m.rend(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( it->second.nInsertCall == 1 );
-                CPPUNIT_ASSERT( (*it).second.nFindCall == 1 );
-                CPPUNIT_ASSERT( it->second.nIteratorCall == 1 );
-                (*it).second.nIteratorCall += 1;
-                ++nCount;
-            }
-            CPPUNIT_ASSERT( nCount == capacity );
-
-            nCount = 0;
-            for ( auto it = m.cbegin(), itEnd = m.cend(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( it->second.nInsertCall == 1 );
-                CPPUNIT_ASSERT( (*it).second.nFindCall == 1 );
-                CPPUNIT_ASSERT( it->second.nIteratorCall == 2 );
-                (*it).second.nIteratorCall += 1;
-                ++nCount;
-            }
-            CPPUNIT_ASSERT( nCount == capacity );
-
-            nCount = 0;
-            for ( auto it = m.crbegin(), itEnd = m.crend(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( it->second.nInsertCall == 1 );
-                CPPUNIT_ASSERT( (*it).second.nFindCall == 1 );
-                CPPUNIT_ASSERT( it->second.nIteratorCall == 3 );
-                (*it).second.nIteratorCall += 1;
-                ++nCount;
-            }
-            CPPUNIT_ASSERT( nCount == capacity );
-
-            // find
-            for ( size_t i = 0; i < capacity; i++ ) {
-                size_t key = i * 57;
-                CPPUNIT_ASSERT( m.find( key, [key]( value_type& v ) {
-                    CPPUNIT_ASSERT_CURRENT( v.first == key );
-                    CPPUNIT_ASSERT_CURRENT( v.second.nInsertCall == 1 );
-                    CPPUNIT_ASSERT_CURRENT( v.second.nFindCall == 1 );
-                    CPPUNIT_ASSERT_CURRENT( v.second.nIteratorCall == 4 );
-                }));
-            }
-
-            // erase
-            for ( size_t i = capacity; i > 0; --i ) {
-                size_t key = (i -1) * 57;
-                guarded_ptr gp = m.get( key );
-                CPPUNIT_ASSERT( gp );
-                CPPUNIT_ASSERT( gp->first == key );
-                CPPUNIT_ASSERT( gp->second.nInsertCall == 1 );
-                CPPUNIT_ASSERT( gp->second.nFindCall == 1 );
-                CPPUNIT_ASSERT( (*gp).second.nIteratorCall == 4 );
-
-                CPPUNIT_ASSERT(m.erase( key ));
-
-                gp = m.get( key );
-                CPPUNIT_ASSERT( !gp );
-                CPPUNIT_ASSERT(!m.contains( key ));
-            }
-            CPPUNIT_ASSERT( m.empty());
-            CPPUNIT_ASSERT(m.size() == 0);
-
-            // Iterators on empty map
-            CPPUNIT_ASSERT(m.begin() == m.end());
-            CPPUNIT_ASSERT(m.cbegin() == m.cend());
-            CPPUNIT_ASSERT(m.rbegin() == m.rend());
-            CPPUNIT_ASSERT(m.crbegin() == m.crend());
-
-            // insert( key, val )
-            for ( size_t i = 0; i < capacity; ++i ) {
-                CPPUNIT_ASSERT(!m.contains(i));
-                CPPUNIT_ASSERT(m.insert( i, (unsigned int) i * 100));
-                CPPUNIT_ASSERT( m.contains(i));
-                CPPUNIT_ASSERT( m.find( i, [i]( value_type& v ) {
-                    CPPUNIT_ASSERT_CURRENT( v.first == i );
-                    CPPUNIT_ASSERT_CURRENT( v.second.nInsertCall == i * 100 );
-                }));
-            }
-            CPPUNIT_ASSERT( !m.empty());
-            CPPUNIT_ASSERT(m.size() == capacity);
-
-            // erase( key, func )
-            for ( size_t i = 0; i < capacity; ++i ) {
-                CPPUNIT_ASSERT( m.contains(i));
-                CPPUNIT_ASSERT( m.erase( i, [i]( value_type& v ) {
-                    CPPUNIT_ASSERT_CURRENT( v.first == i );
-                    CPPUNIT_ASSERT_CURRENT( v.second.nInsertCall == i * 100 );
-                    v.second.nInsertCall = 0;
-                }));
-            }
-            CPPUNIT_ASSERT( m.empty());
-            CPPUNIT_ASSERT(m.size() == 0 );
-
-            // insert_with
-            for ( size_t i = 0; i < capacity; ++i ) {
-                size_t key = i * 121;
-                CPPUNIT_ASSERT(!m.contains(key));
-                CPPUNIT_ASSERT( m.insert_with( key, [key]( value_type& v ) {
-                    CPPUNIT_ASSERT_CURRENT( v.first == key );
-                    CPPUNIT_ASSERT_CURRENT( v.second.nInsertCall == 0 );
-                    v.second.nInsertCall = decltype(v.second.nInsertCall)( key );
-                }));
-                CPPUNIT_ASSERT(m.find(key, [key] (value_type& v ) {
-                    CPPUNIT_ASSERT_CURRENT( v.first == key );
-                    CPPUNIT_ASSERT_CURRENT( v.second.nInsertCall == key );
-                }));
-                CPPUNIT_ASSERT(m.size() == i + 1);
-            }
-            CPPUNIT_ASSERT( !m.empty());
-            CPPUNIT_ASSERT(m.size() == capacity);
-
-            nCount = 0;
-            for ( auto it = m.begin(), itEnd = m.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( it->first == it->second.nInsertCall );
-                CPPUNIT_ASSERT( it->second.nIteratorCall == 0 );
-                it->second.nIteratorCall += 1;
-                ++nCount;
-            }
-            CPPUNIT_ASSERT( nCount == capacity );
-
-            nCount = 0;
-            for ( auto it = m.rbegin(), itEnd = m.rend(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( it->first == it->second.nInsertCall );
-                CPPUNIT_ASSERT( it->second.nIteratorCall == 1 );
-                it->second.nIteratorCall += 1;
-                ++nCount;
-            }
-            CPPUNIT_ASSERT( nCount == capacity );
-
-            // erase_at( iterator )
-            nCount = 0;
-            for ( auto it = m.begin(), itEnd = m.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( it->first == it->second.nInsertCall );
-                CPPUNIT_ASSERT( it->second.nIteratorCall == 2 );
-                CPPUNIT_ASSERT(m.erase_at( it ));
-                ++nCount;
-                CPPUNIT_ASSERT(!m.contains( it->first ));
-            }
-            CPPUNIT_ASSERT( nCount == capacity );
-            CPPUNIT_ASSERT( m.empty());
-            CPPUNIT_ASSERT(m.size() == 0 );
-
-            // emplace
-            for ( size_t i = 0; i < capacity; ++i ) {
-                size_t key = i * 1023;
-                CPPUNIT_ASSERT(!m.contains(key));
-                CPPUNIT_ASSERT( m.emplace( key, (unsigned int) i ));
-                CPPUNIT_ASSERT(m.find(key, [key] (value_type& v ) {
-                    CPPUNIT_ASSERT_CURRENT( v.first == key );
-                    CPPUNIT_ASSERT_CURRENT( v.second.nInsertCall * 1023 == key );
-                }));
-                CPPUNIT_ASSERT(m.size() == i + 1);
-            }
-            CPPUNIT_ASSERT( !m.empty());
-            CPPUNIT_ASSERT(m.size() == capacity);
-
-            // erase_at( reverse_iterator )
-            nCount = 0;
-            for ( auto it = m.rbegin(), itEnd = m.rend(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( it->first == it->second.nInsertCall * 1023 );
-                CPPUNIT_ASSERT(m.erase_at( it ));
-                ++nCount;
-                CPPUNIT_ASSERT(!m.contains( it->first ));
-            }
-            CPPUNIT_ASSERT( nCount == capacity );
-            CPPUNIT_ASSERT( m.empty());
-            CPPUNIT_ASSERT(m.size() == 0 );
-
-
-            // extract
-            for ( size_t i = 0; i < capacity; ++i ) {
-                size_t key = i * 711;
-                CPPUNIT_ASSERT(!m.contains(key));
-                auto ret = m.update( key, [i]( value_type& v, value_type * old ) {
-                    CPPUNIT_ASSERT_CURRENT( old == nullptr );
-                    v.second.nInsertCall = (unsigned int) i;
-                });
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( ret.second );
-                CPPUNIT_ASSERT(m.find(key, [i, key] (value_type& v ) {
-                    CPPUNIT_ASSERT_CURRENT( v.first == key );
-                    CPPUNIT_ASSERT_CURRENT( v.second.nInsertCall == i );
-                }));
-                CPPUNIT_ASSERT(m.size() == i + 1);
-            }
-            CPPUNIT_ASSERT( !m.empty());
-            CPPUNIT_ASSERT(m.size() == capacity);
-
-            for ( size_t i = capacity; i > 0; --i ) {
-                size_t key = (i-1) * 711;
-                guarded_ptr gp{ m.extract(key) };
-                CPPUNIT_ASSERT( gp );
-                CPPUNIT_ASSERT( gp->first == key );
-                CPPUNIT_ASSERT((*gp).second.nInsertCall == i - 1 );
-                gp = m.extract(key);
-                CPPUNIT_ASSERT( !gp );
-            }
-            CPPUNIT_ASSERT( m.empty());
-            CPPUNIT_ASSERT(m.size() == 0 );
-
-            // clear
-            for ( size_t i = 0; i < capacity; ++i ) {
-                CPPUNIT_ASSERT(!m.contains( i ))
-                CPPUNIT_ASSERT(m.insert( i ));
-                CPPUNIT_ASSERT(m.contains( i ));
-                CPPUNIT_ASSERT(m.size() == i + 1);
-            }
-            CPPUNIT_ASSERT( !m.empty());
-            CPPUNIT_ASSERT(m.size() == capacity );
-
-            m.clear();
-            CPPUNIT_ASSERT( m.empty());
-            CPPUNIT_ASSERT(m.size() == 0 );
-
-
-            CPPUNIT_MSG( m.statistics() );
-        }
-
-        template <typename Map>
-        void test_rcu(size_t nHeadBits, size_t nArrayBits)
-        {
-            typedef typename Map::hash_type hash_type;
-            typedef typename Map::key_type key_type;
-            typedef typename Map::mapped_type mapped_type;
-            typedef typename Map::value_type value_type;
-            typedef typename Map::exempt_ptr exempt_ptr;
-            typedef typename Map::rcu_lock rcu_lock;
-
-            size_t const capacity = 1000;
-
-            Map m(nHeadBits, nArrayBits);
-            CPPUNIT_MSG("Array size: head=" << m.head_size() << ", array_node=" << m.array_node_size());
-            CPPUNIT_ASSERT(m.head_size() >= (size_t(1) << nHeadBits));
-            CPPUNIT_ASSERT(m.array_node_size() == (size_t(1) << nArrayBits));
-
-            CPPUNIT_ASSERT(m.empty());
-            CPPUNIT_ASSERT(m.size() == 0);
-
-            // insert( key )/update()/get()/find()
-            for (size_t i = 0; i < capacity; ++i) {
-                size_t key = i * 57;
-                CPPUNIT_ASSERT(!m.contains(key))
-                CPPUNIT_ASSERT(m.insert(key));
-                CPPUNIT_ASSERT(m.contains(key));
-                CPPUNIT_ASSERT(m.size() == i + 1);
-
-                auto ret = m.update(key, [](value_type& v, value_type * old) {
-                    CPPUNIT_ASSERT_CURRENT(old != nullptr);
-                    ++v.second.nInsertCall;
-                }, false);
-                CPPUNIT_ASSERT(ret.first);
-                CPPUNIT_ASSERT(!ret.second);
-
-                CPPUNIT_ASSERT(m.find(key, [](value_type& v) { ++v.second.nFindCall;}));
-
-                {
-                    rcu_lock l;
-                    value_type* p{ m.get(key) };
-                    CPPUNIT_ASSERT(p);
-                    CPPUNIT_ASSERT(p->first == key);
-                    CPPUNIT_ASSERT(p->second.nInsertCall == 1);
-                    CPPUNIT_ASSERT(p->second.nFindCall == 1);
-                }
-            }
-            CPPUNIT_ASSERT(!m.empty());
-            CPPUNIT_ASSERT(m.size() == capacity);
-
-            // iterator test
-            size_t nCount = 0;
-            {
-                rcu_lock l;
-                for (auto it = m.begin(), itEnd = m.end(); it != itEnd; ++it) {
-                    CPPUNIT_ASSERT(it->second.nIteratorCall == 0);
-                    CPPUNIT_ASSERT(it->second.nInsertCall == 1);
-                    CPPUNIT_ASSERT((*it).second.nFindCall == 1);
-                    it->second.nIteratorCall += 1;
-                    ++nCount;
-                }
-            }
-            CPPUNIT_ASSERT(nCount == capacity);
-
-            nCount = 0;
-            {
-                rcu_lock l;
-                for (auto it = m.rbegin(), itEnd = m.rend(); it != itEnd; ++it) {
-                    CPPUNIT_ASSERT(it->second.nInsertCall == 1);
-                    CPPUNIT_ASSERT((*it).second.nFindCall == 1);
-                    CPPUNIT_ASSERT(it->second.nIteratorCall == 1);
-                    (*it).second.nIteratorCall += 1;
-                    ++nCount;
-                }
-            }
-            CPPUNIT_ASSERT(nCount == capacity);
-
-            nCount = 0;
-            {
-                rcu_lock l;
-                for (auto it = m.cbegin(), itEnd = m.cend(); it != itEnd; ++it) {
-                    CPPUNIT_ASSERT(it->second.nInsertCall == 1);
-                    CPPUNIT_ASSERT((*it).second.nFindCall == 1);
-                    CPPUNIT_ASSERT(it->second.nIteratorCall == 2);
-                    (*it).second.nIteratorCall += 1;
-                    ++nCount;
-                }
-            }
-            CPPUNIT_ASSERT(nCount == capacity);
-
-            nCount = 0;
-            {
-                rcu_lock l;
-                for (auto it = m.crbegin(), itEnd = m.crend(); it != itEnd; ++it) {
-                    CPPUNIT_ASSERT(it->second.nInsertCall == 1);
-                    CPPUNIT_ASSERT((*it).second.nFindCall == 1);
-                    CPPUNIT_ASSERT(it->second.nIteratorCall == 3);
-                    (*it).second.nIteratorCall += 1;
-                    ++nCount;
-                }
-            }
-            CPPUNIT_ASSERT(nCount == capacity);
-
-            // find
-            for (size_t i = 0; i < capacity; i++) {
-                size_t key = i * 57;
-                CPPUNIT_ASSERT(m.find(key, [key](value_type& v) {
-                    CPPUNIT_ASSERT_CURRENT(v.first == key);
-                    CPPUNIT_ASSERT_CURRENT(v.second.nInsertCall == 1);
-                    CPPUNIT_ASSERT_CURRENT(v.second.nFindCall == 1);
-                    CPPUNIT_ASSERT_CURRENT(v.second.nIteratorCall == 4);
-                }));
-            }
-
-            // erase
-            for (size_t i = capacity; i > 0; --i) {
-                size_t key = (i - 1) * 57;
-                {
-                    rcu_lock l;
-                    value_type* p = m.get(key);
-                    CPPUNIT_ASSERT(p);
-                    CPPUNIT_ASSERT(p->first == key);
-                    CPPUNIT_ASSERT(p->second.nInsertCall == 1);
-                    CPPUNIT_ASSERT(p->second.nFindCall == 1);
-                    CPPUNIT_ASSERT(p->second.nIteratorCall == 4);
-                }
-
-                CPPUNIT_ASSERT(m.erase(key));
-
-                {
-                    rcu_lock l;
-                    value_type* p = m.get(key);
-                    CPPUNIT_ASSERT(!p);
-                }
-                CPPUNIT_ASSERT(!m.contains(key));
-            }
-            CPPUNIT_ASSERT(m.empty());
-            CPPUNIT_ASSERT(m.size() == 0);
-
-            // Iterators on empty map
-            {
-                rcu_lock l;
-                CPPUNIT_ASSERT(m.begin() == m.end());
-                CPPUNIT_ASSERT(m.cbegin() == m.cend());
-                CPPUNIT_ASSERT(m.rbegin() == m.rend());
-                CPPUNIT_ASSERT(m.crbegin() == m.crend());
-            }
-
-            // insert( key, val )
-            for (size_t i = 0; i < capacity; ++i) {
-                CPPUNIT_ASSERT(!m.contains(i));
-                CPPUNIT_ASSERT(m.insert(i, (unsigned int)i * 100));
-                CPPUNIT_ASSERT(m.contains(i));
-                CPPUNIT_ASSERT(m.find(i, [i](value_type& v) {
-                    CPPUNIT_ASSERT_CURRENT(v.first == i);
-                    CPPUNIT_ASSERT_CURRENT(v.second.nInsertCall == i * 100);
-                }));
-            }
-            CPPUNIT_ASSERT(!m.empty());
-            CPPUNIT_ASSERT(m.size() == capacity);
-
-            // erase( key, func )
-            for (size_t i = 0; i < capacity; ++i) {
-                CPPUNIT_ASSERT(m.contains(i));
-                CPPUNIT_ASSERT(m.erase(i, [i](value_type& v) {
-                    CPPUNIT_ASSERT_CURRENT(v.first == i);
-                    CPPUNIT_ASSERT_CURRENT(v.second.nInsertCall == i * 100);
-                    v.second.nInsertCall = 0;
-                }));
-            }
-            CPPUNIT_ASSERT(m.empty());
-            CPPUNIT_ASSERT(m.size() == 0);
-
-            // insert_with
-            for (size_t i = 0; i < capacity; ++i) {
-                size_t key = i * 121;
-                CPPUNIT_ASSERT(!m.contains(key));
-                CPPUNIT_ASSERT(m.insert_with(key, [key](value_type& v) {
-                    CPPUNIT_ASSERT_CURRENT(v.first == key);
-                    CPPUNIT_ASSERT_CURRENT(v.second.nInsertCall == 0);
-                    v.second.nInsertCall = decltype(v.second.nInsertCall)(key);
-                }));
-                CPPUNIT_ASSERT(m.find(key, [key](value_type& v) {
-                    CPPUNIT_ASSERT_CURRENT(v.first == key);
-                    CPPUNIT_ASSERT_CURRENT(v.second.nInsertCall == key);
-                }));
-                CPPUNIT_ASSERT(m.size() == i + 1);
-            }
-            CPPUNIT_ASSERT(!m.empty());
-            CPPUNIT_ASSERT(m.size() == capacity);
-
-            nCount = 0;
-            {
-                rcu_lock l;
-                for (auto it = m.begin(), itEnd = m.end(); it != itEnd; ++it) {
-                    CPPUNIT_ASSERT(it->first == it->second.nInsertCall);
-                    CPPUNIT_ASSERT(it->second.nIteratorCall == 0);
-                    it->second.nIteratorCall += 1;
-                    ++nCount;
-                }
-            }
-            CPPUNIT_ASSERT(nCount == capacity);
-
-            nCount = 0;
-            {
-                rcu_lock l;
-                for (auto it = m.rbegin(), itEnd = m.rend(); it != itEnd; ++it) {
-                    CPPUNIT_ASSERT(it->first == it->second.nInsertCall);
-                    CPPUNIT_ASSERT(it->second.nIteratorCall == 1);
-                    it->second.nIteratorCall += 1;
-                    ++nCount;
-                }
-            }
-            CPPUNIT_ASSERT(nCount == capacity);
-
-            // clear()
-            m.clear();
-            CPPUNIT_ASSERT(m.empty());
-            CPPUNIT_ASSERT(m.size() == 0);
-
-            // emplace
-            for (size_t i = 0; i < capacity; ++i) {
-                size_t key = i * 1023;
-                CPPUNIT_ASSERT(!m.contains(key));
-                CPPUNIT_ASSERT(m.emplace(key, static_cast<unsigned int>(i)));
-                CPPUNIT_ASSERT(m.find(key, [key](value_type& v) {
-                    CPPUNIT_ASSERT_CURRENT(v.first == key);
-                    CPPUNIT_ASSERT_CURRENT(v.second.nInsertCall * 1023 == key);
-                }));
-                CPPUNIT_ASSERT(m.size() == i + 1);
-            }
-            CPPUNIT_ASSERT(!m.empty());
-            CPPUNIT_ASSERT(m.size() == capacity);
-
-            // extract
-            for (size_t i = capacity; i > 0; --i) {
-                size_t key = (i - 1) * 1023;
-                exempt_ptr xp{ m.extract(key) };
-                CPPUNIT_ASSERT(xp);
-                CPPUNIT_ASSERT(xp->first == key);
-                CPPUNIT_ASSERT((*xp).second.nInsertCall == static_cast<unsigned int>(i - 1));
-                xp = m.extract(key);
-                CPPUNIT_ASSERT(!xp);
-            }
-            CPPUNIT_ASSERT(m.empty());
-            CPPUNIT_ASSERT(m.size() == 0);
-
-            CPPUNIT_MSG(m.statistics());
-        }
-
-        void hp_nohash();
-        void hp_nohash_stat();
-        void hp_nohash_5_3();
-        void hp_nohash_5_3_stat();
-        void hp_stdhash();
-        void hp_stdhash_stat();
-        void hp_stdhash_5_3();
-        void hp_stdhash_5_3_stat();
-        void hp_hash128();
-        void hp_hash128_stat();
-        void hp_hash128_4_3();
-        void hp_hash128_4_3_stat();
-
-        void dhp_nohash();
-        void dhp_nohash_stat();
-        void dhp_nohash_5_3();
-        void dhp_nohash_5_3_stat();
-        void dhp_stdhash();
-        void dhp_stdhash_stat();
-        void dhp_stdhash_5_3();
-        void dhp_stdhash_5_3_stat();
-        void dhp_hash128();
-        void dhp_hash128_stat();
-        void dhp_hash128_4_3();
-        void dhp_hash128_4_3_stat();
-
-        void rcu_gpb_nohash();
-        void rcu_gpb_nohash_stat();
-        void rcu_gpb_nohash_5_3();
-        void rcu_gpb_nohash_5_3_stat();
-        void rcu_gpb_stdhash();
-        void rcu_gpb_stdhash_stat();
-        void rcu_gpb_stdhash_5_3();
-        void rcu_gpb_stdhash_5_3_stat();
-        void rcu_gpb_hash128();
-        void rcu_gpb_hash128_stat();
-        void rcu_gpb_hash128_4_3();
-        void rcu_gpb_hash128_4_3_stat();
-
-        void rcu_gpi_nohash();
-        void rcu_gpi_nohash_stat();
-        void rcu_gpi_nohash_5_3();
-        void rcu_gpi_nohash_5_3_stat();
-        void rcu_gpi_stdhash();
-        void rcu_gpi_stdhash_stat();
-        void rcu_gpi_stdhash_5_3();
-        void rcu_gpi_stdhash_5_3_stat();
-        void rcu_gpi_hash128();
-        void rcu_gpi_hash128_stat();
-        void rcu_gpi_hash128_4_3();
-        void rcu_gpi_hash128_4_3_stat();
-
-        void rcu_gpt_nohash();
-        void rcu_gpt_nohash_stat();
-        void rcu_gpt_nohash_5_3();
-        void rcu_gpt_nohash_5_3_stat();
-        void rcu_gpt_stdhash();
-        void rcu_gpt_stdhash_stat();
-        void rcu_gpt_stdhash_5_3();
-        void rcu_gpt_stdhash_5_3_stat();
-        void rcu_gpt_hash128();
-        void rcu_gpt_hash128_stat();
-        void rcu_gpt_hash128_4_3();
-        void rcu_gpt_hash128_4_3_stat();
-
-        void rcu_shb_nohash();
-        void rcu_shb_nohash_stat();
-        void rcu_shb_nohash_5_3();
-        void rcu_shb_nohash_5_3_stat();
-        void rcu_shb_stdhash();
-        void rcu_shb_stdhash_stat();
-        void rcu_shb_stdhash_5_3();
-        void rcu_shb_stdhash_5_3_stat();
-        void rcu_shb_hash128();
-        void rcu_shb_hash128_stat();
-        void rcu_shb_hash128_4_3();
-        void rcu_shb_hash128_4_3_stat();
-
-        void rcu_sht_nohash();
-        void rcu_sht_nohash_stat();
-        void rcu_sht_nohash_5_3();
-        void rcu_sht_nohash_5_3_stat();
-        void rcu_sht_stdhash();
-        void rcu_sht_stdhash_stat();
-        void rcu_sht_stdhash_5_3();
-        void rcu_sht_stdhash_5_3_stat();
-        void rcu_sht_hash128();
-        void rcu_sht_hash128_stat();
-        void rcu_sht_hash128_4_3();
-        void rcu_sht_hash128_4_3_stat();
-
-        CPPUNIT_TEST_SUITE(FeldmanHashMapHdrTest)
-            CPPUNIT_TEST(hp_nohash)
-            CPPUNIT_TEST(hp_nohash_stat)
-            CPPUNIT_TEST(hp_nohash_5_3)
-            CPPUNIT_TEST(hp_nohash_5_3_stat)
-            CPPUNIT_TEST(hp_stdhash)
-            CPPUNIT_TEST(hp_stdhash_stat)
-            CPPUNIT_TEST(hp_stdhash_5_3)
-            CPPUNIT_TEST(hp_stdhash_5_3_stat)
-            CPPUNIT_TEST(hp_hash128)
-            CPPUNIT_TEST(hp_hash128_stat)
-            CPPUNIT_TEST(hp_hash128_4_3)
-            CPPUNIT_TEST(hp_hash128_4_3_stat)
-
-            CPPUNIT_TEST(dhp_nohash)
-            CPPUNIT_TEST(dhp_nohash_stat)
-            CPPUNIT_TEST(dhp_nohash_5_3)
-            CPPUNIT_TEST(dhp_nohash_5_3_stat)
-            CPPUNIT_TEST(dhp_stdhash)
-            CPPUNIT_TEST(dhp_stdhash_stat)
-            CPPUNIT_TEST(dhp_stdhash_5_3)
-            CPPUNIT_TEST(dhp_stdhash_5_3_stat)
-            CPPUNIT_TEST(dhp_hash128)
-            CPPUNIT_TEST(dhp_hash128_stat)
-            CPPUNIT_TEST(dhp_hash128_4_3)
-            CPPUNIT_TEST(dhp_hash128_4_3_stat)
-
-            CPPUNIT_TEST(rcu_gpb_nohash)
-            CPPUNIT_TEST(rcu_gpb_nohash_stat)
-            CPPUNIT_TEST(rcu_gpb_nohash_5_3)
-            CPPUNIT_TEST(rcu_gpb_nohash_5_3_stat)
-            CPPUNIT_TEST(rcu_gpb_stdhash)
-            CPPUNIT_TEST(rcu_gpb_stdhash_stat)
-            CPPUNIT_TEST(rcu_gpb_stdhash_5_3)
-            CPPUNIT_TEST(rcu_gpb_stdhash_5_3_stat)
-            CPPUNIT_TEST(rcu_gpb_hash128)
-            CPPUNIT_TEST(rcu_gpb_hash128_stat)
-            CPPUNIT_TEST(rcu_gpb_hash128_4_3)
-            CPPUNIT_TEST(rcu_gpb_hash128_4_3_stat)
-
-            CPPUNIT_TEST(rcu_gpi_nohash)
-            CPPUNIT_TEST(rcu_gpi_nohash_stat)
-            CPPUNIT_TEST(rcu_gpi_nohash_5_3)
-            CPPUNIT_TEST(rcu_gpi_nohash_5_3_stat)
-            CPPUNIT_TEST(rcu_gpi_stdhash)
-            CPPUNIT_TEST(rcu_gpi_stdhash_stat)
-            CPPUNIT_TEST(rcu_gpi_stdhash_5_3)
-            CPPUNIT_TEST(rcu_gpi_stdhash_5_3_stat)
-            CPPUNIT_TEST(rcu_gpi_hash128)
-            CPPUNIT_TEST(rcu_gpi_hash128_stat)
-            CPPUNIT_TEST(rcu_gpi_hash128_4_3)
-            CPPUNIT_TEST(rcu_gpi_hash128_4_3_stat)
-
-            CPPUNIT_TEST(rcu_gpt_nohash)
-            CPPUNIT_TEST(rcu_gpt_nohash_stat)
-            CPPUNIT_TEST(rcu_gpt_nohash_5_3)
-            CPPUNIT_TEST(rcu_gpt_nohash_5_3_stat)
-            CPPUNIT_TEST(rcu_gpt_stdhash)
-            CPPUNIT_TEST(rcu_gpt_stdhash_stat)
-            CPPUNIT_TEST(rcu_gpt_stdhash_5_3)
-            CPPUNIT_TEST(rcu_gpt_stdhash_5_3_stat)
-            CPPUNIT_TEST(rcu_gpt_hash128)
-            CPPUNIT_TEST(rcu_gpt_hash128_stat)
-            CPPUNIT_TEST(rcu_gpt_hash128_4_3)
-            CPPUNIT_TEST(rcu_gpt_hash128_4_3_stat)
-
-            CPPUNIT_TEST(rcu_shb_nohash)
-            CPPUNIT_TEST(rcu_shb_nohash_stat)
-            CPPUNIT_TEST(rcu_shb_nohash_5_3)
-            CPPUNIT_TEST(rcu_shb_nohash_5_3_stat)
-            CPPUNIT_TEST(rcu_shb_stdhash)
-            CPPUNIT_TEST(rcu_shb_stdhash_stat)
-            CPPUNIT_TEST(rcu_shb_stdhash_5_3)
-            CPPUNIT_TEST(rcu_shb_stdhash_5_3_stat)
-            CPPUNIT_TEST(rcu_shb_hash128)
-            CPPUNIT_TEST(rcu_shb_hash128_stat)
-            CPPUNIT_TEST(rcu_shb_hash128_4_3)
-            CPPUNIT_TEST(rcu_shb_hash128_4_3_stat)
-
-            CPPUNIT_TEST(rcu_sht_nohash)
-            CPPUNIT_TEST(rcu_sht_nohash_stat)
-            CPPUNIT_TEST(rcu_sht_nohash_5_3)
-            CPPUNIT_TEST(rcu_sht_nohash_5_3_stat)
-            CPPUNIT_TEST(rcu_sht_stdhash)
-            CPPUNIT_TEST(rcu_sht_stdhash_stat)
-            CPPUNIT_TEST(rcu_sht_stdhash_5_3)
-            CPPUNIT_TEST(rcu_sht_stdhash_5_3_stat)
-            CPPUNIT_TEST(rcu_sht_hash128)
-            CPPUNIT_TEST(rcu_sht_hash128_stat)
-            CPPUNIT_TEST(rcu_sht_hash128_4_3)
-            CPPUNIT_TEST(rcu_sht_hash128_4_3_stat)
-        CPPUNIT_TEST_SUITE_END()
-
-    };
-
-} // namespace map
-
-#endif //#ifndef CDSTEST_HDR_FELDMAN_HASHMAP_H
diff --git a/tests/test-hdr/map/hdr_feldman_hashmap_dhp.cpp b/tests/test-hdr/map/hdr_feldman_hashmap_dhp.cpp
deleted file mode 100644 (file)
index 10fe6bd..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_feldman_hashmap.h"
-#include <cds/container/feldman_hashmap_dhp.h>
-#include "unit/print_feldman_hashset_stat.h"
-
-namespace map {
-    namespace {
-        typedef cds::gc::DHP gc_type;
-    } // namespace
-
-    void FeldmanHashMapHdrTest::dhp_nohash()
-    {
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item > map_type;
-
-        test_hp<map_type>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::dhp_stdhash()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef std::hash<size_t> hash;
-        };
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item, traits > map_type;
-
-        test_hp<map_type>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::dhp_hash128()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef hash128::make hash;
-            typedef hash128::less less;
-        };
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item, traits > map_type;
-        test_hp<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::hash< hash128::make >
-                , co::less< hash128::less >
-            >::type
-        > map_type2;
-        test_hp<map_type2>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::dhp_nohash_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-        };
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item, traits > map_type;
-        test_hp<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::stat< cc::feldman_hashmap::stat<>>
-            >::type
-        > map_type2;
-        test_hp<map_type2>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::dhp_stdhash_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef std::hash<size_t> hash;
-            typedef cc::feldman_hashmap::stat<> stat;
-        };
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item, traits > map_type;
-        test_hp<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::stat< cc::feldman_hashmap::stat<>>
-                ,co::hash< std::hash<size_t>>
-            >::type
-        > map_type2;
-        test_hp<map_type2>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::dhp_hash128_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef hash128::make hash;
-            typedef hash128::cmp compare;
-        };
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item, traits > map_type;
-        test_hp<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::stat< cc::feldman_hashmap::stat<>>
-                , co::hash< hash128::make >
-                , co::compare< hash128::cmp >
-            >::type
-        > map_type2;
-        test_hp<map_type2>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::dhp_nohash_5_3()
-    {
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item > map_type;
-
-        test_hp<map_type>(5, 3);
-    }
-
-
-    void FeldmanHashMapHdrTest::dhp_stdhash_5_3()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef std::hash<size_t> hash;
-        };
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item, traits > map_type;
-
-        test_hp<map_type>(5, 3);
-    }
-
-    void FeldmanHashMapHdrTest::dhp_nohash_5_3_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef cds::backoff::empty back_off;
-        };
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item, traits > map_type;
-        test_hp<map_type>(5, 3);
-
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-            co::stat< cc::feldman_hashmap::stat<>>
-            , co::back_off< cds::backoff::empty >
-            >::type
-        > map_type2;
-        test_hp<map_type2>(5, 3);
-    }
-
-    void FeldmanHashMapHdrTest::dhp_stdhash_5_3_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef cds::backoff::empty back_off;
-            typedef std::hash<size_t> hash;
-        };
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item, traits > map_type;
-        test_hp<map_type>(5, 3);
-
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::stat< cc::feldman_hashmap::stat<>>
-                ,co::back_off< cds::backoff::empty >
-                ,co::hash< std::hash<size_t>>
-            >::type
-        > map_type2;
-        test_hp<map_type2>(5, 3);
-    }
-
-    void FeldmanHashMapHdrTest::dhp_hash128_4_3()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef hash128::make hash;
-            typedef hash128::less less;
-        };
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item, traits > map_type;
-        test_hp<map_type>(4, 3);
-
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::hash< hash128::make >
-                , co::less< hash128::less >
-            >::type
-        > map_type2;
-        test_hp<map_type2>(4, 3);
-    }
-
-    void FeldmanHashMapHdrTest::dhp_hash128_4_3_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef hash128::make hash;
-            typedef hash128::less less;
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item, traits > map_type;
-        test_hp<map_type>(4, 3);
-
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::hash< hash128::make >
-                , co::less< hash128::less >
-                , co::stat< cc::feldman_hashmap::stat<>>
-                , co::memory_model< co::v::sequential_consistent >
-            >::type
-        > map_type2;
-        test_hp<map_type2>(4, 3);
-    }
-} // namespace map
-
-CPPUNIT_TEST_SUITE_REGISTRATION(map::FeldmanHashMapHdrTest);
diff --git a/tests/test-hdr/map/hdr_feldman_hashmap_hp.cpp b/tests/test-hdr/map/hdr_feldman_hashmap_hp.cpp
deleted file mode 100644 (file)
index 0e6da12..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_feldman_hashmap.h"
-#include <cds/container/feldman_hashmap_hp.h>
-#include "unit/print_feldman_hashset_stat.h"
-
-namespace map {
-    namespace {
-        typedef cds::gc::HP gc_type;
-    } // namespace
-
-    void FeldmanHashMapHdrTest::hp_nohash()
-    {
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item > map_type;
-
-        test_hp<map_type>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::hp_stdhash()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef std::hash<size_t> hash;
-        };
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item, traits > map_type;
-
-        test_hp<map_type>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::hp_hash128()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef hash128::make hash;
-            typedef hash128::less less;
-        };
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item, traits > map_type;
-        test_hp<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::hash< hash128::make >
-                , co::less< hash128::less >
-            >::type
-        > map_type2;
-        test_hp<map_type2>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::hp_nohash_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-        };
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item, traits > map_type;
-        test_hp<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::stat< cc::feldman_hashmap::stat<>>
-            >::type
-        > map_type2;
-        test_hp<map_type2>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::hp_stdhash_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef std::hash<size_t> hash;
-            typedef cc::feldman_hashmap::stat<> stat;
-        };
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item, traits > map_type;
-        test_hp<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::stat< cc::feldman_hashmap::stat<>>
-                ,co::hash< std::hash<size_t>>
-            >::type
-        > map_type2;
-        test_hp<map_type2>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::hp_hash128_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef hash128::make hash;
-            typedef hash128::cmp compare;
-        };
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item, traits > map_type;
-        test_hp<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::stat< cc::feldman_hashmap::stat<>>
-                , co::hash< hash128::make >
-                , co::compare< hash128::cmp >
-            >::type
-        > map_type2;
-        test_hp<map_type2>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::hp_nohash_5_3()
-    {
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item > map_type;
-
-        test_hp<map_type>(5, 3);
-    }
-
-
-    void FeldmanHashMapHdrTest::hp_stdhash_5_3()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef std::hash<size_t> hash;
-        };
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item, traits > map_type;
-
-        test_hp<map_type>(5, 3);
-    }
-
-    void FeldmanHashMapHdrTest::hp_nohash_5_3_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef cds::backoff::empty back_off;
-        };
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item, traits > map_type;
-        test_hp<map_type>(5, 3);
-
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-            co::stat< cc::feldman_hashmap::stat<>>
-            , co::back_off< cds::backoff::empty >
-            >::type
-        > map_type2;
-        test_hp<map_type2>(5, 3);
-    }
-
-    void FeldmanHashMapHdrTest::hp_stdhash_5_3_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef cds::backoff::empty back_off;
-            typedef std::hash<size_t> hash;
-        };
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item, traits > map_type;
-        test_hp<map_type>(5, 3);
-
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::stat< cc::feldman_hashmap::stat<>>
-                ,co::back_off< cds::backoff::empty >
-                ,co::hash< std::hash<size_t>>
-            >::type
-        > map_type2;
-        test_hp<map_type2>(5, 3);
-    }
-
-    void FeldmanHashMapHdrTest::hp_hash128_4_3()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef hash128::make hash;
-            typedef hash128::less less;
-        };
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item, traits > map_type;
-        test_hp<map_type>(4, 3);
-
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::hash< hash128::make >
-                , co::less< hash128::less >
-            >::type
-        > map_type2;
-        test_hp<map_type2>(4, 3);
-    }
-
-    void FeldmanHashMapHdrTest::hp_hash128_4_3_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef hash128::make hash;
-            typedef hash128::less less;
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item, traits > map_type;
-        test_hp<map_type>(4, 3);
-
-        typedef cc::FeldmanHashMap< gc_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::hash< hash128::make >
-                , co::less< hash128::less >
-                , co::stat< cc::feldman_hashmap::stat<>>
-                , co::memory_model< co::v::sequential_consistent >
-            >::type
-        > map_type2;
-        test_hp<map_type2>(4, 3);
-    }
-} // namespace map
-
-CPPUNIT_TEST_SUITE_REGISTRATION(map::FeldmanHashMapHdrTest);
diff --git a/tests/test-hdr/map/hdr_feldman_hashmap_rcu_gpb.cpp b/tests/test-hdr/map/hdr_feldman_hashmap_rcu_gpb.cpp
deleted file mode 100644 (file)
index aca6ab9..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_feldman_hashmap.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/container/feldman_hashmap_rcu.h>
-#include "unit/print_feldman_hashset_stat.h"
-
-namespace map {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<>> rcu_type;
-    } // namespace
-
-    void FeldmanHashMapHdrTest::rcu_gpb_nohash()
-    {
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item > map_type;
-
-        test_rcu<map_type>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpb_stdhash()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef std::hash<size_t> hash;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-
-        test_rcu<map_type>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpb_hash128()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef hash128::make hash;
-            typedef hash128::less less;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::hash< hash128::make >
-                , co::less< hash128::less >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpb_nohash_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-            co::stat< cc::feldman_hashmap::stat<>>
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpb_stdhash_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef std::hash<size_t> hash;
-            typedef cc::feldman_hashmap::stat<> stat;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::stat< cc::feldman_hashmap::stat<>>
-                ,co::hash<std::hash<size_t>>
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 2);
-    }
-
-        void FeldmanHashMapHdrTest::rcu_gpb_hash128_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef hash128::make hash;
-            typedef hash128::cmp compare;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::stat< cc::feldman_hashmap::stat<>>
-                , co::hash< hash128::make >
-                , co::compare< hash128::cmp >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpb_nohash_5_3()
-    {
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item > map_type;
-
-        test_rcu<map_type>(5, 3);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpb_stdhash_5_3()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef std::hash<size_t> hash;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-
-        test_rcu<map_type>(5, 3);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpb_nohash_5_3_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef cds::backoff::empty back_off;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(5, 3);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-            co::stat< cc::feldman_hashmap::stat<>>
-            , co::back_off< cds::backoff::empty >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(5, 3);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpb_stdhash_5_3_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef cds::backoff::empty back_off;
-            typedef std::hash<size_t> hash;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(5, 3);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::stat< cc::feldman_hashmap::stat<>>
-                ,co::back_off< cds::backoff::empty >
-                ,co::hash< std::hash<size_t>>
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(5, 3);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpb_hash128_4_3()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef hash128::make hash;
-            typedef hash128::less less;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 3);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::hash< hash128::make >
-                , co::less< hash128::less >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 3);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpb_hash128_4_3_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef hash128::make hash;
-            typedef hash128::less less;
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 3);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::hash< hash128::make >
-                , co::less< hash128::less >
-                , co::stat< cc::feldman_hashmap::stat<>>
-                , co::memory_model< co::v::sequential_consistent >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 3);
-    }
-
-} // namespace map
diff --git a/tests/test-hdr/map/hdr_feldman_hashmap_rcu_gpi.cpp b/tests/test-hdr/map/hdr_feldman_hashmap_rcu_gpi.cpp
deleted file mode 100644 (file)
index db7ee4e..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_feldman_hashmap.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/container/feldman_hashmap_rcu.h>
-#include "unit/print_feldman_hashset_stat.h"
-
-namespace map {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<>> rcu_type;
-    } // namespace
-
-    void FeldmanHashMapHdrTest::rcu_gpi_nohash()
-    {
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item > map_type;
-
-        test_rcu<map_type>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpi_stdhash()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef std::hash<size_t> hash;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-
-        test_rcu<map_type>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpi_hash128()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef hash128::make hash;
-            typedef hash128::less less;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::hash< hash128::make >
-                , co::less< hash128::less >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpi_nohash_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-            co::stat< cc::feldman_hashmap::stat<>>
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpi_stdhash_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef std::hash<size_t> hash;
-            typedef cc::feldman_hashmap::stat<> stat;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::stat< cc::feldman_hashmap::stat<>>
-                ,co::hash<std::hash<size_t>>
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 2);
-    }
-
-        void FeldmanHashMapHdrTest::rcu_gpi_hash128_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef hash128::make hash;
-            typedef hash128::cmp compare;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::stat< cc::feldman_hashmap::stat<>>
-                , co::hash< hash128::make >
-                , co::compare< hash128::cmp >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpi_nohash_5_3()
-    {
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item > map_type;
-
-        test_rcu<map_type>(5, 3);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpi_stdhash_5_3()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef std::hash<size_t> hash;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-
-        test_rcu<map_type>(5, 3);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpi_nohash_5_3_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef cds::backoff::empty back_off;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(5, 3);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-            co::stat< cc::feldman_hashmap::stat<>>
-            , co::back_off< cds::backoff::empty >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(5, 3);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpi_stdhash_5_3_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef cds::backoff::empty back_off;
-            typedef std::hash<size_t> hash;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(5, 3);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::stat< cc::feldman_hashmap::stat<>>
-                ,co::back_off< cds::backoff::empty >
-                ,co::hash< std::hash<size_t>>
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(5, 3);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpi_hash128_4_3()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef hash128::make hash;
-            typedef hash128::less less;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 3);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::hash< hash128::make >
-                , co::less< hash128::less >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 3);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpi_hash128_4_3_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef hash128::make hash;
-            typedef hash128::less less;
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 3);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::hash< hash128::make >
-                , co::less< hash128::less >
-                , co::stat< cc::feldman_hashmap::stat<>>
-                , co::memory_model< co::v::sequential_consistent >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 3);
-    }
-
-} // namespace map
diff --git a/tests/test-hdr/map/hdr_feldman_hashmap_rcu_gpt.cpp b/tests/test-hdr/map/hdr_feldman_hashmap_rcu_gpt.cpp
deleted file mode 100644 (file)
index 9e5303f..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_feldman_hashmap.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/container/feldman_hashmap_rcu.h>
-#include "unit/print_feldman_hashset_stat.h"
-
-namespace map {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<>> rcu_type;
-    } // namespace
-
-    void FeldmanHashMapHdrTest::rcu_gpt_nohash()
-    {
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item > map_type;
-
-        test_rcu<map_type>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpt_stdhash()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef std::hash<size_t> hash;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-
-        test_rcu<map_type>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpt_hash128()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef hash128::make hash;
-            typedef hash128::less less;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::hash< hash128::make >
-                , co::less< hash128::less >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpt_nohash_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-            co::stat< cc::feldman_hashmap::stat<>>
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpt_stdhash_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef std::hash<size_t> hash;
-            typedef cc::feldman_hashmap::stat<> stat;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::stat< cc::feldman_hashmap::stat<>>
-                ,co::hash<std::hash<size_t>>
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 2);
-    }
-
-        void FeldmanHashMapHdrTest::rcu_gpt_hash128_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef hash128::make hash;
-            typedef hash128::cmp compare;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::stat< cc::feldman_hashmap::stat<>>
-                , co::hash< hash128::make >
-                , co::compare< hash128::cmp >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 2);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpt_nohash_5_3()
-    {
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item > map_type;
-
-        test_rcu<map_type>(5, 3);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpt_stdhash_5_3()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef std::hash<size_t> hash;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-
-        test_rcu<map_type>(5, 3);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpt_nohash_5_3_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef cds::backoff::empty back_off;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(5, 3);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-            co::stat< cc::feldman_hashmap::stat<>>
-            , co::back_off< cds::backoff::empty >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(5, 3);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpt_stdhash_5_3_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef cds::backoff::empty back_off;
-            typedef std::hash<size_t> hash;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(5, 3);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::stat< cc::feldman_hashmap::stat<>>
-                ,co::back_off< cds::backoff::empty >
-                ,co::hash< std::hash<size_t>>
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(5, 3);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpt_hash128_4_3()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef hash128::make hash;
-            typedef hash128::less less;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 3);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::hash< hash128::make >
-                , co::less< hash128::less >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 3);
-    }
-
-    void FeldmanHashMapHdrTest::rcu_gpt_hash128_4_3_stat()
-    {
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef hash128::make hash;
-            typedef hash128::less less;
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 3);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::hash< hash128::make >
-                , co::less< hash128::less >
-                , co::stat< cc::feldman_hashmap::stat<>>
-                , co::memory_model< co::v::sequential_consistent >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 3);
-    }
-
-} // namespace map
diff --git a/tests/test-hdr/map/hdr_feldman_hashmap_rcu_shb.cpp b/tests/test-hdr/map/hdr_feldman_hashmap_rcu_shb.cpp
deleted file mode 100644 (file)
index 980f0ff..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_feldman_hashmap.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/container/feldman_hashmap_rcu.h>
-#include "unit/print_feldman_hashset_stat.h"
-
-namespace map {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<>> rcu_type;
-    } // namespace
-#endif
-
-    void FeldmanHashMapHdrTest::rcu_shb_nohash()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item > map_type;
-
-        test_rcu<map_type>(4, 2);
-#endif
-    }
-
-    void FeldmanHashMapHdrTest::rcu_shb_stdhash()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef std::hash<size_t> hash;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-
-        test_rcu<map_type>(4, 2);
-#endif
-    }
-
-    void FeldmanHashMapHdrTest::rcu_shb_hash128()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef hash128::make hash;
-            typedef hash128::less less;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::hash< hash128::make >
-                , co::less< hash128::less >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 2);
-#endif
-    }
-
-    void FeldmanHashMapHdrTest::rcu_shb_nohash_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-            co::stat< cc::feldman_hashmap::stat<>>
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 2);
-#endif
-    }
-
-    void FeldmanHashMapHdrTest::rcu_shb_stdhash_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef std::hash<size_t> hash;
-            typedef cc::feldman_hashmap::stat<> stat;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::stat< cc::feldman_hashmap::stat<>>
-                ,co::hash<std::hash<size_t>>
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 2);
-#endif
-    }
-
-    void FeldmanHashMapHdrTest::rcu_shb_hash128_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef hash128::make hash;
-            typedef hash128::cmp compare;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::stat< cc::feldman_hashmap::stat<>>
-                , co::hash< hash128::make >
-                , co::compare< hash128::cmp >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 2);
-#endif
-    }
-
-    void FeldmanHashMapHdrTest::rcu_shb_nohash_5_3()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item > map_type;
-
-        test_rcu<map_type>(5, 3);
-#endif
-    }
-
-    void FeldmanHashMapHdrTest::rcu_shb_stdhash_5_3()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef std::hash<size_t> hash;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-
-        test_rcu<map_type>(5, 3);
-#endif
-    }
-
-    void FeldmanHashMapHdrTest::rcu_shb_nohash_5_3_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef cds::backoff::empty back_off;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(5, 3);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-            co::stat< cc::feldman_hashmap::stat<>>
-            , co::back_off< cds::backoff::empty >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(5, 3);
-#endif
-    }
-
-    void FeldmanHashMapHdrTest::rcu_shb_stdhash_5_3_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef cds::backoff::empty back_off;
-            typedef std::hash<size_t> hash;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(5, 3);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::stat< cc::feldman_hashmap::stat<>>
-                ,co::back_off< cds::backoff::empty >
-                ,co::hash< std::hash<size_t>>
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(5, 3);
-#endif
-    }
-
-    void FeldmanHashMapHdrTest::rcu_shb_hash128_4_3()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef hash128::make hash;
-            typedef hash128::less less;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 3);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::hash< hash128::make >
-                , co::less< hash128::less >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 3);
-#endif
-    }
-
-    void FeldmanHashMapHdrTest::rcu_shb_hash128_4_3_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef hash128::make hash;
-            typedef hash128::less less;
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 3);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::hash< hash128::make >
-                , co::less< hash128::less >
-                , co::stat< cc::feldman_hashmap::stat<>>
-                , co::memory_model< co::v::sequential_consistent >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 3);
-#endif
-    }
-
-} // namespace map
diff --git a/tests/test-hdr/map/hdr_feldman_hashmap_rcu_sht.cpp b/tests/test-hdr/map/hdr_feldman_hashmap_rcu_sht.cpp
deleted file mode 100644 (file)
index d24a212..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_feldman_hashmap.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/container/feldman_hashmap_rcu.h>
-#include "unit/print_feldman_hashset_stat.h"
-
-namespace map {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<>> rcu_type;
-    } // namespace
-#endif
-
-    void FeldmanHashMapHdrTest::rcu_sht_nohash()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item > map_type;
-
-        test_rcu<map_type>(4, 2);
-#endif
-    }
-
-    void FeldmanHashMapHdrTest::rcu_sht_stdhash()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef std::hash<size_t> hash;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-
-        test_rcu<map_type>(4, 2);
-#endif
-    }
-
-    void FeldmanHashMapHdrTest::rcu_sht_hash128()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef hash128::make hash;
-            typedef hash128::less less;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::hash< hash128::make >
-                , co::less< hash128::less >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 2);
-#endif
-    }
-
-    void FeldmanHashMapHdrTest::rcu_sht_nohash_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-            co::stat< cc::feldman_hashmap::stat<>>
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 2);
-#endif
-    }
-
-    void FeldmanHashMapHdrTest::rcu_sht_stdhash_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef std::hash<size_t> hash;
-            typedef cc::feldman_hashmap::stat<> stat;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::stat< cc::feldman_hashmap::stat<>>
-                ,co::hash<std::hash<size_t>>
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 2);
-#endif
-    }
-
-    void FeldmanHashMapHdrTest::rcu_sht_hash128_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef hash128::make hash;
-            typedef hash128::cmp compare;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 2);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::stat< cc::feldman_hashmap::stat<>>
-                , co::hash< hash128::make >
-                , co::compare< hash128::cmp >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 2);
-#endif
-    }
-
-    void FeldmanHashMapHdrTest::rcu_sht_nohash_5_3()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item > map_type;
-
-        test_rcu<map_type>(5, 3);
-#endif
-    }
-
-    void FeldmanHashMapHdrTest::rcu_sht_stdhash_5_3()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef std::hash<size_t> hash;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-
-        test_rcu<map_type>(5, 3);
-#endif
-    }
-
-    void FeldmanHashMapHdrTest::rcu_sht_nohash_5_3_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef cds::backoff::empty back_off;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(5, 3);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-            co::stat< cc::feldman_hashmap::stat<>>
-            , co::back_off< cds::backoff::empty >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(5, 3);
-#endif
-    }
-
-    void FeldmanHashMapHdrTest::rcu_sht_stdhash_5_3_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef cds::backoff::empty back_off;
-            typedef std::hash<size_t> hash;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(5, 3);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::stat< cc::feldman_hashmap::stat<>>
-                ,co::back_off< cds::backoff::empty >
-                ,co::hash< std::hash<size_t>>
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(5, 3);
-#endif
-    }
-
-    void FeldmanHashMapHdrTest::rcu_sht_hash128_4_3()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef hash128::make hash;
-            typedef hash128::less less;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 3);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::hash< hash128::make >
-                , co::less< hash128::less >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 3);
-#endif
-    }
-
-    void FeldmanHashMapHdrTest::rcu_sht_hash128_4_3_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits : public cc::feldman_hashmap::traits {
-            typedef hash128::make hash;
-            typedef hash128::less less;
-            typedef cc::feldman_hashmap::stat<> stat;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item, traits > map_type;
-        test_rcu<map_type>(4, 3);
-
-        typedef cc::FeldmanHashMap< rcu_type, size_t, Item,
-            typename cc::feldman_hashmap::make_traits<
-                co::hash< hash128::make >
-                , co::less< hash128::less >
-                , co::stat< cc::feldman_hashmap::stat<>>
-                , co::memory_model< co::v::sequential_consistent >
-            >::type
-        > map_type2;
-        test_rcu<map_type2>(4, 3);
-#endif
-    }
-
-} // namespace map
diff --git a/tests/test-hdr/map/hdr_map.h b/tests/test-hdr/map/hdr_map.h
deleted file mode 100644 (file)
index 05f849f..0000000
+++ /dev/null
@@ -1,1273 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_MAP_H
-#define CDSTEST_HDR_MAP_H
-#include "size_check.h"
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/os/timer.h>
-#include <cds/opt/hash.h>
-#include <functional>   // ref
-
-namespace cds { namespace container {}}
-
-namespace map {
-    using misc::check_size;
-
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-
-    // MichaelHashSet based on MichaelList
-    class HashMapHdrTest: public CppUnitMini::TestCase
-    {
-    public:
-        typedef int key_type;
-
-        struct value_type {
-            int m_val;
-
-            value_type()
-                : m_val(0)
-            {}
-
-            value_type( int n )
-                : m_val( n )
-            {}
-
-            value_type( value_type&& v )
-                : m_val( v.m_val )
-            {}
-
-            value_type( value_type const& v )
-                : m_val( v.m_val )
-            {}
-
-            value_type& operator=( value_type const& v )
-            {
-                m_val = v.m_val;
-                return *this;
-            }
-        };
-
-        typedef std::pair<key_type const, value_type> pair_type;
-
-        struct less
-        {
-            bool operator ()(int v1, int v2 ) const
-            {
-                return v1 < v2;
-            }
-        };
-
-        struct cmp {
-            int operator ()(int v1, int v2 ) const
-            {
-                if ( v1 < v2 )
-                    return -1;
-                return v1 > v2 ? 1 : 0;
-            }
-        };
-
-        struct equal {
-            bool operator ()(int v1, int v2 ) const
-            {
-                return v1 == v2;
-            }
-        };
-
-        struct hash_int {
-            size_t operator()( int i ) const
-            {
-                return co::v::hash<int>()( i );
-            }
-
-            template <typename T>
-            size_t operator()( T const& i ) const
-            {
-                return co::v::hash<int>()( i.nKey );
-            }
-        };
-
-        struct simple_item_counter {
-            size_t  m_nCount;
-
-            simple_item_counter()
-                : m_nCount(0)
-            {}
-
-            size_t operator ++()
-            {
-                return ++m_nCount;
-            }
-
-            size_t operator --()
-            {
-                return --m_nCount;
-            }
-
-            void reset()
-            {
-                m_nCount = 0;
-            }
-
-            operator size_t() const
-            {
-                return m_nCount;
-            }
-        };
-
-        template <typename Map>
-        struct insert_functor
-        {
-            typedef typename Map::value_type pair_type;
-
-            // insert ftor
-            void operator()( pair_type& item )
-            {
-                item.second.m_val = item.first * 3;
-            }
-
-            // update ftor
-            void operator()( bool bNew, pair_type& item )
-            {
-                if ( bNew )
-                    item.second.m_val = item.first * 2;
-                else
-                    item.second.m_val = item.first * 5;
-            }
-        };
-
-        struct check_value {
-            int     m_nExpected;
-
-            check_value( int nExpected )
-                : m_nExpected( nExpected )
-            {}
-
-            template <typename T>
-            void operator ()( T& pair )
-            {
-                CPPUNIT_ASSERT_CURRENT( pair.second.m_val == m_nExpected );
-            }
-            template <typename T, typename Q>
-            void operator ()( T& pair, Q )
-            {
-                CPPUNIT_ASSERT_CURRENT( pair.second.m_val == m_nExpected );
-            }
-        };
-
-        struct extract_functor
-        {
-            int *   m_pVal;
-            void operator()( pair_type const& val )
-            {
-                *m_pVal = val.second.m_val;
-            }
-        };
-
-        struct other_item {
-            int nKey;
-
-            other_item( int key )
-                : nKey(key)
-            {}
-        };
-
-        struct other_less
-        {
-            bool operator ()(int v1, other_item const& v2 ) const
-            {
-                return v1 < v2.nKey;
-            }
-            bool operator ()(other_item const& v1, int v2 ) const
-            {
-                return v1.nKey < v2;
-            }
-        };
-
-
-        template <class Map>
-        void test_int()
-        {
-            Map m( 100, 4 );
-
-            test_int_with(m);
-
-            // extract/get test
-            CPPUNIT_ASSERT( m.empty() );
-            {
-                const int nLimit = 100;
-                typename Map::guarded_ptr gp;
-                int arrRandom[nLimit];
-                for ( int i = 0; i < nLimit; ++i )
-                    arrRandom[i] = i;
-                shuffle( arrRandom, arrRandom + nLimit );
-
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( m.insert( arrRandom[i], arrRandom[i] ));
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    int nKey = arrRandom[i];
-                    gp = m.get( nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->first == nKey );
-                    CPPUNIT_CHECK( gp->second.m_val == nKey );
-                    gp.release();
-
-                    gp = m.extract( nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->first == nKey );
-                    CPPUNIT_CHECK( gp->second.m_val == nKey );
-                    gp.release();
-
-                    gp = m.get( nKey );
-                    CPPUNIT_CHECK( !gp );
-
-                    CPPUNIT_CHECK( !m.extract(nKey));
-                    CPPUNIT_CHECK( gp.empty());
-                }
-                CPPUNIT_ASSERT( m.empty() );
-
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( m.insert( arrRandom[i], arrRandom[i] ));
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    int nKey = arrRandom[i];
-                    gp = m.get_with( other_item( nKey ), other_less() );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->first == nKey );
-                    CPPUNIT_CHECK( gp->second.m_val == nKey );
-                    gp.release();
-
-                    gp = m.extract_with( other_item( nKey ), other_less() );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->first == nKey );
-                    CPPUNIT_CHECK( gp->second.m_val == nKey );
-                    gp.release();
-
-                    gp = m.get_with( other_item( nKey ), other_less() );
-                    CPPUNIT_CHECK( !gp );
-
-                    CPPUNIT_CHECK( !m.extract_with(other_item(nKey), other_less() ));
-                    CPPUNIT_CHECK( gp.empty());
-                }
-                CPPUNIT_ASSERT( m.empty() );
-            }
-
-            // iterator test
-            test_iter<Map>();
-        }
-
-        template <class Map>
-        void test_rcu()
-        {
-            Map m( 52, 4 );
-
-            test_int_with(m);
-
-            // extract/get test
-            {
-                typedef typename Map::gc    rcu;
-                typedef typename Map::rcu_lock rcu_lock;
-                typedef typename Map::value_type value_type;
-                typename Map::exempt_ptr ep;
-
-                static size_t const nLimit = 100;
-                int arr[nLimit];
-                for ( size_t i = 0; i < nLimit; ++i )
-                    arr[i] = (int) i;
-                shuffle( arr, arr + nLimit );
-
-                for ( size_t i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( m.insert( arr[i], arr[i] ));
-
-                for ( size_t i = 0; i < nLimit; i += 2 ) {
-                    value_type * pVal;
-                    int nKey = arr[i];
-                    {
-                        rcu_lock l;
-                        pVal = m.get( nKey );
-                        CPPUNIT_ASSERT( pVal != nullptr );
-                        CPPUNIT_CHECK( pVal->first == nKey );
-                        CPPUNIT_CHECK( pVal->second.m_val == nKey );
-
-                        ep = m.extract( nKey );
-                        CPPUNIT_ASSERT( ep );
-                        CPPUNIT_ASSERT( !ep.empty() );
-                        CPPUNIT_CHECK( pVal->first == ep->first );
-                        CPPUNIT_CHECK( pVal->second.m_val == ep->second.m_val );
-                    }
-                    ep.release();
-                    {
-                        rcu_lock l;
-                        CPPUNIT_CHECK( m.get( nKey ) == nullptr );
-                        ep = m.extract( nKey );
-                        CPPUNIT_CHECK( !ep );
-                        CPPUNIT_CHECK( ep.empty() );
-
-                        nKey = arr[i+1];
-                        pVal = m.get_with( other_item(nKey), other_less() );
-                        CPPUNIT_ASSERT( pVal != nullptr );
-                        CPPUNIT_CHECK( pVal->first == nKey );
-                        CPPUNIT_CHECK( pVal->second.m_val == nKey );
-
-                        ep = m.extract_with( other_item( nKey ), other_less() );
-                        CPPUNIT_ASSERT( ep );
-                        CPPUNIT_ASSERT( !ep.empty() );
-                        CPPUNIT_CHECK( pVal->first == ep->first );
-                        CPPUNIT_CHECK( pVal->second.m_val == (*ep).second.m_val );
-                    }
-                    ep.release();
-                    {
-                        rcu_lock l;
-                        CPPUNIT_CHECK( m.get_with( other_item(nKey), other_less() ) == nullptr );
-                        CPPUNIT_CHECK( !m.extract_with( other_item(nKey), other_less() ));
-                        CPPUNIT_CHECK( ep.empty() );
-                    }
-                }
-                CPPUNIT_CHECK( m.empty() );
-                CPPUNIT_CHECK( check_size( m, 0 ));
-                {
-                    rcu_lock l;
-                    CPPUNIT_CHECK( m.get( int(nLimit / 2) ) == nullptr );
-                    ep = m.extract( int( nLimit / 2 ) );
-                    CPPUNIT_CHECK( !ep );
-                    CPPUNIT_CHECK( ep.empty() );
-                }
-            }
-
-            // iterator test
-            test_iter<Map>();
-        }
-
-        template <class Map>
-        void test_rcu_michael_list()
-        {
-            Map m( 52, 4 );
-
-            test_int_with(m);
-
-            // extract/get test
-            {
-                typedef typename Map::gc    rcu;
-                typedef typename Map::rcu_lock rcu_lock;
-                typedef typename Map::value_type value_type;
-                typename Map::exempt_ptr ep;
-                typename Map::raw_ptr gp;
-
-                static size_t const nLimit = 100;
-                int arr[nLimit];
-                for ( size_t i = 0; i < nLimit; ++i )
-                    arr[i] = (int) i;
-                shuffle( arr, arr + nLimit );
-
-                for ( size_t i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( m.insert( arr[i], arr[i] ));
-
-                for ( size_t i = 0; i < nLimit; i += 2 ) {
-                    int nKey = arr[i];
-                    {
-                        rcu_lock l;
-                        gp = m.get( nKey );
-                        CPPUNIT_ASSERT( gp );
-                        CPPUNIT_CHECK( gp->first == nKey );
-                        CPPUNIT_CHECK( gp->second.m_val == nKey );
-                    }
-                    gp.release();
-
-                    ep = m.extract( nKey );
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty() );
-                    CPPUNIT_CHECK( nKey == ep->first );
-                    CPPUNIT_CHECK( nKey == ep->second.m_val );
-                    ep.release();
-
-                    {
-                        rcu_lock l;
-                        CPPUNIT_CHECK( !m.get( nKey ));
-                    }
-                    ep = m.extract( nKey );
-                    CPPUNIT_CHECK( !ep );
-                    CPPUNIT_CHECK( ep.empty() );
-
-                    {
-                        rcu_lock l;
-                        nKey = arr[i+1];
-                        gp = m.get_with( other_item(nKey), other_less() );
-                        CPPUNIT_ASSERT( gp );
-                        CPPUNIT_CHECK( gp->first == nKey );
-                        CPPUNIT_CHECK( gp->second.m_val == nKey );
-                    }
-                    gp.release();
-
-                    ep = m.extract_with( other_item( nKey ), other_less() );
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty() );
-                    CPPUNIT_CHECK( nKey == ep->first );
-                    CPPUNIT_CHECK( nKey == (*ep).second.m_val );
-                    ep.release();
-
-                    {
-                        rcu_lock l;
-                        CPPUNIT_CHECK( !m.get_with( other_item(nKey), other_less() ));
-                    }
-                    CPPUNIT_CHECK( !m.extract_with( other_item(nKey), other_less() ));
-                    CPPUNIT_CHECK( ep.empty() );
-                }
-                CPPUNIT_CHECK( m.empty() );
-                CPPUNIT_CHECK( check_size( m, 0 ));
-                {
-                    rcu_lock l;
-                    CPPUNIT_CHECK( !m.get( int(nLimit / 2) ));
-                }
-                ep = m.extract( int( nLimit / 2 ) );
-                CPPUNIT_CHECK( !ep );
-                CPPUNIT_CHECK( ep.empty() );
-            }
-
-            // iterator test
-            test_iter<Map>();
-        }
-
-        template <class Map>
-        void test_rcu_split_list()
-        {
-            test_rcu_michael_list<Map>();
-        }
-
-        template <class Map>
-        void test_int_with( Map& m )
-        {
-            std::pair<bool, bool> updateResult;
-
-            // insert
-            CPPUNIT_ASSERT( m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 0 ));
-            CPPUNIT_ASSERT( !m.contains(25) );
-            CPPUNIT_ASSERT( m.insert( 25 ) )    ;   // value = 0
-            CPPUNIT_ASSERT( m.contains(25) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 1 ));
-            CPPUNIT_ASSERT( m.contains(25) );
-
-            CPPUNIT_ASSERT( !m.insert( 25 ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 1 ));
-
-            CPPUNIT_ASSERT( !m.contains(10, less()) );
-            CPPUNIT_ASSERT( m.insert( 10, 10 ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 2 ));
-            CPPUNIT_ASSERT( m.contains(10, less()) );
-
-            CPPUNIT_ASSERT( !m.insert( 10, 20 ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 2 ));
-
-            CPPUNIT_ASSERT( !m.contains(30) );
-            CPPUNIT_ASSERT( m.insert_with( 30, insert_functor<Map>() ) )    ; // value = 90
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-            CPPUNIT_ASSERT( m.contains(30) );
-
-            CPPUNIT_ASSERT( !m.insert_with( 10, insert_functor<Map>() ) );
-            CPPUNIT_ASSERT( !m.insert_with( 25, insert_functor<Map>() ) );
-            CPPUNIT_ASSERT( !m.insert_with( 30, insert_functor<Map>() ) );
-
-            // update (new key)
-            CPPUNIT_ASSERT( !m.contains(27) );
-            updateResult = m.update(27, insert_functor<Map>(), false);
-            CPPUNIT_ASSERT(!updateResult.first);
-            CPPUNIT_ASSERT(!updateResult.second);
-            CPPUNIT_ASSERT(!m.contains(27));
-
-            updateResult = m.update( 27, insert_functor<Map>() ) ;   // value = 54
-            CPPUNIT_ASSERT( updateResult.first );
-            CPPUNIT_ASSERT( updateResult.second );
-            CPPUNIT_ASSERT( m.contains(27) );
-
-            // find test
-            check_value chk(10);
-            CPPUNIT_ASSERT( m.find( 10, std::ref(chk) ));
-            chk.m_nExpected = 0;
-            CPPUNIT_ASSERT( m.find_with( 25, less(), std::ref( chk ) ) );
-            chk.m_nExpected = 90;
-            CPPUNIT_ASSERT( m.find( 30, std::ref( chk ) ) );
-            chk.m_nExpected = 54;
-            CPPUNIT_ASSERT( m.find( 27, std::ref( chk ) ) );
-
-            updateResult = m.update( 10, insert_functor<Map>() ) ;   // value = 50
-            CPPUNIT_ASSERT( updateResult.first );
-            CPPUNIT_ASSERT( !updateResult.second );
-            chk.m_nExpected = 50;
-            CPPUNIT_ASSERT( m.find( 10, std::ref( chk ) ) );
-
-            // erase test
-            CPPUNIT_ASSERT( !m.contains(100) );
-            CPPUNIT_ASSERT( !m.erase( 100 )) ;  // not found
-
-            CPPUNIT_ASSERT( m.contains(25) );
-            CPPUNIT_ASSERT( check_size( m, 4 ));
-            CPPUNIT_ASSERT( m.erase( 25 ));
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-            CPPUNIT_ASSERT( !m.contains(25) );
-            CPPUNIT_ASSERT( !m.erase( 25 ));
-
-            CPPUNIT_ASSERT( !m.contains(258) );
-            CPPUNIT_ASSERT( m.insert(258))
-            CPPUNIT_ASSERT( check_size( m, 4 ));
-            CPPUNIT_ASSERT( m.contains(258, less()) );
-            CPPUNIT_ASSERT( m.erase_with( 258, less() ));
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-            CPPUNIT_ASSERT( !m.contains(258) );
-            CPPUNIT_ASSERT( !m.erase_with( 258, less() ));
-
-            int nVal;
-            extract_functor ext;
-            ext.m_pVal = &nVal;
-
-            CPPUNIT_ASSERT( !m.contains(29) );
-            CPPUNIT_ASSERT( m.insert(29, 290));
-            CPPUNIT_ASSERT( check_size( m, 4 ));
-            CPPUNIT_ASSERT( m.erase_with( 29, less(), std::ref( ext ) ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-            CPPUNIT_ASSERT( nVal == 290 );
-            nVal = -1;
-            CPPUNIT_ASSERT( !m.erase_with( 29, less(), std::ref( ext ) ) );
-            CPPUNIT_ASSERT( nVal == -1 );
-
-            CPPUNIT_ASSERT( m.erase( 30, std::ref( ext ) ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 2 ));
-            CPPUNIT_ASSERT( nVal == 90 );
-            nVal = -1;
-            CPPUNIT_ASSERT( !m.erase( 30, std::ref( ext ) ) );
-            CPPUNIT_ASSERT( nVal == -1 );
-
-            m.clear();
-            CPPUNIT_ASSERT( m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 0 ));
-
-            // emplace test
-            CPPUNIT_ASSERT( m.emplace(126) ) ; // key = 126, val = 0
-            CPPUNIT_ASSERT( m.emplace(137, 731))    ;   // key = 137, val = 731
-            CPPUNIT_ASSERT( m.emplace( 149, value_type(941) ))   ;   // key = 149, val = 941
-
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-
-            chk.m_nExpected = 0;
-            CPPUNIT_ASSERT( m.find( 126, std::ref(chk) ));
-            chk.m_nExpected = 731;
-            CPPUNIT_ASSERT( m.find_with( 137, less(), std::ref(chk) ));
-            chk.m_nExpected = 941;
-            CPPUNIT_ASSERT( m.find( 149, std::ref(chk) ));
-
-            CPPUNIT_ASSERT( !m.emplace(126, 621)) ; // already in map
-            chk.m_nExpected = 0;
-            CPPUNIT_ASSERT( m.find( 126, std::ref(chk) ));
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-
-            m.clear();
-            CPPUNIT_ASSERT( m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 0 ));
-        }
-
-
-        template <class Map>
-        void test_int_nogc()
-        {
-            typedef typename Map::iterator          iterator;
-            typedef typename Map::const_iterator    const_iterator;
-
-            {
-                Map m( 52, 4 );
-
-                CPPUNIT_ASSERT( m.empty() );
-                CPPUNIT_ASSERT( check_size( m, 0 ));
-
-                CPPUNIT_ASSERT( m.contains(10) == m.end() );
-                iterator it = m.insert( 10 );
-                CPPUNIT_ASSERT( it != m.end() );
-                CPPUNIT_ASSERT( !m.empty() );
-                CPPUNIT_ASSERT( check_size( m, 1 ));
-                CPPUNIT_ASSERT( m.contains(10) == it );
-                CPPUNIT_ASSERT( it->first == 10 );
-                CPPUNIT_ASSERT( it->second.m_val == 0 );
-
-                CPPUNIT_ASSERT( m.contains(100) == m.end() );
-                it = m.insert( 100, 200 );
-                CPPUNIT_ASSERT( it != m.end() );
-                CPPUNIT_ASSERT( !m.empty() );
-                CPPUNIT_ASSERT( check_size( m, 2 ));
-                CPPUNIT_ASSERT( m.contains(100, less()) == it );
-                CPPUNIT_ASSERT( it->first == 100 );
-                CPPUNIT_ASSERT( it->second.m_val == 200 );
-
-                CPPUNIT_ASSERT( m.contains(55) == m.end() );
-                it = m.insert_with( 55, insert_functor<Map>() );
-                CPPUNIT_ASSERT( it != m.end() );
-                CPPUNIT_ASSERT( !m.empty() );
-                CPPUNIT_ASSERT( check_size( m, 3 ));
-                CPPUNIT_ASSERT( m.contains(55) == it );
-                CPPUNIT_ASSERT( it->first == 55 );
-                CPPUNIT_ASSERT( it->second.m_val == 55 * 3 );
-
-                CPPUNIT_ASSERT( m.insert( 55 ) == m.end() );
-                CPPUNIT_ASSERT( m.insert( 55, 10 ) == m.end() );
-                CPPUNIT_ASSERT( m.insert_with( 55, insert_functor<Map>()) == m.end() );
-
-                CPPUNIT_ASSERT( m.contains(10) != m.end() );
-                std::pair<iterator, bool> updateResult = m.update(10, false);
-                CPPUNIT_ASSERT( updateResult.first != m.end() );
-                CPPUNIT_ASSERT( !updateResult.second  );
-                CPPUNIT_ASSERT( !m.empty() );
-                updateResult.first->second.m_val = updateResult.first->first * 5;
-                CPPUNIT_ASSERT( check_size( m, 3 ));
-                CPPUNIT_ASSERT( m.contains(10) == updateResult.first );
-                it = m.contains(10);
-                CPPUNIT_ASSERT( it != m.end() );
-                CPPUNIT_ASSERT( it->second.m_val == 50 );
-
-                CPPUNIT_ASSERT( m.contains(120) == m.end() );
-                updateResult = m.update(120, false);
-                CPPUNIT_ASSERT(updateResult.first == m.end());
-                CPPUNIT_ASSERT(!updateResult.second);
-                updateResult = m.update( 120 );
-                CPPUNIT_ASSERT( updateResult.first != m.end() );
-                CPPUNIT_ASSERT( updateResult.second  );
-                CPPUNIT_ASSERT( !m.empty() );
-                CPPUNIT_ASSERT( check_size( m, 4 ));
-                updateResult.first->second.m_val = updateResult.first->first * 5;
-                CPPUNIT_ASSERT( m.contains(120, less()) == updateResult.first );
-                it = m.contains(120, less());
-                CPPUNIT_ASSERT( it != m.end() );
-                CPPUNIT_ASSERT( it->second.m_val == 120 * 5 );
-                CPPUNIT_ASSERT( m.contains(120, less()) == m.contains(120) );
-
-                // emplace test
-                it = m.emplace( 151 ) ;  // key = 151,  val = 0
-                CPPUNIT_ASSERT( it != m.end() );
-                CPPUNIT_ASSERT( it->first == 151 );
-                CPPUNIT_ASSERT( it->second.m_val == 0 );
-
-                it = m.emplace( 174, 471 ) ; // key == 174, val = 471
-                CPPUNIT_ASSERT( it != m.end() );
-                CPPUNIT_ASSERT( it->first == 174 );
-                CPPUNIT_ASSERT( it->second.m_val == 471 );
-
-                it = m.emplace( 190, value_type(91)) ; // key == 190, val = 19
-                CPPUNIT_ASSERT( it != m.end() );
-                CPPUNIT_ASSERT( it->first == 190 );
-                CPPUNIT_ASSERT( it->second.m_val == 91 );
-
-                it = m.emplace( 151, 1051 );
-                CPPUNIT_ASSERT( it == m.end());
-
-                it = m.contains( 174 );
-                CPPUNIT_ASSERT( it != m.end() );
-                CPPUNIT_ASSERT( it->first == 174 );
-                CPPUNIT_ASSERT( it->second.m_val == 471 );
-
-                it = m.contains( 190 );
-                CPPUNIT_ASSERT( it != m.end() );
-                CPPUNIT_ASSERT( it->first == 190 );
-                CPPUNIT_ASSERT( it->second.m_val == 91 );
-
-                it = m.contains( 151 );
-                CPPUNIT_ASSERT( it != m.end() );
-                CPPUNIT_ASSERT( it->first == 151 );
-                CPPUNIT_ASSERT( it->second.m_val == 0 );
-            }
-
-            // iterator test
-
-            {
-                Map m( 52, 4 );
-
-                for ( int i = 0; i < 500; ++i ) {
-                    CPPUNIT_ASSERT( m.insert( i, i * 2 ) != m.end() );
-                }
-                CPPUNIT_ASSERT( check_size( m, 500 ));
-
-                {
-                    typename Map::iterator it( m.begin() );
-                    typename Map::const_iterator cit( m.cbegin() );
-                    CPPUNIT_CHECK( it == cit );
-                    CPPUNIT_CHECK( it != m.end() );
-                    CPPUNIT_CHECK( it != m.cend() );
-                    CPPUNIT_CHECK( cit != m.end() );
-                    CPPUNIT_CHECK( cit != m.cend() );
-                    ++it;
-                    CPPUNIT_CHECK( it != cit );
-                    CPPUNIT_CHECK( it != m.end() );
-                    CPPUNIT_CHECK( it != m.cend() );
-                    CPPUNIT_CHECK( cit != m.end() );
-                    CPPUNIT_CHECK( cit != m.cend() );
-                    ++cit;
-                    CPPUNIT_CHECK( it == cit );
-                    CPPUNIT_CHECK( it != m.end() );
-                    CPPUNIT_CHECK( it != m.cend() );
-                    CPPUNIT_CHECK( cit != m.end() );
-                    CPPUNIT_CHECK( cit != m.cend() );
-                }
-
-
-                for ( iterator it = m.begin(), itEnd = m.end(); it != itEnd; ++it ) {
-                    iterator it2 = it;
-                    CPPUNIT_CHECK( it2 == it );
-                    CPPUNIT_CHECK( it2 != itEnd );
-                    CPPUNIT_ASSERT( it->first * 2 == (*it).second.m_val );
-                    it->second = it->first;
-                }
-
-                Map const& refMap = m;
-                for ( const_iterator it = refMap.begin(), itEnd = refMap.end(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( it->first == it->second.m_val );
-                    CPPUNIT_ASSERT( (*it).first == (*it).second.m_val );
-                }
-            }
-        }
-
-        template <class Map>
-        void test_int_nogc_unordered()
-        {
-            typedef typename Map::iterator          iterator;
-            typedef typename Map::const_iterator    const_iterator;
-
-            {
-                Map m( 52, 4 );
-
-                CPPUNIT_ASSERT( m.empty() );
-                CPPUNIT_ASSERT( check_size( m, 0 ));
-
-                CPPUNIT_ASSERT( m.contains(10) == m.end() );
-                iterator it = m.insert( 10 );
-                CPPUNIT_ASSERT( it != m.end() );
-                CPPUNIT_ASSERT( !m.empty() );
-                CPPUNIT_ASSERT( check_size( m, 1 ));
-                CPPUNIT_ASSERT( m.contains(10) == it );
-                CPPUNIT_ASSERT( it->first == 10 );
-                CPPUNIT_ASSERT( it->second.m_val == 0 );
-
-                CPPUNIT_ASSERT( m.contains(100) == m.end() );
-                it = m.insert( 100, 200 );
-                CPPUNIT_ASSERT( it != m.end() );
-                CPPUNIT_ASSERT( !m.empty() );
-                CPPUNIT_ASSERT( check_size( m, 2 ));
-                CPPUNIT_ASSERT( m.contains(100, equal()) == it );
-                CPPUNIT_ASSERT( it->first == 100 );
-                CPPUNIT_ASSERT( it->second.m_val == 200 );
-
-                CPPUNIT_ASSERT( m.contains(55) == m.end() );
-                it = m.insert_with( 55, insert_functor<Map>() );
-                CPPUNIT_ASSERT( it != m.end() );
-                CPPUNIT_ASSERT( !m.empty() );
-                CPPUNIT_ASSERT( check_size( m, 3 ));
-                CPPUNIT_ASSERT( m.contains(55) == it );
-                CPPUNIT_ASSERT( it->first == 55 );
-                CPPUNIT_ASSERT( it->second.m_val == 55 * 3 );
-
-                CPPUNIT_ASSERT( m.insert( 55 ) == m.end() );
-                CPPUNIT_ASSERT( m.insert( 55, 10 ) == m.end() );
-                CPPUNIT_ASSERT( m.insert_with( 55, insert_functor<Map>()) == m.end() );
-
-                CPPUNIT_ASSERT( m.contains(10) != m.end() );
-                std::pair<iterator, bool> updateResult = m.update( 10 );
-                CPPUNIT_ASSERT( updateResult.first != m.end() );
-                CPPUNIT_ASSERT( !updateResult.second  );
-                CPPUNIT_ASSERT( !m.empty() );
-                updateResult.first->second.m_val = updateResult.first->first * 5;
-                CPPUNIT_ASSERT( check_size( m, 3 ));
-                CPPUNIT_ASSERT( m.contains(10) == updateResult.first );
-                it = m.contains(10);
-                CPPUNIT_ASSERT( it != m.end() );
-                CPPUNIT_ASSERT( it->second.m_val == 50 );
-
-                CPPUNIT_ASSERT( m.contains(120) == m.end() );
-                updateResult = m.update(120, false);
-                CPPUNIT_ASSERT(updateResult.first == m.end());
-                CPPUNIT_ASSERT(!updateResult.second);
-                updateResult = m.update( 120, true );
-                CPPUNIT_ASSERT( updateResult.first != m.end() );
-                CPPUNIT_ASSERT( updateResult.second  );
-                CPPUNIT_ASSERT( !m.empty() );
-                CPPUNIT_ASSERT( check_size( m, 4 ));
-                updateResult.first->second.m_val = updateResult.first->first * 5;
-                CPPUNIT_ASSERT( m.contains(120, equal()) == updateResult.first );
-                it = m.contains(120, equal());
-                CPPUNIT_ASSERT( it != m.end() );
-                CPPUNIT_ASSERT( it->second.m_val == 120 * 5 );
-                CPPUNIT_ASSERT( m.contains(120, equal()) == m.contains(120) );
-
-                // emplace test
-                it = m.emplace( 151 ) ;  // key = 151,  val = 0
-                CPPUNIT_ASSERT( it != m.end() );
-                CPPUNIT_ASSERT( it->first == 151 );
-                CPPUNIT_ASSERT( it->second.m_val == 0 );
-
-                it = m.emplace( 174, 471 ) ; // key == 174, val = 471
-                CPPUNIT_ASSERT( it != m.end() );
-                CPPUNIT_ASSERT( it->first == 174 );
-                CPPUNIT_ASSERT( it->second.m_val == 471 );
-
-                it = m.emplace( 190, value_type(91)) ; // key == 190, val = 19
-                CPPUNIT_ASSERT( it != m.end() );
-                CPPUNIT_ASSERT( it->first == 190 );
-                CPPUNIT_ASSERT( it->second.m_val == 91 );
-
-                it = m.emplace( 151, 1051 );
-                CPPUNIT_ASSERT( it == m.end());
-
-                it = m.contains( 174 );
-                CPPUNIT_ASSERT( it != m.end() );
-                CPPUNIT_ASSERT( it->first == 174 );
-                CPPUNIT_ASSERT( it->second.m_val == 471 );
-
-                it = m.contains( 190 );
-                CPPUNIT_ASSERT( it != m.end() );
-                CPPUNIT_ASSERT( it->first == 190 );
-                CPPUNIT_ASSERT( it->second.m_val == 91 );
-
-                it = m.contains( 151 );
-                CPPUNIT_ASSERT( it != m.end() );
-                CPPUNIT_ASSERT( it->first == 151 );
-                CPPUNIT_ASSERT( it->second.m_val == 0 );
-            }
-
-            // iterator test
-
-            {
-                Map m( 52, 4 );
-
-                for ( int i = 0; i < 500; ++i ) {
-                    CPPUNIT_ASSERT( m.insert( i, i * 2 ) != m.end() );
-                }
-                CPPUNIT_ASSERT( check_size( m, 500 ));
-
-                {
-                    typename Map::iterator it( m.begin() );
-                    typename Map::const_iterator cit( m.cbegin() );
-                    CPPUNIT_CHECK( it == cit );
-                    CPPUNIT_CHECK( it != m.end() );
-                    CPPUNIT_CHECK( it != m.cend() );
-                    CPPUNIT_CHECK( cit != m.end() );
-                    CPPUNIT_CHECK( cit != m.cend() );
-                    ++it;
-                    CPPUNIT_CHECK( it != cit );
-                    CPPUNIT_CHECK( it != m.end() );
-                    CPPUNIT_CHECK( it != m.cend() );
-                    CPPUNIT_CHECK( cit != m.end() );
-                    CPPUNIT_CHECK( cit != m.cend() );
-                    ++cit;
-                    CPPUNIT_CHECK( it == cit );
-                    CPPUNIT_CHECK( it != m.end() );
-                    CPPUNIT_CHECK( it != m.cend() );
-                    CPPUNIT_CHECK( cit != m.end() );
-                    CPPUNIT_CHECK( cit != m.cend() );
-                }
-
-
-                for ( iterator it = m.begin(), itEnd = m.end(); it != itEnd; ++it ) {
-                    iterator it2 = it;
-                    CPPUNIT_CHECK( it2 == it );
-                    CPPUNIT_CHECK( it2 != itEnd );
-                    CPPUNIT_ASSERT( it->first * 2 == (*it).second.m_val );
-                    it->second = it->first;
-                }
-
-                Map const& refMap = m;
-                for ( const_iterator it = refMap.begin(), itEnd = refMap.end(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( it->first == it->second.m_val );
-                    CPPUNIT_ASSERT( (*it).first == (*it).second.m_val );
-                }
-            }
-        }
-
-        template <class Map>
-        void test_iter()
-        {
-            typedef typename Map::iterator          iterator;
-            typedef typename Map::const_iterator    const_iterator;
-
-            Map s( 100, 4 );
-
-            const int nMaxCount = 500;
-            for ( int i = 0; i < nMaxCount; ++i ) {
-                CPPUNIT_ASSERT( s.insert( i, i * 2 ));
-            }
-
-            {
-                typename Map::iterator it( s.begin() );
-                typename Map::const_iterator cit( s.cbegin() );
-                CPPUNIT_CHECK( it == cit );
-                CPPUNIT_CHECK( it != s.end() );
-                CPPUNIT_CHECK( it != s.cend() );
-                CPPUNIT_CHECK( cit != s.end() );
-                CPPUNIT_CHECK( cit != s.cend() );
-                ++it;
-                CPPUNIT_CHECK( it != cit );
-                CPPUNIT_CHECK( it != s.end() );
-                CPPUNIT_CHECK( it != s.cend() );
-                CPPUNIT_CHECK( cit != s.end() );
-                CPPUNIT_CHECK( cit != s.cend() );
-                ++cit;
-                CPPUNIT_CHECK( it == cit );
-                CPPUNIT_CHECK( it != s.end() );
-                CPPUNIT_CHECK( it != s.cend() );
-                CPPUNIT_CHECK( cit != s.end() );
-                CPPUNIT_CHECK( cit != s.cend() );
-            }
-
-            int nCount = 0;
-            for ( iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( it->first * 2 == it->second.m_val );
-                CPPUNIT_ASSERT( (*it).first * 2 == (*it).second.m_val );
-                it->second.m_val = it->first;
-                ++nCount;
-            }
-            CPPUNIT_ASSERT( nCount == nMaxCount );
-
-            Map const& refSet = s;
-            nCount = 0;
-            for ( const_iterator it = refSet.begin(), itEnd = refSet.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( it->first == it->second.m_val );
-                CPPUNIT_ASSERT( (*it).first == (*it).second.m_val );
-                ++nCount;
-            }
-            CPPUNIT_ASSERT( nCount == nMaxCount );
-        }
-
-
-        void Michael_HP_cmp();
-        void Michael_HP_less();
-        void Michael_HP_cmpmix();
-
-        void Michael_DHP_cmp();
-        void Michael_DHP_less();
-        void Michael_DHP_cmpmix();
-
-        void Michael_RCU_GPI_cmp();
-        void Michael_RCU_GPI_less();
-        void Michael_RCU_GPI_cmpmix();
-
-        void Michael_RCU_GPB_cmp();
-        void Michael_RCU_GPB_less();
-        void Michael_RCU_GPB_cmpmix();
-
-        void Michael_RCU_GPT_cmp();
-        void Michael_RCU_GPT_less();
-        void Michael_RCU_GPT_cmpmix();
-
-        void Michael_RCU_SHB_cmp();
-        void Michael_RCU_SHB_less();
-        void Michael_RCU_SHB_cmpmix();
-
-        void Michael_RCU_SHT_cmp();
-        void Michael_RCU_SHT_less();
-        void Michael_RCU_SHT_cmpmix();
-
-        void Michael_nogc_cmp();
-        void Michael_nogc_less();
-        void Michael_nogc_cmpmix();
-
-        void Lazy_HP_cmp();
-        void Lazy_HP_less();
-        void Lazy_HP_cmpmix();
-
-        void Lazy_DHP_cmp();
-        void Lazy_DHP_less();
-        void Lazy_DHP_cmpmix();
-
-        void Lazy_RCU_GPI_cmp();
-        void Lazy_RCU_GPI_less();
-        void Lazy_RCU_GPI_cmpmix();
-
-        void Lazy_RCU_GPB_cmp();
-        void Lazy_RCU_GPB_less();
-        void Lazy_RCU_GPB_cmpmix();
-
-        void Lazy_RCU_GPT_cmp();
-        void Lazy_RCU_GPT_less();
-        void Lazy_RCU_GPT_cmpmix();
-
-        void Lazy_RCU_SHB_cmp();
-        void Lazy_RCU_SHB_less();
-        void Lazy_RCU_SHB_cmpmix();
-
-        void Lazy_RCU_SHT_cmp();
-        void Lazy_RCU_SHT_less();
-        void Lazy_RCU_SHT_cmpmix();
-
-        void Lazy_nogc_cmp();
-        void Lazy_nogc_less();
-        void Lazy_nogc_equal();
-        void Lazy_nogc_cmpmix();
-
-        void Split_HP_cmp();
-        void Split_HP_less();
-        void Split_HP_cmpmix();
-        void Split_HP_cmpmix_stat();
-
-        void Split_DHP_cmp();
-        void Split_DHP_less();
-        void Split_DHP_cmpmix();
-        void Split_DHP_cmpmix_stat();
-
-        void Split_RCU_GPI_cmp();
-        void Split_RCU_GPI_less();
-        void Split_RCU_GPI_cmpmix();
-        void Split_RCU_GPI_cmpmix_stat();
-
-        void Split_RCU_GPB_cmp();
-        void Split_RCU_GPB_less();
-        void Split_RCU_GPB_cmpmix();
-        void Split_RCU_GPB_cmpmix_stat();
-
-        void Split_RCU_GPT_cmp();
-        void Split_RCU_GPT_less();
-        void Split_RCU_GPT_cmpmix();
-        void Split_RCU_GPT_cmpmix_stat();
-
-        void Split_RCU_SHB_cmp();
-        void Split_RCU_SHB_less();
-        void Split_RCU_SHB_cmpmix();
-        void Split_RCU_SHB_cmpmix_stat();
-
-        void Split_RCU_SHT_cmp();
-        void Split_RCU_SHT_less();
-        void Split_RCU_SHT_cmpmix();
-        void Split_RCU_SHT_cmpmix_stat();
-
-        void Split_nogc_cmp();
-        void Split_nogc_less();
-        void Split_nogc_cmpmix();
-        void Split_nogc_cmpmix_stat();
-
-        void Split_Lazy_HP_cmp();
-        void Split_Lazy_HP_less();
-        void Split_Lazy_HP_cmpmix();
-        void Split_Lazy_HP_cmpmix_stat();
-
-        void Split_Lazy_DHP_cmp();
-        void Split_Lazy_DHP_less();
-        void Split_Lazy_DHP_cmpmix();
-        void Split_Lazy_DHP_cmpmix_stat();
-
-        void Split_Lazy_RCU_GPI_cmp();
-        void Split_Lazy_RCU_GPI_less();
-        void Split_Lazy_RCU_GPI_cmpmix();
-        void Split_Lazy_RCU_GPI_cmpmix_stat();
-
-        void Split_Lazy_RCU_GPB_cmp();
-        void Split_Lazy_RCU_GPB_less();
-        void Split_Lazy_RCU_GPB_cmpmix();
-        void Split_Lazy_RCU_GPB_cmpmix_stat();
-
-        void Split_Lazy_RCU_GPT_cmp();
-        void Split_Lazy_RCU_GPT_less();
-        void Split_Lazy_RCU_GPT_cmpmix();
-        void Split_Lazy_RCU_GPT_cmpmix_stat();
-
-        void Split_Lazy_RCU_SHB_cmp();
-        void Split_Lazy_RCU_SHB_less();
-        void Split_Lazy_RCU_SHB_cmpmix();
-        void Split_Lazy_RCU_SHB_cmpmix_stat();
-
-        void Split_Lazy_RCU_SHT_cmp();
-        void Split_Lazy_RCU_SHT_less();
-        void Split_Lazy_RCU_SHT_cmpmix();
-        void Split_Lazy_RCU_SHT_cmpmix_stat();
-
-        void Split_Lazy_nogc_cmp();
-        void Split_Lazy_nogc_less();
-        void Split_Lazy_nogc_cmpmix();
-        void Split_Lazy_nogc_cmpmix_stat();
-
-        CPPUNIT_TEST_SUITE(HashMapHdrTest)
-            CPPUNIT_TEST(Michael_HP_cmp)
-            CPPUNIT_TEST(Michael_HP_less)
-            CPPUNIT_TEST(Michael_HP_cmpmix)
-
-            CPPUNIT_TEST(Michael_DHP_cmp)
-            CPPUNIT_TEST(Michael_DHP_less)
-            CPPUNIT_TEST(Michael_DHP_cmpmix)
-
-            CPPUNIT_TEST(Michael_RCU_GPI_cmp)
-            CPPUNIT_TEST(Michael_RCU_GPI_less)
-            CPPUNIT_TEST(Michael_RCU_GPI_cmpmix)
-
-            CPPUNIT_TEST(Michael_RCU_GPB_cmp)
-            CPPUNIT_TEST(Michael_RCU_GPB_less)
-            CPPUNIT_TEST(Michael_RCU_GPB_cmpmix)
-
-            CPPUNIT_TEST(Michael_RCU_SHT_cmp)
-            CPPUNIT_TEST(Michael_RCU_SHT_less)
-            CPPUNIT_TEST(Michael_RCU_SHT_cmpmix)
-
-            CPPUNIT_TEST(Michael_RCU_SHB_cmp)
-            CPPUNIT_TEST(Michael_RCU_SHB_less)
-            CPPUNIT_TEST(Michael_RCU_SHB_cmpmix)
-
-            CPPUNIT_TEST(Michael_RCU_GPT_cmp)
-            CPPUNIT_TEST(Michael_RCU_GPT_less)
-            CPPUNIT_TEST(Michael_RCU_GPT_cmpmix)
-
-            CPPUNIT_TEST(Michael_nogc_cmp)
-            CPPUNIT_TEST(Michael_nogc_less)
-            CPPUNIT_TEST(Michael_nogc_cmpmix)
-
-            CPPUNIT_TEST(Lazy_HP_cmp)
-            CPPUNIT_TEST(Lazy_HP_less)
-            CPPUNIT_TEST(Lazy_HP_cmpmix)
-
-            CPPUNIT_TEST(Lazy_DHP_cmp)
-            CPPUNIT_TEST(Lazy_DHP_less)
-            CPPUNIT_TEST(Lazy_DHP_cmpmix)
-
-            CPPUNIT_TEST(Lazy_RCU_GPI_cmp)
-            CPPUNIT_TEST(Lazy_RCU_GPI_less)
-            CPPUNIT_TEST(Lazy_RCU_GPI_cmpmix)
-
-            CPPUNIT_TEST(Lazy_RCU_GPB_cmp)
-            CPPUNIT_TEST(Lazy_RCU_GPB_less)
-            CPPUNIT_TEST(Lazy_RCU_GPB_cmpmix)
-
-            CPPUNIT_TEST(Lazy_RCU_GPT_cmp)
-            CPPUNIT_TEST(Lazy_RCU_GPT_less)
-            CPPUNIT_TEST(Lazy_RCU_GPT_cmpmix)
-
-            CPPUNIT_TEST(Lazy_RCU_SHB_cmp)
-            CPPUNIT_TEST(Lazy_RCU_SHB_less)
-            CPPUNIT_TEST(Lazy_RCU_SHB_cmpmix)
-
-            CPPUNIT_TEST(Lazy_RCU_SHT_cmp)
-            CPPUNIT_TEST(Lazy_RCU_SHT_less)
-            CPPUNIT_TEST(Lazy_RCU_SHT_cmpmix)
-
-            CPPUNIT_TEST(Lazy_nogc_cmp)
-            CPPUNIT_TEST(Lazy_nogc_less)
-            CPPUNIT_TEST(Lazy_nogc_equal)
-            CPPUNIT_TEST(Lazy_nogc_cmpmix)
-
-            CPPUNIT_TEST(Split_HP_cmp)
-            CPPUNIT_TEST(Split_HP_less)
-            CPPUNIT_TEST(Split_HP_cmpmix)
-            CPPUNIT_TEST( Split_HP_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_DHP_cmp)
-            CPPUNIT_TEST(Split_DHP_less)
-            CPPUNIT_TEST(Split_DHP_cmpmix)
-            CPPUNIT_TEST( Split_DHP_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_RCU_GPI_cmp)
-            CPPUNIT_TEST(Split_RCU_GPI_less)
-            CPPUNIT_TEST(Split_RCU_GPI_cmpmix)
-            CPPUNIT_TEST( Split_RCU_GPI_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_RCU_GPB_cmp)
-            CPPUNIT_TEST(Split_RCU_GPB_less)
-            CPPUNIT_TEST(Split_RCU_GPB_cmpmix)
-            CPPUNIT_TEST( Split_RCU_GPB_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_RCU_GPT_cmp)
-            CPPUNIT_TEST(Split_RCU_GPT_less)
-            CPPUNIT_TEST(Split_RCU_GPT_cmpmix)
-            CPPUNIT_TEST( Split_RCU_GPT_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_RCU_SHB_cmp)
-            CPPUNIT_TEST(Split_RCU_SHB_less)
-            CPPUNIT_TEST(Split_RCU_SHB_cmpmix)
-            CPPUNIT_TEST( Split_RCU_SHB_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_RCU_SHT_cmp)
-            CPPUNIT_TEST(Split_RCU_SHT_less)
-            CPPUNIT_TEST(Split_RCU_SHT_cmpmix)
-            CPPUNIT_TEST( Split_RCU_SHT_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_nogc_cmp)
-            CPPUNIT_TEST(Split_nogc_less)
-            CPPUNIT_TEST(Split_nogc_cmpmix)
-            CPPUNIT_TEST( Split_nogc_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_Lazy_HP_cmp)
-            CPPUNIT_TEST(Split_Lazy_HP_less)
-            CPPUNIT_TEST(Split_Lazy_HP_cmpmix)
-            CPPUNIT_TEST( Split_Lazy_HP_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_Lazy_DHP_cmp)
-            CPPUNIT_TEST(Split_Lazy_DHP_less)
-            CPPUNIT_TEST(Split_Lazy_DHP_cmpmix)
-            CPPUNIT_TEST( Split_Lazy_DHP_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_Lazy_RCU_GPI_cmp)
-            CPPUNIT_TEST(Split_Lazy_RCU_GPI_less)
-            CPPUNIT_TEST(Split_Lazy_RCU_GPI_cmpmix)
-            CPPUNIT_TEST( Split_Lazy_RCU_GPI_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_Lazy_RCU_GPB_cmp)
-            CPPUNIT_TEST(Split_Lazy_RCU_GPB_less)
-            CPPUNIT_TEST(Split_Lazy_RCU_GPB_cmpmix)
-            CPPUNIT_TEST( Split_Lazy_RCU_GPB_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_Lazy_RCU_GPT_cmp)
-            CPPUNIT_TEST(Split_Lazy_RCU_GPT_less)
-            CPPUNIT_TEST(Split_Lazy_RCU_GPT_cmpmix)
-            CPPUNIT_TEST( Split_Lazy_RCU_GPT_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_Lazy_RCU_SHB_cmp)
-            CPPUNIT_TEST(Split_Lazy_RCU_SHB_less)
-            CPPUNIT_TEST(Split_Lazy_RCU_SHB_cmpmix)
-            CPPUNIT_TEST( Split_Lazy_RCU_SHB_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_Lazy_RCU_SHT_cmp)
-            CPPUNIT_TEST(Split_Lazy_RCU_SHT_less)
-            CPPUNIT_TEST(Split_Lazy_RCU_SHT_cmpmix)
-            CPPUNIT_TEST( Split_Lazy_RCU_SHT_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_Lazy_nogc_cmp)
-            CPPUNIT_TEST(Split_Lazy_nogc_less)
-            CPPUNIT_TEST(Split_Lazy_nogc_cmpmix)
-            CPPUNIT_TEST( Split_Lazy_nogc_cmpmix_stat )
-            CPPUNIT_TEST_SUITE_END()
-
-    };
-}   // namespace map
-
-#endif // #ifndef CDSTEST_HDR_MAP_H
diff --git a/tests/test-hdr/map/hdr_michael_map_dhp.cpp b/tests/test-hdr/map/hdr_michael_map_dhp.cpp
deleted file mode 100644 (file)
index 26a5f47..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/container/michael_kvlist_dhp.h>
-#include <cds/container/michael_map.h>
-
-namespace map {
-    namespace {
-        struct map_traits: public cc::michael_map::traits
-        {
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-        };
-        struct DHP_cmp_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-        };
-
-        struct DHP_less_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::less  less;
-        };
-
-        struct DHP_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-            typedef HashMapHdrTest::less  less;
-        };
-    }
-
-    void HashMapHdrTest::Michael_DHP_cmp()
-    {
-        typedef cc::MichaelKVList< cds::gc::DHP, int, HashMapHdrTest::value_type, DHP_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< cds::gc::DHP, list, map_traits > map;
-        test_int< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< cds::gc::DHP, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-    void HashMapHdrTest::Michael_DHP_less()
-    {
-        typedef cc::MichaelKVList< cds::gc::DHP, int, HashMapHdrTest::value_type, DHP_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< cds::gc::DHP, list, map_traits > map;
-        test_int< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< cds::gc::DHP, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-    void HashMapHdrTest::Michael_DHP_cmpmix()
-    {
-        typedef cc::MichaelKVList< cds::gc::DHP, int, HashMapHdrTest::value_type, DHP_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< cds::gc::DHP, list, map_traits > map;
-        test_int< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< cds::gc::DHP, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-
-} // namespace map
-
diff --git a/tests/test-hdr/map/hdr_michael_map_hp.cpp b/tests/test-hdr/map/hdr_michael_map_hp.cpp
deleted file mode 100644 (file)
index 47e673c..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/container/michael_kvlist_hp.h>
-#include <cds/container/michael_map.h>
-
-namespace map {
-    namespace {
-        struct map_traits: public cc::michael_map::traits
-        {
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-        };
-
-        struct HP_cmp_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-        };
-
-        struct HP_less_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::less  less;
-        };
-
-        struct HP_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-            typedef HashMapHdrTest::less  less;
-        };
-    }
-
-    void HashMapHdrTest::Michael_HP_cmp()
-    {
-        typedef cc::MichaelKVList< cds::gc::HP, int, HashMapHdrTest::value_type, HP_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< cds::gc::HP, list, map_traits > map;
-        test_int< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< cds::gc::HP, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-    void HashMapHdrTest::Michael_HP_less()
-    {
-        typedef cc::MichaelKVList< cds::gc::HP, int, HashMapHdrTest::value_type, HP_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< cds::gc::HP, list, map_traits > map;
-        test_int< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< cds::gc::HP, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-    void HashMapHdrTest::Michael_HP_cmpmix()
-    {
-        typedef cc::MichaelKVList< cds::gc::HP, int, HashMapHdrTest::value_type, HP_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< cds::gc::HP, list, map_traits > map;
-        test_int< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< cds::gc::HP, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-
-} // namespace map
-
-CPPUNIT_TEST_SUITE_REGISTRATION(map::HashMapHdrTest);
-
diff --git a/tests/test-hdr/map/hdr_michael_map_lazy_dhp.cpp b/tests/test-hdr/map/hdr_michael_map_lazy_dhp.cpp
deleted file mode 100644 (file)
index ae6e244..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/container/lazy_kvlist_dhp.h>
-#include <cds/container/michael_map.h>
-
-namespace map {
-    namespace {
-        struct map_traits: public cc::michael_map::traits
-        {
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-        };
-        struct DHP_cmp_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-        };
-
-        struct DHP_less_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::less  less;
-        };
-
-        struct DHP_cmpmix_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-            typedef HashMapHdrTest::less  less;
-        };
-    }
-
-    void HashMapHdrTest::Lazy_DHP_cmp()
-    {
-        typedef cc::LazyKVList< cds::gc::DHP, int, HashMapHdrTest::value_type, DHP_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< cds::gc::DHP, list, map_traits > map;
-        test_int< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< cds::gc::DHP, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-    void HashMapHdrTest::Lazy_DHP_less()
-    {
-        typedef cc::LazyKVList< cds::gc::DHP, int, HashMapHdrTest::value_type, DHP_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< cds::gc::DHP, list, map_traits > map;
-        test_int< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< cds::gc::DHP, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-    void HashMapHdrTest::Lazy_DHP_cmpmix()
-    {
-        typedef cc::LazyKVList< cds::gc::DHP, int, HashMapHdrTest::value_type, DHP_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< cds::gc::DHP, list, map_traits > map;
-        test_int< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< cds::gc::DHP, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-
-} // namespace map
-
diff --git a/tests/test-hdr/map/hdr_michael_map_lazy_hp.cpp b/tests/test-hdr/map/hdr_michael_map_lazy_hp.cpp
deleted file mode 100644 (file)
index 49f15d2..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/container/lazy_kvlist_hp.h>
-#include <cds/container/michael_map.h>
-
-namespace map {
-    namespace {
-        struct map_traits: public cc::michael_map::traits
-        {
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-        };
-        struct HP_cmp_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-        };
-
-        struct HP_less_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::less  less;
-        };
-
-        struct HP_cmpmix_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-            typedef HashMapHdrTest::less  less;
-        };
-    }
-
-    void HashMapHdrTest::Lazy_HP_cmp()
-    {
-        typedef cc::LazyKVList< cds::gc::HP, int, HashMapHdrTest::value_type, HP_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< cds::gc::HP, list, map_traits > map;
-        test_int< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< cds::gc::HP, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-    void HashMapHdrTest::Lazy_HP_less()
-    {
-        typedef cc::LazyKVList< cds::gc::HP, int, HashMapHdrTest::value_type, HP_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< cds::gc::HP, list, map_traits > map;
-        test_int< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< cds::gc::HP, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-    void HashMapHdrTest::Lazy_HP_cmpmix()
-    {
-        typedef cc::LazyKVList< cds::gc::HP, int, HashMapHdrTest::value_type, HP_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< cds::gc::HP, list, map_traits > map;
-        test_int< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< cds::gc::HP, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-
-} // namespace map
-
diff --git a/tests/test-hdr/map/hdr_michael_map_lazy_nogc.cpp b/tests/test-hdr/map/hdr_michael_map_lazy_nogc.cpp
deleted file mode 100644 (file)
index 669697d..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/container/lazy_kvlist_nogc.h>
-#include <cds/container/michael_map_nogc.h>
-
-namespace map {
-    namespace {
-        struct map_traits: public cc::michael_map::traits
-        {
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-        };
-        struct nogc_cmp_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-        };
-
-        struct nogc_less_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::less  less;
-        };
-
-        struct nogc_cmpmix_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-            typedef HashMapHdrTest::less  less;
-        };
-
-        struct nogc_equal_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::equal  equal_to;
-            static const bool sort = false;
-        };
-    }
-
-    void HashMapHdrTest::Lazy_nogc_cmp()
-    {
-        typedef cc::LazyKVList< cds::gc::nogc, int, HashMapHdrTest::value_type, nogc_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< cds::gc::nogc, list, map_traits > map;
-        test_int_nogc< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< cds::gc::nogc, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_int_nogc< opt_map >();
-    }
-
-    void HashMapHdrTest::Lazy_nogc_less()
-    {
-        typedef cc::LazyKVList< cds::gc::nogc, int, HashMapHdrTest::value_type, nogc_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< cds::gc::nogc, list, map_traits > map;
-        test_int_nogc< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< cds::gc::nogc, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_int_nogc< opt_map >();
-    }
-
-    void HashMapHdrTest::Lazy_nogc_equal()
-    {
-        typedef cc::LazyKVList< cds::gc::nogc, int, HashMapHdrTest::value_type, nogc_equal_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< cds::gc::nogc, list, map_traits > map;
-        test_int_nogc_unordered< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< cds::gc::nogc, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_int_nogc_unordered< opt_map >();
-    }
-
-    void HashMapHdrTest::Lazy_nogc_cmpmix()
-    {
-        typedef cc::LazyKVList< cds::gc::nogc, int, HashMapHdrTest::value_type, nogc_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< cds::gc::nogc, list, map_traits > map;
-        test_int_nogc< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< cds::gc::nogc, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_int_nogc< opt_map >();
-    }
-
-}   // namespace map
diff --git a/tests/test-hdr/map/hdr_michael_map_lazy_rcu_gpb.cpp b/tests/test-hdr/map/hdr_michael_map_lazy_rcu_gpb.cpp
deleted file mode 100644 (file)
index 7e1f025..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/container/lazy_kvlist_rcu.h>
-#include <cds/container/michael_map_rcu.h>
-
-namespace map {
-    namespace {
-        struct map_traits: public cc::michael_map::traits
-        {
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-        };
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_type;
-
-        struct RCU_GPB_cmp_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-        };
-
-        struct RCU_GPB_less_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::less  less;
-        };
-
-        struct RCU_GPB_cmpmix_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-            typedef HashMapHdrTest::less  less;
-        };
-    }
-
-    void HashMapHdrTest::Lazy_RCU_GPB_cmp()
-    {
-        typedef cc::LazyKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_GPB_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-    }
-
-    void HashMapHdrTest::Lazy_RCU_GPB_less()
-    {
-        typedef cc::LazyKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_GPB_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-    }
-
-    void HashMapHdrTest::Lazy_RCU_GPB_cmpmix()
-    {
-        typedef cc::LazyKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_GPB_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-    }
-
-
-} // namespace map
-
diff --git a/tests/test-hdr/map/hdr_michael_map_lazy_rcu_gpi.cpp b/tests/test-hdr/map/hdr_michael_map_lazy_rcu_gpi.cpp
deleted file mode 100644 (file)
index a62d9fe..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/container/lazy_kvlist_rcu.h>
-#include <cds/container/michael_map_rcu.h>
-
-namespace map {
-    namespace {
-        struct map_traits: public cc::michael_map::traits
-        {
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-        };
-        typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
-
-        struct RCU_GPI_cmp_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-        };
-
-        struct RCU_GPI_less_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::less  less;
-        };
-
-        struct RCU_GPI_cmpmix_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-            typedef HashMapHdrTest::less  less;
-        };
-    }
-
-    void HashMapHdrTest::Lazy_RCU_GPI_cmp()
-    {
-        typedef cc::LazyKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_GPI_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-    }
-
-    void HashMapHdrTest::Lazy_RCU_GPI_less()
-    {
-        typedef cc::LazyKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_GPI_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-    }
-
-    void HashMapHdrTest::Lazy_RCU_GPI_cmpmix()
-    {
-        typedef cc::LazyKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_GPI_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-    }
-
-
-} // namespace map
-
diff --git a/tests/test-hdr/map/hdr_michael_map_lazy_rcu_gpt.cpp b/tests/test-hdr/map/hdr_michael_map_lazy_rcu_gpt.cpp
deleted file mode 100644 (file)
index aca2193..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/container/lazy_kvlist_rcu.h>
-#include <cds/container/michael_map_rcu.h>
-
-namespace map {
-    namespace {
-        struct map_traits: public cc::michael_map::traits
-        {
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-        };
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_type;
-
-        struct RCU_GPT_cmp_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-        };
-
-        struct RCU_GPT_less_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::less  less;
-        };
-
-        struct RCU_GPT_cmpmix_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-            typedef HashMapHdrTest::less  less;
-        };
-    }
-
-    void HashMapHdrTest::Lazy_RCU_GPT_cmp()
-    {
-        typedef cc::LazyKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_GPT_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-    }
-
-    void HashMapHdrTest::Lazy_RCU_GPT_less()
-    {
-        typedef cc::LazyKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_GPT_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-    }
-
-    void HashMapHdrTest::Lazy_RCU_GPT_cmpmix()
-    {
-        typedef cc::LazyKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_GPT_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-    }
-
-
-} // namespace map
-
diff --git a/tests/test-hdr/map/hdr_michael_map_lazy_rcu_shb.cpp b/tests/test-hdr/map/hdr_michael_map_lazy_rcu_shb.cpp
deleted file mode 100644 (file)
index 8cb3165..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/container/lazy_kvlist_rcu.h>
-#include <cds/container/michael_map_rcu.h>
-
-namespace map {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct map_traits: public cc::michael_map::traits
-        {
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-        };
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_type;
-
-        struct RCU_SHB_cmp_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-        };
-
-        struct RCU_SHB_less_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::less  less;
-        };
-
-        struct RCU_SHB_cmpmix_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-            typedef HashMapHdrTest::less  less;
-        };
-    }
-#endif
-
-    void HashMapHdrTest::Lazy_RCU_SHB_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_SHB_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-#endif
-    }
-
-    void HashMapHdrTest::Lazy_RCU_SHB_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_SHB_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-#endif
-    }
-
-    void HashMapHdrTest::Lazy_RCU_SHB_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_SHB_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-#endif
-    }
-
-} // namespace map
diff --git a/tests/test-hdr/map/hdr_michael_map_lazy_rcu_sht.cpp b/tests/test-hdr/map/hdr_michael_map_lazy_rcu_sht.cpp
deleted file mode 100644 (file)
index 7e3cf44..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/container/lazy_kvlist_rcu.h>
-#include <cds/container/michael_map_rcu.h>
-
-namespace map {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct map_traits: public cc::michael_map::traits
-        {
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-        };
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_type;
-
-        struct RCU_SHT_cmp_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-        };
-
-        struct RCU_SHT_less_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::less  less;
-        };
-
-        struct RCU_SHT_cmpmix_traits: public cc::lazy_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-            typedef HashMapHdrTest::less  less;
-        };
-    }
-#endif
-
-    void HashMapHdrTest::Lazy_RCU_SHT_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_SHT_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-#endif
-    }
-
-    void HashMapHdrTest::Lazy_RCU_SHT_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_SHT_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-#endif
-    }
-
-    void HashMapHdrTest::Lazy_RCU_SHT_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_SHT_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-#endif
-    }
-
-} // namespace map
diff --git a/tests/test-hdr/map/hdr_michael_map_nogc.cpp b/tests/test-hdr/map/hdr_michael_map_nogc.cpp
deleted file mode 100644 (file)
index c32e270..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/container/michael_kvlist_nogc.h>
-#include <cds/container/michael_map_nogc.h>
-
-namespace map {
-    namespace {
-        struct map_traits: public cc::michael_map::traits
-        {
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-        };
-        struct nogc_cmp_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-        };
-
-        struct nogc_less_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::less  less;
-        };
-
-        struct nogc_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-            typedef HashMapHdrTest::less  less;
-        };
-    }
-
-    void HashMapHdrTest::Michael_nogc_cmp()
-    {
-        typedef cc::MichaelKVList< cds::gc::nogc, int, HashMapHdrTest::value_type, nogc_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< cds::gc::nogc, list, map_traits > map;
-        test_int_nogc< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< cds::gc::nogc, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_int_nogc< opt_map >();
-    }
-
-    void HashMapHdrTest::Michael_nogc_less()
-    {
-        typedef cc::MichaelKVList< cds::gc::nogc, int, HashMapHdrTest::value_type, nogc_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< cds::gc::nogc, list, map_traits > map;
-        test_int_nogc< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< cds::gc::nogc, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_int_nogc< opt_map >();
-    }
-
-    void HashMapHdrTest::Michael_nogc_cmpmix()
-    {
-        typedef cc::MichaelKVList< cds::gc::nogc, int, HashMapHdrTest::value_type, nogc_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< cds::gc::nogc, list, map_traits > map;
-        test_int_nogc< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< cds::gc::nogc, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_int_nogc< opt_map >();
-    }
-
-}   // namespace map
diff --git a/tests/test-hdr/map/hdr_michael_map_rcu_gpb.cpp b/tests/test-hdr/map/hdr_michael_map_rcu_gpb.cpp
deleted file mode 100644 (file)
index 219adfc..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/container/michael_kvlist_rcu.h>
-#include <cds/container/michael_map_rcu.h>
-
-namespace map {
-    namespace {
-        struct map_traits: public cc::michael_map::traits
-        {
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-        };
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_type;
-
-        struct RCU_GPB_cmp_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-        };
-
-        struct RCU_GPB_less_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::less  less;
-        };
-
-        struct RCU_GPB_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-            typedef HashMapHdrTest::less  less;
-        };
-    }
-
-    void HashMapHdrTest::Michael_RCU_GPB_cmp()
-    {
-        typedef cc::MichaelKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_GPB_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu_michael_list< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu_michael_list< opt_map >();
-    }
-
-    void HashMapHdrTest::Michael_RCU_GPB_less()
-    {
-        typedef cc::MichaelKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_GPB_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu_michael_list< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu_michael_list< opt_map >();
-    }
-
-    void HashMapHdrTest::Michael_RCU_GPB_cmpmix()
-    {
-        typedef cc::MichaelKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_GPB_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu_michael_list< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu_michael_list< opt_map >();
-    }
-
-
-} // namespace map
-
diff --git a/tests/test-hdr/map/hdr_michael_map_rcu_gpi.cpp b/tests/test-hdr/map/hdr_michael_map_rcu_gpi.cpp
deleted file mode 100644 (file)
index b4d53d1..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/container/michael_kvlist_rcu.h>
-#include <cds/container/michael_map_rcu.h>
-
-namespace map {
-    namespace {
-        struct map_traits: public cc::michael_map::traits
-        {
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-        };
-        typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
-
-        struct RCU_GPI_cmp_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-        };
-
-        struct RCU_GPI_less_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::less  less;
-        };
-
-        struct RCU_GPI_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-            typedef HashMapHdrTest::less  less;
-        };
-    }
-
-    void HashMapHdrTest::Michael_RCU_GPI_cmp()
-    {
-        typedef cc::MichaelKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_GPI_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu_michael_list< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu_michael_list< opt_map >();
-    }
-
-    void HashMapHdrTest::Michael_RCU_GPI_less()
-    {
-        typedef cc::MichaelKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_GPI_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu_michael_list< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu_michael_list< opt_map >();
-    }
-
-    void HashMapHdrTest::Michael_RCU_GPI_cmpmix()
-    {
-        typedef cc::MichaelKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_GPI_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu_michael_list< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu_michael_list< opt_map >();
-    }
-
-
-} // namespace map
-
diff --git a/tests/test-hdr/map/hdr_michael_map_rcu_gpt.cpp b/tests/test-hdr/map/hdr_michael_map_rcu_gpt.cpp
deleted file mode 100644 (file)
index 1bf0d87..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/container/michael_kvlist_rcu.h>
-#include <cds/container/michael_map_rcu.h>
-
-namespace map {
-    namespace {
-        struct map_traits: public cc::michael_map::traits
-        {
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-        };
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_type;
-
-        struct RCU_GPT_cmp_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-        };
-
-        struct RCU_GPT_less_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::less  less;
-        };
-
-        struct RCU_GPT_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-            typedef HashMapHdrTest::less  less;
-        };
-    }
-
-    void HashMapHdrTest::Michael_RCU_GPT_cmp()
-    {
-        typedef cc::MichaelKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_GPT_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu_michael_list< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu_michael_list< opt_map >();
-    }
-
-    void HashMapHdrTest::Michael_RCU_GPT_less()
-    {
-        typedef cc::MichaelKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_GPT_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu_michael_list< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu_michael_list< opt_map >();
-    }
-
-    void HashMapHdrTest::Michael_RCU_GPT_cmpmix()
-    {
-        typedef cc::MichaelKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_GPT_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu_michael_list< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu_michael_list< opt_map >();
-    }
-
-
-} // namespace map
-
diff --git a/tests/test-hdr/map/hdr_michael_map_rcu_shb.cpp b/tests/test-hdr/map/hdr_michael_map_rcu_shb.cpp
deleted file mode 100644 (file)
index eccce32..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/container/michael_kvlist_rcu.h>
-#include <cds/container/michael_map_rcu.h>
-
-namespace map {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct map_traits: public cc::michael_map::traits
-        {
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-        };
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_type;
-
-        struct RCU_SHB_cmp_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-        };
-
-        struct RCU_SHB_less_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::less  less;
-        };
-
-        struct RCU_SHB_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-            typedef HashMapHdrTest::less  less;
-        };
-    }
-#endif
-
-    void HashMapHdrTest::Michael_RCU_SHB_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_SHB_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu_michael_list< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu_michael_list< opt_map >();
-#endif
-    }
-
-    void HashMapHdrTest::Michael_RCU_SHB_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_SHB_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu_michael_list< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu_michael_list< opt_map >();
-#endif
-    }
-
-    void HashMapHdrTest::Michael_RCU_SHB_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_SHB_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu_michael_list< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu_michael_list< opt_map >();
-#endif
-    }
-
-} // namespace map
diff --git a/tests/test-hdr/map/hdr_michael_map_rcu_sht.cpp b/tests/test-hdr/map/hdr_michael_map_rcu_sht.cpp
deleted file mode 100644 (file)
index 185dff6..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/container/michael_kvlist_rcu.h>
-#include <cds/container/michael_map_rcu.h>
-
-namespace map {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        struct map_traits: public cc::michael_map::traits
-        {
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-        };
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_type;
-
-        struct RCU_SHT_cmp_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-        };
-
-        struct RCU_SHT_less_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::less  less;
-        };
-
-        struct RCU_SHT_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef HashMapHdrTest::cmp   compare;
-            typedef HashMapHdrTest::less  less;
-        };
-    }
-#endif
-
-    void HashMapHdrTest::Michael_RCU_SHT_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_SHT_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu_michael_list< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu_michael_list< opt_map >();
-#endif
-    }
-
-    void HashMapHdrTest::Michael_RCU_SHT_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_SHT_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu_michael_list< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu_michael_list< opt_map >();
-#endif
-    }
-
-    void HashMapHdrTest::Michael_RCU_SHT_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelKVList< rcu_type, int, HashMapHdrTest::value_type, RCU_SHT_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashMap< rcu_type, list, map_traits > map;
-        test_rcu_michael_list< map >();
-
-        // option-based version
-        typedef cc::MichaelHashMap< rcu_type, list,
-            cc::michael_map::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_map;
-        test_rcu_michael_list< opt_map >();
-#endif
-    }
-
-} // namespace map
diff --git a/tests/test-hdr/map/hdr_refinable_hashmap_boost_flat_map.cpp b/tests/test-hdr/map/hdr_refinable_hashmap_boost_flat_map.cpp
deleted file mode 100644 (file)
index b696697..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_striped_map.h"
-
-#include <boost/version.hpp>
-#include <cds/details/defs.h>
-#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION <= 105500
-namespace map {
-    void StripedMapHdrTest::Refinable_boost_flat_map()
-    {
-        CPPUNIT_MESSAGE("Skipped; for Microsoft Visual C++ 2013 and boost::container::flat_map you should use boost version 1.56 or above");
-    }
-}
-
-#elif BOOST_VERSION >= 104800
-
-#include <cds/container/striped_map/boost_flat_map.h>
-#include <cds/container/striped_map.h>
-#include <cds/sync/spinlock.h>
-
-namespace map {
-
-    namespace {
-        typedef boost::container::flat_map<StripedMapHdrTest::key_type, StripedMapHdrTest::value_type, StripedMapHdrTest::less > map_t;
-
-        struct my_copy_policy {
-            typedef map_t::iterator iterator;
-
-            void operator()( map_t& m, iterator /*itInsert*/, iterator itWhat )
-            {
-                m.insert( *itWhat );
-            }
-        };
-    }
-
-    void StripedMapHdrTest::Refinable_boost_flat_map()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp >
-        >   map_cmp;
-        test_striped< map_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_less;
-        test_striped< map_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            , co::less< less >
-        >   map_cmpmix;
-        test_striped< map_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<cds::sync::spin> >
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_spin;
-        test_striped< map_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(1024)");
-        {
-            typedef cc::StripedMap< map_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   map_less_resizing_lf;
-            map_less_resizing_lf m(30, cc::striped_set::load_factor_resizing<0>(1024));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-        >   map_less_resizing_lf16;
-        test_striped< map_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(1024)");
-        {
-            typedef cc::StripedMap< map_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::compare< cmp >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   map_less_resizing_sbt;
-            map_less_resizing_sbt m(30, cc::striped_set::single_bucket_size_threshold<0>(1024));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<256>");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<256> >
-        >   map_less_resizing_sbt16;
-        test_striped< map_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, copy_item");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, swap_item");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, move_item");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped< set_move_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, special copy_policy");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped< set_special_copy_item >();
-
-    }
-}   // namespace map
-
-/*
-#else
-    namespace map {
-        void StripedMapHdrTest::Refinable_boost_flat_map()
-        {
-            CPPUNIT_MESSAGE( "Skipped; for boost::container::flat_map is not compatible with MS VC++ 11" );
-        }
-    }
-#endif
-*/
-
-#else // BOOST_VERSION < 104800
-
-namespace map {
-    void StripedMapHdrTest::Refinable_boost_flat_map()
-    {
-        CPPUNIT_MESSAGE( "Skipped; for boost::container::flat_map you should use boost version 1.48 or above" );
-    }
-}
-#endif  // BOOST_VERSION
diff --git a/tests/test-hdr/map/hdr_refinable_hashmap_boost_list.cpp b/tests/test-hdr/map/hdr_refinable_hashmap_boost_list.cpp
deleted file mode 100644 (file)
index 2a111fe..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_striped_map.h"
-
-#include <boost/version.hpp>
-#include <cds/details/defs.h>
-#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION <= 105500
-namespace map {
-    void StripedMapHdrTest::Refinable_boost_list()
-    {
-        CPPUNIT_MESSAGE("Skipped; for Microsoft Visual C++ 2013 and boost::container::list you should use boost version 1.56 or above");
-    }
-}
-
-#elif BOOST_VERSION >= 104800
-
-#include <cds/container/striped_map/boost_list.h>
-#include <cds/container/striped_map.h>
-#include <cds/sync/spinlock.h>
-
-namespace map {
-
-    namespace {
-        typedef boost::container::list< StripedMapHdrTest::pair_type > sequence_t;
-
-        struct my_copy_policy {
-            typedef sequence_t::iterator iterator;
-
-            void operator()( sequence_t& list, iterator itInsert, iterator itWhat )
-            {
-                list.insert( itInsert, std::make_pair(itWhat->first, itWhat->second ));
-            }
-        };
-    }
-
-    void StripedMapHdrTest::Refinable_boost_list()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedMap< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp >
-        >   map_cmp;
-        test_striped2< map_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedMap< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_less;
-        test_striped2< map_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedMap< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            , co::less< less >
-        >   map_cmpmix;
-        test_striped2< map_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedMap< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<cds::sync::spin> >
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_spin;
-        test_striped2< map_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(8)");
-        {
-            typedef cc::StripedMap< sequence_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   pair_type_less_resizing_lf;
-            pair_type_less_resizing_lf m(30, cc::striped_set::load_factor_resizing<0>(8) );
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<4>");
-        typedef cc::StripedMap< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<4> >
-        >   map_less_resizing_lf16;
-        test_striped2< map_less_resizing_lf16 >();
-
-        {
-            CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(8)");
-            typedef cc::StripedMap< sequence_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   map_less_resizing_sbt;
-            map_less_resizing_sbt m(30, cc::striped_set::single_bucket_size_threshold<0>(8));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<6>");
-        typedef cc::StripedMap< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<6> >
-        >   map_less_resizing_sbt16;
-        test_striped2< map_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "copy_item");
-        typedef cc::StripedMap< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped2< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "swap_item");
-        typedef cc::StripedMap< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped2< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "move_item");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::less< less >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped2< set_move_item >();
-
-        CPPUNIT_MESSAGE( "special copy_item");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped2< set_special_copy_item >();
-    }
-
-}   // namespace map
-
-#else // BOOST_VERSION < 104800
-
-namespace map {
-    void StripedMapHdrTest::Refinable_boost_list()
-    {
-        CPPUNIT_MESSAGE( "Skipped; for boost::container::list you should use boost version 1.48 or above" );
-    }
-}
-#endif  // BOOST_VERSION
diff --git a/tests/test-hdr/map/hdr_refinable_hashmap_boost_map.cpp b/tests/test-hdr/map/hdr_refinable_hashmap_boost_map.cpp
deleted file mode 100644 (file)
index 4346a9d..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_striped_map.h"
-
-#include <boost/version.hpp>
-#include <cds/details/defs.h>
-#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION <= 105500
-namespace map {
-    void StripedMapHdrTest::Refinable_boost_map()
-    {
-        CPPUNIT_MESSAGE("Skipped; for Microsoft Visual C++ 2013 and boost::container::map you should use boost version 1.56 or above");
-    }
-}
-
-#elif BOOST_VERSION >= 104800
-
-#include <cds/container/striped_map/boost_map.h>
-#include <cds/container/striped_map.h>
-#include <cds/sync/spinlock.h>
-
-namespace map {
-
-    namespace {
-        typedef boost::container::map<StripedMapHdrTest::key_type, StripedMapHdrTest::value_type, StripedMapHdrTest::less > map_t;
-
-        struct my_copy_policy {
-            typedef map_t::iterator iterator;
-
-            void operator()( map_t& m, iterator /*itInsert*/, iterator itWhat )
-            {
-                m.insert( *itWhat );
-            }
-        };
-    }
-
-    void StripedMapHdrTest::Refinable_boost_map()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp >
-        >   map_cmp;
-        test_striped< map_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_less;
-        test_striped< map_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            , co::less< less >
-        >   map_cmpmix;
-        test_striped< map_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<cds::sync::spin> >
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_spin;
-        test_striped< map_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(1024)");
-        {
-            typedef cc::StripedMap< map_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   map_less_resizing_lf;
-            map_less_resizing_lf m(30, cc::striped_set::load_factor_resizing<0>(1024));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-        >   map_less_resizing_lf16;
-        test_striped< map_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(1024)");
-        {
-            typedef cc::StripedMap< map_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::compare< cmp >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   map_less_resizing_sbt;
-            map_less_resizing_sbt m(30, cc::striped_set::single_bucket_size_threshold<0>(1024));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<256>");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<256> >
-        >   map_less_resizing_sbt16;
-        test_striped< map_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, copy_item");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, swap_item");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, move_item");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped< set_move_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, special copy_policy");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped< set_special_copy_item >();
-
-    }
-}   // namespace map
-
-#else // BOOST_VERSION < 104800
-
-namespace map {
-    void StripedMapHdrTest::Refinable_boost_map()
-    {
-        CPPUNIT_MESSAGE( "Skipped; for boost::container::map you should use boost version 1.48 or above" );
-    }
-}
-#endif  // BOOST_VERSION
diff --git a/tests/test-hdr/map/hdr_refinable_hashmap_boost_unordered_map.cpp b/tests/test-hdr/map/hdr_refinable_hashmap_boost_unordered_map.cpp
deleted file mode 100644 (file)
index aa0347f..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_striped_map.h"
-#include <cds/container/striped_map/boost_unordered_map.h>
-#include <cds/container/striped_map.h>
-#include <cds/sync/spinlock.h>
-
-namespace map {
-
-    namespace {
-        typedef boost::unordered_map< StripedMapHdrTest::key_type, StripedMapHdrTest::value_type > map_t;
-
-        struct my_copy_policy {
-            typedef map_t::iterator iterator;
-
-            void operator()( map_t& m, iterator /*itInsert*/, iterator itWhat )
-            {
-                m.insert( std::make_pair(itWhat->first, itWhat->second ) );
-            }
-        };
-    }
-
-    void StripedMapHdrTest::Refinable_boost_unordered_map()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp >
-        >   map_cmp;
-        test_striped< map_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_less;
-        test_striped< map_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            , co::less< less >
-        >   map_cmpmix;
-        test_striped< map_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedMap< map_t
-            , co::mutex_policy< cc::striped_set::refinable<cds::sync::spin> >
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_spin;
-        test_striped< map_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(1024)");
-        {
-            typedef cc::StripedMap< map_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   map_less_resizing_lf;
-            map_less_resizing_lf m(30, cc::striped_set::load_factor_resizing<0>(1024));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-        >   map_less_resizing_lf16;
-        test_striped< map_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(1024)");
-        {
-            typedef cc::StripedMap< map_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::compare< cmp >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   map_less_resizing_sbt;
-            map_less_resizing_sbt m(30, cc::striped_set::single_bucket_size_threshold<0>(1024));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<256>");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<256> >
-        >   map_less_resizing_sbt16;
-        test_striped< map_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, copy_item");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, swap_item");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, move_item");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped< set_move_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, special copy_policy");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped< set_special_copy_item >();
-
-    }
-
-}   // namespace map
-
diff --git a/tests/test-hdr/map/hdr_refinable_hashmap_hashmap_std.cpp b/tests/test-hdr/map/hdr_refinable_hashmap_hashmap_std.cpp
deleted file mode 100644 (file)
index 7ff3793..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_striped_map.h"
-#include <cds/container/striped_map/std_hash_map.h>
-#include <cds/container/striped_map.h>
-#include <cds/sync/spinlock.h>
-
-namespace map {
-
-    namespace {
-        typedef std::unordered_map< StripedMapHdrTest::key_type, StripedMapHdrTest::value_type > map_t;
-
-        struct my_copy_policy {
-            typedef map_t::iterator iterator;
-
-            void operator()( map_t& m, iterator /*itInsert*/, iterator itWhat )
-            {
-                m.insert( std::make_pair(itWhat->first, itWhat->second ) );
-            }
-        };
-    }
-
-    void StripedMapHdrTest::Refinable_hashmap()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp >
-        >   map_cmp;
-        test_striped< map_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_less;
-        test_striped< map_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            , co::less< less >
-        >   map_cmpmix;
-        test_striped< map_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedMap< map_t
-            , co::mutex_policy< cc::striped_set::refinable<cds::sync::spin> >
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_spin;
-        test_striped< map_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(1024)");
-        {
-            typedef cc::StripedMap< map_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   map_less_resizing_lf;
-            map_less_resizing_lf m(30, cc::striped_set::load_factor_resizing<0>(1024));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-        >   map_less_resizing_lf16;
-        test_striped< map_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(1024)");
-        {
-            typedef cc::StripedMap< map_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::compare< cmp >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   map_less_resizing_sbt;
-            map_less_resizing_sbt m(30, cc::striped_set::single_bucket_size_threshold<0>(1024));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<256>");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<256> >
-        >   map_less_resizing_sbt16;
-        test_striped< map_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, copy_item");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, swap_item");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, move_item");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped< set_move_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, special copy_policy");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped< set_special_copy_item >();
-    }
-
-}   // namespace map
diff --git a/tests/test-hdr/map/hdr_refinable_hashmap_list.cpp b/tests/test-hdr/map/hdr_refinable_hashmap_list.cpp
deleted file mode 100644 (file)
index 5dbfc4b..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_striped_map.h"
-#include <cds/container/striped_map/std_list.h>
-#include <cds/container/striped_map.h>
-#include <cds/sync/spinlock.h>
-
-namespace map {
-
-    namespace {
-        typedef std::list<StripedMapHdrTest::pair_type> sequence_t;
-
-        struct my_copy_policy {
-            typedef sequence_t::iterator iterator;
-
-            void operator()( sequence_t& list, iterator itInsert, iterator itWhat )
-            {
-                list.insert( itInsert, std::make_pair(itWhat->first, itWhat->second ));
-            }
-        };
-    }
-
-    void StripedMapHdrTest::Refinable_list()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedMap< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp >
-        >   map_cmp;
-        test_striped2< map_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedMap< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_less;
-        test_striped2< map_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedMap< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            , co::less< less >
-        >   map_cmpmix;
-        test_striped2< map_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedMap< sequence_t
-            , co::mutex_policy< cc::striped_set::refinable<cds::sync::spin> >
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_spin;
-        test_striped2< map_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(8)");
-        {
-            typedef cc::StripedMap< sequence_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   pair_type_less_resizing_lf;
-            pair_type_less_resizing_lf m(30, cc::striped_set::load_factor_resizing<0>(8) );
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<4>");
-        typedef cc::StripedMap< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<4> >
-        >   map_less_resizing_lf16;
-        test_striped2< map_less_resizing_lf16 >();
-
-        {
-            CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(8)");
-            typedef cc::StripedMap< sequence_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   map_less_resizing_sbt;
-            map_less_resizing_sbt m(30, cc::striped_set::single_bucket_size_threshold<0>(8));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<6>");
-        typedef cc::StripedMap< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<6> >
-        >   map_less_resizing_sbt16;
-        test_striped2< map_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "copy_item");
-        typedef cc::StripedMap< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped2< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "swap_item");
-        typedef cc::StripedMap< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped2< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "move_item");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::less< less >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped2< set_move_item >();
-
-        CPPUNIT_MESSAGE( "special copy_item");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped2< set_special_copy_item >();
-    }
-}   // namespace map
diff --git a/tests/test-hdr/map/hdr_refinable_hashmap_map.cpp b/tests/test-hdr/map/hdr_refinable_hashmap_map.cpp
deleted file mode 100644 (file)
index 273452d..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_striped_map.h"
-#include <cds/container/striped_map/std_map.h>
-#include <cds/container/striped_map.h>
-#include <cds/sync/spinlock.h>
-
-namespace map {
-
-    namespace {
-        typedef std::map<StripedMapHdrTest::key_type, StripedMapHdrTest::value_type, StripedMapHdrTest::less > map_t;
-
-        struct my_copy_policy {
-            typedef map_t::iterator iterator;
-
-            void operator()( map_t& m, iterator /*itInsert*/, iterator itWhat )
-            {
-                m.insert( *itWhat );
-            }
-        };
-    }
-
-    void StripedMapHdrTest::Refinable_map()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp >
-        >   map_cmp;
-        test_striped< map_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_less;
-        test_striped< map_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            , co::less< less >
-        >   map_cmpmix;
-        test_striped< map_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedMap< map_t
-            , co::mutex_policy< cc::striped_set::refinable<cds::sync::spin> >
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_spin;
-        test_striped< map_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(1024)");
-        {
-            typedef cc::StripedMap< map_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   map_less_resizing_lf;
-            map_less_resizing_lf m(30, cc::striped_set::load_factor_resizing<0>(1024));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-        >   map_less_resizing_lf16;
-        test_striped< map_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(1024)");
-        {
-            typedef cc::StripedMap< map_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::compare< cmp >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   map_less_resizing_sbt;
-            map_less_resizing_sbt m(30, cc::striped_set::single_bucket_size_threshold<0>(1024));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<256>");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<256> >
-        >   map_less_resizing_sbt16;
-        test_striped< map_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, copy_item");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, swap_item");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, move_item");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped< set_move_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, special copy_policy");
-        typedef cc::StripedMap< map_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped< set_special_copy_item >();
-
-    }
-
-}   // namespace map
diff --git a/tests/test-hdr/map/hdr_refinable_hashmap_slist.cpp b/tests/test-hdr/map/hdr_refinable_hashmap_slist.cpp
deleted file mode 100644 (file)
index 93026aa..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_striped_map.h"
-
-#include <boost/version.hpp>
-#include <cds/details/defs.h>
-#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION <= 105500
-namespace map {
-    void StripedMapHdrTest::Refinable_slist()
-    {
-        CPPUNIT_MESSAGE("Skipped; for Microsoft Visual C++ 2013 and boost::container::slist you should use boost version 1.56 or above");
-    }
-}
-
-#elif BOOST_VERSION >= 104800
-
-#include <cds/container/striped_map/boost_slist.h>
-#include <cds/container/striped_map.h>
-#include <cds/sync/spinlock.h>
-
-
-namespace map {
-
-    namespace {
-        typedef boost::container::slist<StripedMapHdrTest::pair_type> sequence_t;
-
-        struct my_copy_policy {
-            typedef sequence_t::iterator iterator;
-
-            void operator()( sequence_t& list, iterator itInsert, iterator itWhat )
-            {
-                list.insert_after( itInsert, StripedMapHdrTest::pair_type( std::make_pair(itWhat->first, itWhat->second )));
-            }
-        };
-    }
-
-    void StripedMapHdrTest::Refinable_slist()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedMap< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp >
-        >   map_cmp;
-        test_striped2< map_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedMap< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_less;
-        test_striped2< map_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedMap< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            , co::less< less >
-        >   map_cmpmix;
-        test_striped2< map_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedMap< sequence_t
-            , co::mutex_policy< cc::striped_set::refinable<cds::sync::spin> >
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_spin;
-        test_striped2< map_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(8)");
-        {
-            typedef cc::StripedMap< sequence_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   pair_type_less_resizing_lf;
-            pair_type_less_resizing_lf m(30, cc::striped_set::load_factor_resizing<0>(8) );
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<4>");
-        typedef cc::StripedMap< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<4> >
-        >   map_less_resizing_lf16;
-        test_striped2< map_less_resizing_lf16 >();
-
-        {
-            CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(8)");
-            typedef cc::StripedMap< sequence_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   map_less_resizing_sbt;
-            map_less_resizing_sbt m(30, cc::striped_set::single_bucket_size_threshold<0>(8));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<6>");
-        typedef cc::StripedMap< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<6> >
-        >   map_less_resizing_sbt16;
-        test_striped2< map_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "copy_item");
-        typedef cc::StripedMap< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped2< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "swap_item");
-        typedef cc::StripedMap< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped2< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "move_item");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::less< less >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped2< set_move_item >();
-
-        CPPUNIT_MESSAGE( "special copy_item");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped2< set_special_copy_item >();
-    }
-}   // namespace map
-#else
-
-namespace map {
-    void StripedMapHdrTest::Refinable_slist()
-    {
-        CPPUNIT_MESSAGE("Skipped; for boost::container::slist you should use boost version 1.48 or above");
-    }
-} // namespace map
-
-#endif  // BOOST_VERSION
diff --git a/tests/test-hdr/map/hdr_skiplist_map.h b/tests/test-hdr/map/hdr_skiplist_map.h
deleted file mode 100644 (file)
index 147f699..0000000
+++ /dev/null
@@ -1,570 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_SKIPLIST_MAP_H
-#define CDSTEST_HDR_SKIPLIST_MAP_H
-
-#include "map/hdr_map.h"
-
-namespace map {
-
-    class SkipListMapHdrTest: public HashMapHdrTest
-    {
-        typedef HashMapHdrTest base_class;
-        typedef base_class::other_item  wrapped_item;
-        typedef base_class::other_less  wrapped_less;
-
-        template <class Map, typename PrintStat >
-        void test()
-        {
-            Map m;
-            test_int_with( m );
-
-            static int const nLimit = 10000;
-            typedef typename Map::iterator          set_iterator;
-            typedef typename Map::const_iterator    const_set_iterator;
-
-            int nCount = 0;
-            int nPrevKey = 0;
-
-            // Test iterator - ascending order
-            m.clear();
-            CPPUNIT_ASSERT( m.empty() );
-
-            for ( int i = 0; i < nLimit; ++i ) {
-                CPPUNIT_ASSERT( m.insert(i, i) );
-            }
-            CPPUNIT_MSG( PrintStat()(m, "Iterator test, ascending insert order") );
-
-            nCount = 0;
-            nPrevKey = 0;
-            for ( set_iterator it = m.begin(), itEnd = m.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( (*it).first == it->second.m_val );
-                CPPUNIT_ASSERT( m.contains( it->first ));
-                it->second.m_val = (*it).first * 2;
-                ++nCount;
-                if ( it != m.begin() ) {
-                    CPPUNIT_ASSERT( nPrevKey + 1 == it->first );
-                }
-                nPrevKey = it->first;
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            nCount = 0;
-            for ( const_set_iterator it = m.cbegin(), itEnd = m.cend(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( (*it).first * 2 == it->second.m_val );
-                ++nCount;
-                if ( it != m.cbegin() ) {
-                    CPPUNIT_ASSERT( nPrevKey + 1 == it->first );
-                }
-                nPrevKey = it->first;
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            // Test iterator - descending order
-            m.clear();
-            CPPUNIT_ASSERT( m.empty() );
-
-            for ( int i = nLimit; i > 0; --i ) {
-                CPPUNIT_ASSERT( m.insert( i - 1, (i-1) * 2) );
-            }
-            CPPUNIT_MSG( PrintStat()(m, "Iterator test, descending insert order") );
-
-            nCount = 0;
-            nPrevKey = 0;
-            for ( set_iterator it = m.begin(), itEnd = m.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( (*it).first * 2 == it->second.m_val );
-                CPPUNIT_ASSERT( m.contains( it->first ));
-                it->second.m_val = (*it).first;
-                ++nCount;
-                if ( it != m.begin() ) {
-                    CPPUNIT_ASSERT( nPrevKey + 1 == it->first );
-                }
-                nPrevKey = it->first;
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            nCount = 0;
-            for ( const_set_iterator it = m.cbegin(), itEnd = m.cend(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( (*it).first == it->second.m_val );
-                ++nCount;
-                if ( it != m.cbegin() ) {
-                    CPPUNIT_ASSERT( nPrevKey + 1 == it->first );
-                }
-                nPrevKey = it->first;
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            // Test iterator - random order
-            m.clear();
-            CPPUNIT_ASSERT( m.empty() );
-            {
-                int nRand[nLimit];
-                for ( int i = 0; i < nLimit; ++i ) {
-                    nRand[i] = i;
-                }
-                shuffle( nRand, nRand + nLimit );
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    CPPUNIT_ASSERT( m.insert( nRand[i], nRand[i]) );
-                }
-                CPPUNIT_MSG( PrintStat()(m, "Iterator test, random insert order") );
-            }
-
-            nCount = 0;
-            nPrevKey = 0;
-            for ( set_iterator it = m.begin(), itEnd = m.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( (*it).first == it->second.m_val );
-                CPPUNIT_ASSERT( m.contains( it->first ));
-                it->second.m_val = (*it).first * 2;
-                ++nCount;
-                if ( it != m.begin() ) {
-                    CPPUNIT_ASSERT( nPrevKey + 1 == it->first );
-                }
-                nPrevKey = it->first;
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            nCount = 0;
-            for ( const_set_iterator it = m.cbegin(), itEnd = m.cend(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( (*it).first * 2 == it->second.m_val );
-                ++nCount;
-                if ( it != m.cbegin() ) {
-                    CPPUNIT_ASSERT( nPrevKey + 1 == it->first );
-                }
-                nPrevKey = it->first;
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            {
-                typename Map::guarded_ptr gp;
-                int arrItem[nLimit];
-                for ( int i = 0; i < nLimit; ++i )
-                    arrItem[i] = i;
-                shuffle( arrItem, arrItem + nLimit );
-
-                typedef base_class::less less;
-
-                // extract/get
-                for ( int i = 0; i < nLimit; ++i ) {
-                    int nKey = arrItem[i];
-                    gp = m.get( nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->first == nKey );
-                    CPPUNIT_CHECK( gp->second.m_val == nKey * 2 );
-                    gp.release();
-
-                    gp = m.extract( nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->first == nKey );
-                    CPPUNIT_CHECK( gp->second.m_val == nKey * 2 );
-                    gp.release();
-
-                    gp = m.get( nKey );
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_CHECK( !m.extract(nKey));
-                    CPPUNIT_CHECK( gp.empty());
-                }
-                CPPUNIT_ASSERT( m.empty());
-
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( m.insert(arrItem[i], arrItem[i]*2) );
-
-                // extract_with/get_with
-                for ( int i = 0; i < nLimit; ++i ) {
-                    int nKey = arrItem[i];
-                    gp = m.get_with( wrapped_item( nKey ), wrapped_less());
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->first == nKey );
-                    CPPUNIT_CHECK( gp->second.m_val == nKey * 2 );
-                    gp.release();
-
-                    gp = m.extract_with( wrapped_item( nKey ), wrapped_less());
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->first == nKey );
-                    CPPUNIT_CHECK( gp->second.m_val == nKey * 2 );
-                    gp.release();
-
-                    gp = m.get_with( wrapped_item( nKey ), wrapped_less() );
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_CHECK( !m.extract_with( wrapped_item(nKey), wrapped_less()));
-                    CPPUNIT_CHECK( gp.empty());
-                }
-                CPPUNIT_ASSERT( m.empty());
-
-                //extract_min
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( m.insert(arrItem[i], arrItem[i]*2) );
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    gp = m.extract_min();
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->first == i );
-                    CPPUNIT_CHECK( gp->second.m_val == i * 2 );
-                    gp.release();
-                    CPPUNIT_CHECK( gp.empty());
-                }
-                CPPUNIT_CHECK( !m.extract_min());
-
-                // extract_max
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( m.insert(arrItem[i], arrItem[i]*2) );
-
-                for ( int i = nLimit - 1; i >= 0; --i ) {
-                    gp = m.extract_max();
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->first == i );
-                    CPPUNIT_CHECK( gp->second.m_val == i * 2 );
-                    gp.release();
-                    CPPUNIT_CHECK( gp.empty());
-                }
-                CPPUNIT_CHECK( !m.extract_max());
-                CPPUNIT_CHECK( gp.empty());
-                CPPUNIT_ASSERT( m.empty());
-            }
-
-            CPPUNIT_MSG( PrintStat()(m, nullptr) );
-        }
-
-        template <class Map, typename PrintStat >
-        void test_nogc()
-        {
-            typedef typename Map::iterator          iterator;
-            typedef typename Map::const_iterator    const_iterator;
-
-            Map m;
-
-            CPPUNIT_ASSERT( m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 0 ));
-
-            CPPUNIT_ASSERT( m.contains(10) == m.end() );
-            iterator it = m.insert( 10 );
-            CPPUNIT_ASSERT( it != m.end() );
-            CPPUNIT_ASSERT( it->first == 10 );
-            CPPUNIT_ASSERT( it->second.m_val == 0 );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 1 ));
-            CPPUNIT_ASSERT( m.contains(10) == it );
-            CPPUNIT_ASSERT( it->first == 10 );
-            CPPUNIT_ASSERT( it->second.m_val == 0 );
-
-            CPPUNIT_ASSERT( m.contains(100) == m.end() );
-            it = m.insert( 100, 200 );
-            CPPUNIT_ASSERT( it != m.end() );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 2 ));
-            CPPUNIT_ASSERT( m.contains(100) == it );
-            CPPUNIT_ASSERT( it->first == 100 );
-            CPPUNIT_ASSERT( it->second.m_val == 200 );
-
-            CPPUNIT_ASSERT( m.contains(55) == m.end() );
-            it = m.insert_with( 55, insert_functor<Map>() );
-            CPPUNIT_ASSERT( it != m.end() );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-            CPPUNIT_ASSERT( m.contains(55) == it );
-            CPPUNIT_ASSERT( it->first == 55 );
-            CPPUNIT_ASSERT( it->second.m_val == 55 * 3 );
-
-            CPPUNIT_ASSERT( m.insert( 55 ) == m.end() );
-            CPPUNIT_ASSERT( m.insert( 55, 10 ) == m.end() );
-            CPPUNIT_ASSERT( m.insert_with( 55, insert_functor<Map>()) == m.end() );
-
-            CPPUNIT_ASSERT( m.contains(10) != m.end() );
-            std::pair<iterator, bool> updateResult = m.update( 10, false );
-            CPPUNIT_ASSERT( updateResult.first != m.end() );
-            CPPUNIT_ASSERT( !updateResult.second  );
-            CPPUNIT_ASSERT( !m.empty() );
-            updateResult.first->second.m_val = updateResult.first->first * 5;
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-            CPPUNIT_ASSERT( m.contains(10) == updateResult.first );
-            it = m.contains( 10, typename base_class::less() );
-            CPPUNIT_ASSERT( it != m.end() );
-            CPPUNIT_ASSERT( it->second.m_val == 50 );
-
-            CPPUNIT_ASSERT( m.contains(120, base_class::less()) == m.end() );
-            updateResult = m.update(120, false);
-            CPPUNIT_ASSERT(updateResult.first == m.end());
-            CPPUNIT_ASSERT(!updateResult.second);
-            updateResult = m.update( 120 );
-            CPPUNIT_ASSERT( updateResult.first != m.end() );
-            CPPUNIT_ASSERT( updateResult.second  );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 4 ));
-            updateResult.first->second.m_val = updateResult.first->first * 5;
-            CPPUNIT_ASSERT( m.contains(120, base_class::less()) == updateResult.first );
-            it = m.contains(120, base_class::less());
-            CPPUNIT_ASSERT( it != m.end() );
-            CPPUNIT_ASSERT( it->second.m_val == 120 * 5 );
-
-            // emplace test
-            it = m.emplace( 151 ) ;  // key = 151,  val = 0
-            CPPUNIT_ASSERT( it != m.end() );
-            CPPUNIT_ASSERT( it->first == 151 );
-            CPPUNIT_ASSERT( it->second.m_val == 0 );
-
-            it = m.emplace( 174, 471 ) ; // key == 174, val = 471
-            CPPUNIT_ASSERT( it != m.end() );
-            CPPUNIT_ASSERT( it->first == 174 );
-            CPPUNIT_ASSERT( it->second.m_val == 471 );
-
-            it = m.emplace( 190, value_type(91)) ; // key == 190, val = 19
-            CPPUNIT_ASSERT( it != m.end() );
-            CPPUNIT_ASSERT( it->first == 190 );
-            CPPUNIT_ASSERT( it->second.m_val == 91 );
-
-            it = m.emplace( 151, 1051 );
-            CPPUNIT_ASSERT( it == m.end());
-
-            it = m.contains( 174 );
-            CPPUNIT_ASSERT( it != m.end() );
-            CPPUNIT_ASSERT( it->first == 174 );
-            CPPUNIT_ASSERT( it->second.m_val == 471 );
-
-            it = m.contains( 190 );
-            CPPUNIT_ASSERT( it != m.end() );
-            CPPUNIT_ASSERT( it->first == 190 );
-            CPPUNIT_ASSERT( it->second.m_val == 91 );
-
-            it = m.contains( 151 );
-            CPPUNIT_ASSERT( it != m.end() );
-            CPPUNIT_ASSERT( it->first == 151 );
-            CPPUNIT_ASSERT( it->second.m_val == 0 );
-
-            m.clear();
-            CPPUNIT_ASSERT( m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 0 ));
-
-            // get_min test
-            for ( int i = 500; i > 0; --i ) {
-                CPPUNIT_ASSERT( m.insert( i, i * 2 ) != m.end() );
-
-                typename Map::value_type * pVal = m.get_min();
-                CPPUNIT_ASSERT( pVal != nullptr );
-                CPPUNIT_CHECK( pVal->first == i );
-                CPPUNIT_CHECK( pVal->second.m_val == i * 2 );
-            }
-            m.clear();
-            CPPUNIT_ASSERT( m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 0 ));
-            CPPUNIT_CHECK( m.get_min() == nullptr );
-            CPPUNIT_CHECK( m.get_max() == nullptr );
-
-            // iterator test
-
-            for ( int i = 0; i < 500; ++i ) {
-                CPPUNIT_ASSERT( m.insert( i, i * 2 ) != m.end() );
-
-                typename Map::value_type * pVal = m.get_max();
-                CPPUNIT_ASSERT( pVal != nullptr );
-                CPPUNIT_CHECK( pVal->first == i );
-                CPPUNIT_CHECK( pVal->second.m_val == i * 2 );
-            }
-            CPPUNIT_ASSERT( check_size( m, 500 ));
-
-            for ( iterator it = m.begin(), itEnd = m.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( it->first * 2 == (*it).second.m_val );
-                it->second = it->first;
-            }
-
-            Map const& refMap = m;
-            for ( const_iterator it = refMap.begin(), itEnd = refMap.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( it->first == it->second.m_val );
-                CPPUNIT_ASSERT( (*it).first == (*it).second.m_val );
-            }
-
-            CPPUNIT_MSG( PrintStat()(m, "SkipListMap statistics") );
-        }
-
-    public:
-        void SkipList_HP_less();
-        void SkipList_HP_cmp();
-        void SkipList_HP_cmpless();
-        void SkipList_HP_less_stat();
-        void SkipList_HP_cmp_stat();
-        void SkipList_HP_cmpless_stat();
-        void SkipList_HP_xorshift_less();
-        void SkipList_HP_xorshift_cmp();
-        void SkipList_HP_xorshift_cmpless();
-        void SkipList_HP_xorshift_less_stat();
-        void SkipList_HP_xorshift_cmp_stat();
-        void SkipList_HP_xorshift_cmpless_stat();
-        void SkipList_HP_turbopas_less();
-        void SkipList_HP_turbopas_cmp();
-        void SkipList_HP_turbopas_cmpless();
-        void SkipList_HP_turbopas_less_stat();
-        void SkipList_HP_turbopas_cmp_stat();
-        void SkipList_HP_turbopas_cmpless_stat();
-        void SkipList_HP_michaelalloc_less();
-        void SkipList_HP_michaelalloc_cmp();
-        void SkipList_HP_michaelalloc_cmpless();
-        void SkipList_HP_michaelalloc_less_stat();
-        void SkipList_HP_michaelalloc_cmp_stat();
-        void SkipList_HP_michaelalloc_cmpless_stat();
-
-        void SkipList_DHP_less();
-        void SkipList_DHP_cmp();
-        void SkipList_DHP_cmpless();
-        void SkipList_DHP_less_stat();
-        void SkipList_DHP_cmp_stat();
-        void SkipList_DHP_cmpless_stat();
-        void SkipList_DHP_xorshift_less();
-        void SkipList_DHP_xorshift_cmp();
-        void SkipList_DHP_xorshift_cmpless();
-        void SkipList_DHP_xorshift_less_stat();
-        void SkipList_DHP_xorshift_cmp_stat();
-        void SkipList_DHP_xorshift_cmpless_stat();
-        void SkipList_DHP_turbopas_less();
-        void SkipList_DHP_turbopas_cmp();
-        void SkipList_DHP_turbopas_cmpless();
-        void SkipList_DHP_turbopas_less_stat();
-        void SkipList_DHP_turbopas_cmp_stat();
-        void SkipList_DHP_turbopas_cmpless_stat();
-        void SkipList_DHP_michaelalloc_less();
-        void SkipList_DHP_michaelalloc_cmp();
-        void SkipList_DHP_michaelalloc_cmpless();
-        void SkipList_DHP_michaelalloc_less_stat();
-        void SkipList_DHP_michaelalloc_cmp_stat();
-        void SkipList_DHP_michaelalloc_cmpless_stat();
-
-        void SkipList_NOGC_less();
-        void SkipList_NOGC_cmp();
-        void SkipList_NOGC_cmpless();
-        void SkipList_NOGC_less_stat();
-        void SkipList_NOGC_cmp_stat();
-        void SkipList_NOGC_cmpless_stat();
-        void SkipList_NOGC_xorshift_less();
-        void SkipList_NOGC_xorshift_cmp();
-        void SkipList_NOGC_xorshift_cmpless();
-        void SkipList_NOGC_xorshift_less_stat();
-        void SkipList_NOGC_xorshift_cmp_stat();
-        void SkipList_NOGC_xorshift_cmpless_stat();
-        void SkipList_NOGC_turbopas_less();
-        void SkipList_NOGC_turbopas_cmp();
-        void SkipList_NOGC_turbopas_cmpless();
-        void SkipList_NOGC_turbopas_less_stat();
-        void SkipList_NOGC_turbopas_cmp_stat();
-        void SkipList_NOGC_turbopas_cmpless_stat();
-        void SkipList_NOGC_michaelalloc_less();
-        void SkipList_NOGC_michaelalloc_cmp();
-        void SkipList_NOGC_michaelalloc_cmpless();
-        void SkipList_NOGC_michaelalloc_less_stat();
-        void SkipList_NOGC_michaelalloc_cmp_stat();
-        void SkipList_NOGC_michaelalloc_cmpless_stat();
-
-        CPPUNIT_TEST_SUITE(SkipListMapHdrTest)
-            CPPUNIT_TEST(SkipList_HP_less)
-            CPPUNIT_TEST(SkipList_HP_cmp)
-            CPPUNIT_TEST(SkipList_HP_cmpless)
-            CPPUNIT_TEST(SkipList_HP_less_stat)
-            CPPUNIT_TEST(SkipList_HP_cmp_stat)
-            CPPUNIT_TEST(SkipList_HP_cmpless_stat)
-            CPPUNIT_TEST(SkipList_HP_xorshift_less)
-            CPPUNIT_TEST(SkipList_HP_xorshift_cmp)
-            CPPUNIT_TEST(SkipList_HP_xorshift_cmpless)
-            CPPUNIT_TEST(SkipList_HP_xorshift_less_stat)
-            CPPUNIT_TEST(SkipList_HP_xorshift_cmp_stat)
-            CPPUNIT_TEST(SkipList_HP_xorshift_cmpless_stat)
-            CPPUNIT_TEST(SkipList_HP_turbopas_less)
-            CPPUNIT_TEST(SkipList_HP_turbopas_cmp)
-            CPPUNIT_TEST(SkipList_HP_turbopas_cmpless)
-            CPPUNIT_TEST(SkipList_HP_turbopas_less_stat)
-            CPPUNIT_TEST(SkipList_HP_turbopas_cmp_stat)
-            CPPUNIT_TEST(SkipList_HP_turbopas_cmpless_stat)
-            CPPUNIT_TEST(SkipList_HP_michaelalloc_less)
-            CPPUNIT_TEST(SkipList_HP_michaelalloc_cmp)
-            CPPUNIT_TEST(SkipList_HP_michaelalloc_cmpless)
-            CPPUNIT_TEST(SkipList_HP_michaelalloc_less_stat)
-            CPPUNIT_TEST(SkipList_HP_michaelalloc_cmp_stat)
-            CPPUNIT_TEST(SkipList_HP_michaelalloc_cmpless_stat)
-
-            CPPUNIT_TEST(SkipList_DHP_less)
-            CPPUNIT_TEST(SkipList_DHP_cmp)
-            CPPUNIT_TEST(SkipList_DHP_cmpless)
-            CPPUNIT_TEST(SkipList_DHP_less_stat)
-            CPPUNIT_TEST(SkipList_DHP_cmp_stat)
-            CPPUNIT_TEST(SkipList_DHP_cmpless_stat)
-            CPPUNIT_TEST(SkipList_DHP_xorshift_less)
-            CPPUNIT_TEST(SkipList_DHP_xorshift_cmp)
-            CPPUNIT_TEST(SkipList_DHP_xorshift_cmpless)
-            CPPUNIT_TEST(SkipList_DHP_xorshift_less_stat)
-            CPPUNIT_TEST(SkipList_DHP_xorshift_cmp_stat)
-            CPPUNIT_TEST(SkipList_DHP_xorshift_cmpless_stat)
-            CPPUNIT_TEST(SkipList_DHP_turbopas_less)
-            CPPUNIT_TEST(SkipList_DHP_turbopas_cmp)
-            CPPUNIT_TEST(SkipList_DHP_turbopas_cmpless)
-            CPPUNIT_TEST(SkipList_DHP_turbopas_less_stat)
-            CPPUNIT_TEST(SkipList_DHP_turbopas_cmp_stat)
-            CPPUNIT_TEST(SkipList_DHP_turbopas_cmpless_stat)
-            CPPUNIT_TEST(SkipList_DHP_michaelalloc_less)
-            CPPUNIT_TEST(SkipList_DHP_michaelalloc_cmp)
-            CPPUNIT_TEST(SkipList_DHP_michaelalloc_cmpless)
-            CPPUNIT_TEST(SkipList_DHP_michaelalloc_less_stat)
-            CPPUNIT_TEST(SkipList_DHP_michaelalloc_cmp_stat)
-            CPPUNIT_TEST(SkipList_DHP_michaelalloc_cmpless_stat)
-
-            CPPUNIT_TEST(SkipList_NOGC_less)
-            CPPUNIT_TEST(SkipList_NOGC_cmp)
-            CPPUNIT_TEST(SkipList_NOGC_cmpless)
-            CPPUNIT_TEST(SkipList_NOGC_less_stat)
-            CPPUNIT_TEST(SkipList_NOGC_cmp_stat)
-            CPPUNIT_TEST(SkipList_NOGC_cmpless_stat)
-            CPPUNIT_TEST(SkipList_NOGC_xorshift_less)
-            CPPUNIT_TEST(SkipList_NOGC_xorshift_cmp)
-            CPPUNIT_TEST(SkipList_NOGC_xorshift_cmpless)
-            CPPUNIT_TEST(SkipList_NOGC_xorshift_less_stat)
-            CPPUNIT_TEST(SkipList_NOGC_xorshift_cmp_stat)
-            CPPUNIT_TEST(SkipList_NOGC_xorshift_cmpless_stat)
-            CPPUNIT_TEST(SkipList_NOGC_turbopas_less)
-            CPPUNIT_TEST(SkipList_NOGC_turbopas_cmp)
-            CPPUNIT_TEST(SkipList_NOGC_turbopas_cmpless)
-            CPPUNIT_TEST(SkipList_NOGC_turbopas_less_stat)
-            CPPUNIT_TEST(SkipList_NOGC_turbopas_cmp_stat)
-            CPPUNIT_TEST(SkipList_NOGC_turbopas_cmpless_stat)
-            CPPUNIT_TEST(SkipList_NOGC_michaelalloc_less)
-            CPPUNIT_TEST(SkipList_NOGC_michaelalloc_cmp)
-            CPPUNIT_TEST(SkipList_NOGC_michaelalloc_cmpless)
-            CPPUNIT_TEST(SkipList_NOGC_michaelalloc_less_stat)
-            CPPUNIT_TEST(SkipList_NOGC_michaelalloc_cmp_stat)
-            CPPUNIT_TEST(SkipList_NOGC_michaelalloc_cmpless_stat)
-
-        CPPUNIT_TEST_SUITE_END()
-
-    };
-
-} // namespace map
-
-#endif // #ifndef CDSTEST_HDR_SKIPLIST_MAP_H
diff --git a/tests/test-hdr/map/hdr_skiplist_map_dhp.cpp b/tests/test-hdr/map/hdr_skiplist_map_dhp.cpp
deleted file mode 100644 (file)
index 92b3a7f..0000000
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_skiplist_map.h"
-#include <cds/container/skip_list_map_dhp.h>
-#include "unit/michael_alloc.h"
-#include "map/print_skiplist_stat.h"
-
-namespace map {
-
-    void SkipListMapHdrTest::SkipList_DHP_less()
-    {
-        typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_DHP_cmp()
-    {
-        typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_DHP_cmpless()
-    {
-        typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_DHP_less_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_DHP_cmp_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_DHP_cmpless_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_DHP_xorshift_less()
-    {
-        typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_DHP_xorshift_cmp()
-    {
-        typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_DHP_xorshift_cmpless()
-    {
-        typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_DHP_xorshift_less_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_DHP_xorshift_cmp_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_DHP_xorshift_cmpless_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_DHP_turbopas_less()
-    {
-        typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_DHP_turbopas_cmp()
-    {
-        typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_DHP_turbopas_cmpless()
-    {
-        typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_DHP_turbopas_less_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_DHP_turbopas_cmp_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_DHP_turbopas_cmpless_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_DHP_michaelalloc_less()
-    {
-        typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_DHP_michaelalloc_cmp()
-    {
-            typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-                cc::skip_list::make_traits<
-                    co::compare< cmp >
-                    ,co::item_counter< simple_item_counter >
-                    ,co::allocator< memory::MichaelAllocator<int> >
-                >::type
-            > set;
-            test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_DHP_michaelalloc_cmpless()
-    {
-        typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_DHP_michaelalloc_less_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_DHP_michaelalloc_cmp_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_DHP_michaelalloc_cmpless_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::DHP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-} // namespace map
diff --git a/tests/test-hdr/map/hdr_skiplist_map_hp.cpp b/tests/test-hdr/map/hdr_skiplist_map_hp.cpp
deleted file mode 100644 (file)
index a7a5094..0000000
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_skiplist_map.h"
-#include <cds/container/skip_list_map_hp.h>
-#include "unit/michael_alloc.h"
-#include "map/print_skiplist_stat.h"
-
-namespace map {
-
-    void SkipListMapHdrTest::SkipList_HP_less()
-    {
-        struct map_traits : public cc::skip_list::traits
-        {
-            typedef SkipListMapHdrTest::less less;
-            typedef simple_item_counter item_counter;
-        };
-        typedef cc::SkipListMap< cds::gc::HP, key_type, value_type, map_traits > set;
-        test< set, misc::print_skiplist_stat<set::stat > >();
-    }
-
-    void SkipListMapHdrTest::SkipList_HP_cmp()
-    {
-        typedef cc::SkipListMap< cds::gc::HP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_HP_cmpless()
-    {
-        typedef cc::SkipListMap< cds::gc::HP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_HP_less_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::HP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_HP_cmp_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::HP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_HP_cmpless_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::HP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_HP_xorshift_less()
-    {
-        typedef cc::SkipListMap< cds::gc::HP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_HP_xorshift_cmp()
-    {
-        typedef cc::SkipListMap< cds::gc::HP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_HP_xorshift_cmpless()
-    {
-        typedef cc::SkipListMap< cds::gc::HP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_HP_xorshift_less_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::HP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_HP_xorshift_cmp_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::HP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_HP_xorshift_cmpless_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::HP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_HP_turbopas_less()
-    {
-        typedef cc::SkipListMap< cds::gc::HP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_HP_turbopas_cmp()
-    {
-        typedef cc::SkipListMap< cds::gc::HP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_HP_turbopas_cmpless()
-    {
-        typedef cc::SkipListMap< cds::gc::HP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_HP_turbopas_less_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::HP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_HP_turbopas_cmp_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::HP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_HP_turbopas_cmpless_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::HP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_HP_michaelalloc_less()
-    {
-        typedef cc::SkipListMap< cds::gc::HP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_HP_michaelalloc_cmp()
-    {
-            typedef cc::SkipListMap< cds::gc::HP, key_type, value_type,
-                cc::skip_list::make_traits<
-                    co::compare< cmp >
-                    ,co::item_counter< simple_item_counter >
-                    ,co::allocator< memory::MichaelAllocator<int> >
-                >::type
-            > set;
-            test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_HP_michaelalloc_cmpless()
-    {
-        typedef cc::SkipListMap< cds::gc::HP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_HP_michaelalloc_less_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::HP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_HP_michaelalloc_cmp_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::HP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_HP_michaelalloc_cmpless_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::HP, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-} // namespace map
-
-CPPUNIT_TEST_SUITE_REGISTRATION(map::SkipListMapHdrTest);
diff --git a/tests/test-hdr/map/hdr_skiplist_map_nogc.cpp b/tests/test-hdr/map/hdr_skiplist_map_nogc.cpp
deleted file mode 100644 (file)
index 2fff67e..0000000
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_skiplist_map.h"
-#include <cds/container/skip_list_map_nogc.h>
-#include "unit/michael_alloc.h"
-#include "map/print_skiplist_stat.h"
-
-namespace map {
-
-    void SkipListMapHdrTest::SkipList_NOGC_less()
-    {
-        struct map_traits : public cc::skip_list::traits
-        {
-            typedef SkipListMapHdrTest::less less;
-            typedef simple_item_counter item_counter;
-        };
-        typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type, map_traits > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_NOGC_cmp()
-    {
-        typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_NOGC_cmpless()
-    {
-        typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_NOGC_less_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_NOGC_cmp_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_NOGC_cmpless_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_NOGC_xorshift_less()
-    {
-        typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_NOGC_xorshift_cmp()
-    {
-        typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_NOGC_xorshift_cmpless()
-    {
-        typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_NOGC_xorshift_less_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_NOGC_xorshift_cmp_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_NOGC_xorshift_cmpless_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_NOGC_turbopas_less()
-    {
-        typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_NOGC_turbopas_cmp()
-    {
-        typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_NOGC_turbopas_cmpless()
-    {
-        typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_NOGC_turbopas_less_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_NOGC_turbopas_cmp_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_NOGC_turbopas_cmpless_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_NOGC_michaelalloc_less()
-    {
-        typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_NOGC_michaelalloc_cmp()
-    {
-            typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type,
-                cc::skip_list::make_traits<
-                    co::compare< cmp >
-                    ,co::item_counter< simple_item_counter >
-                    ,co::allocator< memory::MichaelAllocator<int> >
-                >::type
-            > set;
-            test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_NOGC_michaelalloc_cmpless()
-    {
-        typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_NOGC_michaelalloc_less_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_NOGC_michaelalloc_cmp_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapHdrTest::SkipList_NOGC_michaelalloc_cmpless_stat()
-    {
-        typedef cc::SkipListMap< cds::gc::nogc, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-} // namespace map
diff --git a/tests/test-hdr/map/hdr_skiplist_map_rcu.h b/tests/test-hdr/map/hdr_skiplist_map_rcu.h
deleted file mode 100644 (file)
index 6075655..0000000
+++ /dev/null
@@ -1,546 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_SKIPLIST_MAP_RCU_H
-#define CDSTEST_HDR_SKIPLIST_MAP_RCU_H
-
-#include "map/hdr_map.h"
-
-namespace map {
-
-    class SkipListMapRCUHdrTest: public HashMapHdrTest
-    {
-        typedef HashMapHdrTest base_class;
-        typedef base_class::other_item  wrapped_item;
-        typedef base_class::other_less  wrapped_less;
-
-        template <class Map, typename PrintStat >
-        void test()
-        {
-            Map m;
-            test_int_with( m );
-
-            static int const nLimit = 10000;
-            typedef typename Map::iterator          set_iterator;
-            typedef typename Map::const_iterator    const_set_iterator;
-            typedef typename Map::gc::scoped_lock   rcu_lock;
-
-            int nCount = 0;
-            int nPrevKey = 0;
-
-            // Test iterator - ascending order
-            m.clear();
-            CPPUNIT_ASSERT( m.empty() );
-
-            for ( int i = 0; i < nLimit; ++i ) {
-                CPPUNIT_ASSERT( m.insert(i, i) );
-            }
-            CPPUNIT_MSG( PrintStat()(m, "Iterator test, ascending insert order") );
-
-            nCount = 0;
-            nPrevKey = 0;
-            {
-                rcu_lock sl;
-                for ( set_iterator it = m.begin(), itEnd = m.end(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( (*it).first == it->second.m_val );
-                    CPPUNIT_ASSERT( m.contains( it->first ));
-                    it->second.m_val = (*it).first * 2;
-                    ++nCount;
-                    if ( it != m.begin() ) {
-                        CPPUNIT_ASSERT( nPrevKey + 1 == it->first );
-                    }
-                    nPrevKey = it->first;
-                }
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            nCount = 0;
-            {
-                rcu_lock sl;
-                for ( const_set_iterator it = m.cbegin(), itEnd = m.cend(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( (*it).first * 2 == it->second.m_val );
-                    ++nCount;
-                    if ( it != m.cbegin() ) {
-                        CPPUNIT_ASSERT( nPrevKey + 1 == it->first );
-                    }
-                    nPrevKey = it->first;
-                }
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            // Test iterator - descending order
-            m.clear();
-            CPPUNIT_ASSERT( m.empty() );
-
-            for ( int i = nLimit; i > 0; --i ) {
-                CPPUNIT_ASSERT( m.insert( i - 1, (i-1) * 2) );
-            }
-            CPPUNIT_MSG( PrintStat()(m, "Iterator test, descending insert order") );
-
-            nCount = 0;
-            nPrevKey = 0;
-            {
-                rcu_lock sl;
-                for ( set_iterator it = m.begin(), itEnd = m.end(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( (*it).first * 2 == it->second.m_val );
-                    CPPUNIT_ASSERT( m.contains( it->first ));
-                    it->second.m_val = (*it).first;
-                    ++nCount;
-                    if ( it != m.begin() ) {
-                        CPPUNIT_ASSERT( nPrevKey + 1 == it->first );
-                    }
-                    nPrevKey = it->first;
-                }
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            nCount = 0;
-            {
-                rcu_lock sl;
-                for ( const_set_iterator it = m.cbegin(), itEnd = m.cend(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( (*it).first == it->second.m_val );
-                    ++nCount;
-                    if ( it != m.cbegin() ) {
-                        CPPUNIT_ASSERT( nPrevKey + 1 == it->first );
-                    }
-                    nPrevKey = it->first;
-                }
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            // Test iterator - random order
-            m.clear();
-            CPPUNIT_ASSERT( m.empty() );
-            {
-                int nRand[nLimit];
-                for ( int i = 0; i < nLimit; ++i ) {
-                    nRand[i] = i;
-                }
-                shuffle( nRand, nRand + nLimit );
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    CPPUNIT_ASSERT( m.insert(i, i) );
-                }
-                CPPUNIT_MSG( PrintStat()(m, "Iterator test, random insert order") );
-            }
-
-            nCount = 0;
-            nPrevKey = 0;
-            {
-                rcu_lock sl;
-                for ( set_iterator it = m.begin(), itEnd = m.end(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( (*it).first == it->second.m_val );
-                    CPPUNIT_ASSERT( m.contains( it->first ));
-                    it->second.m_val = (*it).first * 2;
-                    ++nCount;
-                    if ( it != m.begin() ) {
-                        CPPUNIT_ASSERT( nPrevKey + 1 == it->first );
-                    }
-                    nPrevKey = it->first;
-                }
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            nCount = 0;
-            {
-                rcu_lock sl;
-                for ( const_set_iterator it = m.cbegin(), itEnd = m.cend(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( (*it).first * 2 == it->second.m_val );
-                    ++nCount;
-                    if ( it != m.cbegin() ) {
-                        CPPUNIT_ASSERT( nPrevKey + 1 == it->first );
-                    }
-                    nPrevKey = it->first;
-                }
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            {
-                int arrItem[nLimit];
-                for ( int i = 0; i < nLimit; ++i )
-                    arrItem[i] = i;
-                shuffle( arrItem, arrItem + nLimit );
-
-                typedef typename Map::value_type value_type;
-                typename Map::exempt_ptr ep;
-                typename Map::raw_ptr rp;
-
-                // extract/get
-                for ( int i = 0; i < nLimit; ++i ) {
-                    int nKey = arrItem[i];
-                    {
-                        rcu_lock l;
-                        rp = m.get( nKey );
-                        CPPUNIT_ASSERT( rp );
-                        CPPUNIT_CHECK( rp->first == nKey );
-                        CPPUNIT_CHECK( rp->second.m_val == nKey * 2 );
-                    }
-                    rp.release();
-
-                    ep = m.extract( nKey );
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty() );
-                    CPPUNIT_CHECK( ep->first == nKey );
-                    CPPUNIT_CHECK( ep->second.m_val == nKey * 2 );
-                    ep.release();
-
-                    {
-                        rcu_lock l;
-                        CPPUNIT_CHECK( !m.get( nKey ));
-                    }
-                    ep = m.extract( nKey );
-                    CPPUNIT_CHECK( !ep );
-                }
-                CPPUNIT_ASSERT( m.empty() );
-
-                // extract_with/get_with
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( m.insert(arrItem[i], arrItem[i]*2) );
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    int nKey = arrItem[i];
-                    {
-                        rcu_lock l;
-                        rp = m.get_with( wrapped_item(nKey), wrapped_less() );
-                        CPPUNIT_ASSERT( rp );
-                        CPPUNIT_CHECK( rp->first == nKey );
-                        CPPUNIT_CHECK( rp->second.m_val == nKey * 2 );
-                    }
-                    rp.release();
-
-                    ep = m.extract_with( wrapped_item( nKey ), wrapped_less() );
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty() );
-                    CPPUNIT_CHECK( ep->first == nKey );
-                    CPPUNIT_CHECK( ep->second.m_val == nKey * 2 );
-                    ep.release();
-
-                    {
-                        rcu_lock l;
-                        CPPUNIT_CHECK( !m.get_with( wrapped_item(nKey), wrapped_less() ));
-                    }
-                    ep = m.extract_with( wrapped_item( nKey ), wrapped_less() );
-                    CPPUNIT_CHECK( !ep );
-                }
-                CPPUNIT_ASSERT( m.empty() );
-
-                // extract_min
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( m.insert(arrItem[i], arrItem[i]*2) );
-                for ( int i = 0; i < nLimit; ++i ) {
-                    ep = m.extract_min();
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty() );
-                    CPPUNIT_CHECK( ep->first == i );
-                    CPPUNIT_CHECK( ep->second.m_val == i * 2 );
-                    ep.release();
-                }
-                CPPUNIT_ASSERT( m.empty() );
-                ep = m.extract_min();
-                CPPUNIT_CHECK( !ep );
-
-                // extract_max
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( m.insert(arrItem[i], arrItem[i]*2) );
-                for ( int i = nLimit-1; i >= 0; --i ) {
-                    ep = m.extract_max();
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty() );
-                    CPPUNIT_CHECK( ep->first == i );
-                    CPPUNIT_CHECK( ep->second.m_val == i * 2 );
-                    ep.release();
-                }
-                CPPUNIT_ASSERT( m.empty() );
-                ep = m.extract_max();
-                CPPUNIT_CHECK( !ep );
-            }
-
-            CPPUNIT_MSG( PrintStat()(m, nullptr) );
-        }
-
-    public:
-        void SkipList_RCU_GPI_less();
-        void SkipList_RCU_GPI_cmp();
-        void SkipList_RCU_GPI_cmpless();
-        void SkipList_RCU_GPI_less_stat();
-        void SkipList_RCU_GPI_cmp_stat();
-        void SkipList_RCU_GPI_cmpless_stat();
-        void SkipList_RCU_GPI_xorshift_less();
-        void SkipList_RCU_GPI_xorshift_cmp();
-        void SkipList_RCU_GPI_xorshift_cmpless();
-        void SkipList_RCU_GPI_xorshift_less_stat();
-        void SkipList_RCU_GPI_xorshift_cmp_stat();
-        void SkipList_RCU_GPI_xorshift_cmpless_stat();
-        void SkipList_RCU_GPI_turbopas_less();
-        void SkipList_RCU_GPI_turbopas_cmp();
-        void SkipList_RCU_GPI_turbopas_cmpless();
-        void SkipList_RCU_GPI_turbopas_less_stat();
-        void SkipList_RCU_GPI_turbopas_cmp_stat();
-        void SkipList_RCU_GPI_turbopas_cmpless_stat();
-        void SkipList_RCU_GPI_michaelalloc_less();
-        void SkipList_RCU_GPI_michaelalloc_cmp();
-        void SkipList_RCU_GPI_michaelalloc_cmpless();
-        void SkipList_RCU_GPI_michaelalloc_less_stat();
-        void SkipList_RCU_GPI_michaelalloc_cmp_stat();
-        void SkipList_RCU_GPI_michaelalloc_cmpless_stat();
-
-        void SkipList_RCU_GPB_less();
-        void SkipList_RCU_GPB_cmp();
-        void SkipList_RCU_GPB_cmpless();
-        void SkipList_RCU_GPB_less_stat();
-        void SkipList_RCU_GPB_cmp_stat();
-        void SkipList_RCU_GPB_cmpless_stat();
-        void SkipList_RCU_GPB_xorshift_less();
-        void SkipList_RCU_GPB_xorshift_cmp();
-        void SkipList_RCU_GPB_xorshift_cmpless();
-        void SkipList_RCU_GPB_xorshift_less_stat();
-        void SkipList_RCU_GPB_xorshift_cmp_stat();
-        void SkipList_RCU_GPB_xorshift_cmpless_stat();
-        void SkipList_RCU_GPB_turbopas_less();
-        void SkipList_RCU_GPB_turbopas_cmp();
-        void SkipList_RCU_GPB_turbopas_cmpless();
-        void SkipList_RCU_GPB_turbopas_less_stat();
-        void SkipList_RCU_GPB_turbopas_cmp_stat();
-        void SkipList_RCU_GPB_turbopas_cmpless_stat();
-        void SkipList_RCU_GPB_michaelalloc_less();
-        void SkipList_RCU_GPB_michaelalloc_cmp();
-        void SkipList_RCU_GPB_michaelalloc_cmpless();
-        void SkipList_RCU_GPB_michaelalloc_less_stat();
-        void SkipList_RCU_GPB_michaelalloc_cmp_stat();
-        void SkipList_RCU_GPB_michaelalloc_cmpless_stat();
-
-        void SkipList_RCU_GPT_less();
-        void SkipList_RCU_GPT_cmp();
-        void SkipList_RCU_GPT_cmpless();
-        void SkipList_RCU_GPT_less_stat();
-        void SkipList_RCU_GPT_cmp_stat();
-        void SkipList_RCU_GPT_cmpless_stat();
-        void SkipList_RCU_GPT_xorshift_less();
-        void SkipList_RCU_GPT_xorshift_cmp();
-        void SkipList_RCU_GPT_xorshift_cmpless();
-        void SkipList_RCU_GPT_xorshift_less_stat();
-        void SkipList_RCU_GPT_xorshift_cmp_stat();
-        void SkipList_RCU_GPT_xorshift_cmpless_stat();
-        void SkipList_RCU_GPT_turbopas_less();
-        void SkipList_RCU_GPT_turbopas_cmp();
-        void SkipList_RCU_GPT_turbopas_cmpless();
-        void SkipList_RCU_GPT_turbopas_less_stat();
-        void SkipList_RCU_GPT_turbopas_cmp_stat();
-        void SkipList_RCU_GPT_turbopas_cmpless_stat();
-        void SkipList_RCU_GPT_michaelalloc_less();
-        void SkipList_RCU_GPT_michaelalloc_cmp();
-        void SkipList_RCU_GPT_michaelalloc_cmpless();
-        void SkipList_RCU_GPT_michaelalloc_less_stat();
-        void SkipList_RCU_GPT_michaelalloc_cmp_stat();
-        void SkipList_RCU_GPT_michaelalloc_cmpless_stat();
-
-        void SkipList_RCU_SHB_less();
-        void SkipList_RCU_SHB_cmp();
-        void SkipList_RCU_SHB_cmpless();
-        void SkipList_RCU_SHB_less_stat();
-        void SkipList_RCU_SHB_cmp_stat();
-        void SkipList_RCU_SHB_cmpless_stat();
-        void SkipList_RCU_SHB_xorshift_less();
-        void SkipList_RCU_SHB_xorshift_cmp();
-        void SkipList_RCU_SHB_xorshift_cmpless();
-        void SkipList_RCU_SHB_xorshift_less_stat();
-        void SkipList_RCU_SHB_xorshift_cmp_stat();
-        void SkipList_RCU_SHB_xorshift_cmpless_stat();
-        void SkipList_RCU_SHB_turbopas_less();
-        void SkipList_RCU_SHB_turbopas_cmp();
-        void SkipList_RCU_SHB_turbopas_cmpless();
-        void SkipList_RCU_SHB_turbopas_less_stat();
-        void SkipList_RCU_SHB_turbopas_cmp_stat();
-        void SkipList_RCU_SHB_turbopas_cmpless_stat();
-        void SkipList_RCU_SHB_michaelalloc_less();
-        void SkipList_RCU_SHB_michaelalloc_cmp();
-        void SkipList_RCU_SHB_michaelalloc_cmpless();
-        void SkipList_RCU_SHB_michaelalloc_less_stat();
-        void SkipList_RCU_SHB_michaelalloc_cmp_stat();
-        void SkipList_RCU_SHB_michaelalloc_cmpless_stat();
-
-        void SkipList_RCU_SHT_less();
-        void SkipList_RCU_SHT_cmp();
-        void SkipList_RCU_SHT_cmpless();
-        void SkipList_RCU_SHT_less_stat();
-        void SkipList_RCU_SHT_cmp_stat();
-        void SkipList_RCU_SHT_cmpless_stat();
-        void SkipList_RCU_SHT_xorshift_less();
-        void SkipList_RCU_SHT_xorshift_cmp();
-        void SkipList_RCU_SHT_xorshift_cmpless();
-        void SkipList_RCU_SHT_xorshift_less_stat();
-        void SkipList_RCU_SHT_xorshift_cmp_stat();
-        void SkipList_RCU_SHT_xorshift_cmpless_stat();
-        void SkipList_RCU_SHT_turbopas_less();
-        void SkipList_RCU_SHT_turbopas_cmp();
-        void SkipList_RCU_SHT_turbopas_cmpless();
-        void SkipList_RCU_SHT_turbopas_less_stat();
-        void SkipList_RCU_SHT_turbopas_cmp_stat();
-        void SkipList_RCU_SHT_turbopas_cmpless_stat();
-        void SkipList_RCU_SHT_michaelalloc_less();
-        void SkipList_RCU_SHT_michaelalloc_cmp();
-        void SkipList_RCU_SHT_michaelalloc_cmpless();
-        void SkipList_RCU_SHT_michaelalloc_less_stat();
-        void SkipList_RCU_SHT_michaelalloc_cmp_stat();
-        void SkipList_RCU_SHT_michaelalloc_cmpless_stat();
-
-        CPPUNIT_TEST_SUITE(SkipListMapRCUHdrTest)
-            CPPUNIT_TEST(SkipList_RCU_GPI_less)
-            CPPUNIT_TEST(SkipList_RCU_GPI_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPI_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPI_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPI_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPI_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_less)
-            CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_less)
-            CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_less)
-            CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_cmpless_stat)
-
-            CPPUNIT_TEST(SkipList_RCU_GPB_less)
-            CPPUNIT_TEST(SkipList_RCU_GPB_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPB_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPB_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPB_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPB_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_less)
-            CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_less)
-            CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_less)
-            CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_cmpless_stat)
-
-            CPPUNIT_TEST(SkipList_RCU_GPT_less)
-            CPPUNIT_TEST(SkipList_RCU_GPT_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPT_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPT_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPT_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPT_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_less)
-            CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_less)
-            CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_less)
-            CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_cmpless_stat)
-
-            CPPUNIT_TEST(SkipList_RCU_SHB_less)
-            CPPUNIT_TEST(SkipList_RCU_SHB_cmp)
-            CPPUNIT_TEST(SkipList_RCU_SHB_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_SHB_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHB_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHB_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_less)
-            CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_cmp)
-            CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_less)
-            CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_cmp)
-            CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_less)
-            CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_cmp)
-            CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_cmpless_stat)
-
-            CPPUNIT_TEST(SkipList_RCU_SHT_less)
-            CPPUNIT_TEST(SkipList_RCU_SHT_cmp)
-            CPPUNIT_TEST(SkipList_RCU_SHT_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_SHT_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHT_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHT_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_less)
-            CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_cmp)
-            CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_less)
-            CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_cmp)
-            CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_less)
-            CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_cmp)
-            CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_cmpless_stat)
-
-        CPPUNIT_TEST_SUITE_END()
-
-    };
-
-} // namespace map
-
-#endif // #ifndef CDSTEST_HDR_SKIPLIST_MAP_RCU_H
diff --git a/tests/test-hdr/map/hdr_skiplist_map_rcu_gpb.cpp b/tests/test-hdr/map/hdr_skiplist_map_rcu_gpb.cpp
deleted file mode 100644 (file)
index 7b5436a..0000000
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_skiplist_map_rcu.h"
-
-#include <cds/urcu/general_buffered.h>
-#include <cds/container/skip_list_map_rcu.h>
-
-#include "unit/michael_alloc.h"
-#include "map/print_skiplist_stat.h"
-
-namespace map {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_type;
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_less()
-    {
-        struct map_traits : public cc::skip_list::traits
-        {
-            typedef SkipListMapRCUHdrTest::less less;
-            typedef simple_item_counter item_counter;
-        };
-        typedef cc::SkipListMap< rcu_type, key_type, value_type, map_traits > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_cmp()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_cmpless()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_less_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_cmp_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_cmpless_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_xorshift_less()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_xorshift_cmp()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_xorshift_cmpless()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_xorshift_less_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_xorshift_cmp_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_xorshift_cmpless_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_turbopas_less()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_turbopas_cmp()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_turbopas_cmpless()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_turbopas_less_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_turbopas_cmp_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_turbopas_cmpless_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_michaelalloc_less()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_michaelalloc_cmp()
-    {
-            typedef cc::SkipListMap< rcu_type, key_type, value_type,
-                cc::skip_list::make_traits<
-                    co::compare< cmp >
-                    ,co::item_counter< simple_item_counter >
-                    ,co::allocator< memory::MichaelAllocator<int> >
-                >::type
-            > set;
-            test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_michaelalloc_cmpless()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_michaelalloc_less_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_michaelalloc_cmp_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPB_michaelalloc_cmpless_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-} // namespace map
diff --git a/tests/test-hdr/map/hdr_skiplist_map_rcu_gpi.cpp b/tests/test-hdr/map/hdr_skiplist_map_rcu_gpi.cpp
deleted file mode 100644 (file)
index da2ff6d..0000000
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_skiplist_map_rcu.h"
-
-#include <cds/urcu/general_instant.h>
-#include <cds/container/skip_list_map_rcu.h>
-
-#include "unit/michael_alloc.h"
-#include "map/print_skiplist_stat.h"
-
-namespace map {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_less()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_cmp()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_cmpless()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_less_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_cmp_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_cmpless_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_xorshift_less()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_xorshift_cmp()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_xorshift_cmpless()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_xorshift_less_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_xorshift_cmp_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_xorshift_cmpless_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_turbopas_less()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_turbopas_cmp()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_turbopas_cmpless()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_turbopas_less_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_turbopas_cmp_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_turbopas_cmpless_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_michaelalloc_less()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_michaelalloc_cmp()
-    {
-            typedef cc::SkipListMap< rcu_type, key_type, value_type,
-                cc::skip_list::make_traits<
-                    co::compare< cmp >
-                    ,co::item_counter< simple_item_counter >
-                    ,co::allocator< memory::MichaelAllocator<int> >
-                >::type
-            > set;
-            test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_michaelalloc_cmpless()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_michaelalloc_less_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_michaelalloc_cmp_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPI_michaelalloc_cmpless_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-} // namespace map
-
-CPPUNIT_TEST_SUITE_REGISTRATION(map::SkipListMapRCUHdrTest);
diff --git a/tests/test-hdr/map/hdr_skiplist_map_rcu_gpt.cpp b/tests/test-hdr/map/hdr_skiplist_map_rcu_gpt.cpp
deleted file mode 100644 (file)
index c0ef3dd..0000000
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_skiplist_map_rcu.h"
-
-#include <cds/urcu/general_threaded.h>
-#include <cds/container/skip_list_map_rcu.h>
-
-#include "unit/michael_alloc.h"
-#include "map/print_skiplist_stat.h"
-
-namespace map {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_type;
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_less()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_cmp()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_cmpless()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_less_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_cmp_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_cmpless_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_xorshift_less()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_xorshift_cmp()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_xorshift_cmpless()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_xorshift_less_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_xorshift_cmp_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_xorshift_cmpless_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_turbopas_less()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_turbopas_cmp()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_turbopas_cmpless()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_turbopas_less_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_turbopas_cmp_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_turbopas_cmpless_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_michaelalloc_less()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_michaelalloc_cmp()
-    {
-            typedef cc::SkipListMap< rcu_type, key_type, value_type,
-                cc::skip_list::make_traits<
-                    co::compare< cmp >
-                    ,co::item_counter< simple_item_counter >
-                    ,co::allocator< memory::MichaelAllocator<int> >
-                >::type
-            > set;
-            test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_michaelalloc_cmpless()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_michaelalloc_less_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_michaelalloc_cmp_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_GPT_michaelalloc_cmpless_stat()
-    {
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-} // namespace map
diff --git a/tests/test-hdr/map/hdr_skiplist_map_rcu_shb.cpp b/tests/test-hdr/map/hdr_skiplist_map_rcu_shb.cpp
deleted file mode 100644 (file)
index 0ecb1da..0000000
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_skiplist_map_rcu.h"
-
-#include <cds/urcu/signal_buffered.h>
-#include <cds/container/skip_list_map_rcu.h>
-
-#include "unit/michael_alloc.h"
-#include "map/print_skiplist_stat.h"
-
-namespace map {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_type;
-    }
-#endif
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_cmp_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_cmpless_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_xorshift_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_xorshift_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_xorshift_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_xorshift_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_xorshift_cmp_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_xorshift_cmpless_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_turbopas_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_turbopas_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_turbopas_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_turbopas_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_turbopas_cmp_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_turbopas_cmpless_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_michaelalloc_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_michaelalloc_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_michaelalloc_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_michaelalloc_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_michaelalloc_cmp_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHB_michaelalloc_cmpless_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-} // namespace map
diff --git a/tests/test-hdr/map/hdr_skiplist_map_rcu_sht.cpp b/tests/test-hdr/map/hdr_skiplist_map_rcu_sht.cpp
deleted file mode 100644 (file)
index 528ad10..0000000
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_skiplist_map_rcu.h"
-
-#include <cds/urcu/signal_threaded.h>
-#include <cds/container/skip_list_map_rcu.h>
-
-#include "unit/michael_alloc.h"
-#include "map/print_skiplist_stat.h"
-
-namespace map {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_type;
-    }
-#endif
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_cmp_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_cmpless_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_xorshift_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_xorshift_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_xorshift_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_xorshift_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_xorshift_cmp_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_xorshift_cmpless_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_turbopas_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_turbopas_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_turbopas_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_turbopas_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_turbopas_cmp_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_turbopas_cmpless_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_michaelalloc_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_michaelalloc_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_michaelalloc_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_michaelalloc_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_michaelalloc_cmp_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListMapRCUHdrTest::SkipList_RCU_SHT_michaelalloc_cmpless_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_type, key_type, value_type,
-            cc::skip_list::make_traits<
-                co::less< less >
-                ,co::compare< cmp >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-} // namespace map
diff --git a/tests/test-hdr/map/hdr_splitlist_map_dhp.cpp b/tests/test-hdr/map/hdr_splitlist_map_dhp.cpp
deleted file mode 100644 (file)
index a4aa3c0..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/container/michael_list_dhp.h>
-#include <cds/container/split_list_map.h>
-
-namespace map {
-
-    namespace {
-        struct DHP_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-            };
-        };
-
-        struct DHP_less_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = true };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::less   less;
-            };
-        };
-
-        struct DHP_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-                typedef std::less<HashMapHdrTest::key_type>     less;
-            };
-        };
-
-        struct DHP_cmpmix_stat_traits : public DHP_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-    }
-
-    void HashMapHdrTest::Split_DHP_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::DHP, key_type, value_type, DHP_cmp_traits > map_type;
-        test_int< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::DHP,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_DHP_less()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::DHP, key_type, value_type, DHP_less_traits > map_type;
-        test_int< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::DHP,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_DHP_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::DHP, key_type, value_type, DHP_cmpmix_traits > map_type;
-        test_int< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::DHP,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_DHP_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::DHP, key_type, value_type, DHP_cmpmix_stat_traits > map_type;
-        test_int< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::DHP,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::stat< cc::split_list::stat<> >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-} // namespace map
-
diff --git a/tests/test-hdr/map/hdr_splitlist_map_hp.cpp b/tests/test-hdr/map/hdr_splitlist_map_hp.cpp
deleted file mode 100644 (file)
index 36bd1d4..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/container/michael_list_hp.h>
-#include <cds/container/split_list_map.h>
-
-namespace map {
-
-    namespace {
-        struct HP_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-            };
-        };
-
-        struct HP_less_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::less   less;
-            };
-        };
-
-        struct HP_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-                typedef std::less<HashMapHdrTest::key_type>     less;
-            };
-        };
-
-        struct HP_cmpmix_stat_traits : public HP_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-
-    }
-
-    void HashMapHdrTest::Split_HP_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::HP, key_type, value_type, HP_cmp_traits > map_type;
-        test_int< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::HP,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_HP_less()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::HP, key_type, value_type, HP_less_traits > map_type;
-        test_int< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::HP,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_HP_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::HP, key_type, value_type, HP_cmpmix_traits > map_type;
-        test_int< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::HP,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_HP_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::HP, key_type, value_type, HP_cmpmix_stat_traits > map_type;
-        test_int< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::HP,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-                ,cds::opt::stat< cc::split_list::stat<>>
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-} // namespace map
-
diff --git a/tests/test-hdr/map/hdr_splitlist_map_lazy_dhp.cpp b/tests/test-hdr/map/hdr_splitlist_map_lazy_dhp.cpp
deleted file mode 100644 (file)
index 6335aa5..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/container/lazy_list_dhp.h>
-#include <cds/container/split_list_map.h>
-
-namespace map {
-
-    namespace {
-        struct DHP_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-            };
-        };
-
-        struct DHP_less_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = true };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::less   less;
-            };
-        };
-
-        struct DHP_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-                typedef std::less<HashMapHdrTest::key_type>     less;
-            };
-        };
-
-        struct DHP_cmpmix_stat_traits : public DHP_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-    }
-
-    void HashMapHdrTest::Split_Lazy_DHP_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::DHP, key_type, value_type, DHP_cmp_traits > map_type;
-        test_int< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::DHP,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_Lazy_DHP_less()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::DHP, key_type, value_type, DHP_less_traits > map_type;
-        test_int< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::DHP,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_Lazy_DHP_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::DHP, key_type, value_type, DHP_cmpmix_traits > map_type;
-        test_int< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::DHP,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_Lazy_DHP_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::DHP, key_type, value_type, DHP_cmpmix_stat_traits > map_type;
-        test_int< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::DHP,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-                ,cc::opt::stat< cc::split_list::stat<>>
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-} // namespace map
-
diff --git a/tests/test-hdr/map/hdr_splitlist_map_lazy_hp.cpp b/tests/test-hdr/map/hdr_splitlist_map_lazy_hp.cpp
deleted file mode 100644 (file)
index 81646bc..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/container/lazy_list_hp.h>
-#include <cds/container/split_list_map.h>
-
-namespace map {
-
-    namespace {
-        struct HP_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-            };
-        };
-
-        struct HP_less_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::less   less;
-            };
-        };
-
-        struct HP_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-                typedef std::less<HashMapHdrTest::key_type>     less;
-            };
-        };
-
-        struct HP_cmpmix_stat_traits : public HP_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-    }
-
-    void HashMapHdrTest::Split_Lazy_HP_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::HP, key_type, value_type, HP_cmp_traits > map_type;
-        test_int< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::HP,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_Lazy_HP_less()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::HP, key_type, value_type, HP_less_traits > map_type;
-        test_int< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::HP,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_Lazy_HP_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::HP, key_type, value_type, HP_cmpmix_traits > map_type;
-        test_int< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::HP,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_Lazy_HP_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::HP, key_type, value_type, HP_cmpmix_stat_traits > map_type;
-        test_int< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::HP,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-                ,cc::opt::stat< cc::split_list::stat<>>
-            >::type
-        > opt_map;
-        test_int< opt_map >();
-    }
-
-} // namespace map
-
diff --git a/tests/test-hdr/map/hdr_splitlist_map_lazy_nogc.cpp b/tests/test-hdr/map/hdr_splitlist_map_lazy_nogc.cpp
deleted file mode 100644 (file)
index f17442f..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/container/lazy_list_nogc.h>
-#include <cds/container/split_list_map_nogc.h>
-
-namespace map {
-
-    namespace {
-        struct nogc_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-            };
-        };
-
-        struct nogc_less_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent   memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::less   less;
-            };
-        };
-
-        struct nogc_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-                typedef std::less<HashMapHdrTest::key_type>     less;
-            };
-        };
-
-        struct nogc_cmpmix_stat_traits : public nogc_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-    }
-
-    void HashMapHdrTest::Split_Lazy_nogc_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::nogc, key_type, value_type, nogc_cmp_traits > map_type;
-        test_int_nogc< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::nogc,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_int_nogc< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_Lazy_nogc_less()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::nogc, key_type, value_type, nogc_less_traits > map_type;
-        test_int_nogc< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::nogc,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_int_nogc< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_Lazy_nogc_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::nogc, key_type, value_type, nogc_cmpmix_traits > map_type;
-        test_int_nogc< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::nogc,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_int_nogc< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_Lazy_nogc_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::nogc, key_type, value_type, nogc_cmpmix_stat_traits > map_type;
-        test_int_nogc< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::nogc,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cds::opt::stat< cc::split_list::stat<> >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_int_nogc< opt_map >();
-    }
-
-} // namespace map
-
diff --git a/tests/test-hdr/map/hdr_splitlist_map_lazy_rcu_gpb.cpp b/tests/test-hdr/map/hdr_splitlist_map_lazy_rcu_gpb.cpp
deleted file mode 100644 (file)
index 790c30d..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/container/lazy_list_rcu.h>
-#include <cds/container/split_list_map_rcu.h>
-
-namespace map {
-
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> >  rcu_type;
-
-        struct RCU_GPB_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-            };
-        };
-
-        struct RCU_GPB_less_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = true };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::less   less;
-            };
-        };
-
-        struct RCU_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-                typedef std::less<HashMapHdrTest::key_type>     less;
-            };
-        };
-
-        struct RCU_cmpmix_stat_traits : public RCU_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-    }
-
-    void HashMapHdrTest::Split_Lazy_RCU_GPB_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_GPB_cmp_traits > map_type;
-        test_rcu< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_Lazy_RCU_GPB_less()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_GPB_less_traits > map_type;
-        test_rcu< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_Lazy_RCU_GPB_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_cmpmix_traits > map_type;
-        test_rcu< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_Lazy_RCU_GPB_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_cmpmix_stat_traits > map_type;
-        test_rcu< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::stat< cc::split_list::stat<> >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-    }
-
-} // namespace map
-
diff --git a/tests/test-hdr/map/hdr_splitlist_map_lazy_rcu_gpi.cpp b/tests/test-hdr/map/hdr_splitlist_map_lazy_rcu_gpi.cpp
deleted file mode 100644 (file)
index 30499b1..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/container/lazy_list_rcu.h>
-#include <cds/container/split_list_map_rcu.h>
-
-namespace map {
-
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> >  rcu_type;
-
-        struct RCU_GPI_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-            };
-        };
-
-        struct RCU_GPI_less_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = true };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::less   less;
-            };
-        };
-
-        struct RCU_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-                typedef std::less<HashMapHdrTest::key_type>     less;
-            };
-        };
-
-        struct RCU_cmpmix_stat_traits : public RCU_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-    }
-
-    void HashMapHdrTest::Split_Lazy_RCU_GPI_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_GPI_cmp_traits > map_type;
-        test_rcu< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_Lazy_RCU_GPI_less()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_GPI_less_traits > map_type;
-        test_rcu< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_Lazy_RCU_GPI_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_cmpmix_traits > map_type;
-        test_rcu< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_Lazy_RCU_GPI_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_cmpmix_stat_traits > map_type;
-        test_rcu< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::stat< cc::split_list::stat<> >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-    }
-
-} // namespace map
-
diff --git a/tests/test-hdr/map/hdr_splitlist_map_lazy_rcu_gpt.cpp b/tests/test-hdr/map/hdr_splitlist_map_lazy_rcu_gpt.cpp
deleted file mode 100644 (file)
index 23f0fd1..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/container/lazy_list_rcu.h>
-#include <cds/container/split_list_map_rcu.h>
-
-namespace map {
-
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> >  rcu_type;
-
-        struct RCU_GPT_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-            };
-        };
-
-        struct RCU_GPT_less_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = true };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::less   less;
-            };
-        };
-
-        struct RCU_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-                typedef std::less<HashMapHdrTest::key_type>     less;
-            };
-        };
-
-        struct RCU_cmpmix_stat_traits : public RCU_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-
-    }
-
-    void HashMapHdrTest::Split_Lazy_RCU_GPT_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_GPT_cmp_traits > map_type;
-        test_rcu< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_Lazy_RCU_GPT_less()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_GPT_less_traits > map_type;
-        test_rcu< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_Lazy_RCU_GPT_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_cmpmix_traits > map_type;
-        test_rcu< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_Lazy_RCU_GPT_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_cmpmix_stat_traits > map_type;
-        test_rcu< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::stat< cc::split_list::stat<> >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-    }
-
-} // namespace map
-
diff --git a/tests/test-hdr/map/hdr_splitlist_map_lazy_rcu_shb.cpp b/tests/test-hdr/map/hdr_splitlist_map_lazy_rcu_shb.cpp
deleted file mode 100644 (file)
index 095176c..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/container/lazy_list_rcu.h>
-#include <cds/container/split_list_map_rcu.h>
-
-namespace map {
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> >  rcu_type;
-
-        struct RCU_SHB_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-            };
-        };
-
-        struct RCU_SHB_less_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = true };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::less   less;
-            };
-        };
-
-        struct RCU_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-                typedef std::less<HashMapHdrTest::key_type>     less;
-            };
-        };
-
-        struct RCU_cmpmix_stat_traits : public RCU_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-
-    }
-#endif
-
-    void HashMapHdrTest::Split_Lazy_RCU_SHB_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_SHB_cmp_traits > map_type;
-        test_rcu< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-#endif
-    }
-
-    void HashMapHdrTest::Split_Lazy_RCU_SHB_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_SHB_less_traits > map_type;
-        test_rcu< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-#endif
-    }
-
-    void HashMapHdrTest::Split_Lazy_RCU_SHB_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_cmpmix_traits > map_type;
-        test_rcu< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-#endif
-    }
-
-    void HashMapHdrTest::Split_Lazy_RCU_SHB_cmpmix_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_cmpmix_stat_traits > map_type;
-        test_rcu< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::stat< cc::split_list::stat<> >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-#endif
-    }
-
-} // namespace map
diff --git a/tests/test-hdr/map/hdr_splitlist_map_lazy_rcu_sht.cpp b/tests/test-hdr/map/hdr_splitlist_map_lazy_rcu_sht.cpp
deleted file mode 100644 (file)
index 2fbf190..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/container/lazy_list_rcu.h>
-#include <cds/container/split_list_map_rcu.h>
-
-namespace map {
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> >  rcu_type;
-
-        struct RCU_SHT_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-            };
-        };
-
-        struct RCU_SHT_less_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = true };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::less   less;
-            };
-        };
-
-        struct RCU_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-                typedef std::less<HashMapHdrTest::key_type>     less;
-            };
-        };
-
-        struct RCU_cmpmix_stat_traits : public RCU_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-}
-#endif
-
-    void HashMapHdrTest::Split_Lazy_RCU_SHT_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_SHT_cmp_traits > map_type;
-        test_rcu< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-#endif
-    }
-
-    void HashMapHdrTest::Split_Lazy_RCU_SHT_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_SHT_less_traits > map_type;
-        test_rcu< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-#endif
-    }
-
-    void HashMapHdrTest::Split_Lazy_RCU_SHT_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_cmpmix_traits > map_type;
-        test_rcu< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-#endif
-    }
-
-    void HashMapHdrTest::Split_Lazy_RCU_SHT_cmpmix_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_cmpmix_stat_traits > map_type;
-        test_rcu< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::stat< cc::split_list::stat<> >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu< opt_map >();
-#endif
-    }
-
-} // namespace map
diff --git a/tests/test-hdr/map/hdr_splitlist_map_nogc.cpp b/tests/test-hdr/map/hdr_splitlist_map_nogc.cpp
deleted file mode 100644 (file)
index efb62e6..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/container/michael_list_nogc.h>
-#include <cds/container/split_list_map_nogc.h>
-
-namespace map {
-
-    namespace {
-        struct nogc_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-            };
-        };
-
-        struct nogc_less_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::less   less;
-            };
-        };
-
-        struct nogc_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-                typedef std::less<HashMapHdrTest::key_type>     less;
-            };
-        };
-
-        struct nogc_cmpmix_stat_traits : public nogc_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-    }
-
-    void HashMapHdrTest::Split_nogc_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::nogc, key_type, value_type, nogc_cmp_traits > map_type;
-        test_int_nogc< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::nogc,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_int_nogc< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_nogc_less()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::nogc, key_type, value_type, nogc_less_traits > map_type;
-        test_int_nogc< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::nogc,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_int_nogc< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_nogc_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::nogc, key_type, value_type, nogc_cmpmix_traits > map_type;
-        test_int_nogc< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::nogc,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                , cc::opt::stat< cc::split_list::empty_stat >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_int_nogc< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_nogc_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< cds::gc::nogc, key_type, value_type, nogc_cmpmix_stat_traits > map_type;
-        test_int_nogc< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< cds::gc::nogc,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::stat< cc::split_list::stat<> >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_int_nogc< opt_map >();
-    }
-
-} // namespace map
-
diff --git a/tests/test-hdr/map/hdr_splitlist_map_rcu_gpb.cpp b/tests/test-hdr/map/hdr_splitlist_map_rcu_gpb.cpp
deleted file mode 100644 (file)
index ae2ae56..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/container/michael_list_rcu.h>
-#include <cds/container/split_list_map_rcu.h>
-
-namespace map {
-
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> >  rcu_type;
-
-        struct RCU_GPB_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-            };
-        };
-
-        struct RCU_GPB_less_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = true };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::less   less;
-            };
-        };
-
-        struct RCU_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-                typedef std::less<HashMapHdrTest::key_type>     less;
-            };
-        };
-
-        struct RCU_cmpmix_stat_traits : public RCU_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-    }
-
-    void HashMapHdrTest::Split_RCU_GPB_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_GPB_cmp_traits > map_type;
-        test_rcu_split_list< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu_split_list< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_RCU_GPB_less()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_GPB_less_traits > map_type;
-        test_rcu_split_list< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu_split_list< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_RCU_GPB_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_cmpmix_traits > map_type;
-        test_rcu_split_list< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu_split_list< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_RCU_GPB_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_cmpmix_stat_traits > map_type;
-        test_rcu_split_list< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cds::opt::stat< cc::split_list::stat<>>
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu_split_list< opt_map >();
-    }
-
-} // namespace map
-
diff --git a/tests/test-hdr/map/hdr_splitlist_map_rcu_gpi.cpp b/tests/test-hdr/map/hdr_splitlist_map_rcu_gpi.cpp
deleted file mode 100644 (file)
index df9d826..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/container/michael_list_rcu.h>
-#include <cds/container/split_list_map_rcu.h>
-
-namespace map {
-
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> >  rcu_type;
-
-        struct RCU_GPI_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-            };
-        };
-
-        struct RCU_GPI_less_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = true };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::less   less;
-            };
-        };
-
-        struct RCU_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-                typedef std::less<HashMapHdrTest::key_type>     less;
-            };
-        };
-
-        struct RCU_cmpmix_stat_traits : public RCU_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-
-    }
-
-    void HashMapHdrTest::Split_RCU_GPI_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_GPI_cmp_traits > map_type;
-        test_rcu_split_list< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu_split_list< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_RCU_GPI_less()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_GPI_less_traits > map_type;
-        test_rcu_split_list< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu_split_list< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_RCU_GPI_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_cmpmix_traits > map_type;
-        test_rcu_split_list< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu_split_list< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_RCU_GPI_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_cmpmix_stat_traits > map_type;
-        test_rcu_split_list< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cds::opt::stat< cc::split_list::stat<>>
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu_split_list< opt_map >();
-    }
-
-} // namespace map
-
diff --git a/tests/test-hdr/map/hdr_splitlist_map_rcu_gpt.cpp b/tests/test-hdr/map/hdr_splitlist_map_rcu_gpt.cpp
deleted file mode 100644 (file)
index 1c9aa64..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/container/michael_list_rcu.h>
-#include <cds/container/split_list_map_rcu.h>
-
-namespace map {
-
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> >  rcu_type;
-
-        struct RCU_GPT_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-            };
-        };
-
-        struct RCU_GPT_less_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = true };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::less   less;
-            };
-        };
-
-        struct RCU_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-                typedef std::less<HashMapHdrTest::key_type>     less;
-            };
-        };
-
-        struct RCU_cmpmix_stat_traits : public RCU_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-    }
-
-    void HashMapHdrTest::Split_RCU_GPT_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_GPT_cmp_traits > map_type;
-        test_rcu_split_list< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu_split_list< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_RCU_GPT_less()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_GPT_less_traits > map_type;
-        test_rcu_split_list< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu_split_list< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_RCU_GPT_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_cmpmix_traits > map_type;
-        test_rcu_split_list< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu_split_list< opt_map >();
-    }
-
-    void HashMapHdrTest::Split_RCU_GPT_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_cmpmix_stat_traits > map_type;
-        test_rcu_split_list< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cds::opt::stat< cc::split_list::stat<>>
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu_split_list< opt_map >();
-    }
-
-} // namespace map
-
diff --git a/tests/test-hdr/map/hdr_splitlist_map_rcu_shb.cpp b/tests/test-hdr/map/hdr_splitlist_map_rcu_shb.cpp
deleted file mode 100644 (file)
index 9ecb759..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/container/michael_list_rcu.h>
-#include <cds/container/split_list_map_rcu.h>
-
-namespace map {
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> >  rcu_type;
-
-        struct RCU_SHB_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-            };
-        };
-
-        struct RCU_SHB_less_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = true };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::less   less;
-            };
-        };
-
-        struct RCU_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-                typedef std::less<HashMapHdrTest::key_type>     less;
-            };
-        };
-
-        struct RCU_cmpmix_stat_traits : public RCU_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-    }
-#endif
-
-    void HashMapHdrTest::Split_RCU_SHB_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_SHB_cmp_traits > map_type;
-        test_rcu_split_list< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu_split_list< opt_map >();
-#endif
-    }
-
-    void HashMapHdrTest::Split_RCU_SHB_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_SHB_less_traits > map_type;
-        test_rcu_split_list< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu_split_list< opt_map >();
-#endif
-    }
-
-    void HashMapHdrTest::Split_RCU_SHB_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_cmpmix_traits > map_type;
-        test_rcu_split_list< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu_split_list< opt_map >();
-#endif
-    }
-
-    void HashMapHdrTest::Split_RCU_SHB_cmpmix_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_cmpmix_stat_traits > map_type;
-        test_rcu_split_list< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::stat<cc::split_list::stat<>>
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu_split_list< opt_map >();
-#endif
-    }
-
-} // namespace map
diff --git a/tests/test-hdr/map/hdr_splitlist_map_rcu_sht.cpp b/tests/test-hdr/map/hdr_splitlist_map_rcu_sht.cpp
deleted file mode 100644 (file)
index 19e06dd..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_map.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/container/michael_list_rcu.h>
-#include <cds/container/split_list_map_rcu.h>
-
-namespace map {
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> >  rcu_type;
-
-        struct RCU_SHT_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-            };
-        };
-
-        struct RCU_SHT_less_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = true };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::less   less;
-            };
-        };
-
-        struct RCU_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashMapHdrTest::hash_int            hash;
-            typedef HashMapHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashMapHdrTest::cmp   compare;
-                typedef std::less<HashMapHdrTest::key_type>     less;
-            };
-        };
-
-        struct RCU_cmpmix_stat_traits : public RCU_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-    }
-#endif
-
-    void HashMapHdrTest::Split_RCU_SHT_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_SHT_cmp_traits > map_type;
-        test_rcu_split_list< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu_split_list< opt_map >();
-#endif
-    }
-
-    void HashMapHdrTest::Split_RCU_SHT_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_SHT_less_traits > map_type;
-        test_rcu_split_list< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu_split_list< opt_map >();
-#endif
-    }
-
-    void HashMapHdrTest::Split_RCU_SHT_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_cmpmix_traits > map_type;
-        test_rcu_split_list< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu_split_list< opt_map >();
-#endif
-    }
-
-    void HashMapHdrTest::Split_RCU_SHT_cmpmix_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListMap< rcu_type, key_type, value_type, RCU_cmpmix_stat_traits > map_type;
-        test_rcu_split_list< map_type >();
-
-        // option-based version
-        typedef cc::SplitListMap< rcu_type,
-            key_type,
-            value_type,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::stat<cc::split_list::stat<>>
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                    cc::opt::less< std::less<key_type> >
-                        ,cc::opt::compare< cmp >
-                    >::type
-                >
-            >::type
-        > opt_map;
-        test_rcu_split_list< opt_map >();
-#endif
-    }
-
-} // namespace map
diff --git a/tests/test-hdr/map/hdr_striped_hashmap_boost_flat_map.cpp b/tests/test-hdr/map/hdr_striped_hashmap_boost_flat_map.cpp
deleted file mode 100644 (file)
index a19d6de..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_striped_map.h"
-
-#include <boost/version.hpp>
-#include <cds/details/defs.h>
-#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION <= 105500
-namespace map {
-    void StripedMapHdrTest::Striped_boost_flat_map()
-    {
-        CPPUNIT_MESSAGE("Skipped; for Microsoft Visual C++ 2013 and boost::container::flat_map you should use boost version 1.56 or above");
-    }
-}
-
-#elif BOOST_VERSION >= 104800
-
-#include <cds/container/striped_map/boost_flat_map.h>
-#include <cds/container/striped_map.h>
-#include <cds/sync/spinlock.h>
-
-namespace map {
-
-    namespace {
-        typedef boost::container::flat_map<StripedMapHdrTest::key_type, StripedMapHdrTest::value_type, StripedMapHdrTest::less > map_t;
-
-        struct my_copy_policy {
-            typedef map_t::iterator iterator;
-
-            void operator()( map_t& m, iterator /*itInsert*/, iterator itWhat )
-            {
-                m.insert( *itWhat );
-            }
-        };
-    }
-
-    void StripedMapHdrTest::Striped_boost_flat_map()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   map_cmp;
-        test_striped< map_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_less;
-        test_striped< map_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            , co::less< less >
-        >   map_cmpmix;
-        test_striped< map_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::mutex_policy< cc::striped_set::striping<cds::sync::spin> >
-        >   map_spin;
-        test_striped< map_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(1024)");
-        {
-            typedef cc::StripedMap< map_t
-                , co::hash< hash_int >
-                , co::less< less >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   map_less_resizing_lf;
-            map_less_resizing_lf m(30, cc::striped_set::load_factor_resizing<0>(1024));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-        >   map_less_resizing_lf16;
-        test_striped< map_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(1024)");
-        {
-            typedef cc::StripedMap< map_t
-                , co::hash< hash_int >
-                , co::compare< cmp >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   map_less_resizing_sbt;
-            map_less_resizing_sbt m(30, cc::striped_set::single_bucket_size_threshold<0>(1024));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<256>");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<256> >
-        >   map_less_resizing_sbt16;
-        test_striped< map_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, copy_item");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, swap_item");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, move_item");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped< set_move_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, special copy_policy");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped< set_special_copy_item >();
-
-    }
-
-}   // namespace map
-
-/*
-#else
-    namespace map {
-        void StripedMapHdrTest::Striped_boost_flat_map()
-        {
-            CPPUNIT_MESSAGE( "Skipped; to use boost::container::flat_map is not compatible with MS VC++ 11" );
-        }
-    }
-#endif
-*/
-
-#else // BOOST_VERSION < 104800
-
-namespace map {
-    void StripedMapHdrTest::Striped_boost_flat_map()
-    {
-        CPPUNIT_MESSAGE( "Skipped; for boost::container::flat_map you should use boost version 1.48 or above" );
-    }
-}
-#endif  // BOOST_VERSION
diff --git a/tests/test-hdr/map/hdr_striped_hashmap_boost_list.cpp b/tests/test-hdr/map/hdr_striped_hashmap_boost_list.cpp
deleted file mode 100644 (file)
index 0ae8cbc..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_striped_map.h"
-
-#include <boost/version.hpp>
-#include <cds/details/defs.h>
-#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION <= 105500
-namespace map {
-    void StripedMapHdrTest::Striped_boost_list()
-    {
-        CPPUNIT_MESSAGE("Skipped; for Microsoft Visual C++ 2013 and boost::container::list you should use boost version 1.56 or above");
-    }
-}
-
-#elif BOOST_VERSION >= 104800
-
-#include <cds/container/striped_map/boost_list.h>
-#include <cds/container/striped_map.h>
-#include <cds/sync/spinlock.h>
-
-namespace map {
-
-    namespace {
-        typedef boost::container::list< StripedMapHdrTest::pair_type > sequence_t;
-
-        struct my_copy_policy {
-            typedef sequence_t::iterator iterator;
-
-            void operator()( sequence_t& list, iterator itInsert, iterator itWhat )
-            {
-                list.insert( itInsert, std::make_pair(itWhat->first, itWhat->second ));
-            }
-        };
-    }
-
-    void StripedMapHdrTest::Striped_boost_list()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   map_cmp;
-        test_striped2< map_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_less;
-        test_striped2< map_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            , co::less< less >
-        >   map_cmpmix;
-        test_striped2< map_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::mutex_policy< cc::striped_set::striping<cds::sync::spin> >
-        >   map_spin;
-        test_striped2< map_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(8)");
-        {
-            typedef cc::StripedMap< sequence_t
-                , co::hash< hash_int >
-                , co::less< less >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   pair_type_less_resizing_lf;
-            pair_type_less_resizing_lf m(30, cc::striped_set::load_factor_resizing<0>(8) );
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<4>");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<4> >
-        >   map_less_resizing_lf16;
-        test_striped2< map_less_resizing_lf16 >();
-
-        {
-            CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(8)");
-            typedef cc::StripedMap< sequence_t
-                , co::hash< hash_int >
-                , co::less< less >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   map_less_resizing_sbt;
-            map_less_resizing_sbt m(30, cc::striped_set::single_bucket_size_threshold<0>(8));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<6>");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<6> >
-        >   map_less_resizing_sbt16;
-        test_striped2< map_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "copy_item");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped2< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "swap_item");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped2< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "move_item");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped2< set_move_item >();
-
-        CPPUNIT_MESSAGE( "special copy_item");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped2< set_special_copy_item >();
-
-    }
-
-}   // namespace map
-
-#else // BOOST_VERSION < 104800
-
-namespace map {
-    void StripedMapHdrTest::Striped_boost_list()
-    {
-        CPPUNIT_MESSAGE( "Skipped; for boost::container::list you should use boost version 1.48 or above" );
-    }
-}
-#endif  // BOOST_VERSION
diff --git a/tests/test-hdr/map/hdr_striped_hashmap_boost_map.cpp b/tests/test-hdr/map/hdr_striped_hashmap_boost_map.cpp
deleted file mode 100644 (file)
index 9c97b54..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_striped_map.h"
-
-#include <boost/version.hpp>
-#include <cds/details/defs.h>
-#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION <= 105500
-namespace map {
-    void StripedMapHdrTest::Striped_boost_map()
-    {
-        CPPUNIT_MESSAGE("Skipped; for Microsoft Visual C++ 2013 and boost::container::map you should use boost version 1.56 or above");
-    }
-}
-
-#elif BOOST_VERSION >= 104800
-
-#include <cds/container/striped_map/boost_map.h>
-#include <cds/container/striped_map.h>
-#include <cds/sync/spinlock.h>
-
-namespace map {
-
-    namespace {
-        typedef boost::container::map<StripedMapHdrTest::key_type, StripedMapHdrTest::value_type, StripedMapHdrTest::less > map_t;
-
-        struct my_copy_policy {
-            typedef map_t::iterator iterator;
-
-            void operator()( map_t& map, iterator itWhat )
-            {
-                map.insert( *itWhat );
-            }
-        };
-    }
-
-    void StripedMapHdrTest::Striped_boost_map()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   map_cmp;
-        test_striped< map_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_less;
-        test_striped< map_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            , co::less< less >
-        >   map_cmpmix;
-        test_striped< map_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::mutex_policy< cc::striped_set::striping<cds::sync::spin> >
-        >   map_spin;
-        test_striped< map_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(1024)");
-        {
-            typedef cc::StripedMap< map_t
-                , co::hash< hash_int >
-                , co::less< less >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   map_less_resizing_lf;
-            map_less_resizing_lf m(30, cc::striped_set::load_factor_resizing<0>(1024));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-        >   map_less_resizing_lf16;
-        test_striped< map_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(1024)");
-        {
-            typedef cc::StripedMap< map_t
-                , co::hash< hash_int >
-                , co::compare< cmp >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   map_less_resizing_sbt;
-            map_less_resizing_sbt m(30, cc::striped_set::single_bucket_size_threshold<0>(1024));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<256>");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<256> >
-        >   map_less_resizing_sbt16;
-        test_striped< map_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, copy_item");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, swap_item");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, move_item");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped< set_move_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, special copy_policy");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped< set_special_copy_item >();
-    }
-
-}   // namespace map
-
-#else // BOOST_VERSION < 104800
-
-namespace map {
-    void StripedMapHdrTest::Striped_boost_map()
-    {
-        CPPUNIT_MESSAGE( "Skipped; for boost::container::map you should use boost version 1.48 or above" );
-    }
-}
-#endif  // BOOST_VERSION
diff --git a/tests/test-hdr/map/hdr_striped_hashmap_boost_unordered_map.cpp b/tests/test-hdr/map/hdr_striped_hashmap_boost_unordered_map.cpp
deleted file mode 100644 (file)
index 918df86..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_striped_map.h"
-#include <cds/container/striped_map/boost_unordered_map.h>
-#include <cds/container/striped_map.h>
-#include <cds/sync/spinlock.h>
-
-namespace map {
-
-    namespace {
-        typedef boost::unordered_map< StripedMapHdrTest::key_type, StripedMapHdrTest::value_type > map_t;
-
-        struct my_copy_policy {
-            typedef map_t::iterator iterator;
-
-            void operator()( map_t& m, iterator /*itInsert*/, iterator itWhat )
-            {
-                m.insert( std::make_pair(itWhat->first, itWhat->second ) );
-            }
-        };
-    }
-
-    void StripedMapHdrTest::Striped_boost_unordered_map()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   map_cmp;
-        test_striped< map_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_less;
-        test_striped< map_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            , co::less< less >
-        >   map_cmpmix;
-        test_striped< map_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::mutex_policy< cc::striped_set::striping<cds::sync::spin> >
-        >   map_spin;
-        test_striped< map_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(1024)");
-        {
-            typedef cc::StripedMap< map_t
-                , co::hash< hash_int >
-                , co::less< less >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   map_less_resizing_lf;
-            map_less_resizing_lf m(30, cc::striped_set::load_factor_resizing<0>(1024));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-        >   map_less_resizing_lf16;
-        test_striped< map_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(1024)");
-        {
-            typedef cc::StripedMap< map_t
-                , co::hash< hash_int >
-                , co::compare< cmp >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   map_less_resizing_sbt;
-            map_less_resizing_sbt m(30, cc::striped_set::single_bucket_size_threshold<0>(1024));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<256>");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<256> >
-        >   map_less_resizing_sbt16;
-        test_striped< map_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, copy_item");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, swap_item");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, move_item");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped< set_move_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, special copy_policy");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped< set_special_copy_item >();
-    }
-
-}   // namespace map
diff --git a/tests/test-hdr/map/hdr_striped_hashmap_hashmap_std.cpp b/tests/test-hdr/map/hdr_striped_hashmap_hashmap_std.cpp
deleted file mode 100644 (file)
index 59a4fa7..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_striped_map.h"
-#include <cds/container/striped_map/std_hash_map.h>
-#include <cds/container/striped_map.h>
-#include <cds/sync/spinlock.h>
-
-namespace map {
-
-    namespace {
-        typedef std::unordered_map< StripedMapHdrTest::key_type, StripedMapHdrTest::value_type > map_t;
-
-        struct my_copy_policy {
-            typedef map_t::iterator iterator;
-
-            void operator()( map_t& m, iterator /*itInsert*/, iterator itWhat )
-            {
-                m.insert( std::make_pair(itWhat->first, itWhat->second ) );
-            }
-        };
-    }
-
-    void StripedMapHdrTest::Striped_hashmap()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   map_cmp;
-        test_striped< map_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_less;
-        test_striped< map_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            , co::less< less >
-        >   map_cmpmix;
-        test_striped< map_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::mutex_policy< cc::striped_set::striping<cds::sync::spin> >
-        >   map_spin;
-        test_striped< map_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(1024)");
-        {
-            typedef cc::StripedMap< map_t
-                , co::hash< hash_int >
-                , co::less< less >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   map_less_resizing_lf;
-            map_less_resizing_lf m(30, cc::striped_set::load_factor_resizing<0>(1024));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-        >   map_less_resizing_lf16;
-        test_striped< map_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(1024)");
-        {
-            typedef cc::StripedMap< map_t
-                , co::hash< hash_int >
-                , co::compare< cmp >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   map_less_resizing_sbt;
-            map_less_resizing_sbt m(30, cc::striped_set::single_bucket_size_threshold<0>(1024));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<256>");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<256> >
-        >   map_less_resizing_sbt16;
-        test_striped< map_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, copy_item");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, swap_item");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, move_item");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped< set_move_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, special copy_policy");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped< set_special_copy_item >();
-    }
-
-}   // namespace map
diff --git a/tests/test-hdr/map/hdr_striped_hashmap_list.cpp b/tests/test-hdr/map/hdr_striped_hashmap_list.cpp
deleted file mode 100644 (file)
index 95c348b..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_striped_map.h"
-#include <cds/container/striped_map/std_list.h>
-#include <cds/container/striped_map.h>
-#include <cds/sync/spinlock.h>
-
-namespace map {
-
-    namespace {
-        typedef std::list<StripedMapHdrTest::pair_type> sequence_t;
-
-        struct my_copy_policy {
-            typedef sequence_t::iterator iterator;
-
-            void operator()( sequence_t& list, iterator itInsert, iterator itWhat )
-            {
-                list.insert( itInsert, std::make_pair(itWhat->first, itWhat->second ));
-            }
-
-        };
-    }
-
-    void StripedMapHdrTest::Striped_list()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   map_cmp;
-        test_striped2< map_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_less;
-        test_striped2< map_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            , co::less< less >
-        >   map_cmpmix;
-        test_striped2< map_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::mutex_policy< cc::striped_set::striping<cds::sync::spin> >
-        >   map_spin;
-        test_striped2< map_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(8)");
-        {
-            typedef cc::StripedMap< sequence_t
-                , co::hash< hash_int >
-                , co::less< less >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   pair_type_less_resizing_lf;
-            pair_type_less_resizing_lf m(30, cc::striped_set::load_factor_resizing<0>(8) );
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<4>");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<4> >
-        >   map_less_resizing_lf16;
-        test_striped2< map_less_resizing_lf16 >();
-
-        {
-            CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(8)");
-            typedef cc::StripedMap< sequence_t
-                , co::hash< hash_int >
-                , co::less< less >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   map_less_resizing_sbt;
-            map_less_resizing_sbt m(30, cc::striped_set::single_bucket_size_threshold<0>(8));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<6>");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<6> >
-        >   map_less_resizing_sbt16;
-        test_striped2< map_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "copy_item");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped2< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "swap_item");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped2< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "move_item");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped2< set_move_item >();
-
-        CPPUNIT_MESSAGE( "special copy_item");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped2< set_special_copy_item >();
-    }
-
-}   // namespace map
diff --git a/tests/test-hdr/map/hdr_striped_hashmap_map.cpp b/tests/test-hdr/map/hdr_striped_hashmap_map.cpp
deleted file mode 100644 (file)
index 3802e03..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_striped_map.h"
-#include <cds/container/striped_map/std_map.h>
-#include <cds/container/striped_map.h>
-#include <cds/sync/spinlock.h>
-
-namespace map {
-
-    namespace {
-        typedef std::map<StripedMapHdrTest::key_type, StripedMapHdrTest::value_type, StripedMapHdrTest::less > map_t;
-
-        struct my_copy_policy {
-            typedef map_t::iterator iterator;
-
-            void operator()( map_t& m, iterator /*itInsert*/, iterator itWhat )
-            {
-                m.insert( *itWhat );
-            }
-        };
-    }
-
-    void StripedMapHdrTest::Striped_map()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   map_cmp;
-        test_striped< map_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_less;
-        test_striped< map_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            , co::less< less >
-        >   map_cmpmix;
-        test_striped< map_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::mutex_policy< cc::striped_set::striping<cds::sync::spin> >
-        >   map_spin;
-        test_striped< map_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(1024)");
-        {
-            typedef cc::StripedMap< map_t
-                , co::hash< hash_int >
-                , co::less< less >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   map_less_resizing_lf;
-            map_less_resizing_lf m(30, cc::striped_set::load_factor_resizing<0>(1024));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-        >   map_less_resizing_lf16;
-        test_striped< map_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(1024)");
-        {
-            typedef cc::StripedMap< map_t
-                , co::hash< hash_int >
-                , co::compare< cmp >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   map_less_resizing_sbt;
-            map_less_resizing_sbt m(30, cc::striped_set::single_bucket_size_threshold<0>(1024));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<256>");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<256> >
-        >   map_less_resizing_sbt16;
-        test_striped< map_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, copy_item");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, swap_item");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, move_item");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped< set_move_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, special copy_policy");
-        typedef cc::StripedMap< map_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped< set_special_copy_item >();
-    }
-
-}   // namespace map
diff --git a/tests/test-hdr/map/hdr_striped_hashmap_slist.cpp b/tests/test-hdr/map/hdr_striped_hashmap_slist.cpp
deleted file mode 100644 (file)
index e1d1ad0..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_striped_map.h"
-
-#include <boost/version.hpp>
-#include <cds/details/defs.h>
-#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION <= 105500
-namespace map {
-    void StripedMapHdrTest::Striped_slist()
-    {
-        CPPUNIT_MESSAGE("Skipped; for Microsoft Visual C++ 2013 and boost::container::slist you should use boost version 1.56 or above");
-    }
-}
-
-#elif BOOST_VERSION >= 104800
-
-#include <cds/container/striped_map/boost_slist.h>
-#include <cds/container/striped_map.h>
-#include <cds/sync/spinlock.h>
-
-namespace map {
-
-    namespace {
-        typedef boost::container::slist<StripedMapHdrTest::pair_type> sequence_t;
-
-        struct my_copy_policy {
-            typedef sequence_t::iterator iterator;
-
-            void operator()( sequence_t& list, iterator itInsert, iterator itWhat )
-            {
-                list.insert_after( itInsert, StripedMapHdrTest::pair_type( std::make_pair(itWhat->first, itWhat->second )));
-            }
-        };
-    }
-
-    void StripedMapHdrTest::Striped_slist()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   map_cmp;
-        test_striped2< map_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::less< less >
-        >   map_less;
-        test_striped2< map_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            , co::less< less >
-        >   map_cmpmix;
-        test_striped2< map_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::mutex_policy< cc::striped_set::striping<cds::sync::spin> >
-        >   map_spin;
-        test_striped2< map_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(8)");
-        {
-            typedef cc::StripedMap< sequence_t
-                , co::hash< hash_int >
-                , co::less< less >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   pair_type_less_resizing_lf;
-            pair_type_less_resizing_lf m(30, cc::striped_set::load_factor_resizing<0>(8) );
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<4>");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<4> >
-        >   map_less_resizing_lf16;
-        test_striped2< map_less_resizing_lf16 >();
-
-        {
-            CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(8)");
-            typedef cc::StripedMap< sequence_t
-                , co::hash< hash_int >
-                , co::less< less >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   map_less_resizing_sbt;
-            map_less_resizing_sbt m(30, cc::striped_set::single_bucket_size_threshold<0>(8));
-            test_striped_with(m);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<6>");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<6> >
-        >   map_less_resizing_sbt16;
-        test_striped2< map_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "copy_item");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped2< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "swap_item");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped2< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "move_item");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::less< less >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped2< set_move_item >();
-
-        CPPUNIT_MESSAGE( "special copy_item");
-        typedef cc::StripedMap< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped2< set_special_copy_item >();
-    }
-
-}   // namespace map
-
-#else // BOOST_VERSION < 104800
-
-namespace map {
-    void StripedMapHdrTest::Striped_slist()
-    {
-        CPPUNIT_MESSAGE( "Skipped; for boost::container::slist you should use boost version 1.48 or above" );
-    }
-}
-#endif  // BOOST_VERSION
diff --git a/tests/test-hdr/map/hdr_striped_map.h b/tests/test-hdr/map/hdr_striped_map.h
deleted file mode 100644 (file)
index 211cfeb..0000000
+++ /dev/null
@@ -1,615 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_STRIPED_MAP_H
-#define CDSTEST_HDR_STRIPED_MAP_H
-#include "size_check.h"
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/os/timer.h>
-#include <cds/opt/hash.h>
-#include <functional>   // ref
-
-namespace cds { namespace container {}}
-
-namespace map {
-    using misc::check_size;
-
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-
-    class StripedMapHdrTest: public CppUnitMini::TestCase
-    {
-    public:
-        typedef int key_type;
-
-        struct value_type {
-            int m_val;
-
-            value_type()
-                : m_val(0)
-            {}
-
-            value_type( int n )
-                : m_val( n )
-            {}
-
-            value_type( value_type&& v )
-                : m_val( v.m_val )
-            {}
-
-            value_type( value_type const& v )
-                : m_val( v.m_val )
-            {}
-
-            value_type& operator=( value_type const& v )
-            {
-                m_val = v.m_val;
-                return *this;
-            }
-        };
-
-        typedef std::pair<key_type const, value_type> pair_type;
-
-        struct less
-        {
-            bool operator ()(int v1, int v2 ) const
-            {
-                return v1 < v2;
-            }
-        };
-
-        struct cmp {
-            int operator ()(int v1, int v2 ) const
-            {
-                if ( v1 < v2 )
-                    return -1;
-                return v1 > v2 ? 1 : 0;
-            }
-        };
-
-        struct equal {
-            bool operator ()(int v1, int v2 ) const
-            {
-                return v1 == v2;
-            }
-        };
-
-        struct hash_int {
-            size_t operator()( int i ) const
-            {
-                return co::v::hash<int>()( i );
-            }
-        };
-
-        struct simple_item_counter {
-            size_t  m_nCount;
-
-            simple_item_counter()
-                : m_nCount(0)
-            {}
-
-            size_t operator ++()
-            {
-                return ++m_nCount;
-            }
-
-            size_t operator --()
-            {
-                return --m_nCount;
-            }
-
-            void reset()
-            {
-                m_nCount = 0;
-            }
-
-            operator size_t() const
-            {
-                return m_nCount;
-            }
-        };
-
-        template <typename Map>
-        struct insert_functor
-        {
-            typedef typename Map::value_type pair_type;
-
-            // insert ftor
-            void operator()( pair_type& item )
-            {
-                item.second.m_val = item.first * 3;
-            }
-
-            // update() ftor
-            void operator()( bool bNew, pair_type& item )
-            {
-                if ( bNew )
-                    item.second.m_val = item.first * 2;
-                else
-                    item.second.m_val = item.first * 5;
-            }
-        };
-
-        struct check_value {
-            int     m_nExpected;
-
-            check_value( int nExpected )
-                : m_nExpected( nExpected )
-            {}
-
-            template <typename T>
-            void operator ()( T& pair )
-            {
-                CPPUNIT_ASSERT_CURRENT( pair.second.m_val == m_nExpected );
-            }
-            template <typename T, typename Q>
-            void operator ()( T& pair, Q )
-            {
-                CPPUNIT_ASSERT_CURRENT( pair.second.m_val == m_nExpected );
-            }
-        };
-
-        struct extract_functor
-        {
-            int *   m_pVal;
-            void operator()( pair_type const& val )
-            {
-                *m_pVal = val.second.m_val;
-            }
-        };
-
-        template <class Map>
-        void test_int_with( Map& m )
-        {
-            std::pair<bool, bool> updateResult;
-
-            // insert
-            CPPUNIT_ASSERT( m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 0 ));
-            CPPUNIT_ASSERT( !m.contains(25) );
-            CPPUNIT_ASSERT( m.insert( 25 ) )    ;   // value = 0
-            CPPUNIT_ASSERT( m.contains(25) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 1 ));
-            CPPUNIT_ASSERT( m.contains(25) );
-
-            CPPUNIT_ASSERT( !m.insert( 25 ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 1 ));
-
-            CPPUNIT_ASSERT( !m.contains(10) );
-            CPPUNIT_ASSERT( m.insert( 10, 10 ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 2 ));
-            CPPUNIT_ASSERT( m.contains(10) );
-
-            CPPUNIT_ASSERT( !m.insert( 10, 20 ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 2 ));
-
-            CPPUNIT_ASSERT( !m.contains(30) );
-            CPPUNIT_ASSERT( m.insert_with( 30, insert_functor<Map>() ) )    ; // value = 90
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-            CPPUNIT_ASSERT( m.contains(30) );
-
-            CPPUNIT_ASSERT( !m.insert_with( 10, insert_functor<Map>() ) );
-            CPPUNIT_ASSERT( !m.insert_with( 25, insert_functor<Map>() ) );
-            CPPUNIT_ASSERT( !m.insert_with( 30, insert_functor<Map>() ) );
-
-            // update() (new key)
-            CPPUNIT_ASSERT( !m.contains(27) );
-            updateResult = m.update(27, insert_functor<Map>(), false);
-            CPPUNIT_ASSERT(!updateResult.first);
-            CPPUNIT_ASSERT(!updateResult.second);
-            CPPUNIT_ASSERT(check_size(m, 3));
-            CPPUNIT_ASSERT(!m.contains(27));
-            updateResult = m.update( 27, insert_functor<Map>() ) ;   // value = 54
-            CPPUNIT_ASSERT( updateResult.first );
-            CPPUNIT_ASSERT( updateResult.second );
-            CPPUNIT_ASSERT( check_size( m, 4 ));
-            CPPUNIT_ASSERT( m.contains(27) );
-
-            // find test
-            check_value chk(10);
-            CPPUNIT_ASSERT( m.find( 10, std::ref(chk) ));
-            chk.m_nExpected = 0;
-            CPPUNIT_ASSERT( m.find( 25, std::ref( chk ) ) );
-            chk.m_nExpected = 90;
-            CPPUNIT_ASSERT( m.find( 30, std::ref( chk ) ) );
-            chk.m_nExpected = 54;
-            CPPUNIT_ASSERT( m.find( 27, std::ref( chk ) ) );
-
-            updateResult = m.update( 10, insert_functor<Map>() ) ;   // value = 50
-            CPPUNIT_ASSERT( updateResult.first );
-            CPPUNIT_ASSERT( !updateResult.second );
-            chk.m_nExpected = 50;
-            CPPUNIT_ASSERT( m.find( 10, std::ref( chk ) ) );
-
-            // erase test
-            CPPUNIT_ASSERT( !m.contains(100) );
-            CPPUNIT_ASSERT( !m.erase( 100 )) ;  // not found
-
-            CPPUNIT_ASSERT( m.contains(25) );
-            CPPUNIT_ASSERT( check_size( m, 4 ));
-            CPPUNIT_ASSERT( m.erase( 25 ));
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-            CPPUNIT_ASSERT( !m.contains(25) );
-            CPPUNIT_ASSERT( !m.erase( 25 ));
-
-            CPPUNIT_ASSERT( !m.contains(258) );
-            CPPUNIT_ASSERT( m.insert(258))
-            CPPUNIT_ASSERT( check_size( m, 4 ));
-            CPPUNIT_ASSERT( m.contains(258) );
-            CPPUNIT_ASSERT( m.erase( 258 ));
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-            CPPUNIT_ASSERT( !m.contains(258) );
-            CPPUNIT_ASSERT( !m.erase( 258 ));
-
-            int nVal;
-            extract_functor ext;
-            ext.m_pVal = &nVal;
-
-            CPPUNIT_ASSERT( !m.contains(29) );
-            CPPUNIT_ASSERT( m.insert(29, 290));
-            CPPUNIT_ASSERT( check_size( m, 4 ));
-            CPPUNIT_ASSERT( m.erase( 29, std::ref( ext ) ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-            CPPUNIT_ASSERT( nVal == 290 );
-            nVal = -1;
-            CPPUNIT_ASSERT( !m.erase( 29, std::ref( ext ) ) );
-            CPPUNIT_ASSERT( nVal == -1 );
-
-            CPPUNIT_ASSERT( m.erase( 30, std::ref( ext ) ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 2 ));
-            CPPUNIT_ASSERT( nVal == 90 );
-            nVal = -1;
-            CPPUNIT_ASSERT( !m.erase( 30, std::ref( ext ) ) );
-            CPPUNIT_ASSERT( nVal == -1 );
-
-            m.clear();
-            CPPUNIT_ASSERT( m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 0 ));
-
-            // emplace test
-            CPPUNIT_ASSERT( m.emplace(126) ) ; // key = 126, val = 0
-            CPPUNIT_ASSERT( m.emplace(137, 731))    ;   // key = 137, val = 731
-            CPPUNIT_ASSERT( m.emplace( 149, value_type(941) ))   ;   // key = 149, val = 941
-
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-
-            chk.m_nExpected = 0;
-            CPPUNIT_ASSERT( m.find( 126, std::ref(chk) ));
-            chk.m_nExpected = 731;
-            CPPUNIT_ASSERT( m.find( 137, std::ref(chk) ));
-            chk.m_nExpected = 941;
-            CPPUNIT_ASSERT( m.find( 149, std::ref(chk) ));
-
-            CPPUNIT_ASSERT( !m.emplace(126, 621)) ; // already in map
-            chk.m_nExpected = 0;
-            CPPUNIT_ASSERT( m.find( 126, std::ref(chk) ));
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-
-            m.clear();
-            CPPUNIT_ASSERT( m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 0 ));
-        }
-
-        template <class Map>
-        void test_iter( Map& s)
-        {
-            typedef typename Map::iterator          iterator;
-            typedef typename Map::const_iterator    const_iterator;
-
-            const int nMaxCount = 500;
-            for ( int i = 0; i < nMaxCount; ++i ) {
-                CPPUNIT_ASSERT( s.insert( i, i * 2 ));
-            }
-
-            int nCount = 0;
-            for ( iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( it->first * 2 == it->second.m_val );
-                CPPUNIT_ASSERT( (*it).first * 2 == (*it).second.m_val );
-                it->second.m_val = it->first;
-                ++nCount;
-            }
-            CPPUNIT_ASSERT( nCount == nMaxCount );
-
-            Map const& refSet = s;
-            nCount = 0;
-            for ( const_iterator it = refSet.begin(), itEnd = refSet.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( it->first == it->second.m_val );
-                CPPUNIT_ASSERT( (*it).first == (*it).second.m_val );
-                ++nCount;
-            }
-            CPPUNIT_ASSERT( nCount == nMaxCount );
-        }
-
-        template <class Map>
-        void test_striped()
-        {
-            Map m( 30 );
-            CPPUNIT_ASSERT( m.bucket_count() == 32 );
-            CPPUNIT_ASSERT( m.lock_count() == 32 );
-
-            test_striped_with(m);
-        }
-
-        template <class Map>
-        void test_striped_with(Map& m)
-        {
-            cds::OS::Timer    timer;
-
-            test_int_with( m );
-
-            // Iterators is not yet supported
-            //m.clear();
-            //CPPUNIT_ASSERT( m.empty() );
-            //CPPUNIT_ASSERT( check_size( m, 0 ));
-            //test_iter(m);
-
-            m.clear();
-            CPPUNIT_ASSERT( m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 0 ));
-
-            // Resizing test
-            for ( int i = 0; i < 40000; i++ ) {
-                m.insert( i );
-            }
-
-            CPPUNIT_MSG( "   Duration=" << timer.duration() );
-        }
-
-        //*******************************************
-        // If erase_with && find_with are supported
-        template <class Map>
-        void test_int_with2( Map& m )
-        {
-            std::pair<bool, bool> updateResult;
-
-            // insert
-            CPPUNIT_ASSERT( m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 0 ));
-            CPPUNIT_ASSERT( !m.contains(25) );
-            CPPUNIT_ASSERT( m.insert( 25 ) )    ;   // value = 0
-            CPPUNIT_ASSERT( m.contains(25) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 1 ));
-            CPPUNIT_ASSERT( m.contains(25) );
-
-            CPPUNIT_ASSERT( !m.insert( 25 ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 1 ));
-
-            CPPUNIT_ASSERT( !m.contains(10, less()) );
-            CPPUNIT_ASSERT( m.insert( 10, 10 ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 2 ));
-            CPPUNIT_ASSERT( m.contains(10, less()) );
-
-            CPPUNIT_ASSERT( !m.insert( 10, 20 ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 2 ));
-
-            CPPUNIT_ASSERT( !m.contains(30) );
-            CPPUNIT_ASSERT( m.insert_with( 30, insert_functor<Map>() ) )    ; // value = 90
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-            CPPUNIT_ASSERT( m.contains(30) );
-
-            CPPUNIT_ASSERT( !m.insert_with( 10, insert_functor<Map>() ) );
-            CPPUNIT_ASSERT( !m.insert_with( 25, insert_functor<Map>() ) );
-            CPPUNIT_ASSERT( !m.insert_with( 30, insert_functor<Map>() ) );
-
-            // update() (new key)
-            CPPUNIT_ASSERT( !m.contains(27) );
-            updateResult = m.update(27, insert_functor<Map>(), false);
-            CPPUNIT_ASSERT(!updateResult.first);
-            CPPUNIT_ASSERT(!updateResult.second);
-            CPPUNIT_ASSERT(!m.contains(27));
-            updateResult = m.update( 27, insert_functor<Map>() ) ;   // value = 54
-            CPPUNIT_ASSERT( updateResult.first );
-            CPPUNIT_ASSERT( updateResult.second );
-            CPPUNIT_ASSERT( m.contains(27) );
-
-            // find test
-            check_value chk(10);
-            CPPUNIT_ASSERT( m.find( 10, std::ref(chk) ));
-            chk.m_nExpected = 0;
-            CPPUNIT_ASSERT( m.find_with( 25, less(), std::ref( chk ) ) );
-            chk.m_nExpected = 90;
-            CPPUNIT_ASSERT( m.find( 30, std::ref( chk ) ) );
-            chk.m_nExpected = 54;
-            CPPUNIT_ASSERT( m.find( 27, std::ref( chk ) ) );
-
-            updateResult = m.update( 10, insert_functor<Map>(), false ) ;   // value = 50
-            CPPUNIT_ASSERT( updateResult.first );
-            CPPUNIT_ASSERT( !updateResult.second );
-            chk.m_nExpected = 50;
-            CPPUNIT_ASSERT( m.find( 10, std::ref( chk ) ) );
-
-            // erase test
-            CPPUNIT_ASSERT( !m.contains(100) );
-            CPPUNIT_ASSERT( !m.erase( 100 )) ;  // not found
-
-            CPPUNIT_ASSERT( m.contains(25) );
-            CPPUNIT_ASSERT( check_size( m, 4 ));
-            CPPUNIT_ASSERT( m.erase( 25 ));
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-            CPPUNIT_ASSERT( !m.contains(25) );
-            CPPUNIT_ASSERT( !m.erase( 25 ));
-
-            CPPUNIT_ASSERT( !m.contains(258) );
-            CPPUNIT_ASSERT( m.insert(258))
-            CPPUNIT_ASSERT( check_size( m, 4 ));
-            CPPUNIT_ASSERT( m.contains(258, less()) );
-            CPPUNIT_ASSERT( m.erase_with( 258, less() ));
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-            CPPUNIT_ASSERT( !m.contains(258) );
-            CPPUNIT_ASSERT( !m.erase_with( 258, less() ));
-
-            int nVal;
-            extract_functor ext;
-            ext.m_pVal = &nVal;
-
-            CPPUNIT_ASSERT( !m.contains(29) );
-            CPPUNIT_ASSERT( m.insert(29, 290))
-                CPPUNIT_ASSERT( m.erase_with( 29, less(), std::ref( ext ) ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-            CPPUNIT_ASSERT( nVal == 290 );
-            nVal = -1;
-            CPPUNIT_ASSERT( !m.erase_with( 29, less(), std::ref( ext ) ) );
-            CPPUNIT_ASSERT( nVal == -1 );
-
-            CPPUNIT_ASSERT( m.erase( 30, std::ref( ext ) ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 2 ));
-            CPPUNIT_ASSERT( nVal == 90 );
-            nVal = -1;
-            CPPUNIT_ASSERT( !m.erase( 30, std::ref( ext ) ) );
-            CPPUNIT_ASSERT( nVal == -1 );
-
-            m.clear();
-            CPPUNIT_ASSERT( m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 0 ));
-
-            // emplace test
-            CPPUNIT_ASSERT( m.emplace(126) ) ; // key = 126, val = 0
-            CPPUNIT_ASSERT( m.emplace(137, 731))    ;   // key = 137, val = 731
-            CPPUNIT_ASSERT( m.emplace( 149, value_type(941) ))   ;   // key = 149, val = 941
-
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-
-            chk.m_nExpected = 0;
-            CPPUNIT_ASSERT( m.find( 126, std::ref(chk) ));
-            chk.m_nExpected = 731;
-            CPPUNIT_ASSERT( m.find_with( 137, less(), std::ref(chk) ));
-            chk.m_nExpected = 941;
-            CPPUNIT_ASSERT( m.find( 149, std::ref(chk) ));
-
-            CPPUNIT_ASSERT( !m.emplace(126, 621)) ; // already in map
-            chk.m_nExpected = 0;
-            CPPUNIT_ASSERT( m.find( 126, std::ref(chk) ));
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-
-            m.clear();
-            CPPUNIT_ASSERT( m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 0 ));
-        }
-
-        template <class Map>
-        void test_striped_with2(Map& m)
-        {
-            cds::OS::Timer    timer;
-
-            test_int_with2( m );
-
-            // Iterators is not yet supported
-            //m.clear();
-            //CPPUNIT_ASSERT( m.empty() );
-            //CPPUNIT_ASSERT( check_size( m, 0 ));
-            //test_iter(m);
-
-            m.clear();
-            CPPUNIT_ASSERT( m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 0 ));
-
-            // Resizing test
-            for ( int i = 0; i < 40000; i++ ) {
-                m.insert( i );
-            }
-
-            CPPUNIT_MSG( "   Duration=" << timer.duration() );
-        }
-
-        template <class Map>
-        void test_striped2()
-        {
-            Map m( 30 );
-            CPPUNIT_ASSERT( m.bucket_count() == 32 );
-            CPPUNIT_ASSERT( m.lock_count() == 32 );
-
-            test_striped_with2(m);
-        }
-
-        void Striped_hashmap();
-        void Striped_list();
-        void Striped_map();
-        void Striped_slist();
-        void Striped_boost_list();
-        void Striped_boost_flat_map();
-        void Striped_boost_map();
-        void Striped_boost_unordered_map();
-
-        void Refinable_hashmap();
-        void Refinable_list();
-        void Refinable_map();
-        void Refinable_slist();
-        void Refinable_boost_list();
-        void Refinable_boost_flat_map();
-        void Refinable_boost_map();
-        void Refinable_boost_unordered_map();
-
-        CPPUNIT_TEST_SUITE(StripedMapHdrTest)
-            CPPUNIT_TEST(Striped_hashmap)
-            CPPUNIT_TEST(Striped_list)
-            CPPUNIT_TEST(Striped_map)
-            CPPUNIT_TEST(Striped_slist)
-            CPPUNIT_TEST(Striped_boost_list)
-            CPPUNIT_TEST(Striped_boost_flat_map)
-            CPPUNIT_TEST(Striped_boost_map)
-            CPPUNIT_TEST(Striped_boost_unordered_map)
-
-            CPPUNIT_TEST(Refinable_hashmap)
-            CPPUNIT_TEST(Refinable_list)
-            CPPUNIT_TEST(Refinable_map)
-            CPPUNIT_TEST(Refinable_slist)
-            CPPUNIT_TEST(Refinable_boost_list)
-            CPPUNIT_TEST(Refinable_boost_flat_map)
-            CPPUNIT_TEST(Refinable_boost_map)
-            CPPUNIT_TEST(Refinable_boost_unordered_map)
-        CPPUNIT_TEST_SUITE_END()
-
-    };
-}   // namespace map
-
-#endif // #ifndef CDSTEST_HDR_STRIPED_MAP_H
diff --git a/tests/test-hdr/map/hdr_striped_map_reg.cpp b/tests/test-hdr/map/hdr_striped_map_reg.cpp
deleted file mode 100644 (file)
index f4c2973..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map/hdr_striped_map.h"
-
-CPPUNIT_TEST_SUITE_REGISTRATION(map::StripedMapHdrTest);
diff --git a/tests/test-hdr/map/print_skiplist_stat.h b/tests/test-hdr/map/print_skiplist_stat.h
deleted file mode 100644 (file)
index 48e8b95..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_MAP_PRINT_SKIPLIST_STAT_H
-#define CDSTEST_HDR_MAP_PRINT_SKIPLIST_STAT_H
-
-#include "unit/print_skip_list_stat.h"
-
-namespace misc {
-
-    template <typename Stat>
-    struct print_skiplist_stat;
-
-    template <>
-    struct print_skiplist_stat< cds::intrusive::skip_list::stat<> >
-    {
-        template <class Set>
-        std::string operator()( Set const& s, const char * pszHdr )
-        {
-            std::stringstream st;
-            if ( pszHdr ) {
-                st << "\t\t" << pszHdr << "\n"
-                    << s.statistics();
-            }
-            else {
-                st << s.statistics();
-            }
-            return st.str();
-        }
-    };
-
-    template<>
-    struct print_skiplist_stat< cds::intrusive::skip_list::empty_stat >
-    {
-        template <class Set>
-        std::string operator()( Set const& /*s*/, const char * /*pszHdr*/ )
-        {
-            return std::string();
-        }
-    };
-
-}   // namespace misc
-
-#endif // #ifndef CDSTEST_HDR_MAP_PRINT_SKIPLIST_STAT_H
diff --git a/tests/test-hdr/misc/allocator_test.cpp b/tests/test-hdr/misc/allocator_test.cpp
deleted file mode 100644 (file)
index 9cd3f2a..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "misc/michael_allocator.h"
-#include <cds/os/timer.h>
-#include <cds/details/allocator.h>
-
-#include "cppunit/cppunit_proxy.h"
-
-namespace misc {
-
-    static size_t s_nPassCount = 10;
-    static unsigned long long s_nAllocPerPass = 1024 * 1024 * 1024;
-
-    static size_t s_nConstructCount = 0;
-    static size_t s_nDestructCount = 0;
-
-    class Allocator_test : public CppUnitMini::TestCase
-    {
-        static const size_t s_nArrSizeSize = 64 * 1024;
-        unsigned int    m_arrSize[s_nArrSizeSize];
-
-        template <typename ALLOC>
-        void alloc_free()
-        {
-            ALLOC a;
-
-            for ( size_t nPass = 0; nPass < s_nPassCount; ++nPass ) {
-                unsigned long long nTotalAllocated = 0;
-                size_t nCurIdx = 0;
-                while ( nTotalAllocated < s_nAllocPerPass ) {
-                    size_t nSize = m_arrSize[nCurIdx] + 4;
-                    char * p = a.allocate( nSize, nullptr );
-                    CPPUNIT_ASSERT( p != nullptr );
-                    memset( p, 0x96, nSize );
-                    nTotalAllocated += nSize;
-                    a.deallocate( p, 1 );
-                    if ( ++nCurIdx > s_nArrSizeSize )
-                        nCurIdx = 0;
-                }
-            }
-        }
-
-        void alloc_free_michael()
-        {
-            std::cout << "\n\tMichael allocator" << std::flush;
-            cds::OS::Timer    timer;
-            alloc_free<MichaelHeap_NoStat<char> >();
-            double fDur = timer.duration();
-            std::cout << "\tduration=" << fDur << std::endl;
-
-            //cds::memory::michael_allocator::statistics st;
-            //s_MichaelAlloc.get_statistics( st );
-        }
-        void alloc_free_std()
-        {
-            std::cout << "\n\tstd::allocator" << std::flush;
-            cds::OS::Timer    timer;
-            alloc_free<std::allocator<char> >();
-            double fDur = timer.duration();
-            std::cout << "\tduration=" << fDur << std::endl;
-        }
-
-        template <typename ALLOC>
-        void alloc_all_free_all()
-        {
-            ALLOC a;
-
-            for ( size_t nPass = 0; nPass < s_nPassCount; ++nPass ) {
-                unsigned long long nTotalAllocated = 0;
-                char * pHead = a.allocate( sizeof(void *), nullptr );
-                CPPUNIT_ASSERT( pHead != nullptr );
-                char * pCur = pHead;
-                size_t nCurIdx = 0;
-                while ( nTotalAllocated < s_nAllocPerPass ) {
-                    size_t nSize = m_arrSize[nCurIdx] + sizeof(void *);
-                    char * p = a.allocate( nSize, nullptr );
-                    CPPUNIT_ASSERT( p != nullptr );
-                    memset( p, 0x96, nSize );
-                    *((char **) pCur) = p;
-                    pCur = p;
-                    nTotalAllocated += nSize;
-                    if ( ++nCurIdx > s_nArrSizeSize )
-                        nCurIdx = 0;
-                }
-                *((char **) pCur) = nullptr;
-
-                pCur = pHead;
-                while ( pCur != nullptr ) {
-                    char * pNext = *((char **) pCur);
-                    a.deallocate( pCur, 0 );
-                    pCur = pNext;
-                }
-            }
-        }
-
-        void alloc_all_free_all_michael()
-        {
-            std::cout << "\n\tMichael allocator" << std::flush;
-            cds::OS::Timer    timer;
-            alloc_all_free_all<MichaelHeap_NoStat<char> >();
-            double fDur = timer.duration();
-            std::cout << "\tduration=" << fDur << std::endl;
-
-            //cds::memory::michael_allocator::statistics st;
-            //s_MichaelAlloc.get_statistics( st );
-        }
-        void alloc_all_free_all_std()
-        {
-            std::cout << "\n\tstd::allocator" << std::flush;
-            cds::OS::Timer    timer;
-            alloc_all_free_all<std::allocator<char> >();
-            double fDur = timer.duration();
-            std::cout << "\tduration=" << fDur << std::endl;
-        }
-
-        struct SimpleStruct
-        {
-            int     n;
-
-            SimpleStruct()
-            {
-                ++s_nConstructCount;
-            }
-
-            ~SimpleStruct()
-            {
-                ++s_nDestructCount;
-            }
-        };
-
-        void test_array()
-        {
-            size_t const nArraySize = 10;
-
-            SimpleStruct * pArr;
-            cds::details::Allocator<SimpleStruct>  a;
-            pArr = a.NewArray( nArraySize );
-            a.Delete( pArr, nArraySize );
-
-            CPPUNIT_ASSERT( s_nConstructCount == nArraySize );
-            CPPUNIT_ASSERT( s_nConstructCount == s_nDestructCount );
-        }
-
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg )
-        {
-            s_nPassCount = cfg.getULong( "PassCount", 10 );
-            s_nAllocPerPass = cfg.getULong( "AllocPerPass", 1024 ) * 1024 * 1024;
-        }
-
-    public:
-        Allocator_test()
-        {
-            CPPUNIT_ASSERT( s_nArrSizeSize == sizeof(m_arrSize) / sizeof(m_arrSize[0]) );
-            for ( size_t i = 0; i < s_nArrSizeSize; ++i )
-                m_arrSize[i] = rand();
-        }
-
-        CPPUNIT_TEST_SUITE(Allocator_test);
-            CPPUNIT_TEST(test_array)
-            CPPUNIT_TEST(alloc_free_michael)
-            CPPUNIT_TEST(alloc_free_std)
-            CPPUNIT_TEST(alloc_all_free_all_michael)
-            CPPUNIT_TEST(alloc_all_free_all_std)
-        CPPUNIT_TEST_SUITE_END();
-    };
-}   // namespace memory
-CPPUNIT_TEST_SUITE_REGISTRATION( misc::Allocator_test );
diff --git a/tests/test-hdr/misc/bitop_st.cpp b/tests/test-hdr/misc/bitop_st.cpp
deleted file mode 100644 (file)
index f054665..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/cppunit_proxy.h"
-
-#include <cds/algo/int_algo.h>
-#include <cds/os/timer.h>
-
-class bitop_ST : public CppUnitMini::TestCase
-{
-protected:
-    void bitop32()
-    {
-        uint32_t    n;
-        n = 0;
-        CPPUNIT_ASSERT_EX( cds::bitop::MSB(n) == 0, "n=" << n );
-        CPPUNIT_ASSERT_EX( cds::bitop::LSB(n) == 0, "n=" << n );
-        CPPUNIT_ASSERT_EX( cds::bitop::SBC(n) == 0, "n=" << n );
-        CPPUNIT_ASSERT_EX( cds::bitop::ZBC(n) == sizeof(n) * 8, "n=" << n );
-
-        int nBit = 1;
-        for ( n = 1; n != 0; n *= 2 ) {
-            CPPUNIT_ASSERT_EX( cds::bitop::MSB(n) == nBit, "n=" << n );
-            CPPUNIT_ASSERT_EX( cds::bitop::LSB(n) == nBit, "n=" << n );
-            CPPUNIT_ASSERT_EX( cds::bitop::MSBnz(n) == nBit - 1, "n=" << n );
-            CPPUNIT_ASSERT_EX( cds::bitop::LSBnz(n) == nBit - 1, "n=" << n );
-            CPPUNIT_ASSERT_EX( cds::bitop::SBC(n) == 1, "n=" << n );
-            CPPUNIT_ASSERT_EX( cds::bitop::ZBC(n) == sizeof(n) * 8 - 1, "n=" << n );
-
-            ++nBit;
-        }
-    }
-
-    void bitop64()
-    {
-        uint64_t n;
-        n = 0;
-        CPPUNIT_ASSERT_EX( cds::bitop::MSB(n) == 0, "n=" << n );
-        CPPUNIT_ASSERT_EX( cds::bitop::LSB(n) == 0, "n=" << n );
-        CPPUNIT_ASSERT_EX( cds::bitop::SBC(n) == 0, "n=" << n );
-        CPPUNIT_ASSERT_EX( cds::bitop::ZBC(n) == sizeof(n) * 8, "n=" << n );
-
-        int nBit = 1;
-        for ( n = 1; n != 0; n *= 2 ) {
-            CPPUNIT_ASSERT_EX( cds::bitop::MSB(n) == nBit, "n=" << n );
-            CPPUNIT_ASSERT_EX( cds::bitop::LSB(n) == nBit, "n=" << n );
-            CPPUNIT_ASSERT_EX( cds::bitop::MSBnz(n) == nBit - 1, "n=" << n );
-            CPPUNIT_ASSERT_EX( cds::bitop::LSBnz(n) == nBit - 1, "n=" << n );
-            CPPUNIT_ASSERT_EX( cds::bitop::SBC(n) == 1, "n=" << n );
-            CPPUNIT_ASSERT_EX( cds::bitop::ZBC(n) == sizeof(n) * 8 - 1, "n=" << n );
-
-            ++nBit;
-        }
-    }
-
-    void floor_ceil_pow2()
-    {
-        CPPUNIT_CHECK_EX( cds::beans::floor2(0) == 1, "floor2(0) = " << cds::beans::floor2(0) << ", expected 1" );
-        CPPUNIT_CHECK_EX( cds::beans::floor2(1) == 1, "floor2(1) = " << cds::beans::floor2(1) << ", expected 1" );
-        CPPUNIT_CHECK_EX( cds::beans::floor2(2) == 2, "floor2(2) = " << cds::beans::floor2(2) << ", expected 2" );
-        CPPUNIT_CHECK_EX( cds::beans::floor2(3) == 2, "floor2(3) = " << cds::beans::floor2(3) << ", expected 2" );
-        CPPUNIT_CHECK_EX( cds::beans::floor2(4) == 4, "floor2(4) = " << cds::beans::floor2(4) << ", expected 4" );
-        CPPUNIT_CHECK_EX( cds::beans::floor2(5) == 4, "floor2(5) = " << cds::beans::floor2(5) << ", expected 4" );
-        CPPUNIT_CHECK_EX( cds::beans::floor2(7) == 4, "floor2(7) = " << cds::beans::floor2(7) << ", expected 4" );
-        CPPUNIT_CHECK_EX( cds::beans::floor2(8) == 8, "floor2(8) = " << cds::beans::floor2(8) << ", expected 8" );
-        CPPUNIT_CHECK_EX( cds::beans::floor2(9) == 8, "floor2(9) = " << cds::beans::floor2(9) << ", expected 8" );
-
-        CPPUNIT_CHECK_EX( cds::beans::ceil2(0) == 1, "ceil2(0) = " << cds::beans::ceil2(0) << ", expected 1" );
-        CPPUNIT_CHECK_EX( cds::beans::ceil2(1) == 1, "ceil2(1) = " << cds::beans::ceil2(1) << ", expected 1" );
-        CPPUNIT_CHECK_EX( cds::beans::ceil2(2) == 2, "ceil2(2) = " << cds::beans::ceil2(2) << ", expected 2" );
-        CPPUNIT_CHECK_EX( cds::beans::ceil2(3) == 4, "ceil2(3) = " << cds::beans::ceil2(3) << ", expected 4" );
-        CPPUNIT_CHECK_EX( cds::beans::ceil2(4) == 4, "ceil2(4) = " << cds::beans::ceil2(4) << ", expected 4" );
-        CPPUNIT_CHECK_EX( cds::beans::ceil2(5) == 8, "ceil2(5) = " << cds::beans::ceil2(5) << ", expected 8" );
-        CPPUNIT_CHECK_EX( cds::beans::ceil2(7) == 8, "ceil2(7) = " << cds::beans::ceil2(7) << ", expected 8" );
-        CPPUNIT_CHECK_EX( cds::beans::ceil2(8) == 8, "ceil2(8) = " << cds::beans::ceil2(8) << ", expected 8" );
-        CPPUNIT_CHECK_EX( cds::beans::ceil2(9) == 16, "ceil2(9) = " << cds::beans::ceil2(16) << ", expected 16" );
-    }
-
-    CPPUNIT_TEST_SUITE(bitop_ST);
-        CPPUNIT_TEST(bitop32)
-        CPPUNIT_TEST(bitop64)
-        CPPUNIT_TEST(floor_ceil_pow2)
-    CPPUNIT_TEST_SUITE_END();
-};
-
-CPPUNIT_TEST_SUITE_REGISTRATION(bitop_ST);
diff --git a/tests/test-hdr/misc/cxx11_atomic_class.cpp b/tests/test-hdr/misc/cxx11_atomic_class.cpp
deleted file mode 100644 (file)
index 8dcdbc0..0000000
+++ /dev/null
@@ -1,778 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/cppunit_proxy.h"
-
-#include <cds/algo/atomic.h>
-
-#include "misc/cxx11_convert_memory_order.h"
-
-namespace misc {
-    class cxx11_atomic_class: public CppUnitMini::TestCase
-    {
-        template <typename AtomicFlag>
-        void do_test_atomic_flag_mo( AtomicFlag& f, atomics::memory_order order )
-        {
-            atomics::memory_order mo_clear = convert_to_store_order(order);
-            for ( int i = 0; i < 5; ++i ) {
-                CPPUNIT_ASSERT( !f.test_and_set( order ));
-                CPPUNIT_ASSERT( f.test_and_set( order ) );
-                f.clear( mo_clear );
-            }
-        }
-
-        template <typename AtomicFlag>
-        void do_test_atomic_flag( AtomicFlag& f)
-        {
-            f.clear();
-
-            for ( int i = 0; i < 5; ++i ) {
-                CPPUNIT_ASSERT( !f.test_and_set());
-                CPPUNIT_ASSERT( f.test_and_set() );
-                f.clear();
-            }
-
-            do_test_atomic_flag_mo( f, atomics::memory_order_relaxed );
-            //do_test_atomic_flag_mo( f, atomics::memory_order_consume );
-            do_test_atomic_flag_mo( f, atomics::memory_order_acquire );
-            do_test_atomic_flag_mo( f, atomics::memory_order_release );
-            do_test_atomic_flag_mo( f, atomics::memory_order_acq_rel );
-            do_test_atomic_flag_mo( f, atomics::memory_order_seq_cst );
-        }
-
-        template <class Atomic, typename Integral>
-        void do_test_atomic_type(Atomic& a)
-        {
-            typedef Integral    integral_type;
-
-            CPPUNIT_ASSERT( a.is_lock_free() );
-            a.store( (integral_type) 0 );
-            CPPUNIT_ASSERT( a == 0 );
-            CPPUNIT_ASSERT( a.load() == 0 );
-
-            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
-                integral_type n = integral_type(42) << (nByte * 8);
-                CPPUNIT_ASSERT( a.exchange( n ) == 0 );
-                CPPUNIT_ASSERT( a == n );
-                CPPUNIT_ASSERT( a.exchange( (integral_type) 0 ) == n );
-                CPPUNIT_ASSERT( a.load() == 0 );
-            }
-
-            integral_type prev = a.load();
-            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
-                integral_type n = integral_type(42) << (nByte * 8);
-                integral_type expected = prev;
-
-                CPPUNIT_ASSERT( a.compare_exchange_weak( expected, n));
-                CPPUNIT_ASSERT( expected  == prev );
-                CPPUNIT_ASSERT( !a.compare_exchange_weak( expected, n));
-                CPPUNIT_ASSERT( expected  == n );
-
-                prev = n;
-                CPPUNIT_ASSERT( a == n );
-            }
-
-            a = (integral_type) 0;
-
-            prev = a;
-            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
-                integral_type n = integral_type(42) << (nByte * 8);
-                integral_type expected = prev;
-
-                CPPUNIT_ASSERT( a.compare_exchange_strong( expected, n));
-                CPPUNIT_ASSERT( expected  == prev );
-                CPPUNIT_ASSERT( !a.compare_exchange_strong( expected, n));
-                CPPUNIT_ASSERT( expected  == n );
-
-                prev = n;
-                CPPUNIT_ASSERT( a.load() == n );
-            }
-
-            CPPUNIT_ASSERT( a.exchange( (integral_type) 0 ) == prev );
-        }
-
-        template <class Atomic, typename Integral>
-        void do_test_atomic_integral(Atomic& a)
-        {
-            do_test_atomic_type< Atomic, Integral >(a);
-
-            typedef Integral    integral_type;
-
-            // fetch_xxx testing
-            a.store( (integral_type) 0 );
-
-            // fetch_add
-            for ( size_t nByte = 0; nByte < sizeof(integral_type); ++nByte )
-            {
-                integral_type prev = a.load();
-                integral_type n = integral_type(42) << (nByte * 8);
-
-                CPPUNIT_ASSERT( a.fetch_add(n) == prev);
-            }
-
-            // fetch_sub
-            for ( size_t nByte = sizeof(integral_type); nByte > 0; --nByte )
-            {
-                integral_type prev = a.load();
-                integral_type n = integral_type(42) << ((nByte - 1) * 8);
-
-                CPPUNIT_ASSERT( a.fetch_sub(n) == prev);
-            }
-            CPPUNIT_ASSERT( a.load() == 0 );
-
-            // fetch_or / fetc_xor / fetch_and
-            for ( size_t nBit = 0; nBit < sizeof(integral_type) * 8; ++nBit )
-            {
-                integral_type prev = a.load()  ;;
-                integral_type mask = 1 << nBit;
-
-                CPPUNIT_ASSERT( a.fetch_or( mask ) == prev );
-                prev = a.load();
-                CPPUNIT_ASSERT( ( prev & mask)  == mask);
-
-                CPPUNIT_ASSERT( a.fetch_and( (integral_type) ~mask ) == prev );
-                prev = a.load();
-                CPPUNIT_ASSERT( integral_type(prev & mask) == integral_type(0));
-
-                CPPUNIT_ASSERT( a.fetch_xor( mask ) == prev );
-                prev = a.load();
-                CPPUNIT_ASSERT( integral_type( prev & mask)  == mask);
-            }
-            CPPUNIT_ASSERT( a.load() == (integral_type) -1 );
-
-
-            // op= testing
-            a = (integral_type) 0;
-
-            // +=
-            for ( size_t nByte = 0; nByte < sizeof(integral_type); ++nByte )
-            {
-                integral_type prev = a;
-                integral_type n = integral_type(42) << (nByte * 8);
-
-                CPPUNIT_ASSERT( (a += n) == (prev + n));
-            }
-
-            // -=
-            for ( size_t nByte = sizeof(integral_type); nByte > 0; --nByte )
-            {
-                integral_type prev = a;
-                integral_type n = integral_type(42) << ((nByte - 1) * 8);
-
-                CPPUNIT_ASSERT( (a -= n) == prev - n );
-            }
-            CPPUNIT_ASSERT( a.load() == 0 );
-
-            // |= / ^= / &=
-            for ( size_t nBit = 0; nBit < sizeof(integral_type) * 8; ++nBit )
-            {
-                integral_type prev = a;
-                integral_type mask = integral_type(1) << nBit;
-
-                CPPUNIT_ASSERT( (a |= mask ) == (prev | mask ));
-                prev = a;
-                CPPUNIT_ASSERT( ( prev & mask)  == mask);
-
-                CPPUNIT_ASSERT( (a &= (integral_type) ~mask ) == ( prev & (integral_type) ~mask ));
-                prev = a;
-                CPPUNIT_ASSERT( ( prev & mask)  == 0);
-
-                CPPUNIT_ASSERT( (a ^= mask ) == (prev ^ mask ));
-                prev = a;
-                CPPUNIT_ASSERT( ( prev & mask)  == mask);
-            }
-            CPPUNIT_ASSERT( a == (integral_type) -1 );
-        }
-
-        template <class Atomic, typename Integral>
-        void do_test_atomic_type( Atomic& a, atomics::memory_order order )
-        {
-            typedef Integral    integral_type;
-
-            const atomics::memory_order oLoad = convert_to_load_order( order );
-            const atomics::memory_order oStore = convert_to_store_order( order );
-
-            CPPUNIT_ASSERT( a.is_lock_free() );
-            a.store((integral_type) 0, oStore );
-            CPPUNIT_ASSERT( a == 0 );
-            CPPUNIT_ASSERT( a.load( oLoad ) == 0 );
-
-            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
-                integral_type n = integral_type(42) << (nByte * 8);
-                CPPUNIT_ASSERT( a.exchange( n, order ) == 0 );
-                CPPUNIT_ASSERT( a.load( oLoad ) == n );
-                CPPUNIT_ASSERT( a.exchange( (integral_type) 0, order ) == n );
-                CPPUNIT_ASSERT( a.load( oLoad ) == 0 );
-            }
-
-            integral_type prev = a.load( oLoad );
-            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
-                integral_type n = integral_type(42) << (nByte * 8);
-                integral_type expected = prev;
-
-                CPPUNIT_ASSERT( a.compare_exchange_weak( expected, n, order, atomics::memory_order_relaxed));
-                CPPUNIT_ASSERT( expected  == prev );
-                CPPUNIT_ASSERT( !a.compare_exchange_weak( expected, n, order, atomics::memory_order_relaxed));
-                CPPUNIT_ASSERT( expected  == n );
-
-                prev = n;
-                CPPUNIT_ASSERT( a.load( oLoad ) == n );
-            }
-
-            a.store( (integral_type) 0, oStore );
-
-            prev = a.load( oLoad );
-            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
-                integral_type n = integral_type(42) << (nByte * 8);
-                integral_type expected = prev;
-
-                CPPUNIT_ASSERT( a.compare_exchange_strong( expected, n, order, atomics::memory_order_relaxed));
-                CPPUNIT_ASSERT( expected  == prev );
-                CPPUNIT_ASSERT( !a.compare_exchange_strong( expected, n, order, atomics::memory_order_relaxed));
-                CPPUNIT_ASSERT( expected  == n );
-
-                prev = n;
-                CPPUNIT_ASSERT( a.load( oLoad ) == n );
-            }
-
-            CPPUNIT_ASSERT( a.exchange( (integral_type) 0, order ) == prev );
-        }
-
-        template <class Atomic, typename Integral>
-        void do_test_atomic_integral( Atomic& a, atomics::memory_order order )
-        {
-            do_test_atomic_type< Atomic, Integral >( a, order );
-
-            typedef Integral    integral_type;
-
-            const atomics::memory_order oLoad = convert_to_load_order( order );
-            const atomics::memory_order oStore = convert_to_store_order( order );
-
-            // fetch_xxx testing
-            a.store( (integral_type) 0, oStore );
-
-            // fetch_add
-            for ( size_t nByte = 0; nByte < sizeof(integral_type); ++nByte )
-            {
-                integral_type prev = a.load( oLoad );
-                integral_type n = integral_type(42) << (nByte * 8);
-
-                CPPUNIT_ASSERT( a.fetch_add( n, order) == prev);
-            }
-
-            // fetch_sub
-            for ( size_t nByte = sizeof(integral_type); nByte > 0; --nByte )
-            {
-                integral_type prev = a.load( oLoad );
-                integral_type n = integral_type(42) << ((nByte - 1) * 8);
-
-                CPPUNIT_ASSERT( a.fetch_sub( n, order ) == prev);
-            }
-            CPPUNIT_ASSERT( a.load( oLoad ) == 0 );
-
-            // fetch_or / fetc_xor / fetch_and
-            for ( size_t nBit = 0; nBit < sizeof(integral_type) * 8; ++nBit )
-            {
-                integral_type prev = a.load( oLoad )  ;;
-                integral_type mask = 1 << nBit;
-
-                CPPUNIT_ASSERT( a.fetch_or( mask, order ) == prev );
-                prev = a.load( oLoad );
-                CPPUNIT_ASSERT( ( prev & mask)  == mask);
-
-                CPPUNIT_ASSERT( a.fetch_and( (integral_type) ~mask, order ) == prev );
-                prev = a.load( oLoad );
-                CPPUNIT_ASSERT( ( prev & mask)  == 0);
-
-                CPPUNIT_ASSERT( a.fetch_xor( mask, order ) == prev );
-                prev = a.load( oLoad );
-                CPPUNIT_ASSERT( ( prev & mask)  == mask);
-            }
-            CPPUNIT_ASSERT( a.load( oLoad ) == (integral_type) -1 );
-        }
-
-
-
-        template <typename Atomic, typename Integral>
-        void test_atomic_integral_(Atomic& a)
-        {
-            do_test_atomic_integral<Atomic, Integral >(a);
-
-            do_test_atomic_integral<Atomic, Integral >( a, atomics::memory_order_relaxed );
-//#if !(CDS_COMPILER == CDS_COMPILER_GCC && CDS_COMPILER_VERSION < 40900)
-//            do_test_atomic_integral<Atomic, Integral >( a, atomics::memory_order_consume );
-//#endif
-            do_test_atomic_integral<Atomic, Integral >( a, atomics::memory_order_acquire );
-            do_test_atomic_integral<Atomic, Integral >( a, atomics::memory_order_release );
-            do_test_atomic_integral<Atomic, Integral >( a, atomics::memory_order_acq_rel );
-            do_test_atomic_integral<Atomic, Integral >( a, atomics::memory_order_seq_cst );
-        }
-
-        template <typename Integral>
-        void test_atomic_integral()
-        {
-            typedef atomics::atomic<Integral> atomic_type;
-
-            atomic_type a[8];
-            for ( size_t i = 0; i < sizeof(a)/sizeof(a[0]); ++i ) {
-                test_atomic_integral_<atomic_type, Integral>( a[i] );
-            }
-        }
-        template <typename Integral>
-        void test_atomic_integral_volatile()
-        {
-            typedef atomics::atomic<Integral> volatile atomic_type;
-
-            atomic_type a[8];
-            for ( size_t i = 0; i < sizeof(a)/sizeof(a[0]); ++i ) {
-                test_atomic_integral_<atomic_type, Integral>( a[i] );
-            }
-        }
-
-        template <class AtomicBool>
-        void do_test_atomic_bool( AtomicBool& a )
-        {
-            CPPUNIT_ASSERT( a.is_lock_free() );
-            a.store( false );
-            CPPUNIT_ASSERT( a == false );
-            CPPUNIT_ASSERT( a.load() == false );
-
-            CPPUNIT_ASSERT( a.exchange( true ) == false );
-            CPPUNIT_ASSERT( a.load() == true );
-            CPPUNIT_ASSERT( a.exchange( false ) == true );
-            CPPUNIT_ASSERT( a.load() == false );
-
-            bool expected = false;
-            CPPUNIT_ASSERT( a.compare_exchange_weak( expected, true));
-            CPPUNIT_ASSERT( expected  == false );
-            CPPUNIT_ASSERT( !a.compare_exchange_weak( expected, false));
-            CPPUNIT_ASSERT( expected  == true );
-            CPPUNIT_ASSERT( a.load() == true );
-
-            a.store( false );
-
-            expected = false;
-            CPPUNIT_ASSERT( a.compare_exchange_strong( expected, true));
-            CPPUNIT_ASSERT( expected  == false );
-            CPPUNIT_ASSERT( !a.compare_exchange_strong( expected, false));
-            CPPUNIT_ASSERT( expected  == true );
-
-            CPPUNIT_ASSERT( a.load() == true );
-
-            CPPUNIT_ASSERT( a.exchange( false ) == true );
-        }
-
-        template <class AtomicBool>
-        void do_test_atomic_bool( AtomicBool& a, atomics::memory_order order )
-        {
-            const atomics::memory_order oLoad = convert_to_load_order( order );
-            const atomics::memory_order oStore = convert_to_store_order( order );
-            const atomics::memory_order oExchange = convert_to_exchange_order( order );
-
-            CPPUNIT_ASSERT( a.is_lock_free() );
-            a.store( false, oStore );
-            CPPUNIT_ASSERT( a == false );
-            CPPUNIT_ASSERT( a.load( oLoad ) == false );
-
-            CPPUNIT_ASSERT( a.exchange( true, oExchange ) == false );
-            CPPUNIT_ASSERT( a.load( oLoad ) == true );
-            CPPUNIT_ASSERT( a.exchange( false, oExchange ) == true );
-            CPPUNIT_ASSERT( a.load( oLoad ) == false );
-
-            bool expected = false;
-            CPPUNIT_ASSERT( a.compare_exchange_weak( expected, true, order, atomics::memory_order_relaxed));
-            CPPUNIT_ASSERT( expected  == false );
-            CPPUNIT_ASSERT( !a.compare_exchange_weak( expected, false, order, atomics::memory_order_relaxed));
-            CPPUNIT_ASSERT( expected  == true );
-            CPPUNIT_ASSERT( a.load( oLoad ) == true );
-
-            //a = bool(false);
-            a.store( false, oStore );
-
-            expected = false;
-            CPPUNIT_ASSERT( a.compare_exchange_strong( expected, true, order, atomics::memory_order_relaxed));
-            CPPUNIT_ASSERT( expected  == false );
-            CPPUNIT_ASSERT( !a.compare_exchange_strong( expected, false, order, atomics::memory_order_relaxed));
-            CPPUNIT_ASSERT( expected  == true );
-
-            CPPUNIT_ASSERT( a.load( oLoad ) == true );
-
-            CPPUNIT_ASSERT( a.exchange( false, oExchange ) == true );
-        }
-
-
-        template <typename Atomic>
-        void do_test_atomic_pointer_void_( Atomic& a, char * arr, char aSize, atomics::memory_order order )
-        {
-            atomics::memory_order oLoad = convert_to_load_order(order);
-            atomics::memory_order oStore = convert_to_store_order(order);
-            void *  p;
-
-            a.store( (void *) arr, oStore );
-            CPPUNIT_ASSERT( *reinterpret_cast<char *>(a.load( oLoad )) == 1 );
-
-            p = arr;
-            CPPUNIT_ASSERT( a.compare_exchange_weak( p, (void *)(arr + 5), order, atomics::memory_order_relaxed ));
-            CPPUNIT_ASSERT( p == arr + 0 );
-            CPPUNIT_ASSERT( *reinterpret_cast<char *>(p) == 1 );
-            CPPUNIT_ASSERT( !a.compare_exchange_weak( p, (void *)(arr + 3), order, atomics::memory_order_relaxed ));
-            CPPUNIT_ASSERT( p == arr + 5 );
-            CPPUNIT_ASSERT( *reinterpret_cast<char *>(p) == 6 );
-
-            CPPUNIT_ASSERT( a.compare_exchange_strong( p, (void *)(arr + 3), order, atomics::memory_order_relaxed ));
-            CPPUNIT_ASSERT( p == arr + 5 );
-            CPPUNIT_ASSERT( *reinterpret_cast<char *>(p) == 6 );
-            CPPUNIT_ASSERT( !a.compare_exchange_strong( p, (void *)(arr + 5), order, atomics::memory_order_relaxed ));
-            CPPUNIT_ASSERT( p == arr + 3 );
-            CPPUNIT_ASSERT( *reinterpret_cast<char *>(p) == 4 );
-
-            CPPUNIT_ASSERT( reinterpret_cast<char *>(a.exchange( (void *) arr, order )) == arr + 3 );
-            CPPUNIT_ASSERT( reinterpret_cast<char *>(a.load( oLoad )) == arr );
-            CPPUNIT_ASSERT( *reinterpret_cast<char *>(a.load( oLoad )) == 1 );
-
-            for ( char i = 1; i < aSize; ++i ) {
-                CPPUNIT_ASSERT( *reinterpret_cast<char *>(a.load( oLoad )) == i );
-                CPPUNIT_ASSERT( a.fetch_add( 1, order ));
-                CPPUNIT_ASSERT( *reinterpret_cast<char *>(a.load( oLoad )) == i + 1 );
-            }
-
-            for ( char i = aSize; i > 1; --i ) {
-                CPPUNIT_ASSERT( *reinterpret_cast<char *>(a.load( oLoad )) == i  );
-                CPPUNIT_ASSERT( a.fetch_sub( 1, order ));
-                CPPUNIT_ASSERT( *reinterpret_cast<char *>(a.load( oLoad )) == i - 1 );
-            }
-        }
-
-        template <bool Volatile>
-        void do_test_atomic_pointer_void()
-        {
-            typedef typename add_volatile<atomics::atomic< void *>, Volatile>::type    atomic_pointer;
-
-            char   arr[8];
-            const char aSize = sizeof(arr)/sizeof(arr[0]);
-            for ( char i = 0; i < aSize; ++i ) {
-                arr[unsigned(i)] = i + 1;
-            }
-
-            atomic_pointer  a;
-            void *  p;
-
-#if CDS_BUILD_BITS == 32 && !( CDS_COMPILER == CDS_COMPILER_GCC && CDS_COMPILER_VERSION == 40700 )
-            /* GCC 4.7.0 has an linktime error in 32bit x86 mode:
-
-            ../tests/test-hdr/misc/cxx11_atomic_class.o: In function `std::__atomic_base<void*>::is_lock_free() const':
-            /usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.7.0/../../../../include/c++/4.7.0/bits/atomic_base.h:719: undefined reference to `__atomic_is_lock_free'
-
-            ../tests/test-hdr/misc/cxx11_atomic_class.o: In function `std::__atomic_base<void*>::is_lock_free() const volatile':
-            /usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.7.0/../../../../include/c++/4.7.0/bits/atomic_base.h:723: undefined reference to `__atomic_is_lock_free'
-
-            */
-            CPPUNIT_ASSERT( a.is_lock_free() );
-#endif
-
-            a.store( (void *) arr );
-            CPPUNIT_ASSERT( *reinterpret_cast<char *>(a.load()) == 1 );
-
-            p = arr;
-            CPPUNIT_ASSERT( a.compare_exchange_weak( p, (void *)(arr + 5) ));
-            CPPUNIT_ASSERT( p == arr + 0 );
-            CPPUNIT_ASSERT( !a.compare_exchange_weak( p, (void *)(arr + 3) ));
-            CPPUNIT_ASSERT( p == arr + 5 );
-
-            CPPUNIT_ASSERT( a.compare_exchange_strong( p, (void *)(arr + 3) ));
-            CPPUNIT_ASSERT( p == arr + 5 );
-            CPPUNIT_ASSERT( !a.compare_exchange_strong( p, (void *)(arr + 5) ));
-            CPPUNIT_ASSERT( p == arr + 3 );
-
-            CPPUNIT_ASSERT( reinterpret_cast<char *>( a.exchange( (void *) arr )) == arr + 3 );
-            CPPUNIT_ASSERT( reinterpret_cast<char *>( a.load()) == arr );
-            CPPUNIT_ASSERT( *reinterpret_cast<char *>( a.load()) == 1 );
-
-            for ( char i = 1; i < aSize; ++i ) {
-                CPPUNIT_ASSERT( *reinterpret_cast<char *>(a.load()) == i );
-                CPPUNIT_ASSERT( a.fetch_add( 1 ));
-                CPPUNIT_ASSERT( *reinterpret_cast<char *>(a.load()) == i + 1 );
-            }
-
-            for ( char i = aSize; i > 1; --i ) {
-                CPPUNIT_ASSERT( *reinterpret_cast<char *>(a.load()) == i  );
-                CPPUNIT_ASSERT( a.fetch_sub( 1 ));
-                CPPUNIT_ASSERT( *reinterpret_cast<char *>(a.load()) == i - 1 );
-            }
-
-            do_test_atomic_pointer_void_( a, arr, aSize, atomics::memory_order_relaxed );
-            //do_test_atomic_pointer_void_( a, arr, aSize, atomics::memory_order_consume );
-            do_test_atomic_pointer_void_( a, arr, aSize, atomics::memory_order_acquire );
-            do_test_atomic_pointer_void_( a, arr, aSize, atomics::memory_order_release );
-            do_test_atomic_pointer_void_( a, arr, aSize, atomics::memory_order_acq_rel );
-            do_test_atomic_pointer_void_( a, arr, aSize, atomics::memory_order_seq_cst );
-        }
-
-        template <typename Atomic, typename Integral>
-        void test_atomic_pointer_for_( Atomic& a, Integral * arr, Integral aSize, atomics::memory_order order )
-        {
-            typedef Integral integral_type;
-            atomics::memory_order oLoad = convert_to_load_order(order);
-            atomics::memory_order oStore = convert_to_store_order(order);
-            integral_type *  p;
-
-            a.store( arr, oStore );
-            CPPUNIT_ASSERT( *a.load( oLoad ) == 1 );
-
-            p = arr;
-            CPPUNIT_ASSERT( a.compare_exchange_weak( p, arr + 5, order, atomics::memory_order_relaxed ));
-            CPPUNIT_ASSERT( p == arr + 0 );
-            CPPUNIT_ASSERT( *p == 1 );
-            CPPUNIT_ASSERT( !a.compare_exchange_weak( p, arr + 3, order, atomics::memory_order_relaxed ));
-            CPPUNIT_ASSERT( p == arr + 5 );
-            CPPUNIT_ASSERT( *p == 6 );
-
-            CPPUNIT_ASSERT( a.compare_exchange_strong( p, arr + 3, order, atomics::memory_order_relaxed ));
-            CPPUNIT_ASSERT( p == arr + 5 );
-            CPPUNIT_ASSERT( *p == 6 );
-            CPPUNIT_ASSERT( !a.compare_exchange_strong( p, arr + 5, order, atomics::memory_order_relaxed ));
-            CPPUNIT_ASSERT( p == arr + 3 );
-            CPPUNIT_ASSERT( *p == 4 );
-
-            CPPUNIT_ASSERT( a.exchange( arr, order ) == arr + 3 );
-            CPPUNIT_ASSERT( a.load( oLoad ) == arr );
-            CPPUNIT_ASSERT( *a.load( oLoad ) == 1 );
-
-            for ( integral_type i = 1; i < aSize; ++i ) {
-                integral_type * p = a.load();
-                CPPUNIT_ASSERT( *p == i );
-                CPPUNIT_ASSERT( a.fetch_add( 1, order ) == p  );
-                CPPUNIT_ASSERT( *a.load( oLoad ) == i + 1 );
-            }
-
-            for ( integral_type i = aSize; i > 1; --i ) {
-                integral_type * p = a.load();
-                CPPUNIT_ASSERT( *p == i  );
-                CPPUNIT_ASSERT( a.fetch_sub( 1, order ) == p );
-                CPPUNIT_ASSERT( *a.load( oLoad ) == i - 1 );
-            }
-        }
-
-        template <typename Integral, bool Volatile>
-        void test_atomic_pointer_for()
-        {
-            typedef Integral integral_type;
-            typedef typename add_volatile<atomics::atomic< integral_type *>, Volatile>::type    atomic_pointer;
-
-            integral_type   arr[8];
-            const integral_type aSize = sizeof(arr)/sizeof(arr[0]);
-            for ( integral_type i = 0; i < aSize; ++i ) {
-                arr[size_t(i)] = i + 1;
-            }
-
-            atomic_pointer  a;
-            integral_type *  p;
-
-            a.store( arr );
-            CPPUNIT_ASSERT( *a.load() == 1 );
-
-            p = arr;
-            CPPUNIT_ASSERT( a.compare_exchange_weak( p, arr + 5 ));
-            CPPUNIT_ASSERT( p == arr + 0 );
-            CPPUNIT_ASSERT( *p == 1 );
-            CPPUNIT_ASSERT( !a.compare_exchange_weak( p, arr + 3 ));
-            CPPUNIT_ASSERT( p == arr + 5 );
-            CPPUNIT_ASSERT( *p == 6 );
-
-            CPPUNIT_ASSERT( a.compare_exchange_strong( p, arr + 3 ));
-            CPPUNIT_ASSERT( p == arr + 5 );
-            CPPUNIT_ASSERT( *p == 6 );
-            CPPUNIT_ASSERT( !a.compare_exchange_strong( p, arr + 5 ));
-            CPPUNIT_ASSERT( p == arr + 3 );
-            CPPUNIT_ASSERT( *p == 4 );
-
-            CPPUNIT_ASSERT( a.exchange( arr ) == arr + 3 );
-            CPPUNIT_ASSERT( a.load() == arr );
-            CPPUNIT_ASSERT( *a.load() == 1 );
-
-            for ( integral_type i = 1; i < aSize; ++i ) {
-                integral_type * p = a.load();
-                CPPUNIT_ASSERT( *p == i );
-                integral_type * pa = a.fetch_add( 1 );
-                CPPUNIT_ASSERT_EX( pa == p, "pa=" << ((uintptr_t) pa) << " p=" << ((uintptr_t) p) );
-                CPPUNIT_ASSERT( *a.load() == i + 1 );
-            }
-
-            for ( integral_type i = aSize; i > 1; --i ) {
-                integral_type * p = a.load();
-                CPPUNIT_ASSERT( *p == i  );
-                CPPUNIT_ASSERT( a.fetch_sub( 1 ) == p );
-                CPPUNIT_ASSERT( *a.load() == i - 1 );
-            }
-
-            test_atomic_pointer_for_( a, arr, aSize, atomics::memory_order_relaxed );
-            //test_atomic_pointer_for_( a, arr, aSize, atomics::memory_order_consume );
-            test_atomic_pointer_for_( a, arr, aSize, atomics::memory_order_acquire );
-            test_atomic_pointer_for_( a, arr, aSize, atomics::memory_order_release );
-            test_atomic_pointer_for_( a, arr, aSize, atomics::memory_order_acq_rel );
-            test_atomic_pointer_for_( a, arr, aSize, atomics::memory_order_seq_cst );
-        }
-
-    public:
-        void test_atomic_flag()
-        {
-            // Array to test different alignment
-
-            atomics::atomic_flag flags[8];
-            for ( size_t i = 0; i < sizeof(flags)/sizeof(flags[0]); ++i )
-                do_test_atomic_flag( flags[i] );
-        }
-
-        void test_atomic_flag_volatile()
-        {
-            // Array to test different alignment
-
-            atomics::atomic_flag volatile flags[8];
-            for ( size_t i = 0; i < sizeof(flags)/sizeof(flags[0]); ++i )
-                do_test_atomic_flag( flags[i] );
-        }
-
-        template <typename AtomicBool>
-        void test_atomic_bool_()
-        {
-            // Array to test different alignment
-            AtomicBool  a[8];
-
-            for ( size_t i = 0; i < sizeof(a)/sizeof(a[0]); ++i ) {
-                do_test_atomic_bool( a[i] );
-
-                do_test_atomic_bool( a[i], atomics::memory_order_relaxed );
-                //do_test_atomic_bool( a[i], atomics::memory_order_consume );
-                do_test_atomic_bool( a[i], atomics::memory_order_acquire );
-                do_test_atomic_bool( a[i], atomics::memory_order_release );
-                do_test_atomic_bool( a[i], atomics::memory_order_acq_rel );
-                do_test_atomic_bool( a[i], atomics::memory_order_seq_cst );
-            }
-        }
-
-        void test_atomic_bool()
-        {
-            test_atomic_bool_< atomics::atomic<bool> >();
-        }
-        void test_atomic_bool_volatile()
-        {
-            test_atomic_bool_< atomics::atomic<bool> volatile >();
-        }
-
-        void test_atomic_char()                 { test_atomic_integral<char>(); }
-        void test_atomic_signed_char()          { test_atomic_integral<signed char>(); }
-        void test_atomic_unsigned_char()        { test_atomic_integral<unsigned char>(); }
-        void test_atomic_short_int()            { test_atomic_integral<short int>(); }
-        void test_atomic_unsigned_short_int()   { test_atomic_integral<unsigned short int>(); }
-        void test_atomic_int()                  { test_atomic_integral<int>(); }
-        void test_atomic_unsigned_int()         { test_atomic_integral<unsigned int>(); }
-        void test_atomic_long()                 { test_atomic_integral<long>(); }
-        void test_atomic_unsigned_long()        { test_atomic_integral<unsigned long>(); }
-        void test_atomic_long_long()            { test_atomic_integral<long long>(); }
-        void test_atomic_unsigned_long_long()   { test_atomic_integral<unsigned long long>(); }
-
-        void test_atomic_char_volatile()                 { test_atomic_integral_volatile<char>(); }
-        void test_atomic_signed_char_volatile()          { test_atomic_integral_volatile<signed char>(); }
-        void test_atomic_unsigned_char_volatile()        { test_atomic_integral_volatile<unsigned char>(); }
-        void test_atomic_short_int_volatile()            { test_atomic_integral_volatile<short int>(); }
-        void test_atomic_unsigned_short_int_volatile()   { test_atomic_integral_volatile<unsigned short int>(); }
-        void test_atomic_int_volatile()                  { test_atomic_integral_volatile<int>(); }
-        void test_atomic_unsigned_int_volatile()         { test_atomic_integral_volatile<unsigned int>(); }
-        void test_atomic_long_volatile()                 { test_atomic_integral_volatile<long>(); }
-        void test_atomic_unsigned_long_volatile()        { test_atomic_integral_volatile<unsigned long>(); }
-        void test_atomic_long_long_volatile()            { test_atomic_integral_volatile<long long>(); }
-        void test_atomic_unsigned_long_long_volatile()   { test_atomic_integral_volatile<unsigned long long>(); }
-
-        void test_atomic_pointer_void()         { do_test_atomic_pointer_void<false>() ;}
-        void test_atomic_pointer_void_volatile(){ do_test_atomic_pointer_void<true>() ;}
-
-        void test_atomic_pointer_char()         { test_atomic_pointer_for<char, false>() ;}
-        void test_atomic_pointer_short()        { test_atomic_pointer_for<short int, false>() ;}
-        void test_atomic_pointer_int()          { test_atomic_pointer_for<int, false>() ;}
-        void test_atomic_pointer_long()         { test_atomic_pointer_for<long, false>() ;}
-        void test_atomic_pointer_long_long()    { test_atomic_pointer_for<long long, false>() ;}
-
-        void test_atomic_pointer_char_volatile()        { test_atomic_pointer_for<char, true>() ;}
-        void test_atomic_pointer_short_volatile()       { test_atomic_pointer_for<unsigned short int, true>() ;}
-        void test_atomic_pointer_int_volatile()          { test_atomic_pointer_for<int, true>() ;}
-        void test_atomic_pointer_long_volatile()         { test_atomic_pointer_for<long, true>() ;}
-        void test_atomic_pointer_long_long_volatile()    { test_atomic_pointer_for<long long, true>() ;}
-
-    public:
-        CPPUNIT_TEST_SUITE(cxx11_atomic_class)
-            CPPUNIT_TEST( test_atomic_flag )
-            CPPUNIT_TEST( test_atomic_flag_volatile )
-
-            CPPUNIT_TEST( test_atomic_bool )
-            CPPUNIT_TEST( test_atomic_char )
-            CPPUNIT_TEST( test_atomic_signed_char)
-            CPPUNIT_TEST( test_atomic_unsigned_char)
-            CPPUNIT_TEST( test_atomic_short_int)
-            CPPUNIT_TEST( test_atomic_unsigned_short_int)
-            CPPUNIT_TEST( test_atomic_int)
-            CPPUNIT_TEST( test_atomic_unsigned_int)
-            CPPUNIT_TEST( test_atomic_long)
-            CPPUNIT_TEST( test_atomic_unsigned_long)
-            CPPUNIT_TEST( test_atomic_long_long)
-            CPPUNIT_TEST( test_atomic_unsigned_long_long)
-
-            CPPUNIT_TEST( test_atomic_bool_volatile )
-            CPPUNIT_TEST( test_atomic_char_volatile )
-            CPPUNIT_TEST( test_atomic_signed_char_volatile)
-            CPPUNIT_TEST( test_atomic_unsigned_char_volatile)
-            CPPUNIT_TEST( test_atomic_short_int_volatile)
-            CPPUNIT_TEST( test_atomic_unsigned_short_int_volatile)
-            CPPUNIT_TEST( test_atomic_int_volatile)
-            CPPUNIT_TEST( test_atomic_unsigned_int_volatile)
-            CPPUNIT_TEST( test_atomic_long_volatile)
-            CPPUNIT_TEST( test_atomic_unsigned_long_volatile)
-            CPPUNIT_TEST( test_atomic_long_long_volatile)
-            CPPUNIT_TEST( test_atomic_unsigned_long_long_volatile)
-
-            CPPUNIT_TEST( test_atomic_pointer_void)
-            CPPUNIT_TEST( test_atomic_pointer_void_volatile)
-
-            CPPUNIT_TEST( test_atomic_pointer_char)
-            CPPUNIT_TEST( test_atomic_pointer_short)
-            CPPUNIT_TEST( test_atomic_pointer_int)
-            CPPUNIT_TEST( test_atomic_pointer_long)
-            CPPUNIT_TEST( test_atomic_pointer_long_long)
-
-            CPPUNIT_TEST( test_atomic_pointer_char_volatile)
-            CPPUNIT_TEST( test_atomic_pointer_short_volatile)
-            CPPUNIT_TEST( test_atomic_pointer_int_volatile)
-            CPPUNIT_TEST( test_atomic_pointer_long_volatile)
-            CPPUNIT_TEST( test_atomic_pointer_long_long_volatile)
-
-        CPPUNIT_TEST_SUITE_END()
-    };
-}   // namespace misc
-
-CPPUNIT_TEST_SUITE_REGISTRATION(misc::cxx11_atomic_class);
diff --git a/tests/test-hdr/misc/cxx11_atomic_func.cpp b/tests/test-hdr/misc/cxx11_atomic_func.cpp
deleted file mode 100644 (file)
index 4aeacd5..0000000
+++ /dev/null
@@ -1,739 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/cppunit_proxy.h"
-
-#include <cds/algo/atomic.h>
-
-#ifndef CDS_USE_BOOST_ATOMIC
-// Skip this test for boost.atomic
-// Boost.atomic has no free atomic functions implementation.
-
-#include "misc/cxx11_convert_memory_order.h"
-
-namespace misc {
-
-    class cxx11_atomic_func: public CppUnitMini::TestCase
-    {
-        template <typename AtomicFlag>
-        void do_test_atomic_flag_mo( AtomicFlag& f, atomics::memory_order order )
-        {
-            atomics::memory_order mo_clear = convert_to_store_order(order);
-
-            f.clear( convert_to_store_order(order) );
-
-            for ( int i = 0; i < 5; ++i ) {
-                CPPUNIT_ASSERT( !atomics::atomic_flag_test_and_set_explicit( &f, order ));
-                CPPUNIT_ASSERT( atomics::atomic_flag_test_and_set_explicit( &f, order ) );
-                atomics::atomic_flag_clear_explicit( &f, mo_clear );
-                atomics::atomic_flag_clear_explicit( &f, mo_clear );
-            }
-            //CPPUNIT_ASSERT( f.m_Flag == 0 );
-        }
-
-        template <typename AtomicFlag>
-        void do_test_atomic_flag( AtomicFlag& f )
-        {
-            f.clear();
-
-            for ( int i = 0; i < 5; ++i ) {
-                //CPPUNIT_ASSERT( f.m_Flag == 0 );
-                CPPUNIT_ASSERT( !atomics::atomic_flag_test_and_set( &f ));
-                //CPPUNIT_ASSERT( f.m_Flag != 0 );
-                CPPUNIT_ASSERT( atomics::atomic_flag_test_and_set( &f ) );
-                //CPPUNIT_ASSERT( f.m_Flag != 0 );
-                atomics::atomic_flag_clear(&f);
-                //CPPUNIT_ASSERT( f.m_Flag == 0 );
-                atomics::atomic_flag_clear(&f);
-            }
-            //CPPUNIT_ASSERT( f.m_Flag == 0 );
-
-            do_test_atomic_flag_mo( f, atomics::memory_order_relaxed );
-            //do_test_atomic_flag_mo( f, atomics::memory_order_consume );
-            do_test_atomic_flag_mo( f, atomics::memory_order_acquire );
-            do_test_atomic_flag_mo( f, atomics::memory_order_release );
-            do_test_atomic_flag_mo( f, atomics::memory_order_acq_rel );
-            do_test_atomic_flag_mo( f, atomics::memory_order_seq_cst );
-        }
-
-        template <class Atomic, typename Integral>
-        void do_test_atomic_type(Atomic& a )
-        {
-            typedef Integral    integral_type;
-
-            CPPUNIT_ASSERT( atomics::atomic_is_lock_free( &a ) );
-            atomics::atomic_store( &a, (integral_type) 0 );
-            CPPUNIT_ASSERT( a == 0 );
-            CPPUNIT_ASSERT( atomics::atomic_load( &a ) == 0 );
-
-            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
-                integral_type n = integral_type(42) << (nByte * 8);
-                CPPUNIT_ASSERT( atomics::atomic_exchange( &a, n ) == 0 );
-                CPPUNIT_ASSERT( atomics::atomic_load( &a ) == n );
-                CPPUNIT_ASSERT( atomics::atomic_exchange( &a, (integral_type) 0 ) == n );
-                CPPUNIT_ASSERT( atomics::atomic_load( &a ) == 0 );
-            }
-
-            integral_type prev = atomics::atomic_load( &a );
-            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
-                integral_type n = integral_type(42) << (nByte * 8);
-                integral_type expected = prev;
-
-                CPPUNIT_ASSERT( atomics::atomic_compare_exchange_weak( &a, &expected, n));
-                CPPUNIT_ASSERT( expected  == prev );
-                CPPUNIT_ASSERT( expected  != n );
-                CPPUNIT_ASSERT( !atomics::atomic_compare_exchange_weak( &a, &expected, n) );
-                CPPUNIT_ASSERT( expected  == n );
-
-                prev = n;
-                CPPUNIT_ASSERT( atomics::atomic_load( &a ) == n );
-            }
-
-            atomics::atomic_store( &a, (integral_type) 0 );
-
-            prev = atomics::atomic_load( &a );
-            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
-                integral_type n = integral_type(42) << (nByte * 8);
-                integral_type expected = prev;
-
-                CPPUNIT_ASSERT( atomics::atomic_compare_exchange_strong( &a, &expected, n));
-                CPPUNIT_ASSERT( expected  == prev );
-                CPPUNIT_ASSERT( !atomics::atomic_compare_exchange_strong( &a, &expected, n));
-                CPPUNIT_ASSERT( expected  == n );
-
-                prev = n;
-                CPPUNIT_ASSERT( atomics::atomic_load( &a ) == n );
-            }
-
-            CPPUNIT_ASSERT( atomics::atomic_exchange( &a, (integral_type) 0 ) == prev );
-        }
-
-        template <class Atomic, typename Integral>
-        void do_test_atomic_integral( Atomic& a )
-        {
-            do_test_atomic_type< Atomic, Integral >( a );
-
-            typedef Integral    integral_type;
-
-            // fetch_xxx testing
-            atomics::atomic_store( &a, (integral_type) 0 );
-
-            // fetch_add
-            for ( size_t nByte = 0; nByte < sizeof(integral_type); ++nByte )
-            {
-                integral_type prev = atomics::atomic_load( &a );
-                integral_type n = integral_type(42) << (nByte * 8);
-
-                CPPUNIT_ASSERT( atomics::atomic_fetch_add( &a, n) == prev);
-            }
-
-            // fetch_sub
-            for ( size_t nByte = sizeof(integral_type); nByte > 0; --nByte )
-            {
-                integral_type prev = atomics::atomic_load( &a );
-                integral_type n = integral_type(42) << ((nByte - 1) * 8);
-
-                CPPUNIT_ASSERT( atomics::atomic_fetch_sub( &a, n) == prev);
-            }
-            CPPUNIT_ASSERT( atomics::atomic_load( &a ) == 0 );
-
-            // fetch_or / fetc_xor / fetch_and
-            for ( size_t nBit = 0; nBit < sizeof(integral_type) * 8; ++nBit )
-            {
-                integral_type prev = atomics::atomic_load( &a );
-                integral_type mask = 1 << nBit;
-
-                CPPUNIT_ASSERT( atomics::atomic_fetch_or( &a, mask ) == prev );
-                prev = atomics::atomic_load( &a );
-                CPPUNIT_ASSERT( ( prev & mask)  == mask);
-
-                CPPUNIT_ASSERT( atomics::atomic_fetch_and( &a, (integral_type) ~mask ) == prev );
-                prev = atomics::atomic_load( &a );
-                CPPUNIT_ASSERT_EX( integral_type(prev & mask) == integral_type(0), "prev=" << std::hex << prev << ", mask=" << std::hex << mask);
-
-                CPPUNIT_ASSERT( atomics::atomic_fetch_xor( &a, mask ) == prev );
-                prev = atomics::atomic_load( &a );
-                CPPUNIT_ASSERT( ( prev & mask)  == mask);
-            }
-            CPPUNIT_ASSERT( atomics::atomic_load( &a ) == (integral_type) -1 );
-        }
-
-        template <class Atomic, typename Integral>
-        void do_test_atomic_type( Atomic& a, atomics::memory_order order )
-        {
-            typedef Integral    integral_type;
-
-            const atomics::memory_order oLoad = convert_to_load_order( order );
-            const atomics::memory_order oStore = convert_to_store_order( order );
-
-            CPPUNIT_ASSERT( atomics::atomic_is_lock_free( &a ) );
-            atomics::atomic_store_explicit( &a, (integral_type) 0, oStore );
-            CPPUNIT_ASSERT( a == 0 );
-            CPPUNIT_ASSERT( atomics::atomic_load_explicit( &a, oLoad ) == 0 );
-
-            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
-                integral_type n = integral_type(42) << (nByte * 8);
-                CPPUNIT_ASSERT( atomics::atomic_exchange_explicit( &a, n, order ) == 0 );
-                CPPUNIT_ASSERT( atomics::atomic_load_explicit( &a, oLoad ) == n );
-                CPPUNIT_ASSERT( atomics::atomic_exchange_explicit( &a, (integral_type) 0, order ) == n );
-                CPPUNIT_ASSERT( atomics::atomic_load_explicit( &a, oLoad ) == 0 );
-            }
-
-            integral_type prev = atomics::atomic_load_explicit( &a, oLoad );
-            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
-                integral_type n = integral_type(42) << (nByte * 8);
-                integral_type expected = prev;
-
-                CPPUNIT_ASSERT( atomics::atomic_compare_exchange_weak_explicit( &a, &expected, n, order, atomics::memory_order_relaxed));
-                CPPUNIT_ASSERT( expected  == prev );
-                CPPUNIT_ASSERT( !atomics::atomic_compare_exchange_weak_explicit( &a, &expected, n, order, atomics::memory_order_relaxed));
-                CPPUNIT_ASSERT( expected  == n );
-
-                prev = n;
-                CPPUNIT_ASSERT( atomics::atomic_load_explicit( &a, oLoad ) == n );
-            }
-
-            atomics::atomic_store_explicit( &a, (integral_type) 0, oStore );
-
-            prev = atomics::atomic_load_explicit( &a, oLoad );
-            for ( size_t nByte = 0; nByte < sizeof(Integral); ++nByte ) {
-                integral_type n = integral_type(42) << (nByte * 8);
-                integral_type expected = prev;
-
-                CPPUNIT_ASSERT( atomics::atomic_compare_exchange_strong_explicit( &a, &expected, n, order, atomics::memory_order_relaxed));
-                CPPUNIT_ASSERT( expected  == prev );
-                CPPUNIT_ASSERT( !atomics::atomic_compare_exchange_strong_explicit( &a, &expected, n, order, atomics::memory_order_relaxed));
-                CPPUNIT_ASSERT( expected  == n );
-
-                prev = n;
-                CPPUNIT_ASSERT( atomics::atomic_load_explicit( &a, oLoad ) == n );
-            }
-
-            CPPUNIT_ASSERT( atomics::atomic_exchange_explicit( &a, (integral_type) 0, order ) == prev );
-        }
-
-        template <class Atomic, typename Integral>
-        void do_test_atomic_integral( Atomic& a, atomics::memory_order order )
-        {
-            do_test_atomic_type< Atomic, Integral >( a, order );
-            typedef Integral    integral_type;
-
-            const atomics::memory_order oLoad = convert_to_load_order( order );
-            const atomics::memory_order oStore = convert_to_store_order( order );
-
-            // fetch_xxx testing
-            atomics::atomic_store_explicit( &a, (integral_type) 0, oStore );
-
-            // fetch_add
-            for ( size_t nByte = 0; nByte < sizeof(integral_type); ++nByte )
-            {
-                integral_type prev = atomics::atomic_load_explicit( &a, oLoad );
-                integral_type n = integral_type(42) << (nByte * 8);
-
-                CPPUNIT_ASSERT( atomics::atomic_fetch_add_explicit( &a, n, order) == prev);
-            }
-
-            // fetch_sub
-            for ( size_t nByte = sizeof(integral_type); nByte > 0; --nByte )
-            {
-                integral_type prev = atomics::atomic_load_explicit( &a, oLoad );
-                integral_type n = integral_type(42) << ((nByte - 1) * 8);
-
-                CPPUNIT_ASSERT( atomics::atomic_fetch_sub_explicit( &a, n, order ) == prev);
-            }
-            CPPUNIT_ASSERT( atomics::atomic_load_explicit( &a, oLoad ) == 0 );
-
-            // fetch_or / fetc_xor / fetch_and
-            for ( size_t nBit = 0; nBit < sizeof(integral_type) * 8; ++nBit )
-            {
-                integral_type prev = atomics::atomic_load_explicit( &a, oLoad )  ;;
-                integral_type mask = 1 << nBit;
-
-                CPPUNIT_ASSERT( atomics::atomic_fetch_or_explicit( &a, mask, order ) == prev );
-                prev = atomics::atomic_load_explicit( &a, oLoad );
-                CPPUNIT_ASSERT( ( prev & mask)  == mask);
-
-                CPPUNIT_ASSERT( atomics::atomic_fetch_and_explicit( &a, (integral_type) ~mask, order ) == prev );
-                prev = atomics::atomic_load_explicit( &a, oLoad );
-                CPPUNIT_ASSERT( ( prev & mask)  == 0);
-
-                CPPUNIT_ASSERT( atomics::atomic_fetch_xor_explicit( &a, mask, order ) == prev );
-                prev = atomics::atomic_load_explicit( &a, oLoad );
-                CPPUNIT_ASSERT( ( prev & mask)  == mask);
-            }
-            CPPUNIT_ASSERT( atomics::atomic_load_explicit( &a, oLoad ) == (integral_type) -1 );
-        }
-
-        template <typename Atomic, typename Integral>
-        void test_atomic_integral_(Atomic& a)
-        {
-            do_test_atomic_integral<Atomic, Integral >(a);
-
-            do_test_atomic_integral<Atomic, Integral >( a, atomics::memory_order_relaxed );
-            //do_test_atomic_integral<Atomic, Integral >( a, atomics::memory_order_consume );
-            do_test_atomic_integral<Atomic, Integral >( a, atomics::memory_order_acquire );
-            do_test_atomic_integral<Atomic, Integral >( a, atomics::memory_order_release );
-            do_test_atomic_integral<Atomic, Integral >( a, atomics::memory_order_acq_rel );
-            do_test_atomic_integral<Atomic, Integral >( a, atomics::memory_order_seq_cst );
-        }
-
-        template <typename Integral>
-        void test_atomic_integral()
-        {
-            typedef atomics::atomic<Integral>    atomic_type;
-            atomic_type a[8];
-            for ( size_t i = 0; i < sizeof(a)/sizeof(a[0]); ++i ) {
-                test_atomic_integral_<atomic_type, Integral>( a[i] );
-            }
-        }
-        template <typename Integral>
-        void test_atomic_integral_volatile()
-        {
-            typedef atomics::atomic<Integral> volatile atomic_type;
-            atomic_type a[8];
-            for ( size_t i = 0; i < sizeof(a)/sizeof(a[0]); ++i ) {
-                test_atomic_integral_<atomic_type, Integral>( a[i] );
-            }
-        }
-
-        template <class AtomicBool>
-        void do_test_atomic_bool(AtomicBool& a)
-        {
-            CPPUNIT_ASSERT( atomics::atomic_is_lock_free( &a ) );
-            atomics::atomic_store( &a, false );
-            CPPUNIT_ASSERT( a == false );
-            CPPUNIT_ASSERT( atomics::atomic_load( &a ) == false );
-
-            CPPUNIT_ASSERT( atomics::atomic_exchange( &a, true ) == false );
-            CPPUNIT_ASSERT( atomics::atomic_load( &a ) == true );
-            CPPUNIT_ASSERT( atomics::atomic_exchange( &a, false ) == true );
-            CPPUNIT_ASSERT( atomics::atomic_load( &a ) == false );
-
-            bool expected = false;
-            CPPUNIT_ASSERT( atomics::atomic_compare_exchange_weak( &a, &expected, true));
-            CPPUNIT_ASSERT( expected  == false );
-            CPPUNIT_ASSERT( !atomics::atomic_compare_exchange_weak( &a, &expected, false));
-            CPPUNIT_ASSERT( expected  == true );
-            CPPUNIT_ASSERT( atomics::atomic_load( &a ) == true );
-
-            atomics::atomic_store( &a, false );
-
-            expected = false;
-            CPPUNIT_ASSERT( atomics::atomic_compare_exchange_strong( &a, &expected, true));
-            CPPUNIT_ASSERT( expected  == false );
-            CPPUNIT_ASSERT( !atomics::atomic_compare_exchange_strong( &a, &expected, false));
-            CPPUNIT_ASSERT( expected  == true );
-
-            CPPUNIT_ASSERT( atomics::atomic_load( &a ) == true );
-
-            CPPUNIT_ASSERT( atomics::atomic_exchange( &a, false ) == true );
-        }
-
-        template <class AtomicBool>
-        void do_test_atomic_bool( AtomicBool& a, atomics::memory_order order )
-        {
-            const atomics::memory_order oLoad = convert_to_load_order( order );
-            const atomics::memory_order oStore = convert_to_store_order( order );
-            const atomics::memory_order oExchange = convert_to_exchange_order( order );
-
-            CPPUNIT_ASSERT( atomics::atomic_is_lock_free( &a ) );
-            atomics::atomic_store_explicit( &a, false, oStore );
-            CPPUNIT_ASSERT( a == false );
-            CPPUNIT_ASSERT( atomics::atomic_load_explicit( &a, oLoad ) == false );
-
-            CPPUNIT_ASSERT( atomics::atomic_exchange_explicit( &a, true, oExchange ) == false );
-            CPPUNIT_ASSERT( atomics::atomic_load_explicit( &a, oLoad ) == true );
-            CPPUNIT_ASSERT( atomics::atomic_exchange_explicit( &a, false, oExchange ) == true );
-            CPPUNIT_ASSERT( atomics::atomic_load_explicit( &a, oLoad ) == false );
-
-            bool expected = false;
-            CPPUNIT_ASSERT( atomics::atomic_compare_exchange_weak_explicit( &a, &expected, true, order, atomics::memory_order_relaxed));
-            CPPUNIT_ASSERT( expected  == false );
-            CPPUNIT_ASSERT( !atomics::atomic_compare_exchange_weak_explicit( &a, &expected, false, order, atomics::memory_order_relaxed));
-            CPPUNIT_ASSERT( expected  == true );
-            CPPUNIT_ASSERT( atomics::atomic_load_explicit( &a, oLoad ) == true );
-
-            atomics::atomic_store( &a, false );
-
-            expected = false;
-            CPPUNIT_ASSERT( atomics::atomic_compare_exchange_strong_explicit( &a, &expected, true, order, atomics::memory_order_relaxed));
-            CPPUNIT_ASSERT( expected  == false );
-            CPPUNIT_ASSERT( !atomics::atomic_compare_exchange_strong_explicit( &a, &expected, false, order, atomics::memory_order_relaxed));
-            CPPUNIT_ASSERT( expected  == true );
-
-            CPPUNIT_ASSERT( atomics::atomic_load_explicit( &a, oLoad ) == true );
-
-            CPPUNIT_ASSERT( atomics::atomic_exchange_explicit( &a, false, oExchange ) == true );
-        }
-
-        template <typename Atomic, typename Integral>
-        void test_atomic_pointer_for_( Atomic& a, Integral * arr, Integral aSize, atomics::memory_order order )
-        {
-            typedef Integral integral_type;
-            atomics::memory_order oLoad = convert_to_load_order(order);
-            atomics::memory_order oStore = convert_to_store_order(order);
-            integral_type *  p;
-
-            atomics::atomic_store_explicit( &a, arr, oStore );
-            CPPUNIT_ASSERT( *atomics::atomic_load_explicit( &a, oLoad ) == 1 );
-
-            p = arr;
-            CPPUNIT_ASSERT( atomics::atomic_compare_exchange_weak_explicit( &a, &p, arr + 5, order, atomics::memory_order_relaxed ));
-            CPPUNIT_ASSERT( p == arr + 0 );
-            CPPUNIT_ASSERT( *p == 1 );
-            CPPUNIT_ASSERT( !atomics::atomic_compare_exchange_weak_explicit( &a, &p, arr + 3, order, atomics::memory_order_relaxed ));
-            CPPUNIT_ASSERT( p == arr + 5 );
-            CPPUNIT_ASSERT( *p == 6 );
-
-            CPPUNIT_ASSERT( atomics::atomic_compare_exchange_strong_explicit( &a, &p, arr + 3, order, atomics::memory_order_relaxed ));
-            CPPUNIT_ASSERT( p == arr + 5 );
-            CPPUNIT_ASSERT( *p == 6 );
-            CPPUNIT_ASSERT( !atomics::atomic_compare_exchange_strong_explicit( &a, &p, arr + 5, order, atomics::memory_order_relaxed ));
-            CPPUNIT_ASSERT( p == arr + 3 );
-            CPPUNIT_ASSERT( *p == 4 );
-
-            CPPUNIT_ASSERT( atomics::atomic_exchange_explicit( &a, arr, order ) == arr + 3 );
-            CPPUNIT_ASSERT( atomics::atomic_load_explicit( &a, oLoad ) == arr );
-            CPPUNIT_ASSERT( *atomics::atomic_load_explicit( &a, oLoad ) == 1 );
-
-            for ( integral_type i = 1; i < aSize; ++i ) {
-                integral_type * p = atomics::atomic_load_explicit( &a, oLoad );
-                CPPUNIT_ASSERT( *p == i );
-                CPPUNIT_ASSERT( atomics::atomic_fetch_add_explicit( &a, 1, order ) == p );
-                CPPUNIT_ASSERT( *atomics::atomic_load_explicit( &a, oLoad ) == i + 1 );
-            }
-
-            for ( integral_type i = aSize; i > 1; --i ) {
-                integral_type * p = atomics::atomic_load_explicit( &a, oLoad );
-                CPPUNIT_ASSERT( *p == i  );
-                CPPUNIT_ASSERT( atomics::atomic_fetch_sub_explicit( &a, 1, order ) == p );
-                CPPUNIT_ASSERT( *atomics::atomic_load_explicit( &a, oLoad ) == i - 1 );
-            }
-        }
-
-        template <typename Integral, bool Volatile>
-        void test_atomic_pointer_for()
-        {
-            typedef Integral integral_type;
-            typedef typename add_volatile<atomics::atomic< integral_type *>, Volatile>::type    atomic_pointer;
-
-            integral_type   arr[8];
-            const integral_type aSize = sizeof(arr)/sizeof(arr[0]);
-            for ( integral_type i = 0; i < aSize; ++i ) {
-                arr[size_t(i)] = i + 1;
-            }
-
-            atomic_pointer  a;
-            integral_type *  p;
-
-            atomics::atomic_store( &a, arr );
-            CPPUNIT_ASSERT( *atomics::atomic_load( &a ) == 1 );
-
-            p = arr;
-            CPPUNIT_ASSERT( atomics::atomic_compare_exchange_weak( &a, &p, arr + 5 ));
-            CPPUNIT_ASSERT( p == arr + 0 );
-            CPPUNIT_ASSERT( !atomics::atomic_compare_exchange_weak( &a, &p, arr + 3 ));
-            CPPUNIT_ASSERT( p == arr + 5 );
-
-            CPPUNIT_ASSERT( atomics::atomic_compare_exchange_strong( &a, &p, arr + 3 ));
-            CPPUNIT_ASSERT( p == arr + 5 );
-            CPPUNIT_ASSERT( !atomics::atomic_compare_exchange_strong( &a, &p, arr + 5 ));
-            CPPUNIT_ASSERT( p == arr + 3 );
-
-            CPPUNIT_ASSERT( atomics::atomic_exchange( &a, arr ) == arr + 3 );
-            CPPUNIT_ASSERT( atomics::atomic_load( &a ) == arr );
-            CPPUNIT_ASSERT( *atomics::atomic_load( &a ) == 1 );
-
-            for ( integral_type i = 1; i < aSize; ++i ) {
-                integral_type * p = atomics::atomic_load( &a );
-                CPPUNIT_ASSERT( *p == i );
-                CPPUNIT_ASSERT( atomics::atomic_fetch_add( &a, 1 ) == p );
-                CPPUNIT_ASSERT( *atomics::atomic_load( &a ) == i + 1 );
-            }
-
-            for ( integral_type i = aSize; i > 1; --i ) {
-                integral_type * p = atomics::atomic_load( &a );
-                CPPUNIT_ASSERT( *p == i  );
-                CPPUNIT_ASSERT( atomics::atomic_fetch_sub( &a, 1 ) == p );
-                CPPUNIT_ASSERT( *atomics::atomic_load( &a ) == i - 1 );
-            }
-
-            test_atomic_pointer_for_( a, arr, aSize, atomics::memory_order_relaxed );
-            //test_atomic_pointer_for_( a, arr, aSize, atomics::memory_order_consume );
-            test_atomic_pointer_for_( a, arr, aSize, atomics::memory_order_acquire );
-            test_atomic_pointer_for_( a, arr, aSize, atomics::memory_order_release );
-            test_atomic_pointer_for_( a, arr, aSize, atomics::memory_order_acq_rel );
-            test_atomic_pointer_for_( a, arr, aSize, atomics::memory_order_seq_cst );
-
-        }
-
-        template <typename Atomic>
-        void do_test_atomic_pointer_void_( Atomic& a, char * arr, char aSize, atomics::memory_order order )
-        {
-            atomics::memory_order oLoad = convert_to_load_order(order);
-            atomics::memory_order oStore = convert_to_store_order(order);
-            char *  p;
-
-            atomics::atomic_store_explicit( &a, (void *) arr, oStore );
-            CPPUNIT_ASSERT( *reinterpret_cast<char *>(atomics::atomic_load_explicit( &a, oLoad )) == 1 );
-
-            p = arr;
-            CPPUNIT_ASSERT( atomics::atomic_compare_exchange_weak_explicit( &a, (void **) &p, (void *)(arr + 5), order, atomics::memory_order_relaxed ));
-            CPPUNIT_ASSERT( p == arr + 0 );
-            CPPUNIT_ASSERT( *p == 1 );
-            CPPUNIT_ASSERT( !atomics::atomic_compare_exchange_weak_explicit( &a, (void **) &p, (void *)(arr + 3), order, atomics::memory_order_relaxed ));
-            CPPUNIT_ASSERT( p == arr + 5 );
-            CPPUNIT_ASSERT( *p == 6 );
-
-            CPPUNIT_ASSERT( atomics::atomic_compare_exchange_strong_explicit( &a, (void **) &p, (void *)(arr + 3), order, atomics::memory_order_relaxed ));
-            CPPUNIT_ASSERT( p == arr + 5 );
-            CPPUNIT_ASSERT( *p == 6 );
-            CPPUNIT_ASSERT( !atomics::atomic_compare_exchange_strong_explicit( &a, (void **) &p, (void *)(arr + 5), order, atomics::memory_order_relaxed ));
-            CPPUNIT_ASSERT( p == arr + 3 );
-            CPPUNIT_ASSERT( *p == 4 );
-
-            CPPUNIT_ASSERT( reinterpret_cast<char *>(atomics::atomic_exchange_explicit( &a, (void *) arr, order )) == arr + 3 );
-            CPPUNIT_ASSERT( reinterpret_cast<char *>(atomics::atomic_load_explicit( &a, oLoad )) == arr );
-            CPPUNIT_ASSERT( *reinterpret_cast<char *>(atomics::atomic_load_explicit( &a, oLoad )) == 1 );
-
-            for ( char i = 1; i < aSize; ++i ) {
-                CPPUNIT_ASSERT( *reinterpret_cast<char *>(atomics::atomic_load_explicit( &a, oLoad )) == i );
-                CPPUNIT_ASSERT( atomics::atomic_fetch_add_explicit( &a, 1, order ));
-                CPPUNIT_ASSERT( *reinterpret_cast<char *>(atomics::atomic_load_explicit( &a, oLoad )) == i + 1 );
-            }
-
-            for ( char i = aSize; i > 1; --i ) {
-                CPPUNIT_ASSERT( *reinterpret_cast<char *>(atomics::atomic_load_explicit( &a, oLoad )) == i  );
-                CPPUNIT_ASSERT( atomics::atomic_fetch_sub_explicit( &a, 1, order ));
-                CPPUNIT_ASSERT( *reinterpret_cast<char *>(atomics::atomic_load_explicit( &a, oLoad )) == i - 1 );
-            }
-        }
-
-        template <bool Volatile>
-        void do_test_atomic_pointer_void()
-        {
-            typedef typename add_volatile<atomics::atomic< void *>, Volatile>::type    atomic_pointer;
-
-            char   arr[8];
-            const char aSize = sizeof(arr)/sizeof(arr[0]);
-            for ( char i = 0; i < aSize; ++i ) {
-                arr[unsigned(i)] = i + 1;
-            }
-
-            atomic_pointer  a;
-            char *  p;
-
-            atomics::atomic_store( &a, (void *) arr );
-            CPPUNIT_ASSERT( *reinterpret_cast<char *>(atomics::atomic_load( &a )) == 1 );
-
-            p = arr;
-            CPPUNIT_ASSERT( atomics::atomic_compare_exchange_weak( &a, (void **) &p, (void *)(arr + 5) ));
-            CPPUNIT_ASSERT( p == arr + 0 );
-            CPPUNIT_ASSERT( !atomics::atomic_compare_exchange_weak( &a, (void **) &p, (void *)(arr + 3) ));
-            CPPUNIT_ASSERT( p == arr + 5 );
-
-            CPPUNIT_ASSERT( atomics::atomic_compare_exchange_strong( &a, (void **) &p, (void *)(arr + 3) ));
-            CPPUNIT_ASSERT( p == arr + 5 );
-            CPPUNIT_ASSERT( !atomics::atomic_compare_exchange_strong( &a, (void **) &p, (void *)(arr + 5) ));
-            CPPUNIT_ASSERT( p == arr + 3 );
-
-            CPPUNIT_ASSERT( reinterpret_cast<char *>( atomics::atomic_exchange( &a, (void *) arr )) == arr + 3 );
-            CPPUNIT_ASSERT( reinterpret_cast<char *>( atomics::atomic_load( &a )) == arr );
-            CPPUNIT_ASSERT( *reinterpret_cast<char *>(atomics::atomic_load( &a )) == 1 );
-
-            for ( char i = 1; i < aSize; ++i ) {
-                CPPUNIT_ASSERT( *reinterpret_cast<char *>(atomics::atomic_load( &a )) == i );
-                CPPUNIT_ASSERT( atomics::atomic_fetch_add( &a, 1 ));
-                CPPUNIT_ASSERT( *reinterpret_cast<char *>(atomics::atomic_load( &a )) == i + 1 );
-            }
-
-            for ( char i = aSize; i > 1; --i ) {
-                CPPUNIT_ASSERT( *reinterpret_cast<char *>(atomics::atomic_load( &a )) == i  );
-                CPPUNIT_ASSERT( atomics::atomic_fetch_sub( &a, 1 ));
-                CPPUNIT_ASSERT( *reinterpret_cast<char *>(atomics::atomic_load( &a )) == i - 1 );
-            }
-
-            do_test_atomic_pointer_void_( a, arr, aSize, atomics::memory_order_relaxed );
-            //do_test_atomic_pointer_void_( a, arr, aSize, atomics::memory_order_consume );
-            do_test_atomic_pointer_void_( a, arr, aSize, atomics::memory_order_acquire );
-            do_test_atomic_pointer_void_( a, arr, aSize, atomics::memory_order_release );
-            do_test_atomic_pointer_void_( a, arr, aSize, atomics::memory_order_acq_rel );
-            do_test_atomic_pointer_void_( a, arr, aSize, atomics::memory_order_seq_cst );
-        }
-
-    public:
-        void test_atomic_flag()
-        {
-            atomics::atomic_flag flags[8];
-            for ( size_t i = 0; i < sizeof(flags)/sizeof(flags[0]); ++i )
-                do_test_atomic_flag( flags[i] );
-        }
-        void test_atomic_flag_volatile()
-        {
-            atomics::atomic_flag volatile flags[8];
-            for ( size_t i = 0; i < sizeof(flags)/sizeof(flags[0]); ++i )
-                do_test_atomic_flag( flags[i] );
-        }
-
-        template <typename AtomicBool>
-        void test_atomic_bool_()
-        {
-            AtomicBool a[8];
-            for ( size_t i = 0; i < sizeof(a)/sizeof(a[0]); ++i ) {
-                do_test_atomic_bool( a[i] );
-
-                do_test_atomic_bool( a[i], atomics::memory_order_relaxed );
-                //do_test_atomic_bool( a[i], atomics::memory_order_consume );
-                do_test_atomic_bool( a[i], atomics::memory_order_acquire );
-                do_test_atomic_bool( a[i], atomics::memory_order_release );
-                do_test_atomic_bool( a[i], atomics::memory_order_acq_rel );
-                do_test_atomic_bool( a[i], atomics::memory_order_seq_cst );
-            }
-        }
-
-        void test_atomic_bool()
-        {
-            test_atomic_bool_<atomics::atomic<bool> >();
-        }
-        void test_atomic_bool_volatile()
-        {
-            test_atomic_bool_<atomics::atomic<bool> volatile >();
-        }
-
-        void test_atomic_char()                 { test_atomic_integral<char>(); }
-        void test_atomic_char_volatile()        { test_atomic_integral_volatile<char>(); }
-        void test_atomic_signed_char()          { test_atomic_integral<signed char>(); }
-        void test_atomic_signed_char_volatile() { test_atomic_integral_volatile<signed char>(); }
-        void test_atomic_unsigned_char()        { test_atomic_integral<unsigned char>(); }
-        void test_atomic_unsigned_char_volatile(){ test_atomic_integral_volatile<unsigned char>(); }
-        void test_atomic_short_int()            { test_atomic_integral<short int>(); }
-        void test_atomic_short_int_volatile()   { test_atomic_integral_volatile<short int>(); }
-        void test_atomic_unsigned_short_int()   { test_atomic_integral<unsigned short int>(); }
-        void test_atomic_unsigned_short_int_volatile() { test_atomic_integral_volatile<unsigned short int>(); }
-        void test_atomic_int()                  { test_atomic_integral<int>(); }
-        void test_atomic_int_volatile()         { test_atomic_integral_volatile<int>(); }
-        void test_atomic_unsigned_int()         { test_atomic_integral<unsigned int>(); }
-        void test_atomic_unsigned_int_volatile(){ test_atomic_integral_volatile<unsigned int>(); }
-        void test_atomic_long()                 { test_atomic_integral<long>(); }
-        void test_atomic_long_volatile()        { test_atomic_integral_volatile<long>(); }
-        void test_atomic_unsigned_long()        { test_atomic_integral<unsigned long>(); }
-        void test_atomic_unsigned_long_volatile() { test_atomic_integral_volatile<unsigned long>(); }
-        void test_atomic_long_long()            { test_atomic_integral<long long>(); }
-        void test_atomic_long_long_volatile()   { test_atomic_integral_volatile<long long>(); }
-        void test_atomic_unsigned_long_long()   { test_atomic_integral<unsigned long long>(); }
-        void test_atomic_unsigned_long_long_volatile() { test_atomic_integral_volatile<unsigned long long>(); }
-
-        void test_atomic_pointer_void()         { do_test_atomic_pointer_void<false>() ;}
-        void test_atomic_pointer_void_volatile(){ do_test_atomic_pointer_void<true>() ;}
-
-        void test_atomic_pointer_char()         { test_atomic_pointer_for<char, false>() ;}
-        void test_atomic_pointer_short()        { test_atomic_pointer_for<short int, false>() ;}
-        void test_atomic_pointer_int()          { test_atomic_pointer_for<int, false>() ;}
-        void test_atomic_pointer_long()         { test_atomic_pointer_for<long, false>() ;}
-        void test_atomic_pointer_long_long()    { test_atomic_pointer_for<long long, false>() ;}
-
-        void test_atomic_pointer_char_volatile()        { test_atomic_pointer_for<char, true>() ;}
-        void test_atomic_pointer_short_volatile()       { test_atomic_pointer_for<unsigned short int, true>() ;}
-        void test_atomic_pointer_int_volatile()          { test_atomic_pointer_for<int, true>() ;}
-        void test_atomic_pointer_long_volatile()         { test_atomic_pointer_for<long, true>() ;}
-        void test_atomic_pointer_long_long_volatile()    { test_atomic_pointer_for<long long, true>() ;}
-
-        void test_atomic_fence()
-        {
-            atomics::atomic_thread_fence(atomics::memory_order_relaxed );
-            //atomics::atomic_thread_fence(atomics::memory_order_consume );
-            atomics::atomic_thread_fence(atomics::memory_order_acquire );
-            atomics::atomic_thread_fence(atomics::memory_order_release );
-            atomics::atomic_thread_fence(atomics::memory_order_acq_rel );
-            atomics::atomic_thread_fence(atomics::memory_order_seq_cst );
-
-            atomics::atomic_signal_fence(atomics::memory_order_relaxed );
-            //atomics::atomic_signal_fence(atomics::memory_order_consume );
-            atomics::atomic_signal_fence(atomics::memory_order_acquire );
-            atomics::atomic_signal_fence(atomics::memory_order_release );
-            atomics::atomic_signal_fence(atomics::memory_order_acq_rel );
-            atomics::atomic_signal_fence(atomics::memory_order_seq_cst );
-        }
-
-    public:
-        CPPUNIT_TEST_SUITE(cxx11_atomic_func)
-            CPPUNIT_TEST( test_atomic_flag )
-            CPPUNIT_TEST( test_atomic_flag_volatile )
-
-            CPPUNIT_TEST( test_atomic_bool )
-            CPPUNIT_TEST( test_atomic_char )
-            CPPUNIT_TEST( test_atomic_signed_char)
-            CPPUNIT_TEST( test_atomic_unsigned_char)
-            CPPUNIT_TEST( test_atomic_short_int)
-            CPPUNIT_TEST( test_atomic_unsigned_short_int)
-            CPPUNIT_TEST( test_atomic_int)
-            CPPUNIT_TEST( test_atomic_unsigned_int)
-            CPPUNIT_TEST( test_atomic_long)
-            CPPUNIT_TEST( test_atomic_unsigned_long)
-            CPPUNIT_TEST( test_atomic_long_long)
-            CPPUNIT_TEST( test_atomic_unsigned_long_long)
-
-            CPPUNIT_TEST( test_atomic_bool_volatile )
-            CPPUNIT_TEST( test_atomic_char_volatile )
-            CPPUNIT_TEST( test_atomic_signed_char_volatile)
-            CPPUNIT_TEST( test_atomic_unsigned_char_volatile)
-            CPPUNIT_TEST( test_atomic_short_int_volatile)
-            CPPUNIT_TEST( test_atomic_unsigned_short_int_volatile)
-            CPPUNIT_TEST( test_atomic_int_volatile)
-            CPPUNIT_TEST( test_atomic_unsigned_int_volatile)
-            CPPUNIT_TEST( test_atomic_long_volatile)
-            CPPUNIT_TEST( test_atomic_unsigned_long_volatile)
-            CPPUNIT_TEST( test_atomic_long_long_volatile)
-            CPPUNIT_TEST( test_atomic_unsigned_long_long_volatile)
-
-            CPPUNIT_TEST( test_atomic_pointer_void)
-            CPPUNIT_TEST( test_atomic_pointer_void_volatile)
-
-            CPPUNIT_TEST( test_atomic_pointer_char)
-            CPPUNIT_TEST( test_atomic_pointer_short)
-            CPPUNIT_TEST( test_atomic_pointer_int)
-            CPPUNIT_TEST( test_atomic_pointer_long)
-            CPPUNIT_TEST( test_atomic_pointer_long_long)
-
-            CPPUNIT_TEST( test_atomic_pointer_char_volatile)
-            CPPUNIT_TEST( test_atomic_pointer_short_volatile)
-            CPPUNIT_TEST( test_atomic_pointer_int_volatile)
-            CPPUNIT_TEST( test_atomic_pointer_long_volatile)
-            CPPUNIT_TEST( test_atomic_pointer_long_long_volatile)
-
-            CPPUNIT_TEST( test_atomic_fence)
-
-        CPPUNIT_TEST_SUITE_END()
-    };
-}   // namespace misc
-
-CPPUNIT_TEST_SUITE_REGISTRATION(misc::cxx11_atomic_func);
-
-#endif // #ifndef CDS_USE_BOOST_ATOMIC
diff --git a/tests/test-hdr/misc/cxx11_convert_memory_order.h b/tests/test-hdr/misc/cxx11_convert_memory_order.h
deleted file mode 100644 (file)
index 15859c6..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-// This header should be included AFTER <cds/algo/atomic.h> if needed
-
-namespace misc {
-
-    static inline atomics::memory_order convert_to_store_order( atomics::memory_order order )
-    {
-        switch ( order ) {
-            case atomics::memory_order_acquire:
-            case atomics::memory_order_consume:
-                return atomics::memory_order_relaxed;
-            case atomics::memory_order_acq_rel:
-                return atomics::memory_order_release;
-            default:
-                return order;
-        }
-    }
-
-    static inline atomics::memory_order convert_to_load_order( atomics::memory_order order )
-    {
-        switch ( order ) {
-            case atomics::memory_order_release:
-                return atomics::memory_order_relaxed;
-            case atomics::memory_order_acq_rel:
-                return atomics::memory_order_acquire;
-            default:
-                return order;
-        }
-    }
-
-#if CDS_COMPILER == CDS_COMPILER_INTEL
-    static inline atomics::memory_order convert_to_exchange_order( atomics::memory_order order )
-    {
-        return order == atomics::memory_order_consume ? atomics::memory_order_relaxed : order;
-    }
-#else
-    static inline atomics::memory_order convert_to_exchange_order( atomics::memory_order order )
-    {
-        return order;
-    }
-#endif
-
-    template <typename T, bool Volatile>
-    struct add_volatile;
-
-    template <typename T>
-    struct add_volatile<T, false>
-    {
-        typedef T   type;
-    };
-
-    template <typename T>
-    struct add_volatile<T, true>
-    {
-        typedef T volatile   type;
-    };
-
-} // namespace misc
diff --git a/tests/test-hdr/misc/find_option.cpp b/tests/test-hdr/misc/find_option.cpp
deleted file mode 100644 (file)
index ad86faa..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include <type_traits>
-#include <cds/opt/options.h>
-
-// Value options
-namespace {
-
-    template <int Val>
-    struct int_opt {
-        static const int value = Val;
-    };
-
-    template <bool Val>
-    struct bool_opt {
-        static const bool value = Val;
-    };
-
-    enum user_enum {
-        val_zero, val_one, val_two, val_three, val_four, val_five
-    };
-
-    template <user_enum Val>
-    struct enum_opt {
-        static const user_enum value = Val;
-    };
-}
-
-// Declare necessary cds::opt::find_option specialization for user-provided enum type
-CDS_DECLARE_FIND_OPTION_INTEGRAL_SPECIALIZATION( user_enum )
-
-#if CDS_COMPILER == CDS_COMPILER_GCC && CDS_COMPILER_VERSION < 40500
-// GCC 4.4 does not support local struct declarations
-namespace {
-    struct tag_default;
-    struct tag_a;
-    struct tag_b;
-}
-#endif
-
-void find_option_compiler_test()
-{
-
-    // *************************************************
-    // Type options
-    //
-#if !(CDS_COMPILER == CDS_COMPILER_GCC && CDS_COMPILER_VERSION < 40500)
-    // GCC 4.4 does not support local struct declarations
-    struct tag_default;
-    struct tag_a;
-    struct tag_b;
-#endif
-
-    // Option not found
-    static_assert( (std::is_same<
-        cds::opt::find_option< cds::opt::tag<tag_default>, cds::opt::stat<tag_a>, bool_opt<false> >::type,
-        cds::opt::tag<tag_default>
-    >::value), "Result != tag_default" );
-
-    // Option found once
-    static_assert( (std::is_same<
-        cds::opt::find_option< cds::opt::tag<tag_default>, cds::opt::tag<tag_a> >::type,
-        cds::opt::tag<tag_a>
-    >::value), "Result != tag_a" );
-
-    static_assert( (std::is_same<
-        cds::opt::find_option< cds::opt::tag<tag_default>, cds::opt::stat<tag_a>, cds::opt::tag<tag_a> >::type,
-        cds::opt::tag<tag_a>
-    >::value), "Result != tag_a" );
-
-    // First option
-    static_assert( (std::is_same<
-        cds::opt::find_option< cds::opt::tag<tag_default>
-        ,cds::opt::tag<tag_a>   // desired
-        ,cds::opt::stat<tag_a>
-        ,cds::opt::stat<tag_a>
-        ,cds::opt::stat<tag_a>
-        ,cds::opt::stat<tag_a>
-        ,cds::opt::stat<tag_a>
-        >::type,
-        cds::opt::tag<tag_a>
-    >::value), "Result != tag_a" );
-
-    // Last option
-    static_assert( (std::is_same<
-        cds::opt::find_option< cds::opt::tag<tag_default>
-        ,cds::opt::stat<tag_a>
-        ,cds::opt::stat<tag_a>
-        ,cds::opt::stat<tag_a>
-        ,cds::opt::stat<tag_a>
-        ,cds::opt::stat<tag_a>
-        ,cds::opt::tag<tag_a>   // desired
-        >::type,
-        cds::opt::tag<tag_a>
-    >::value), "Result != tag_a" );
-
-    // Middle option
-    static_assert( (std::is_same<
-        cds::opt::find_option< cds::opt::tag<tag_default>
-        ,cds::opt::stat<tag_a>
-        ,cds::opt::stat<tag_a>
-        ,cds::opt::stat<tag_a>
-        ,cds::opt::tag<tag_a>   // desired
-        ,cds::opt::stat<tag_a>
-        ,cds::opt::stat<tag_a>
-        >::type,
-        cds::opt::tag<tag_a>
-    >::value), "Result != tag_a" );
-
-    // Option not found
-    static_assert( (std::is_same<
-        cds::opt::find_option< cds::opt::tag<tag_default>
-        ,cds::opt::stat<tag_a>
-        ,cds::opt::stat<tag_a>
-        ,cds::opt::stat<tag_a>
-        ,cds::opt::stat<tag_default>
-        ,cds::opt::stat<tag_a>
-        ,cds::opt::stat<tag_a>
-        >::type,
-        cds::opt::tag<tag_default>
-    >::value), "Result != tag_default" );
-
-    // Multiple options
-    static_assert( (std::is_same<
-        cds::opt::find_option< cds::opt::tag<tag_default>, cds::opt::tag<tag_a>, cds::opt::tag<tag_b> >::type,
-        cds::opt::tag<tag_a>
-    >::value), "Result != tag_a" );
-
-    static_assert( (std::is_same<
-        cds::opt::find_option< cds::opt::tag<tag_default>
-        ,cds::opt::tag<tag_a>   // desired - first accepted
-        ,cds::opt::stat<tag_a>
-        ,cds::opt::stat<tag_a>
-        ,cds::opt::stat<tag_b>
-        ,cds::opt::stat<tag_a>
-        ,cds::opt::stat<tag_a>
-        ,cds::opt::tag<tag_b>    // desired
-        >::type,
-        cds::opt::tag<tag_a>
-    >::value), "Result != tag_a" );
-
-
-
-    // *****************************************************
-    // Value options
-
-    // Not found
-    static_assert( (std::is_same<
-        cds::opt::find_option< int_opt<15>, bool_opt<false>, cds::opt::stat<tag_a> >::type,
-        int_opt<15>
-    >::value), "Result != int_opt<15>" );
-
-    static_assert( (std::is_same<
-        cds::opt::find_option< int_opt<15>, int_opt<100>, cds::opt::stat<tag_a> >::type,
-        int_opt<100>
-    >::value), "Result != int_opt<100>" );
-
-    static_assert( (std::is_same<
-        cds::opt::find_option< int_opt<15>, int_opt<100>, cds::opt::stat<tag_a>, bool_opt<true>, int_opt<200> >::type,
-        int_opt<100>
-    >::value), "Result != int_opt<100>" );
-
-    // User-provided enum type
-    static_assert( (std::is_same<
-        cds::opt::find_option< enum_opt<val_zero>, int_opt<100>, cds::opt::stat<tag_a>, int_opt<200> >::type,
-        enum_opt<val_zero>
-    >::value), "Result != enum_opt<val_zero>" );
-
-    static_assert( (std::is_same<
-        cds::opt::find_option< enum_opt<val_zero>, int_opt<100>, cds::opt::stat<tag_a>, enum_opt<val_three>, int_opt<200> >::type,
-        enum_opt<val_three>
-    >::value), "Result != enum_opt<val_three>" );
-
-}
-
-void test_extracting_option_value()
-{
-#if !(CDS_COMPILER == CDS_COMPILER_GCC && CDS_COMPILER_VERSION < 40500)
-    // GCC 4.4 does not support local struct declarations
-    struct tag_a;
-#endif
-    // Define option
-    typedef cds::opt::tag< tag_a >  tag_option;
-
-    // What is the value of the tag_option?
-    // How we can extract tag_a from tag_option?
-    // Here is a solution:
-    typedef cds::opt::value< tag_option >::tag  tag_option_value;
-
-    // tag_option_value is the same as tag_a
-    static_assert( (std::is_same< tag_option_value, tag_a >::value), "Error getting the value of option: tag_option_value != tag_a" );
-
-    // Value-option
-    typedef cds::opt::alignment< 16 >   align_option;
-    static_assert( cds::opt::value< align_option >::alignment == 16, "Error getting the value of option: option value != 16" );
-}
diff --git a/tests/test-hdr/misc/hash_tuple.cpp b/tests/test-hdr/misc/hash_tuple.cpp
deleted file mode 100644 (file)
index 04545af..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include <cds/opt/hash.h>
-
-#include "cppunit/cppunit_proxy.h"
-
-namespace misc {
-    namespace {
-        typedef cds::opt::v::hash_selector< cds::opt::none >::type hashing;
-
-#define HASHING(_n) \
-        struct hash##_n: public hashing { \
-            template <typename T> size_t operator()( T const& v ) const { return hashing::operator()(v) + _n ; } \
-        };
-
-        HASHING(2)
-        HASHING(3)
-        HASHING(4)
-        HASHING(5)
-        HASHING(6)
-        HASHING(7)
-        HASHING(8)
-        HASHING(9)
-        HASHING(10)
-#undef HASHING
-    }
-
-    class HashTuple: public CppUnitMini::TestCase
-    {
-        void test()
-        {
-            int nVal = 5;
-            size_t nHash = hashing()(nVal);
-
-            size_t val[16];
-
-            cds::opt::hash< std::tuple< hashing, hash2 > >::pack<cds::opt::none>::hash  h2;
-            h2( val, nVal );
-            CPPUNIT_ASSERT( val[0] == nHash );
-            CPPUNIT_ASSERT( val[1] == nHash + 2 );
-
-            cds::opt::hash< std::tuple< hashing, hash2, hash3 > >::pack<cds::opt::none>::hash  h3;
-            h3( val, nVal );
-            CPPUNIT_ASSERT( val[0] == nHash );
-            CPPUNIT_ASSERT( val[1] == nHash + 2 );
-            CPPUNIT_ASSERT( val[2] == nHash + 3 );
-
-            cds::opt::hash< std::tuple< hashing, hash2, hash3, hash4 > >::pack<cds::opt::none>::hash  h4;
-            h4( val, nVal );
-            CPPUNIT_ASSERT( val[0] == nHash );
-            CPPUNIT_ASSERT( val[1] == nHash + 2 );
-            CPPUNIT_ASSERT( val[2] == nHash + 3 );
-            CPPUNIT_ASSERT( val[3] == nHash + 4 );
-
-            cds::opt::hash< std::tuple< hashing, hash2, hash3, hash4, hash5 > >::pack<cds::opt::none>::hash  h5;
-            h5( val, nVal );
-            CPPUNIT_ASSERT( val[0] == nHash );
-            CPPUNIT_ASSERT( val[1] == nHash + 2 );
-            CPPUNIT_ASSERT( val[2] == nHash + 3 );
-            CPPUNIT_ASSERT( val[3] == nHash + 4 );
-            CPPUNIT_ASSERT( val[4] == nHash + 5 );
-
-#if !((CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER == 1700)
-            // MS VC 11: std::tuple suports up to 5 template params only
-
-            cds::opt::hash< std::tuple< hashing, hash2, hash3, hash4, hash5, hash6 > >::pack<cds::opt::none>::hash  h6;
-            h6( val, nVal );
-            CPPUNIT_ASSERT( val[0] == nHash );
-            CPPUNIT_ASSERT( val[1] == nHash + 2 );
-            CPPUNIT_ASSERT( val[2] == nHash + 3 );
-            CPPUNIT_ASSERT( val[3] == nHash + 4 );
-            CPPUNIT_ASSERT( val[4] == nHash + 5 );
-            CPPUNIT_ASSERT( val[5] == nHash + 6 );
-
-            cds::opt::hash< std::tuple< hashing, hash2, hash3, hash4, hash5, hash6, hash7 > >::pack<cds::opt::none>::hash  h7;
-            h7( val, nVal );
-            CPPUNIT_ASSERT( val[0] == nHash );
-            CPPUNIT_ASSERT( val[1] == nHash + 2 );
-            CPPUNIT_ASSERT( val[2] == nHash + 3 );
-            CPPUNIT_ASSERT( val[3] == nHash + 4 );
-            CPPUNIT_ASSERT( val[4] == nHash + 5 );
-            CPPUNIT_ASSERT( val[5] == nHash + 6 );
-            CPPUNIT_ASSERT( val[6] == nHash + 7 );
-
-            cds::opt::hash< std::tuple< hashing, hash2, hash3, hash4, hash5, hash6, hash7, hash8 > >::pack<cds::opt::none>::hash  h8;
-            h8( val, nVal );
-            CPPUNIT_ASSERT( val[0] == nHash );
-            CPPUNIT_ASSERT( val[1] == nHash + 2 );
-            CPPUNIT_ASSERT( val[2] == nHash + 3 );
-            CPPUNIT_ASSERT( val[3] == nHash + 4 );
-            CPPUNIT_ASSERT( val[4] == nHash + 5 );
-            CPPUNIT_ASSERT( val[5] == nHash + 6 );
-            CPPUNIT_ASSERT( val[6] == nHash + 7 );
-            CPPUNIT_ASSERT( val[7] == nHash + 8 );
-
-            cds::opt::hash< std::tuple< hashing, hash2, hash3, hash4, hash5, hash6, hash7, hash8, hash9 > >::pack<cds::opt::none>::hash  h9;
-            h9( val, nVal );
-            CPPUNIT_ASSERT( val[0] == nHash );
-            CPPUNIT_ASSERT( val[1] == nHash + 2 );
-            CPPUNIT_ASSERT( val[2] == nHash + 3 );
-            CPPUNIT_ASSERT( val[3] == nHash + 4 );
-            CPPUNIT_ASSERT( val[4] == nHash + 5 );
-            CPPUNIT_ASSERT( val[5] == nHash + 6 );
-            CPPUNIT_ASSERT( val[6] == nHash + 7 );
-            CPPUNIT_ASSERT( val[7] == nHash + 8 );
-            CPPUNIT_ASSERT( val[8] == nHash + 9 );
-
-            cds::opt::hash< std::tuple< hashing, hash2, hash3, hash4, hash5, hash6, hash7, hash8, hash9, hash10 > >::pack<cds::opt::none>::hash  h10;
-            h10( val, nVal );
-            CPPUNIT_ASSERT( val[0] == nHash );
-            CPPUNIT_ASSERT( val[1] == nHash + 2 );
-            CPPUNIT_ASSERT( val[2] == nHash + 3 );
-            CPPUNIT_ASSERT( val[3] == nHash + 4 );
-            CPPUNIT_ASSERT( val[4] == nHash + 5 );
-            CPPUNIT_ASSERT( val[5] == nHash + 6 );
-            CPPUNIT_ASSERT( val[6] == nHash + 7 );
-            CPPUNIT_ASSERT( val[7] == nHash + 8 );
-            CPPUNIT_ASSERT( val[8] == nHash + 9 );
-            CPPUNIT_ASSERT( val[9] == nHash + 10 );
-#endif
-        }
-
-    public:
-        CPPUNIT_TEST_SUITE(HashTuple)
-            CPPUNIT_TEST( test )
-        CPPUNIT_TEST_SUITE_END()
-
-    };
-} // namespace misc
-
-CPPUNIT_TEST_SUITE_REGISTRATION(misc::HashTuple);
diff --git a/tests/test-hdr/misc/michael_allocator.cpp b/tests/test-hdr/misc/michael_allocator.cpp
deleted file mode 100644 (file)
index 94553af..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "misc/michael_allocator.h"
-
-namespace misc {
-    t_MichaelHeap_NoStat  s_MichaelHeap_NoStat;
-    t_MichaelHeap_Stat    s_MichaelHeap_Stat;
-}
diff --git a/tests/test-hdr/misc/michael_allocator.h b/tests/test-hdr/misc/michael_allocator.h
deleted file mode 100644 (file)
index 86c533b..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include <cds/memory/michael/allocator.h>
-#include <iostream>
-
-namespace misc {
-    namespace ma = cds::memory::michael;
-
-    typedef ma::Heap<
-        ma::opt::procheap_stat<ma::procheap_empty_stat>,
-        ma::opt::os_allocated_stat<ma::os_allocated_empty>,
-        ma::opt::check_bounds<ma::debug_bound_checking>
-    >      t_MichaelHeap_NoStat;
-
-    typedef ma::Heap<
-        ma::opt::procheap_stat<ma::procheap_atomic_stat >,
-        ma::opt::os_allocated_stat<ma::os_allocated_atomic >,
-        ma::opt::check_bounds<ma::debug_bound_checking>
-    >  t_MichaelHeap_Stat;
-
-    typedef ma::summary_stat            summary_stat;
-
-    extern t_MichaelHeap_NoStat  s_MichaelHeap_NoStat;
-    extern t_MichaelHeap_Stat    s_MichaelHeap_Stat;
-
-    template <typename T>
-    class MichaelHeap_NoStat
-    {
-    public:
-        typedef T value_type;
-        typedef T * pointer;
-
-        enum {
-            alignment = 1
-        };
-
-
-        pointer allocate( size_t nSize, const void * /*pHint*/ )
-        {
-            return reinterpret_cast<pointer>( s_MichaelHeap_NoStat.alloc( sizeof(T) * nSize ) );
-        }
-
-        void deallocate( pointer p, size_t /*nCount*/ )
-        {
-            s_MichaelHeap_NoStat.free( p );
-        }
-
-        static void stat(summary_stat& s)
-        {
-            s_MichaelHeap_NoStat.summaryStat(s);
-        }
-    };
-
-    template <typename T>
-    class std_allocator: public std::allocator<T>
-    {
-    public:
-        enum {
-            alignment = 1
-        };
-
-        static void stat(summary_stat& /*s*/)
-        {}
-    };
-
-    template <typename T>
-    class MichaelHeap_Stat
-    {
-    public:
-        typedef T value_type;
-        typedef T * pointer;
-
-        enum {
-            alignment = 1
-        };
-
-        pointer allocate( size_t nSize, const void * /*pHint*/ )
-        {
-            return reinterpret_cast<pointer>( s_MichaelHeap_Stat.alloc( sizeof(T) * nSize ) );
-        }
-
-        void deallocate( pointer p, size_t /*nCount*/ )
-        {
-            s_MichaelHeap_Stat.free( p );
-        }
-
-        static void stat(summary_stat& s)
-        {
-            s_MichaelHeap_Stat.summaryStat(s);
-        }
-    };
-
-    template <typename T, size_t ALIGN>
-    class MichaelAlignHeap_NoStat
-    {
-    public:
-        typedef T value_type;
-        typedef T * pointer;
-
-        enum {
-            alignment = ALIGN
-        };
-
-        pointer allocate( size_t nSize, const void * /*pHint*/ )
-        {
-            return reinterpret_cast<pointer>( s_MichaelHeap_NoStat.alloc_aligned( sizeof(T) * nSize, ALIGN ) );
-        }
-
-        void deallocate( pointer p, size_t /*nCount*/ )
-        {
-            s_MichaelHeap_NoStat.free_aligned( p );
-        }
-
-        static void stat(summary_stat& s)
-        {
-            s_MichaelHeap_NoStat.summaryStat(s);
-        }
-    };
-
-    template <typename T, size_t ALIGN>
-    class MichaelAlignHeap_Stat {
-    public:
-        typedef T value_type;
-        typedef T * pointer;
-
-        enum {
-            alignment = ALIGN
-        };
-
-        pointer allocate( size_t nSize, const void * /*pHint*/ )
-        {
-            return reinterpret_cast<pointer>( s_MichaelHeap_Stat.alloc_aligned( sizeof(T) * nSize, ALIGN ) );
-        }
-
-        void deallocate( pointer p, size_t /*nCount*/ )
-        {
-            s_MichaelHeap_Stat.free_aligned( p );
-        }
-
-        static void stat(summary_stat& s)
-        {
-            s_MichaelHeap_Stat.summaryStat(s);
-        }
-    };
-
-    template <typename T, size_t ALIGN>
-    class system_aligned_allocator
-    {
-    public:
-        typedef T value_type;
-        typedef T * pointer;
-
-        enum {
-            alignment = ALIGN
-        };
-
-        pointer allocate( size_t nSize, const void * /*pHint*/ )
-        {
-            return reinterpret_cast<pointer>( cds::OS::aligned_malloc( sizeof(T) * nSize, ALIGN ) );
-        }
-
-        void deallocate( pointer p, size_t /*nCount*/ )
-        {
-            cds::OS::aligned_free( p );
-        }
-
-        static void stat(summary_stat& /*s*/)
-        {}
-    };
-
-    static inline std::ostream& operator <<(std::ostream& os, const summary_stat& s)
-    {
-        os  << "\t         alloc from active: " << s.nAllocFromActive << "\n"
-            << "\t        alloc from partial: " << s.nAllocFromPartial << "\n"
-            << "\t            alloc from new: " << s.nAllocFromNew << "\n"
-            << "\t           free call count: " << s.nFreeCount << "\n"
-            << "\t      superblock allocated: " << s.nPageAllocCount << "\n"
-            << "\t    superblock deallocated: " << s.nPageDeallocCount << "\n"
-            << "\t superblock desc allocated: " << s.nDescAllocCount << "\n"
-            << "\t      superblock full desc: " << s.nDescFull << "\n"
-            << "\t     total allocated bytes: " << s.nBytesAllocated << "\n"
-            << "\t   total deallocated bytes: " << s.nBytesDeallocated << "\n"
-            << "\tOS-allocated large blocks\n"
-            << "\t          alloc call count: " << s.nSysAllocCount << "\n"
-            << "\t           free call count: " << s.nSysFreeCount << "\n"
-            << "\t     total allocated bytes: " << s.nSysBytesAllocated << "\n"
-            << "\t   total deallocated bytes: " << s.nSysBytesDeallocated << "\n"
-            << "\tCAS contention indicators\n"
-            << "\t updating active field of active block: " << s.nActiveDescCASFailureCount << "\n"
-            << "\t updating anchor field of active block: " << s.nActiveAnchorCASFailureCount << "\n"
-            << "\tupdating active field of partial block: " << s.nPartialDescCASFailureCount << "\n"
-            << "\tupdating anchor field of partial block: " << s.nPartialAnchorCASFailureCount
-            << std::endl;
-
-        return os;
-    }
-}
diff --git a/tests/test-hdr/misc/permutation_generator.cpp b/tests/test-hdr/misc/permutation_generator.cpp
deleted file mode 100644 (file)
index 86dc207..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include <cds/opt/permutation.h>
-#include "cppunit/cppunit_proxy.h"
-
-namespace misc {
-
-    class Permutations: public CppUnitMini::TestCase
-    {
-        static const size_t c_nMax = 1024;
-
-        template <typename Gen>
-        void test_with( Gen& gen, size_t nLen )
-        {
-            unsigned int arr[c_nMax];
-            for ( size_t nPass = 0; nPass < 10; ++nPass ) {
-                for ( size_t i = 0; i < c_nMax; ++i )
-                    arr[i] = 0;
-
-                do {
-                    typename Gen::integer_type i = gen;
-                    ++arr[ i ];
-                } while ( gen.next() );
-
-                for ( size_t i = 0; i < nLen; ++i )
-                    CPPUNIT_CHECK_EX( arr[i] == 1, "arr[" << i << "]=" << arr[i] );
-                for ( size_t i = nLen; i < c_nMax; ++i )
-                    CPPUNIT_CHECK_EX( arr[i] == 0, "arr[" << i << "]=" << arr[i] );
-
-                gen.reset();
-            }
-        }
-
-        template <typename Gen>
-        void test()
-        {
-            for ( size_t nLen = 2; nLen <= c_nMax; ++nLen ) {
-                Gen gen( nLen );
-                test_with( gen, nLen );
-            }
-        }
-
-        template <typename Gen>
-        void test2()
-        {
-            for ( size_t nLen = 2; nLen <= c_nMax; nLen *= 2 ) {
-                Gen gen( nLen );
-                test_with( gen, nLen );
-            }
-        }
-
-        void test_random_permutation()
-        {
-            test< cds::opt::v::random_permutation<> >();
-        }
-
-        void test_random2_permutation()
-        {
-            test2< cds::opt::v::random2_permutation<> >();
-        }
-
-        void test_random_shuffle_permutation()
-        {
-            test< cds::opt::v::random_shuffle_permutation<> >();
-        }
-
-    public:
-        CPPUNIT_TEST_SUITE(Permutations)
-            CPPUNIT_TEST( test_random_permutation )
-            CPPUNIT_TEST( test_random2_permutation )
-            CPPUNIT_TEST( test_random_shuffle_permutation )
-        CPPUNIT_TEST_SUITE_END()
-    };
-
-} // namespace misc
-
-CPPUNIT_TEST_SUITE_REGISTRATION(misc::Permutations);
diff --git a/tests/test-hdr/misc/split_bitstring.cpp b/tests/test-hdr/misc/split_bitstring.cpp
deleted file mode 100644 (file)
index f71af5e..0000000
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/cppunit_proxy.h"
-
-#include <cds/algo/split_bitstring.h>
-
-class Split_bitstrig : public CppUnitMini::TestCase
-{
-private:
-    bool is_big_endian()
-    {
-        union {
-            uint32_t ui;
-            uint8_t  ch;
-        } byte_order;
-        byte_order.ui = 0xFF000001;
-
-        return byte_order.ch != 0x01;
-    }
-protected:
-
-    void cut_uint()
-    {
-        if ( is_big_endian() )
-            cut_uint_be();
-        else
-            cut_uint_le();
-    }
-
-    void cut_uint16()
-    {
-        if ( is_big_endian() )
-            cut_small_be<uint16_t>();
-        else
-            cut_small_le<uint16_t>();
-    }
-
-    void cut_uint_le()
-    {
-        CPPUNIT_MSG("little-endian byte order");
-
-        typedef cds::algo::split_bitstring< size_t > split_bitstring;
-
-        size_t src = sizeof(src) == 8 ? 0xFEDCBA9876543210 : 0x76543210;
-        split_bitstring splitter(src);
-        size_t res;
-
-        // Trivial case
-        CPPUNIT_ASSERT( !splitter.eos() );
-        CPPUNIT_ASSERT( splitter );
-        res = splitter.cut(sizeof(src) * 8);
-        CPPUNIT_ASSERT_EX( res == src, "src=" << src << ", result=" << res );
-        CPPUNIT_ASSERT( splitter.eos() );
-        CPPUNIT_ASSERT( !splitter );
-        CPPUNIT_ASSERT(splitter.safe_cut(sizeof(src) * 8) == 0 );
-        CPPUNIT_ASSERT( splitter.eos() );
-        CPPUNIT_ASSERT( !splitter );
-        splitter.reset();
-        CPPUNIT_ASSERT( !splitter.eos() );
-        CPPUNIT_ASSERT( splitter );
-        res = splitter.cut(sizeof(src) * 8);
-        CPPUNIT_ASSERT_EX( res == src, "src=" << src << ", result=" << res );
-        CPPUNIT_ASSERT( splitter.eos() );
-        CPPUNIT_ASSERT( !splitter );
-        CPPUNIT_ASSERT(splitter.safe_cut(sizeof(src) * 8) == 0 );
-        CPPUNIT_ASSERT( splitter.eos() );
-        CPPUNIT_ASSERT( !splitter );
-
-        // Cut each hex digit
-        splitter.reset();
-        for ( size_t i = 0; i < sizeof(size_t) * 2; ++i ) {
-            CPPUNIT_ASSERT( !splitter.eos() );
-            CPPUNIT_ASSERT( splitter );
-            CPPUNIT_ASSERT( splitter.cut( 4 ) == i );
-        }
-        CPPUNIT_ASSERT( splitter.eos() );
-        CPPUNIT_ASSERT( !splitter );
-
-        // by one bit
-        {
-            splitter.reset();
-            res = 0;
-            for ( size_t i = 0; i < sizeof(size_t) * 8; ++i ) {
-                CPPUNIT_ASSERT( !splitter.eos() );
-                CPPUNIT_ASSERT( splitter );
-                res = res + (splitter.cut( 1 ) << i);
-            }
-            CPPUNIT_ASSERT( splitter.eos() );
-            CPPUNIT_ASSERT( !splitter );
-            CPPUNIT_ASSERT( res == src );
-        }
-
-        // random cut
-        {
-            for ( size_t k = 0; k < 100; ++k ) {
-                splitter.reset();
-                res = 0;
-                size_t shift = 0;
-                while ( splitter ) {
-                    CPPUNIT_ASSERT( !splitter.eos() );
-                    CPPUNIT_ASSERT( splitter );
-                    int bits = rand() % 16;
-                    res = res + ( splitter.safe_cut( bits ) << shift );
-                    shift += bits;
-                }
-                CPPUNIT_ASSERT( splitter.eos() );
-                CPPUNIT_ASSERT( !splitter );
-                CPPUNIT_ASSERT( res == src );
-            }
-        }
-    }
-
-    void cut_uint_be()
-    {
-        CPPUNIT_MSG("big-endian byte order");
-
-        typedef cds::algo::split_bitstring< size_t > split_bitstring;
-
-        size_t src = sizeof(src) == 8 ? 0xFEDCBA9876543210 : 0x76543210;
-        split_bitstring splitter(src);
-        size_t res;
-
-        // Trivial case
-        CPPUNIT_ASSERT( !splitter.eos() );
-        CPPUNIT_ASSERT( splitter );
-        res = splitter.cut(sizeof(src) * 8);
-        CPPUNIT_ASSERT_EX( res == src, "src=" << src << ", result=" << res );
-        CPPUNIT_ASSERT( splitter.eos() );
-        CPPUNIT_ASSERT( !splitter );
-        CPPUNIT_ASSERT(splitter.safe_cut(sizeof(src) * 8) == 0 );
-        CPPUNIT_ASSERT( splitter.eos() );
-        CPPUNIT_ASSERT( !splitter );
-        splitter.reset();
-        CPPUNIT_ASSERT( !splitter.eos() );
-        CPPUNIT_ASSERT( splitter );
-        res = splitter.cut(sizeof(src) * 8);
-        CPPUNIT_ASSERT_EX( res == src, "src=" << src << ", result=" << res );
-        CPPUNIT_ASSERT( splitter.eos() );
-        CPPUNIT_ASSERT( !splitter );
-        CPPUNIT_ASSERT(splitter.safe_cut(sizeof(src) * 8) == 0 );
-        CPPUNIT_ASSERT( splitter.eos() );
-        CPPUNIT_ASSERT( !splitter );
-
-        // Cut each hex digit
-        splitter.reset();
-        for ( size_t i = 0; i < sizeof(size_t) * 2; ++i ) {
-            CPPUNIT_ASSERT( !splitter.eos() );
-            CPPUNIT_ASSERT( splitter );
-            CPPUNIT_ASSERT( splitter.cut( 4 ) == 0x0F - i );
-        }
-        CPPUNIT_ASSERT( splitter.eos() );
-        CPPUNIT_ASSERT( !splitter );
-
-        // by one bit
-        {
-            splitter.reset();
-            res = 0;
-            for ( size_t i = 0; i < sizeof(size_t) * 8; ++i ) {
-                CPPUNIT_ASSERT( !splitter.eos() );
-                CPPUNIT_ASSERT( splitter );
-                res = (res << 1) + splitter.cut( 1 );
-            }
-            CPPUNIT_ASSERT( splitter.eos() );
-            CPPUNIT_ASSERT( !splitter );
-            CPPUNIT_ASSERT( res == src );
-        }
-
-        // random cut
-        {
-            for ( size_t k = 0; k < 100; ++k ) {
-                splitter.reset();
-                res = 0;
-                while ( splitter ) {
-                    CPPUNIT_ASSERT( !splitter.eos() );
-                    CPPUNIT_ASSERT( splitter );
-                    int bits = rand() % 16;
-                    res = (res << bits) + splitter.safe_cut( bits );
-                }
-                CPPUNIT_ASSERT( splitter.eos() );
-                CPPUNIT_ASSERT( !splitter );
-                CPPUNIT_ASSERT( res == src );
-            }
-        }
-    }
-
-
-private:
-    template <typename PartUInt>
-    void cut_small_le()
-    {
-        CPPUNIT_MSG("little-endian byte order");
-        typedef PartUInt part_uint;
-
-        typedef cds::algo::split_bitstring< uint64_t, part_uint > split_bitstring;
-
-        uint64_t src = 0xFEDCBA9876543210;
-        split_bitstring splitter(src);
-        uint64_t res;
-
-        // Cut each hex digit
-        splitter.reset();
-        for ( size_t i = 0; i < sizeof(size_t) * 2; ++i ) {
-            CPPUNIT_ASSERT( !splitter.eos() );
-            CPPUNIT_ASSERT( splitter );
-            CPPUNIT_ASSERT( static_cast<size_t>(splitter.cut( 4 )) == i );
-        }
-        CPPUNIT_ASSERT( splitter.eos() );
-        CPPUNIT_ASSERT( !splitter );
-
-        // by one bit
-        {
-            splitter.reset();
-            res = 0;
-            for ( size_t i = 0; i < sizeof(size_t) * 8; ++i ) {
-                CPPUNIT_ASSERT( !splitter.eos() );
-                CPPUNIT_ASSERT( splitter );
-                res = res + ( static_cast<uint64_t>(splitter.cut( 1 )) << i);
-            }
-            CPPUNIT_ASSERT( splitter.eos() );
-            CPPUNIT_ASSERT( !splitter );
-            CPPUNIT_ASSERT( res == src );
-        }
-
-        // random cut
-        {
-            for ( size_t k = 0; k < 100; ++k ) {
-                splitter.reset();
-                res = 0;
-                size_t shift = 0;
-                while ( splitter ) {
-                    CPPUNIT_ASSERT( !splitter.eos() );
-                    CPPUNIT_ASSERT( splitter );
-                    int bits = rand() % 16;
-                    res = res + ( static_cast<uint64_t>(splitter.safe_cut( bits )) << shift );
-                    shift += bits;
-                }
-                CPPUNIT_ASSERT( splitter.eos() );
-                CPPUNIT_ASSERT( !splitter );
-                CPPUNIT_ASSERT( res == src );
-            }
-        }
-    }
-
-    template <typename PartUInt>
-    void cut_small_be()
-    {
-        CPPUNIT_MSG("big-endian byte order");
-        typedef PartUInt part_uint;
-
-        typedef cds::algo::split_bitstring< uint64_t, part_uint > split_bitstring;
-
-        uint64_t src = 0xFEDCBA9876543210;
-        split_bitstring splitter(src);
-        uint64_t res;
-
-        // Cut each hex digit
-        splitter.reset();
-        for ( size_t i = 0; i < sizeof(size_t) * 2; ++i ) {
-            CPPUNIT_ASSERT( !splitter.eos() );
-            CPPUNIT_ASSERT( splitter );
-            CPPUNIT_ASSERT( splitter.cut( 4 ) == 0x0F - i );
-        }
-        CPPUNIT_ASSERT( splitter.eos() );
-        CPPUNIT_ASSERT( !splitter );
-
-        // by one bit
-        {
-            splitter.reset();
-            res = 0;
-            for ( size_t i = 0; i < sizeof(size_t) * 8; ++i ) {
-                CPPUNIT_ASSERT( !splitter.eos() );
-                CPPUNIT_ASSERT( splitter );
-                res = (res << 1) + splitter.cut( 1 );
-            }
-            CPPUNIT_ASSERT( splitter.eos() );
-            CPPUNIT_ASSERT( !splitter );
-            CPPUNIT_ASSERT( res == src );
-        }
-
-        // random cut
-        {
-            for ( size_t k = 0; k < 100; ++k ) {
-                splitter.reset();
-                res = 0;
-                while ( splitter ) {
-                    CPPUNIT_ASSERT( !splitter.eos() );
-                    CPPUNIT_ASSERT( splitter );
-                    int bits = rand() % 16;
-                    res = (res << bits) + splitter.safe_cut( bits );
-                }
-                CPPUNIT_ASSERT( splitter.eos() );
-                CPPUNIT_ASSERT( !splitter );
-                CPPUNIT_ASSERT( res == src );
-            }
-        }
-    }
-
-
-    CPPUNIT_TEST_SUITE(Split_bitstrig);
-        CPPUNIT_TEST(cut_uint)
-        CPPUNIT_TEST(cut_uint16)
-    CPPUNIT_TEST_SUITE_END();
-};
-
-CPPUNIT_TEST_SUITE_REGISTRATION(Split_bitstrig);
diff --git a/tests/test-hdr/misc/thread_init_fini.cpp b/tests/test-hdr/misc/thread_init_fini.cpp
deleted file mode 100644 (file)
index bdc302a..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/thread.h"
-#include <cds/threading/model.h>
-
-namespace {
-    static size_t s_nThreadCount = 8;
-    static size_t s_nPassCount = 1000000;
-}
-
-class thread_init_fini: public CppUnitMini::TestCase
-{
-    class Thread: public CppUnitMini::TestThread
-    {
-        virtual TestThread *    clone()
-        {
-            return new Thread( *this );
-        }
-
-    public:
-        Thread( CppUnitMini::ThreadPool& pool )
-            : CppUnitMini::TestThread( pool )
-        {}
-        Thread( Thread& src )
-            : CppUnitMini::TestThread( src )
-        {}
-
-        thread_init_fini&  getTest()
-        {
-            return reinterpret_cast<thread_init_fini&>( m_Pool.m_Test );
-        }
-
-        virtual void init()
-        {}
-        virtual void fini()
-        {}
-
-        virtual void test()
-        {
-            for ( size_t i = 0; i < s_nPassCount; ++i ) {
-                CPPUNIT_ASSERT(!cds::threading::Manager::isThreadAttached());
-                if ( !cds::threading::Manager::isThreadAttached() )
-                    cds::threading::Manager::attachThread();
-                CPPUNIT_ASSERT( cds::threading::Manager::isThreadAttached() );
-                cds::threading::Manager::detachThread();
-            }
-        }
-    };
-
-protected:
-    void init_fini()
-    {
-        CPPUNIT_MSG( "Thread init/fini test,\n    thread count=" << s_nThreadCount << " pass count=" << s_nPassCount << "..." );
-
-        CppUnitMini::ThreadPool pool( *this );
-
-        pool.add( new Thread( pool ), s_nThreadCount );
-
-        cds::OS::Timer    timer;
-        timer.reset();
-
-        pool.run();
-
-        CPPUNIT_MSG( "   Duration=" << timer.duration() );
-    }
-
-    void setUpParams( const CppUnitMini::TestCfg& cfg ) {
-        s_nThreadCount = cfg.getULong("ThreadCount", 8 );
-        s_nPassCount = cfg.getULong("PassCount", 1000000 );
-    }
-
-    CPPUNIT_TEST_SUITE(thread_init_fini)
-        CPPUNIT_TEST(init_fini);
-    CPPUNIT_TEST_SUITE_END();
-};
-
-CPPUNIT_TEST_SUITE_REGISTRATION(thread_init_fini);
diff --git a/tests/test-hdr/priority_queue/hdr_fcpqueue_boost_stable_vector.cpp b/tests/test-hdr/priority_queue/hdr_fcpqueue_boost_stable_vector.cpp
deleted file mode 100644 (file)
index 204f456..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "priority_queue/hdr_pqueue.h"
-#include <cds/container/fcpriority_queue.h>
-#include <boost/container/stable_vector.hpp>
-#include <boost/container/deque.hpp>
-
-namespace priority_queue {
-
-    void PQueueHdrTest::FCPQueue_stablevector()
-    {
-        typedef cds::container::FCPriorityQueue<
-            PQueueHdrTest::value_type
-            ,std::priority_queue<
-                PQueueHdrTest::value_type
-                ,boost::container::stable_vector<PQueueHdrTest::value_type>
-                ,PQueueHdrTest::less
-            >
-        > pqueue_type;
-        test_fcpqueue<pqueue_type>();
-    }
-
-    void PQueueHdrTest::FCPQueue_stablevector_stat()
-    {
-        typedef cds::container::FCPriorityQueue<
-            PQueueHdrTest::value_type
-            ,std::priority_queue<
-                PQueueHdrTest::value_type
-                ,boost::container::stable_vector<PQueueHdrTest::value_type>
-                ,PQueueHdrTest::less
-            >
-            ,cds::container::fcpqueue::make_traits<
-                cds::opt::stat< cds::container::fcpqueue::stat<> >
-            >::type
-        > pqueue_type;
-        test_fcpqueue<pqueue_type>();
-    }
-
-        void PQueueHdrTest::FCPQueue_boost_deque()
-    {
-        typedef cds::container::FCPriorityQueue<
-            PQueueHdrTest::value_type
-            ,std::priority_queue<
-                PQueueHdrTest::value_type
-                ,boost::container::deque<PQueueHdrTest::value_type>
-                ,PQueueHdrTest::less
-            >
-        > pqueue_type;
-        test_fcpqueue<pqueue_type>();
-    }
-
-    void PQueueHdrTest::FCPQueue_boost_deque_stat()
-    {
-        typedef cds::container::FCPriorityQueue<
-            PQueueHdrTest::value_type
-            ,std::priority_queue<
-                PQueueHdrTest::value_type
-                ,boost::container::deque<PQueueHdrTest::value_type>
-                ,PQueueHdrTest::less
-            >
-            ,cds::container::fcpqueue::make_traits<
-                cds::opt::stat< cds::container::fcpqueue::stat<> >
-            >::type
-        > pqueue_type;
-        test_fcpqueue<pqueue_type>();
-    }
-
-} // namespace priorty_queue
diff --git a/tests/test-hdr/priority_queue/hdr_fcpqueue_deque.cpp b/tests/test-hdr/priority_queue/hdr_fcpqueue_deque.cpp
deleted file mode 100644 (file)
index b4e27b3..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "priority_queue/hdr_pqueue.h"
-#include <cds/container/fcpriority_queue.h>
-#include <deque>
-
-namespace priority_queue {
-
-    void PQueueHdrTest::FCPQueue_deque()
-    {
-        typedef cds::container::FCPriorityQueue<
-            PQueueHdrTest::value_type
-            ,std::priority_queue<
-                PQueueHdrTest::value_type
-                ,std::deque<PQueueHdrTest::value_type>
-                ,PQueueHdrTest::less
-            >
-        > pqueue_type;
-        test_fcpqueue<pqueue_type>();
-    }
-
-    void PQueueHdrTest::FCPQueue_deque_stat()
-    {
-        typedef cds::container::FCPriorityQueue<
-            PQueueHdrTest::value_type
-            ,std::priority_queue<
-                PQueueHdrTest::value_type
-                ,std::deque<PQueueHdrTest::value_type>
-                ,PQueueHdrTest::less
-            >
-            ,cds::container::fcpqueue::make_traits<
-                cds::opt::stat< cds::container::fcpqueue::stat<> >
-            >::type
-        > pqueue_type;
-        test_fcpqueue<pqueue_type>();
-    }
-
-    void PQueueHdrTest::FCPQueue_deque_mutex()
-    {
-        typedef cds::container::FCPriorityQueue<
-            PQueueHdrTest::value_type
-            ,std::priority_queue<
-                PQueueHdrTest::value_type
-                ,std::deque<PQueueHdrTest::value_type>
-            >
-            ,cds::container::fcpqueue::make_traits<
-                cds::opt::lock_type< std::mutex >
-            >::type
-        > pqueue_type;
-        test_fcpqueue<pqueue_type>();
-    }
-
-} // namespace priorty_queue
diff --git a/tests/test-hdr/priority_queue/hdr_fcpqueue_vector.cpp b/tests/test-hdr/priority_queue/hdr_fcpqueue_vector.cpp
deleted file mode 100644 (file)
index 1914861..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "priority_queue/hdr_pqueue.h"
-#include <cds/container/fcpriority_queue.h>
-
-namespace priority_queue {
-
-    void PQueueHdrTest::FCPQueue_vector()
-    {
-        typedef cds::container::FCPriorityQueue< PQueueHdrTest::value_type > pqueue_type;
-        test_fcpqueue<pqueue_type>();
-    }
-
-    void PQueueHdrTest::FCPQueue_vector_stat()
-    {
-        struct pqueue_traits : public cds::container::fcpqueue::traits
-        {
-            typedef cds::container::fcpqueue::stat<> stat;
-        };
-        typedef cds::container::FCPriorityQueue<
-            PQueueHdrTest::value_type
-            ,std::priority_queue<
-                PQueueHdrTest::value_type
-                ,std::vector<PQueueHdrTest::value_type>
-                ,PQueueHdrTest::less
-            >
-            ,pqueue_traits
-        > pqueue_type;
-        test_fcpqueue<pqueue_type>();
-    }
-
-    void PQueueHdrTest::FCPQueue_vector_mutex()
-    {
-        typedef cds::container::FCPriorityQueue<
-            PQueueHdrTest::value_type
-            ,std::priority_queue< PQueueHdrTest::value_type >
-            ,cds::container::fcpqueue::make_traits<
-                cds::opt::lock_type< std::mutex >
-            >::type
-        > pqueue_type;
-        test_fcpqueue<pqueue_type>();
-    }
-
-} // namespace priorty_queue
diff --git a/tests/test-hdr/priority_queue/hdr_intrusive_mspqueue_dyn.cpp b/tests/test-hdr/priority_queue/hdr_intrusive_mspqueue_dyn.cpp
deleted file mode 100644 (file)
index 635311c..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "priority_queue/hdr_intrusive_pqueue.h"
-#include <cds/intrusive/mspriority_queue.h>
-
-namespace priority_queue {
-    namespace intrusive_pqueue {
-        template <typename T, typename Traits>
-        struct constants<cds::intrusive::MSPriorityQueue<T, Traits> > {
-            static size_t const nCapacity = c_nCapacity - 1;
-        };
-    }
-
-    namespace {
-        typedef cds::opt::v::dynamic_buffer< char > buffer_type;
-    }
-
-    void IntrusivePQueueHdrTest::MSPQueue_dyn()
-    {
-        struct pqueue_traits : public cds::intrusive::mspriority_queue::traits
-        {
-            typedef buffer_type buffer;
-        };
-        typedef cds::intrusive::MSPriorityQueue< IntrusivePQueueHdrTest::key_type, pqueue_traits > pqueue;
-
-        test_msq_dyn<pqueue>();
-    }
-
-    void IntrusivePQueueHdrTest::MSPQueue_dyn_cmp()
-    {
-        struct pqueue_traits : public cds::intrusive::mspriority_queue::traits
-        {
-            typedef buffer_type buffer;
-            typedef IntrusivePQueueHdrTest::compare compare;
-        };
-        typedef cds::intrusive::MSPriorityQueue< IntrusivePQueueHdrTest::key_type, pqueue_traits > pqueue;
-
-        test_msq_dyn<pqueue>();
-    }
-
-    void IntrusivePQueueHdrTest::MSPQueue_dyn_less()
-    {
-        struct pqueue_traits : public
-            cds::intrusive::mspriority_queue::make_traits <
-                cds::opt::buffer< buffer_type >
-                , cds::opt::less < std::less<IntrusivePQueueHdrTest::key_type> >
-            > ::type
-        {};
-        typedef cds::intrusive::MSPriorityQueue< IntrusivePQueueHdrTest::key_type, pqueue_traits > pqueue;
-
-        test_msq_dyn<pqueue>();
-    }
-
-    void IntrusivePQueueHdrTest::MSPQueue_dyn_cmpless()
-    {
-        typedef cds::intrusive::MSPriorityQueue< IntrusivePQueueHdrTest::key_type,
-            cds::intrusive::mspriority_queue::make_traits<
-                cds::opt::buffer< buffer_type >
-                ,cds::opt::less< std::less<IntrusivePQueueHdrTest::key_type> >
-                ,cds::opt::compare< IntrusivePQueueHdrTest::compare >
-            >::type
-        > pqueue;
-
-        test_msq_dyn<pqueue>();
-    }
-
-    void IntrusivePQueueHdrTest::MSPQueue_dyn_cmp_mtx()
-    {
-        typedef cds::intrusive::MSPriorityQueue< IntrusivePQueueHdrTest::key_type,
-            cds::intrusive::mspriority_queue::make_traits<
-                cds::opt::buffer< buffer_type >
-                ,cds::opt::compare< IntrusivePQueueHdrTest::compare >
-                ,cds::opt::lock_type<std::mutex>
-            >::type
-        > pqueue;
-
-        test_msq_dyn<pqueue>();
-    }
-
-} // namespace priority_queue
diff --git a/tests/test-hdr/priority_queue/hdr_intrusive_mspqueue_static.cpp b/tests/test-hdr/priority_queue/hdr_intrusive_mspqueue_static.cpp
deleted file mode 100644 (file)
index 51ff761..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "priority_queue/hdr_intrusive_pqueue.h"
-#include <cds/intrusive/mspriority_queue.h>
-
-namespace priority_queue {
-    namespace intrusive_pqueue {
-        template <typename T, typename Traits>
-        struct constants<cds::intrusive::MSPriorityQueue<T, Traits> > {
-            static size_t const nCapacity = c_nCapacity - 1;
-        };
-    }
-
-    namespace {
-        typedef cds::opt::v::static_buffer< char, IntrusivePQueueHdrTest::c_nCapacity > buffer_type;
-    }
-
-    void IntrusivePQueueHdrTest::MSPQueue_st()
-    {
-        typedef cds::intrusive::MSPriorityQueue< IntrusivePQueueHdrTest::key_type,
-            cds::intrusive::mspriority_queue::make_traits<
-                cds::opt::buffer< buffer_type >
-            >::type
-        > pqueue;
-
-        test_msq_stat<pqueue>();
-    }
-
-    void IntrusivePQueueHdrTest::MSPQueue_st_cmp()
-    {
-        typedef cds::intrusive::MSPriorityQueue< IntrusivePQueueHdrTest::key_type,
-            cds::intrusive::mspriority_queue::make_traits<
-                cds::opt::buffer< buffer_type >
-                ,cds::opt::compare< IntrusivePQueueHdrTest::compare >
-            >::type
-        > pqueue;
-
-        test_msq_stat<pqueue>();
-    }
-
-    void IntrusivePQueueHdrTest::MSPQueue_st_less()
-    {
-        typedef cds::intrusive::MSPriorityQueue< IntrusivePQueueHdrTest::key_type,
-            cds::intrusive::mspriority_queue::make_traits<
-                cds::opt::buffer< buffer_type >
-                ,cds::opt::less< std::less<IntrusivePQueueHdrTest::key_type> >
-            >::type
-        > pqueue;
-
-        test_msq_stat<pqueue>();
-    }
-
-    void IntrusivePQueueHdrTest::MSPQueue_st_cmpless()
-    {
-        typedef cds::intrusive::MSPriorityQueue< IntrusivePQueueHdrTest::key_type,
-            cds::intrusive::mspriority_queue::make_traits<
-                cds::opt::buffer< buffer_type >
-                ,cds::opt::less< std::less<IntrusivePQueueHdrTest::key_type> >
-                ,cds::opt::compare< IntrusivePQueueHdrTest::compare >
-            >::type
-        > pqueue;
-
-        test_msq_stat<pqueue>();
-    }
-
-    void IntrusivePQueueHdrTest::MSPQueue_st_cmp_mtx()
-    {
-        struct pqueue_traits : public cds::intrusive::mspriority_queue::traits
-        {
-            typedef buffer_type buffer;
-            typedef IntrusivePQueueHdrTest::compare compare;
-            typedef std::mutex lock_type;
-        };
-        typedef cds::intrusive::MSPriorityQueue< IntrusivePQueueHdrTest::key_type, pqueue_traits > pqueue;
-
-        test_msq_stat<pqueue>();
-    }
-
-} // namespace priority_queue
diff --git a/tests/test-hdr/priority_queue/hdr_intrusive_pqueue.h b/tests/test-hdr/priority_queue/hdr_intrusive_pqueue.h
deleted file mode 100644 (file)
index 3a917dc..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_INTRUSIVE_PQUEUE_H
-#define CDSTEST_HDR_INTRUSIVE_PQUEUE_H
-
-#include "cppunit/cppunit_proxy.h"
-#include "size_check.h"
-#include <algorithm>
-#include <functional>   // ref
-
-namespace priority_queue {
-
-    namespace intrusive_pqueue {
-        static size_t const c_nCapacity = 1024 * 16;
-
-        struct another_disposer {
-            size_t   m_nCallCount;
-
-            another_disposer()
-                : m_nCallCount(0)
-            {}
-            template <typename T>
-            void operator()( T& )
-            {
-                ++m_nCallCount;
-            }
-        };
-
-        template <typename PQueue>
-        struct constants {
-            static size_t const nCapacity = c_nCapacity;
-        };
-    } // namespace intrusive_pqueue
-
-    class IntrusivePQueueHdrTest: public CppUnitMini::TestCase
-    {
-    public:
-        static size_t const c_nCapacity = intrusive_pqueue::c_nCapacity;
-
-        typedef int     key_type;
-        static key_type const c_nMinValue = -123;
-
-        struct compare {
-            int operator()( key_type k1, key_type k2 ) const
-            {
-                return k1 - k2;
-            }
-        };
-
-        template <typename T>
-        class data_array
-        {
-            T *     pFirst;
-            T *     pLast;
-
-        public:
-            data_array( size_t nSize )
-                : pFirst( new T[nSize] )
-                , pLast( pFirst + nSize )
-            {
-                T i = c_nMinValue;
-                for ( T * p = pFirst; p != pLast; ++p, ++i )
-                    *p = i;
-
-                CppUnitMini::TestCase::shuffle( pFirst, pLast );
-            }
-
-            ~data_array()
-            {
-                delete [] pFirst;
-            }
-
-            T * begin() { return pFirst; }
-            T * end()   { return pLast ; }
-            size_t size() const
-            {
-                return pLast - pFirst;
-            }
-        };
-
-    protected:
-        template <class PQueue>
-        void test_bounded_with( PQueue& pq )
-        {
-            data_array<key_type> arr( pq.capacity() );
-            key_type * pFirst = arr.begin();
-            key_type * pLast  = pFirst + pq.capacity();
-
-            CPPUNIT_ASSERT( pq.empty() );
-            CPPUNIT_ASSERT( pq.size() == 0 );
-            CPPUNIT_ASSERT( pq.capacity() == intrusive_pqueue::constants<PQueue>::nCapacity );
-
-            size_t nSize = 0;
-
-            // Push test
-            for ( key_type * p = pFirst; p < pLast; ++p ) {
-                CPPUNIT_ASSERT( pq.push( *p ));
-                CPPUNIT_ASSERT( !pq.empty() );
-                CPPUNIT_ASSERT( pq.size() == ++nSize );
-            }
-
-            CPPUNIT_ASSERT( pq.full() );
-            CPPUNIT_ASSERT( pq.size() == pq.capacity() );
-
-            // The queue is full
-            key_type k = c_nMinValue + key_type(c_nCapacity);
-            CPPUNIT_ASSERT( !pq.push( k ));
-            CPPUNIT_ASSERT( pq.full() );
-            CPPUNIT_ASSERT( pq.size() == pq.capacity() );
-
-            // Pop test
-            key_type nPrev = c_nMinValue + key_type(pq.capacity()) - 1;
-            key_type * p = pq.pop();
-            CPPUNIT_ASSERT( p != nullptr );
-            CPPUNIT_CHECK_EX( *p == nPrev, "Expected=" << nPrev << ", current=" << *p );
-
-            CPPUNIT_ASSERT( pq.size() == pq.capacity() - 1 );
-            CPPUNIT_ASSERT( !pq.full() );
-            CPPUNIT_ASSERT( !pq.empty() );
-
-            nSize = pq.size();
-            while ( pq.size() > 1 ) {
-                p = pq.pop();
-                CPPUNIT_ASSERT( p != nullptr );
-                CPPUNIT_CHECK_EX( *p == nPrev - 1, "Expected=" << nPrev - 1 << ", current=" << *p );
-                nPrev = *p;
-                --nSize;
-                CPPUNIT_ASSERT( pq.size() == nSize );
-            }
-
-            CPPUNIT_ASSERT( !pq.full() );
-            CPPUNIT_ASSERT( !pq.empty() );
-            CPPUNIT_ASSERT( pq.size() == 1 );
-
-            p = pq.pop();
-            CPPUNIT_ASSERT( p != nullptr );
-            CPPUNIT_CHECK_EX( *p == c_nMinValue, "Expected=" << c_nMinValue << ", current=" << *p );
-
-            CPPUNIT_ASSERT( !pq.full() );
-            CPPUNIT_ASSERT( pq.empty() );
-            CPPUNIT_ASSERT( pq.size() == 0 );
-
-            // Clear test
-            for ( key_type * p = pFirst; p < pLast; ++p ) {
-                CPPUNIT_ASSERT( pq.push( *p ));
-            }
-            CPPUNIT_CHECK( !pq.empty() );
-            CPPUNIT_CHECK( pq.full() );
-            CPPUNIT_CHECK( pq.size() == pq.capacity() );
-            pq.clear();
-            CPPUNIT_CHECK( pq.empty() );
-            CPPUNIT_CHECK( !pq.full() );
-            CPPUNIT_CHECK( pq.size() == 0 );
-
-            // clear_with test
-            for ( key_type * p = pFirst; p < pLast; ++p ) {
-                CPPUNIT_ASSERT( pq.push( *p ));
-            }
-            CPPUNIT_ASSERT( !pq.empty() );
-            CPPUNIT_ASSERT( pq.full() );
-            CPPUNIT_ASSERT( pq.size() == pq.capacity() );
-
-            {
-                intrusive_pqueue::another_disposer disp;
-                pq.clear_with( std::ref(disp) );
-                CPPUNIT_ASSERT( pq.empty() );
-                CPPUNIT_ASSERT( !pq.full() );
-                CPPUNIT_ASSERT( pq.size() == 0 );
-                CPPUNIT_ASSERT( disp.m_nCallCount == pq.capacity() );
-            }
-        }
-
-        template <class PQueue>
-        void test_msq_stat()
-        {
-            PQueue pq( 0 );   // argument should be ignored for static buffer
-            test_bounded_with( pq );
-        }
-        template <class PQueue>
-        void test_msq_dyn()
-        {
-            PQueue pq( c_nCapacity );
-            test_bounded_with( pq );
-        }
-
-    public:
-        void MSPQueue_st();
-        void MSPQueue_st_cmp();
-        void MSPQueue_st_less();
-        void MSPQueue_st_cmpless();
-        void MSPQueue_st_cmp_mtx();
-        void MSPQueue_dyn();
-        void MSPQueue_dyn_cmp();
-        void MSPQueue_dyn_less();
-        void MSPQueue_dyn_cmpless();
-        void MSPQueue_dyn_cmp_mtx();
-
-        CPPUNIT_TEST_SUITE(IntrusivePQueueHdrTest)
-            CPPUNIT_TEST(MSPQueue_st)
-            CPPUNIT_TEST(MSPQueue_st_cmp)
-            CPPUNIT_TEST(MSPQueue_st_less)
-            CPPUNIT_TEST(MSPQueue_st_cmpless)
-            CPPUNIT_TEST(MSPQueue_st_cmp_mtx)
-            CPPUNIT_TEST(MSPQueue_dyn)
-            CPPUNIT_TEST(MSPQueue_dyn_cmp)
-            CPPUNIT_TEST(MSPQueue_dyn_less)
-            CPPUNIT_TEST(MSPQueue_dyn_cmpless)
-            CPPUNIT_TEST(MSPQueue_dyn_cmp_mtx)
-        CPPUNIT_TEST_SUITE_END()
-    };
-
-} // namespace priority_queue
-
-#endif // #ifndef CDSTEST_HDR_INTRUSIVE_PQUEUE_H
diff --git a/tests/test-hdr/priority_queue/hdr_mspqueue_dyn.cpp b/tests/test-hdr/priority_queue/hdr_mspqueue_dyn.cpp
deleted file mode 100644 (file)
index 248f4c8..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "priority_queue/hdr_pqueue.h"
-#include <cds/container/mspriority_queue.h>
-
-namespace priority_queue {
-    namespace pqueue {
-        template <typename T, typename Traits>
-        struct constants<cds::container::MSPriorityQueue<T, Traits> > {
-            static size_t const nCapacity = c_nCapacity - 1;
-        };
-    }
-
-    namespace {
-        typedef cds::opt::v::dynamic_buffer< char > buffer_type;
-    }
-
-    void PQueueHdrTest::MSPQueue_dyn()
-    {
-        typedef cds::container::MSPriorityQueue< PQueueHdrTest::value_type,
-            cds::container::mspriority_queue::make_traits<
-                cds::opt::buffer< buffer_type >
-            >::type
-        > pqueue;
-
-        test_msq_dyn<pqueue>();
-    }
-
-    void PQueueHdrTest::MSPQueue_dyn_cmp()
-    {
-        typedef cds::container::MSPriorityQueue< PQueueHdrTest::value_type,
-            cds::container::mspriority_queue::make_traits<
-                cds::opt::buffer< buffer_type >
-                ,cds::opt::compare< PQueueHdrTest::compare >
-            >::type
-        > pqueue;
-
-        test_msq_dyn<pqueue>();
-    }
-
-    void PQueueHdrTest::MSPQueue_dyn_less()
-    {
-        typedef cds::container::MSPriorityQueue< PQueueHdrTest::value_type,
-            cds::container::mspriority_queue::make_traits<
-                cds::opt::buffer< buffer_type >
-                ,cds::opt::less< PQueueHdrTest::less >
-            >::type
-        > pqueue;
-
-        test_msq_dyn<pqueue>();
-    }
-
-    void PQueueHdrTest::MSPQueue_dyn_cmpless()
-    {
-        struct pqueue_traits : public cds::container::mspriority_queue::traits
-        {
-            typedef buffer_type buffer;
-            typedef PQueueHdrTest::less less;
-            typedef PQueueHdrTest::compare compare;
-        };
-        typedef cds::container::MSPriorityQueue< PQueueHdrTest::value_type, pqueue_traits > pqueue;
-
-        test_msq_dyn<pqueue>();
-    }
-
-    void PQueueHdrTest::MSPQueue_dyn_cmp_mtx()
-    {
-        typedef cds::container::MSPriorityQueue< PQueueHdrTest::value_type,
-            cds::container::mspriority_queue::make_traits<
-                cds::opt::buffer< buffer_type >
-                ,cds::opt::compare< PQueueHdrTest::compare >
-                ,cds::opt::lock_type<std::mutex>
-            >::type
-        > pqueue;
-
-        test_msq_dyn<pqueue>();
-    }
-
-} // namespace priority_queue
diff --git a/tests/test-hdr/priority_queue/hdr_mspqueue_static.cpp b/tests/test-hdr/priority_queue/hdr_mspqueue_static.cpp
deleted file mode 100644 (file)
index cd70a81..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "priority_queue/hdr_pqueue.h"
-#include <cds/container/mspriority_queue.h>
-
-namespace priority_queue {
-    namespace pqueue {
-        template <typename T, typename Traits>
-        struct constants<cds::container::MSPriorityQueue<T, Traits> > {
-            static size_t const nCapacity = c_nCapacity - 1;
-        };
-    }
-
-    namespace {
-        typedef cds::opt::v::static_buffer< char, PQueueHdrTest::c_nCapacity > buffer_type;
-    }
-
-    void PQueueHdrTest::MSPQueue_st()
-    {
-        typedef cds::container::MSPriorityQueue< PQueueHdrTest::value_type,
-            cds::container::mspriority_queue::make_traits<
-                cds::opt::buffer< buffer_type >
-            >::type
-        > pqueue;
-
-        test_msq_stat<pqueue>();
-    }
-
-    void PQueueHdrTest::MSPQueue_st_cmp()
-    {
-        typedef cds::container::MSPriorityQueue< PQueueHdrTest::value_type,
-            cds::container::mspriority_queue::make_traits<
-                cds::opt::buffer< buffer_type >
-                ,cds::opt::compare< PQueueHdrTest::compare >
-            >::type
-        > pqueue;
-
-        test_msq_stat<pqueue>();
-    }
-
-    void PQueueHdrTest::MSPQueue_st_less()
-    {
-        typedef cds::container::MSPriorityQueue< PQueueHdrTest::value_type,
-            cds::container::mspriority_queue::make_traits<
-                cds::opt::buffer< buffer_type >
-                ,cds::opt::less< PQueueHdrTest::less >
-            >::type
-        > pqueue;
-
-        test_msq_stat<pqueue>();
-    }
-
-    void PQueueHdrTest::MSPQueue_st_cmpless()
-    {
-        typedef cds::container::MSPriorityQueue< PQueueHdrTest::value_type,
-            cds::container::mspriority_queue::make_traits<
-                cds::opt::buffer< buffer_type >
-                ,cds::opt::less< PQueueHdrTest::less >
-                ,cds::opt::compare< PQueueHdrTest::compare >
-            >::type
-        > pqueue;
-
-        test_msq_stat<pqueue>();
-    }
-
-    void PQueueHdrTest::MSPQueue_st_cmp_mtx()
-    {
-        typedef cds::container::MSPriorityQueue< PQueueHdrTest::value_type,
-            cds::container::mspriority_queue::make_traits<
-                cds::opt::buffer< buffer_type >
-                ,cds::opt::compare< PQueueHdrTest::compare >
-                ,cds::opt::lock_type<std::mutex>
-            >::type
-        > pqueue;
-
-        test_msq_stat<pqueue>();
-    }
-
-} // namespace priority_queue
diff --git a/tests/test-hdr/priority_queue/hdr_pqueue.h b/tests/test-hdr/priority_queue/hdr_pqueue.h
deleted file mode 100644 (file)
index 12eb4bb..0000000
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_PQUEUE_H
-#define CDSTEST_HDR_PQUEUE_H
-
-#include "cppunit/cppunit_proxy.h"
-#include "size_check.h"
-#include <algorithm>
-#include <functional>   // ref
-
-namespace priority_queue {
-
-    namespace pqueue {
-        static size_t const c_nCapacity = 1024 * 16;
-
-        struct disposer {
-            size_t   m_nCallCount;
-
-            disposer()
-                : m_nCallCount(0)
-            {}
-
-            template <typename T>
-            void operator()( T& )
-            {
-                ++m_nCallCount;
-            }
-        };
-
-        template <typename PQueue>
-        struct constants {
-            static size_t const nCapacity = c_nCapacity;
-        };
-    } // namespace pqueue
-
-    class PQueueHdrTest: public CppUnitMini::TestCase
-    {
-    public:
-        static size_t const c_nCapacity = pqueue::c_nCapacity;
-
-        typedef int     key_type;
-        static key_type const c_nMinValue = -123;
-
-        struct value_type {
-            key_type    k;
-            int         v;
-
-            value_type()
-            {}
-
-            value_type( value_type const& kv )
-                : k(kv.k)
-                , v(kv.v)
-            {}
-
-            value_type( key_type key )
-                : k(key)
-                , v(key)
-            {}
-
-            value_type( key_type key, int val )
-                : k(key)
-                , v(val)
-            {}
-
-            value_type( std::pair<key_type, int> const& p )
-                : k(p.first)
-                , v(p.second)
-            {}
-        };
-
-        struct compare {
-            int operator()( value_type k1, value_type k2 ) const
-            {
-                return k1.k - k2.k;
-            }
-        };
-
-        struct less {
-            bool operator()( value_type k1, value_type k2 ) const
-            {
-                return k1.k < k2.k;
-            }
-        };
-
-        template <typename T>
-        class data_array
-        {
-            T *     pFirst;
-            T *     pLast;
-
-        public:
-            data_array( size_t nSize )
-                : pFirst( new T[nSize] )
-                , pLast( pFirst + nSize )
-            {
-                key_type i = c_nMinValue;
-                for ( T * p = pFirst; p != pLast; ++p, ++i )
-                    p->k = p->v = i;
-
-                shuffle( pFirst, pLast );
-            }
-
-            ~data_array()
-            {
-                delete [] pFirst;
-            }
-
-            T * begin() { return pFirst; }
-            T * end()   { return pLast ; }
-            size_t size() const
-            {
-                return pLast - pFirst;
-            }
-        };
-
-    protected:
-        template <class PQueue>
-        void test_bounded_with( PQueue& pq )
-        {
-            data_array<value_type> arr( pq.capacity() );
-            value_type * pFirst = arr.begin();
-            value_type * pLast  = pFirst + pq.capacity();
-
-            CPPUNIT_ASSERT( pq.empty() );
-            CPPUNIT_ASSERT( pq.size() == 0 );
-            CPPUNIT_ASSERT_EX( pq.capacity() == pqueue::constants<PQueue>::nCapacity,
-                "pq.capacity() = " << pq.capacity() << ", pqueue::constants<PQueue>::nCapacity = " << pqueue::constants<PQueue>::nCapacity
-                );
-
-            size_t nSize = 0;
-
-            // Push test
-            for ( value_type * p = pFirst; p < pLast; ++p ) {
-                switch ( pq.size() & 3 ) {
-                    case 0:
-                        CPPUNIT_ASSERT( pq.push_with( [p]( value_type& dest ) { dest = *p; } ));
-                        break;
-                    case 1:
-                        CPPUNIT_ASSERT( pq.emplace( p->k, p->v ));
-                        break;
-                    case 2:
-                        CPPUNIT_ASSERT( pq.emplace( std::make_pair( p->k, p->v ) ));
-                        break;
-                    default:
-                        CPPUNIT_ASSERT( pq.push( *p ));
-                }
-                CPPUNIT_ASSERT( !pq.empty() );
-                CPPUNIT_ASSERT( pq.size() == ++nSize );
-            }
-
-            CPPUNIT_ASSERT( pq.full() );
-            CPPUNIT_ASSERT( pq.size() == pq.capacity() );
-
-            // The queue is full
-            key_type k = c_nMinValue + key_type(c_nCapacity);
-            CPPUNIT_ASSERT( !pq.push( k ));
-            CPPUNIT_ASSERT( pq.full() );
-            CPPUNIT_ASSERT( pq.size() == pq.capacity() );
-
-            // Pop test
-            key_type nPrev = c_nMinValue + key_type(pq.capacity()) - 1;
-            value_type kv(0);
-            key_type   key;
-            CPPUNIT_ASSERT( pq.pop(kv) );
-            CPPUNIT_CHECK_EX( kv.k == nPrev, "Expected=" << nPrev << ", current=" << kv.k );
-
-            CPPUNIT_ASSERT( pq.size() == pq.capacity() - 1 );
-            CPPUNIT_ASSERT( !pq.full() );
-            CPPUNIT_ASSERT( !pq.empty() );
-
-            nSize = pq.size();
-            while ( pq.size() > 1 ) {
-                if ( pq.size() & 1 ) {
-                    CPPUNIT_ASSERT( pq.pop(kv) );
-                    CPPUNIT_CHECK_EX( kv.k == nPrev - 1, "Expected=" << nPrev - 1 << ", current=" << kv.k );
-                    nPrev = kv.k;
-                }
-                else {
-                    CPPUNIT_ASSERT( pq.pop_with( [&key]( value_type& src ) { key = src.k;  } ) );
-                    CPPUNIT_CHECK_EX( key == nPrev - 1, "Expected=" << nPrev - 1 << ", current=" << key );
-                    nPrev = key;
-                }
-
-                --nSize;
-                CPPUNIT_ASSERT( pq.size() == nSize );
-            }
-
-            CPPUNIT_ASSERT( !pq.full() );
-            CPPUNIT_ASSERT( !pq.empty() );
-            CPPUNIT_ASSERT( pq.size() == 1 );
-
-            CPPUNIT_ASSERT( pq.pop(kv) );
-            CPPUNIT_CHECK_EX( kv.k == c_nMinValue, "Expected=" << c_nMinValue << ", current=" << kv.k );
-
-            CPPUNIT_ASSERT( !pq.full() );
-            CPPUNIT_ASSERT( pq.empty() );
-            CPPUNIT_ASSERT( pq.size() == 0 );
-
-            // Clear test
-            for ( value_type * p = pFirst; p < pLast; ++p ) {
-                CPPUNIT_ASSERT( pq.push( *p ));
-            }
-            CPPUNIT_ASSERT( !pq.empty() );
-            CPPUNIT_ASSERT( pq.full() );
-            CPPUNIT_ASSERT( pq.size() == pq.capacity() );
-            pq.clear();
-            CPPUNIT_ASSERT( pq.empty() );
-            CPPUNIT_ASSERT( !pq.full() );
-            CPPUNIT_ASSERT( pq.size() == 0 );
-
-            // clear_with test
-            for ( value_type * p = pFirst; p < pLast; ++p ) {
-                CPPUNIT_ASSERT( pq.push( *p ));
-            }
-            CPPUNIT_ASSERT( !pq.empty() );
-            CPPUNIT_ASSERT( pq.full() );
-            CPPUNIT_ASSERT( pq.size() == pq.capacity() );
-
-            {
-                pqueue::disposer disp;
-                pq.clear_with( std::ref(disp) );
-                CPPUNIT_ASSERT( pq.empty() );
-                CPPUNIT_ASSERT( !pq.full() );
-                CPPUNIT_ASSERT( pq.size() == 0 );
-                CPPUNIT_ASSERT( disp.m_nCallCount == pq.capacity() );
-            }
-        }
-
-        template <class PQueue>
-        void test_msq_stat()
-        {
-            PQueue pq( 0 );   // argument should be ignored for static buffer
-            test_bounded_with( pq );
-        }
-        template <class PQueue>
-        void test_msq_dyn()
-        {
-            PQueue pq( c_nCapacity );
-            test_bounded_with( pq );
-        }
-
-        template <class PQueue>
-        void test_fcpqueue()
-        {
-            PQueue pq;
-
-            data_array<value_type> arr( c_nCapacity );
-            value_type * pFirst = arr.begin();
-            value_type * pLast  = pFirst + c_nCapacity;
-
-            CPPUNIT_ASSERT( pq.empty() );
-            CPPUNIT_ASSERT( pq.size() == 0 );
-
-            size_t nSize = 0;
-
-            // Push test
-            for ( value_type * p = pFirst; p < pLast; ++p ) {
-                CPPUNIT_ASSERT( pq.push( *p ));
-                CPPUNIT_ASSERT( !pq.empty() );
-                CPPUNIT_ASSERT( pq.size() == ++nSize );
-            }
-
-            CPPUNIT_ASSERT( pq.size() == c_nCapacity );
-
-            // Pop test
-            key_type nPrev = c_nMinValue + key_type(c_nCapacity) - 1;
-            value_type kv(0);
-            //key_type   key;
-            CPPUNIT_ASSERT( pq.pop(kv) );
-            CPPUNIT_CHECK_EX( kv.k == nPrev, "Expected=" << nPrev << ", current=" << kv.k );
-
-            CPPUNIT_ASSERT( pq.size() == c_nCapacity - 1 );
-            CPPUNIT_ASSERT( !pq.empty() );
-
-            nSize = pq.size();
-            while ( pq.size() > 1 ) {
-                CPPUNIT_ASSERT( pq.pop(kv) );
-                CPPUNIT_CHECK_EX( kv.k == nPrev - 1, "Expected=" << nPrev - 1 << ", current=" << kv.k );
-                nPrev = kv.k;
-
-                --nSize;
-                CPPUNIT_ASSERT( pq.size() == nSize );
-            }
-
-            CPPUNIT_ASSERT( !pq.empty() );
-            CPPUNIT_ASSERT( pq.size() == 1 );
-
-            CPPUNIT_ASSERT( pq.pop(kv) );
-            CPPUNIT_CHECK_EX( kv.k == c_nMinValue, "Expected=" << c_nMinValue << ", current=" << kv.k );
-
-            CPPUNIT_ASSERT( pq.empty() );
-            CPPUNIT_ASSERT( pq.size() == 0 );
-
-            // Clear test
-            for ( value_type * p = pFirst; p < pLast; ++p ) {
-                CPPUNIT_ASSERT( pq.push( *p ));
-            }
-            CPPUNIT_ASSERT( !pq.empty() );
-            CPPUNIT_ASSERT( pq.size() == c_nCapacity );
-
-            pq.clear();
-            CPPUNIT_ASSERT( pq.empty() );
-            CPPUNIT_ASSERT( pq.size() == 0 );
-        }
-
-    public:
-        void MSPQueue_st();
-        void MSPQueue_st_cmp();
-        void MSPQueue_st_less();
-        void MSPQueue_st_cmpless();
-        void MSPQueue_st_cmp_mtx();
-        void MSPQueue_dyn();
-        void MSPQueue_dyn_cmp();
-        void MSPQueue_dyn_less();
-        void MSPQueue_dyn_cmpless();
-        void MSPQueue_dyn_cmp_mtx();
-
-        void FCPQueue_vector();
-        void FCPQueue_vector_stat();
-        void FCPQueue_vector_mutex();
-        void FCPQueue_deque();
-        void FCPQueue_deque_stat();
-        void FCPQueue_deque_mutex();
-        void FCPQueue_boost_deque();
-        void FCPQueue_boost_deque_stat();
-        void FCPQueue_stablevector();
-        void FCPQueue_stablevector_stat();
-
-        CPPUNIT_TEST_SUITE(PQueueHdrTest)
-            CPPUNIT_TEST(MSPQueue_st)
-            CPPUNIT_TEST(MSPQueue_st_cmp)
-            CPPUNIT_TEST(MSPQueue_st_less)
-            CPPUNIT_TEST(MSPQueue_st_cmpless)
-            CPPUNIT_TEST(MSPQueue_st_cmp_mtx)
-            CPPUNIT_TEST(MSPQueue_dyn)
-            CPPUNIT_TEST(MSPQueue_dyn_cmp)
-            CPPUNIT_TEST(MSPQueue_dyn_less)
-            CPPUNIT_TEST(MSPQueue_dyn_cmpless)
-            CPPUNIT_TEST(MSPQueue_dyn_cmp_mtx)
-
-            CPPUNIT_TEST(FCPQueue_vector)
-            CPPUNIT_TEST(FCPQueue_vector_stat)
-            CPPUNIT_TEST(FCPQueue_vector_mutex)
-            CPPUNIT_TEST(FCPQueue_deque)
-            CPPUNIT_TEST(FCPQueue_deque_stat)
-            CPPUNIT_TEST(FCPQueue_deque_mutex)
-            CPPUNIT_TEST(FCPQueue_boost_deque)
-            CPPUNIT_TEST(FCPQueue_boost_deque_stat)
-            CPPUNIT_TEST(FCPQueue_stablevector)
-            CPPUNIT_TEST(FCPQueue_stablevector_stat)
-        CPPUNIT_TEST_SUITE_END()
-    };
-
-} // namespace priority_queue
-
-namespace std {
-    template<>
-    struct less<priority_queue::PQueueHdrTest::value_type>
-    {
-        bool operator()( priority_queue::PQueueHdrTest::value_type const& v1, priority_queue::PQueueHdrTest::value_type const& v2) const
-        {
-            return priority_queue::PQueueHdrTest::less()( v1, v2 );
-        }
-    };
-}
-
-#endif // #ifndef CDSTEST_HDR_PQUEUE_H
diff --git a/tests/test-hdr/priority_queue/hdr_priority_queue_reg.cpp b/tests/test-hdr/priority_queue/hdr_priority_queue_reg.cpp
deleted file mode 100644 (file)
index 8db5ae4..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "priority_queue/hdr_intrusive_pqueue.h"
-#include "priority_queue/hdr_pqueue.h"
-
-
-CPPUNIT_TEST_SUITE_REGISTRATION_(priority_queue::IntrusivePQueueHdrTest, s_IntrusivePQueueHdrTest);
-CPPUNIT_TEST_SUITE_REGISTRATION_(priority_queue::PQueueHdrTest, s_PQueueHdrTest);
diff --git a/tests/test-hdr/queue/hdr_basketqueue_dhp.cpp b/tests/test-hdr/queue/hdr_basketqueue_dhp.cpp
deleted file mode 100644 (file)
index 597cee1..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include <cds/gc/dhp.h>
-#include <cds/container/basket_queue.h>
-
-#include "queue/hdr_queue.h"
-
-namespace queue {
-
-    void HdrTestQueue::BasketQueue_DHP()
-    {
-        typedef cds::container::BasketQueue< cds::gc::DHP, int > queue_type;
-        test_no_ic< queue_type >();
-    }
-
-    void HdrTestQueue::BasketQueue_DHP_Counted()
-    {
-        struct traits : public cds::container::basket_queue::traits
-        {
-            typedef cds::atomicity::item_counter item_counter;
-        };
-        typedef cds::container::BasketQueue< cds::gc::DHP, int, traits > queue_type;
-        test_ic< queue_type >();
-    }
-
-    void HdrTestQueue::BasketQueue_DHP_relax()
-    {
-        struct traits : public
-            cds::container::basket_queue::make_traits <
-                cds::opt::memory_model< cds::opt::v::relaxed_ordering>
-            > ::type
-        {};
-        typedef cds::container::BasketQueue< cds::gc::DHP, int, traits > queue_type;
-        test_no_ic< queue_type >();
-    }
-
-    void HdrTestQueue::BasketQueue_DHP_Counted_relax()
-    {
-        typedef cds::container::BasketQueue< cds::gc::DHP, int,
-            typename cds::container::basket_queue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                ,cds::opt::memory_model< cds::opt::v::relaxed_ordering>
-            >::type
-        > queue_type;
-        test_ic< queue_type >();
-    }
-
-    void HdrTestQueue::BasketQueue_DHP_seqcst()
-    {
-        struct traits : public cds::container::basket_queue::traits
-        {
-            typedef cds::opt::v::sequential_consistent memory_model;
-        };
-        typedef cds::container::BasketQueue< cds::gc::DHP, int, traits > queue_type;
-        test_no_ic< queue_type >();
-    }
-
-    void HdrTestQueue::BasketQueue_DHP_Counted_seqcst()
-    {
-        typedef cds::container::BasketQueue < cds::gc::DHP, int,
-            typename cds::container::basket_queue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                ,cds::opt::memory_model< cds::opt::v::sequential_consistent>
-            >::type
-        > queue_type;
-        test_ic< queue_type >();
-    }
-
-    void HdrTestQueue::BasketQueue_DHP_relax_align()
-    {
-        typedef cds::container::BasketQueue < cds::gc::DHP, int,
-            typename cds::container::basket_queue::make_traits <
-                cds::opt::memory_model< cds::opt::v::relaxed_ordering>
-                ,cds::opt::padding< 16 >
-            >::type
-        > queue_type;
-        test_no_ic< queue_type >();
-    }
-
-    void HdrTestQueue::BasketQueue_DHP_Counted_relax_align()
-    {
-        struct traits : public cds::container::basket_queue::traits
-        {
-            typedef cds::atomicity::item_counter item_counter;
-            typedef cds::opt::v::relaxed_ordering memory_model;
-            enum { padding = 32 };
-        };
-        typedef cds::container::BasketQueue < cds::gc::DHP, int, traits > queue_type;
-        test_ic< queue_type >();
-    }
-
-    void HdrTestQueue::BasketQueue_DHP_seqcst_align()
-    {
-        typedef cds::container::BasketQueue < cds::gc::DHP, int,
-            typename cds::container::basket_queue::make_traits <
-                cds::opt::memory_model< cds::opt::v::sequential_consistent>
-                , cds::opt::padding< cds::opt::no_special_padding >
-            > ::type
-        > queue_type;
-        test_no_ic< queue_type >();
-    }
-
-    void HdrTestQueue::BasketQueue_DHP_Counted_seqcst_align()
-    {
-        typedef cds::container::BasketQueue < cds::gc::DHP, int,
-            typename cds::container::basket_queue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                ,cds::opt::memory_model< cds::opt::v::sequential_consistent>
-                ,cds::opt::padding< cds::opt::cache_line_padding >
-            > ::type
-        > queue_type;
-        test_ic< queue_type >();
-    }
-
-}   // namespace queue
diff --git a/tests/test-hdr/queue/hdr_basketqueue_hp.cpp b/tests/test-hdr/queue/hdr_basketqueue_hp.cpp
deleted file mode 100644 (file)
index d2f062a..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include <cds/gc/hp.h>
-#include <cds/container/basket_queue.h>
-
-#include "queue/hdr_queue.h"
-
-namespace queue {
-
-    void HdrTestQueue::BasketQueue_HP()
-    {
-        typedef cds::container::BasketQueue< cds::gc::HP, int > queue_type;
-        test_no_ic< queue_type >();
-    }
-
-    void HdrTestQueue::BasketQueue_HP_Counted()
-    {
-        struct traits : public cds::container::basket_queue::traits
-        {
-            typedef cds::atomicity::item_counter item_counter;
-        };
-        typedef cds::container::BasketQueue< cds::gc::HP, int, traits > queue_type;
-        test_ic< queue_type >();
-    }
-
-    void HdrTestQueue::BasketQueue_HP_relax()
-    {
-        struct traits : public
-            cds::container::basket_queue::make_traits <
-                cds::opt::memory_model< cds::opt::v::relaxed_ordering>
-            > ::type
-        {};
-        typedef cds::container::BasketQueue< cds::gc::HP, int, traits > queue_type;
-        test_no_ic< queue_type >();
-    }
-
-    void HdrTestQueue::BasketQueue_HP_Counted_relax()
-    {
-        typedef cds::container::BasketQueue< cds::gc::HP, int,
-            typename cds::container::basket_queue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                ,cds::opt::memory_model< cds::opt::v::relaxed_ordering>
-            >::type
-        > queue_type;
-        test_ic< queue_type >();
-    }
-
-    void HdrTestQueue::BasketQueue_HP_seqcst()
-    {
-        struct traits : public cds::container::basket_queue::traits
-        {
-            typedef cds::opt::v::sequential_consistent memory_model;
-        };
-        typedef cds::container::BasketQueue< cds::gc::HP, int, traits > queue_type;
-        test_no_ic< queue_type >();
-    }
-
-    void HdrTestQueue::BasketQueue_HP_Counted_seqcst()
-    {
-        typedef cds::container::BasketQueue < cds::gc::HP, int,
-            typename cds::container::basket_queue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                ,cds::opt::memory_model< cds::opt::v::sequential_consistent>
-            >::type
-        > queue_type;
-        test_ic< queue_type >();
-    }
-
-    void HdrTestQueue::BasketQueue_HP_relax_align()
-    {
-        typedef cds::container::BasketQueue < cds::gc::HP, int,
-            typename cds::container::basket_queue::make_traits <
-                cds::opt::memory_model< cds::opt::v::relaxed_ordering>
-                ,cds::opt::padding< 16 >
-            >::type
-        > queue_type;
-        test_no_ic< queue_type >();
-    }
-
-    void HdrTestQueue::BasketQueue_HP_Counted_relax_align()
-    {
-        struct traits : public cds::container::basket_queue::traits
-        {
-            typedef cds::atomicity::item_counter item_counter;
-            typedef cds::opt::v::relaxed_ordering memory_model;
-            enum { padding = 32 };
-        };
-        typedef cds::container::BasketQueue < cds::gc::HP, int, traits > queue_type;
-        test_ic< queue_type >();
-    }
-
-    void HdrTestQueue::BasketQueue_HP_seqcst_align()
-    {
-        typedef cds::container::BasketQueue < cds::gc::HP, int,
-            typename cds::container::basket_queue::make_traits <
-                cds::opt::memory_model< cds::opt::v::sequential_consistent>
-                , cds::opt::padding< cds::opt::no_special_padding >
-            > ::type
-        > queue_type;
-        test_no_ic< queue_type >();
-    }
-
-    void HdrTestQueue::BasketQueue_HP_Counted_seqcst_align()
-    {
-        typedef cds::container::BasketQueue < cds::gc::HP, int,
-            typename cds::container::basket_queue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                ,cds::opt::memory_model< cds::opt::v::sequential_consistent>
-                ,cds::opt::padding< cds::opt::cache_line_padding >
-            > ::type
-        > queue_type;
-        test_ic< queue_type >();
-    }
-
-}   // namespace queue
diff --git a/tests/test-hdr/queue/hdr_fcqueue.cpp b/tests/test-hdr/queue/hdr_fcqueue.cpp
deleted file mode 100644 (file)
index f93e54e..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include <cds/container/fcqueue.h>
-#include "queue/hdr_fcqueue.h"
-
-#include <list>
-
-namespace queue {
-
-    void HdrFCQueue::FCQueue_deque()
-    {
-        typedef cds::container::FCQueue<int> queue_type;
-        testFCQueue<queue_type>();
-    }
-
-    void HdrFCQueue::FCQueue_deque_elimination()
-    {
-        typedef cds::container::FCQueue<int, std::queue< int, std::deque<int> >,
-            cds::container::fcqueue::make_traits<
-                cds::opt::enable_elimination< true >
-            >::type
-        > queue_type;
-        testFCQueue<queue_type>();
-    }
-
-    void HdrFCQueue::FCQueue_deque_mutex()
-    {
-        typedef cds::container::FCQueue<int, std::queue< int, std::deque<int> >,
-            cds::container::fcqueue::make_traits<
-                cds::opt::lock_type< std::mutex >
-            >::type
-        > queue_type;
-        testFCQueue<queue_type>();
-    }
-
-    void HdrFCQueue::FCQueue_deque_stat()
-    {
-        typedef cds::container::FCQueue<int, std::queue< int, std::deque<int> >,
-            cds::container::fcqueue::make_traits<
-                cds::opt::stat< cds::container::fcqueue::stat<> >
-            >::type
-        > queue_type;
-        testFCQueue<queue_type>();
-    }
-
-    //
-    void HdrFCQueue::FCQueue_list()
-    {
-        typedef cds::container::FCQueue<int, std::queue< int, std::list<int> > > queue_type;
-        testFCQueue<queue_type>();
-    }
-
-    void HdrFCQueue::FCQueue_list_elimination()
-    {
-        typedef cds::container::FCQueue<int, std::queue< int, std::list<int> >,
-            cds::container::fcqueue::make_traits<
-                cds::opt::enable_elimination< true >
-            >::type
-        > queue_type;
-        testFCQueue<queue_type>();
-    }
-
-    void HdrFCQueue::FCQueue_list_mutex()
-    {
-        typedef cds::container::FCQueue<int, std::queue<int, std::list<int> >,
-            cds::container::fcqueue::make_traits<
-                cds::opt::lock_type< std::mutex >
-            >::type
-        > queue_type;
-        testFCQueue<queue_type>();
-    }
-
-    void HdrFCQueue::FCQueue_list_stat()
-    {
-        struct queue_traits : public cds::container::fcqueue::traits
-        {
-            typedef cds::container::fcqueue::stat<> stat;
-        };
-        typedef cds::container::FCQueue<int, std::queue< int, std::list<int> >, queue_traits > queue_type;
-        testFCQueue<queue_type>();
-    }
-
-} // namespace queue
diff --git a/tests/test-hdr/queue/hdr_fcqueue.h b/tests/test-hdr/queue/hdr_fcqueue.h
deleted file mode 100644 (file)
index cd15a21..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_FCQUEUE_H
-#define CDSTEST_HDR_FCQUEUE_H
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/details/defs.h>
-
-namespace queue {
-
-    //
-    // Test queue operation in single thread mode
-    //
-    class HdrFCQueue: public CppUnitMini::TestCase
-    {
-    protected:
-        template <class Queue>
-        void testNoItemCounter()
-        {
-            Queue   q;
-            test_with( q );
-            test_emplace( q );
-        }
-
-        template <class Queue>
-        void test_with( Queue& q )
-        {
-            int     it;
-            int     nPrev;
-
-            for ( size_t i = 0; i < 3; ++i ) {
-                CPPUNIT_ASSERT( q.empty() );
-#ifndef _DEBUG
-                CPPUNIT_ASSERT( q.size() == 0 );
-#endif
-                CPPUNIT_ASSERT( q.enqueue( 1 ) );
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_ASSERT( q.push( 10 ) );
-                CPPUNIT_ASSERT( !q.empty() );
-#ifndef _DEBUG
-                CPPUNIT_ASSERT( q.size() == 0 )     ;   // no queue's item counter!
-#endif
-
-                it = -1;
-                CPPUNIT_ASSERT( q.pop( it ) );
-                CPPUNIT_ASSERT( it == 1 );
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_ASSERT( q.dequeue( it ) );
-                CPPUNIT_ASSERT( it == 10 );
-#ifndef _DEBUG
-                CPPUNIT_ASSERT( q.size() == 0 );
-#endif
-                CPPUNIT_ASSERT( q.empty() );
-                it += 2009;
-                nPrev = it;
-                CPPUNIT_ASSERT( !q.dequeue( it ) );
-                CPPUNIT_ASSERT( it == nPrev )       ;   // it must not be changed!
-            }
-        }
-
-        template <class Queue>
-        void test_emplace( Queue& q )
-        {
-            int     it;
-            for ( size_t i = 0; i < 3; ++i ) {
-                CPPUNIT_ASSERT( q.emplace( static_cast<int>( i * 42 )) );
-                CPPUNIT_ASSERT( !q.empty() );
-                it = -1;
-                CPPUNIT_ASSERT( q.pop( it ));
-                CPPUNIT_ASSERT( it == static_cast<int>( i * 42 ));
-                CPPUNIT_ASSERT( q.empty() );
-            }
-        }
-
-        template <class Queue>
-        void testWithItemCounter()
-        {
-            Queue   q;
-            test_ic_with( q );
-            test_emplace_ic( q );
-        }
-
-        template <class Queue>
-        void testFCQueue()
-        {
-            Queue   q;
-            test_ic_with( q );
-        }
-
-        template <class Queue>
-        void test_ic_with( Queue& q )
-        {
-            int     it;
-            int     nPrev;
-
-            for ( size_t i = 0; i < 3; ++i ) {
-                CPPUNIT_ASSERT( q.empty() );
-                CPPUNIT_ASSERT( q.size() == 0 );
-                CPPUNIT_ASSERT( q.enqueue( 1 ) );
-                CPPUNIT_ASSERT( q.size() == 1 );
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_ASSERT( q.push( 10 ) );
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_ASSERT( q.size() == 2 );
-
-                it = -1;
-                CPPUNIT_ASSERT( q.pop( it ) );
-                CPPUNIT_ASSERT( it == 1 );
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_ASSERT( q.size() == 1 );
-                CPPUNIT_ASSERT( q.dequeue( it ) );
-                CPPUNIT_ASSERT( it == 10 );
-                CPPUNIT_ASSERT( q.size() == 0 );
-                CPPUNIT_ASSERT( q.empty() );
-                CPPUNIT_ASSERT( q.size() == 0 );
-                it += 2009;
-                nPrev = it;
-                CPPUNIT_ASSERT( !q.dequeue( it ) );
-                CPPUNIT_ASSERT( it == nPrev )       ;   // it must not be changed!
-
-                CPPUNIT_ASSERT( q.empty() );
-                CPPUNIT_ASSERT( q.size() == 0 );
-            }
-        }
-
-        template <class Queue>
-        void test_emplace_ic( Queue& q )
-        {
-            int     it = 0;
-            for ( size_t i = 0; i < 3; ++i ) {
-                CPPUNIT_ASSERT( q.emplace( (int) i * 10 ) );
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_ASSERT( q.size() == 1 );
-                CPPUNIT_ASSERT( q.pop( it ));
-                CPPUNIT_ASSERT( it == (int) i * 10 );
-                CPPUNIT_ASSERT( q.empty() );
-                CPPUNIT_ASSERT( q.size() == 0 );
-            }
-        }
-
-    public:
-        void FCQueue_deque();
-        void FCQueue_deque_elimination();
-        void FCQueue_deque_mutex();
-        void FCQueue_deque_stat();
-        void FCQueue_list();
-        void FCQueue_list_elimination();
-        void FCQueue_list_mutex();
-        void FCQueue_list_stat();
-
-        CPPUNIT_TEST_SUITE(HdrFCQueue)
-            CPPUNIT_TEST(FCQueue_deque)
-            CPPUNIT_TEST(FCQueue_deque_elimination)
-            CPPUNIT_TEST(FCQueue_deque_mutex)
-            CPPUNIT_TEST(FCQueue_deque_stat)
-            CPPUNIT_TEST(FCQueue_list)
-            CPPUNIT_TEST(FCQueue_list_elimination)
-            CPPUNIT_TEST(FCQueue_list_mutex)
-            CPPUNIT_TEST(FCQueue_list_stat)
-        CPPUNIT_TEST_SUITE_END();
-
-    };
-} // namespace queue
-
-#endif // #ifndef CDSTEST_HDR_FCQUEUE_H
diff --git a/tests/test-hdr/queue/hdr_intrusive_basketqueue_dhp.cpp b/tests/test-hdr/queue/hdr_intrusive_basketqueue_dhp.cpp
deleted file mode 100644 (file)
index 4c99c10..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_intrusive_msqueue.h"
-#include <cds/gc/dhp.h>
-#include <cds/intrusive/basket_queue.h>
-
-namespace queue {
-
-#define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test_basket<X>(); }
-
-    namespace {
-        typedef IntrusiveQueueHeaderTest::base_hook_item < ci::basket_queue::node<cds::gc::DHP> > base_hook_item;
-        typedef IntrusiveQueueHeaderTest::member_hook_item < ci::basket_queue::node<cds::gc::DHP> > member_hook_item;
-
-        // DHP base hook
-        struct traits_BasketQueue_disposer : public
-            ci::basket_queue::make_traits < ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer > >::type
-        {
-            typedef ci::basket_queue::base_hook< ci::opt::gc < cds::gc::DHP > > hook;
-        };
-        typedef ci::BasketQueue< cds::gc::DHP, base_hook_item, traits_BasketQueue_disposer > BasketQueue_DHP_base;
-
-        // DHP member hook
-        struct traits_BasketQueue_member : public traits_BasketQueue_disposer
-        {
-            typedef ci::basket_queue::member_hook< offsetof( member_hook_item, hMember ), ci::opt::gc < cds::gc::DHP > > hook;
-        };
-        typedef ci::BasketQueue< cds::gc::DHP, member_hook_item, traits_BasketQueue_member >BasketQueue_DHP_member;
-
-        /// DHP base hook + item counter
-        typedef ci::BasketQueue< cds::gc::DHP, base_hook_item,
-            typename ci::basket_queue::make_traits<
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,ci::opt::hook<
-                    ci::basket_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
-                >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::memory_model< co::v::relaxed_ordering >
-            >::type
-        > BasketQueue_DHP_base_ic;
-
-        // DHP member hook + item counter
-        typedef ci::BasketQueue< cds::gc::DHP, member_hook_item,
-            typename ci::basket_queue::make_traits<
-                ci::opt::hook<
-                    ci::basket_queue::member_hook<
-                        offsetof( member_hook_item, hMember),
-                        ci::opt::gc<cds::gc::DHP>
-                    >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-       > BasketQueue_DHP_member_ic;
-
-        // DHP base hook + stat
-        typedef ci::BasketQueue< cds::gc::DHP, base_hook_item,
-            typename ci::basket_queue::make_traits<
-                ci::opt::hook<
-                    ci::basket_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::stat< ci::basket_queue::stat<> >
-            >::type
-        > BasketQueue_DHP_base_stat;
-
-        // DHP member hook + stat
-        typedef ci::BasketQueue< cds::gc::DHP, member_hook_item,
-            typename ci::basket_queue::make_traits<
-                ci::opt::hook<
-                    ci::basket_queue::member_hook<
-                        offsetof(member_hook_item, hMember),
-                        ci::opt::gc<cds::gc::DHP>
-                    >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::stat< ci::basket_queue::stat<> >
-            >::type
-        > BasketQueue_DHP_member_stat;
-
-        // DHP base hook + padding
-        typedef ci::BasketQueue< cds::gc::DHP, base_hook_item,
-            typename ci::basket_queue::make_traits<
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,ci::opt::hook<
-                    ci::basket_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
-                >
-                ,co::padding< 32 >
-            >::type
-        > BasketQueue_DHP_base_align;
-
-        // DHP member hook + padding
-        typedef ci::BasketQueue< cds::gc::DHP, member_hook_item,
-            typename ci::basket_queue::make_traits<
-                ci::opt::hook<
-                    ci::basket_queue::member_hook<
-                        offsetof(member_hook_item, hMember),
-                        ci::opt::gc<cds::gc::DHP>
-                    >
-                >
-                ,co::padding< 32 >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > BasketQueue_DHP_member_align;
-
-        // DHP base hook + no padding
-        typedef ci::BasketQueue< cds::gc::DHP, base_hook_item,
-            typename ci::basket_queue::make_traits<
-                ci::opt::hook<
-                    ci::basket_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::padding< co::no_special_padding >
-            >::type
-        > BasketQueue_DHP_base_noalign;
-
-        // DHP member hook + no padding
-        typedef ci::BasketQueue< cds::gc::DHP, member_hook_item,
-            typename ci::basket_queue::make_traits<
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,ci::opt::hook<
-                    ci::basket_queue::member_hook<
-                        offsetof(member_hook_item, hMember),
-                        ci::opt::gc<cds::gc::DHP>
-                    >
-                >
-                ,co::padding< co::no_special_padding >
-            >::type
-        > BasketQueue_DHP_member_noalign;
-
-
-        // DHP base hook + cache padding
-        typedef ci::BasketQueue< cds::gc::DHP, base_hook_item,
-            typename ci::basket_queue::make_traits<
-                ci::opt::hook<
-                    ci::basket_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
-                >
-                ,co::padding< co::cache_line_padding >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > BasketQueue_DHP_base_cachealign;
-
-        // DHP member hook + cache padding
-        typedef ci::BasketQueue< cds::gc::DHP, member_hook_item,
-            typename ci::basket_queue::make_traits<
-                ci::opt::hook<
-                    ci::basket_queue::member_hook<
-                        offsetof(member_hook_item, hMember),
-                        ci::opt::gc<cds::gc::DHP>
-                    >
-                >
-                ,co::padding< co::cache_line_padding >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > BasketQueue_DHP_member_cachealign;
-    } // namespace
-
-    TEST(BasketQueue_DHP_base)
-    TEST(BasketQueue_DHP_member)
-    TEST(BasketQueue_DHP_base_ic)
-    TEST(BasketQueue_DHP_member_ic)
-    TEST(BasketQueue_DHP_base_stat)
-    TEST(BasketQueue_DHP_member_stat)
-    TEST(BasketQueue_DHP_base_align)
-    TEST(BasketQueue_DHP_member_align)
-    TEST(BasketQueue_DHP_base_noalign)
-    TEST(BasketQueue_DHP_member_noalign)
-    TEST(BasketQueue_DHP_base_cachealign)
-    TEST(BasketQueue_DHP_member_cachealign)
-}
diff --git a/tests/test-hdr/queue/hdr_intrusive_basketqueue_hp.cpp b/tests/test-hdr/queue/hdr_intrusive_basketqueue_hp.cpp
deleted file mode 100644 (file)
index 1028f2d..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_intrusive_msqueue.h"
-#include <cds/gc/hp.h>
-#include <cds/intrusive/basket_queue.h>
-
-namespace queue {
-
-#define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test_basket<X>(); }
-
-    namespace {
-        typedef IntrusiveQueueHeaderTest::base_hook_item< ci::basket_queue::node<cds::gc::HP> > base_hook_item;
-        typedef IntrusiveQueueHeaderTest::member_hook_item< ci::basket_queue::node<cds::gc::HP> > member_hook_item;
-
-        struct traits_BasketQueue_HP_default : public ci::basket_queue::traits
-        {
-            typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
-        };
-        typedef ci::BasketQueue< cds::gc::HP, base_hook_item, traits_BasketQueue_HP_default > BasketQueue_HP_default;
-
-        /// HP + item counter
-        struct traits_BasketQueue_HP_default_ic : public traits_BasketQueue_HP_default
-        {
-            typedef cds::atomicity::item_counter item_counter;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef ci::BasketQueue< cds::gc::HP, base_hook_item, traits_BasketQueue_HP_default_ic > BasketQueue_HP_default_ic;
-
-        /// HP + stat
-        typedef ci::BasketQueue< cds::gc::HP, base_hook_item,
-            typename ci::basket_queue::make_traits<
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::stat< ci::basket_queue::stat<> >
-            >::type
-        > BasketQueue_HP_default_stat;
-
-        // HP base hook
-        struct traits_BasketQueue_HP_base : public ci::basket_queue::traits
-        {
-            typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
-            typedef ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> > hook;
-        };
-        typedef ci::BasketQueue< cds::gc::HP, base_hook_item, traits_BasketQueue_HP_base > BasketQueue_HP_base;
-
-        // HP member hook
-        struct traits_BasketQueue_HP_member : public traits_BasketQueue_HP_base
-        {
-            typedef ci::basket_queue::member_hook <
-                offsetof( member_hook_item, hMember ),
-                ci::opt::gc < cds::gc::HP >
-            > hook;
-
-        };
-        typedef ci::BasketQueue< cds::gc::HP, member_hook_item, traits_BasketQueue_HP_member > BasketQueue_HP_member;
-
-        /// HP base hook + item counter
-        typedef ci::BasketQueue< cds::gc::HP, base_hook_item,
-            typename ci::basket_queue::make_traits<
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,ci::opt::hook<
-                    ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
-                >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::memory_model< co::v::relaxed_ordering >
-            >::type
-        > BasketQueue_HP_base_ic;
-
-        // HP member hook + item counter
-        typedef ci::BasketQueue< cds::gc::HP, member_hook_item,
-            typename ci::basket_queue::make_traits<
-                ci::opt::hook<
-                    ci::basket_queue::member_hook<
-                        offsetof( member_hook_item, hMember),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-       > BasketQueue_HP_member_ic;
-
-        // HP base hook + stat
-        typedef ci::BasketQueue< cds::gc::HP, base_hook_item,
-            typename ci::basket_queue::make_traits<
-                ci::opt::hook<
-                    ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::stat< ci::basket_queue::stat<> >
-            >::type
-        > BasketQueue_HP_base_stat;
-
-        // HP member hook + stat
-        typedef ci::BasketQueue< cds::gc::HP, member_hook_item,
-            typename ci::basket_queue::make_traits<
-                ci::opt::hook<
-                    ci::basket_queue::member_hook<
-                        offsetof(member_hook_item, hMember),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::stat< ci::basket_queue::stat<> >
-            >::type
-        > BasketQueue_HP_member_stat;
-
-        // HP base hook + padding
-        typedef ci::BasketQueue< cds::gc::HP, base_hook_item,
-            typename ci::basket_queue::make_traits<
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,ci::opt::hook<
-                    ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
-                >
-                ,co::padding< 32 >
-            >::type
-        > BasketQueue_HP_base_align;
-
-        // HP member hook + padding
-        typedef ci::BasketQueue< cds::gc::HP, member_hook_item,
-            typename ci::basket_queue::make_traits<
-                ci::opt::hook<
-                    ci::basket_queue::member_hook<
-                        offsetof(member_hook_item, hMember),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,co::padding< 32 >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > BasketQueue_HP_member_align;
-
-        // HP base hook + no padding
-        typedef ci::BasketQueue< cds::gc::HP, base_hook_item,
-            typename ci::basket_queue::make_traits<
-                ci::opt::hook<
-                    ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::padding< co::no_special_padding >
-            >::type
-        > BasketQueue_HP_base_noalign;
-
-        // HP member hook + no padding
-        typedef ci::BasketQueue< cds::gc::HP, member_hook_item,
-            typename ci::basket_queue::make_traits<
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,ci::opt::hook<
-                    ci::basket_queue::member_hook<
-                        offsetof(member_hook_item, hMember),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,co::padding< co::no_special_padding >
-            >::type
-        > BasketQueue_HP_member_noalign;
-
-
-        // HP base hook + cache padding
-        typedef ci::BasketQueue< cds::gc::HP, base_hook_item,
-            typename ci::basket_queue::make_traits<
-                ci::opt::hook<
-                    ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
-                >
-                ,co::padding< co::cache_line_padding >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > BasketQueue_HP_base_cachealign;
-
-        // HP member hook + cache padding
-        typedef ci::BasketQueue< cds::gc::HP, member_hook_item,
-            typename ci::basket_queue::make_traits<
-                ci::opt::hook<
-                    ci::basket_queue::member_hook<
-                        offsetof(member_hook_item, hMember),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,co::padding< co::cache_line_padding >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > BasketQueue_HP_member_cachealign;
-    } // namespace
-
-    TEST(BasketQueue_HP_default)
-    TEST(BasketQueue_HP_default_ic)
-    TEST(BasketQueue_HP_default_stat)
-    TEST(BasketQueue_HP_base)
-    TEST(BasketQueue_HP_member)
-    TEST(BasketQueue_HP_base_ic)
-    TEST(BasketQueue_HP_member_ic)
-    TEST(BasketQueue_HP_base_stat)
-    TEST(BasketQueue_HP_member_stat)
-    TEST(BasketQueue_HP_base_align)
-    TEST(BasketQueue_HP_member_align)
-    TEST(BasketQueue_HP_base_noalign)
-    TEST(BasketQueue_HP_member_noalign)
-    TEST(BasketQueue_HP_base_cachealign)
-    TEST(BasketQueue_HP_member_cachealign)
-}
diff --git a/tests/test-hdr/queue/hdr_intrusive_fcqueue.cpp b/tests/test-hdr/queue/hdr_intrusive_fcqueue.cpp
deleted file mode 100644 (file)
index 7ec8c5f..0000000
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/intrusive/fcqueue.h>
-
-namespace queue {
-
-    class TestIntrusiveFCQueue: public CppUnitMini::TestCase
-    {
-        template <typename Hook>
-        struct base_hook_item: public Hook
-        {
-            int nVal;
-            int nDisposeCount;
-
-            base_hook_item()
-                : nDisposeCount(0)
-            {}
-        };
-
-        template <typename Hook>
-        struct member_hook_item
-        {
-            int nVal;
-            int nDisposeCount;
-            Hook hMember;
-
-            member_hook_item()
-                : nDisposeCount(0)
-            {}
-        };
-
-        struct disposer
-        {
-            template <typename T>
-            void operator ()( T * p )
-            {
-                ++p->nDisposeCount;
-            }
-        };
-
-        template <typename Queue>
-        void test()
-        {
-            Queue q;
-            test_with(q);
-        }
-
-        template <class Queue>
-        void test_with( Queue& q )
-        {
-            typedef typename Queue::value_type value_type;
-            value_type v1, v2, v3;
-            CPPUNIT_ASSERT( q.empty() );
-
-            v1.nVal = 1;
-            v2.nVal = 2;
-            v3.nVal = 3;
-            CPPUNIT_ASSERT( q.push(v1));
-            CPPUNIT_ASSERT( !q.empty() );
-            CPPUNIT_ASSERT( q.push(v2));
-            CPPUNIT_ASSERT( !q.empty() );
-            CPPUNIT_ASSERT( q.push(v3));
-            CPPUNIT_ASSERT( !q.empty() );
-
-            CPPUNIT_CHECK( v1.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v2.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
-            value_type * pv;
-            pv = q.pop();
-            CPPUNIT_ASSERT( pv != nullptr );
-            CPPUNIT_ASSERT( pv->nVal == 1 );
-            CPPUNIT_ASSERT( !q.empty() );
-            CPPUNIT_CHECK( v1.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v2.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
-            pv = q.pop();
-            CPPUNIT_ASSERT( pv != nullptr );
-            CPPUNIT_ASSERT( pv->nVal == 2 );
-            CPPUNIT_ASSERT( !q.empty() );
-            CPPUNIT_CHECK( v1.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v2.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
-            pv = q.dequeue();
-            CPPUNIT_ASSERT( pv != nullptr );
-            CPPUNIT_ASSERT( pv->nVal == 3 );
-            CPPUNIT_ASSERT( q.empty() );
-            CPPUNIT_CHECK( v1.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v2.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
-            pv = q.dequeue();
-            CPPUNIT_ASSERT( pv == nullptr );
-            CPPUNIT_CHECK( v1.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v2.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
-            CPPUNIT_ASSERT( q.enqueue(v1));
-            CPPUNIT_ASSERT( !q.empty() );
-            CPPUNIT_ASSERT( q.enqueue(v2));
-            CPPUNIT_ASSERT( !q.empty() );
-            CPPUNIT_ASSERT( q.enqueue(v3));
-            CPPUNIT_ASSERT( !q.empty() );
-
-            CPPUNIT_CHECK( v1.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v2.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-            q.clear( true );    // call disposer
-            CPPUNIT_CHECK( q.empty() );
-            CPPUNIT_CHECK( v1.nDisposeCount == 1 );
-            CPPUNIT_CHECK( v2.nDisposeCount == 1 );
-            CPPUNIT_CHECK( v3.nDisposeCount == 1 );
-
-            CPPUNIT_ASSERT( q.push(v1));
-            CPPUNIT_ASSERT( !q.empty() );
-            CPPUNIT_ASSERT( q.push(v2));
-            CPPUNIT_ASSERT( !q.empty() );
-            CPPUNIT_ASSERT( q.push(v3));
-            CPPUNIT_ASSERT( !q.empty() );
-            q.clear( false );   // no disposer called
-            CPPUNIT_CHECK( q.empty() );
-            CPPUNIT_CHECK( v1.nDisposeCount == 1 );
-            CPPUNIT_CHECK( v2.nDisposeCount == 1 );
-            CPPUNIT_CHECK( v3.nDisposeCount == 1 );
-        }
-
-        void FCQueue_base();
-        void FCQueue_base_stat();
-        void FCQueue_base_elimination();
-        void FCQueue_base_elimination_mutex();
-        void FCQueue_base_seqcst();
-        void FCQueue_member();
-        void FCQueue_member_stat();
-        void FCQueue_member_elimination();
-        void FCQueue_member_elimination_mutex();
-        void FCQueue_member_seqcst();
-
-        CPPUNIT_TEST_SUITE(TestIntrusiveFCQueue)
-            CPPUNIT_TEST(FCQueue_base)
-            CPPUNIT_TEST(FCQueue_base_stat)
-            CPPUNIT_TEST(FCQueue_base_elimination)
-            CPPUNIT_TEST(FCQueue_base_elimination_mutex)
-            CPPUNIT_TEST(FCQueue_base_seqcst)
-            CPPUNIT_TEST(FCQueue_member)
-            CPPUNIT_TEST(FCQueue_member_stat)
-            CPPUNIT_TEST(FCQueue_member_elimination)
-            CPPUNIT_TEST(FCQueue_member_elimination_mutex)
-            CPPUNIT_TEST(FCQueue_member_seqcst)
-        CPPUNIT_TEST_SUITE_END()
-    };
-
-
-    void TestIntrusiveFCQueue::FCQueue_base()
-    {
-        typedef base_hook_item< boost::intrusive::list_base_hook<> > value_type;
-        typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type >,
-            cds::intrusive::fcqueue::make_traits<
-                cds::intrusive::opt::disposer< disposer >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void TestIntrusiveFCQueue::FCQueue_base_stat()
-    {
-        typedef base_hook_item< boost::intrusive::list_base_hook<> > value_type;
-        struct queue_traits : public cds::intrusive::fcqueue::traits
-        {
-            typedef TestIntrusiveFCQueue::disposer disposer;
-            typedef cds::intrusive::fcqueue::stat<> stat;
-        };
-        typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type >, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void TestIntrusiveFCQueue::FCQueue_base_elimination()
-    {
-        typedef base_hook_item< boost::intrusive::list_base_hook<> > value_type;
-        struct queue_traits : public
-            cds::intrusive::fcqueue::make_traits <
-                cds::intrusive::opt::disposer< disposer >
-                ,cds::opt::enable_elimination < true >
-            > ::type
-        {};
-        typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type >, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void TestIntrusiveFCQueue::FCQueue_base_elimination_mutex()
-    {
-        typedef base_hook_item< boost::intrusive::list_base_hook<> > value_type;
-        typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type >,
-            cds::intrusive::fcqueue::make_traits<
-                cds::intrusive::opt::disposer< disposer >
-                ,cds::opt::enable_elimination< true >
-                ,cds::opt::lock_type< std::mutex >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void TestIntrusiveFCQueue::FCQueue_base_seqcst()
-    {
-        typedef base_hook_item< boost::intrusive::list_base_hook<> > value_type;
-        typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type >,
-            cds::intrusive::fcqueue::make_traits<
-                cds::intrusive::opt::disposer< disposer >
-                ,cds::opt::memory_model< cds::opt::v::sequential_consistent >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void TestIntrusiveFCQueue::FCQueue_member()
-    {
-        typedef member_hook_item< boost::intrusive::list_member_hook<> > value_type;
-        typedef boost::intrusive::member_hook<value_type, boost::intrusive::list_member_hook<>, &value_type::hMember> member_option;
-
-        typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type, member_option >,
-            cds::intrusive::fcqueue::make_traits<
-                cds::intrusive::opt::disposer< disposer >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void TestIntrusiveFCQueue::FCQueue_member_stat()
-    {
-        typedef member_hook_item< boost::intrusive::list_member_hook<> > value_type;
-        typedef boost::intrusive::member_hook<value_type, boost::intrusive::list_member_hook<>, &value_type::hMember> member_option;
-
-        typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type, member_option >,
-            cds::intrusive::fcqueue::make_traits<
-                cds::intrusive::opt::disposer< disposer >
-                ,cds::opt::stat< cds::intrusive::fcqueue::stat<> >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void TestIntrusiveFCQueue::FCQueue_member_elimination()
-    {
-        typedef member_hook_item< boost::intrusive::list_member_hook<> > value_type;
-        typedef boost::intrusive::member_hook<value_type, boost::intrusive::list_member_hook<>, &value_type::hMember> member_option;
-
-        typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type, member_option >,
-            cds::intrusive::fcqueue::make_traits<
-                cds::intrusive::opt::disposer< disposer >
-                ,cds::opt::enable_elimination< true >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void TestIntrusiveFCQueue::FCQueue_member_elimination_mutex()
-    {
-        typedef member_hook_item< boost::intrusive::list_member_hook<> > value_type;
-        typedef boost::intrusive::member_hook<value_type, boost::intrusive::list_member_hook<>, &value_type::hMember> member_option;
-
-        typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type, member_option >,
-            cds::intrusive::fcqueue::make_traits<
-                cds::intrusive::opt::disposer< disposer >
-                ,cds::opt::enable_elimination< true >
-                ,cds::opt::lock_type< std::mutex >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void TestIntrusiveFCQueue::FCQueue_member_seqcst()
-    {
-        typedef member_hook_item< boost::intrusive::list_member_hook<> > value_type;
-        typedef boost::intrusive::member_hook<value_type, boost::intrusive::list_member_hook<>, &value_type::hMember> member_option;
-
-        typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type, member_option >,
-            cds::intrusive::fcqueue::make_traits<
-                cds::intrusive::opt::disposer< disposer >
-                ,cds::opt::memory_model< cds::opt::v::sequential_consistent >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-} // namespace queue
-
-CPPUNIT_TEST_SUITE_REGISTRATION(queue::TestIntrusiveFCQueue);
diff --git a/tests/test-hdr/queue/hdr_intrusive_moirqueue_dhp.cpp b/tests/test-hdr/queue/hdr_intrusive_moirqueue_dhp.cpp
deleted file mode 100644 (file)
index 5095d83..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_intrusive_msqueue.h"
-#include <cds/intrusive/moir_queue.h>
-#include <cds/gc/dhp.h>
-
-namespace queue {
-
-#define TEST(X)     void IntrusiveQueueHeaderTest::test_##X() { test<X>(); }
-
-    namespace {
-        typedef IntrusiveQueueHeaderTest::base_hook_item< ci::msqueue::node<cds::gc::DHP > > base_item_type;
-        typedef IntrusiveQueueHeaderTest::member_hook_item< ci::msqueue::node<cds::gc::DHP > > member_item_type;
-
-        // DHP base hook
-        typedef ci::MoirQueue< cds::gc::DHP, base_item_type,
-            typename ci::msqueue::make_traits<
-            ci::opt::hook<
-            ci::msqueue::base_hook< ci::opt::gc<cds::gc::DHP> >
-            >
-            , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > MoirQueue_DHP_base;
-
-        // DHP member hook
-        typedef ci::MoirQueue< cds::gc::DHP, member_item_type,
-            typename ci::msqueue::make_traits<
-            ci::opt::hook<
-            ci::msqueue::member_hook<
-            offsetof( member_item_type, hMember ),
-            ci::opt::gc<cds::gc::DHP>
-            >
-            >
-            , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > MoirQueue_DHP_member;
-
-        /// DHP base hook + item counter
-        typedef ci::MoirQueue< cds::gc::DHP, base_item_type,
-            typename ci::msqueue::make_traits<
-            ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            , ci::opt::hook<
-            ci::msqueue::base_hook< ci::opt::gc<cds::gc::DHP> >
-            >
-            , co::item_counter< cds::atomicity::item_counter >
-            , co::memory_model< co::v::relaxed_ordering >
-            >::type
-        > MoirQueue_DHP_base_ic;
-
-        // DHP member hook + item counter
-        typedef ci::MoirQueue< cds::gc::DHP, member_item_type,
-            typename ci::msqueue::make_traits<
-            ci::opt::hook<
-            ci::msqueue::member_hook<
-            offsetof( member_item_type, hMember ),
-            ci::opt::gc<cds::gc::DHP>
-            >
-            >
-            , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            , co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > MoirQueue_DHP_member_ic;
-
-        // DHP base hook + stat
-        typedef ci::MoirQueue< cds::gc::DHP, base_item_type,
-            typename ci::msqueue::make_traits<
-            ci::opt::hook<
-            ci::msqueue::base_hook< ci::opt::gc<cds::gc::DHP> >
-            >
-            , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            , co::stat< ci::msqueue::stat<> >
-            >::type
-        > MoirQueue_DHP_base_stat;
-
-        // DHP member hook + stat
-        typedef ci::MoirQueue< cds::gc::DHP, member_item_type,
-            typename ci::msqueue::make_traits<
-            ci::opt::hook<
-            ci::msqueue::member_hook<
-            offsetof( member_item_type, hMember ),
-            ci::opt::gc<cds::gc::DHP>
-            >
-            >
-            , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            , co::stat< ci::msqueue::stat<> >
-            >::type
-        > MoirQueue_DHP_member_stat;
-
-        // DHP base hook + padding
-        typedef ci::MoirQueue< cds::gc::DHP, base_item_type,
-            typename ci::msqueue::make_traits<
-            ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            , ci::opt::hook<
-            ci::msqueue::base_hook< ci::opt::gc<cds::gc::DHP> >
-            >
-            , co::padding< 32 >
-            >::type
-        > MoirQueue_DHP_base_align;
-
-        // DHP member hook + padding
-        typedef ci::MoirQueue< cds::gc::DHP, member_item_type,
-            typename ci::msqueue::make_traits<
-            ci::opt::hook<
-            ci::msqueue::member_hook<
-            offsetof( member_item_type, hMember ),
-            ci::opt::gc<cds::gc::DHP>
-            >
-            >
-            , co::padding< 32 >
-            , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > MoirQueue_DHP_member_align;
-
-        // DHP base hook + no padding
-        struct traits_MoirQueue_DHP_base_noalign : public ci::msqueue::traits {
-            typedef ci::msqueue::base_hook< ci::opt::gc<cds::gc::DHP> > hook;
-            typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
-            enum { padding = co::no_special_padding };
-        };
-        typedef ci::MoirQueue< cds::gc::DHP, base_item_type, traits_MoirQueue_DHP_base_noalign > MoirQueue_DHP_base_noalign;
-
-        // DHP member hook + no padding
-        struct traits_MoirQueue_DHP_member_noalign : public ci::msqueue::traits {
-            typedef ci::msqueue::member_hook <
-                offsetof( member_item_type, hMember ),
-                ci::opt::gc < cds::gc::DHP >
-            > hook;
-            typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
-            enum { padding = co::no_special_padding };
-        };
-        typedef ci::MoirQueue< cds::gc::DHP, member_item_type, traits_MoirQueue_DHP_member_noalign > MoirQueue_DHP_member_noalign;
-
-
-        // DHP base hook + cache padding
-        struct traits_MoirQueue_DHP_base_cachealign : public traits_MoirQueue_DHP_base_noalign
-        {
-            enum { padding = co::cache_line_padding };
-        };
-        typedef ci::MoirQueue< cds::gc::DHP, base_item_type, traits_MoirQueue_DHP_base_cachealign > MoirQueue_DHP_base_cachealign;
-
-        // DHP member hook + cache padding
-        struct traits_MoirQueue_DHP_member_cachealign : public traits_MoirQueue_DHP_member_noalign
-        {
-            enum { padding = co::cache_line_padding };
-        };
-        typedef ci::MoirQueue< cds::gc::DHP, member_item_type, traits_MoirQueue_DHP_member_cachealign > MoirQueue_DHP_member_cachealign;
-    }   // namespace
-
-    TEST(MoirQueue_DHP_base)
-    TEST(MoirQueue_DHP_member)
-    TEST(MoirQueue_DHP_base_ic)
-    TEST(MoirQueue_DHP_member_ic)
-    TEST(MoirQueue_DHP_base_stat)
-    TEST(MoirQueue_DHP_member_stat)
-    TEST(MoirQueue_DHP_base_align)
-    TEST(MoirQueue_DHP_member_align)
-    TEST(MoirQueue_DHP_base_noalign)
-    TEST(MoirQueue_DHP_member_noalign)
-    TEST(MoirQueue_DHP_base_cachealign)
-    TEST(MoirQueue_DHP_member_cachealign)
-
-} // namespace queue
diff --git a/tests/test-hdr/queue/hdr_intrusive_moirqueue_hp.cpp b/tests/test-hdr/queue/hdr_intrusive_moirqueue_hp.cpp
deleted file mode 100644 (file)
index a79cde5..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_intrusive_msqueue.h"
-#include <cds/intrusive/moir_queue.h>
-#include <cds/gc/hp.h>
-
-namespace queue {
-
-#define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test<X>(); }
-
-    namespace {
-        typedef IntrusiveQueueHeaderTest::base_hook_item< ci::msqueue::node<cds::gc::HP > > base_item_type;
-        typedef IntrusiveQueueHeaderTest::member_hook_item< ci::msqueue::node<cds::gc::HP > > member_item_type;
-
-        typedef ci::MoirQueue< cds::gc::HP, base_item_type,
-            typename ci::msqueue::make_traits<
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > MoirQueue_HP_default;
-
-        /// HP + item counter
-        typedef ci::MoirQueue< cds::gc::HP, base_item_type,
-            typename ci::msqueue::make_traits<
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        > MoirQueue_HP_default_ic;
-
-        /// HP + stat
-        typedef ci::MoirQueue< cds::gc::HP, base_item_type,
-            typename ci::msqueue::make_traits<
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::stat< ci::msqueue::stat<> >
-            >::type
-        > MoirQueue_HP_default_stat;
-
-        // HP base hook
-        typedef ci::MoirQueue< cds::gc::HP, base_item_type,
-            typename ci::msqueue::make_traits<
-                ci::opt::hook<
-                    ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > MoirQueue_HP_base;
-
-        // HP member hook
-        typedef ci::MoirQueue< cds::gc::HP, member_item_type,
-            typename ci::msqueue::make_traits<
-                ci::opt::hook<
-                    ci::msqueue::member_hook<
-                        offsetof( member_item_type, hMember ),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > MoirQueue_HP_member;
-
-        /// HP base hook + item counter
-        typedef ci::MoirQueue< cds::gc::HP, base_item_type,
-            typename ci::msqueue::make_traits<
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,ci::opt::hook<
-                    ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
-                >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::memory_model< co::v::relaxed_ordering >
-            >::type
-        > MoirQueue_HP_base_ic;
-
-        // HP member hook + item counter
-        typedef ci::MoirQueue< cds::gc::HP, member_item_type,
-            typename ci::msqueue::make_traits<
-                ci::opt::hook<
-                    ci::msqueue::member_hook<
-                        offsetof( member_item_type, hMember ),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-       > MoirQueue_HP_member_ic;
-
-        // HP base hook + stat
-        typedef ci::MoirQueue< cds::gc::HP, base_item_type,
-            typename ci::msqueue::make_traits<
-                ci::opt::hook<
-                    ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::stat< ci::msqueue::stat<> >
-            >::type
-        > MoirQueue_HP_base_stat;
-
-        // HP member hook + stat
-        typedef ci::MoirQueue< cds::gc::HP, member_item_type,
-            typename ci::msqueue::make_traits<
-                ci::opt::hook<
-                    ci::msqueue::member_hook<
-                        offsetof( member_item_type, hMember ),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::stat< ci::msqueue::stat<> >
-            >::type
-        > MoirQueue_HP_member_stat;
-
-        // HP base hook + padding
-        typedef ci::MoirQueue< cds::gc::HP, base_item_type,
-            typename ci::msqueue::make_traits<
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,ci::opt::hook<
-                    ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
-                >
-                ,co::padding< 32 >
-            >::type
-        > MoirQueue_HP_base_align;
-
-        // HP member hook + padding
-        typedef ci::MoirQueue< cds::gc::HP, member_item_type,
-            typename ci::msqueue::make_traits<
-                ci::opt::hook<
-                    ci::msqueue::member_hook<
-                        offsetof( member_item_type, hMember ),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,co::padding< 32 >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > MoirQueue_HP_member_align;
-
-        // HP base hook + no padding
-        struct traits_MoirQueue_HP_base_noalign : public ci::msqueue::traits {
-            typedef ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> > hook;
-            typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
-            enum { padding = co::no_special_padding };
-        };
-        typedef ci::MoirQueue< cds::gc::HP, base_item_type, traits_MoirQueue_HP_base_noalign > MoirQueue_HP_base_noalign;
-
-        // HP member hook + no padding
-        struct traits_MoirQueue_HP_member_noalign : public ci::msqueue::traits {
-            typedef ci::msqueue::member_hook <
-                offsetof( member_item_type, hMember ),
-                ci::opt::gc < cds::gc::HP >
-            > hook;
-            typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
-            enum { padding = co::no_special_padding };
-        };
-        typedef ci::MoirQueue< cds::gc::HP, member_item_type, traits_MoirQueue_HP_member_noalign > MoirQueue_HP_member_noalign;
-
-
-        // HP base hook + cache padding
-        struct traits_MoirQueue_HP_base_cachealign : public traits_MoirQueue_HP_base_noalign
-        {
-            enum { padding = co::cache_line_padding };
-        };
-        typedef ci::MoirQueue< cds::gc::HP, base_item_type, traits_MoirQueue_HP_base_cachealign > MoirQueue_HP_base_cachealign;
-
-        // HP member hook + cache padding
-        struct traits_MoirQueue_HP_member_cachealign : public traits_MoirQueue_HP_member_noalign
-        {
-            enum { padding = co::cache_line_padding };
-        };
-        typedef ci::MoirQueue< cds::gc::HP, member_item_type, traits_MoirQueue_HP_member_cachealign > MoirQueue_HP_member_cachealign;
-    }
-
-    TEST(MoirQueue_HP_default)
-    TEST(MoirQueue_HP_default_ic)
-    TEST(MoirQueue_HP_default_stat)
-    TEST(MoirQueue_HP_base)
-    TEST(MoirQueue_HP_member)
-    TEST(MoirQueue_HP_base_ic)
-    TEST(MoirQueue_HP_member_ic)
-    TEST(MoirQueue_HP_base_stat)
-    TEST(MoirQueue_HP_member_stat)
-    TEST(MoirQueue_HP_base_align)
-    TEST(MoirQueue_HP_member_align)
-    TEST(MoirQueue_HP_base_noalign)
-    TEST(MoirQueue_HP_member_noalign)
-    TEST(MoirQueue_HP_base_cachealign)
-    TEST(MoirQueue_HP_member_cachealign)
-}
diff --git a/tests/test-hdr/queue/hdr_intrusive_msqueue.h b/tests/test-hdr/queue/hdr_intrusive_msqueue.h
deleted file mode 100644 (file)
index 24b4a98..0000000
+++ /dev/null
@@ -1,551 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_INTRSUSIVE_MSQUEUE_H
-#define CDSTEST_HDR_INTRSUSIVE_MSQUEUE_H
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/intrusive/details/base.h>
-
-namespace queue {
-    namespace ci = cds::intrusive;
-    namespace co = cds::opt;
-
-    class IntrusiveQueueHeaderTest: public CppUnitMini::TestCase
-    {
-    public:
-
-        template <typename Base>
-        struct base_hook_item : public Base
-        {
-            int nVal;
-            int nDisposeCount;
-
-            base_hook_item()
-                : nDisposeCount( 0 )
-            {}
-        };
-
-        template <typename Member>
-        struct member_hook_item
-        {
-            int nVal;
-            int nDisposeCount;
-            Member hMember;
-
-            member_hook_item()
-                : nDisposeCount( 0 )
-            {}
-        };
-
-        struct faked_disposer
-        {
-            template <typename T>
-            void operator ()( T * p )
-            {
-                ++p->nDisposeCount;
-            }
-        };
-
-
-        // Test for MSQueue and derivatives
-        template <class Queue>
-        void test()
-        {
-            typedef typename Queue::value_type value_type;
-            value_type v1, v2, v3;
-
-            {
-                Queue q;
-                CPPUNIT_ASSERT( q.empty() );
-
-                v1.nVal = 1;
-                v2.nVal = 2;
-                v3.nVal = 3;
-                CPPUNIT_ASSERT( q.push(v1));
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_ASSERT( q.push(v2));
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_ASSERT( q.push(v3));
-                CPPUNIT_ASSERT( !q.empty() );
-
-                CPPUNIT_CHECK( v1.nDisposeCount == 0 );
-                CPPUNIT_CHECK( v2.nDisposeCount == 0 );
-                CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
-                value_type * pv;
-                pv = q.pop();
-                Queue::gc::scan();
-                CPPUNIT_ASSERT( pv != nullptr );
-                CPPUNIT_ASSERT( pv->nVal == 1 );
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_CHECK( v1.nDisposeCount == 0 );
-                CPPUNIT_CHECK( v2.nDisposeCount == 0 );
-                CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
-                pv = q.pop();
-                Queue::gc::scan();
-                CPPUNIT_ASSERT( pv != nullptr );
-                CPPUNIT_ASSERT( pv->nVal == 2 );
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_CHECK( v1.nDisposeCount == 1 );
-                CPPUNIT_CHECK( v2.nDisposeCount == 0 );
-                CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
-                pv = q.pop();
-                Queue::gc::scan();
-                CPPUNIT_ASSERT( pv != nullptr );
-                CPPUNIT_ASSERT( pv->nVal == 3 );
-                CPPUNIT_ASSERT( q.empty() );
-                CPPUNIT_CHECK( v1.nDisposeCount == 1 );
-                CPPUNIT_CHECK( v2.nDisposeCount == 1 );
-                CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
-                pv = q.pop();
-                CPPUNIT_ASSERT( pv == nullptr );
-                CPPUNIT_CHECK( v1.nDisposeCount == 1 );
-                CPPUNIT_CHECK( v2.nDisposeCount == 1 );
-                CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-            }
-
-            Queue::gc::scan();
-            CPPUNIT_CHECK( v1.nDisposeCount == 1 );
-            CPPUNIT_CHECK( v2.nDisposeCount == 1 );
-            CPPUNIT_CHECK( v3.nDisposeCount == 1 );
-        }
-
-        // Test for BasketQueue and derivatives
-        template <class Queue>
-        void test_basket()
-        {
-            typedef typename Queue::value_type value_type;
-            value_type v1, v2, v3, v4;
-
-            {
-                Queue q;
-                CPPUNIT_ASSERT( q.empty() );
-
-                v1.nVal = 1;
-                v2.nVal = 2;
-                v3.nVal = 3;
-                v4.nVal = 4;
-                CPPUNIT_ASSERT( q.push(v1));
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_ASSERT( q.push(v2));
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_ASSERT( q.push(v3));
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_ASSERT( q.push(v4));
-                CPPUNIT_ASSERT( !q.empty() );
-
-                CPPUNIT_CHECK( v1.nDisposeCount == 0 );
-                CPPUNIT_CHECK( v2.nDisposeCount == 0 );
-                CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-                CPPUNIT_CHECK( v4.nDisposeCount == 0 );
-
-                value_type * pv;
-                pv = q.pop();
-                Queue::gc::scan();
-                CPPUNIT_ASSERT( pv != nullptr );
-                CPPUNIT_ASSERT( pv->nVal == 1 );
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_CHECK( v1.nDisposeCount == 0 );
-                CPPUNIT_CHECK( v2.nDisposeCount == 0 );
-                CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-                CPPUNIT_CHECK( v4.nDisposeCount == 0 );
-
-                pv = q.pop();
-                Queue::gc::scan();
-                CPPUNIT_ASSERT( pv != nullptr );
-                CPPUNIT_ASSERT( pv->nVal == 2 );
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_CHECK( v1.nDisposeCount == 0 );
-                CPPUNIT_CHECK( v2.nDisposeCount == 0 );
-                CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-                CPPUNIT_CHECK( v4.nDisposeCount == 0 );
-
-                pv = q.pop();
-                Queue::gc::scan();
-                CPPUNIT_ASSERT( pv != nullptr );
-                CPPUNIT_ASSERT( pv->nVal == 3 );
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_CHECK( v1.nDisposeCount == 0 );
-                CPPUNIT_CHECK( v2.nDisposeCount == 0 );
-                CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-                CPPUNIT_CHECK( v4.nDisposeCount == 0 );
-
-                pv = q.pop();
-                Queue::gc::scan();
-                CPPUNIT_ASSERT( pv != nullptr );
-                CPPUNIT_ASSERT( pv->nVal == 4 );
-                CPPUNIT_ASSERT( q.empty() );
-                CPPUNIT_CHECK( v1.nDisposeCount == 1 );
-                CPPUNIT_CHECK( v2.nDisposeCount == 1 );
-                CPPUNIT_CHECK( v3.nDisposeCount == 1 );
-                CPPUNIT_CHECK( v4.nDisposeCount == 0 );
-
-                pv = q.pop();
-                Queue::gc::scan();
-                CPPUNIT_CHECK( pv == nullptr );
-                CPPUNIT_CHECK( v1.nDisposeCount == 1 );
-                CPPUNIT_CHECK( v2.nDisposeCount == 1 );
-                CPPUNIT_CHECK( v3.nDisposeCount == 1 );
-                CPPUNIT_CHECK( v4.nDisposeCount == 0 );
-            }
-
-            Queue::gc::scan();
-            CPPUNIT_CHECK( v1.nDisposeCount == 1 );
-            CPPUNIT_CHECK( v2.nDisposeCount == 1 );
-            CPPUNIT_CHECK( v3.nDisposeCount == 1 );
-            CPPUNIT_CHECK( v4.nDisposeCount == 1 );
-        }
-
-        // Test for a queue in what dequeued item should be manually disposed
-        template <class Queue>
-        void test2()
-        {
-            typedef typename Queue::value_type value_type;
-            value_type v1, v2, v3;
-            Queue q;
-            CPPUNIT_ASSERT( q.empty() );
-
-            v1.nVal = 1;
-            v2.nVal = 2;
-            v3.nVal = 3;
-            CPPUNIT_ASSERT( q.push(v1));
-            CPPUNIT_ASSERT( !q.empty() );
-            CPPUNIT_ASSERT( q.push(v2));
-            CPPUNIT_ASSERT( !q.empty() );
-            CPPUNIT_ASSERT( q.push(v3));
-            CPPUNIT_ASSERT( !q.empty() );
-
-            CPPUNIT_CHECK( v1.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v2.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
-            value_type * pv;
-            pv = q.pop();
-            CPPUNIT_ASSERT( pv != nullptr );
-            CPPUNIT_ASSERT( pv->nVal == 1 );
-            CPPUNIT_ASSERT( !q.empty() );
-            CPPUNIT_CHECK( v1.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v2.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
-            pv = q.pop();
-            CPPUNIT_ASSERT( pv != nullptr );
-            CPPUNIT_ASSERT( pv->nVal == 2 );
-            CPPUNIT_ASSERT( !q.empty() );
-            CPPUNIT_CHECK( v1.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v2.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
-            pv = q.pop();
-            CPPUNIT_ASSERT( pv != nullptr );
-            CPPUNIT_ASSERT( pv->nVal == 3 );
-            CPPUNIT_ASSERT( q.empty() );
-            CPPUNIT_CHECK( v1.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v2.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
-            pv = q.pop();
-            CPPUNIT_ASSERT( pv == nullptr );
-            CPPUNIT_CHECK( v1.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v2.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
-            CPPUNIT_ASSERT( q.push(v1));
-            CPPUNIT_ASSERT( !q.empty() );
-            CPPUNIT_ASSERT( q.push(v2));
-            CPPUNIT_ASSERT( !q.empty() );
-            CPPUNIT_ASSERT( q.push(v3));
-            CPPUNIT_ASSERT( !q.empty() );
-
-            CPPUNIT_CHECK( v1.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v2.nDisposeCount == 0 );
-            CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-            q.clear();
-            CPPUNIT_CHECK( q.empty() );
-            CPPUNIT_CHECK( v1.nDisposeCount == 1 );
-            CPPUNIT_CHECK( v2.nDisposeCount == 1 );
-            CPPUNIT_CHECK( v3.nDisposeCount == 1 );
-        }
-
-
-        void test_MSQueue_HP_default();
-        void test_MSQueue_HP_default_ic();
-        void test_MSQueue_HP_default_stat();
-        void test_MSQueue_HP_base();
-        void test_MSQueue_HP_member();
-        void test_MSQueue_HP_base_ic();
-        void test_MSQueue_HP_member_ic();
-        void test_MSQueue_HP_base_stat();
-        void test_MSQueue_HP_member_stat();
-        void test_MSQueue_HP_base_align();
-        void test_MSQueue_HP_member_align();
-        void test_MSQueue_HP_base_noalign();
-        void test_MSQueue_HP_member_noalign();
-        void test_MSQueue_HP_base_cachealign();
-        void test_MSQueue_HP_member_cachealign();
-        void test_MSQueue_DHP_base();
-        void test_MSQueue_DHP_member();
-        void test_MSQueue_DHP_base_ic();
-        void test_MSQueue_DHP_member_ic();
-        void test_MSQueue_DHP_base_stat();
-        void test_MSQueue_DHP_member_stat();
-        void test_MSQueue_DHP_base_align();
-        void test_MSQueue_DHP_member_align();
-        void test_MSQueue_DHP_base_noalign();
-        void test_MSQueue_DHP_member_noalign();
-        void test_MSQueue_DHP_base_cachealign();
-        void test_MSQueue_DHP_member_cachealign();
-
-        void test_MoirQueue_HP_default();
-        void test_MoirQueue_HP_default_ic();
-        void test_MoirQueue_HP_default_stat();
-        void test_MoirQueue_HP_base();
-        void test_MoirQueue_HP_member();
-        void test_MoirQueue_HP_base_ic();
-        void test_MoirQueue_HP_member_ic();
-        void test_MoirQueue_HP_base_stat();
-        void test_MoirQueue_HP_member_stat();
-        void test_MoirQueue_HP_base_align();
-        void test_MoirQueue_HP_member_align();
-        void test_MoirQueue_HP_base_noalign();
-        void test_MoirQueue_HP_member_noalign();
-        void test_MoirQueue_HP_base_cachealign();
-        void test_MoirQueue_HP_member_cachealign();
-        void test_MoirQueue_DHP_base();
-        void test_MoirQueue_DHP_member();
-        void test_MoirQueue_DHP_base_ic();
-        void test_MoirQueue_DHP_member_ic();
-        void test_MoirQueue_DHP_base_stat();
-        void test_MoirQueue_DHP_member_stat();
-        void test_MoirQueue_DHP_base_align();
-        void test_MoirQueue_DHP_member_align();
-        void test_MoirQueue_DHP_base_noalign();
-        void test_MoirQueue_DHP_member_noalign();
-        void test_MoirQueue_DHP_base_cachealign();
-        void test_MoirQueue_DHP_member_cachealign();
-
-        void test_OptimisticQueue_HP_default();
-        void test_OptimisticQueue_HP_default_ic();
-        void test_OptimisticQueue_HP_default_stat();
-        void test_OptimisticQueue_HP_base();
-        void test_OptimisticQueue_HP_member();
-        void test_OptimisticQueue_HP_base_ic();
-        void test_OptimisticQueue_HP_member_ic();
-        void test_OptimisticQueue_HP_base_stat();
-        void test_OptimisticQueue_HP_member_stat();
-        void test_OptimisticQueue_HP_base_align();
-        void test_OptimisticQueue_HP_member_align();
-        void test_OptimisticQueue_HP_base_noalign();
-        void test_OptimisticQueue_HP_member_noalign();
-        void test_OptimisticQueue_HP_base_cachealign();
-        void test_OptimisticQueue_HP_member_cachealign();
-        void test_OptimisticQueue_DHP_base();
-        void test_OptimisticQueue_DHP_member();
-        void test_OptimisticQueue_DHP_base_ic();
-        void test_OptimisticQueue_DHP_member_ic();
-        void test_OptimisticQueue_DHP_base_stat();
-        void test_OptimisticQueue_DHP_member_stat();
-        void test_OptimisticQueue_DHP_base_align();
-        void test_OptimisticQueue_DHP_member_align();
-        void test_OptimisticQueue_DHP_base_noalign();
-        void test_OptimisticQueue_DHP_member_noalign();
-        void test_OptimisticQueue_DHP_base_cachealign();
-        void test_OptimisticQueue_DHP_member_cachealign();
-
-        void test_BasketQueue_HP_default();
-        void test_BasketQueue_HP_default_ic();
-        void test_BasketQueue_HP_default_stat();
-        void test_BasketQueue_HP_base();
-        void test_BasketQueue_HP_member();
-        void test_BasketQueue_HP_base_ic();
-        void test_BasketQueue_HP_member_ic();
-        void test_BasketQueue_HP_base_stat();
-        void test_BasketQueue_HP_member_stat();
-        void test_BasketQueue_HP_base_align();
-        void test_BasketQueue_HP_member_align();
-        void test_BasketQueue_HP_base_noalign();
-        void test_BasketQueue_HP_member_noalign();
-        void test_BasketQueue_HP_base_cachealign();
-        void test_BasketQueue_HP_member_cachealign();
-        void test_BasketQueue_DHP_base();
-        void test_BasketQueue_DHP_member();
-        void test_BasketQueue_DHP_base_ic();
-        void test_BasketQueue_DHP_member_ic();
-        void test_BasketQueue_DHP_base_stat();
-        void test_BasketQueue_DHP_member_stat();
-        void test_BasketQueue_DHP_base_align();
-        void test_BasketQueue_DHP_member_align();
-        void test_BasketQueue_DHP_base_noalign();
-        void test_BasketQueue_DHP_member_noalign();
-        void test_BasketQueue_DHP_base_cachealign();
-        void test_BasketQueue_DHP_member_cachealign();
-
-        void test_TsigasCycleQueue_static();
-        void test_TsigasCycleQueue_static_ic();
-        void test_TsigasCycleQueue_dyn();
-        void test_TsigasCycleQueue_dyn_ic();
-
-        void test_VyukovMPMCCycleQueue_static();
-        void test_VyukovMPMCCycleQueue_static_ic();
-        void test_VyukovMPMCCycleQueue_dyn();
-        void test_VyukovMPMCCycleQueue_dyn_ic();
-
-        CPPUNIT_TEST_SUITE(IntrusiveQueueHeaderTest)
-            CPPUNIT_TEST(test_MSQueue_HP_default)
-            CPPUNIT_TEST(test_MSQueue_HP_default_ic)
-            CPPUNIT_TEST(test_MSQueue_HP_default_stat)
-            CPPUNIT_TEST(test_MSQueue_HP_base)
-            CPPUNIT_TEST(test_MSQueue_HP_member)
-            CPPUNIT_TEST(test_MSQueue_HP_base_ic)
-            CPPUNIT_TEST(test_MSQueue_HP_member_ic)
-            CPPUNIT_TEST(test_MSQueue_HP_base_stat)
-            CPPUNIT_TEST(test_MSQueue_HP_member_stat)
-            CPPUNIT_TEST(test_MSQueue_HP_base_align)
-            CPPUNIT_TEST(test_MSQueue_HP_member_align)
-            CPPUNIT_TEST(test_MSQueue_HP_base_noalign)
-            CPPUNIT_TEST(test_MSQueue_HP_member_noalign)
-            CPPUNIT_TEST(test_MSQueue_HP_base_cachealign)
-            CPPUNIT_TEST(test_MSQueue_HP_member_cachealign)
-            CPPUNIT_TEST(test_MSQueue_DHP_base)
-            CPPUNIT_TEST(test_MSQueue_DHP_member)
-            CPPUNIT_TEST(test_MSQueue_DHP_base_ic)
-            CPPUNIT_TEST(test_MSQueue_DHP_member_ic)
-            CPPUNIT_TEST(test_MSQueue_DHP_base_stat)
-            CPPUNIT_TEST(test_MSQueue_DHP_member_stat)
-            CPPUNIT_TEST(test_MSQueue_DHP_base_align)
-            CPPUNIT_TEST(test_MSQueue_DHP_member_align)
-            CPPUNIT_TEST(test_MSQueue_DHP_base_noalign)
-            CPPUNIT_TEST(test_MSQueue_DHP_member_noalign)
-            CPPUNIT_TEST(test_MSQueue_DHP_base_cachealign)
-            CPPUNIT_TEST(test_MSQueue_DHP_member_cachealign)
-
-            CPPUNIT_TEST(test_MoirQueue_HP_default)
-            CPPUNIT_TEST(test_MoirQueue_HP_default_ic)
-            CPPUNIT_TEST(test_MoirQueue_HP_default_stat)
-            CPPUNIT_TEST(test_MoirQueue_HP_base)
-            CPPUNIT_TEST(test_MoirQueue_HP_member)
-            CPPUNIT_TEST(test_MoirQueue_HP_base_ic)
-            CPPUNIT_TEST(test_MoirQueue_HP_member_ic)
-            CPPUNIT_TEST(test_MoirQueue_HP_base_stat)
-            CPPUNIT_TEST(test_MoirQueue_HP_member_stat)
-            CPPUNIT_TEST(test_MoirQueue_HP_base_align)
-            CPPUNIT_TEST(test_MoirQueue_HP_member_align)
-            CPPUNIT_TEST(test_MoirQueue_HP_base_noalign)
-            CPPUNIT_TEST(test_MoirQueue_HP_member_noalign)
-            CPPUNIT_TEST(test_MoirQueue_HP_base_cachealign)
-            CPPUNIT_TEST(test_MoirQueue_HP_member_cachealign)
-            CPPUNIT_TEST(test_MoirQueue_DHP_base)
-            CPPUNIT_TEST(test_MoirQueue_DHP_member)
-            CPPUNIT_TEST(test_MoirQueue_DHP_base_ic)
-            CPPUNIT_TEST(test_MoirQueue_DHP_member_ic)
-            CPPUNIT_TEST(test_MoirQueue_DHP_base_stat)
-            CPPUNIT_TEST(test_MoirQueue_DHP_member_stat)
-            CPPUNIT_TEST(test_MoirQueue_DHP_base_align)
-            CPPUNIT_TEST(test_MoirQueue_DHP_member_align)
-            CPPUNIT_TEST(test_MoirQueue_DHP_base_noalign)
-            CPPUNIT_TEST(test_MoirQueue_DHP_member_noalign)
-            CPPUNIT_TEST(test_MoirQueue_DHP_base_cachealign)
-            CPPUNIT_TEST(test_MoirQueue_DHP_member_cachealign)
-
-            CPPUNIT_TEST(test_OptimisticQueue_HP_default)
-            CPPUNIT_TEST(test_OptimisticQueue_HP_default_ic)
-            CPPUNIT_TEST(test_OptimisticQueue_HP_default_stat)
-            CPPUNIT_TEST(test_OptimisticQueue_HP_base)
-            CPPUNIT_TEST(test_OptimisticQueue_HP_member)
-            CPPUNIT_TEST(test_OptimisticQueue_HP_base_ic)
-            CPPUNIT_TEST(test_OptimisticQueue_HP_member_ic)
-            CPPUNIT_TEST(test_OptimisticQueue_HP_base_stat)
-            CPPUNIT_TEST(test_OptimisticQueue_HP_member_stat)
-            CPPUNIT_TEST(test_OptimisticQueue_HP_base_align)
-            CPPUNIT_TEST(test_OptimisticQueue_HP_member_align)
-            CPPUNIT_TEST(test_OptimisticQueue_HP_base_noalign)
-            CPPUNIT_TEST(test_OptimisticQueue_HP_member_noalign)
-            CPPUNIT_TEST(test_OptimisticQueue_HP_base_cachealign)
-            CPPUNIT_TEST(test_OptimisticQueue_HP_member_cachealign)
-            CPPUNIT_TEST(test_OptimisticQueue_DHP_base)
-            CPPUNIT_TEST(test_OptimisticQueue_DHP_member)
-            CPPUNIT_TEST(test_OptimisticQueue_DHP_base_ic)
-            CPPUNIT_TEST(test_OptimisticQueue_DHP_member_ic)
-            CPPUNIT_TEST(test_OptimisticQueue_DHP_base_stat)
-            CPPUNIT_TEST(test_OptimisticQueue_DHP_member_stat)
-            CPPUNIT_TEST(test_OptimisticQueue_DHP_base_align)
-            CPPUNIT_TEST(test_OptimisticQueue_DHP_member_align)
-            CPPUNIT_TEST(test_OptimisticQueue_DHP_base_noalign)
-            CPPUNIT_TEST(test_OptimisticQueue_DHP_member_noalign)
-            CPPUNIT_TEST(test_OptimisticQueue_DHP_base_cachealign)
-            CPPUNIT_TEST(test_OptimisticQueue_DHP_member_cachealign)
-
-            CPPUNIT_TEST(test_BasketQueue_HP_default)
-            CPPUNIT_TEST(test_BasketQueue_HP_default_ic)
-            CPPUNIT_TEST(test_BasketQueue_HP_default_stat)
-            CPPUNIT_TEST(test_BasketQueue_HP_base)
-            CPPUNIT_TEST(test_BasketQueue_HP_member)
-            CPPUNIT_TEST(test_BasketQueue_HP_base_ic)
-            CPPUNIT_TEST(test_BasketQueue_HP_member_ic)
-            CPPUNIT_TEST(test_BasketQueue_HP_base_stat)
-            CPPUNIT_TEST(test_BasketQueue_HP_member_stat)
-            CPPUNIT_TEST(test_BasketQueue_HP_base_align)
-            CPPUNIT_TEST(test_BasketQueue_HP_member_align)
-            CPPUNIT_TEST(test_BasketQueue_HP_base_noalign)
-            CPPUNIT_TEST(test_BasketQueue_HP_member_noalign)
-            CPPUNIT_TEST(test_BasketQueue_HP_base_cachealign)
-            CPPUNIT_TEST(test_BasketQueue_HP_member_cachealign)
-            CPPUNIT_TEST(test_BasketQueue_DHP_base)
-            CPPUNIT_TEST(test_BasketQueue_DHP_member)
-            CPPUNIT_TEST(test_BasketQueue_DHP_base_ic)
-            CPPUNIT_TEST(test_BasketQueue_DHP_member_ic)
-            CPPUNIT_TEST(test_BasketQueue_DHP_base_stat)
-            CPPUNIT_TEST(test_BasketQueue_DHP_member_stat)
-            CPPUNIT_TEST(test_BasketQueue_DHP_base_align)
-            CPPUNIT_TEST(test_BasketQueue_DHP_member_align)
-            CPPUNIT_TEST(test_BasketQueue_DHP_base_noalign)
-            CPPUNIT_TEST(test_BasketQueue_DHP_member_noalign)
-            CPPUNIT_TEST(test_BasketQueue_DHP_base_cachealign)
-            CPPUNIT_TEST(test_BasketQueue_DHP_member_cachealign)
-
-            CPPUNIT_TEST(test_TsigasCycleQueue_static)
-            CPPUNIT_TEST(test_TsigasCycleQueue_static_ic)
-            CPPUNIT_TEST(test_TsigasCycleQueue_dyn)
-            CPPUNIT_TEST(test_TsigasCycleQueue_dyn_ic)
-
-            CPPUNIT_TEST(test_VyukovMPMCCycleQueue_static);
-            CPPUNIT_TEST(test_VyukovMPMCCycleQueue_static_ic);
-            CPPUNIT_TEST(test_VyukovMPMCCycleQueue_dyn);
-            CPPUNIT_TEST(test_VyukovMPMCCycleQueue_dyn_ic);
-
-        CPPUNIT_TEST_SUITE_END()
-    };
-}   // namespace queue
-
-#endif // #ifndef CDSTEST_HDR_INTRSUSIVE_MSQUEUE_H
diff --git a/tests/test-hdr/queue/hdr_intrusive_msqueue_dhp.cpp b/tests/test-hdr/queue/hdr_intrusive_msqueue_dhp.cpp
deleted file mode 100644 (file)
index 748e078..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_intrusive_msqueue.h"
-#include <cds/intrusive/msqueue.h>
-#include <cds/gc/dhp.h>
-
-namespace queue {
-
-#define TEST(X)     void IntrusiveQueueHeaderTest::test_##X() { test<X>(); }
-
-    namespace {
-        typedef IntrusiveQueueHeaderTest::base_hook_item< ci::msqueue::node<cds::gc::DHP > > base_item_type;
-        typedef IntrusiveQueueHeaderTest::member_hook_item< ci::msqueue::node<cds::gc::DHP > > member_item_type;
-
-        // DHP base hook
-        typedef ci::MSQueue< cds::gc::DHP, base_item_type,
-            typename ci::msqueue::make_traits<
-            ci::opt::hook<
-            ci::msqueue::base_hook< ci::opt::gc<cds::gc::DHP> >
-            >
-            , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > MSQueue_DHP_base;
-
-        // DHP member hook
-        typedef ci::MSQueue< cds::gc::DHP, member_item_type,
-            typename ci::msqueue::make_traits<
-            ci::opt::hook<
-            ci::msqueue::member_hook<
-            offsetof( member_item_type, hMember ),
-            ci::opt::gc<cds::gc::DHP>
-            >
-            >
-            , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > MSQueue_DHP_member;
-
-        /// DHP base hook + item counter
-        typedef ci::MSQueue< cds::gc::DHP, base_item_type,
-            typename ci::msqueue::make_traits<
-            ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            , ci::opt::hook<
-            ci::msqueue::base_hook< ci::opt::gc<cds::gc::DHP> >
-            >
-            , co::item_counter< cds::atomicity::item_counter >
-            , co::memory_model< co::v::relaxed_ordering >
-            >::type
-        > MSQueue_DHP_base_ic;
-
-        // DHP member hook + item counter
-        typedef ci::MSQueue< cds::gc::DHP, member_item_type,
-            typename ci::msqueue::make_traits<
-            ci::opt::hook<
-            ci::msqueue::member_hook<
-            offsetof( member_item_type, hMember ),
-            ci::opt::gc<cds::gc::DHP>
-            >
-            >
-            , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            , co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > MSQueue_DHP_member_ic;
-
-        // DHP base hook + stat
-        typedef ci::MSQueue< cds::gc::DHP, base_item_type,
-            typename ci::msqueue::make_traits<
-            ci::opt::hook<
-            ci::msqueue::base_hook< ci::opt::gc<cds::gc::DHP> >
-            >
-            , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            , co::stat< ci::msqueue::stat<> >
-            >::type
-        > MSQueue_DHP_base_stat;
-
-        // DHP member hook + stat
-        typedef ci::MSQueue< cds::gc::DHP, member_item_type,
-            typename ci::msqueue::make_traits<
-            ci::opt::hook<
-            ci::msqueue::member_hook<
-            offsetof( member_item_type, hMember ),
-            ci::opt::gc<cds::gc::DHP>
-            >
-            >
-            , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            , co::stat< ci::msqueue::stat<> >
-            >::type
-        > MSQueue_DHP_member_stat;
-
-        // DHP base hook + padding
-        typedef ci::MSQueue< cds::gc::DHP, base_item_type,
-            typename ci::msqueue::make_traits<
-            ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            , ci::opt::hook<
-            ci::msqueue::base_hook< ci::opt::gc<cds::gc::DHP> >
-            >
-            , co::padding< 32 >
-            >::type
-        > MSQueue_DHP_base_align;
-
-        // DHP member hook + padding
-        typedef ci::MSQueue< cds::gc::DHP, member_item_type,
-            typename ci::msqueue::make_traits<
-            ci::opt::hook<
-            ci::msqueue::member_hook<
-            offsetof( member_item_type, hMember ),
-            ci::opt::gc<cds::gc::DHP>
-            >
-            >
-            , co::padding< 32 >
-            , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > MSQueue_DHP_member_align;
-
-        // DHP base hook + no padding
-        struct traits_MSQueue_DHP_base_noalign : public ci::msqueue::traits {
-            typedef ci::msqueue::base_hook< ci::opt::gc<cds::gc::DHP> > hook;
-            typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
-            enum { padding = co::no_special_padding };
-        };
-        typedef ci::MSQueue< cds::gc::DHP, base_item_type, traits_MSQueue_DHP_base_noalign > MSQueue_DHP_base_noalign;
-
-        // DHP member hook + no padding
-        struct traits_MSQueue_DHP_member_noalign : public ci::msqueue::traits {
-            typedef ci::msqueue::member_hook <
-                offsetof( member_item_type, hMember ),
-                ci::opt::gc < cds::gc::DHP >
-            > hook;
-            typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
-            enum { padding = co::no_special_padding };
-        };
-        typedef ci::MSQueue< cds::gc::DHP, member_item_type, traits_MSQueue_DHP_member_noalign > MSQueue_DHP_member_noalign;
-
-
-        // DHP base hook + cache padding
-        struct traits_MSQueue_DHP_base_cachealign : public traits_MSQueue_DHP_base_noalign
-        {
-            enum { padding = co::cache_line_padding };
-        };
-        typedef ci::MSQueue< cds::gc::DHP, base_item_type, traits_MSQueue_DHP_base_cachealign > MSQueue_DHP_base_cachealign;
-
-        // DHP member hook + cache padding
-        struct traits_MSQueue_DHP_member_cachealign : public traits_MSQueue_DHP_member_noalign
-        {
-            enum { padding = co::cache_line_padding };
-        };
-        typedef ci::MSQueue< cds::gc::DHP, member_item_type, traits_MSQueue_DHP_member_cachealign > MSQueue_DHP_member_cachealign;
-    }   // namespace
-
-    TEST(MSQueue_DHP_base)
-    TEST(MSQueue_DHP_member)
-    TEST(MSQueue_DHP_base_ic)
-    TEST(MSQueue_DHP_member_ic)
-    TEST(MSQueue_DHP_base_stat)
-    TEST(MSQueue_DHP_member_stat)
-    TEST(MSQueue_DHP_base_align)
-    TEST(MSQueue_DHP_member_align)
-    TEST(MSQueue_DHP_base_noalign)
-    TEST(MSQueue_DHP_member_noalign)
-    TEST(MSQueue_DHP_base_cachealign)
-    TEST(MSQueue_DHP_member_cachealign)
-
-} // namespace queue
diff --git a/tests/test-hdr/queue/hdr_intrusive_msqueue_hp.cpp b/tests/test-hdr/queue/hdr_intrusive_msqueue_hp.cpp
deleted file mode 100644 (file)
index fa11fa4..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_intrusive_msqueue.h"
-
-#include <cds/intrusive/msqueue.h>
-#include <cds/gc/hp.h>
-
-namespace queue {
-
-#define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test<X>(); }
-
-    namespace {
-        typedef IntrusiveQueueHeaderTest::base_hook_item< ci::msqueue::node<cds::gc::HP > > base_item_type;
-        typedef IntrusiveQueueHeaderTest::member_hook_item< ci::msqueue::node<cds::gc::HP > > member_item_type;
-
-        typedef ci::MSQueue< cds::gc::HP, base_item_type,
-            typename ci::msqueue::make_traits<
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > MSQueue_HP_default;
-
-        /// HP + item counter
-        typedef ci::MSQueue< cds::gc::HP, base_item_type,
-            typename ci::msqueue::make_traits<
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        > MSQueue_HP_default_ic;
-
-        /// HP + stat
-        typedef ci::MSQueue< cds::gc::HP, base_item_type,
-            typename ci::msqueue::make_traits<
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::stat< ci::msqueue::stat<> >
-            >::type
-        > MSQueue_HP_default_stat;
-
-        // HP base hook
-        typedef ci::MSQueue< cds::gc::HP, base_item_type,
-            typename ci::msqueue::make_traits<
-                ci::opt::hook<
-                    ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > MSQueue_HP_base;
-
-        // HP member hook
-        typedef ci::MSQueue< cds::gc::HP, member_item_type,
-            typename ci::msqueue::make_traits<
-                ci::opt::hook<
-                    ci::msqueue::member_hook<
-                        offsetof( member_item_type, hMember ),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > MSQueue_HP_member;
-
-        /// HP base hook + item counter
-        typedef ci::MSQueue< cds::gc::HP, base_item_type,
-            typename ci::msqueue::make_traits<
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,ci::opt::hook<
-                    ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
-                >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::memory_model< co::v::relaxed_ordering >
-            >::type
-        > MSQueue_HP_base_ic;
-
-        // HP member hook + item counter
-        typedef ci::MSQueue< cds::gc::HP, member_item_type,
-            typename ci::msqueue::make_traits<
-                ci::opt::hook<
-                    ci::msqueue::member_hook<
-                        offsetof( member_item_type, hMember ),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-       > MSQueue_HP_member_ic;
-
-        // HP base hook + stat
-        typedef ci::MSQueue< cds::gc::HP, base_item_type,
-            typename ci::msqueue::make_traits<
-                ci::opt::hook<
-                    ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::stat< ci::msqueue::stat<> >
-            >::type
-        > MSQueue_HP_base_stat;
-
-        // HP member hook + stat
-        typedef ci::MSQueue< cds::gc::HP, member_item_type,
-            typename ci::msqueue::make_traits<
-                ci::opt::hook<
-                    ci::msqueue::member_hook<
-                        offsetof( member_item_type, hMember ),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::stat< ci::msqueue::stat<> >
-            >::type
-        > MSQueue_HP_member_stat;
-
-        // HP base hook + padding
-        typedef ci::MSQueue< cds::gc::HP, base_item_type,
-            typename ci::msqueue::make_traits<
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,ci::opt::hook<
-                    ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
-                >
-                ,co::padding< 32 >
-            >::type
-        > MSQueue_HP_base_align;
-
-        // HP member hook + padding
-        typedef ci::MSQueue< cds::gc::HP, member_item_type,
-            typename ci::msqueue::make_traits<
-                ci::opt::hook<
-                    ci::msqueue::member_hook<
-                        offsetof( member_item_type, hMember ),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,co::padding< 32 >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > MSQueue_HP_member_align;
-
-        // HP base hook + no padding
-        struct traits_MSQueue_HP_base_noalign : public ci::msqueue::traits {
-            typedef ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> > hook;
-            typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
-            enum { padding = co::no_special_padding };
-        };
-        typedef ci::MSQueue< cds::gc::HP, base_item_type, traits_MSQueue_HP_base_noalign > MSQueue_HP_base_noalign;
-
-        // HP member hook + no padding
-        struct traits_MSQueue_HP_member_noalign : public ci::msqueue::traits {
-            typedef ci::msqueue::member_hook <
-                offsetof( member_item_type, hMember ),
-                ci::opt::gc < cds::gc::HP >
-            > hook;
-            typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
-            enum { padding = co::no_special_padding };
-        };
-        typedef ci::MSQueue< cds::gc::HP, member_item_type, traits_MSQueue_HP_member_noalign > MSQueue_HP_member_noalign;
-
-
-        // HP base hook + cache padding
-        struct traits_MSQueue_HP_base_cachealign : public traits_MSQueue_HP_base_noalign
-        {
-            enum { padding = co::cache_line_padding };
-        };
-        typedef ci::MSQueue< cds::gc::HP, base_item_type, traits_MSQueue_HP_base_cachealign > MSQueue_HP_base_cachealign;
-
-        // HP member hook + cache padding
-        struct traits_MSQueue_HP_member_cachealign : public traits_MSQueue_HP_member_noalign
-        {
-            enum { padding = co::cache_line_padding };
-        };
-        typedef ci::MSQueue< cds::gc::HP, member_item_type, traits_MSQueue_HP_member_cachealign > MSQueue_HP_member_cachealign;
-
-    }
-
-    TEST(MSQueue_HP_default)
-    TEST(MSQueue_HP_default_ic)
-    TEST(MSQueue_HP_default_stat)
-    TEST(MSQueue_HP_base)
-    TEST(MSQueue_HP_member)
-    TEST(MSQueue_HP_base_ic)
-    TEST(MSQueue_HP_member_ic)
-    TEST(MSQueue_HP_base_stat)
-    TEST(MSQueue_HP_member_stat)
-    TEST(MSQueue_HP_base_align)
-    TEST(MSQueue_HP_member_align)
-    TEST(MSQueue_HP_base_noalign)
-    TEST(MSQueue_HP_member_noalign)
-    TEST(MSQueue_HP_base_cachealign)
-    TEST(MSQueue_HP_member_cachealign)
-}
-
diff --git a/tests/test-hdr/queue/hdr_intrusive_optimisticqueue_dhp.cpp b/tests/test-hdr/queue/hdr_intrusive_optimisticqueue_dhp.cpp
deleted file mode 100644 (file)
index d62e683..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_intrusive_msqueue.h"
-#include <cds/gc/dhp.h>
-#include <cds/intrusive/optimistic_queue.h>
-
-namespace queue {
-
-#define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test<X>(); }
-
-    namespace {
-        struct base_hook_item: public ci::optimistic_queue::node< cds::gc::DHP >
-        {
-            int nVal;
-            int nDisposeCount;
-
-            base_hook_item()
-                : nDisposeCount(0)
-            {}
-        };
-
-        struct member_hook_item
-        {
-            int nVal;
-            int nDisposeCount;
-            ci::optimistic_queue::node< cds::gc::DHP > hMember;
-
-            member_hook_item()
-                : nDisposeCount(0)
-            {}
-        };
-
-        // DHP base hook
-        typedef ci::OptimisticQueue< cds::gc::DHP, base_hook_item,
-            typename ci::optimistic_queue::make_traits<
-                ci::opt::hook<
-                    ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::memory_model< co::v::relaxed_ordering >
-            >::type
-        > OptimisticQueue_DHP_base;
-
-        // DHP member hook
-        struct traits_OptimisticQueue_DHP_member : public OptimisticQueue_DHP_base::traits
-        {
-            typedef ci::optimistic_queue::member_hook <
-                offsetof( member_hook_item, hMember ),
-                ci::opt::gc < cds::gc::DHP >
-            > hook;
-        };
-        typedef ci::OptimisticQueue< cds::gc::DHP, member_hook_item, traits_OptimisticQueue_DHP_member > OptimisticQueue_DHP_member;
-
-        /// DHP base hook + item counter
-        typedef ci::OptimisticQueue< cds::gc::DHP, base_hook_item,
-            typename ci::optimistic_queue::make_traits<
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,ci::opt::hook<
-                    ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
-                >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > OptimisticQueue_DHP_base_ic;
-
-        // DHP member hook + item counter
-        typedef ci::OptimisticQueue< cds::gc::DHP, member_hook_item,
-            typename ci::optimistic_queue::make_traits<
-                cds::opt::type_traits< traits_OptimisticQueue_DHP_member >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-       > OptimisticQueue_DHP_member_ic;
-
-        // DHP base hook + stat
-        typedef ci::OptimisticQueue< cds::gc::DHP, base_hook_item,
-            typename ci::optimistic_queue::make_traits<
-                ci::opt::hook<
-                    ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::stat< ci::optimistic_queue::stat<> >
-            >::type
-        > OptimisticQueue_DHP_base_stat;
-
-        // DHP member hook + stat
-        typedef ci::OptimisticQueue< cds::gc::DHP, member_hook_item,
-            typename ci::optimistic_queue::make_traits<
-                cds::opt::type_traits< OptimisticQueue_DHP_base_stat::traits >
-                , ci::opt::hook<
-                    ci::optimistic_queue::member_hook<
-                        offsetof(member_hook_item, hMember),
-                        ci::opt::gc<cds::gc::DHP>
-                    >
-                >
-            >::type
-        > OptimisticQueue_DHP_member_stat;
-
-        // DHP base hook + padding
-        typedef ci::OptimisticQueue< cds::gc::DHP, base_hook_item,
-            typename ci::optimistic_queue::make_traits<
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,ci::opt::hook<
-                    ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
-                >
-                ,co::padding< 32 >
-            >::type
-        > OptimisticQueue_DHP_base_align;
-
-        // DHP member hook + padding
-        typedef ci::OptimisticQueue< cds::gc::DHP, member_hook_item,
-            typename ci::optimistic_queue::make_traits<
-                ci::opt::hook<
-                    ci::optimistic_queue::member_hook<
-                        offsetof(member_hook_item, hMember),
-                        ci::opt::gc<cds::gc::DHP>
-                    >
-                >
-                ,co::padding< 32 >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > OptimisticQueue_DHP_member_align;
-
-        // DHP base hook + no padding
-        typedef ci::OptimisticQueue< cds::gc::DHP, base_hook_item,
-            typename ci::optimistic_queue::make_traits<
-                ci::opt::hook<
-                    ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::padding< co::no_special_padding >
-            >::type
-        > OptimisticQueue_DHP_base_noalign;
-
-        // DHP member hook + no padding
-        typedef ci::OptimisticQueue< cds::gc::DHP, member_hook_item,
-            typename ci::optimistic_queue::make_traits<
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,ci::opt::hook<
-                    ci::optimistic_queue::member_hook<
-                        offsetof(member_hook_item, hMember),
-                        ci::opt::gc<cds::gc::DHP>
-                    >
-                >
-                ,co::padding< co::no_special_padding >
-            >::type
-        > OptimisticQueue_DHP_member_noalign;
-
-
-        // DHP base hook + cache padding
-        typedef ci::OptimisticQueue< cds::gc::DHP, base_hook_item,
-            typename ci::optimistic_queue::make_traits<
-                ci::opt::hook<
-                    ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
-                >
-                ,co::padding< co::cache_line_padding >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > OptimisticQueue_DHP_base_cachealign;
-
-        // DHP member hook + cache padding
-        typedef ci::OptimisticQueue< cds::gc::DHP, member_hook_item,
-            typename ci::optimistic_queue::make_traits<
-                ci::opt::hook<
-                    ci::optimistic_queue::member_hook<
-                        offsetof(member_hook_item, hMember),
-                        ci::opt::gc<cds::gc::DHP>
-                    >
-                >
-                ,co::padding< co::cache_line_padding >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > OptimisticQueue_DHP_member_cachealign;
-    }
-
-    TEST(OptimisticQueue_DHP_base)
-    TEST(OptimisticQueue_DHP_member)
-    TEST(OptimisticQueue_DHP_base_ic)
-    TEST(OptimisticQueue_DHP_member_ic)
-    TEST(OptimisticQueue_DHP_base_stat)
-    TEST(OptimisticQueue_DHP_member_stat)
-    TEST(OptimisticQueue_DHP_base_align)
-    TEST(OptimisticQueue_DHP_member_align)
-    TEST(OptimisticQueue_DHP_base_noalign)
-    TEST(OptimisticQueue_DHP_member_noalign)
-    TEST(OptimisticQueue_DHP_base_cachealign)
-    TEST(OptimisticQueue_DHP_member_cachealign)
-}
diff --git a/tests/test-hdr/queue/hdr_intrusive_optimisticqueue_hp.cpp b/tests/test-hdr/queue/hdr_intrusive_optimisticqueue_hp.cpp
deleted file mode 100644 (file)
index fc18065..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_intrusive_msqueue.h"
-#include <cds/gc/hp.h>
-#include <cds/intrusive/optimistic_queue.h>
-
-namespace queue {
-
-#define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test<X>(); }
-
-    namespace {
-        struct base_hook_item: public ci::optimistic_queue::node< cds::gc::HP >
-        {
-            int nVal;
-            int nDisposeCount;
-
-            base_hook_item()
-                : nDisposeCount(0)
-            {}
-        };
-
-        struct member_hook_item
-        {
-            int nVal;
-            int nDisposeCount;
-            ci::optimistic_queue::node< cds::gc::HP > hMember;
-
-            member_hook_item()
-                : nDisposeCount(0)
-            {}
-        };
-
-        struct traits_OptimisticQueue_HP_default : public ci::optimistic_queue::traits
-        {
-            typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
-        };
-        typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item, traits_OptimisticQueue_HP_default > OptimisticQueue_HP_default;
-
-        /// HP + item counter
-        struct traits_OptimisticQueue_HP_default_ic : public traits_OptimisticQueue_HP_default
-        {
-            typedef cds::atomicity::item_counter item_counter;
-        };
-        typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item, traits_OptimisticQueue_HP_default_ic > OptimisticQueue_HP_default_ic;
-
-        /// HP + stat
-        struct traits_OptimisticQueue_HP_default_stat : public
-            ci::optimistic_queue::make_traits <
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                , co::stat< ci::optimistic_queue::stat<> >
-                , co::memory_model< co::v::sequential_consistent >
-            > ::type
-        {};
-        typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item, traits_OptimisticQueue_HP_default_stat > OptimisticQueue_HP_default_stat;
-
-        // HP base hook
-        typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item,
-            typename ci::optimistic_queue::make_traits<
-                ci::opt::hook<
-                    ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::memory_model< co::v::relaxed_ordering >
-            >::type
-        > OptimisticQueue_HP_base;
-
-        // HP member hook
-        struct traits_OptimisticQueue_HP_member : public OptimisticQueue_HP_base::traits
-        {
-            typedef ci::optimistic_queue::member_hook <
-                offsetof( member_hook_item, hMember ),
-                ci::opt::gc < cds::gc::HP >
-            > hook;
-        };
-        typedef ci::OptimisticQueue< cds::gc::HP, member_hook_item, traits_OptimisticQueue_HP_member > OptimisticQueue_HP_member;
-
-        /// HP base hook + item counter
-        typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item,
-            typename ci::optimistic_queue::make_traits<
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,ci::opt::hook<
-                    ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
-                >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > OptimisticQueue_HP_base_ic;
-
-        // HP member hook + item counter
-        typedef ci::OptimisticQueue< cds::gc::HP, member_hook_item,
-            typename ci::optimistic_queue::make_traits<
-                cds::opt::type_traits< traits_OptimisticQueue_HP_member >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-       > OptimisticQueue_HP_member_ic;
-
-        // HP base hook + stat
-        typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item,
-            typename ci::optimistic_queue::make_traits<
-                ci::opt::hook<
-                    ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::stat< ci::optimistic_queue::stat<> >
-            >::type
-        > OptimisticQueue_HP_base_stat;
-
-        // HP member hook + stat
-        typedef ci::OptimisticQueue< cds::gc::HP, member_hook_item,
-            typename ci::optimistic_queue::make_traits<
-                cds::opt::type_traits< OptimisticQueue_HP_base_stat::traits >
-                , ci::opt::hook<
-                    ci::optimistic_queue::member_hook<
-                        offsetof(member_hook_item, hMember),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-            >::type
-        > OptimisticQueue_HP_member_stat;
-
-        // HP base hook + padding
-        typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item,
-            typename ci::optimistic_queue::make_traits<
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,ci::opt::hook<
-                    ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
-                >
-                ,co::padding< 32 >
-            >::type
-        > OptimisticQueue_HP_base_align;
-
-        // HP member hook + padding
-        typedef ci::OptimisticQueue< cds::gc::HP, member_hook_item,
-            typename ci::optimistic_queue::make_traits<
-                ci::opt::hook<
-                    ci::optimistic_queue::member_hook<
-                        offsetof(member_hook_item, hMember),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,co::padding< 32 >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > OptimisticQueue_HP_member_align;
-
-        // HP base hook + no padding
-        typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item,
-            typename ci::optimistic_queue::make_traits<
-                ci::opt::hook<
-                    ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
-                >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,co::padding< co::no_special_padding >
-            >::type
-        > OptimisticQueue_HP_base_noalign;
-
-        // HP member hook + no padding
-        typedef ci::OptimisticQueue< cds::gc::HP, member_hook_item,
-            typename ci::optimistic_queue::make_traits<
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                ,ci::opt::hook<
-                    ci::optimistic_queue::member_hook<
-                        offsetof(member_hook_item, hMember),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,co::padding< co::no_special_padding >
-            >::type
-        > OptimisticQueue_HP_member_noalign;
-
-
-        // HP base hook + cache padding
-        typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item,
-            typename ci::optimistic_queue::make_traits<
-                ci::opt::hook<
-                    ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
-                >
-                ,co::padding< co::cache_line_padding >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > OptimisticQueue_HP_base_cachealign;
-
-        // HP member hook + cache padding
-        typedef ci::OptimisticQueue< cds::gc::HP, member_hook_item,
-            typename ci::optimistic_queue::make_traits<
-                ci::opt::hook<
-                    ci::optimistic_queue::member_hook<
-                        offsetof(member_hook_item, hMember),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,co::padding< co::cache_line_padding >
-                ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        > OptimisticQueue_HP_member_cachealign;
-    }
-
-    TEST(OptimisticQueue_HP_default)
-    TEST(OptimisticQueue_HP_default_ic)
-    TEST(OptimisticQueue_HP_default_stat)
-    TEST(OptimisticQueue_HP_base)
-    TEST(OptimisticQueue_HP_member)
-    TEST(OptimisticQueue_HP_base_ic)
-    TEST(OptimisticQueue_HP_member_ic)
-    TEST(OptimisticQueue_HP_base_stat)
-    TEST(OptimisticQueue_HP_member_stat)
-    TEST(OptimisticQueue_HP_base_align)
-    TEST(OptimisticQueue_HP_member_align)
-    TEST(OptimisticQueue_HP_base_noalign)
-    TEST(OptimisticQueue_HP_member_noalign)
-    TEST(OptimisticQueue_HP_base_cachealign)
-    TEST(OptimisticQueue_HP_member_cachealign)
-}
diff --git a/tests/test-hdr/queue/hdr_intrusive_segmented_queue.h b/tests/test-hdr/queue/hdr_intrusive_segmented_queue.h
deleted file mode 100644 (file)
index ae6ffde..0000000
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_INTRUSIVE_SEGMENTED_QUEUE_H
-#define CDSTEST_HDR_INTRUSIVE_SEGMENTED_QUEUE_H
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/intrusive/details/base.h>
-#include "size_check.h"
-
-namespace queue {
-
-    class HdrIntrusiveSegmentedQueue : public CppUnitMini::TestCase
-    {
-        struct item {
-            int  nValue;
-
-            size_t  nDisposeCount;
-            size_t  nDispose2Count;
-
-            item()
-                : nValue( 0 )
-                , nDisposeCount( 0 )
-                , nDispose2Count( 0 )
-            {}
-
-            item( int nVal )
-                : nValue( nVal )
-                , nDisposeCount( 0 )
-                , nDispose2Count( 0 )
-            {}
-        };
-
-        struct big_item : public item
-        {
-            big_item()
-            {}
-
-            big_item( int nVal )
-                : item( nVal )
-            {}
-
-            int arr[80];
-        };
-
-        struct Disposer
-        {
-            void operator()( item * p )
-            {
-                ++p->nDisposeCount;
-            }
-        };
-
-        struct Disposer2
-        {
-            void operator()( item * p )
-            {
-                ++p->nDispose2Count;
-            }
-        };
-
-        template <typename Queue>
-        void test()
-        {
-            for ( size_t nQuasiFactor = 2; nQuasiFactor <= 256; ++nQuasiFactor ) {
-                CPPUNIT_MSG( "QuasiFactor=" << nQuasiFactor << "..." );
-                test_qf<Queue>( nQuasiFactor );
-            }
-        }
-
-        template <typename Queue>
-        void test_qf( size_t nQuasiFactor )
-        {
-            typedef typename Queue::value_type value_type;
-
-            static size_t const c_nItemCount = 1000;
-            value_type val[c_nItemCount];
-            for ( int i = 0; i < static_cast<int>(sizeof(val)/sizeof(val[0])); ++i )
-                val[i].nValue = i;
-
-            {
-                Queue q( nQuasiFactor );
-                CPPUNIT_CHECK( q.quasi_factor() == cds::beans::ceil2(nQuasiFactor) );
-                CPPUNIT_CHECK( misc::check_size( q, 0 ));
-                CPPUNIT_CHECK( q.empty() );
-
-                // push/enqueue
-                for ( size_t i = 0; i < sizeof(val)/sizeof(val[0]); ++i ) {
-                    if ( i & 1 ) {
-                        CPPUNIT_ASSERT( q.push( val[i] ));
-                    }
-                    else {
-                        CPPUNIT_ASSERT( q.enqueue( val[i] ));
-                    }
-
-                    CPPUNIT_CHECK( misc::check_size( q, i + 1 ));
-                }
-                CPPUNIT_CHECK( !q.empty() );
-
-                // pop/dequeue
-                size_t nCount = 0;
-                while ( !q.empty() ) {
-                    value_type * pVal;
-                    if ( nCount & 1 )
-                        pVal = q.pop();
-                    else
-                        pVal = q.dequeue();
-
-                    CPPUNIT_ASSERT( pVal != nullptr );
-
-                    int nSegment = int( nCount / q.quasi_factor() );
-                    int nMin = nSegment * int(q.quasi_factor());
-                    int nMax = nMin + int(q.quasi_factor()) - 1;
-                    CPPUNIT_CHECK_EX( nMin <= pVal->nValue && pVal->nValue <= nMax, nMin << " <= " << pVal->nValue << " <= " << nMax );
-
-                    ++nCount;
-                    CPPUNIT_CHECK( misc::check_size( q, sizeof(val)/sizeof(val[0]) - nCount ));
-                }
-                CPPUNIT_CHECK( nCount == sizeof(val)/sizeof(val[0]) );
-                CPPUNIT_CHECK( q.empty() );
-                CPPUNIT_CHECK( misc::check_size( q, 0 ));
-
-                // pop from empty queue
-                CPPUNIT_ASSERT( q.pop() == nullptr );
-                CPPUNIT_CHECK( q.empty() );
-                CPPUNIT_CHECK( misc::check_size( q, 0 ));
-
-                // check if Disposer has not been called
-                Queue::gc::force_dispose();
-                for ( int i = 0; i < static_cast<int>( sizeof(val)/sizeof(val[0]) ); ++i ) {
-                    CPPUNIT_CHECK( val[i].nDisposeCount == 0 );
-                    CPPUNIT_CHECK( val[i].nDispose2Count == 0 );
-                }
-
-                // Manually dispose the items
-                for ( int i = 0; i < static_cast<int>( sizeof(val)/sizeof(val[0])); ++i )
-                    Queue::gc::template retire<Disposer>( &(val[i]) );
-
-                // check if Disposer has been called
-                Queue::gc::force_dispose();
-                for ( int i = 0; i < static_cast<int>( sizeof(val)/sizeof(val[0])); ++i ) {
-                    CPPUNIT_CHECK( val[i].nDisposeCount == 1 );
-                    CPPUNIT_CHECK( val[i].nDispose2Count == 0 );
-                }
-
-
-                // clear
-                for ( int i = 0; i < static_cast<int>( sizeof(val)/sizeof(val[0])); ++i )
-                    CPPUNIT_CHECK( q.push( val[i] ) );
-                CPPUNIT_CHECK( misc::check_size( q, sizeof(val)/sizeof(val[0]) ));
-                CPPUNIT_CHECK( !q.empty() );
-
-                q.clear();
-                CPPUNIT_CHECK( misc::check_size( q, 0));
-                CPPUNIT_CHECK( q.empty() );
-
-                // check if Disposer has been called
-                Queue::gc::force_dispose();
-                for ( int i = 0; i < static_cast<int>( sizeof(val)/sizeof(val[0])); ++i ) {
-                    CPPUNIT_CHECK( val[i].nDisposeCount == 2 );
-                    CPPUNIT_CHECK( val[i].nDispose2Count == 0 );
-                }
-
-                // clear_with
-                for ( int i = 0; i < static_cast<int>( sizeof(val)/sizeof(val[0])); ++i )
-                    CPPUNIT_CHECK( q.push( val[i] ) );
-                CPPUNIT_CHECK( misc::check_size( q, sizeof(val)/sizeof(val[0]) ));
-                CPPUNIT_CHECK( !q.empty() );
-
-                q.clear_with( Disposer2() );
-                CPPUNIT_CHECK( misc::check_size( q, 0));
-                CPPUNIT_CHECK( q.empty() );
-
-                // check if Disposer has been called
-                Queue::gc::force_dispose();
-                for ( int i = 0; i < static_cast<int>( sizeof(val)/sizeof(val[0])); ++i ) {
-                    CPPUNIT_CHECK( val[i].nDisposeCount == 2 );
-                    CPPUNIT_CHECK( val[i].nDispose2Count == 1 );
-                }
-
-                // check clear on destruct
-                for ( int i = 0; i < static_cast<int>( sizeof(val)/sizeof(val[0])); ++i )
-                    CPPUNIT_CHECK( q.push( val[i] ) );
-                CPPUNIT_CHECK( misc::check_size( q, sizeof(val)/sizeof(val[0]) ));
-                CPPUNIT_CHECK( !q.empty() );
-            }
-
-            // check if Disposer has been called
-            Queue::gc::force_dispose();
-            for ( int i = 0; i < static_cast<int>( sizeof(val)/sizeof(val[0])); ++i ) {
-                CPPUNIT_CHECK( val[i].nDisposeCount == 3 );
-                CPPUNIT_CHECK( val[i].nDispose2Count == 1 );
-            }
-        }
-
-        void SegmQueue_HP();
-        void SegmQueue_HP_mutex();
-        void SegmQueue_HP_shuffle();
-        void SegmQueue_HP_stat();
-        void SegmQueue_HP_cacheline_padding();
-        void SegmQueue_HP_mutex_cacheline_padding();
-        void SegmQueue_HP_shuffle_cacheline_padding();
-        void SegmQueue_HP_stat_cacheline_padding();
-        void SegmQueue_HP_256_padding();
-        void SegmQueue_HP_mutex_256_padding();
-        void SegmQueue_HP_shuffle_256_padding();
-        void SegmQueue_HP_stat_256_padding();
-        void SegmQueue_HP_cacheline_padding_bigdata();
-        void SegmQueue_HP_mutex_cacheline_padding_bigdata();
-        void SegmQueue_HP_shuffle_cacheline_padding_bigdata();
-        void SegmQueue_HP_stat_cacheline_padding_bigdata();
-
-        void SegmQueue_DHP();
-        void SegmQueue_DHP_mutex();
-        void SegmQueue_DHP_shuffle();
-        void SegmQueue_DHP_stat();
-        void SegmQueue_DHP_cacheline_padding();
-        void SegmQueue_DHP_mutex_cacheline_padding();
-        void SegmQueue_DHP_shuffle_cacheline_padding();
-        void SegmQueue_DHP_stat_cacheline_padding();
-        void SegmQueue_DHP_256_padding();
-        void SegmQueue_DHP_mutex_256_padding();
-        void SegmQueue_DHP_shuffle_256_padding();
-        void SegmQueue_DHP_stat_256_padding();
-        void SegmQueue_DHP_cacheline_padding_bigdata();
-        void SegmQueue_DHP_mutex_cacheline_padding_bigdata();
-        void SegmQueue_DHP_shuffle_cacheline_padding_bigdata();
-        void SegmQueue_DHP_stat_cacheline_padding_bigdata();
-
-        CPPUNIT_TEST_SUITE(HdrIntrusiveSegmentedQueue)
-            CPPUNIT_TEST( SegmQueue_HP )
-            CPPUNIT_TEST( SegmQueue_HP_mutex )
-            CPPUNIT_TEST( SegmQueue_HP_shuffle )
-            CPPUNIT_TEST( SegmQueue_HP_stat )
-            CPPUNIT_TEST( SegmQueue_HP_cacheline_padding )
-            CPPUNIT_TEST( SegmQueue_HP_mutex_cacheline_padding )
-            CPPUNIT_TEST( SegmQueue_HP_shuffle_cacheline_padding )
-            CPPUNIT_TEST( SegmQueue_HP_stat_cacheline_padding )
-            CPPUNIT_TEST( SegmQueue_HP_256_padding )
-            CPPUNIT_TEST( SegmQueue_HP_mutex_256_padding )
-            CPPUNIT_TEST( SegmQueue_HP_shuffle_256_padding )
-            CPPUNIT_TEST( SegmQueue_HP_stat_256_padding )
-            CPPUNIT_TEST( SegmQueue_HP_cacheline_padding_bigdata )
-            CPPUNIT_TEST( SegmQueue_HP_mutex_cacheline_padding_bigdata )
-            CPPUNIT_TEST( SegmQueue_HP_shuffle_cacheline_padding_bigdata )
-            CPPUNIT_TEST( SegmQueue_HP_stat_cacheline_padding_bigdata )
-
-            CPPUNIT_TEST( SegmQueue_DHP )
-            CPPUNIT_TEST( SegmQueue_DHP_mutex )
-            CPPUNIT_TEST( SegmQueue_DHP_shuffle )
-            CPPUNIT_TEST( SegmQueue_DHP_stat )
-            CPPUNIT_TEST( SegmQueue_DHP_cacheline_padding )
-            CPPUNIT_TEST( SegmQueue_DHP_mutex_cacheline_padding )
-            CPPUNIT_TEST( SegmQueue_DHP_shuffle_cacheline_padding )
-            CPPUNIT_TEST( SegmQueue_DHP_stat_cacheline_padding )
-            CPPUNIT_TEST( SegmQueue_DHP_256_padding )
-            CPPUNIT_TEST( SegmQueue_DHP_mutex_256_padding )
-            CPPUNIT_TEST( SegmQueue_DHP_shuffle_256_padding )
-            CPPUNIT_TEST( SegmQueue_DHP_stat_256_padding )
-            CPPUNIT_TEST( SegmQueue_DHP_cacheline_padding_bigdata )
-            CPPUNIT_TEST( SegmQueue_DHP_mutex_cacheline_padding_bigdata )
-            CPPUNIT_TEST( SegmQueue_DHP_shuffle_cacheline_padding_bigdata )
-            CPPUNIT_TEST( SegmQueue_DHP_stat_cacheline_padding_bigdata )
-        CPPUNIT_TEST_SUITE_END()
-    };
-
-} // namespace queue
-
-#endif // CDSTEST_HDR_INTRUSIVE_SEGMENTED_QUEUE_H
diff --git a/tests/test-hdr/queue/hdr_intrusive_segmented_queue_dhp.cpp b/tests/test-hdr/queue/hdr_intrusive_segmented_queue_dhp.cpp
deleted file mode 100644 (file)
index 2923256..0000000
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_intrusive_segmented_queue.h"
-#include <cds/intrusive/segmented_queue.h>
-#include <cds/gc/dhp.h>
-
-namespace queue {
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_DHP()
-    {
-        struct queue_traits : public cds::intrusive::segmented_queue::traits
-        {
-            typedef Disposer disposer;
-        };
-        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_mutex()
-    {
-        struct queue_traits : public
-            cds::intrusive::segmented_queue::make_traits <
-                cds::intrusive::opt::disposer< Disposer >
-                ,cds::opt::lock_type < std::mutex >
-            > ::type
-        {};
-        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_shuffle()
-    {
-        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item,
-            cds::intrusive::segmented_queue::make_traits<
-                cds::intrusive::opt::disposer< Disposer >
-                ,cds::opt::item_counter< cds::atomicity::item_counter >
-                ,cds::opt::permutation_generator< cds::opt::v::random_shuffle_permutation<> >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_stat()
-    {
-        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item,
-            cds::intrusive::segmented_queue::make_traits<
-                cds::intrusive::opt::disposer< Disposer >
-                ,cds::opt::item_counter< cds::atomicity::item_counter >
-                ,cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
-                ,cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_cacheline_padding()
-    {
-        struct queue_traits : public cds::intrusive::segmented_queue::traits
-        {
-            typedef Disposer disposer;
-            enum { padding = cds::opt::cache_line_padding };
-        };
-        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_mutex_cacheline_padding()
-    {
-        struct queue_traits : public
-            cds::intrusive::segmented_queue::make_traits <
-                cds::intrusive::opt::disposer< Disposer >
-                , cds::opt::padding< cds::opt::cache_line_padding >
-                ,cds::opt::lock_type < std::mutex >
-            > ::type
-        {};
-        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_shuffle_cacheline_padding()
-    {
-        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item,
-            cds::intrusive::segmented_queue::make_traits<
-                cds::intrusive::opt::disposer< Disposer >
-                ,cds::opt::item_counter< cds::atomicity::item_counter >
-                ,cds::opt::permutation_generator< cds::opt::v::random_shuffle_permutation<> >
-                , cds::opt::padding< cds::opt::cache_line_padding >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_stat_cacheline_padding()
-    {
-        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item,
-            cds::intrusive::segmented_queue::make_traits<
-                cds::intrusive::opt::disposer< Disposer >
-                ,cds::opt::item_counter< cds::atomicity::item_counter >
-                ,cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
-                ,cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
-                , cds::opt::padding< cds::opt::cache_line_padding >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_256_padding()
-    {
-        struct queue_traits : public cds::intrusive::segmented_queue::traits
-        {
-            typedef Disposer disposer;
-            enum { padding = 256 };
-        };
-        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_mutex_256_padding()
-    {
-        struct queue_traits : public
-            cds::intrusive::segmented_queue::make_traits <
-                cds::intrusive::opt::disposer< Disposer >
-                , cds::opt::padding< 256 >
-                ,cds::opt::lock_type < std::mutex >
-            > ::type
-        {};
-        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_shuffle_256_padding()
-    {
-        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item,
-            cds::intrusive::segmented_queue::make_traits<
-                cds::intrusive::opt::disposer< Disposer >
-                ,cds::opt::item_counter< cds::atomicity::item_counter >
-                ,cds::opt::permutation_generator< cds::opt::v::random_shuffle_permutation<> >
-                , cds::opt::padding< 256 >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_stat_256_padding()
-    {
-        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item,
-            cds::intrusive::segmented_queue::make_traits<
-                cds::intrusive::opt::disposer< Disposer >
-                ,cds::opt::item_counter< cds::atomicity::item_counter >
-                ,cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
-                ,cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
-                , cds::opt::padding< 256 >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_cacheline_padding_bigdata()
-    {
-        struct queue_traits : public cds::intrusive::segmented_queue::traits
-        {
-            typedef Disposer disposer;
-            enum { padding = cds::opt::cache_line_padding };
-        };
-        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, big_item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_mutex_cacheline_padding_bigdata()
-    {
-        struct queue_traits : public
-            cds::intrusive::segmented_queue::make_traits <
-                cds::intrusive::opt::disposer< Disposer >
-                , cds::opt::padding< cds::opt::cache_line_padding >
-                ,cds::opt::lock_type < std::mutex >
-            > ::type
-        {};
-        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, big_item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_shuffle_cacheline_padding_bigdata()
-    {
-        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, big_item,
-            cds::intrusive::segmented_queue::make_traits<
-                cds::intrusive::opt::disposer< Disposer >
-                ,cds::opt::item_counter< cds::atomicity::item_counter >
-                ,cds::opt::permutation_generator< cds::opt::v::random_shuffle_permutation<> >
-                , cds::opt::padding< cds::opt::cache_line_padding >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_stat_cacheline_padding_bigdata()
-    {
-        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, big_item,
-            cds::intrusive::segmented_queue::make_traits<
-                cds::intrusive::opt::disposer< Disposer >
-                ,cds::opt::item_counter< cds::atomicity::item_counter >
-                ,cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
-                ,cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
-                , cds::opt::padding< cds::opt::cache_line_padding >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-} // namespace queue
diff --git a/tests/test-hdr/queue/hdr_intrusive_segmented_queue_hp.cpp b/tests/test-hdr/queue/hdr_intrusive_segmented_queue_hp.cpp
deleted file mode 100644 (file)
index 9624f09..0000000
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_intrusive_segmented_queue.h"
-#include <cds/intrusive/segmented_queue.h>
-#include <cds/gc/hp.h>
-
-namespace queue {
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_HP()
-    {
-        struct queue_traits : public cds::intrusive::segmented_queue::traits
-        {
-            typedef Disposer disposer;
-        };
-        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_HP_mutex()
-    {
-        struct queue_traits : public
-            cds::intrusive::segmented_queue::make_traits <
-                cds::intrusive::opt::disposer< Disposer >
-                ,cds::opt::lock_type < std::mutex >
-            > ::type
-        {};
-        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_HP_shuffle()
-    {
-        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item,
-            cds::intrusive::segmented_queue::make_traits<
-                cds::intrusive::opt::disposer< Disposer >
-                ,cds::opt::item_counter< cds::atomicity::item_counter >
-                ,cds::opt::permutation_generator< cds::opt::v::random_shuffle_permutation<> >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_HP_stat()
-    {
-        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item,
-            cds::intrusive::segmented_queue::make_traits<
-                cds::intrusive::opt::disposer< Disposer >
-                ,cds::opt::item_counter< cds::atomicity::item_counter >
-                ,cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
-                ,cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_HP_cacheline_padding()
-    {
-        struct queue_traits : public cds::intrusive::segmented_queue::traits
-        {
-            typedef Disposer disposer;
-            enum { padding = cds::opt::cache_line_padding };
-        };
-        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_HP_mutex_cacheline_padding()
-    {
-        struct queue_traits : public
-            cds::intrusive::segmented_queue::make_traits <
-                cds::intrusive::opt::disposer< Disposer >
-                ,cds::opt::lock_type < std::mutex >
-                ,cds::opt::padding< cds::opt::cache_line_padding >
-            > ::type
-        {};
-        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_HP_shuffle_cacheline_padding()
-    {
-        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item,
-            cds::intrusive::segmented_queue::make_traits<
-                cds::intrusive::opt::disposer< Disposer >
-                ,cds::opt::item_counter< cds::atomicity::item_counter >
-                , cds::opt::padding< cds::opt::cache_line_padding >
-                ,cds::opt::permutation_generator< cds::opt::v::random_shuffle_permutation<> >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_HP_stat_cacheline_padding()
-    {
-        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item,
-            cds::intrusive::segmented_queue::make_traits<
-                cds::intrusive::opt::disposer< Disposer >
-                , cds::opt::padding< cds::opt::cache_line_padding >
-                ,cds::opt::item_counter< cds::atomicity::item_counter >
-                ,cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
-                ,cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_HP_256_padding()
-    {
-        struct queue_traits : public cds::intrusive::segmented_queue::traits
-        {
-            typedef Disposer disposer;
-            enum { padding = 256 };
-        };
-        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_HP_mutex_256_padding()
-    {
-        struct queue_traits : public
-            cds::intrusive::segmented_queue::make_traits <
-                cds::intrusive::opt::disposer< Disposer >
-                ,cds::opt::lock_type < std::mutex >
-                ,cds::opt::padding< 256 >
-            > ::type
-        {};
-        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_HP_shuffle_256_padding()
-    {
-        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item,
-            cds::intrusive::segmented_queue::make_traits<
-                cds::intrusive::opt::disposer< Disposer >
-                ,cds::opt::item_counter< cds::atomicity::item_counter >
-                , cds::opt::padding< 256 >
-                ,cds::opt::permutation_generator< cds::opt::v::random_shuffle_permutation<> >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_HP_stat_256_padding()
-    {
-        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item,
-            cds::intrusive::segmented_queue::make_traits<
-                cds::intrusive::opt::disposer< Disposer >
-                , cds::opt::padding< 256 >
-                ,cds::opt::item_counter< cds::atomicity::item_counter >
-                ,cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
-                ,cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_HP_cacheline_padding_bigdata()
-    {
-        struct queue_traits : public cds::intrusive::segmented_queue::traits
-        {
-            typedef Disposer disposer;
-            enum { padding = cds::opt::cache_line_padding | cds::opt::padding_tiny_data_only };
-        };
-        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, big_item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_HP_mutex_cacheline_padding_bigdata()
-    {
-        struct queue_traits : public
-            cds::intrusive::segmented_queue::make_traits <
-                cds::intrusive::opt::disposer< Disposer >
-                ,cds::opt::lock_type < std::mutex >
-                , cds::opt::padding< cds::opt::cache_line_padding | cds::opt::padding_tiny_data_only >
-            > ::type
-        {};
-        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, big_item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_HP_shuffle_cacheline_padding_bigdata()
-    {
-        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, big_item,
-            cds::intrusive::segmented_queue::make_traits<
-                cds::intrusive::opt::disposer< Disposer >
-                ,cds::opt::item_counter< cds::atomicity::item_counter >
-                , cds::opt::padding< cds::opt::cache_line_padding | cds::opt::padding_tiny_data_only >
-                ,cds::opt::permutation_generator< cds::opt::v::random_shuffle_permutation<> >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrIntrusiveSegmentedQueue::SegmQueue_HP_stat_cacheline_padding_bigdata()
-    {
-        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, big_item,
-            cds::intrusive::segmented_queue::make_traits<
-                cds::intrusive::opt::disposer< Disposer >
-                , cds::opt::padding< cds::opt::cache_line_padding | cds::opt::padding_tiny_data_only >
-                ,cds::opt::item_counter< cds::atomicity::item_counter >
-                ,cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
-                ,cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-} // namespace queue
diff --git a/tests/test-hdr/queue/hdr_intrusive_tsigas_cycle_queue.cpp b/tests/test-hdr/queue/hdr_intrusive_tsigas_cycle_queue.cpp
deleted file mode 100644 (file)
index f6b2a3f..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_intrusive_msqueue.h"
-#include <cds/intrusive/tsigas_cycle_queue.h>
-
-namespace queue {
-
-#define TEST(X)     void IntrusiveQueueHeaderTest::test_##X() { test2<X>(); }
-
-    namespace {
-        struct item {
-            int nVal;
-            int nDisposeCount;
-
-            item()
-                : nDisposeCount(0)
-            {}
-        };
-
-        struct traits_TsigasCycleQueue_static : public cds::intrusive::tsigas_queue::traits
-        {
-            typedef co::v::static_buffer< int, 1024 > buffer;
-            typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef ci::TsigasCycleQueue< item, traits_TsigasCycleQueue_static > TsigasCycleQueue_static;
-
-        struct traits_traits_TsigasCycleQueue_static_ic : public traits_TsigasCycleQueue_static
-        {
-            typedef cds::atomicity::item_counter item_counter;
-        };
-        typedef ci::TsigasCycleQueue< item, traits_traits_TsigasCycleQueue_static_ic > TsigasCycleQueue_static_ic;
-
-        class TsigasCycleQueue_dyn
-            : public ci::TsigasCycleQueue< item,
-                typename ci::tsigas_queue::make_traits<
-                    co::buffer< co::v::dynamic_buffer< int > >
-                    ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                >::type
-            >
-        {
-            typedef ci::TsigasCycleQueue< item,
-                typename ci::tsigas_queue::make_traits<
-                   co::buffer< co::v::dynamic_buffer< int > >
-                    , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                >::type
-            > base_class;
-        public:
-            TsigasCycleQueue_dyn()
-                : base_class( 1024 )
-            {}
-        };
-
-        class TsigasCycleQueue_dyn_ic
-            : public ci::TsigasCycleQueue< item,
-                typename ci::tsigas_queue::make_traits<
-                    co::buffer< co::v::dynamic_buffer< int > >
-                    ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                    ,co::item_counter< cds::atomicity::item_counter >
-                >::type
-            >
-        {
-            typedef ci::TsigasCycleQueue< item,
-                typename ci::tsigas_queue::make_traits<
-                    co::buffer< co::v::dynamic_buffer< int > >
-                    , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                    , co::item_counter< cds::atomicity::item_counter >
-                >::type
-            > base_class;
-        public:
-            TsigasCycleQueue_dyn_ic()
-                : base_class( 1024 )
-            {}
-        };
-    }
-
-    TEST(TsigasCycleQueue_static)
-    TEST(TsigasCycleQueue_static_ic)
-    TEST(TsigasCycleQueue_dyn)
-    TEST(TsigasCycleQueue_dyn_ic)
-
-} // namespace queue
diff --git a/tests/test-hdr/queue/hdr_intrusive_vyukovmpmc_cycle_queue.cpp b/tests/test-hdr/queue/hdr_intrusive_vyukovmpmc_cycle_queue.cpp
deleted file mode 100644 (file)
index 6bee4f0..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_intrusive_msqueue.h"
-#include <cds/intrusive/vyukov_mpmc_cycle_queue.h>
-
-namespace queue {
-
-#define TEST(X)     void IntrusiveQueueHeaderTest::test_##X() { test2<X>(); }
-
-    namespace {
-        struct item {
-            int nVal;
-            int nDisposeCount;
-
-            item()
-                : nDisposeCount(0)
-            {}
-        };
-
-        struct traits_VyukovMPMCCycleQueue_static : public ci::vyukov_queue::traits
-        {
-            typedef co::v::static_buffer< int, 1024 > buffer;
-            typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef ci::VyukovMPMCCycleQueue< item, traits_VyukovMPMCCycleQueue_static > VyukovMPMCCycleQueue_static;
-
-        struct traits_VyukovMPMCCycleQueue_static_ic : public traits_VyukovMPMCCycleQueue_static
-        {
-            typedef cds::atomicity::item_counter item_counter;
-        };
-        typedef ci::VyukovMPMCCycleQueue< item, traits_VyukovMPMCCycleQueue_static_ic > VyukovMPMCCycleQueue_static_ic;
-
-        struct traits_VyukovMPMCCycleQueue_dyn :
-            public ci::vyukov_queue::make_traits <
-                co::buffer< co::v::dynamic_buffer< int > >,
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-            >::type
-        {};
-        class VyukovMPMCCycleQueue_dyn
-            : public ci::VyukovMPMCCycleQueue< item, traits_VyukovMPMCCycleQueue_dyn >
-        {
-            typedef ci::VyukovMPMCCycleQueue< item, traits_VyukovMPMCCycleQueue_dyn > base_class;
-
-        public:
-            VyukovMPMCCycleQueue_dyn()
-                : base_class( 1024 )
-            {}
-        };
-
-        struct traits_VyukovMPMCCycleQueue_dyn_ic :
-            public ci::vyukov_queue::make_traits <
-                ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
-                , co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        class VyukovMPMCCycleQueue_dyn_ic
-            : public ci::VyukovMPMCCycleQueue< item, traits_VyukovMPMCCycleQueue_dyn_ic >
-        {
-            typedef ci::VyukovMPMCCycleQueue< item, traits_VyukovMPMCCycleQueue_dyn_ic > base_class;
-        public:
-            VyukovMPMCCycleQueue_dyn_ic()
-                : base_class( 1024 )
-            {}
-        };
-    }
-
-    TEST(VyukovMPMCCycleQueue_static)
-    TEST(VyukovMPMCCycleQueue_static_ic)
-    TEST(VyukovMPMCCycleQueue_dyn)
-    TEST(VyukovMPMCCycleQueue_dyn_ic)
-
-} // namespace queue
diff --git a/tests/test-hdr/queue/hdr_moirqueue_dhp.cpp b/tests/test-hdr/queue/hdr_moirqueue_dhp.cpp
deleted file mode 100644 (file)
index aae052c..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include <cds/gc/dhp.h>
-#include <cds/container/moir_queue.h>
-#include "queue/hdr_queue.h"
-
-namespace queue {
-
-    void HdrTestQueue::MoirQueue_DHP()
-    {
-        typedef cds::container::MoirQueue< cds::gc::DHP, int > test_queue;
-        test_no_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MoirQueue_DHP_Counted()
-    {
-        typedef cds::container::MoirQueue < cds::gc::DHP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::item_counter < cds::atomicity::item_counter >
-            > ::type
-        > test_queue;
-
-        test_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MoirQueue_DHP_relax()
-    {
-        typedef cds::container::MoirQueue < cds::gc::DHP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::memory_model < cds::opt::v::relaxed_ordering >
-            > ::type
-        > test_queue;
-
-        test_no_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MoirQueue_DHP_Counted_relax()
-    {
-        typedef cds::container::MoirQueue < cds::gc::DHP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                , cds::opt::memory_model < cds::opt::v::relaxed_ordering >
-            > ::type
-        > test_queue;
-
-        test_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MoirQueue_DHP_seqcst()
-    {
-        typedef cds::container::MoirQueue < cds::gc::DHP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::memory_model < cds::opt::v::sequential_consistent >
-            > ::type
-        > test_queue;
-
-        test_no_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MoirQueue_DHP_Counted_seqcst()
-    {
-        typedef cds::container::MoirQueue < cds::gc::DHP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                , cds::opt::memory_model < cds::opt::v::sequential_consistent >
-            > ::type
-        > test_queue;
-
-        test_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MoirQueue_DHP_relax_align()
-    {
-        typedef cds::container::MoirQueue < cds::gc::DHP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::memory_model< cds::opt::v::relaxed_ordering>
-                , cds::opt::padding < 16 >
-            > ::type
-        > test_queue;
-
-        test_no_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MoirQueue_DHP_Counted_relax_align()
-    {
-        typedef cds::container::MoirQueue < cds::gc::DHP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                , cds::opt::memory_model< cds::opt::v::relaxed_ordering>
-                , cds::opt::padding < 32 >
-            >::type
-        > test_queue;
-
-        test_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MoirQueue_DHP_seqcst_align()
-    {
-        typedef cds::container::MoirQueue < cds::gc::DHP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::memory_model< cds::opt::v::sequential_consistent>
-                ,cds::opt::padding < cds::opt::no_special_padding >
-            > ::type
-        > test_queue;
-
-        test_no_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MoirQueue_DHP_Counted_seqcst_align()
-    {
-        typedef cds::container::MoirQueue < cds::gc::DHP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                , cds::opt::memory_model< cds::opt::v::sequential_consistent>
-                , cds::opt::padding < cds::opt::cache_line_padding >
-            > ::type
-        > test_queue;
-        test_ic< test_queue >();
-    }
-}   // namespace queue
diff --git a/tests/test-hdr/queue/hdr_moirqueue_hp.cpp b/tests/test-hdr/queue/hdr_moirqueue_hp.cpp
deleted file mode 100644 (file)
index 2e40806..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include <cds/gc/hp.h>
-#include <cds/container/moir_queue.h>
-
-#include "queue/hdr_queue.h"
-
-namespace queue {
-
-    void HdrTestQueue::MoirQueue_HP()
-    {
-        typedef cds::container::MoirQueue< cds::gc::HP, int > test_queue;
-        test_no_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MoirQueue_HP_Counted()
-    {
-        typedef cds::container::MoirQueue < cds::gc::HP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::item_counter < cds::atomicity::item_counter >
-            > ::type
-        > test_queue;
-
-        test_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MoirQueue_HP_relax()
-    {
-        typedef cds::container::MoirQueue < cds::gc::HP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::memory_model < cds::opt::v::relaxed_ordering >
-            > ::type
-        > test_queue;
-
-        test_no_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MoirQueue_HP_Counted_relax()
-    {
-        typedef cds::container::MoirQueue < cds::gc::HP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                , cds::opt::memory_model < cds::opt::v::relaxed_ordering >
-            > ::type
-        > test_queue;
-
-        test_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MoirQueue_HP_seqcst()
-    {
-        typedef cds::container::MoirQueue < cds::gc::HP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::memory_model < cds::opt::v::sequential_consistent >
-            > ::type
-        > test_queue;
-
-        test_no_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MoirQueue_HP_Counted_seqcst()
-    {
-        typedef cds::container::MoirQueue < cds::gc::HP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                , cds::opt::memory_model < cds::opt::v::sequential_consistent >
-            > ::type
-        > test_queue;
-
-        test_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MoirQueue_HP_relax_align()
-    {
-        typedef cds::container::MoirQueue < cds::gc::HP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::memory_model< cds::opt::v::relaxed_ordering>
-                , cds::opt::padding < 16 >
-            > ::type
-        > test_queue;
-
-        test_no_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MoirQueue_HP_Counted_relax_align()
-    {
-        typedef cds::container::MoirQueue < cds::gc::HP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                , cds::opt::memory_model< cds::opt::v::relaxed_ordering>
-                , cds::opt::padding < 32 >
-            >::type
-        > test_queue;
-
-        test_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MoirQueue_HP_seqcst_align()
-    {
-        typedef cds::container::MoirQueue < cds::gc::HP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::memory_model< cds::opt::v::sequential_consistent>
-                ,cds::opt::padding < cds::opt::no_special_padding >
-            > ::type
-        > test_queue;
-
-        test_no_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MoirQueue_HP_Counted_seqcst_align()
-    {
-        typedef cds::container::MoirQueue < cds::gc::HP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                , cds::opt::memory_model< cds::opt::v::sequential_consistent>
-                , cds::opt::padding < cds::opt::cache_line_padding >
-            > ::type
-        > test_queue;
-        test_ic< test_queue >();
-    }
-}   // namespace queue
diff --git a/tests/test-hdr/queue/hdr_msqueue_dhp.cpp b/tests/test-hdr/queue/hdr_msqueue_dhp.cpp
deleted file mode 100644 (file)
index fc67758..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include <cds/gc/dhp.h>
-#include <cds/container/msqueue.h>
-
-#include "queue/hdr_queue.h"
-
-namespace queue {
-
-    void HdrTestQueue::MSQueue_DHP()
-    {
-        typedef cds::container::MSQueue< cds::gc::DHP, int > test_queue;
-        test_no_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MSQueue_DHP_Counted()
-    {
-        typedef cds::container::MSQueue < cds::gc::DHP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::item_counter < cds::atomicity::item_counter >
-            > ::type
-        > test_queue;
-
-        test_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MSQueue_DHP_relax()
-    {
-        typedef cds::container::MSQueue < cds::gc::DHP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::memory_model < cds::opt::v::relaxed_ordering >
-            > ::type
-        > test_queue;
-
-        test_no_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MSQueue_DHP_Counted_relax()
-    {
-        typedef cds::container::MSQueue < cds::gc::DHP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                , cds::opt::memory_model < cds::opt::v::relaxed_ordering >
-            > ::type
-        > test_queue;
-
-        test_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MSQueue_DHP_seqcst()
-    {
-        typedef cds::container::MSQueue < cds::gc::DHP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::memory_model < cds::opt::v::sequential_consistent >
-            > ::type
-        > test_queue;
-
-        test_no_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MSQueue_DHP_Counted_seqcst()
-    {
-        typedef cds::container::MSQueue < cds::gc::DHP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                , cds::opt::memory_model < cds::opt::v::sequential_consistent >
-            > ::type
-        > test_queue;
-
-        test_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MSQueue_DHP_relax_align()
-    {
-        typedef cds::container::MSQueue < cds::gc::DHP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::memory_model< cds::opt::v::relaxed_ordering>
-                , cds::opt::padding < 16 >
-            > ::type
-        > test_queue;
-
-        test_no_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MSQueue_DHP_Counted_relax_align()
-    {
-        typedef cds::container::MSQueue < cds::gc::DHP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                , cds::opt::memory_model< cds::opt::v::relaxed_ordering>
-                , cds::opt::padding < 32 >
-            >::type
-        > test_queue;
-
-        test_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MSQueue_DHP_seqcst_align()
-    {
-        typedef cds::container::MSQueue < cds::gc::DHP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::memory_model< cds::opt::v::sequential_consistent>
-                ,cds::opt::padding < cds::opt::no_special_padding >
-            > ::type
-        > test_queue;
-
-        test_no_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MSQueue_DHP_Counted_seqcst_align()
-    {
-        typedef cds::container::MSQueue < cds::gc::DHP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                , cds::opt::memory_model< cds::opt::v::sequential_consistent>
-                , cds::opt::padding < cds::opt::cache_line_padding >
-            > ::type
-        > test_queue;
-        test_ic< test_queue >();
-    }
-}   // namespace queue
diff --git a/tests/test-hdr/queue/hdr_msqueue_hp.cpp b/tests/test-hdr/queue/hdr_msqueue_hp.cpp
deleted file mode 100644 (file)
index e36d3b8..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include <cds/gc/hp.h>
-#include <cds/container/msqueue.h>
-
-#include "queue/hdr_queue.h"
-
-namespace queue {
-
-    void HdrTestQueue::MSQueue_HP()
-    {
-        typedef cds::container::MSQueue< cds::gc::HP, int > test_queue;
-        test_no_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MSQueue_HP_Counted()
-    {
-        typedef cds::container::MSQueue < cds::gc::HP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::item_counter < cds::atomicity::item_counter >
-            > ::type
-        > test_queue;
-
-        test_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MSQueue_HP_relax()
-    {
-        typedef cds::container::MSQueue < cds::gc::HP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::memory_model < cds::opt::v::relaxed_ordering >
-            > ::type
-        > test_queue;
-
-        test_no_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MSQueue_HP_Counted_relax()
-    {
-        typedef cds::container::MSQueue < cds::gc::HP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                , cds::opt::memory_model < cds::opt::v::relaxed_ordering >
-            > ::type
-        > test_queue;
-
-        test_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MSQueue_HP_seqcst()
-    {
-        typedef cds::container::MSQueue < cds::gc::HP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::memory_model < cds::opt::v::sequential_consistent >
-            > ::type
-        > test_queue;
-
-        test_no_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MSQueue_HP_Counted_seqcst()
-    {
-        typedef cds::container::MSQueue < cds::gc::HP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                , cds::opt::memory_model < cds::opt::v::sequential_consistent >
-            > ::type
-        > test_queue;
-
-        test_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MSQueue_HP_relax_align()
-    {
-        typedef cds::container::MSQueue < cds::gc::HP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::memory_model< cds::opt::v::relaxed_ordering>
-                , cds::opt::padding < 16 >
-            > ::type
-        > test_queue;
-
-        test_no_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MSQueue_HP_Counted_relax_align()
-    {
-        typedef cds::container::MSQueue < cds::gc::HP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                , cds::opt::memory_model< cds::opt::v::relaxed_ordering>
-                , cds::opt::padding < 32 >
-            >::type
-        > test_queue;
-
-        test_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MSQueue_HP_seqcst_align()
-    {
-        typedef cds::container::MSQueue < cds::gc::HP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::memory_model< cds::opt::v::sequential_consistent>
-                ,cds::opt::padding < cds::opt::no_special_padding >
-            > ::type
-        > test_queue;
-
-        test_no_ic< test_queue >();
-    }
-
-    void HdrTestQueue::MSQueue_HP_Counted_seqcst_align()
-    {
-        typedef cds::container::MSQueue < cds::gc::HP, int,
-            typename cds::container::msqueue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                , cds::opt::memory_model< cds::opt::v::sequential_consistent>
-                , cds::opt::padding < cds::opt::cache_line_padding >
-            > ::type
-        > test_queue;
-        test_ic< test_queue >();
-    }
-}   // namespace queue
diff --git a/tests/test-hdr/queue/hdr_optimistic_dhp.cpp b/tests/test-hdr/queue/hdr_optimistic_dhp.cpp
deleted file mode 100644 (file)
index 60def33..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include <cds/container/optimistic_queue.h>
-#include <cds/gc/dhp.h>
-
-#include "queue/hdr_queue.h"
-
-namespace queue {
-
-    void HdrTestQueue::OptimisticQueue_DHP()
-    {
-        test_no_ic<cds::container::OptimisticQueue< cds::gc::DHP, int > >();
-    }
-
-    void HdrTestQueue::OptimisticQueue_DHP_Counted()
-    {
-        struct queue_traits : public cds::container::optimistic_queue::traits
-        {
-            typedef cds::atomicity::item_counter item_counter;
-        };
-        test_ic<cds::container::OptimisticQueue< cds::gc::DHP, int, queue_traits > >();
-    }
-
-    void HdrTestQueue::OptimisticQueue_DHP_relax()
-    {
-        struct queue_traits : public cds::container::optimistic_queue::traits
-        {
-            typedef cds::opt::v::relaxed_ordering memory_model;
-        };
-        test_no_ic<cds::container::OptimisticQueue< cds::gc::DHP, int, queue_traits > >();
-    }
-
-    void HdrTestQueue::OptimisticQueue_DHP_Counted_relax()
-    {
-        struct queue_traits : public cds::container::optimistic_queue::traits
-        {
-            typedef cds::atomicity::item_counter item_counter;
-            typedef cds::opt::v::relaxed_ordering memory_model;
-        };
-        test_ic <
-            cds::container::OptimisticQueue< cds::gc::DHP, int, queue_traits > >();
-    }
-
-    void HdrTestQueue::OptimisticQueue_DHP_seqcst()
-    {
-        test_no_ic<
-            cds::container::OptimisticQueue< cds::gc::DHP, int,
-                typename cds::container::optimistic_queue::make_traits<
-                    cds::opt::memory_model< cds::opt::v::sequential_consistent>
-                >::type
-            >
-        >();
-    }
-
-    void HdrTestQueue::OptimisticQueue_DHP_Counted_seqcst()
-    {
-        test_ic<
-            cds::container::OptimisticQueue< cds::gc::DHP, int,
-                typename cds::container::optimistic_queue::make_traits<
-                    cds::opt::item_counter< cds::atomicity::item_counter >
-                    ,cds::opt::memory_model< cds::opt::v::sequential_consistent>
-                >::type
-            >
-        >();
-    }
-
-    void HdrTestQueue::OptimisticQueue_DHP_relax_align()
-    {
-        test_no_ic<
-            cds::container::OptimisticQueue< cds::gc::DHP, int,
-                typename cds::container::optimistic_queue::make_traits<
-                    cds::opt::memory_model< cds::opt::v::relaxed_ordering>
-                    ,cds::opt::padding< 16 >
-                >::type
-            >
-        >();
-    }
-
-    void HdrTestQueue::OptimisticQueue_DHP_Counted_relax_align()
-    {
-        test_ic<
-            cds::container::OptimisticQueue< cds::gc::DHP, int,
-                typename cds::container::optimistic_queue::make_traits<
-                    cds::opt::item_counter< cds::atomicity::item_counter >
-                    ,cds::opt::memory_model< cds::opt::v::relaxed_ordering>
-                    ,cds::opt::padding< 32 >
-                >::type
-            >
-        >();
-    }
-
-    void HdrTestQueue::OptimisticQueue_DHP_seqcst_align()
-    {
-        test_no_ic<
-            cds::container::OptimisticQueue< cds::gc::DHP, int,
-                typename cds::container::optimistic_queue::make_traits<
-                    cds::opt::memory_model< cds::opt::v::sequential_consistent>
-                    ,cds::opt::padding< cds::opt::no_special_padding >
-                >::type
-            >
-        >();
-    }
-
-    void HdrTestQueue::OptimisticQueue_DHP_Counted_seqcst_align()
-    {
-        test_ic<
-            cds::container::OptimisticQueue< cds::gc::DHP, int,
-                typename cds::container::optimistic_queue::make_traits<
-                    cds::opt::item_counter< cds::atomicity::item_counter >
-                    ,cds::opt::memory_model< cds::opt::v::sequential_consistent>
-                    ,cds::opt::padding< cds::opt::cache_line_padding >
-                >::type
-            >
-        >();
-    }
-
-}   // namespace queue
diff --git a/tests/test-hdr/queue/hdr_optimistic_hp.cpp b/tests/test-hdr/queue/hdr_optimistic_hp.cpp
deleted file mode 100644 (file)
index 6bf354c..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include <cds/container/optimistic_queue.h>
-#include <cds/gc/hp.h>
-
-#include "queue/hdr_queue.h"
-
-namespace queue {
-
-    void HdrTestQueue::OptimisticQueue_HP()
-    {
-        test_no_ic<cds::container::OptimisticQueue< cds::gc::HP, int > >();
-    }
-
-    void HdrTestQueue::OptimisticQueue_HP_Counted()
-    {
-        struct queue_traits : public cds::container::optimistic_queue::traits
-        {
-            typedef cds::atomicity::item_counter item_counter;
-        };
-        test_ic<cds::container::OptimisticQueue< cds::gc::HP, int, queue_traits > >();
-    }
-
-    void HdrTestQueue::OptimisticQueue_HP_relax()
-    {
-        struct queue_traits : public cds::container::optimistic_queue::traits
-        {
-            typedef cds::opt::v::relaxed_ordering memory_model;
-        };
-        test_no_ic<cds::container::OptimisticQueue< cds::gc::HP, int, queue_traits > >();
-    }
-
-    void HdrTestQueue::OptimisticQueue_HP_Counted_relax()
-    {
-        struct queue_traits : public cds::container::optimistic_queue::traits
-        {
-            typedef cds::atomicity::item_counter item_counter;
-            typedef cds::opt::v::relaxed_ordering memory_model;
-        };
-        test_ic <
-            cds::container::OptimisticQueue< cds::gc::HP, int, queue_traits > >();
-    }
-
-    void HdrTestQueue::OptimisticQueue_HP_seqcst()
-    {
-        test_no_ic<
-            cds::container::OptimisticQueue< cds::gc::HP, int,
-                typename cds::container::optimistic_queue::make_traits<
-                    cds::opt::memory_model< cds::opt::v::sequential_consistent>
-                >::type
-            >
-        >();
-    }
-
-    void HdrTestQueue::OptimisticQueue_HP_Counted_seqcst()
-    {
-        test_ic<
-            cds::container::OptimisticQueue< cds::gc::HP, int,
-                typename cds::container::optimistic_queue::make_traits<
-                    cds::opt::item_counter< cds::atomicity::item_counter >
-                    ,cds::opt::memory_model< cds::opt::v::sequential_consistent>
-                >::type
-            >
-        >();
-    }
-
-    void HdrTestQueue::OptimisticQueue_HP_relax_align()
-    {
-        test_no_ic<
-            cds::container::OptimisticQueue< cds::gc::HP, int,
-                typename cds::container::optimistic_queue::make_traits<
-                    cds::opt::memory_model< cds::opt::v::relaxed_ordering>
-                    ,cds::opt::padding< 16 >
-                >::type
-            >
-        >();
-    }
-
-    void HdrTestQueue::OptimisticQueue_HP_Counted_relax_align()
-    {
-        test_ic<
-            cds::container::OptimisticQueue< cds::gc::HP, int,
-                typename cds::container::optimistic_queue::make_traits<
-                    cds::opt::item_counter< cds::atomicity::item_counter >
-                    ,cds::opt::memory_model< cds::opt::v::relaxed_ordering>
-                    ,cds::opt::padding< 32 >
-                >::type
-            >
-        >();
-    }
-
-    void HdrTestQueue::OptimisticQueue_HP_seqcst_align()
-    {
-        test_no_ic<
-            cds::container::OptimisticQueue< cds::gc::HP, int,
-                typename cds::container::optimistic_queue::make_traits<
-                    cds::opt::memory_model< cds::opt::v::sequential_consistent>
-                    ,cds::opt::padding< cds::opt::no_special_padding >
-                >::type
-            >
-        >();
-    }
-
-    void HdrTestQueue::OptimisticQueue_HP_Counted_seqcst_align()
-    {
-        test_ic<
-            cds::container::OptimisticQueue< cds::gc::HP, int,
-                typename cds::container::optimistic_queue::make_traits<
-                    cds::opt::item_counter< cds::atomicity::item_counter >
-                    ,cds::opt::memory_model< cds::opt::v::sequential_consistent>
-                    ,cds::opt::padding< cds::opt::cache_line_padding >
-                >::type
-            >
-        >();
-    }
-
-}   // namespace queue
diff --git a/tests/test-hdr/queue/hdr_queue.h b/tests/test-hdr/queue/hdr_queue.h
deleted file mode 100644 (file)
index bc8b8ec..0000000
+++ /dev/null
@@ -1,492 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_QUEUE_H
-#define CDSTEST_HDR_QUEUE_H
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/details/defs.h>
-
-namespace queue {
-
-    //
-    // Test queue operation in single thread mode
-    //
-    class HdrTestQueue: public CppUnitMini::TestCase
-    {
-    protected:
-        template <class Queue>
-        void test_no_ic()
-        {
-            Queue   q;
-            test_with( q );
-            test_emplace( q );
-        }
-
-        template <class Queue>
-        void test_with( Queue& q )
-        {
-            int     it;
-            int     nPrev;
-
-            // push/pop
-            for ( size_t i = 0; i < 3; ++i ) {
-                CPPUNIT_ASSERT( q.empty() );
-#ifndef _DEBUG
-                CPPUNIT_ASSERT( q.size() == 0 );
-#endif
-                CPPUNIT_ASSERT( q.enqueue( 1 ) );
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_ASSERT( q.push( 10 ) );
-                CPPUNIT_ASSERT( !q.empty() );
-#ifndef _DEBUG
-                CPPUNIT_ASSERT( q.size() == 0 )     ;   // no queue's item counter!
-#endif
-
-                it = -1;
-                CPPUNIT_ASSERT( q.pop( it ) );
-                CPPUNIT_ASSERT( it == 1 );
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_ASSERT( q.dequeue( it ) );
-                CPPUNIT_ASSERT( it == 10 );
-#ifndef _DEBUG
-                CPPUNIT_ASSERT( q.size() == 0 );
-#endif
-                CPPUNIT_ASSERT( q.empty() );
-                it += 2009;
-                nPrev = it;
-                CPPUNIT_ASSERT( !q.dequeue( it ) );
-                CPPUNIT_ASSERT( it == nPrev )       ;   // it must not be changed!
-            }
-
-            // push_with/pop_with
-            for ( size_t i = 0; i < 3; ++i ) {
-                CPPUNIT_ASSERT( q.empty() );
-#ifndef _DEBUG
-                CPPUNIT_ASSERT( q.size() == 0 );
-#endif
-                CPPUNIT_ASSERT( q.enqueue_with( []( int& dest ) { dest = 1; } ));
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_ASSERT( q.push_with( []( int& dest ) { dest = 10; } ));
-                CPPUNIT_ASSERT( !q.empty() );
-#ifndef _DEBUG
-                CPPUNIT_ASSERT( q.size() == 0 );   // no queue's item counter!
-#endif
-
-                it = -1;
-                CPPUNIT_ASSERT( q.pop_with( [&it]( int src ) { it = src; } ));
-                CPPUNIT_ASSERT( it == 1 );
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_ASSERT( q.dequeue_with( [&it]( int src ) { it = src; } ));
-                CPPUNIT_ASSERT( it == 10 );
-#ifndef _DEBUG
-                CPPUNIT_ASSERT( q.size() == 0 );
-#endif
-                CPPUNIT_ASSERT( q.empty() );
-                it += 2009;
-                nPrev = it;
-                CPPUNIT_ASSERT( !q.dequeue_with( [&it]( int src ) { it = src; } ));
-                CPPUNIT_ASSERT( it == nPrev );   // it must not be changed!
-            }
-        }
-
-        template <class Queue>
-        void test_emplace( Queue& q )
-        {
-            int     it;
-            for ( size_t i = 0; i < 3; ++i ) {
-                CPPUNIT_ASSERT( q.emplace( static_cast<int>( i * 42 )) );
-                CPPUNIT_ASSERT( !q.empty() );
-                it = -1;
-                CPPUNIT_ASSERT( q.pop( it ));
-                CPPUNIT_ASSERT( it == static_cast<int>( i * 42 ));
-                CPPUNIT_ASSERT( q.empty() );
-            }
-        }
-
-        template <class Queue>
-        void test_ic()
-        {
-            Queue   q;
-            test_ic_with( q );
-            test_emplace_ic( q );
-        }
-
-        template <class Queue>
-        void testFCQueue()
-        {
-            Queue   q;
-            test_ic_with( q );
-        }
-
-        template <class Queue>
-        void test_ic_with( Queue& q )
-        {
-            int     it;
-            int     nPrev;
-
-            // push/pop
-            for ( size_t i = 0; i < 3; ++i ) {
-                CPPUNIT_ASSERT( q.empty() );
-                CPPUNIT_ASSERT( q.size() == 0 );
-                CPPUNIT_ASSERT( q.enqueue( 1 ) );
-                CPPUNIT_ASSERT( q.size() == 1 );
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_ASSERT( q.push( 10 ) );
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_ASSERT( q.size() == 2 );
-
-                it = -1;
-                CPPUNIT_ASSERT( q.pop( it ) );
-                CPPUNIT_ASSERT( it == 1 );
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_ASSERT( q.size() == 1 );
-                CPPUNIT_ASSERT( q.dequeue( it ) );
-                CPPUNIT_ASSERT( it == 10 );
-                CPPUNIT_ASSERT( q.size() == 0 );
-                CPPUNIT_ASSERT( q.empty() );
-                CPPUNIT_ASSERT( q.size() == 0 );
-                it += 2009;
-                nPrev = it;
-                CPPUNIT_ASSERT( !q.dequeue( it ) );
-                CPPUNIT_ASSERT( it == nPrev )       ;   // it must not be changed!
-
-                CPPUNIT_ASSERT( q.empty() );
-                CPPUNIT_ASSERT( q.size() == 0 );
-            }
-
-            // push_with/pop_with
-            for ( size_t i = 0; i < 3; ++i ) {
-                CPPUNIT_ASSERT( q.empty() );
-                CPPUNIT_ASSERT( q.size() == 0 );
-                CPPUNIT_ASSERT( q.enqueue_with( []( int& dest ) { dest = 1; } ) );
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_ASSERT( q.size() == 1 );
-                CPPUNIT_ASSERT( q.push_with( []( int& dest ) { dest = 10; } ) );
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_ASSERT( q.size() == 2 );
-
-                it = -1;
-                CPPUNIT_ASSERT( q.pop_with( [&it]( int src ) { it = src; } ) );
-                CPPUNIT_ASSERT( it == 1 );
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_ASSERT( q.size() == 1 );
-                CPPUNIT_ASSERT( q.dequeue_with( [&it]( int src ) { it = src; } ) );
-                CPPUNIT_ASSERT( it == 10 );
-                CPPUNIT_ASSERT( q.size() == 0 );
-                CPPUNIT_ASSERT( q.empty() );
-                it += 2009;
-                nPrev = it;
-                CPPUNIT_ASSERT( !q.dequeue_with( [&it]( int src ) { it = src; } ) );
-                CPPUNIT_ASSERT( it == nPrev );   // it must not be changed!
-
-                CPPUNIT_ASSERT( q.size() == 0 );
-                CPPUNIT_ASSERT( q.empty() );
-            }
-        }
-
-        template <class Queue>
-        void test_emplace_ic( Queue& q )
-        {
-            int     it = 0;
-            for ( size_t i = 0; i < 3; ++i ) {
-                CPPUNIT_ASSERT( q.emplace( (int) i * 10 ) );
-                CPPUNIT_ASSERT( !q.empty() );
-                CPPUNIT_ASSERT( q.size() == 1 );
-                CPPUNIT_ASSERT( q.pop( it ));
-                CPPUNIT_ASSERT( it == (int) i * 10 );
-                CPPUNIT_ASSERT( q.empty() );
-                CPPUNIT_ASSERT( q.size() == 0 );
-            }
-        }
-
-        template <class Queue>
-        void test_bounded_no_ic()
-        {
-            Queue   q;
-            test_with( q );
-            test_emplace( q );
-
-            CPPUNIT_ASSERT( q.empty() );
-            size_t nCapacity = q.capacity();
-            for ( size_t i = 0; i < nCapacity; ++i ) {
-                CPPUNIT_CHECK_EX( q.push( static_cast<int>(i) ), "capacity=" << nCapacity << ", i=" << i );
-            }
-            // The queue is full
-            CPPUNIT_CHECK( !q.empty() );
-            CPPUNIT_ASSERT( !q.push_with( [nCapacity]( int& itm ) { itm = static_cast<int>(nCapacity); } ) );
-            int n = -1;
-            CPPUNIT_CHECK( q.pop(n) );
-            CPPUNIT_CHECK( n == 0 );
-            CPPUNIT_ASSERT( q.push( static_cast<int>(nCapacity) ) );
-            CPPUNIT_ASSERT( !q.push( static_cast<int>(nCapacity) ) );
-        }
-
-        template <class Queue>
-        void test_bounded_ic()
-        {
-            Queue   q;
-            test_ic_with( q );
-            test_emplace_ic( q );
-
-            CPPUNIT_ASSERT( q.empty() );
-            size_t nCapacity = q.capacity();
-            for ( size_t i = 0; i < nCapacity; ++i ) {
-                CPPUNIT_CHECK_EX( q.push( static_cast<int>(i) ), "capacity=" << nCapacity << ", i=" << i );
-            }
-            // The queue is full
-            CPPUNIT_CHECK( !q.empty() );
-            CPPUNIT_CHECK( q.size() == nCapacity );
-            CPPUNIT_ASSERT( !q.push_with( [nCapacity]( int& itm ) { itm = static_cast<int>(nCapacity); } ));
-            int n = -1;
-            CPPUNIT_CHECK( q.pop( n ) );
-            CPPUNIT_CHECK( n == 0 );
-            CPPUNIT_ASSERT( q.push( static_cast<int>(nCapacity) ) );
-            CPPUNIT_CHECK( q.size() == nCapacity );
-            CPPUNIT_ASSERT( !q.push( static_cast<int>(nCapacity) ) );
-            CPPUNIT_CHECK( q.size() == nCapacity );
-        }
-
-    public:
-        void MSQueue_HP();
-        void MSQueue_HP_relax();
-        void MSQueue_HP_seqcst();
-        void MSQueue_HP_relax_align();
-        void MSQueue_HP_seqcst_align();
-        void MSQueue_HP_Counted();
-        void MSQueue_HP_Counted_relax();
-        void MSQueue_HP_Counted_seqcst();
-        void MSQueue_HP_Counted_relax_align();
-        void MSQueue_HP_Counted_seqcst_align();
-
-        void MSQueue_DHP();
-        void MSQueue_DHP_relax();
-        void MSQueue_DHP_seqcst();
-        void MSQueue_DHP_relax_align();
-        void MSQueue_DHP_seqcst_align();
-        void MSQueue_DHP_Counted();
-        void MSQueue_DHP_Counted_relax();
-        void MSQueue_DHP_Counted_seqcst();
-        void MSQueue_DHP_Counted_relax_align();
-        void MSQueue_DHP_Counted_seqcst_align();
-
-        void MoirQueue_HP();
-        void MoirQueue_HP_relax();
-        void MoirQueue_HP_seqcst();
-        void MoirQueue_HP_relax_align();
-        void MoirQueue_HP_seqcst_align();
-        void MoirQueue_HP_Counted();
-        void MoirQueue_HP_Counted_relax();
-        void MoirQueue_HP_Counted_seqcst();
-        void MoirQueue_HP_Counted_relax_align();
-        void MoirQueue_HP_Counted_seqcst_align();
-
-        void MoirQueue_DHP();
-        void MoirQueue_DHP_relax();
-        void MoirQueue_DHP_seqcst();
-        void MoirQueue_DHP_relax_align();
-        void MoirQueue_DHP_seqcst_align();
-        void MoirQueue_DHP_Counted();
-        void MoirQueue_DHP_Counted_relax();
-        void MoirQueue_DHP_Counted_seqcst();
-        void MoirQueue_DHP_Counted_relax_align();
-        void MoirQueue_DHP_Counted_seqcst_align();
-
-        void OptimisticQueue_HP();
-        void OptimisticQueue_HP_relax();
-        void OptimisticQueue_HP_seqcst();
-        void OptimisticQueue_HP_relax_align();
-        void OptimisticQueue_HP_seqcst_align();
-        void OptimisticQueue_HP_Counted();
-        void OptimisticQueue_HP_Counted_relax();
-        void OptimisticQueue_HP_Counted_seqcst();
-        void OptimisticQueue_HP_Counted_relax_align();
-        void OptimisticQueue_HP_Counted_seqcst_align();
-
-        void OptimisticQueue_DHP();
-        void OptimisticQueue_DHP_relax();
-        void OptimisticQueue_DHP_seqcst();
-        void OptimisticQueue_DHP_relax_align();
-        void OptimisticQueue_DHP_seqcst_align();
-        void OptimisticQueue_DHP_Counted();
-        void OptimisticQueue_DHP_Counted_relax();
-        void OptimisticQueue_DHP_Counted_seqcst();
-        void OptimisticQueue_DHP_Counted_relax_align();
-        void OptimisticQueue_DHP_Counted_seqcst_align();
-
-        void BasketQueue_HP();
-        void BasketQueue_HP_relax();
-        void BasketQueue_HP_seqcst();
-        void BasketQueue_HP_relax_align();
-        void BasketQueue_HP_seqcst_align();
-        void BasketQueue_HP_Counted();
-        void BasketQueue_HP_Counted_relax();
-        void BasketQueue_HP_Counted_seqcst();
-        void BasketQueue_HP_Counted_relax_align();
-        void BasketQueue_HP_Counted_seqcst_align();
-
-        void BasketQueue_DHP();
-        void BasketQueue_DHP_relax();
-        void BasketQueue_DHP_seqcst();
-        void BasketQueue_DHP_relax_align();
-        void BasketQueue_DHP_seqcst_align();
-        void BasketQueue_DHP_Counted();
-        void BasketQueue_DHP_Counted_relax();
-        void BasketQueue_DHP_Counted_seqcst();
-        void BasketQueue_DHP_Counted_relax_align();
-        void BasketQueue_DHP_Counted_seqcst_align();
-
-        void RWQueue_default();
-        void RWQueue_mutex();
-        void RWQueue_ic();
-        void RWQueue_ic_mutex();
-        void RWQueue_padding();
-
-        void TsigasCycleQueue_static();
-        void TsigasCycleQueue_static_ic();
-        void TsigasCycleQueue_dyn();
-        void TsigasCycleQueue_dyn_ic();
-
-        void VyukovMPMCCycleQueue_static();
-        void VyukovMPMCCycleQueue_static_ic();
-        void VyukovMPMCCycleQueue_dyn();
-        void VyukovMPMCCycleQueue_dyn_ic();
-
-        CPPUNIT_TEST_SUITE( HdrTestQueue )
-            CPPUNIT_TEST(MSQueue_HP);
-            CPPUNIT_TEST(MSQueue_HP_relax);
-            CPPUNIT_TEST(MSQueue_HP_seqcst);
-            CPPUNIT_TEST(MSQueue_HP_relax_align);
-            CPPUNIT_TEST(MSQueue_HP_seqcst_align);
-            CPPUNIT_TEST(MSQueue_HP_Counted);
-            CPPUNIT_TEST(MSQueue_HP_Counted_relax);
-            CPPUNIT_TEST(MSQueue_HP_Counted_seqcst);
-            CPPUNIT_TEST(MSQueue_HP_Counted_relax_align);
-            CPPUNIT_TEST(MSQueue_HP_Counted_seqcst_align);
-
-            CPPUNIT_TEST(MSQueue_DHP);
-            CPPUNIT_TEST(MSQueue_DHP_relax);
-            CPPUNIT_TEST(MSQueue_DHP_seqcst);
-            CPPUNIT_TEST(MSQueue_DHP_relax_align);
-            CPPUNIT_TEST(MSQueue_DHP_seqcst_align);
-            CPPUNIT_TEST(MSQueue_DHP_Counted);
-            CPPUNIT_TEST(MSQueue_DHP_Counted_relax);
-            CPPUNIT_TEST(MSQueue_DHP_Counted_seqcst);
-            CPPUNIT_TEST(MSQueue_DHP_Counted_relax_align);
-            CPPUNIT_TEST(MSQueue_DHP_Counted_seqcst_align);
-
-            CPPUNIT_TEST(MoirQueue_HP);
-            CPPUNIT_TEST(MoirQueue_HP_relax);
-            CPPUNIT_TEST(MoirQueue_HP_seqcst);
-            CPPUNIT_TEST(MoirQueue_HP_relax_align);
-            CPPUNIT_TEST(MoirQueue_HP_seqcst_align);
-            CPPUNIT_TEST(MoirQueue_HP_Counted);
-            CPPUNIT_TEST(MoirQueue_HP_Counted_relax);
-            CPPUNIT_TEST(MoirQueue_HP_Counted_seqcst);
-            CPPUNIT_TEST(MoirQueue_HP_Counted_relax_align);
-            CPPUNIT_TEST(MoirQueue_HP_Counted_seqcst_align);
-
-            CPPUNIT_TEST(MoirQueue_DHP);
-            CPPUNIT_TEST(MoirQueue_DHP_relax);
-            CPPUNIT_TEST(MoirQueue_DHP_seqcst);
-            CPPUNIT_TEST(MoirQueue_DHP_relax_align);
-            CPPUNIT_TEST(MoirQueue_DHP_seqcst_align);
-            CPPUNIT_TEST(MoirQueue_DHP_Counted);
-            CPPUNIT_TEST(MoirQueue_DHP_Counted_relax);
-            CPPUNIT_TEST(MoirQueue_DHP_Counted_seqcst);
-            CPPUNIT_TEST(MoirQueue_DHP_Counted_relax_align);
-            CPPUNIT_TEST(MoirQueue_DHP_Counted_seqcst_align);
-
-            CPPUNIT_TEST(OptimisticQueue_HP);
-            CPPUNIT_TEST(OptimisticQueue_HP_relax);
-            CPPUNIT_TEST(OptimisticQueue_HP_seqcst);
-            CPPUNIT_TEST(OptimisticQueue_HP_relax_align);
-            CPPUNIT_TEST(OptimisticQueue_HP_seqcst_align);
-            CPPUNIT_TEST(OptimisticQueue_HP_Counted);
-            CPPUNIT_TEST(OptimisticQueue_HP_Counted_relax);
-            CPPUNIT_TEST(OptimisticQueue_HP_Counted_seqcst);
-            CPPUNIT_TEST(OptimisticQueue_HP_Counted_relax_align);
-            CPPUNIT_TEST(OptimisticQueue_HP_Counted_seqcst_align);
-
-            CPPUNIT_TEST(OptimisticQueue_DHP);
-            CPPUNIT_TEST(OptimisticQueue_DHP_relax);
-            CPPUNIT_TEST(OptimisticQueue_DHP_seqcst);
-            CPPUNIT_TEST(OptimisticQueue_DHP_relax_align);
-            CPPUNIT_TEST(OptimisticQueue_DHP_seqcst_align);
-            CPPUNIT_TEST(OptimisticQueue_DHP_Counted);
-            CPPUNIT_TEST(OptimisticQueue_DHP_Counted_relax);
-            CPPUNIT_TEST(OptimisticQueue_DHP_Counted_seqcst);
-            CPPUNIT_TEST(OptimisticQueue_DHP_Counted_relax_align);
-            CPPUNIT_TEST(OptimisticQueue_DHP_Counted_seqcst_align);
-
-            CPPUNIT_TEST(BasketQueue_HP);
-            CPPUNIT_TEST(BasketQueue_HP_relax);
-            CPPUNIT_TEST(BasketQueue_HP_seqcst);
-            CPPUNIT_TEST(BasketQueue_HP_relax_align);
-            CPPUNIT_TEST(BasketQueue_HP_seqcst_align);
-            CPPUNIT_TEST(BasketQueue_HP_Counted);
-            CPPUNIT_TEST(BasketQueue_HP_Counted_relax);
-            CPPUNIT_TEST(BasketQueue_HP_Counted_seqcst);
-            CPPUNIT_TEST(BasketQueue_HP_Counted_relax_align);
-            CPPUNIT_TEST(BasketQueue_HP_Counted_seqcst_align);
-
-            CPPUNIT_TEST(BasketQueue_DHP);
-            CPPUNIT_TEST(BasketQueue_DHP_relax);
-            CPPUNIT_TEST(BasketQueue_DHP_seqcst);
-            CPPUNIT_TEST(BasketQueue_DHP_relax_align);
-            CPPUNIT_TEST(BasketQueue_DHP_seqcst_align);
-            CPPUNIT_TEST(BasketQueue_DHP_Counted);
-            CPPUNIT_TEST(BasketQueue_DHP_Counted_relax);
-            CPPUNIT_TEST(BasketQueue_DHP_Counted_seqcst);
-            CPPUNIT_TEST(BasketQueue_DHP_Counted_relax_align);
-            CPPUNIT_TEST(BasketQueue_DHP_Counted_seqcst_align);
-
-            CPPUNIT_TEST( TsigasCycleQueue_static )
-            CPPUNIT_TEST( TsigasCycleQueue_static_ic )
-            CPPUNIT_TEST( TsigasCycleQueue_dyn )
-            CPPUNIT_TEST( TsigasCycleQueue_dyn_ic )
-
-            CPPUNIT_TEST( VyukovMPMCCycleQueue_static )
-            CPPUNIT_TEST( VyukovMPMCCycleQueue_static_ic )
-            CPPUNIT_TEST( VyukovMPMCCycleQueue_dyn )
-            CPPUNIT_TEST( VyukovMPMCCycleQueue_dyn_ic )
-
-            CPPUNIT_TEST( RWQueue_default)
-            CPPUNIT_TEST( RWQueue_mutex )
-            CPPUNIT_TEST( RWQueue_ic )
-            CPPUNIT_TEST( RWQueue_ic_mutex )
-            CPPUNIT_TEST( RWQueue_padding )
-
-        CPPUNIT_TEST_SUITE_END();
-
-    };
-} // namespace queue
-
-#endif // #ifndef CDSTEST_HDR_QUEUE_H
diff --git a/tests/test-hdr/queue/hdr_queue_register.cpp b/tests/test-hdr/queue/hdr_queue_register.cpp
deleted file mode 100644 (file)
index 23105dd..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_intrusive_msqueue.h"
-#include "hdr_intrusive_segmented_queue.h"
-#include "hdr_queue.h"
-#include "hdr_fcqueue.h"
-#include "hdr_segmented_queue.h"
-
-CPPUNIT_TEST_SUITE_REGISTRATION_( queue::HdrTestQueue,               s_HdrTestQueue );
-CPPUNIT_TEST_SUITE_REGISTRATION_( queue::HdrFCQueue,           s_Queue_TestHeader ); //TODO must be removed after refactoring
-CPPUNIT_TEST_SUITE_REGISTRATION_( queue::HdrSegmentedQueue,          s_HdrSegmentedQueue );
-CPPUNIT_TEST_SUITE_REGISTRATION_( queue::IntrusiveQueueHeaderTest,   s_IntrusiveQueueHeaderTest );
-CPPUNIT_TEST_SUITE_REGISTRATION_( queue::HdrIntrusiveSegmentedQueue, s_HdrIntrusiveSegmentedQueue );
diff --git a/tests/test-hdr/queue/hdr_rwqueue.cpp b/tests/test-hdr/queue/hdr_rwqueue.cpp
deleted file mode 100644 (file)
index 62b5b6f..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include <cds/container/rwqueue.h>
-#include <mutex>
-
-#include "queue/hdr_queue.h"
-
-namespace queue {
-    void HdrTestQueue::RWQueue_default()
-    {
-        test_no_ic< cds::container::RWQueue< int > >();
-    }
-
-    void HdrTestQueue::RWQueue_mutex()
-    {
-        struct queue_traits : public cds::container::rwqueue::traits
-        {
-            typedef std::mutex lock_type;
-        };
-
-        test_no_ic< cds::container::RWQueue< int, queue_traits > >();
-    }
-
-    void HdrTestQueue::RWQueue_ic()
-    {
-        struct queue_traits : public cds::container::rwqueue::traits
-        {
-            typedef cds::atomicity::item_counter item_counter;
-        };
-
-        test_ic< cds::container::RWQueue< int, queue_traits > >();
-    }
-
-    void HdrTestQueue::RWQueue_ic_mutex()
-    {
-        struct queue_traits : public cds::container::rwqueue::traits
-        {
-            typedef cds::atomicity::item_counter item_counter;
-            typedef std::mutex lock_type;
-        };
-
-        test_ic< cds::container::RWQueue< int, queue_traits > >();
-    }
-
-    void HdrTestQueue::RWQueue_padding()
-    {
-        struct queue_traits : public cds::container::rwqueue::traits
-        {
-            enum { padding = 16 };
-        };
-
-        test_no_ic< cds::container::RWQueue< int, queue_traits > >();
-    }
-
-}
diff --git a/tests/test-hdr/queue/hdr_segmented_queue.h b/tests/test-hdr/queue/hdr_segmented_queue.h
deleted file mode 100644 (file)
index 5f9c0ce..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_QUEUE_SEGMENTED_QUEUE_H
-#define CDSTEST_HDR_QUEUE_SEGMENTED_QUEUE_H
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/intrusive/details/base.h>
-#include "size_check.h"
-
-namespace queue {
-
-    class HdrSegmentedQueue: public CppUnitMini::TestCase
-    {
-        struct item {
-            size_t nVal;
-
-            item() {}
-            item( size_t v ): nVal(v) {}
-            item( size_t nMajor, size_t nMinor ): nVal( nMajor * 16 + nMinor ) {}
-        };
-
-        struct other_item {
-            size_t  nVal;
-        };
-
-        template <typename Queue>
-        void test()
-        {
-            for ( size_t nQuasiFactor = 2; nQuasiFactor <= 256; ++nQuasiFactor ) {
-                CPPUNIT_MSG( "QuasiFactor=" << nQuasiFactor << "..." );
-                test_qf<Queue>( nQuasiFactor );
-            }
-        }
-
-        template <typename Queue>
-        void test_qf( size_t nQuasiFactor )
-        {
-            typedef typename Queue::value_type value_type;
-
-            static size_t const c_nItemCount = 1000;
-
-            {
-                Queue q( nQuasiFactor );
-                CPPUNIT_CHECK( q.quasi_factor() == cds::beans::ceil2(nQuasiFactor) );
-                CPPUNIT_CHECK( q.empty() );
-                CPPUNIT_CHECK( misc::check_size( q, 0 ));
-
-                // push/enqueue
-                for ( size_t i = 0; i < c_nItemCount; ++i ) {
-                    if ( i & 1 ) {
-                        CPPUNIT_ASSERT( q.push(item(i)) );
-                    }
-                    else {
-                        CPPUNIT_ASSERT( q.enqueue(item(i)) );
-                    }
-                    CPPUNIT_CHECK( misc::check_size( q, i + 1 ));
-                    CPPUNIT_CHECK( !q.empty() );
-                }
-
-                // pop/dequeue
-                size_t nCount = 0;
-                while ( !q.empty() ) {
-                    value_type v;
-                    if ( nCount & 1 ) {
-                        CPPUNIT_ASSERT( q.pop( v ) );
-                    }
-                    else {
-                        CPPUNIT_ASSERT( q.dequeue( v ));
-                    }
-
-                    int nSegment = int( nCount / q.quasi_factor() );
-                    int nMin = nSegment * int(q.quasi_factor());
-                    int nMax = nMin + int(q.quasi_factor()) - 1;
-                    CPPUNIT_CHECK_EX( nMin <= static_cast<int>(v.nVal) && static_cast<int>( v.nVal ) <= nMax, nMin << " <= " << v.nVal << " <= " << nMax );
-
-                    ++nCount;
-                    CPPUNIT_CHECK( misc::check_size( q, c_nItemCount - nCount ));
-                }
-                CPPUNIT_CHECK( nCount == c_nItemCount );
-                CPPUNIT_CHECK( q.empty() );
-                CPPUNIT_CHECK( misc::check_size( q, 0 ));
-
-
-                // push/pop with functor
-                for ( size_t i = 0; i < c_nItemCount; ++i ) {
-                    other_item itm;
-                    itm.nVal = i;
-                    if ( i & 1 ) {
-                        CPPUNIT_ASSERT( q.push_with( [&itm]( item& dest ) { dest.nVal = itm.nVal; } ));
-                    }
-                    else {
-                        CPPUNIT_ASSERT( q.enqueue_with( [&itm]( item& dest ) { dest.nVal = itm.nVal; } ));
-                    }
-                    CPPUNIT_CHECK( misc::check_size( q, i + 1 ));
-                    CPPUNIT_CHECK( !q.empty() );
-                }
-
-                {
-                    other_item v;
-
-                    nCount = 0;
-                    size_t nFuncCount = 0;
-                    while ( !q.empty() ) {
-                        if ( nCount & 1 ) {
-                            CPPUNIT_ASSERT( q.pop_with( [&v, &nFuncCount]( item& src ) {v.nVal = src.nVal; ++nFuncCount; } ));
-                        }
-                        else {
-                            CPPUNIT_ASSERT( q.dequeue_with( [&v, &nFuncCount]( item& src ) {v.nVal = src.nVal; ++nFuncCount; } ));
-                        }
-
-                        // It is possible c_nItemCount % quasi_factor() != 0
-                        // In this case the segment cannot be calculated here
-                        size_t nMin = nCount > q.quasi_factor() ? nCount - q.quasi_factor() : 0;
-                        size_t nMax = nCount + q.quasi_factor();
-                        CPPUNIT_CHECK_EX( nMin <= v.nVal && v.nVal <= nMax, nMin << " <= " << v.nVal << " <= " << nMax );
-
-                        ++nCount;
-                        CPPUNIT_CHECK( nFuncCount == nCount );
-                        CPPUNIT_CHECK( misc::check_size( q, c_nItemCount - nCount ));
-                    }
-                    CPPUNIT_CHECK( nCount == c_nItemCount );
-                    CPPUNIT_CHECK( q.empty() );
-                    CPPUNIT_CHECK( misc::check_size( q, 0 ));
-                }
-
-                //emplace
-                {
-                    size_t nMajor = 0;
-                    size_t nMinor = 0;
-                    for ( size_t i = 0; i < c_nItemCount; ++i ) {
-                        CPPUNIT_CHECK( q.emplace( nMajor, nMinor ));
-                        if ( nMinor  == 15 ) {
-                            ++nMajor;
-                            nMinor = 0;
-                        }
-                        else
-                            ++nMinor;
-                        CPPUNIT_CHECK( !q.empty() );
-                    }
-                    CPPUNIT_CHECK( misc::check_size( q, c_nItemCount ));
-
-                    nCount = 0;
-                    while ( !q.empty() ) {
-                        value_type v;
-                        if ( nCount & 1 ) {
-                            CPPUNIT_ASSERT( q.pop( v ) );
-                        }
-                        else {
-                            CPPUNIT_ASSERT( q.dequeue( v ));
-                        }
-
-                        size_t nMin = nCount > q.quasi_factor() ? nCount - q.quasi_factor() : 0;
-                        size_t nMax = nCount + q.quasi_factor();
-                        CPPUNIT_CHECK_EX( nMin <= v.nVal && v.nVal <= nMax, nMin << " <= " << v.nVal << " <= " << nMax );
-
-                        ++nCount;
-                        CPPUNIT_CHECK( misc::check_size( q, c_nItemCount - nCount ));
-                    }
-                    CPPUNIT_CHECK( nCount == c_nItemCount );
-                    CPPUNIT_CHECK( q.empty() );
-                    CPPUNIT_CHECK( misc::check_size( q, 0 ));
-                }
-
-                // pop from empty queue
-                {
-                    value_type v;
-                    v.nVal = c_nItemCount + 1;
-                    CPPUNIT_CHECK( q.empty() );
-                    CPPUNIT_ASSERT( !q.pop( v ));
-                    CPPUNIT_CHECK( q.empty() );
-                    CPPUNIT_CHECK( misc::check_size( q, 0 ));
-                    CPPUNIT_CHECK( v.nVal == c_nItemCount + 1 );
-                }
-
-                // clear
-                for ( size_t i = 0; i < c_nItemCount; ++i ) {
-                    if ( i & 1 ) {
-                        CPPUNIT_ASSERT( q.push(item(i)) );
-                    }
-                    else {
-                        CPPUNIT_ASSERT( q.enqueue(item(i)) );
-                    }
-                    CPPUNIT_CHECK( misc::check_size( q, i + 1 ));
-                    CPPUNIT_CHECK( !q.empty() );
-                }
-
-                q.clear();
-                CPPUNIT_CHECK( misc::check_size( q, 0 ));
-                CPPUNIT_CHECK( q.empty() );
-            }
-        }
-
-        void SegmQueue_HP();
-        void SegmQueue_HP_mutex();
-        void SegmQueue_HP_shuffle();
-        void SegmQueue_HP_stat();
-        void SegmQueue_HP_cacheline_padding();
-        void SegmQueue_HP_mutex_cacheline_padding();
-        void SegmQueue_HP_shuffle_cacheline_padding();
-        void SegmQueue_HP_stat_cacheline_padding();
-
-        void SegmQueue_DHP();
-        void SegmQueue_DHP_mutex();
-        void SegmQueue_DHP_shuffle();
-        void SegmQueue_DHP_stat();
-        void SegmQueue_DHP_cacheline_padding();
-        void SegmQueue_DHP_mutex_cacheline_padding();
-        void SegmQueue_DHP_shuffle_cacheline_padding();
-        void SegmQueue_DHP_stat_cacheline_padding();
-
-        CPPUNIT_TEST_SUITE(HdrSegmentedQueue)
-            CPPUNIT_TEST( SegmQueue_HP )
-            CPPUNIT_TEST( SegmQueue_HP_mutex )
-            CPPUNIT_TEST( SegmQueue_HP_shuffle )
-            CPPUNIT_TEST( SegmQueue_HP_stat )
-            CPPUNIT_TEST( SegmQueue_HP_cacheline_padding )
-            CPPUNIT_TEST( SegmQueue_HP_mutex_cacheline_padding )
-            CPPUNIT_TEST( SegmQueue_HP_shuffle_cacheline_padding )
-            CPPUNIT_TEST( SegmQueue_HP_stat_cacheline_padding )
-
-            CPPUNIT_TEST( SegmQueue_DHP )
-            CPPUNIT_TEST( SegmQueue_DHP_mutex )
-            CPPUNIT_TEST( SegmQueue_DHP_shuffle )
-            CPPUNIT_TEST( SegmQueue_DHP_stat )
-            CPPUNIT_TEST( SegmQueue_DHP_cacheline_padding )
-            CPPUNIT_TEST( SegmQueue_DHP_mutex_cacheline_padding )
-            CPPUNIT_TEST( SegmQueue_DHP_shuffle_cacheline_padding )
-            CPPUNIT_TEST( SegmQueue_DHP_stat_cacheline_padding )
-        CPPUNIT_TEST_SUITE_END()
-
-    };
-} // namespace queue
-
-#endif //#ifndef CDSTEST_HDR_QUEUE_SEGMENTED_QUEUE_H
diff --git a/tests/test-hdr/queue/hdr_segmented_queue_dhp.cpp b/tests/test-hdr/queue/hdr_segmented_queue_dhp.cpp
deleted file mode 100644 (file)
index a702767..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_segmented_queue.h"
-#include <cds/container/segmented_queue.h>
-#include <cds/gc/dhp.h>
-
-namespace queue {
-
-    void HdrSegmentedQueue::SegmQueue_DHP()
-    {
-        typedef cds::container::SegmentedQueue< cds::gc::DHP, item > queue_type;
-        test<queue_type>();
-    }
-
-    void HdrSegmentedQueue::SegmQueue_DHP_mutex()
-    {
-        typedef cds::container::SegmentedQueue< cds::gc::DHP, item,
-            cds::container::segmented_queue::make_traits<
-                cds::opt::lock_type< std::mutex >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrSegmentedQueue::SegmQueue_DHP_shuffle()
-    {
-        struct queue_traits : public cds::container::segmented_queue::traits
-        {
-            typedef cds::atomicity::item_counter item_counter;
-            typedef cds::opt::v::random_shuffle_permutation<> permutation_generator;
-        };
-        typedef cds::container::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrSegmentedQueue::SegmQueue_DHP_stat()
-    {
-        struct queue_traits : public
-            cds::container::segmented_queue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                , cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
-                , cds::opt::stat < cds::container::segmented_queue::stat<> >
-            > ::type
-        {};
-        typedef cds::container::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrSegmentedQueue::SegmQueue_DHP_cacheline_padding()
-    {
-        struct queue_traits : public cds::container::segmented_queue::traits
-        {
-            enum { padding = cds::opt::cache_line_padding };
-        };
-
-        typedef cds::container::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
-        test<queue_type>();
-    }
-
-    void HdrSegmentedQueue::SegmQueue_DHP_mutex_cacheline_padding()
-    {
-        typedef cds::container::SegmentedQueue< cds::gc::DHP, item,
-            cds::container::segmented_queue::make_traits<
-                cds::opt::lock_type< std::mutex >
-                , cds::opt::padding< cds::opt::cache_line_padding >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrSegmentedQueue::SegmQueue_DHP_shuffle_cacheline_padding()
-    {
-        struct queue_traits : public cds::container::segmented_queue::traits
-        {
-            typedef cds::atomicity::item_counter item_counter;
-            typedef cds::opt::v::random_shuffle_permutation<> permutation_generator;
-            enum { padding = cds::opt::cache_line_padding };
-        };
-        typedef cds::container::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrSegmentedQueue::SegmQueue_DHP_stat_cacheline_padding()
-    {
-        struct queue_traits : public
-            cds::container::segmented_queue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                , cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
-                , cds::opt::stat < cds::container::segmented_queue::stat<> >
-                , cds::opt::padding< cds::opt::cache_line_padding >
-            > ::type
-        {};
-        typedef cds::container::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-} // namespace queue
diff --git a/tests/test-hdr/queue/hdr_segmented_queue_hp.cpp b/tests/test-hdr/queue/hdr_segmented_queue_hp.cpp
deleted file mode 100644 (file)
index d45c0eb..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_segmented_queue.h"
-#include <cds/container/segmented_queue.h>
-#include <cds/gc/hp.h>
-
-namespace queue {
-
-    void HdrSegmentedQueue::SegmQueue_HP()
-    {
-        typedef cds::container::SegmentedQueue< cds::gc::HP, item > queue_type;
-        test<queue_type>();
-    }
-
-    void HdrSegmentedQueue::SegmQueue_HP_mutex()
-    {
-        typedef cds::container::SegmentedQueue< cds::gc::HP, item,
-            cds::container::segmented_queue::make_traits<
-                cds::opt::lock_type< std::mutex >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrSegmentedQueue::SegmQueue_HP_shuffle()
-    {
-        struct queue_traits : public cds::container::segmented_queue::traits
-        {
-            typedef cds::atomicity::item_counter item_counter;
-            typedef cds::opt::v::random_shuffle_permutation<> permutation_generator;
-        };
-        typedef cds::container::SegmentedQueue< cds::gc::HP, item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrSegmentedQueue::SegmQueue_HP_stat()
-    {
-        struct queue_traits : public
-            cds::container::segmented_queue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                , cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
-                , cds::opt::stat < cds::container::segmented_queue::stat<> >
-            > ::type
-        {};
-        typedef cds::container::SegmentedQueue< cds::gc::HP, item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrSegmentedQueue::SegmQueue_HP_cacheline_padding()
-    {
-        struct queue_traits : public cds::container::segmented_queue::traits
-        {
-            enum { padding = cds::opt::cache_line_padding };
-        };
-
-        typedef cds::container::SegmentedQueue< cds::gc::HP, item, queue_traits > queue_type;
-        test<queue_type>();
-    }
-
-    void HdrSegmentedQueue::SegmQueue_HP_mutex_cacheline_padding()
-    {
-        typedef cds::container::SegmentedQueue< cds::gc::HP, item,
-            cds::container::segmented_queue::make_traits<
-                cds::opt::lock_type< std::mutex >
-                , cds::opt::padding< cds::opt::cache_line_padding >
-            >::type
-        > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrSegmentedQueue::SegmQueue_HP_shuffle_cacheline_padding()
-    {
-        struct queue_traits : public cds::container::segmented_queue::traits
-        {
-            typedef cds::atomicity::item_counter item_counter;
-            typedef cds::opt::v::random_shuffle_permutation<> permutation_generator;
-            enum { padding = cds::opt::cache_line_padding };
-        };
-        typedef cds::container::SegmentedQueue< cds::gc::HP, item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-    void HdrSegmentedQueue::SegmQueue_HP_stat_cacheline_padding()
-    {
-        struct queue_traits : public
-            cds::container::segmented_queue::make_traits <
-                cds::opt::item_counter< cds::atomicity::item_counter >
-                , cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
-                , cds::opt::stat < cds::container::segmented_queue::stat<> >
-                , cds::opt::padding< cds::opt::cache_line_padding >
-            > ::type
-        {};
-        typedef cds::container::SegmentedQueue< cds::gc::HP, item, queue_traits > queue_type;
-
-        test<queue_type>();
-    }
-
-} // namespace queue
diff --git a/tests/test-hdr/queue/hdr_tsigas_cycle_queue.cpp b/tests/test-hdr/queue/hdr_tsigas_cycle_queue.cpp
deleted file mode 100644 (file)
index 05f0bf5..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_queue.h"
-#include <cds/container/tsigas_cycle_queue.h>
-
-namespace queue {
-
-    void HdrTestQueue::TsigasCycleQueue_static()
-    {
-        struct queue_traits : public cds::container::tsigas_queue::traits
-        {
-            typedef cds::opt::v::static_buffer< int, 1024 > buffer;
-            typedef cds::opt::v::sequential_consistent memory_model;
-        };
-        typedef cds::container::TsigasCycleQueue< int, queue_traits > queue_type;
-
-        test_bounded_no_ic<queue_type>();
-    }
-
-    void HdrTestQueue::TsigasCycleQueue_static_ic()
-    {
-        struct queue_traits : public cds::container::tsigas_queue::traits
-        {
-            typedef cds::opt::v::static_buffer< int, 1024 > buffer;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-        typedef cds::container::TsigasCycleQueue< int, queue_traits > queue_type;
-
-        test_bounded_ic<queue_type>();
-    }
-    void HdrTestQueue::TsigasCycleQueue_dyn()
-    {
-        class queue_type
-            : public cds::container::TsigasCycleQueue< int,
-            typename cds::container::tsigas_queue::make_traits<
-                    cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
-                >::type
-            >
-        {
-            typedef cds::container::TsigasCycleQueue< int,
-                typename cds::container::tsigas_queue::make_traits<
-                    cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
-                >::type
-            > base_class;
-        public:
-            queue_type()
-                : base_class( 1024 )
-            {}
-        };
-
-        test_bounded_no_ic<queue_type>();
-    }
-    void HdrTestQueue::TsigasCycleQueue_dyn_ic()
-    {
-        class queue_type
-            : public cds::container::TsigasCycleQueue< int,
-                typename cds::container::tsigas_queue::make_traits<
-                    cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
-                    , cds::opt::item_counter< cds::atomicity::item_counter >
-                >::type
-            >
-        {
-            typedef cds::container::TsigasCycleQueue< int,
-                typename cds::container::tsigas_queue::make_traits<
-                    cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
-                    , cds::opt::item_counter< cds::atomicity::item_counter >
-                >::type
-            > base_class;
-        public:
-            queue_type()
-                : base_class( 1024 )
-            {}
-        };
-
-        test_bounded_ic<queue_type>();
-    }
-
-} // namespace queue
diff --git a/tests/test-hdr/queue/hdr_vyukov_mpmc_cyclic.cpp b/tests/test-hdr/queue/hdr_vyukov_mpmc_cyclic.cpp
deleted file mode 100644 (file)
index a5a5b59..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include <cds/container/vyukov_mpmc_cycle_queue.h>
-
-#include "queue/hdr_queue.h"
-
-namespace queue {
-    namespace{
-        struct traits_VyukovMPMCCyclicQueue_static : public cds::container::vyukov_queue::traits
-        {
-            typedef cds::opt::v::static_buffer<int, 1024> buffer;
-        };
-        struct traits_VyukovMPMCCyclicQueue_static_ic : public traits_VyukovMPMCCyclicQueue_static
-        {
-            typedef cds::atomicity::item_counter item_counter;
-        };
-    }
-    void HdrTestQueue::VyukovMPMCCycleQueue_static()
-    {
-        typedef cds::container::VyukovMPMCCycleQueue< int, traits_VyukovMPMCCyclicQueue_static > queue_type;
-
-        test_bounded_no_ic< queue_type >();
-    }
-
-    void HdrTestQueue::VyukovMPMCCycleQueue_static_ic()
-    {
-        typedef cds::container::VyukovMPMCCycleQueue< int, traits_VyukovMPMCCyclicQueue_static_ic > queue_type;
-        test_bounded_ic< queue_type >();
-    }
-
-    void HdrTestQueue::VyukovMPMCCycleQueue_dyn()
-    {
-        class queue_type : public cds::container::VyukovMPMCCycleQueue < int >
-        {
-            typedef cds::container::VyukovMPMCCycleQueue < int > base_class;
-        public:
-            queue_type() : base_class( 1024 ) {}
-        };
-        test_bounded_no_ic< queue_type >();
-    }
-
-    void HdrTestQueue::VyukovMPMCCycleQueue_dyn_ic()
-    {
-        class queue_type :
-            public cds::container::VyukovMPMCCycleQueue < int,
-            typename cds::container::vyukov_queue::make_traits <
-            cds::opt::item_counter < cds::atomicity::item_counter >
-            > ::type
-            >
-        {
-            typedef cds::container::VyukovMPMCCycleQueue < int,
-                typename cds::container::vyukov_queue::make_traits <
-                    cds::opt::item_counter < cds::atomicity::item_counter >
-                > ::type
-            > base_class;
-        public:
-            queue_type() : base_class( 1024 ) {}
-        };
-        test_bounded_ic< queue_type >();
-    }
-
-}
diff --git a/tests/test-hdr/set/hdr_cuckoo_set.cpp b/tests/test-hdr/set/hdr_cuckoo_set.cpp
deleted file mode 100644 (file)
index 31586bf..0000000
+++ /dev/null
@@ -1,658 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_cuckoo_set.h"
-#include <cds/container/cuckoo_set.h>
-
-namespace set {
-
-    void CuckooSetHdrTest::Cuckoo_Striped_list_unord()
-    {
-        struct set_traits : public cc::cuckoo::traits {
-            typedef equal<item> equal_to;
-            typedef co::hash_tuple< hash1, hash2 > hash;
-        };
-
-        typedef cc::CuckooSet< item, set_traits > set_t;
-
-        test_int<set_t, equal< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Striped_list_unord_storehash()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::mutex_policy< cc::cuckoo::striping<> >
-                ,co::equal_to< equal< item > >
-                ,cc::cuckoo::store_hash< true >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                ,co::hash< std::tuple< hash1, hash2 > >
-            >::type
-        > set_t;
-
-        test_int<set_t, equal< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Striped_list_cmp()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::compare< cmp< item > >
-                ,cc::cuckoo::store_hash< false >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                ,co::hash< std::tuple< hash1, hash2 > >
-            >::type
-        > set_t;
-
-        test_int<set_t, less< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Striped_list_cmp_storehash()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::mutex_policy< cc::cuckoo::striping<> >
-                ,co::compare< cmp< item > >
-                ,cc::cuckoo::store_hash< true >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                ,co::hash< std::tuple< hash1, hash2 > >
-            >::type
-        > set_t;
-
-        test_int<set_t, less< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Striped_list_less()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::less< less< item > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::mutex_policy< cc::cuckoo::striping<> >
-                ,cc::cuckoo::store_hash< false >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-            >::type
-        > set_t;
-
-        test_int<set_t, less< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Striped_list_less_storehash()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::mutex_policy< cc::cuckoo::striping<> >
-                ,co::less< less< item > >
-                ,cc::cuckoo::store_hash< true >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                ,co::hash< std::tuple< hash1, hash2 > >
-            >::type
-        > set_t;
-
-        test_int<set_t, less< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Striped_list_less_cmp()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::less< less< item > >
-                ,co::compare< cmp< item > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::mutex_policy< cc::cuckoo::striping<> >
-                ,cc::cuckoo::store_hash< false >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-            >::type
-        > set_t;
-
-        test_int<set_t, less< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Striped_list_less_cmp_storehash()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::mutex_policy< cc::cuckoo::striping<> >
-                ,co::less< less< item > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::compare< cmp< item > >
-                ,cc::cuckoo::store_hash< true >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-            >::type
-        > set_t;
-
-        test_int<set_t, less<item> >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Striped_list_less_cmp_eq()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::less< less< item > >
-                ,co::compare< cmp< item > >
-                ,co::equal_to< equal< item > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::mutex_policy< cc::cuckoo::striping<> >
-                ,cc::cuckoo::store_hash< false >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-            >::type
-        > set_t;
-
-        test_int<set_t, less<item> >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Striped_list_less_cmp_eq_storehash()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::mutex_policy< cc::cuckoo::striping<> >
-                ,co::less< less< item > >
-                ,co::compare< cmp< item > >
-                ,co::equal_to< equal< item > >
-                ,cc::cuckoo::store_hash< true >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                ,co::hash< std::tuple< hash1, hash2 > >
-            >::type
-        > set_t;
-
-        test_int<set_t, less<item> >();
-    }
-
-
-    // Vector
-    void CuckooSetHdrTest::Cuckoo_Striped_vector_unord()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::equal_to< equal< item > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-            >::type
-        > set_t;
-
-        test_int<set_t, equal< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Striped_vector_unord_storehash()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::mutex_policy< cc::cuckoo::striping<> >
-                ,co::equal_to< equal< item > >
-                ,cc::cuckoo::store_hash< true >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-            >::type
-        > set_t;
-
-        test_int<set_t, equal< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Striped_vector_cmp()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::compare< cmp< item > >
-                ,cc::cuckoo::store_hash< false >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-            >::type
-        > set_t;
-
-        test_int<set_t, less< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Striped_vector_cmp_storehash()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::mutex_policy< cc::cuckoo::striping<> >
-                ,co::compare< cmp< item > >
-                ,cc::cuckoo::store_hash< true >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-            >::type
-        > set_t;
-
-        test_int<set_t, less< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Striped_vector_less()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::less< less< item > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::mutex_policy< cc::cuckoo::striping<> >
-                ,cc::cuckoo::store_hash< false >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-            >::type
-        > set_t;
-
-        test_int<set_t, less< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Striped_vector_less_storehash()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::mutex_policy< cc::cuckoo::striping<> >
-                ,co::less< less< item > >
-                ,cc::cuckoo::store_hash< true >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-            >::type
-        > set_t;
-
-        test_int<set_t, less< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Striped_vector_less_cmp()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::less< less< item > >
-                ,co::compare< cmp< item > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::mutex_policy< cc::cuckoo::striping<> >
-                ,cc::cuckoo::store_hash< false >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-            >::type
-        > set_t;
-
-        test_int<set_t, less< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Striped_vector_less_cmp_storehash()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::mutex_policy< cc::cuckoo::striping<> >
-                ,co::less< less< item > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::compare< cmp< item > >
-                ,cc::cuckoo::store_hash< true >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-            >::type
-        > set_t;
-
-        test_int<set_t, less<item> >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Striped_vector_less_cmp_eq()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::less< less< item > >
-                ,co::compare< cmp< item > >
-                ,co::equal_to< equal< item > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::mutex_policy< cc::cuckoo::striping<> >
-                ,cc::cuckoo::store_hash< false >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-            >::type
-        > set_t;
-
-        test_int<set_t, less<item> >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Striped_vector_less_cmp_eq_storehash()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::mutex_policy< cc::cuckoo::striping<> >
-                ,co::less< less< item > >
-                ,co::compare< cmp< item > >
-                ,co::equal_to< equal< item > >
-                ,cc::cuckoo::store_hash< true >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-            >::type
-        > set_t;
-
-        test_int<set_t, less<item> >();
-    }
-
-    // Refinable set
-    void CuckooSetHdrTest::Cuckoo_Refinable_list_unord()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::equal_to< equal< item > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::mutex_policy< cc::cuckoo::refinable<> >
-            >::type
-        > set_t;
-
-        test_int<set_t, equal< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Refinable_list_unord_storehash()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::mutex_policy< cc::cuckoo::refinable<> >
-                ,co::equal_to< equal< item > >
-                ,cc::cuckoo::store_hash< true >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                ,co::hash< std::tuple< hash1, hash2 > >
-            >::type
-        > set_t;
-
-        test_int<set_t, equal< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Refinable_list_cmp()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::compare< cmp< item > >
-                ,cc::cuckoo::store_hash< false >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::mutex_policy< cc::cuckoo::refinable<> >
-            >::type
-        > set_t;
-
-        test_int<set_t, less< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Refinable_list_cmp_storehash()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::mutex_policy< cc::cuckoo::refinable<> >
-                ,co::compare< cmp< item > >
-                ,cc::cuckoo::store_hash< true >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                ,co::hash< std::tuple< hash1, hash2 > >
-            >::type
-        > set_t;
-
-        test_int<set_t, less< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Refinable_list_less()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::less< less< item > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::mutex_policy< cc::cuckoo::refinable<> >
-                ,cc::cuckoo::store_hash< false >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-            >::type
-        > set_t;
-
-        test_int<set_t, less< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Refinable_list_less_storehash()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::mutex_policy< cc::cuckoo::refinable<> >
-                ,co::less< less< item > >
-                ,cc::cuckoo::store_hash< true >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                ,co::hash< std::tuple< hash1, hash2 > >
-            >::type
-        > set_t;
-
-        test_int<set_t, less< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Refinable_list_less_cmp()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::less< less< item > >
-                ,co::compare< cmp< item > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::mutex_policy< cc::cuckoo::refinable<> >
-                ,cc::cuckoo::store_hash< false >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-            >::type
-        > set_t;
-
-        test_int<set_t, less< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Refinable_list_less_cmp_storehash()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::mutex_policy< cc::cuckoo::refinable<> >
-                ,co::less< less< item > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::compare< cmp< item > >
-                ,cc::cuckoo::store_hash< true >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-            >::type
-        > set_t;
-
-        test_int<set_t, less<item> >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Refinable_list_less_cmp_eq()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::less< less< item > >
-                ,co::compare< cmp< item > >
-                ,co::equal_to< equal< item > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::mutex_policy< cc::cuckoo::refinable<> >
-                ,cc::cuckoo::store_hash< false >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-            >::type
-        > set_t;
-
-        test_int<set_t, less<item> >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Refinable_list_less_cmp_eq_storehash()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::mutex_policy< cc::cuckoo::refinable<> >
-                ,co::less< less< item > >
-                ,co::compare< cmp< item > >
-                ,co::equal_to< equal< item > >
-                ,cc::cuckoo::store_hash< true >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::list >
-                ,co::hash< std::tuple< hash1, hash2 > >
-            >::type
-        > set_t;
-
-        test_int<set_t, less<item> >();
-    }
-
-
-
-    // Refinable Vector
-    void CuckooSetHdrTest::Cuckoo_Refinable_vector_unord()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::equal_to< equal< item > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                ,co::mutex_policy< cc::cuckoo::refinable<> >
-            >::type
-        > set_t;
-
-        test_int<set_t, equal< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Refinable_vector_unord_storehash()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::mutex_policy< cc::cuckoo::refinable<> >
-                ,co::equal_to< equal< item > >
-                ,cc::cuckoo::store_hash< true >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-            >::type
-        > set_t;
-
-        test_int<set_t, equal< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Refinable_vector_cmp()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::compare< cmp< item > >
-                ,cc::cuckoo::store_hash< false >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::mutex_policy< cc::cuckoo::refinable<> >
-            >::type
-        > set_t;
-
-        test_int<set_t, less< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Refinable_vector_cmp_storehash()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::mutex_policy< cc::cuckoo::refinable<> >
-                ,co::compare< cmp< item > >
-                ,cc::cuckoo::store_hash< true >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-            >::type
-        > set_t;
-
-        test_int<set_t, less< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Refinable_vector_less()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::less< less< item > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::mutex_policy< cc::cuckoo::refinable<> >
-                ,cc::cuckoo::store_hash< false >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-            >::type
-        > set_t;
-
-        test_int<set_t, less< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Refinable_vector_less_storehash()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::mutex_policy< cc::cuckoo::refinable<> >
-                ,co::less< less< item > >
-                ,cc::cuckoo::store_hash< true >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-            >::type
-        > set_t;
-
-        test_int<set_t, less< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Refinable_vector_less_cmp()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::less< less< item > >
-                ,co::compare< cmp< item > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::mutex_policy< cc::cuckoo::refinable<> >
-                ,cc::cuckoo::store_hash< false >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-            >::type
-        > set_t;
-
-        test_int<set_t, less< item > >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Refinable_vector_less_cmp_storehash()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::mutex_policy< cc::cuckoo::refinable<> >
-                ,co::less< less< item > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::compare< cmp< item > >
-                ,cc::cuckoo::store_hash< true >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-            >::type
-        > set_t;
-
-        test_int<set_t, less<item> >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Refinable_vector_less_cmp_eq()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::less< less< item > >
-                ,co::compare< cmp< item > >
-                ,co::equal_to< equal< item > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::mutex_policy< cc::cuckoo::refinable<> >
-                ,cc::cuckoo::store_hash< false >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-            >::type
-        > set_t;
-
-        test_int<set_t, less<item> >();
-    }
-
-    void CuckooSetHdrTest::Cuckoo_Refinable_vector_less_cmp_eq_storehash()
-    {
-        typedef cc::CuckooSet< item,
-             cc::cuckoo::make_traits<
-                co::mutex_policy< cc::cuckoo::refinable<> >
-                ,co::less< less< item > >
-                ,co::compare< cmp< item > >
-                ,co::equal_to< equal< item > >
-                ,cc::cuckoo::store_hash< true >
-                ,cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-            >::type
-        > set_t;
-
-        test_int<set_t, less<item> >();
-    }
-
-} // namespace set
-
-CPPUNIT_TEST_SUITE_REGISTRATION(set::CuckooSetHdrTest);
diff --git a/tests/test-hdr/set/hdr_cuckoo_set.h b/tests/test-hdr/set/hdr_cuckoo_set.h
deleted file mode 100644 (file)
index 4e95b72..0000000
+++ /dev/null
@@ -1,636 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_CUCKOO_SET_H
-#define CDSTEST_HDR_CUCKOO_SET_H
-
-#include "cppunit/cppunit_proxy.h"
-#include "size_check.h"
-
-#include <cds/opt/hash.h>
-#include <cds/os/timer.h>
-#include <functional>   // ref
-
-// forward namespace declaration
-namespace cds {
-    namespace container {}
-    namespace opt {}
-}
-
-namespace set {
-    using misc::check_size;
-
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-
-
-    class CuckooSetHdrTest: public CppUnitMini::TestCase
-    {
-    public:
-        struct stat
-        {
-            unsigned int nFindCount     ;   // count of find-functor calling
-            unsigned int nUpdateNewCount;
-            unsigned int nUpdateCount;
-
-            stat()
-            {
-                memset( this, 0, sizeof(*this));
-            }
-
-            void copy( stat const& s )
-            {
-                nFindCount = s.nFindCount;
-                nUpdateCount = s.nUpdateCount;
-                nUpdateNewCount = s.nUpdateNewCount;
-            }
-        };
-
-        struct item: public stat
-        {
-            int nKey;
-            int nVal;
-
-            item()
-            {}
-
-            item( int key )
-                : nKey( key )
-                , nVal( key )
-            {}
-
-            item (int key, int val )
-                : nKey(key)
-                , nVal( val )
-            {}
-
-            item( std::pair<int,int> const& p )
-                : nKey( p.first )
-                , nVal( p.second )
-            {}
-
-            item( item const& i )
-                : nKey( i.nKey )
-                , nVal( i.nVal )
-            {}
-
-            item& operator=(item const& i)
-            {
-                nKey = i.nKey;
-                nVal = i.nVal;
-                stat::copy(i);
-
-                return *this;
-            }
-
-            item( item&& i )
-                : nKey( i.nKey )
-                , nVal( i.nVal )
-            {}
-
-            int key() const
-            {
-                return nKey;
-            }
-
-            int val() const
-            {
-                return nVal;
-            }
-        };
-
-        struct hash1 {
-            size_t operator()( int i ) const
-            {
-                return co::v::hash<int>()( i );
-            }
-
-            size_t operator()( std::pair<int,int> const& i ) const
-            {
-                return co::v::hash<int>()( i.first );
-            }
-
-            template <typename Item>
-            size_t operator()( Item const& i ) const
-            {
-                return (*this)( i.key() );
-            }
-        };
-
-        struct hash2: private hash1
-        {
-            typedef hash1 base_class;
-
-            size_t operator()( int i ) const
-            {
-                return ~( base_class::operator()(i));
-            }
-            template <typename Item>
-            size_t operator()( const Item& i ) const
-            {
-                return ~( base_class::operator()(i));
-            }
-            size_t operator()( std::pair<int,int> const& i ) const
-            {
-                return ~( base_class::operator()(i));
-            }
-        };
-
-        struct simple_item_counter {
-            size_t  m_nCount;
-
-            simple_item_counter()
-                : m_nCount(0)
-            {}
-
-            size_t operator ++()
-            {
-                return ++m_nCount;
-            }
-
-            size_t operator --()
-            {
-                return --m_nCount;
-            }
-
-            void reset()
-            {
-                m_nCount = 0;
-            }
-
-            operator size_t() const
-            {
-                return m_nCount;
-            }
-        };
-
-        template <typename T>
-        struct less
-        {
-            bool operator ()(const T& v1, const T& v2 ) const
-            {
-                return v1.key() < v2.key();
-            }
-
-            template <typename Q>
-            bool operator ()(const T& v1, const Q& v2 ) const
-            {
-                return v1.key() < v2;
-            }
-
-            template <typename Q>
-            bool operator ()(const Q& v1, const T& v2 ) const
-            {
-                return v1 < v2.key();
-            }
-
-            bool operator ()( std::pair<int, int> const& v1, const T& v2 ) const
-            {
-                return v1.first < v2.key();
-            }
-
-            bool operator ()(const T& v1, std::pair<int, int> const& v2 ) const
-            {
-                return v1.key() < v2.first;
-            }
-        };
-
-        template <typename T>
-        struct cmp {
-            int operator ()(const T& v1, const T& v2 ) const
-            {
-                if ( v1.key() < v2.key() )
-                    return -1;
-                return v1.key() > v2.key() ? 1 : 0;
-            }
-
-            template <typename Q>
-            int operator ()(const T& v1, const Q& v2 ) const
-            {
-                if ( v1.key() < v2 )
-                    return -1;
-                return v1.key() > v2 ? 1 : 0;
-            }
-
-            template <typename Q>
-            int operator ()(const Q& v1, const T& v2 ) const
-            {
-                if ( v1 < v2.key() )
-                    return -1;
-                return v1 > v2.key() ? 1 : 0;
-            }
-
-            int operator()( std::pair<int,int> const& v1, T const& v2 ) const
-            {
-                if ( v1.first < v2.key() )
-                    return -1;
-                return v1.first > v2.key() ? 1 : 0;
-            }
-
-            int operator()( T const& v1, std::pair<int,int> const& v2 ) const
-            {
-                if ( v1.key() < v2.first )
-                    return -1;
-                return v1.key() > v2.first ? 1 : 0;
-            }
-        };
-
-        template <typename T>
-        struct equal
-        {
-            bool operator ()(const T& v1, const T& v2 ) const
-            {
-                return v1.key() == v2.key();
-            }
-
-            template <typename Q>
-            bool operator ()(const T& v1, const Q& v2 ) const
-            {
-                return v1.key() == v2;
-            }
-
-            template <typename Q>
-            bool operator ()(const Q& v1, const T& v2 ) const
-            {
-                return v1 == v2.key();
-            }
-
-            bool operator ()( std::pair<int, int> const& v1, const T& v2 ) const
-            {
-                return v1.first == v2.key();
-            }
-
-            bool operator ()(const T& v1, std::pair<int, int> const& v2 ) const
-            {
-                return v1.key() == v2.first;
-            }
-        };
-
-        struct find_functor
-        {
-            template <typename Item, typename T>
-            void operator()( Item& i, T& /*val*/ )
-            {
-                ++i.nFindCount;
-            }
-            template <typename Item, typename T>
-            void operator()( Item& i, T const& /*val*/ )
-            {
-                ++i.nFindCount;
-            }
-        };
-
-        template <typename Item>
-        struct copy_found
-        {
-            Item    m_found;
-
-            template <typename T>
-            void operator()( Item& i, T& /*val*/ )
-            {
-                m_found = i;
-            }
-
-            void operator()( Item const& i )
-            {
-                m_found = i;
-            }
-        };
-
-        struct insert_functor
-        {
-            template <typename Item>
-            void operator()(Item& i )
-            {
-                i.nVal = i.nKey * 100;
-            }
-        };
-
-        template <typename Item, typename Q>
-        static void update_func( bool bNew, Item& i, Q& /*val*/ )
-        {
-            if ( bNew )
-                ++i.nUpdateNewCount;
-            else
-                ++i.nUpdateCount;
-        }
-
-        struct update_functor
-        {
-            template <typename Item, typename Q>
-            void operator()( bool bNew, Item& i, Q& val )
-            {
-                update_func( bNew, i, val );
-            }
-        };
-
-        template <class Set, typename Predicate>
-        void test_int_with( Set& s, Predicate pred )
-        {
-            typedef typename Set::value_type    value_type;
-
-            item itm;
-            int key;
-
-            // insert/find test
-            CPPUNIT_ASSERT( !s.contains( 10 ) );
-            CPPUNIT_ASSERT( s.insert( 10 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-            CPPUNIT_ASSERT( s.contains( 10 ) );
-
-            CPPUNIT_ASSERT( !s.insert( 10 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-
-            CPPUNIT_ASSERT( !s.contains( 20, pred ) );
-            CPPUNIT_ASSERT( s.insert( std::make_pair(20, 25) ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-            CPPUNIT_ASSERT( s.contains( 10, pred ) );
-            CPPUNIT_ASSERT( s.contains( key = 20 ) );
-            CPPUNIT_ASSERT( s.find_with( key, pred, find_functor() ) );
-            {
-                copy_found<item> f;
-                key = 20;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 20 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 25 );
-                CPPUNIT_ASSERT( f.m_found.nFindCount == 1 );
-            }
-            {
-                copy_found<item> f;
-                key = 20;
-                CPPUNIT_ASSERT( s.find_with( key, pred, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 20 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 25 );
-                CPPUNIT_ASSERT( f.m_found.nFindCount == 1 );
-            }
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-
-            CPPUNIT_ASSERT( !s.contains( 25 ) );
-            CPPUNIT_ASSERT( s.insert( std::make_pair(25, -1), insert_functor() ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-            {
-                copy_found<item> f;
-                key = 25;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 25 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 2500 );
-            }
-
-            // update() test
-            key = 10;
-            {
-                copy_found<item> f;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 10 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 10 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateCount == 0 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateNewCount == 0 );
-            }
-            std::pair<bool, bool> updateResult = s.update( key, update_functor() );
-            CPPUNIT_ASSERT( updateResult.first && !updateResult.second );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-            {
-                copy_found<item> f;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 10 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 10 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateCount == 1 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateNewCount == 0 );
-            }
-
-            updateResult = s.update(std::make_pair(13, 1300), update_functor(), false);
-            CPPUNIT_ASSERT(!updateResult.first && !updateResult.second);
-
-            updateResult = s.update( std::make_pair(13, 1300), update_functor() );
-            CPPUNIT_ASSERT( updateResult.first && updateResult.second );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 4 ));
-            {
-                copy_found<item> f;
-                key = 13;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 13 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 1300 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateCount == 0 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateNewCount == 1 );
-            }
-
-            // erase test
-            CPPUNIT_ASSERT( s.erase(13) );
-            CPPUNIT_ASSERT( !s.contains( 13 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-            CPPUNIT_ASSERT( !s.erase(13) );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-
-            CPPUNIT_ASSERT( s.contains( 10 ));
-            CPPUNIT_ASSERT( s.erase_with( 10, pred ));
-            CPPUNIT_ASSERT( !s.contains( 10 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-            CPPUNIT_ASSERT( !s.erase_with(10, pred) );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-
-            CPPUNIT_ASSERT( s.contains(20) );
-            {
-                copy_found<item> f;
-                CPPUNIT_ASSERT( s.erase( 20, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 20 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 25 );
-
-                CPPUNIT_ASSERT( s.insert(235))
-                    CPPUNIT_ASSERT( s.erase_with( 235, pred, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 235 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 235 );
-            }
-            CPPUNIT_ASSERT( !s.contains( 20 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-
-            // emplace test
-            CPPUNIT_ASSERT( s.emplace( 151 )) ;  // key = 151,  val = 151
-            CPPUNIT_ASSERT( s.emplace( 174, 471 )) ;    // key = 174, val = 471
-            CPPUNIT_ASSERT( s.emplace( std::make_pair( 190, 91 ) )) ; // key == 190, val = 91
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-
-            CPPUNIT_ASSERT( s.contains(151));
-            CPPUNIT_ASSERT( s.contains(174, pred ));
-            CPPUNIT_ASSERT( s.contains(190));
-
-            {
-                copy_found<item> f;
-                key = 151;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 151 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 151 );
-
-                key = 174;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 174 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 471 );
-
-                key = 190;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 190 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 91 );
-            }
-
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-        }
-
-        template <class Set, class Predicate>
-        void test_int()
-        {
-            Set s( 32, 4, 3 );
-            CPPUNIT_ASSERT( s.bucket_count() == 32 );
-            CPPUNIT_ASSERT( s.lock_count() == 32 );
-
-            cds::OS::Timer    timer;
-
-            test_int_with( s, Predicate() );
-
-            // Resizing test
-            for ( int i = 0; i < 10000; i++ ) {
-                s.insert( i );
-            }
-
-            CPPUNIT_MSG( "   Duration=" << timer.duration() );
-        }
-
-    public:
-        void Cuckoo_Striped_list_unord();
-        void Cuckoo_Striped_list_unord_storehash();
-        void Cuckoo_Striped_list_cmp();
-        void Cuckoo_Striped_list_cmp_storehash();
-        void Cuckoo_Striped_list_less();
-        void Cuckoo_Striped_list_less_storehash();
-        void Cuckoo_Striped_list_less_cmp();
-        void Cuckoo_Striped_list_less_cmp_storehash();
-        void Cuckoo_Striped_list_less_cmp_eq();
-        void Cuckoo_Striped_list_less_cmp_eq_storehash();
-
-        void Cuckoo_Striped_vector_unord();
-        void Cuckoo_Striped_vector_unord_storehash();
-        void Cuckoo_Striped_vector_cmp();
-        void Cuckoo_Striped_vector_cmp_storehash();
-        void Cuckoo_Striped_vector_less();
-        void Cuckoo_Striped_vector_less_storehash();
-        void Cuckoo_Striped_vector_less_cmp();
-        void Cuckoo_Striped_vector_less_cmp_storehash();
-        void Cuckoo_Striped_vector_less_cmp_eq();
-        void Cuckoo_Striped_vector_less_cmp_eq_storehash();
-
-        void Cuckoo_Refinable_list_unord();
-        void Cuckoo_Refinable_list_unord_storehash();
-        void Cuckoo_Refinable_list_cmp();
-        void Cuckoo_Refinable_list_cmp_storehash();
-        void Cuckoo_Refinable_list_less();
-        void Cuckoo_Refinable_list_less_storehash();
-        void Cuckoo_Refinable_list_less_cmp();
-        void Cuckoo_Refinable_list_less_cmp_storehash();
-        void Cuckoo_Refinable_list_less_cmp_eq();
-        void Cuckoo_Refinable_list_less_cmp_eq_storehash();
-
-        void Cuckoo_Refinable_vector_unord();
-        void Cuckoo_Refinable_vector_unord_storehash();
-        void Cuckoo_Refinable_vector_cmp();
-        void Cuckoo_Refinable_vector_cmp_storehash();
-        void Cuckoo_Refinable_vector_less();
-        void Cuckoo_Refinable_vector_less_storehash();
-        void Cuckoo_Refinable_vector_less_cmp();
-        void Cuckoo_Refinable_vector_less_cmp_storehash();
-        void Cuckoo_Refinable_vector_less_cmp_eq();
-        void Cuckoo_Refinable_vector_less_cmp_eq_storehash();
-
-        CPPUNIT_TEST_SUITE(CuckooSetHdrTest)
-            CPPUNIT_TEST( Cuckoo_Striped_list_unord)
-            CPPUNIT_TEST( Cuckoo_Striped_list_unord_storehash)
-            CPPUNIT_TEST( Cuckoo_Striped_list_cmp)
-            CPPUNIT_TEST( Cuckoo_Striped_list_cmp_storehash)
-            CPPUNIT_TEST( Cuckoo_Striped_list_less)
-            CPPUNIT_TEST( Cuckoo_Striped_list_less_storehash)
-            CPPUNIT_TEST( Cuckoo_Striped_list_less_cmp)
-            CPPUNIT_TEST( Cuckoo_Striped_list_less_cmp_storehash)
-            CPPUNIT_TEST( Cuckoo_Striped_list_less_cmp_eq)
-            CPPUNIT_TEST( Cuckoo_Striped_list_less_cmp_eq_storehash)
-
-            CPPUNIT_TEST( Cuckoo_Striped_vector_unord)
-            CPPUNIT_TEST( Cuckoo_Striped_vector_unord_storehash)
-            CPPUNIT_TEST( Cuckoo_Striped_vector_cmp)
-            CPPUNIT_TEST( Cuckoo_Striped_vector_cmp_storehash)
-            CPPUNIT_TEST( Cuckoo_Striped_vector_less)
-            CPPUNIT_TEST( Cuckoo_Striped_vector_less_storehash)
-            CPPUNIT_TEST( Cuckoo_Striped_vector_less_cmp)
-            CPPUNIT_TEST( Cuckoo_Striped_vector_less_cmp_storehash)
-            CPPUNIT_TEST( Cuckoo_Striped_vector_less_cmp_eq)
-            CPPUNIT_TEST( Cuckoo_Striped_vector_less_cmp_eq_storehash)
-
-            CPPUNIT_TEST( Cuckoo_Refinable_list_unord)
-            CPPUNIT_TEST( Cuckoo_Refinable_list_unord_storehash)
-            CPPUNIT_TEST( Cuckoo_Refinable_list_cmp)
-            CPPUNIT_TEST( Cuckoo_Refinable_list_cmp_storehash)
-            CPPUNIT_TEST( Cuckoo_Refinable_list_less)
-            CPPUNIT_TEST( Cuckoo_Refinable_list_less_storehash)
-            CPPUNIT_TEST( Cuckoo_Refinable_list_less_cmp)
-            CPPUNIT_TEST( Cuckoo_Refinable_list_less_cmp_storehash)
-            CPPUNIT_TEST( Cuckoo_Refinable_list_less_cmp_eq)
-            CPPUNIT_TEST( Cuckoo_Refinable_list_less_cmp_eq_storehash)
-
-            CPPUNIT_TEST( Cuckoo_Refinable_vector_unord)
-            CPPUNIT_TEST( Cuckoo_Refinable_vector_unord_storehash)
-            CPPUNIT_TEST( Cuckoo_Refinable_vector_cmp)
-            CPPUNIT_TEST( Cuckoo_Refinable_vector_cmp_storehash)
-            CPPUNIT_TEST( Cuckoo_Refinable_vector_less)
-            CPPUNIT_TEST( Cuckoo_Refinable_vector_less_storehash)
-            CPPUNIT_TEST( Cuckoo_Refinable_vector_less_cmp)
-            CPPUNIT_TEST( Cuckoo_Refinable_vector_less_cmp_storehash)
-            CPPUNIT_TEST( Cuckoo_Refinable_vector_less_cmp_eq)
-            CPPUNIT_TEST( Cuckoo_Refinable_vector_less_cmp_eq_storehash)
-        CPPUNIT_TEST_SUITE_END()
-    };
-
-} // namespace set
-
-#endif // #ifndef CDSTEST_HDR_CUCKOO_SET_H
diff --git a/tests/test-hdr/set/hdr_feldman_hashset.h b/tests/test-hdr/set/hdr_feldman_hashset.h
deleted file mode 100644 (file)
index 4a25ada..0000000
+++ /dev/null
@@ -1,871 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_FELDMAN_HASHSET_H
-#define CDSTEST_HDR_FELDMAN_HASHSET_H
-
-#include "cppunit/cppunit_proxy.h"
-
-// forward declaration
-namespace cds {
-    namespace container {}
-    namespace opt {}
-}
-
-namespace set {
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-
-    class FeldmanHashSetHdrTest : public CppUnitMini::TestCase
-    {
-        template <typename Hash>
-        struct Arg
-        {
-            size_t key;
-            Hash hash;
-
-            Arg( size_t k, Hash const& h )
-                : key( k )
-                , hash( h )
-            {}
-        };
-
-        template <typename Hash>
-        struct Item
-        {
-            unsigned int nInsertCall;
-            unsigned int nFindCall;
-            unsigned int nEraseCall;
-            mutable unsigned int nIteratorCall;
-            Hash hash;
-            size_t key;
-
-            Item( size_t k, Hash const& h )
-                : nInsertCall(0)
-                , nFindCall(0)
-                , nEraseCall(0)
-                , nIteratorCall(0)
-                , hash( h )
-                , key( k )
-            {}
-
-            explicit Item( Arg<Hash> const& arg )
-                : nInsertCall(0)
-                , nFindCall(0)
-                , nEraseCall(0)
-                , nIteratorCall(0)
-                , hash( arg.hash )
-                , key( arg.key )
-            {}
-
-            Item( Item const& i )
-                : nInsertCall(0)
-                , nFindCall(0)
-                , nEraseCall(0)
-                , nIteratorCall(0)
-                , hash( i.hash )
-                , key( i.key )
-            {}
-        };
-
-        template <typename Hash>
-        struct get_hash
-        {
-            Hash const& operator()( Item<Hash> const& i ) const
-            {
-                return i.hash;
-            }
-        };
-
-        template <typename Key>
-        struct get_key
-        {
-            Key operator()(Item<Key> const& i)const
-            {
-                return i.hash;
-            }
-        };
-
-        template <typename Key>
-        struct nohash {
-            Key operator()(Key k) const
-            {
-                return k;
-            }
-        };
-
-        struct hash128
-        {
-            size_t lo;
-            size_t hi;
-
-            hash128() {}
-            hash128(size_t l, size_t h) : lo(l), hi(h) {}
-            hash128( hash128 const& h) : lo(h.lo), hi(h.hi) {}
-
-            struct make {
-                hash128 operator()( size_t n ) const
-                {
-                    return hash128( std::hash<size_t>()( n ), std::hash<size_t>()( ~n ));
-                }
-                hash128 operator()( hash128 const& n ) const
-                {
-                    return hash128( std::hash<size_t>()( n.lo ), std::hash<size_t>()( ~n.hi ));
-                }
-            };
-
-            struct less {
-                bool operator()( hash128 const& lhs, hash128 const& rhs ) const
-                {
-                    if ( lhs.hi != rhs.hi )
-                        return lhs.hi < rhs.hi;
-                    return lhs.lo < rhs.lo;
-                }
-            };
-
-            struct cmp {
-                int operator()( hash128 const& lhs, hash128 const& rhs ) const
-                {
-                    if ( lhs.hi != rhs.hi )
-                        return lhs.hi < rhs.hi ? -1 : 1;
-                    return lhs.lo < rhs.lo ? -1 : lhs.lo == rhs.lo ? 0 : 1;
-                }
-            };
-
-            friend bool operator==( hash128 const& lhs, hash128 const& rhs )
-            {
-                return cmp()( lhs, rhs ) == 0;
-            }
-            friend bool operator!=(hash128 const& lhs, hash128 const& rhs)
-            {
-                return !( lhs == rhs );
-            }
-        };
-
-        template <typename Set, typename Hasher>
-        void test_hp( size_t nHeadBits, size_t nArrayBits )
-        {
-            typedef typename Set::hash_type hash_type;
-            typedef typename Set::value_type value_type;
-            typedef Arg<hash_type> arg_type;
-            typedef typename Set::guarded_ptr guarded_ptr;
-
-            Hasher hasher;
-
-            size_t const capacity = 1000;
-
-            Set s( nHeadBits, nArrayBits );
-            CPPUNIT_MSG("Array size: head=" << s.head_size() << ", array_node=" << s.array_node_size());
-            CPPUNIT_ASSERT(s.head_size() >= (size_t(1) << nHeadBits));
-            CPPUNIT_ASSERT(s.array_node_size() == (size_t(1) << nArrayBits));
-
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT(s.size() == 0);
-
-            // insert test
-            for ( size_t i = 0; i < capacity; ++i ) {
-                hash_type h = hasher(i);
-                CPPUNIT_ASSERT( !s.contains( h ));
-                CPPUNIT_ASSERT( s.insert( value_type( i, h )));
-                CPPUNIT_ASSERT(s.contains( h ));
-
-                CPPUNIT_ASSERT( !s.empty() );
-                CPPUNIT_ASSERT( s.size() == i + 1);
-
-                CPPUNIT_ASSERT( !s.insert( arg_type(i, h) ));
-                CPPUNIT_ASSERT( s.size() == i + 1);
-            }
-
-            // update existing test
-            for ( size_t i = 0; i < capacity; ++i ) {
-                hash_type h = hasher(i);
-                CPPUNIT_ASSERT( s.contains( h ));
-                std::pair<bool, bool> ret = s.update( arg_type( i, h ),
-                    [](value_type& i, value_type * prev ) {
-                        CPPUNIT_ASSERT_CURRENT( prev != nullptr );
-                        CPPUNIT_ASSERT_CURRENT( i.key == prev->key );
-                        CPPUNIT_ASSERT_CURRENT( i.hash == prev->hash );
-                        i.nInsertCall += 1;
-                    }, false );
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( !ret.second );
-                CPPUNIT_ASSERT( s.contains( h ));
-                CPPUNIT_ASSERT( s.size() == capacity );
-
-                guarded_ptr gp(s.get( h ));
-                CPPUNIT_ASSERT( gp );
-                CPPUNIT_ASSERT( gp->nInsertCall == 1 );
-                CPPUNIT_ASSERT( gp->key == i );
-                CPPUNIT_ASSERT( gp->hash == h );
-            }
-
-            // erase test
-            for ( size_t i = 0; i < capacity; ++i ) {
-                CPPUNIT_ASSERT( !s.empty() );
-                CPPUNIT_ASSERT( s.size() == capacity - i );
-                CPPUNIT_ASSERT(s.find(hasher(i), []( value_type &) {}));
-                CPPUNIT_ASSERT( s.erase(hasher(i)) );
-                CPPUNIT_ASSERT( !s.find(hasher(i), []( value_type &) {}));
-                CPPUNIT_ASSERT( s.size() == capacity - i - 1);
-            }
-            CPPUNIT_ASSERT( s.empty() );
-
-            // Iterators on empty set
-            CPPUNIT_ASSERT(s.begin() == s.end());
-            CPPUNIT_ASSERT(s.cbegin() == s.cend());
-            CPPUNIT_ASSERT(s.rbegin() == s.rend());
-            CPPUNIT_ASSERT(s.crbegin() == s.crend());
-
-            // insert with functor
-            for ( size_t i = capacity; i > 0; --i ) {
-                CPPUNIT_ASSERT( s.size() == capacity - i );
-                CPPUNIT_ASSERT(s.insert( arg_type( i, hasher(i)), []( value_type& val ) { val.nInsertCall += 1; } ));
-                CPPUNIT_ASSERT( s.size() == capacity - i + 1 );
-                CPPUNIT_ASSERT( !s.empty() );
-
-                CPPUNIT_ASSERT(s.find( hasher(i), []( value_type& val ) {
-                    CPPUNIT_ASSERT_CURRENT( val.nInsertCall == 1 );
-                    val.nFindCall += 1;
-                } ));
-            }
-                CPPUNIT_ASSERT( s.size() == capacity );
-
-            // for-each iterator test
-            for ( auto& el : s ) {
-                CPPUNIT_ASSERT( el.nInsertCall == 1 );
-                CPPUNIT_ASSERT( el.nFindCall == 1 );
-                el.nFindCall += 1;
-            }
-
-            // iterator test
-            for ( auto it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( it->nInsertCall == 1 );
-                CPPUNIT_ASSERT( it->nFindCall == 2 );
-                it->nFindCall += 1;
-            }
-
-            // reverse iterator test
-            for ( auto it = s.rbegin(), itEnd = s.rend(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( it->nInsertCall == 1 );
-                CPPUNIT_ASSERT( it->nFindCall == 3 );
-                it->nFindCall += 1;
-            }
-
-            // const iterator test
-            for ( auto it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( it->nInsertCall == 1 );
-                CPPUNIT_ASSERT( it->nFindCall == 4 );
-                it->nIteratorCall += 1;
-            }
-
-            // const reverse iterator test
-            for ( auto it = s.rbegin(), itEnd = s.rend(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( it->nInsertCall == 1 );
-                CPPUNIT_ASSERT( it->nFindCall == 4 );
-                CPPUNIT_ASSERT( it->nIteratorCall == 1 );
-                it->nIteratorCall += 1;
-            }
-
-            // check completeness
-            for ( size_t i = 1; i <= capacity; ++i ) {
-                CPPUNIT_ASSERT( s.find( hasher( i ), []( value_type const& el ) {
-                    CPPUNIT_ASSERT_CURRENT( el.nInsertCall == 1 );
-                    CPPUNIT_ASSERT_CURRENT( el.nFindCall == 4 );
-                    CPPUNIT_ASSERT_CURRENT( el.nIteratorCall == 2 );
-                } ));
-            }
-
-            // erase with functor test
-            {
-                size_t nSum = 0;
-                for ( size_t i = 1; i <= capacity; ++i ) {
-                    CPPUNIT_ASSERT( s.size() == capacity - i + 1 );
-                    CPPUNIT_ASSERT(s.erase(hasher(i), [&nSum]( value_type const& val ) {
-                        CPPUNIT_ASSERT_CURRENT( val.nInsertCall == 1 );
-                        CPPUNIT_ASSERT_CURRENT( val.nFindCall == 4 );
-                        CPPUNIT_ASSERT_CURRENT( val.nIteratorCall == 2 );
-                        nSum += val.key;
-                    } ))
-                    CPPUNIT_ASSERT( s.size() == capacity - i );
-                    CPPUNIT_ASSERT( !s.erase(hasher(i), [&nSum]( value_type const& val ) { nSum += val.key; } ))
-                }
-                CPPUNIT_ASSERT(s.empty() );
-                CPPUNIT_ASSERT(nSum == (1 + capacity) * capacity / 2 );
-            }
-
-            // update test with insert allowing
-            for ( size_t i = 0; i < capacity; ++i ) {
-                hash_type h = hasher(i);
-                CPPUNIT_ASSERT( !s.contains( h ));
-                guarded_ptr gp(s.get( h ));
-                CPPUNIT_ASSERT( !gp );
-                std::pair<bool, bool> ret = s.update( arg_type( i, h ),
-                    [](value_type& i, value_type * prev ) {
-                        CPPUNIT_ASSERT_CURRENT( prev == nullptr );
-                        i.nInsertCall += 1;
-                    });
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( ret.second );
-                CPPUNIT_ASSERT( s.contains( h ));
-                CPPUNIT_ASSERT( s.size() == i + 1 );
-
-                gp = s.get( h );
-                CPPUNIT_ASSERT( gp );
-                CPPUNIT_ASSERT( gp->nInsertCall == 1 );
-                CPPUNIT_ASSERT( gp->key == i );
-                CPPUNIT_ASSERT( gp->hash == h );
-            }
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT(s.size() == capacity );
-
-            // erase_at( iterator ) test
-            for ( auto it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( s.erase_at( it ));
-            }
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( s.size() == 0 );
-
-            // emplace test
-            for ( size_t i = 0; i < capacity; ++i ) {
-                hash_type h = hasher(i);
-                CPPUNIT_ASSERT( !s.contains( h ));
-                CPPUNIT_ASSERT( s.emplace( i, hasher(i) ));
-                CPPUNIT_ASSERT(s.contains( h ));
-
-                CPPUNIT_ASSERT( !s.empty() );
-                CPPUNIT_ASSERT( s.size() == i + 1);
-
-                CPPUNIT_ASSERT( !s.emplace( arg_type(i, h) ));
-                CPPUNIT_ASSERT( s.size() == i + 1);
-            }
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT(s.size() == capacity );
-
-            // erase_at( reverse_iterator ) test
-            for ( auto it = s.rbegin(), itEnd = s.rend(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( s.erase_at( it ));
-            }
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( s.size() == 0 );
-
-            // extract test
-            for ( size_t i = 0; i < capacity; ++i ) {
-                hash_type h = hasher(i);
-                CPPUNIT_ASSERT( !s.contains( h ));
-                CPPUNIT_ASSERT( s.emplace( arg_type( i, hasher(i) )));
-                CPPUNIT_ASSERT(s.contains( h ));
-
-                CPPUNIT_ASSERT( !s.empty() );
-                CPPUNIT_ASSERT( s.size() == i + 1);
-
-                CPPUNIT_ASSERT( !s.emplace( i, h ));
-                CPPUNIT_ASSERT( s.size() == i + 1);
-            }
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT(s.size() == capacity );
-
-            for ( size_t i = capacity; i != 0; --i ) {
-                CPPUNIT_ASSERT( !s.empty() );
-                CPPUNIT_ASSERT( s.size() == i );
-
-                guarded_ptr gp{ s.extract( hasher(i-1)) };
-                CPPUNIT_ASSERT( gp );
-                CPPUNIT_ASSERT( gp->key == i - 1);
-                CPPUNIT_ASSERT(gp->hash == hasher(i-1));
-                CPPUNIT_ASSERT( !s.contains(hasher(i-1)));
-
-                gp = s.get(hasher(i-1));
-                CPPUNIT_ASSERT( !gp );
-
-                CPPUNIT_ASSERT( s.size() == i - 1 );
-            }
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT(s.size() == 0 );
-
-            // clear test
-            for ( size_t i = 0; i < capacity; ++i ) {
-                hash_type h = hasher(i);
-                CPPUNIT_ASSERT( !s.contains( h ));
-                CPPUNIT_ASSERT( s.emplace( arg_type( i, hasher(i) )));
-                CPPUNIT_ASSERT(s.contains( h ));
-
-                CPPUNIT_ASSERT( !s.empty() );
-                CPPUNIT_ASSERT( s.size() == i + 1);
-
-                CPPUNIT_ASSERT( !s.emplace( i, h ));
-                CPPUNIT_ASSERT( s.size() == i + 1);
-            }
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT(s.size() == capacity );
-
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT(s.size() == 0 );
-
-            CPPUNIT_MSG( s.statistics() );
-        }
-
-        template <typename Set, typename Hasher>
-        void test_rcu(size_t nHeadBits, size_t nArrayBits)
-        {
-            typedef typename Set::hash_type hash_type;
-            typedef typename Set::value_type value_type;
-            typedef Arg<hash_type> arg_type;
-            typedef typename Set::exempt_ptr exempt_ptr;
-            typedef typename Set::rcu_lock rcu_lock;
-
-            Hasher hasher;
-
-            size_t const capacity = 1000;
-
-            Set s(nHeadBits, nArrayBits);
-            CPPUNIT_MSG("Array size: head=" << s.head_size() << ", array_node=" << s.array_node_size());
-            CPPUNIT_ASSERT(s.head_size() >= (size_t(1) << nHeadBits));
-            CPPUNIT_ASSERT(s.array_node_size() == (size_t(1) << nArrayBits));
-
-            CPPUNIT_ASSERT(s.empty());
-            CPPUNIT_ASSERT(s.size() == 0);
-
-            // insert test
-            for (size_t i = 0; i < capacity; ++i) {
-                hash_type h = hasher(i);
-                CPPUNIT_ASSERT(!s.contains(h));
-                CPPUNIT_ASSERT(s.insert(value_type(i, h)));
-                CPPUNIT_ASSERT(s.contains(h));
-
-                CPPUNIT_ASSERT(!s.empty());
-                CPPUNIT_ASSERT(s.size() == i + 1);
-
-                CPPUNIT_ASSERT(!s.insert(arg_type(i, h)));
-                CPPUNIT_ASSERT(s.size() == i + 1);
-            }
-
-            // update existing test
-            for (size_t i = 0; i < capacity; ++i) {
-                hash_type h = hasher(i);
-                CPPUNIT_ASSERT(s.contains(h));
-                std::pair<bool, bool> ret = s.update(arg_type(i, h),
-                    [](value_type& i, value_type * prev) {
-                    CPPUNIT_ASSERT_CURRENT(prev != nullptr);
-                    CPPUNIT_ASSERT_CURRENT(i.key == prev->key);
-                    CPPUNIT_ASSERT_CURRENT(i.hash == prev->hash);
-                    i.nInsertCall += 1;
-                }, false);
-                CPPUNIT_ASSERT(ret.first);
-                CPPUNIT_ASSERT(!ret.second);
-                CPPUNIT_ASSERT(s.contains(h));
-                CPPUNIT_ASSERT(s.size() == capacity);
-
-                {
-                    rcu_lock l;
-                    value_type * p = s.get(h);
-                    CPPUNIT_ASSERT(p);
-                    CPPUNIT_ASSERT(p->nInsertCall == 1);
-                    CPPUNIT_ASSERT(p->key == i);
-                    CPPUNIT_ASSERT(p->hash == h);
-                }
-            }
-
-            // erase test
-            for (size_t i = 0; i < capacity; ++i) {
-                CPPUNIT_ASSERT(!s.empty());
-                CPPUNIT_ASSERT(s.size() == capacity - i);
-                CPPUNIT_ASSERT(s.find(hasher(i), [](value_type &) {}));
-                CPPUNIT_ASSERT(s.erase(hasher(i)));
-                CPPUNIT_ASSERT(!s.find(hasher(i), [](value_type &) {}));
-                CPPUNIT_ASSERT(s.size() == capacity - i - 1);
-            }
-            CPPUNIT_ASSERT(s.empty());
-
-            // Iterators on empty set
-            {
-                rcu_lock l;
-                CPPUNIT_ASSERT(s.begin() == s.end());
-                CPPUNIT_ASSERT(s.cbegin() == s.cend());
-                CPPUNIT_ASSERT(s.rbegin() == s.rend());
-                CPPUNIT_ASSERT(s.crbegin() == s.crend());
-            }
-
-            // insert with functor
-            for (size_t i = capacity; i > 0; --i) {
-                CPPUNIT_ASSERT(s.size() == capacity - i);
-                CPPUNIT_ASSERT(s.insert(arg_type(i, hasher(i)), [](value_type& val) { val.nInsertCall += 1; }));
-                CPPUNIT_ASSERT(s.size() == capacity - i + 1);
-                CPPUNIT_ASSERT(!s.empty());
-
-                CPPUNIT_ASSERT(s.find(hasher(i), [](value_type& val) {
-                    CPPUNIT_ASSERT_CURRENT(val.nInsertCall == 1);
-                    val.nFindCall += 1;
-                }));
-            }
-            CPPUNIT_ASSERT(s.size() == capacity);
-
-            // for-each iterator test
-            {
-                rcu_lock l;
-                for (auto& el : s) {
-                    CPPUNIT_ASSERT(el.nInsertCall == 1);
-                    CPPUNIT_ASSERT(el.nFindCall == 1);
-                    el.nFindCall += 1;
-                }
-            }
-
-            // iterator test
-            {
-                rcu_lock l;
-                for (auto it = s.begin(), itEnd = s.end(); it != itEnd; ++it) {
-                    CPPUNIT_ASSERT(it->nInsertCall == 1);
-                    CPPUNIT_ASSERT(it->nFindCall == 2);
-                    it->nFindCall += 1;
-                }
-            }
-
-            // reverse iterator test
-            {
-                rcu_lock l;
-                for (auto it = s.rbegin(), itEnd = s.rend(); it != itEnd; ++it) {
-                    CPPUNIT_ASSERT(it->nInsertCall == 1);
-                    CPPUNIT_ASSERT(it->nFindCall == 3);
-                    it->nFindCall += 1;
-                }
-            }
-
-            // const iterator test
-            {
-                rcu_lock l;
-                for (auto it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it) {
-                    CPPUNIT_ASSERT(it->nInsertCall == 1);
-                    CPPUNIT_ASSERT(it->nFindCall == 4);
-                    it->nIteratorCall += 1;
-                }
-            }
-
-            // const reverse iterator test
-            {
-                rcu_lock l;
-                for (auto it = s.rbegin(), itEnd = s.rend(); it != itEnd; ++it) {
-                    CPPUNIT_ASSERT(it->nInsertCall == 1);
-                    CPPUNIT_ASSERT(it->nFindCall == 4);
-                    CPPUNIT_ASSERT(it->nIteratorCall == 1);
-                    it->nIteratorCall += 1;
-                }
-            }
-
-            // check completeness
-            for (size_t i = 1; i <= capacity; ++i) {
-                CPPUNIT_ASSERT(s.find(hasher(i), [](value_type const& el) {
-                    CPPUNIT_ASSERT_CURRENT(el.nInsertCall == 1);
-                    CPPUNIT_ASSERT_CURRENT(el.nFindCall == 4);
-                    CPPUNIT_ASSERT_CURRENT(el.nIteratorCall == 2);
-                }));
-            }
-
-            // erase with functor test
-            {
-                size_t nSum = 0;
-                for (size_t i = 1; i <= capacity; ++i) {
-                    CPPUNIT_ASSERT(s.size() == capacity - i + 1);
-                    CPPUNIT_ASSERT(s.erase(hasher(i), [&nSum](value_type const& val) {
-                        CPPUNIT_ASSERT_CURRENT(val.nInsertCall == 1);
-                        CPPUNIT_ASSERT_CURRENT(val.nFindCall == 4);
-                        CPPUNIT_ASSERT_CURRENT(val.nIteratorCall == 2);
-                        nSum += val.key;
-                    }));
-                    CPPUNIT_ASSERT(s.size() == capacity - i);
-                    CPPUNIT_ASSERT(!s.erase(hasher(i), [&nSum](value_type const& val) { nSum += val.key; }))
-                }
-                CPPUNIT_ASSERT(s.empty());
-                CPPUNIT_ASSERT(nSum == (1 + capacity) * capacity / 2);
-            }
-
-            // update test with insert allowing
-            for (size_t i = 0; i < capacity; ++i) {
-                hash_type h = hasher(i);
-                CPPUNIT_ASSERT(!s.contains(h));
-
-                {
-                    rcu_lock l;
-                    value_type * p = s.get(h);
-                    CPPUNIT_ASSERT(!p);
-                }
-                std::pair<bool, bool> ret = s.update(arg_type(i, h),
-                    [](value_type& i, value_type * prev) {
-                    CPPUNIT_ASSERT_CURRENT(prev == nullptr);
-                    i.nInsertCall += 1;
-                });
-                CPPUNIT_ASSERT(ret.first);
-                CPPUNIT_ASSERT(ret.second);
-                CPPUNIT_ASSERT(s.contains(h));
-                CPPUNIT_ASSERT(s.size() == i + 1);
-
-                {
-                    rcu_lock l;
-                    value_type * p = s.get(h);
-                    CPPUNIT_ASSERT(p);
-                    CPPUNIT_ASSERT(p->nInsertCall == 1);
-                    CPPUNIT_ASSERT(p->key == i);
-                    CPPUNIT_ASSERT(p->hash == h);
-                }
-            }
-            CPPUNIT_ASSERT(!s.empty());
-            CPPUNIT_ASSERT(s.size() == capacity);
-
-            s.clear();
-            CPPUNIT_ASSERT(s.empty());
-            CPPUNIT_ASSERT(s.size() == 0);
-
-            // emplace test
-            for (size_t i = 0; i < capacity; ++i) {
-                hash_type h = hasher(i);
-                CPPUNIT_ASSERT(!s.contains(h));
-                CPPUNIT_ASSERT(s.emplace(i, hasher(i)));
-                CPPUNIT_ASSERT(s.contains(h));
-
-                CPPUNIT_ASSERT(!s.empty());
-                CPPUNIT_ASSERT(s.size() == i + 1);
-
-                CPPUNIT_ASSERT(!s.emplace(arg_type(i, h)));
-                CPPUNIT_ASSERT(s.size() == i + 1);
-            }
-            CPPUNIT_ASSERT(!s.empty());
-            CPPUNIT_ASSERT(s.size() == capacity);
-
-            // extract test
-            for (size_t i = capacity; i != 0; --i) {
-                CPPUNIT_ASSERT(!s.empty());
-                CPPUNIT_ASSERT(s.size() == i);
-
-                exempt_ptr gp{ s.extract(hasher(i - 1)) };
-                CPPUNIT_ASSERT(gp);
-                CPPUNIT_ASSERT(gp->key == i - 1);
-                CPPUNIT_ASSERT(gp->hash == hasher(i - 1));
-                CPPUNIT_ASSERT(!s.contains(hasher(i - 1)));
-
-                {
-                    rcu_lock l;
-                    value_type * p = s.get(hasher(i - 1));
-                    CPPUNIT_ASSERT( p == nullptr );
-                }
-                CPPUNIT_ASSERT(s.size() == i - 1);
-            }
-            CPPUNIT_ASSERT(s.empty());
-            CPPUNIT_ASSERT(s.size() == 0);
-
-            CPPUNIT_MSG(s.statistics());
-        }
-
-        void hp_nohash();
-        void hp_nohash_stat();
-        void hp_nohash_5_3();
-        void hp_nohash_5_3_stat();
-        void hp_stdhash();
-        void hp_stdhash_stat();
-        void hp_stdhash_5_3();
-        void hp_stdhash_5_3_stat();
-        void hp_hash128();
-        void hp_hash128_stat();
-        void hp_hash128_4_3();
-        void hp_hash128_4_3_stat();
-
-        void dhp_nohash();
-        void dhp_nohash_stat();
-        void dhp_nohash_5_3();
-        void dhp_nohash_5_3_stat();
-        void dhp_stdhash();
-        void dhp_stdhash_stat();
-        void dhp_stdhash_5_3();
-        void dhp_stdhash_5_3_stat();
-        void dhp_hash128();
-        void dhp_hash128_stat();
-        void dhp_hash128_4_3();
-        void dhp_hash128_4_3_stat();
-
-        void rcu_gpi_nohash();
-        void rcu_gpi_nohash_stat();
-        void rcu_gpi_nohash_5_3();
-        void rcu_gpi_nohash_5_3_stat();
-        void rcu_gpi_stdhash();
-        void rcu_gpi_stdhash_stat();
-        void rcu_gpi_stdhash_5_3();
-        void rcu_gpi_stdhash_5_3_stat();
-        void rcu_gpi_hash128();
-        void rcu_gpi_hash128_stat();
-        void rcu_gpi_hash128_4_3();
-        void rcu_gpi_hash128_4_3_stat();
-
-        void rcu_gpb_nohash();
-        void rcu_gpb_nohash_stat();
-        void rcu_gpb_nohash_5_3();
-        void rcu_gpb_nohash_5_3_stat();
-        void rcu_gpb_stdhash();
-        void rcu_gpb_stdhash_stat();
-        void rcu_gpb_stdhash_5_3();
-        void rcu_gpb_stdhash_5_3_stat();
-        void rcu_gpb_hash128();
-        void rcu_gpb_hash128_stat();
-        void rcu_gpb_hash128_4_3();
-        void rcu_gpb_hash128_4_3_stat();
-
-        void rcu_gpt_nohash();
-        void rcu_gpt_nohash_stat();
-        void rcu_gpt_nohash_5_3();
-        void rcu_gpt_nohash_5_3_stat();
-        void rcu_gpt_stdhash();
-        void rcu_gpt_stdhash_stat();
-        void rcu_gpt_stdhash_5_3();
-        void rcu_gpt_stdhash_5_3_stat();
-        void rcu_gpt_hash128();
-        void rcu_gpt_hash128_stat();
-        void rcu_gpt_hash128_4_3();
-        void rcu_gpt_hash128_4_3_stat();
-
-        void rcu_shb_nohash();
-        void rcu_shb_nohash_stat();
-        void rcu_shb_nohash_5_3();
-        void rcu_shb_nohash_5_3_stat();
-        void rcu_shb_stdhash();
-        void rcu_shb_stdhash_stat();
-        void rcu_shb_stdhash_5_3();
-        void rcu_shb_stdhash_5_3_stat();
-        void rcu_shb_hash128();
-        void rcu_shb_hash128_stat();
-        void rcu_shb_hash128_4_3();
-        void rcu_shb_hash128_4_3_stat();
-
-        void rcu_sht_nohash();
-        void rcu_sht_nohash_stat();
-        void rcu_sht_nohash_5_3();
-        void rcu_sht_nohash_5_3_stat();
-        void rcu_sht_stdhash();
-        void rcu_sht_stdhash_stat();
-        void rcu_sht_stdhash_5_3();
-        void rcu_sht_stdhash_5_3_stat();
-        void rcu_sht_hash128();
-        void rcu_sht_hash128_stat();
-        void rcu_sht_hash128_4_3();
-        void rcu_sht_hash128_4_3_stat();
-
-        CPPUNIT_TEST_SUITE(FeldmanHashSetHdrTest)
-            CPPUNIT_TEST(hp_nohash)
-            CPPUNIT_TEST(hp_nohash_stat)
-            CPPUNIT_TEST(hp_nohash_5_3)
-            CPPUNIT_TEST(hp_nohash_5_3_stat)
-            CPPUNIT_TEST(hp_stdhash)
-            CPPUNIT_TEST(hp_stdhash_stat)
-            CPPUNIT_TEST(hp_stdhash_5_3)
-            CPPUNIT_TEST(hp_stdhash_5_3_stat)
-            CPPUNIT_TEST(hp_hash128)
-            CPPUNIT_TEST(hp_hash128_stat)
-            CPPUNIT_TEST(hp_hash128_4_3)
-            CPPUNIT_TEST(hp_hash128_4_3_stat)
-
-            CPPUNIT_TEST(dhp_nohash)
-            CPPUNIT_TEST(dhp_nohash_stat)
-            CPPUNIT_TEST(dhp_nohash_5_3)
-            CPPUNIT_TEST(dhp_nohash_5_3_stat)
-            CPPUNIT_TEST(dhp_stdhash)
-            CPPUNIT_TEST(dhp_stdhash_stat)
-            CPPUNIT_TEST(dhp_stdhash_5_3)
-            CPPUNIT_TEST(dhp_stdhash_5_3_stat)
-            CPPUNIT_TEST(dhp_hash128)
-            CPPUNIT_TEST(dhp_hash128_stat)
-            CPPUNIT_TEST(dhp_hash128_4_3)
-            CPPUNIT_TEST(dhp_hash128_4_3_stat)
-
-            CPPUNIT_TEST(rcu_gpi_nohash)
-            CPPUNIT_TEST(rcu_gpi_nohash_stat)
-            CPPUNIT_TEST(rcu_gpi_nohash_5_3)
-            CPPUNIT_TEST(rcu_gpi_nohash_5_3_stat)
-            CPPUNIT_TEST(rcu_gpi_stdhash)
-            CPPUNIT_TEST(rcu_gpi_stdhash_stat)
-            CPPUNIT_TEST(rcu_gpi_stdhash_5_3)
-            CPPUNIT_TEST(rcu_gpi_stdhash_5_3_stat)
-            CPPUNIT_TEST(rcu_gpi_hash128)
-            CPPUNIT_TEST(rcu_gpi_hash128_stat)
-            CPPUNIT_TEST(rcu_gpi_hash128_4_3)
-            CPPUNIT_TEST(rcu_gpi_hash128_4_3_stat)
-
-            CPPUNIT_TEST(rcu_gpb_nohash)
-            CPPUNIT_TEST(rcu_gpb_nohash_stat)
-            CPPUNIT_TEST(rcu_gpb_nohash_5_3)
-            CPPUNIT_TEST(rcu_gpb_nohash_5_3_stat)
-            CPPUNIT_TEST(rcu_gpb_stdhash)
-            CPPUNIT_TEST(rcu_gpb_stdhash_stat)
-            CPPUNIT_TEST(rcu_gpb_stdhash_5_3)
-            CPPUNIT_TEST(rcu_gpb_stdhash_5_3_stat)
-            CPPUNIT_TEST(rcu_gpb_hash128)
-            CPPUNIT_TEST(rcu_gpb_hash128_stat)
-            CPPUNIT_TEST(rcu_gpb_hash128_4_3)
-            CPPUNIT_TEST(rcu_gpb_hash128_4_3_stat)
-
-            CPPUNIT_TEST(rcu_gpt_nohash)
-            CPPUNIT_TEST(rcu_gpt_nohash_stat)
-            CPPUNIT_TEST(rcu_gpt_nohash_5_3)
-            CPPUNIT_TEST(rcu_gpt_nohash_5_3_stat)
-            CPPUNIT_TEST(rcu_gpt_stdhash)
-            CPPUNIT_TEST(rcu_gpt_stdhash_stat)
-            CPPUNIT_TEST(rcu_gpt_stdhash_5_3)
-            CPPUNIT_TEST(rcu_gpt_stdhash_5_3_stat)
-            CPPUNIT_TEST(rcu_gpt_hash128)
-            CPPUNIT_TEST(rcu_gpt_hash128_stat)
-            CPPUNIT_TEST(rcu_gpt_hash128_4_3)
-            CPPUNIT_TEST(rcu_gpt_hash128_4_3_stat)
-
-            CPPUNIT_TEST(rcu_shb_nohash)
-            CPPUNIT_TEST(rcu_shb_nohash_stat)
-            CPPUNIT_TEST(rcu_shb_nohash_5_3)
-            CPPUNIT_TEST(rcu_shb_nohash_5_3_stat)
-            CPPUNIT_TEST(rcu_shb_stdhash)
-            CPPUNIT_TEST(rcu_shb_stdhash_stat)
-            CPPUNIT_TEST(rcu_shb_stdhash_5_3)
-            CPPUNIT_TEST(rcu_shb_stdhash_5_3_stat)
-            CPPUNIT_TEST(rcu_shb_hash128)
-            CPPUNIT_TEST(rcu_shb_hash128_stat)
-            CPPUNIT_TEST(rcu_shb_hash128_4_3)
-            CPPUNIT_TEST(rcu_shb_hash128_4_3_stat)
-
-            CPPUNIT_TEST(rcu_sht_nohash)
-            CPPUNIT_TEST(rcu_sht_nohash_stat)
-            CPPUNIT_TEST(rcu_sht_nohash_5_3)
-            CPPUNIT_TEST(rcu_sht_nohash_5_3_stat)
-            CPPUNIT_TEST(rcu_sht_stdhash)
-            CPPUNIT_TEST(rcu_sht_stdhash_stat)
-            CPPUNIT_TEST(rcu_sht_stdhash_5_3)
-            CPPUNIT_TEST(rcu_sht_stdhash_5_3_stat)
-            CPPUNIT_TEST(rcu_sht_hash128)
-            CPPUNIT_TEST(rcu_sht_hash128_stat)
-            CPPUNIT_TEST(rcu_sht_hash128_4_3)
-            CPPUNIT_TEST(rcu_sht_hash128_4_3_stat)
-        CPPUNIT_TEST_SUITE_END()
-    };
-
-} // namespace set
-
-#endif // #ifndef CDSTEST_HDR_FELDMAN_HASHSET_H
diff --git a/tests/test-hdr/set/hdr_feldman_hashset_dhp.cpp b/tests/test-hdr/set/hdr_feldman_hashset_dhp.cpp
deleted file mode 100644 (file)
index 672c140..0000000
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_feldman_hashset.h"
-#include <cds/container/feldman_hashset_dhp.h>
-#include "unit/print_feldman_hashset_stat.h"
-
-namespace set {
-    namespace {
-        typedef cds::gc::DHP gc_type;
-    } // namespace
-
-    void FeldmanHashSetHdrTest::dhp_nohash()
-    {
-        typedef size_t key_type;
-
-        struct traits : public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_hp<set_type, nohash<key_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_key<key_type>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, nohash<key_type>>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::dhp_stdhash()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_hp<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, std::hash<hash_type>>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::dhp_hash128()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef hash128::less less;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash128!!!" );
-        test_hp<set_type, hash128::make>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , co::less< hash_type::less >
-            >::type
-        > set_type2;
-        test_hp<set_type2, hash128::make>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::dhp_nohash_stat()
-    {
-        typedef size_t key_type;
-
-        struct traits : public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_hp<set_type, nohash<key_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_key<key_type>>
-                , co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, nohash<key_type>>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::dhp_stdhash_stat()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_hp<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, std::hash<hash_type>>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::dhp_hash128_stat()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef hash128::cmp  compare;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_hp<set_type, hash_type::make>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-                ,co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_hp<set_type2, hash_type::make>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::dhp_nohash_5_3()
-    {
-        typedef size_t key_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_hp<set_type, nohash<key_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_key<key_type>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, nohash<key_type>>(5, 3);
-    }
-
-    void FeldmanHashSetHdrTest::dhp_stdhash_5_3()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_hp<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, std::hash<hash_type>>(5, 3);
-    }
-
-    void FeldmanHashSetHdrTest::dhp_hash128_4_3()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_hp<set_type, hash128::make >(4, 3);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        > set_type2;
-        test_hp<set_type2, hash128::make >(4, 3);
-    }
-
-    void FeldmanHashSetHdrTest::dhp_nohash_5_3_stat()
-    {
-        typedef size_t key_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_hp<set_type, nohash<key_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_key<key_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, nohash<key_type>>(5, 3);
-    }
-
-    void FeldmanHashSetHdrTest::dhp_stdhash_5_3_stat()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_hp<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, std::hash<hash_type>>(5, 3);
-    }
-
-    void FeldmanHashSetHdrTest::dhp_hash128_4_3_stat()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-            typedef hash128::less less;
-            typedef hash128::cmp compare;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_hp<set_type, hash_type::make>(4, 3);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , co::stat< cc::feldman_hashset::stat<>>
-                , co::less< hash_type::less >
-                , co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_hp<set_type2, hash_type::make>(4, 3);
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_feldman_hashset_hp.cpp b/tests/test-hdr/set/hdr_feldman_hashset_hp.cpp
deleted file mode 100644 (file)
index 389de08..0000000
+++ /dev/null
@@ -1,329 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_feldman_hashset.h"
-#include <cds/container/feldman_hashset_hp.h>
-#include "unit/print_feldman_hashset_stat.h"
-
-namespace set {
-    namespace {
-        typedef cds::gc::HP gc_type;
-    } // namespace
-
-    void FeldmanHashSetHdrTest::hp_nohash()
-    {
-        typedef size_t key_type;
-
-        struct traits : public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_hp<set_type, nohash<key_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-            cc::feldman_hashset::hash_accessor< get_key<key_type>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, nohash<key_type>>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::hp_stdhash()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_hp<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, std::hash<hash_type>>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::hp_hash128()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef hash128::less less;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash128!!!" );
-        test_hp<set_type, hash128::make>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , co::less< hash_type::less >
-            >::type
-        > set_type2;
-        test_hp<set_type2, hash128::make>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::hp_nohash_stat()
-    {
-        typedef size_t key_type;
-
-        struct traits : public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_hp<set_type, nohash<key_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-            cc::feldman_hashset::hash_accessor< get_key<key_type>>
-            , co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, nohash<key_type>>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::hp_stdhash_stat()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_hp<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, std::hash<hash_type>>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::hp_hash128_stat()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef hash128::cmp  compare;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_hp<set_type, hash_type::make>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-                ,co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_hp<set_type2, hash_type::make>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::hp_nohash_5_3()
-    {
-        typedef size_t key_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_hp<set_type, nohash<key_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_key<key_type>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, nohash<key_type>>(5, 3);
-    }
-
-    void FeldmanHashSetHdrTest::hp_stdhash_5_3()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_hp<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, std::hash<hash_type>>(5, 3);
-    }
-
-    void FeldmanHashSetHdrTest::hp_hash128_4_3()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_hp<set_type, hash128::make >(4, 3);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        > set_type2;
-        test_hp<set_type2, hash128::make >(4, 3);
-    }
-
-    void FeldmanHashSetHdrTest::hp_nohash_5_3_stat()
-    {
-        typedef size_t key_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_hp<set_type, nohash<key_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_key<key_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, nohash<key_type>>(5, 3);
-    }
-
-    void FeldmanHashSetHdrTest::hp_stdhash_5_3_stat()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_hp<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, std::hash<hash_type>>(5, 3);
-    }
-
-    void FeldmanHashSetHdrTest::hp_hash128_4_3_stat()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-            typedef hash128::less less;
-            typedef hash128::cmp compare;
-        };
-        typedef cc::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_hp<set_type, hash_type::make>(4, 3);
-
-        typedef cc::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , co::stat< cc::feldman_hashset::stat<>>
-                , co::less< hash_type::less >
-                , co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_hp<set_type2, hash_type::make>(4, 3);
-    }
-
-
-} // namespace set
-
-CPPUNIT_TEST_SUITE_REGISTRATION(set::FeldmanHashSetHdrTest);
diff --git a/tests/test-hdr/set/hdr_feldman_hashset_rcu_gpb.cpp b/tests/test-hdr/set/hdr_feldman_hashset_rcu_gpb.cpp
deleted file mode 100644 (file)
index e8374c2..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_feldman_hashset.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/container/feldman_hashset_rcu.h>
-#include "unit/print_feldman_hashset_stat.h"
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc<cds::urcu::general_buffered<>> rcu_type;
-    } // namespace
-
-    void FeldmanHashSetHdrTest::rcu_gpb_nohash()
-    {
-        typedef size_t key_type;
-
-        struct traits : public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-            cc::feldman_hashset::hash_accessor< get_key<key_type>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpb_stdhash()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpb_hash128()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef hash128::less less;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash128!!!" );
-        test_rcu<set_type, hash128::make>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , co::less< hash_type::less >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash128::make>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpb_nohash_stat()
-    {
-        typedef size_t key_type;
-
-        struct traits : public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-            cc::feldman_hashset::hash_accessor< get_key<key_type>>
-            , co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpb_stdhash_stat()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpb_hash128_stat()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef hash128::cmp  compare;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash_type::make>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-                ,co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash_type::make>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpb_nohash_5_3()
-    {
-        typedef size_t key_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, nohash<key_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_key<key_type>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(5, 3);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpb_stdhash_5_3()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(5, 3);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpb_hash128_4_3()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash128::make >(4, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash128::make >(4, 3);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpb_nohash_5_3_stat()
-    {
-        typedef size_t key_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, nohash<key_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_key<key_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(5, 3);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpb_stdhash_5_3_stat()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(5, 3);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpb_hash128_4_3_stat()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-            typedef hash128::less less;
-            typedef hash128::cmp compare;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash_type::make>(4, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , co::stat< cc::feldman_hashset::stat<>>
-                , co::less< hash_type::less >
-                , co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash_type::make>(4, 3);
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_feldman_hashset_rcu_gpi.cpp b/tests/test-hdr/set/hdr_feldman_hashset_rcu_gpi.cpp
deleted file mode 100644 (file)
index ea898e1..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_feldman_hashset.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/container/feldman_hashset_rcu.h>
-#include "unit/print_feldman_hashset_stat.h"
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc<cds::urcu::general_instant<>> rcu_type;
-    } // namespace
-
-    void FeldmanHashSetHdrTest::rcu_gpi_nohash()
-    {
-        typedef size_t key_type;
-
-        struct traits : public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-            cc::feldman_hashset::hash_accessor< get_key<key_type>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpi_stdhash()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpi_hash128()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef hash128::less less;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash128!!!" );
-        test_rcu<set_type, hash128::make>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , co::less< hash_type::less >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash128::make>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpi_nohash_stat()
-    {
-        typedef size_t key_type;
-
-        struct traits : public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-            cc::feldman_hashset::hash_accessor< get_key<key_type>>
-            , co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpi_stdhash_stat()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpi_hash128_stat()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef hash128::cmp  compare;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash_type::make>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-                ,co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash_type::make>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpi_nohash_5_3()
-    {
-        typedef size_t key_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, nohash<key_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_key<key_type>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(5, 3);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpi_stdhash_5_3()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(5, 3);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpi_hash128_4_3()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash128::make >(4, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash128::make >(4, 3);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpi_nohash_5_3_stat()
-    {
-        typedef size_t key_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, nohash<key_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_key<key_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(5, 3);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpi_stdhash_5_3_stat()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(5, 3);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpi_hash128_4_3_stat()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-            typedef hash128::less less;
-            typedef hash128::cmp compare;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash_type::make>(4, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , co::stat< cc::feldman_hashset::stat<>>
-                , co::less< hash_type::less >
-                , co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash_type::make>(4, 3);
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_feldman_hashset_rcu_gpt.cpp b/tests/test-hdr/set/hdr_feldman_hashset_rcu_gpt.cpp
deleted file mode 100644 (file)
index bc627f4..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_feldman_hashset.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/container/feldman_hashset_rcu.h>
-#include "unit/print_feldman_hashset_stat.h"
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc<cds::urcu::general_threaded<>> rcu_type;
-    } // namespace
-
-    void FeldmanHashSetHdrTest::rcu_gpt_nohash()
-    {
-        typedef size_t key_type;
-
-        struct traits : public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-            cc::feldman_hashset::hash_accessor< get_key<key_type>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpt_stdhash()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpt_hash128()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef hash128::less less;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash128!!!" );
-        test_rcu<set_type, hash128::make>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , co::less< hash_type::less >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash128::make>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpt_nohash_stat()
-    {
-        typedef size_t key_type;
-
-        struct traits : public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-            cc::feldman_hashset::hash_accessor< get_key<key_type>>
-            , co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpt_stdhash_stat()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpt_hash128_stat()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef hash128::cmp  compare;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash_type::make>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-                ,co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash_type::make>(4, 2);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpt_nohash_5_3()
-    {
-        typedef size_t key_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, nohash<key_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_key<key_type>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(5, 3);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpt_stdhash_5_3()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(5, 3);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpt_hash128_4_3()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash128::make >(4, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash128::make >(4, 3);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpt_nohash_5_3_stat()
-    {
-        typedef size_t key_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, nohash<key_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_key<key_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(5, 3);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpt_stdhash_5_3_stat()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(5, 3);
-    }
-
-    void FeldmanHashSetHdrTest::rcu_gpt_hash128_4_3_stat()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-            typedef hash128::less less;
-            typedef hash128::cmp compare;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash_type::make>(4, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , co::stat< cc::feldman_hashset::stat<>>
-                , co::less< hash_type::less >
-                , co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash_type::make>(4, 3);
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_feldman_hashset_rcu_shb.cpp b/tests/test-hdr/set/hdr_feldman_hashset_rcu_shb.cpp
deleted file mode 100644 (file)
index 07b3ffc..0000000
+++ /dev/null
@@ -1,352 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_feldman_hashset.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/container/feldman_hashset_rcu.h>
-#include "unit/print_feldman_hashset_stat.h"
-
-namespace set {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc<cds::urcu::signal_buffered<>> rcu_type;
-    } // namespace
-#endif
-
-    void FeldmanHashSetHdrTest::rcu_shb_nohash()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t key_type;
-
-        struct traits : public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-            cc::feldman_hashset::hash_accessor< get_key<key_type>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(4, 2);
-#endif
-    }
-
-    void FeldmanHashSetHdrTest::rcu_shb_stdhash()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(4, 2);
-#endif
-    }
-
-    void FeldmanHashSetHdrTest::rcu_shb_hash128()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef hash128::less less;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash128!!!" );
-        test_rcu<set_type, hash128::make>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , co::less< hash_type::less >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash128::make>(4, 2);
-#endif
-    }
-
-    void FeldmanHashSetHdrTest::rcu_shb_nohash_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t key_type;
-
-        struct traits : public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-            cc::feldman_hashset::hash_accessor< get_key<key_type>>
-            , co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(4, 2);
-#endif
-    }
-
-    void FeldmanHashSetHdrTest::rcu_shb_stdhash_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(4, 2);
-#endif
-    }
-
-    void FeldmanHashSetHdrTest::rcu_shb_hash128_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef hash128::cmp  compare;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash_type::make>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-                ,co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash_type::make>(4, 2);
-#endif
-    }
-
-    void FeldmanHashSetHdrTest::rcu_shb_nohash_5_3()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t key_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, nohash<key_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_key<key_type>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(5, 3);
-#endif
-    }
-
-    void FeldmanHashSetHdrTest::rcu_shb_stdhash_5_3()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(5, 3);
-#endif
-    }
-
-    void FeldmanHashSetHdrTest::rcu_shb_hash128_4_3()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash128::make >(4, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash128::make >(4, 3);
-#endif
-    }
-
-    void FeldmanHashSetHdrTest::rcu_shb_nohash_5_3_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t key_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, nohash<key_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_key<key_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(5, 3);
-#endif
-    }
-
-    void FeldmanHashSetHdrTest::rcu_shb_stdhash_5_3_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(5, 3);
-#endif
-    }
-
-    void FeldmanHashSetHdrTest::rcu_shb_hash128_4_3_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-            typedef hash128::less less;
-            typedef hash128::cmp compare;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash_type::make>(4, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , co::stat< cc::feldman_hashset::stat<>>
-                , co::less< hash_type::less >
-                , co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash_type::make>(4, 3);
-#endif
-    }
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_feldman_hashset_rcu_sht.cpp b/tests/test-hdr/set/hdr_feldman_hashset_rcu_sht.cpp
deleted file mode 100644 (file)
index 73d7bae..0000000
+++ /dev/null
@@ -1,352 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_feldman_hashset.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/container/feldman_hashset_rcu.h>
-#include "unit/print_feldman_hashset_stat.h"
-
-namespace set {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc<cds::urcu::signal_threaded<>> rcu_type;
-    } // namespace
-#endif
-
-    void FeldmanHashSetHdrTest::rcu_sht_nohash()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t key_type;
-
-        struct traits : public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-            cc::feldman_hashset::hash_accessor< get_key<key_type>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(4, 2);
-#endif
-    }
-
-    void FeldmanHashSetHdrTest::rcu_sht_stdhash()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(4, 2);
-#endif
-    }
-
-    void FeldmanHashSetHdrTest::rcu_sht_hash128()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef hash128::less less;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash128!!!" );
-        test_rcu<set_type, hash128::make>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , co::less< hash_type::less >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash128::make>(4, 2);
-#endif
-    }
-
-    void FeldmanHashSetHdrTest::rcu_sht_nohash_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t key_type;
-
-        struct traits : public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-            cc::feldman_hashset::hash_accessor< get_key<key_type>>
-            , co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(4, 2);
-#endif
-    }
-
-    void FeldmanHashSetHdrTest::rcu_sht_stdhash_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(4, 2);
-#endif
-    }
-
-    void FeldmanHashSetHdrTest::rcu_sht_hash128_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef hash128::cmp  compare;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash_type::make>(4, 2);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-                ,co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash_type::make>(4, 2);
-#endif
-    }
-
-    void FeldmanHashSetHdrTest::rcu_sht_nohash_5_3()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t key_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, nohash<key_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_key<key_type>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(5, 3);
-#endif
-    }
-
-    void FeldmanHashSetHdrTest::rcu_sht_stdhash_5_3()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(5, 3);
-#endif
-    }
-
-    void FeldmanHashSetHdrTest::rcu_sht_hash128_4_3()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash128::make >(4, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash128::make >(4, 3);
-#endif
-    }
-
-    void FeldmanHashSetHdrTest::rcu_sht_nohash_5_3_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t key_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, nohash<key_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_key<key_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(5, 3);
-#endif
-    }
-
-    void FeldmanHashSetHdrTest::rcu_sht_stdhash_5_3_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                ,co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(5, 3);
-#endif
-    }
-
-    void FeldmanHashSetHdrTest::rcu_sht_hash128_4_3_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef hash128 hash_type;
-
-        struct traits: public cc::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef cc::feldman_hashset::stat<> stat;
-            typedef hash128::less less;
-            typedef hash128::cmp compare;
-        };
-        typedef cc::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash_type::make>(4, 3);
-
-        typedef cc::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename cc::feldman_hashset::make_traits<
-                cc::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , co::stat< cc::feldman_hashset::stat<>>
-                , co::less< hash_type::less >
-                , co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash_type::make>(4, 3);
-#endif
-    }
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_cuckoo_refinable_set.cpp b/tests/test-hdr/set/hdr_intrusive_cuckoo_refinable_set.cpp
deleted file mode 100644 (file)
index 94a8a4e..0000000
+++ /dev/null
@@ -1,674 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_cuckoo_set.h"
-#include <cds/intrusive/cuckoo_set.h>
-
-#include "set/intrusive_cuckoo_set_common.h"
-#include "../unit/print_cuckoo_stat.h"
-
-namespace set {
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_list_basehook_equal()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::list, 0 > >  item_type;
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                co::hash< std::tuple< hash1, hash2 > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::equal_to< equal_to<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_vector_basehook_equal()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 0 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::equal_to< equal_to<item_type> >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_list_basehook_sort_cmp()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::list, 0 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_vector_basehook_sort_cmp()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 0 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_list_basehook_sort_less()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::list, 0 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_vector_basehook_sort_less()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 0 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_list_basehook_sort_cmpmix()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::list, 0 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_vector_basehook_sort_cmpmix()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::vector<8>, 0 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_vector_basehook_sort_cmpmix_stat()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::vector<8>, 0 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-                ,co::stat< ci::cuckoo::stat >
-            >::type
-        > set_type;
-
-        unsigned int nProbesetSize = set_type::node_type::probeset_size ? set_type::node_type::probeset_size : 4;
-        set_type s( 256, nProbesetSize, nProbesetSize / 2 );
-        test_with( s );
-        CPPUNIT_MSG( s.statistics() << s.mutex_policy_statistics() );
-    }
-
-
-    // base hook, store hash
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_list_basehook_equal_storehash()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::list, 2 > >  item_type;
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                    ,ci::cuckoo::store_hash< item_type::hash_array_size >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::equal_to< equal_to<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_vector_basehook_equal_storehash()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 2 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                    ,ci::cuckoo::store_hash< item_type::hash_array_size >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::equal_to< equal_to<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_list_basehook_sort_cmp_storehash()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::list, 2 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                    ,ci::cuckoo::store_hash< item_type::hash_array_size >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_vector_basehook_sort_cmp_storehash()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 2 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                    ,ci::cuckoo::store_hash< item_type::hash_array_size >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_list_basehook_sort_less_storehash()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::list, 2 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                    ,ci::cuckoo::store_hash< item_type::hash_array_size >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_vector_basehook_sort_less_storehash()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 2 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                    ,ci::cuckoo::store_hash< item_type::hash_array_size >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_list_basehook_sort_cmpmix_storehash()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::list, 2 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                    ,ci::cuckoo::store_hash< item_type::hash_array_size >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_vector_basehook_sort_cmpmix_storehash()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::vector<8>, 2 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                    ,ci::cuckoo::store_hash< item_type::hash_array_size >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-
-    // Member hook
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_list_memberhook_equal()
-    {
-        typedef IntrusiveCuckooSetHdrTest::member_item< ci::cuckoo::node< ci::cuckoo::list, 0 > >  item_type;
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember)> >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::equal_to< equal_to<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_vector_memberhook_equal()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::vector<4>, 0 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::equal_to< equal_to<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_list_memberhook_sort_cmp()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::list, 0 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_vector_memberhook_sort_cmp()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::vector<4>, 0 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_list_memberhook_sort_less()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::list, 0 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_vector_memberhook_sort_less()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::vector<4>, 0 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_list_memberhook_sort_cmpmix()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::list, 0 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_vector_memberhook_sort_cmpmix()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::vector<8>, 0 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-
-    // member hook, store hash
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_list_memberhook_equal_storehash()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::list, 2 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                    ,ci::cuckoo::store_hash< node_type::hash_array_size >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::equal_to< equal_to<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_vector_memberhook_equal_storehash()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::vector<4>, 2 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                    ,ci::cuckoo::store_hash< node_type::hash_array_size >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::equal_to< equal_to<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_list_memberhook_sort_cmp_storehash()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::list, 2 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                    ,ci::cuckoo::store_hash< node_type::hash_array_size >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_vector_memberhook_sort_cmp_storehash()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::vector<4>, 2 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                    ,ci::cuckoo::store_hash< node_type::hash_array_size >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_list_memberhook_sort_less_storehash()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::list, 2 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                    ,ci::cuckoo::store_hash< node_type::hash_array_size >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_vector_memberhook_sort_less_storehash()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::vector<4>, 2 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                    ,ci::cuckoo::store_hash< node_type::hash_array_size >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_list_memberhook_sort_cmpmix_storehash()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::list, 2 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                    ,ci::cuckoo::store_hash< node_type::hash_array_size >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_refinable_vector_memberhook_sort_cmpmix_storehash()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::vector<8>, 2 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                    ,ci::cuckoo::store_hash< node_type::hash_array_size >
-                > >
-                ,co::mutex_policy< ci::cuckoo::refinable<> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-}   // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_cuckoo_set.cpp b/tests/test-hdr/set/hdr_intrusive_cuckoo_set.cpp
deleted file mode 100644 (file)
index ea06a34..0000000
+++ /dev/null
@@ -1,639 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_cuckoo_set.h"
-#include <cds/intrusive/cuckoo_set.h>
-
-#include "set/intrusive_cuckoo_set_common.h"
-#include "../unit/print_cuckoo_stat.h"
-
-namespace set {
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_list_basehook_equal()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::list, 0 > >  item_type;
-        struct set_traits : public ci::cuckoo::traits {
-            typedef co::hash_tuple< hash1, hash2 > hash;
-            typedef set::equal_to<item_type> equal_to;
-        };
-        typedef ci::CuckooSet< item_type, set_traits > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_vector_basehook_equal()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 0 > >  item_type;
-
-        struct set_traits : public ci::cuckoo::traits {
-            typedef ci::cuckoo::base_hook< ci::cuckoo::probeset_type< item_type::probeset_type >> hook;
-            typedef co::hash_tuple< hash1, hash2 > hash;
-            typedef set::equal_to<item_type> equal_to;
-        };
-        typedef ci::CuckooSet< item_type, set_traits > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_list_basehook_sort_cmp()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::list, 0 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_vector_basehook_sort_cmp()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 0 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_list_basehook_sort_less()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::list, 0 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_vector_basehook_sort_less()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 0 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_list_basehook_sort_cmpmix()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::list, 0 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_vector_basehook_sort_cmpmix()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::vector<8>, 0 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_vector_basehook_sort_cmpmix_stat()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::vector<8>, 0 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-                ,co::stat< ci::cuckoo::stat >
-            >::type
-        > set_type;
-
-        unsigned int nProbesetSize = set_type::node_type::probeset_size ? set_type::node_type::probeset_size : 4;
-        set_type s( 256, nProbesetSize, nProbesetSize / 2 );
-        test_with( s );
-        CPPUNIT_MSG( s.statistics() << s.mutex_policy_statistics() );
-    }
-
-
-    // base hook, store hash
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_list_basehook_equal_storehash()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::list, 2 > >  item_type;
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                    ,ci::cuckoo::store_hash< item_type::hash_array_size >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::equal_to< equal_to<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_vector_basehook_equal_storehash()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 2 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                    ,ci::cuckoo::store_hash< item_type::hash_array_size >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::equal_to< equal_to<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_list_basehook_sort_cmp_storehash()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::list, 2 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                    ,ci::cuckoo::store_hash< item_type::hash_array_size >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_vector_basehook_sort_cmp_storehash()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 2 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                    ,ci::cuckoo::store_hash< item_type::hash_array_size >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_list_basehook_sort_less_storehash()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::list, 2 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                    ,ci::cuckoo::store_hash< item_type::hash_array_size >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_vector_basehook_sort_less_storehash()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::vector<4>, 2 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                    ,ci::cuckoo::store_hash< item_type::hash_array_size >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_list_basehook_sort_cmpmix_storehash()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::list, 2 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                    ,ci::cuckoo::store_hash< item_type::hash_array_size >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_vector_basehook_sort_cmpmix_storehash()
-    {
-        typedef IntrusiveCuckooSetHdrTest::base_item< ci::cuckoo::node< ci::cuckoo::vector<8>, 2 > >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::base_hook<
-                    ci::cuckoo::probeset_type< item_type::probeset_type >
-                    ,ci::cuckoo::store_hash< item_type::hash_array_size >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-
-    // Member hook
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_list_memberhook_equal()
-    {
-        typedef IntrusiveCuckooSetHdrTest::member_item< ci::cuckoo::node< ci::cuckoo::list, 0 > >  item_type;
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember)> >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::equal_to< equal_to<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_vector_memberhook_equal()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::vector<4>, 0 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::equal_to< equal_to<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_list_memberhook_sort_cmp()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::list, 0 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_vector_memberhook_sort_cmp()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::vector<4>, 0 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_list_memberhook_sort_less()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::list, 0 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_vector_memberhook_sort_less()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::vector<4>, 0 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_list_memberhook_sort_cmpmix()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::list, 0 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_vector_memberhook_sort_cmpmix()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::vector<8>, 0 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-
-    // member hook, store hash
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_list_memberhook_equal_storehash()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::list, 2 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                    ,ci::cuckoo::store_hash< node_type::hash_array_size >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::equal_to< equal_to<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_vector_memberhook_equal_storehash()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::vector<4>, 2 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                    ,ci::cuckoo::store_hash< node_type::hash_array_size >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::equal_to< equal_to<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_list_memberhook_sort_cmp_storehash()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::list, 2 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                    ,ci::cuckoo::store_hash< node_type::hash_array_size >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_vector_memberhook_sort_cmp_storehash()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::vector<4>, 2 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                    ,ci::cuckoo::store_hash< node_type::hash_array_size >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_list_memberhook_sort_less_storehash()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::list, 2 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                    ,ci::cuckoo::store_hash< node_type::hash_array_size >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_vector_memberhook_sort_less_storehash()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::vector<4>, 2 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                    ,ci::cuckoo::store_hash< node_type::hash_array_size >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_list_memberhook_sort_cmpmix_storehash()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::list, 2 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                    ,ci::cuckoo::store_hash< node_type::hash_array_size >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-    void IntrusiveCuckooSetHdrTest::Cuckoo_striped_vector_memberhook_sort_cmpmix_storehash()
-    {
-        typedef ci::cuckoo::node< ci::cuckoo::vector<8>, 2 > node_type;
-        typedef IntrusiveCuckooSetHdrTest::member_item< node_type >  item_type;
-
-        typedef ci::CuckooSet< item_type
-            ,ci::cuckoo::make_traits<
-                ci::opt::hook< ci::cuckoo::member_hook< offsetof(item_type, hMember),
-                    ci::cuckoo::probeset_type< node_type::probeset_type >
-                    ,ci::cuckoo::store_hash< node_type::hash_array_size >
-                > >
-                ,co::hash< std::tuple< hash1, hash2 > >
-                ,co::less< IntrusiveCuckooSetHdrTest::less<item_type> >
-                ,co::compare< IntrusiveCuckooSetHdrTest::cmp<item_type> >
-            >::type
-        > set_type;
-
-        test_cuckoo<set_type>();
-    }
-
-}   // namespace set
-
-CPPUNIT_TEST_SUITE_REGISTRATION(set::IntrusiveCuckooSetHdrTest);
diff --git a/tests/test-hdr/set/hdr_intrusive_cuckoo_set.h b/tests/test-hdr/set/hdr_intrusive_cuckoo_set.h
deleted file mode 100644 (file)
index 064a86a..0000000
+++ /dev/null
@@ -1,687 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_INTRUSIVE_CUCKOO_SET_H
-#define CDSTEST_HDR_INTRUSIVE_CUCKOO_SET_H
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/opt/hash.h>
-
-// cds::intrusive namespace forward declaration
-namespace cds { namespace intrusive {}}
-
-namespace set {
-    namespace ci = cds::intrusive;
-    namespace co = cds::opt;
-
-    // MichaelHashSet
-    class IntrusiveCuckooSetHdrTest: public CppUnitMini::TestCase
-    {
-    public:
-        struct stat
-        {
-            unsigned int nDisposeCount  ;   // count of disposer calling
-            unsigned int nFindCount     ;   // count of find-functor calling
-            unsigned int nFindArgCount;
-            unsigned int nInsertCount;
-            unsigned int nEnsureNewCount;
-            unsigned int nEnsureCount;
-            unsigned int nEraseCount;
-
-            stat()
-            {
-                memset( this, 0, sizeof(*this));
-            }
-
-            stat& operator=( stat const& s)
-            {
-                memcpy( this, &s, sizeof(*this));
-                return *this;
-            }
-        };
-
-        struct item
-        {
-            int nKey;
-            int nVal;
-
-            item()
-            {}
-
-            item(int key, int val)
-                : nKey( key )
-                , nVal(val)
-            {}
-
-            item(const item& v )
-                : nKey( v.nKey )
-                , nVal( v.nVal )
-            {}
-
-            int key() const
-            {
-                return nKey;
-            }
-
-            int val() const
-            {
-                return nVal;
-            }
-        };
-
-        template <typename Hook>
-        struct base_item
-            : public item
-            , public Hook
-            , public stat
-
-        {
-            base_item()
-            {}
-
-            base_item(int key, int val)
-                : item( key, val )
-            {}
-
-            base_item(const base_item& v )
-                : item( static_cast<item const&>(v) )
-                , stat()
-            {}
-        };
-
-        template <typename Hook>
-        struct member_item
-            : public item
-            , public stat
-        {
-            Hook hMember;
-
-            member_item()
-            {}
-
-            member_item(int key, int val)
-                : item( key, val )
-            {}
-
-            member_item(const member_item& v )
-                : item( static_cast<item const&>(v))
-                , stat()
-            {}
-        };
-
-        struct find_key {
-            int nKey;
-
-            find_key( int key )
-                : nKey(key)
-            {}
-        };
-
-        struct hash_int {
-            size_t operator()( int i ) const
-            {
-                return co::v::hash<int>()( i );
-            }
-            template <typename Item>
-            size_t operator()( const Item& i ) const
-            {
-                return (*this)( i.key() );
-            }
-            size_t operator()( find_key const& i) const
-            {
-                return co::v::hash<int>()( i.nKey );
-            }
-        };
-
-        template <typename T>
-        struct less
-        {
-            bool operator ()(const T& v1, const T& v2 ) const
-            {
-                return v1.key() < v2.key();
-            }
-
-            template <typename Q>
-            bool operator ()(const T& v1, const Q& v2 ) const
-            {
-                return v1.key() < v2;
-            }
-
-            template <typename Q>
-            bool operator ()(const Q& v1, const T& v2 ) const
-            {
-                return v1 < v2.key();
-            }
-        };
-
-        template <typename T>
-        struct cmp {
-            int operator ()(const T& v1, const T& v2 ) const
-            {
-                if ( v1.key() < v2.key() )
-                    return -1;
-                return v1.key() > v2.key() ? 1 : 0;
-            }
-
-            template <typename Q>
-            int operator ()(const T& v1, const Q& v2 ) const
-            {
-                if ( v1.key() < v2 )
-                    return -1;
-                return v1.key() > v2 ? 1 : 0;
-            }
-
-            template <typename Q>
-            int operator ()(const Q& v1, const T& v2 ) const
-            {
-                if ( v1 < v2.key() )
-                    return -1;
-                return v1 > v2.key() ? 1 : 0;
-            }
-        };
-
-        struct faked_disposer
-        {
-            template <typename T>
-            void operator ()( T * p )
-            {
-                ++p->nDisposeCount;
-            }
-        };
-
-        struct insert_functor {
-            template <typename Item>
-            void operator()( Item& e)
-            {
-                ++e.nInsertCount;
-            }
-        };
-
-        struct update_functor {
-            template <typename Item>
-            void operator()( bool bNew, Item& e, Item& arg )
-            {
-                if ( bNew ) {
-                    ++e.nEnsureNewCount;
-                    CPPUNIT_ASSERT_CURRENT( &e == &arg );
-                }
-                else
-                    ++e.nEnsureCount;
-            }
-        };
-
-        struct erase_functor {
-            template< typename Item >
-            void operator()( Item& e )
-            {
-                ++e.nEraseCount;
-            }
-        };
-
-        struct find_functor {
-            template <typename Item, typename What>
-            void operator()( Item& e, What& )
-            {
-                ++e.nFindCount;
-            }
-
-            template <typename Item>
-            void operator()( Item& e, Item& w )
-            {
-                ++e.nFindCount;
-                ++w.nFindArgCount;
-            }
-        };
-
-        struct less2 {
-            template <typename Item>
-            bool operator()( Item const& e, find_key const& k ) const
-            {
-                return e.key() < k.nKey;
-            }
-            template <typename Item>
-            bool operator()( find_key const& k, Item const& e ) const
-            {
-                return k.nKey < e.key();
-            }
-            template <typename Item>
-            bool operator()( Item const& e, int k ) const
-            {
-                return e.key() < k;
-            }
-            template <typename Item>
-            bool operator()( int k, Item const& e ) const
-            {
-                return k < e.key();
-            }
-        };
-
-        struct equal_to2 {
-            template <typename Item>
-            bool operator()( Item const& e, find_key const& k ) const
-            {
-                return e.key() == k.nKey;
-            }
-            template <typename Item>
-            bool operator()( find_key const& k, Item const& e ) const
-            {
-                return k.nKey == e.key();
-            }
-            template <typename Item>
-            bool operator()( Item const& e, int k ) const
-            {
-                return e.key() == k;
-            }
-            template <typename Item>
-            bool operator()( int k, Item const& e ) const
-            {
-                return k == e.key();
-            }
-        };
-
-        template <typename T>
-        struct auto_dispose {
-            T * m_pArr;
-            auto_dispose( T * pArr ): m_pArr( pArr ) {}
-            ~auto_dispose() { delete[] m_pArr; }
-        };
-
-        template <class Set>
-        void test_with(Set& s)
-        {
-            typedef typename Set::value_type    value_type;
-
-            int const k1 = 10;
-            int const k2 = 25;
-            int const k3 = 51;
-
-            int const v1 = 25;
-            int const v2 = 56;
-            int const v3 = 23;
-
-            value_type e1( k1, v1 );
-            value_type e2( k2, v2 );
-            value_type e3( k3, v3);
-
-            stat s1 = e1;
-            stat s2 = e2;
-            stat s3 = e3;
-
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( s.size() == 0 );
-
-            CPPUNIT_ASSERT( !s.contains(k1));
-            CPPUNIT_ASSERT( !s.contains(k2, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type() ));
-            CPPUNIT_ASSERT( !s.contains(k3));
-
-            CPPUNIT_ASSERT( s.insert(e1));
-            CPPUNIT_ASSERT( s.contains(e1));
-            CPPUNIT_ASSERT( s.contains(k1));
-            CPPUNIT_ASSERT( s.contains(k1, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type()));
-            CPPUNIT_ASSERT( !s.contains(e2));
-            CPPUNIT_ASSERT( !s.contains(e3));
-
-            CPPUNIT_ASSERT( e2.nInsertCount == 0 );
-            CPPUNIT_ASSERT( s.insert(e2, insert_functor() ));
-            CPPUNIT_ASSERT( e2.nInsertCount == 1 );
-            CPPUNIT_ASSERT( s.find(e1, find_functor() ));
-            CPPUNIT_ASSERT( e1.nFindCount == 1 );
-            CPPUNIT_ASSERT( e1.nFindArgCount == 1 );
-            CPPUNIT_ASSERT( s.find(k1, find_functor() ));
-            CPPUNIT_ASSERT( e1.nFindCount == 2 );
-            CPPUNIT_ASSERT( e1.nFindArgCount == 1 );
-            CPPUNIT_ASSERT( s.find_with(k2, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
-            CPPUNIT_ASSERT( e2.nFindCount == 1 );
-            CPPUNIT_ASSERT( e2.nFindArgCount == 0 );
-            CPPUNIT_ASSERT( s.find(e2, find_functor() ));
-            CPPUNIT_ASSERT( e2.nFindCount == 2 );
-            CPPUNIT_ASSERT( e2.nFindArgCount == 1 );
-            CPPUNIT_ASSERT( !s.find(k3, find_functor()));
-            CPPUNIT_ASSERT( e3.nFindCount == 0 );
-            CPPUNIT_ASSERT( e3.nFindArgCount == 0 );
-            CPPUNIT_ASSERT( !s.find(e3, find_functor()));
-            CPPUNIT_ASSERT( e3.nFindCount == 0 );
-            CPPUNIT_ASSERT( e3.nFindArgCount == 0 );
-
-            s1 = e1 ; s2 = e2 ; s3 = e3;
-
-            CPPUNIT_ASSERT( e3.nEnsureNewCount == 0 );
-            CPPUNIT_ASSERT( e3.nEnsureCount == 0 );
-            CPPUNIT_ASSERT(s.update(e3, update_functor(), false) == std::make_pair(false, false));
-            CPPUNIT_ASSERT(e3.nEnsureNewCount == 0);
-            CPPUNIT_ASSERT(e3.nEnsureCount == 0);
-            CPPUNIT_ASSERT( s.update( e3, update_functor() ) == std::make_pair(true, true));
-            CPPUNIT_ASSERT( e3.nEnsureNewCount == 1 );
-            CPPUNIT_ASSERT( e3.nEnsureCount == 0 );
-            CPPUNIT_ASSERT( s.find_with(find_key(k1), typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
-            CPPUNIT_ASSERT( e1.nFindCount == s1.nFindCount + 1 );
-            CPPUNIT_ASSERT( e1.nFindArgCount == s1.nFindArgCount );
-            CPPUNIT_ASSERT( s.find_with(k1, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
-            CPPUNIT_ASSERT( e1.nFindCount == s1.nFindCount + 2 );
-            CPPUNIT_ASSERT( e1.nFindArgCount == s1.nFindArgCount );
-            CPPUNIT_ASSERT( s.find_with(k2, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
-            CPPUNIT_ASSERT( e2.nFindCount == s2.nFindCount + 1 );
-            CPPUNIT_ASSERT( e2.nFindArgCount == s2.nFindArgCount );
-            CPPUNIT_ASSERT( s.contains(find_key(k2), typename std::conditional<Set::c_isSorted, less2, equal_to2>::type() ));
-            CPPUNIT_ASSERT( e2.nFindCount == s2.nFindCount + 1 )        ;   // unchanged, no find_functor
-            CPPUNIT_ASSERT( e2.nFindArgCount == s2.nFindArgCount );
-            CPPUNIT_ASSERT( s.contains(k3, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type() ));
-            CPPUNIT_ASSERT( e3.nFindCount == s3.nFindCount )            ;   // unchanged, no find_functor
-            CPPUNIT_ASSERT( e3.nFindArgCount == s3.nFindArgCount );
-            CPPUNIT_ASSERT( s.find_with(find_key(k3), typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), find_functor() ));
-            CPPUNIT_ASSERT( e3.nFindCount == s3.nFindCount + 1 );
-            CPPUNIT_ASSERT( e3.nFindArgCount == s3.nFindArgCount );
-
-            s1 = e1 ; s2 = e2 ; s3 = e3;
-
-            // insert existing elements
-            {
-                value_type eu( k2, 1000 );
-                CPPUNIT_ASSERT( !s.insert( eu ));
-                CPPUNIT_ASSERT( !s.insert( eu, insert_functor() ));
-                CPPUNIT_ASSERT( e2.nInsertCount == s2.nInsertCount );
-
-                CPPUNIT_ASSERT( s.update( eu, update_functor()) == std::make_pair(true, false));
-                CPPUNIT_ASSERT( e2.nInsertCount == s2.nInsertCount );
-                CPPUNIT_ASSERT( e2.nEnsureCount == s2.nEnsureCount + 1 );
-                CPPUNIT_ASSERT( e2.nEnsureNewCount == s2.nEnsureNewCount  );
-            }
-
-            s1 = e1 ; s2 = e2 ; s3 = e3;
-
-            // unlink & erase test
-            {
-                value_type eu( k2, 10 );
-                CPPUNIT_ASSERT( !s.unlink(eu));
-            }
-
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( s.size() == 3 );
-
-            CPPUNIT_ASSERT( s.unlink( e1 ) );
-            CPPUNIT_ASSERT( s.erase_with( k2, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type() ) == &e2 );
-            CPPUNIT_ASSERT( s.erase( e2 ) == nullptr );
-            CPPUNIT_ASSERT( e3.nEraseCount == 0 );
-            CPPUNIT_ASSERT( s.erase_with( k3, typename std::conditional<Set::c_isSorted, less2, equal_to2>::type(), erase_functor()) == &e3 );
-            CPPUNIT_ASSERT( e3.nEraseCount == 1 );
-            CPPUNIT_ASSERT( s.erase( k3, erase_functor() ) == nullptr );
-            CPPUNIT_ASSERT( e3.nEraseCount == 1 );
-
-            CPPUNIT_ASSERT( s.insert( e3 ) );
-            CPPUNIT_ASSERT( s.erase( e3 ) == &e3 );
-            CPPUNIT_ASSERT( e3.nEraseCount == 1 );
-
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( s.size() == 0 );
-
-            s1 = e1 ; s2 = e2 ; s3 = e3;
-
-            // clear & clear_and_dispose test
-            CPPUNIT_ASSERT( s.insert(e1));
-            CPPUNIT_ASSERT( s.insert(e2));
-            CPPUNIT_ASSERT( s.insert(e3));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( s.size() == 3 );
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( s.size() == 0 );
-
-            CPPUNIT_ASSERT( s.insert(e1));
-            CPPUNIT_ASSERT( s.insert(e2));
-            CPPUNIT_ASSERT( s.insert(e3));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( s.size() == 3 );
-
-            CPPUNIT_ASSERT( e1.nDisposeCount == 0 );
-            CPPUNIT_ASSERT( e2.nDisposeCount == 0 );
-            CPPUNIT_ASSERT( e3.nDisposeCount == 0 );
-            s.clear_and_dispose( faked_disposer() );
-            CPPUNIT_ASSERT( e1.nDisposeCount == 1 );
-            CPPUNIT_ASSERT( e2.nDisposeCount == 1 );
-            CPPUNIT_ASSERT( e3.nDisposeCount == 1 );
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( s.size() == 0 );
-
-            // resize test (up to 64K elements)
-            size_t const nSize = 64 * 1024;
-            value_type * arr = new value_type[nSize];
-            auto_dispose<value_type> ad(arr);
-            for ( size_t i = 0; i < nSize; ++i ) {
-                value_type * p = new (arr + i) value_type( (int) i, (int) i * 2 );
-                CPPUNIT_ASSERT_EX( s.insert( *p, insert_functor() ), "i=" << i );
-                CPPUNIT_ASSERT_EX( p->nInsertCount == 1, "i=" << i );
-                //for ( size_t j = 0; j <= i; ++j ) {
-                //    if ( !s.contains((int) j) ) {
-                //        CPPUNIT_MSG( "Key " << j << " is not found after inserting key " << i );
-                //    }
-                //}
-            }
-
-            for ( size_t i = 0; i < nSize; ++i )
-                CPPUNIT_ASSERT_EX( s.contains((int) i), "Key " << i << " is not found" );
-
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( s.size() == nSize );
-            s.clear_and_dispose( faked_disposer() );
-            for ( size_t i = 0; i < nSize; ++i ) {
-                CPPUNIT_ASSERT_EX( arr[i].nDisposeCount == 1, "i=" << i );
-            }
-        }
-
-        template <class Set>
-        void test()
-        {
-            // default ctor
-            {
-                Set s;
-                test_with(s);
-            }
-
-            // ctor with explicit initial capacity
-            {
-                Set s(256);
-                test_with(s);
-            }
-        }
-
-        template <class Set>
-        void test_cuckoo()
-        {
-            unsigned int nProbesetSize = Set::node_type::probeset_size ? Set::node_type::probeset_size : 4;
-            Set s( 256, nProbesetSize, nProbesetSize / 2 );
-            test_with( s );
-        }
-
-        // ***********************************************************
-        // Cuckoo hashing (striped)
-
-        void Cuckoo_striped_list_basehook_equal();
-        void Cuckoo_striped_vector_basehook_equal();
-        void Cuckoo_striped_list_basehook_sort_cmp();
-        void Cuckoo_striped_vector_basehook_sort_cmp();
-        void Cuckoo_striped_list_basehook_sort_less();
-        void Cuckoo_striped_vector_basehook_sort_less();
-        void Cuckoo_striped_list_basehook_sort_cmpmix();
-        void Cuckoo_striped_vector_basehook_sort_cmpmix();
-        void Cuckoo_striped_vector_basehook_sort_cmpmix_stat();
-
-        void Cuckoo_striped_list_basehook_equal_storehash();
-        void Cuckoo_striped_vector_basehook_equal_storehash();
-        void Cuckoo_striped_list_basehook_sort_cmp_storehash();
-        void Cuckoo_striped_vector_basehook_sort_cmp_storehash();
-        void Cuckoo_striped_list_basehook_sort_less_storehash();
-        void Cuckoo_striped_vector_basehook_sort_less_storehash();
-        void Cuckoo_striped_list_basehook_sort_cmpmix_storehash();
-        void Cuckoo_striped_vector_basehook_sort_cmpmix_storehash();
-
-        void Cuckoo_striped_list_memberhook_equal();
-        void Cuckoo_striped_vector_memberhook_equal();
-        void Cuckoo_striped_list_memberhook_sort_cmp();
-        void Cuckoo_striped_vector_memberhook_sort_cmp();
-        void Cuckoo_striped_list_memberhook_sort_less();
-        void Cuckoo_striped_vector_memberhook_sort_less();
-        void Cuckoo_striped_list_memberhook_sort_cmpmix();
-        void Cuckoo_striped_vector_memberhook_sort_cmpmix();
-
-        void Cuckoo_striped_list_memberhook_equal_storehash();
-        void Cuckoo_striped_vector_memberhook_equal_storehash();
-        void Cuckoo_striped_list_memberhook_sort_cmp_storehash();
-        void Cuckoo_striped_vector_memberhook_sort_cmp_storehash();
-        void Cuckoo_striped_list_memberhook_sort_less_storehash();
-        void Cuckoo_striped_vector_memberhook_sort_less_storehash();
-        void Cuckoo_striped_list_memberhook_sort_cmpmix_storehash();
-        void Cuckoo_striped_vector_memberhook_sort_cmpmix_storehash();
-
-        // ***********************************************************
-        // Cuckoo hashing (refinable)
-
-        void Cuckoo_refinable_list_basehook_equal();
-        void Cuckoo_refinable_vector_basehook_equal();
-        void Cuckoo_refinable_list_basehook_sort_cmp();
-        void Cuckoo_refinable_vector_basehook_sort_cmp();
-        void Cuckoo_refinable_list_basehook_sort_less();
-        void Cuckoo_refinable_vector_basehook_sort_less();
-        void Cuckoo_refinable_list_basehook_sort_cmpmix();
-        void Cuckoo_refinable_vector_basehook_sort_cmpmix();
-        void Cuckoo_refinable_vector_basehook_sort_cmpmix_stat();
-
-        void Cuckoo_refinable_list_basehook_equal_storehash();
-        void Cuckoo_refinable_vector_basehook_equal_storehash();
-        void Cuckoo_refinable_list_basehook_sort_cmp_storehash();
-        void Cuckoo_refinable_vector_basehook_sort_cmp_storehash();
-        void Cuckoo_refinable_list_basehook_sort_less_storehash();
-        void Cuckoo_refinable_vector_basehook_sort_less_storehash();
-        void Cuckoo_refinable_list_basehook_sort_cmpmix_storehash();
-        void Cuckoo_refinable_vector_basehook_sort_cmpmix_storehash();
-
-        void Cuckoo_refinable_list_memberhook_equal();
-        void Cuckoo_refinable_vector_memberhook_equal();
-        void Cuckoo_refinable_list_memberhook_sort_cmp();
-        void Cuckoo_refinable_vector_memberhook_sort_cmp();
-        void Cuckoo_refinable_list_memberhook_sort_less();
-        void Cuckoo_refinable_vector_memberhook_sort_less();
-        void Cuckoo_refinable_list_memberhook_sort_cmpmix();
-        void Cuckoo_refinable_vector_memberhook_sort_cmpmix();
-
-        void Cuckoo_refinable_list_memberhook_equal_storehash();
-        void Cuckoo_refinable_vector_memberhook_equal_storehash();
-        void Cuckoo_refinable_list_memberhook_sort_cmp_storehash();
-        void Cuckoo_refinable_vector_memberhook_sort_cmp_storehash();
-        void Cuckoo_refinable_list_memberhook_sort_less_storehash();
-        void Cuckoo_refinable_vector_memberhook_sort_less_storehash();
-        void Cuckoo_refinable_list_memberhook_sort_cmpmix_storehash();
-        void Cuckoo_refinable_vector_memberhook_sort_cmpmix_storehash();
-
-        CPPUNIT_TEST_SUITE(IntrusiveCuckooSetHdrTest)
-            // ***********************************************************
-            // Cuckoo hashing (striped)
-
-            CPPUNIT_TEST( Cuckoo_striped_list_basehook_equal)
-            CPPUNIT_TEST( Cuckoo_striped_vector_basehook_equal)
-            CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_cmp)
-            CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmp)
-            CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_less)
-            CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_less)
-            CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_cmpmix)
-            CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmpmix)
-            CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmpmix_stat)
-
-            CPPUNIT_TEST( Cuckoo_striped_list_basehook_equal_storehash)
-            CPPUNIT_TEST( Cuckoo_striped_vector_basehook_equal_storehash)
-            CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_cmp_storehash)
-            CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmp_storehash)
-            CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_less_storehash)
-            CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_less_storehash)
-            CPPUNIT_TEST( Cuckoo_striped_list_basehook_sort_cmpmix_storehash)
-            CPPUNIT_TEST( Cuckoo_striped_vector_basehook_sort_cmpmix_storehash)
-
-            CPPUNIT_TEST( Cuckoo_striped_list_memberhook_equal)
-            CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_equal)
-            CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_cmp)
-            CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_cmp)
-            CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_less)
-            CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_less)
-            CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_cmpmix)
-            CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_cmpmix)
-
-            CPPUNIT_TEST( Cuckoo_striped_list_memberhook_equal_storehash)
-            CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_equal_storehash)
-            CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_cmp_storehash)
-            CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_cmp_storehash)
-            CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_less_storehash)
-            CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_less_storehash)
-            CPPUNIT_TEST( Cuckoo_striped_list_memberhook_sort_cmpmix_storehash)
-            CPPUNIT_TEST( Cuckoo_striped_vector_memberhook_sort_cmpmix_storehash)
-
-            // ***********************************************************
-            // Cuckoo hashing (refinable)
-
-            CPPUNIT_TEST( Cuckoo_refinable_list_basehook_equal)
-            CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_equal)
-            CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_cmp)
-            CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmp)
-            CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_less)
-            CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_less)
-            CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_cmpmix)
-            CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmpmix)
-            CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmpmix_stat)
-
-            CPPUNIT_TEST( Cuckoo_refinable_list_basehook_equal_storehash)
-            CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_equal_storehash)
-            CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_cmp_storehash)
-            CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmp_storehash)
-            CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_less_storehash)
-            CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_less_storehash)
-            CPPUNIT_TEST( Cuckoo_refinable_list_basehook_sort_cmpmix_storehash)
-            CPPUNIT_TEST( Cuckoo_refinable_vector_basehook_sort_cmpmix_storehash)
-
-            CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_equal)
-            CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_equal)
-            CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_cmp)
-            CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_cmp)
-            CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_less)
-            CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_less)
-            CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_cmpmix)
-            CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_cmpmix)
-
-            CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_equal_storehash)
-            CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_equal_storehash)
-            CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_cmp_storehash)
-            CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_cmp_storehash)
-            CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_less_storehash)
-            CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_less_storehash)
-            CPPUNIT_TEST( Cuckoo_refinable_list_memberhook_sort_cmpmix_storehash)
-            CPPUNIT_TEST( Cuckoo_refinable_vector_memberhook_sort_cmpmix_storehash)
-
-        CPPUNIT_TEST_SUITE_END()
-    };
-} // namespace set
-
-#endif // #ifndef CDSTEST_HDR_INTRUSIVE_CUCKOO_SET_H
diff --git a/tests/test-hdr/set/hdr_intrusive_feldman_hashset.h b/tests/test-hdr/set/hdr_intrusive_feldman_hashset.h
deleted file mode 100644 (file)
index 812bb6b..0000000
+++ /dev/null
@@ -1,817 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_INTRUSIVE_FELDMAN_HASHSET_H
-#define CDSTEST_HDR_INTRUSIVE_FELDMAN_HASHSET_H
-
-#include "cppunit/cppunit_proxy.h"
-
-// forward declaration
-namespace cds {
-    namespace intrusive {}
-    namespace opt {}
-}
-
-namespace set {
-    namespace ci = cds::intrusive;
-    namespace co = cds::opt;
-
-    class IntrusiveFeldmanHashSetHdrTest: public CppUnitMini::TestCase
-    {
-        template <typename Hash>
-        struct Item
-        {
-            unsigned int nDisposeCount  ;   // count of disposer calling
-            Hash hash;
-            unsigned int nInsertCall;
-            unsigned int nFindCall;
-            unsigned int nEraseCall;
-            mutable unsigned int nIteratorCall;
-
-            Item()
-                : nDisposeCount(0)
-                , nInsertCall(0)
-                , nFindCall(0)
-                , nEraseCall(0)
-                , nIteratorCall(0)
-            {}
-        };
-
-        template <typename Hash>
-        struct get_hash
-        {
-            Hash const& operator()( Item<Hash> const& i ) const
-            {
-                return i.hash;
-            }
-        };
-
-        template <typename Key>
-        struct get_key
-        {
-            Key const& operator()(Item<Key> const& i) const
-            {
-                return i.hash;
-            }
-        };
-
-        struct item_disposer {
-            template <typename Hash>
-            void operator()( Item<Hash> * p )
-            {
-                ++p->nDisposeCount;
-            }
-        };
-
-        template <typename Key>
-        struct nohash {
-            Key operator()(Key k) const
-            {
-                return k;
-            }
-        };
-
-        struct hash128
-        {
-            size_t lo;
-            size_t hi;
-
-            hash128() {}
-            hash128(size_t l, size_t h) : lo(l), hi(h) {}
-
-            struct make {
-                hash128 operator()( size_t n ) const
-                {
-                    return hash128( std::hash<size_t>()( n ), std::hash<size_t>()( ~n ));
-                }
-                hash128 operator()( hash128 const& n ) const
-                {
-                    return hash128( std::hash<size_t>()( n.lo ), std::hash<size_t>()( ~n.hi ));
-                }
-            };
-
-            struct less {
-                bool operator()( hash128 const& lhs, hash128 const& rhs ) const
-                {
-                    if ( lhs.hi != rhs.hi )
-                        return lhs.hi < rhs.hi;
-                    return lhs.lo < rhs.lo;
-                }
-            };
-
-            struct cmp {
-                int operator()( hash128 const& lhs, hash128 const& rhs ) const
-                {
-                    if ( lhs.hi != rhs.hi )
-                        return lhs.hi < rhs.hi ? -1 : 1;
-                    return lhs.lo < rhs.lo ? -1 : lhs.lo == rhs.lo ? 0 : 1;
-                }
-            };
-        };
-
-
-        template <typename Set, typename Hash>
-        void test_hp( size_t nHeadBits, size_t nArrayBits )
-        {
-            typedef typename Set::hash_type hash_type;
-            typedef typename Set::value_type value_type;
-
-            Hash hasher;
-
-            size_t const arrCapacity = 1000;
-            std::vector< value_type > arrValue;
-            arrValue.reserve( arrCapacity );
-            for ( size_t i = 0; i < arrCapacity; ++i ) {
-                arrValue.emplace_back( value_type() );
-                arrValue.back().hash = hasher( i );
-            }
-            CPPUNIT_ASSERT( arrValue.size() == arrCapacity );
-
-            Set s( nHeadBits, nArrayBits );
-            CPPUNIT_MSG("Array size: head=" << s.head_size() << ", array_node=" << s.array_node_size());
-            CPPUNIT_ASSERT(s.head_size() >= (size_t(1) << nHeadBits));
-            CPPUNIT_ASSERT(s.array_node_size() == (size_t(1) << nArrayBits));
-
-            // insert() test
-            CPPUNIT_ASSERT(s.size() == 0 );
-            CPPUNIT_ASSERT(s.empty() );
-            for ( auto& el : arrValue ) {
-                CPPUNIT_ASSERT( s.insert( el ));
-                CPPUNIT_ASSERT(s.contains( el.hash ));
-            }
-            CPPUNIT_ASSERT(s.size() == arrCapacity );
-            for ( auto& el : arrValue ) {
-                CPPUNIT_ASSERT(s.contains( el.hash ));
-                CPPUNIT_ASSERT( !s.insert( el ) );
-            }
-            CPPUNIT_ASSERT(s.size() == arrCapacity );
-            CPPUNIT_ASSERT( !s.empty() );
-
-            // Iterator test
-            {
-                typedef typename Set::iterator iterator;
-                for ( iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it )
-                    ++(it->nIteratorCall);
-                for ( auto& el : arrValue ) {
-                    CPPUNIT_ASSERT( el.nIteratorCall == 1 );
-                    el.nIteratorCall = 0;
-                }
-            }
-
-            {
-                // Const iterator test
-                for ( typename Set::const_iterator it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it )
-                    (*it).nIteratorCall += 1;
-                for ( auto& el : arrValue ) {
-                    CPPUNIT_ASSERT( el.nIteratorCall == 1 );
-                    el.nIteratorCall = 0;
-                }
-            }
-
-            {
-                // Reverse iterator test
-                for ( typename Set::reverse_iterator it = s.rbegin(), itEnd = s.rend(); it != itEnd; ++it )
-                    it->nIteratorCall += 1;
-                for ( auto& el : arrValue ) {
-                    CPPUNIT_ASSERT( el.nIteratorCall == 1 );
-                    el.nIteratorCall = 0;
-                }
-            }
-
-            {
-                // Reverse const iterator test
-                for ( typename Set::const_reverse_iterator it = s.crbegin(), itEnd = s.crend(); it != itEnd; ++it ) {
-                    (*it).nIteratorCall += 1;
-                    it.release();
-                }
-                for ( auto& el : arrValue ) {
-                    CPPUNIT_ASSERT( el.nIteratorCall == 1 );
-                    el.nIteratorCall = 0;
-                }
-            }
-
-            // update() exists test
-            for ( auto& el : arrValue ) {
-                bool bOp, bInsert;
-                std::tie(bOp, bInsert) = s.update( el, false );
-                CPPUNIT_ASSERT( bOp );
-                CPPUNIT_ASSERT( !bInsert );
-                CPPUNIT_ASSERT( el.nFindCall == 0 );
-                CPPUNIT_ASSERT(s.find(el.hash, [](value_type& v) { v.nFindCall++; } ));
-                CPPUNIT_ASSERT( el.nFindCall == 1 );
-            }
-
-            // unlink test
-            CPPUNIT_ASSERT(s.size() == arrCapacity );
-            for ( auto const& el : arrValue ) {
-                CPPUNIT_ASSERT(s.unlink( el ));
-                CPPUNIT_ASSERT(!s.contains( el.hash ));
-            }
-            CPPUNIT_ASSERT(s.size() == 0 );
-            Set::gc::force_dispose();
-            for ( auto const& el : arrValue ) {
-                CPPUNIT_ASSERT( el.nDisposeCount == 1 );
-            }
-
-            // new hash values
-            for ( auto& el : arrValue )
-                el.hash = hasher( el.hash );
-
-            // insert( func )
-            CPPUNIT_ASSERT(s.size() == 0 );
-            for ( auto& el : arrValue ) {
-                CPPUNIT_ASSERT( s.insert( el, []( value_type& v ) { ++v.nInsertCall; } ));
-                CPPUNIT_ASSERT(s.contains( el.hash ));
-                CPPUNIT_ASSERT( el.nInsertCall == 1 );
-            }
-            CPPUNIT_ASSERT(s.size() == arrCapacity );
-            for ( auto& el : arrValue ) {
-                CPPUNIT_ASSERT(s.contains( el.hash ));
-                CPPUNIT_ASSERT( !s.insert( el ) );
-            }
-            CPPUNIT_ASSERT(s.size() == arrCapacity );
-            CPPUNIT_ASSERT( !s.empty() );
-
-            for ( auto& el : arrValue )
-                el.nDisposeCount = 0;
-
-            s.clear();
-            CPPUNIT_ASSERT(s.size() == 0 );
-            Set::gc::force_dispose();
-            for ( auto const& el : arrValue ) {
-                CPPUNIT_ASSERT( el.nDisposeCount == 1 );
-            }
-
-            // new hash values
-            for ( auto& el : arrValue )
-                el.hash = hasher( el.hash );
-
-            // update test
-            for ( auto& el : arrValue ) {
-                bool bOp, bInsert;
-                std::tie(bOp, bInsert) = s.update( el, false );
-                CPPUNIT_ASSERT( !bOp );
-                CPPUNIT_ASSERT( !bInsert );
-                CPPUNIT_ASSERT( !s.contains( el.hash ));
-
-                std::tie(bOp, bInsert) = s.update( el, true );
-                CPPUNIT_ASSERT( bOp );
-                CPPUNIT_ASSERT( bInsert );
-                CPPUNIT_ASSERT( s.contains( el.hash ));
-            }
-            CPPUNIT_ASSERT(s.size() == arrCapacity );
-
-            // erase test
-            for ( auto& el : arrValue ) {
-                el.nDisposeCount = 0;
-                CPPUNIT_ASSERT( s.contains( el.hash ));
-                CPPUNIT_ASSERT(s.erase( el.hash ));
-                CPPUNIT_ASSERT( !s.contains( el.hash ));
-                CPPUNIT_ASSERT( !s.erase( el.hash ));
-            }
-            CPPUNIT_ASSERT(s.size() == 0 );
-            Set::gc::force_dispose();
-            for ( auto& el : arrValue ) {
-                CPPUNIT_ASSERT( el.nDisposeCount == 1 );
-                CPPUNIT_ASSERT(s.insert( el ));
-            }
-
-            // erase with functor, get() test
-            for ( auto& el : arrValue ) {
-                el.nDisposeCount = 0;
-                CPPUNIT_ASSERT( s.contains( el.hash ) );
-                {
-                    typename Set::guarded_ptr gp{ s.get( el.hash ) };
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( gp->nEraseCall == 0);
-                    CPPUNIT_ASSERT(s.erase( gp->hash, []( value_type& i ) { ++i.nEraseCall; } ));
-                    CPPUNIT_ASSERT( gp->nEraseCall == 1);
-                    Set::gc::force_dispose();
-                    CPPUNIT_ASSERT( gp->nDisposeCount == 0 );
-                }
-                CPPUNIT_ASSERT( !s.contains( el.hash ));
-                CPPUNIT_ASSERT( !s.erase( el.hash ));
-                CPPUNIT_ASSERT( el.nEraseCall == 1 );
-                Set::gc::force_dispose();
-                CPPUNIT_ASSERT( el.nDisposeCount == 1 );
-            }
-            CPPUNIT_ASSERT(s.size() == 0 );
-
-            // new hash values
-            for ( auto& el : arrValue ) {
-                el.hash = hasher( el.hash );
-                el.nDisposeCount = 0;
-                bool bOp, bInsert;
-                std::tie(bOp, bInsert) = s.update( el );
-                CPPUNIT_ASSERT( bOp );
-                CPPUNIT_ASSERT( bInsert );
-            }
-            CPPUNIT_ASSERT(s.size() == arrCapacity );
-
-            // extract test
-            for ( auto& el : arrValue ) {
-                CPPUNIT_ASSERT( s.contains( el.hash ) );
-                typename Set::guarded_ptr gp = s.extract( el.hash );
-                CPPUNIT_ASSERT( gp );
-                Set::gc::force_dispose();
-                CPPUNIT_ASSERT( el.nDisposeCount == 0 );
-                CPPUNIT_ASSERT( gp->nDisposeCount == 0 );
-                gp = s.get( el.hash );
-                CPPUNIT_ASSERT( !gp );
-                Set::gc::force_dispose();
-                CPPUNIT_ASSERT( el.nDisposeCount == 1 );
-                CPPUNIT_ASSERT( !s.contains( el.hash ) );
-            }
-            CPPUNIT_ASSERT(s.size() == 0 );
-            CPPUNIT_ASSERT(s.empty() );
-
-            // erase with iterator
-            for ( auto& el : arrValue ) {
-                el.nDisposeCount = 0;
-                el.nIteratorCall = 0;
-                CPPUNIT_ASSERT(s.insert( el ));
-            }
-            for ( auto it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                s.erase_at( it );
-                it->nIteratorCall = 1;
-            }
-            CPPUNIT_ASSERT(s.size() == 0 );
-            Set::gc::force_dispose();
-            for ( auto& el : arrValue ) {
-                CPPUNIT_ASSERT( el.nDisposeCount == 1 );
-                CPPUNIT_ASSERT( el.nIteratorCall == 1 );
-            }
-            CPPUNIT_ASSERT(s.empty() );
-
-            // erase with reverse_iterator
-            for ( auto& el : arrValue ) {
-                el.nDisposeCount = 0;
-                el.nIteratorCall = 0;
-                CPPUNIT_ASSERT(s.insert( el ));
-            }
-            for ( auto it = s.rbegin(), itEnd = s.rend(); it != itEnd; ++it ) {
-                s.erase_at( it );
-                it->nIteratorCall = 1;
-            }
-            CPPUNIT_ASSERT(s.size() == 0 );
-            Set::gc::force_dispose();
-            for ( auto& el : arrValue ) {
-                CPPUNIT_ASSERT( el.nDisposeCount == 1 );
-                CPPUNIT_ASSERT( el.nIteratorCall == 1 );
-            }
-            CPPUNIT_ASSERT(s.empty() );
-
-            CPPUNIT_MSG( s.statistics() );
-        }
-
-        template <typename Set, typename Hash>
-        void test_rcu(size_t nHeadBits, size_t nArrayBits)
-        {
-            typedef typename Set::hash_type hash_type;
-            typedef typename Set::value_type value_type;
-            typedef typename Set::rcu_lock  rcu_lock;
-
-            Hash hasher;
-
-            size_t const arrCapacity = 1000;
-            std::vector< value_type > arrValue;
-            arrValue.reserve(arrCapacity);
-            for (size_t i = 0; i < arrCapacity; ++i) {
-                arrValue.emplace_back(value_type());
-                arrValue.back().hash = hasher(i);
-            }
-            CPPUNIT_ASSERT(arrValue.size() == arrCapacity);
-
-            Set s(nHeadBits, nArrayBits);
-            CPPUNIT_MSG("Array size: head=" << s.head_size() << ", array_node=" << s.array_node_size());
-            CPPUNIT_ASSERT(s.head_size() >= (size_t(1) << nHeadBits));
-            CPPUNIT_ASSERT(s.array_node_size() == (size_t(1) << nArrayBits));
-
-            // insert() test
-            CPPUNIT_ASSERT(s.size() == 0);
-            CPPUNIT_ASSERT(s.empty());
-            for (auto& el : arrValue) {
-                CPPUNIT_ASSERT(s.insert(el));
-                CPPUNIT_ASSERT(s.contains(el.hash));
-            }
-            CPPUNIT_ASSERT(s.size() == arrCapacity);
-            for (auto& el : arrValue) {
-                CPPUNIT_ASSERT(s.contains(el.hash));
-                CPPUNIT_ASSERT(!s.insert(el));
-            }
-            CPPUNIT_ASSERT(s.size() == arrCapacity);
-            CPPUNIT_ASSERT(!s.empty());
-
-            // Iterator test
-            {
-                rcu_lock l;
-
-                typedef typename Set::iterator iterator;
-                for (iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it)
-                    ++(it->nIteratorCall);
-                for (auto& el : arrValue) {
-                    CPPUNIT_ASSERT(el.nIteratorCall == 1);
-                    el.nIteratorCall = 0;
-                }
-            }
-
-            {
-                // Const iterator test
-                rcu_lock l;
-
-                for (typename Set::const_iterator it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it)
-                    (*it).nIteratorCall += 1;
-                for (auto& el : arrValue) {
-                    CPPUNIT_ASSERT(el.nIteratorCall == 1);
-                    el.nIteratorCall = 0;
-                }
-            }
-
-            {
-                // Reverse iterator test
-                rcu_lock l;
-
-                for (typename Set::reverse_iterator it = s.rbegin(), itEnd = s.rend(); it != itEnd; ++it)
-                    it->nIteratorCall += 1;
-                for (auto& el : arrValue) {
-                    CPPUNIT_ASSERT(el.nIteratorCall == 1);
-                    el.nIteratorCall = 0;
-                }
-            }
-
-            {
-                // Reverse const iterator test
-                rcu_lock l;
-
-                for (typename Set::const_reverse_iterator it = s.crbegin(), itEnd = s.crend(); it != itEnd; ++it) {
-                    (*it).nIteratorCall += 1;
-                }
-                for (auto& el : arrValue) {
-                    CPPUNIT_ASSERT(el.nIteratorCall == 1);
-                    el.nIteratorCall = 0;
-                }
-            }
-
-            // update() exists test
-            for (auto& el : arrValue) {
-                bool bOp, bInsert;
-                std::tie(bOp, bInsert) = s.update(el, false);
-                CPPUNIT_ASSERT(bOp);
-                CPPUNIT_ASSERT(!bInsert);
-                CPPUNIT_ASSERT(el.nFindCall == 0);
-                CPPUNIT_ASSERT(s.find(el.hash, [](value_type& v) { v.nFindCall++; }));
-                CPPUNIT_ASSERT(el.nFindCall == 1);
-            }
-
-            // unlink test
-            CPPUNIT_ASSERT(s.size() == arrCapacity);
-            for (auto const& el : arrValue) {
-                CPPUNIT_ASSERT(s.unlink(el));
-                CPPUNIT_ASSERT(!s.contains(el.hash));
-            }
-            CPPUNIT_ASSERT(s.size() == 0);
-            Set::gc::force_dispose();
-            for (auto const& el : arrValue) {
-                CPPUNIT_ASSERT(el.nDisposeCount == 1);
-            }
-
-            // new hash values
-            for (auto& el : arrValue)
-                el.hash = hasher(el.hash);
-
-            // insert( func )
-            CPPUNIT_ASSERT(s.size() == 0);
-            for (auto& el : arrValue) {
-                CPPUNIT_ASSERT(s.insert(el, [](value_type& v) { ++v.nInsertCall; }));
-                CPPUNIT_ASSERT(s.contains(el.hash));
-                CPPUNIT_ASSERT(el.nInsertCall == 1);
-            }
-            CPPUNIT_ASSERT(s.size() == arrCapacity);
-            for (auto& el : arrValue) {
-                CPPUNIT_ASSERT(s.contains(el.hash));
-                CPPUNIT_ASSERT(!s.insert(el));
-            }
-            CPPUNIT_ASSERT(s.size() == arrCapacity);
-            CPPUNIT_ASSERT(!s.empty());
-
-            for (auto& el : arrValue)
-                el.nDisposeCount = 0;
-
-            s.clear();
-            CPPUNIT_ASSERT(s.size() == 0);
-            Set::gc::force_dispose();
-            for (auto const& el : arrValue) {
-                CPPUNIT_ASSERT(el.nDisposeCount == 1);
-            }
-
-            // new hash values
-            for (auto& el : arrValue)
-                el.hash = hasher(el.hash);
-
-            // update test
-            for (auto& el : arrValue) {
-                bool bOp, bInsert;
-                std::tie(bOp, bInsert) = s.update(el, false);
-                CPPUNIT_ASSERT(!bOp);
-                CPPUNIT_ASSERT(!bInsert);
-                CPPUNIT_ASSERT(!s.contains(el.hash));
-
-                std::tie(bOp, bInsert) = s.update(el, true);
-                CPPUNIT_ASSERT(bOp);
-                CPPUNIT_ASSERT(bInsert);
-                CPPUNIT_ASSERT(s.contains(el.hash));
-            }
-            CPPUNIT_ASSERT(s.size() == arrCapacity);
-
-            // erase test
-            for (auto& el : arrValue) {
-                el.nDisposeCount = 0;
-                CPPUNIT_ASSERT(s.contains(el.hash));
-                CPPUNIT_ASSERT(s.erase(el.hash));
-                CPPUNIT_ASSERT(!s.contains(el.hash));
-                CPPUNIT_ASSERT(!s.erase(el.hash));
-            }
-            CPPUNIT_ASSERT(s.size() == 0);
-            Set::gc::force_dispose();
-            for (auto& el : arrValue) {
-                CPPUNIT_ASSERT(el.nDisposeCount == 1);
-                CPPUNIT_ASSERT(s.insert(el));
-            }
-
-            // erase with functor, get() test
-            for (auto& el : arrValue) {
-                el.nDisposeCount = 0;
-                CPPUNIT_ASSERT(s.contains(el.hash));
-                value_type * p;
-                {
-                    rcu_lock l;
-                    p = s.get(el.hash);
-                    CPPUNIT_ASSERT(p);
-                    CPPUNIT_ASSERT(p->nEraseCall == 0);
-                }
-                // This is single-threaded test with faked disposer
-                // so we can dereference p outside RCU lock section
-                CPPUNIT_ASSERT(s.erase(p->hash, [](value_type& i) { ++i.nEraseCall; }));
-                CPPUNIT_ASSERT(p->nEraseCall == 1);
-                Set::gc::force_dispose();
-                CPPUNIT_ASSERT(p->nDisposeCount == 1);
-
-                CPPUNIT_ASSERT(!s.contains(el.hash));
-                CPPUNIT_ASSERT(!s.erase(el.hash));
-                CPPUNIT_ASSERT(el.nEraseCall == 1);
-                Set::gc::force_dispose();
-                CPPUNIT_ASSERT(el.nDisposeCount == 1);
-            }
-            CPPUNIT_ASSERT(s.size() == 0);
-
-            // new hash values
-            for (auto& el : arrValue) {
-                el.hash = hasher(el.hash);
-                el.nDisposeCount = 0;
-                bool bOp, bInsert;
-                std::tie(bOp, bInsert) = s.update(el);
-                CPPUNIT_ASSERT(bOp);
-                CPPUNIT_ASSERT(bInsert);
-            }
-            CPPUNIT_ASSERT(s.size() == arrCapacity);
-
-            // extract test
-            for (auto& el : arrValue) {
-                CPPUNIT_ASSERT(s.contains(el.hash));
-                typename Set::exempt_ptr xp = s.extract(el.hash);
-                CPPUNIT_ASSERT(xp);
-                Set::gc::force_dispose();
-                CPPUNIT_ASSERT(el.nDisposeCount == 0);
-                CPPUNIT_ASSERT(xp->nDisposeCount == 0);
-                xp.release();
-                {
-                    rcu_lock l;
-                    value_type * p = s.get(el.hash);
-                    CPPUNIT_ASSERT(!p);
-                }
-                Set::gc::force_dispose();
-                CPPUNIT_ASSERT(el.nDisposeCount == 1);
-                CPPUNIT_ASSERT(!s.contains(el.hash));
-            }
-            CPPUNIT_ASSERT(s.size() == 0);
-            CPPUNIT_ASSERT(s.empty());
-
-            CPPUNIT_MSG(s.statistics());
-        }
-
-        void hp_nohash();
-        void hp_nohash_stat();
-        void hp_nohash_5_3();
-        void hp_nohash_5_3_stat();
-        void hp_stdhash();
-        void hp_stdhash_stat();
-        void hp_stdhash_5_3();
-        void hp_stdhash_5_3_stat();
-        void hp_hash128();
-        void hp_hash128_stat();
-        void hp_hash128_4_3();
-        void hp_hash128_4_3_stat();
-
-        void dhp_nohash();
-        void dhp_nohash_stat();
-        void dhp_nohash_5_3();
-        void dhp_nohash_5_3_stat();
-        void dhp_stdhash();
-        void dhp_stdhash_stat();
-        void dhp_stdhash_5_3();
-        void dhp_stdhash_5_3_stat();
-        void dhp_hash128();
-        void dhp_hash128_stat();
-        void dhp_hash128_4_3();
-        void dhp_hash128_4_3_stat();
-
-        void rcu_gpi_nohash();
-        void rcu_gpi_nohash_stat();
-        void rcu_gpi_nohash_5_3();
-        void rcu_gpi_nohash_5_3_stat();
-        void rcu_gpi_stdhash();
-        void rcu_gpi_stdhash_stat();
-        void rcu_gpi_stdhash_5_3();
-        void rcu_gpi_stdhash_5_3_stat();
-        void rcu_gpi_hash128();
-        void rcu_gpi_hash128_stat();
-        void rcu_gpi_hash128_4_3();
-        void rcu_gpi_hash128_4_3_stat();
-
-        void rcu_gpb_nohash();
-        void rcu_gpb_nohash_stat();
-        void rcu_gpb_nohash_5_3();
-        void rcu_gpb_nohash_5_3_stat();
-        void rcu_gpb_stdhash();
-        void rcu_gpb_stdhash_stat();
-        void rcu_gpb_stdhash_5_3();
-        void rcu_gpb_stdhash_5_3_stat();
-        void rcu_gpb_hash128();
-        void rcu_gpb_hash128_stat();
-        void rcu_gpb_hash128_4_3();
-        void rcu_gpb_hash128_4_3_stat();
-
-        void rcu_gpt_nohash();
-        void rcu_gpt_nohash_stat();
-        void rcu_gpt_nohash_5_3();
-        void rcu_gpt_nohash_5_3_stat();
-        void rcu_gpt_stdhash();
-        void rcu_gpt_stdhash_stat();
-        void rcu_gpt_stdhash_5_3();
-        void rcu_gpt_stdhash_5_3_stat();
-        void rcu_gpt_hash128();
-        void rcu_gpt_hash128_stat();
-        void rcu_gpt_hash128_4_3();
-        void rcu_gpt_hash128_4_3_stat();
-
-        void rcu_shb_nohash();
-        void rcu_shb_nohash_stat();
-        void rcu_shb_nohash_5_3();
-        void rcu_shb_nohash_5_3_stat();
-        void rcu_shb_stdhash();
-        void rcu_shb_stdhash_stat();
-        void rcu_shb_stdhash_5_3();
-        void rcu_shb_stdhash_5_3_stat();
-        void rcu_shb_hash128();
-        void rcu_shb_hash128_stat();
-        void rcu_shb_hash128_4_3();
-        void rcu_shb_hash128_4_3_stat();
-
-        void rcu_sht_nohash();
-        void rcu_sht_nohash_stat();
-        void rcu_sht_nohash_5_3();
-        void rcu_sht_nohash_5_3_stat();
-        void rcu_sht_stdhash();
-        void rcu_sht_stdhash_stat();
-        void rcu_sht_stdhash_5_3();
-        void rcu_sht_stdhash_5_3_stat();
-        void rcu_sht_hash128();
-        void rcu_sht_hash128_stat();
-        void rcu_sht_hash128_4_3();
-        void rcu_sht_hash128_4_3_stat();
-
-        CPPUNIT_TEST_SUITE(IntrusiveFeldmanHashSetHdrTest)
-            CPPUNIT_TEST(hp_nohash)
-            CPPUNIT_TEST(hp_nohash_stat)
-            CPPUNIT_TEST(hp_nohash_5_3)
-            CPPUNIT_TEST(hp_nohash_5_3_stat)
-            CPPUNIT_TEST(hp_stdhash)
-            CPPUNIT_TEST(hp_stdhash_stat)
-            CPPUNIT_TEST(hp_stdhash_5_3)
-            CPPUNIT_TEST(hp_stdhash_5_3_stat)
-            CPPUNIT_TEST(hp_hash128)
-            CPPUNIT_TEST(hp_hash128_stat)
-            CPPUNIT_TEST(hp_hash128_4_3)
-            CPPUNIT_TEST(hp_hash128_4_3_stat)
-
-            CPPUNIT_TEST(dhp_nohash)
-            CPPUNIT_TEST(dhp_nohash_stat)
-            CPPUNIT_TEST(dhp_nohash_5_3)
-            CPPUNIT_TEST(dhp_nohash_5_3_stat)
-            CPPUNIT_TEST(dhp_stdhash)
-            CPPUNIT_TEST(dhp_stdhash_stat)
-            CPPUNIT_TEST(dhp_stdhash_5_3)
-            CPPUNIT_TEST(dhp_stdhash_5_3_stat)
-            CPPUNIT_TEST(dhp_hash128)
-            CPPUNIT_TEST(dhp_hash128_stat)
-            CPPUNIT_TEST(dhp_hash128_4_3)
-            CPPUNIT_TEST(dhp_hash128_4_3_stat)
-
-            CPPUNIT_TEST(rcu_gpi_nohash)
-            CPPUNIT_TEST(rcu_gpi_nohash_stat)
-            CPPUNIT_TEST(rcu_gpi_nohash_5_3)
-            CPPUNIT_TEST(rcu_gpi_nohash_5_3_stat)
-            CPPUNIT_TEST(rcu_gpi_stdhash)
-            CPPUNIT_TEST(rcu_gpi_stdhash_stat)
-            CPPUNIT_TEST(rcu_gpi_stdhash_5_3)
-            CPPUNIT_TEST(rcu_gpi_stdhash_5_3_stat)
-            CPPUNIT_TEST(rcu_gpi_hash128)
-            CPPUNIT_TEST(rcu_gpi_hash128_stat)
-            CPPUNIT_TEST(rcu_gpi_hash128_4_3)
-            CPPUNIT_TEST(rcu_gpi_hash128_4_3_stat)
-
-            CPPUNIT_TEST(rcu_gpb_nohash)
-            CPPUNIT_TEST(rcu_gpb_nohash_stat)
-            CPPUNIT_TEST(rcu_gpb_nohash_5_3)
-            CPPUNIT_TEST(rcu_gpb_nohash_5_3_stat)
-            CPPUNIT_TEST(rcu_gpb_stdhash)
-            CPPUNIT_TEST(rcu_gpb_stdhash_stat)
-            CPPUNIT_TEST(rcu_gpb_stdhash_5_3)
-            CPPUNIT_TEST(rcu_gpb_stdhash_5_3_stat)
-            CPPUNIT_TEST(rcu_gpb_hash128)
-            CPPUNIT_TEST(rcu_gpb_hash128_stat)
-            CPPUNIT_TEST(rcu_gpb_hash128_4_3)
-            CPPUNIT_TEST(rcu_gpb_hash128_4_3_stat)
-
-            CPPUNIT_TEST(rcu_gpt_nohash)
-            CPPUNIT_TEST(rcu_gpt_nohash_stat)
-            CPPUNIT_TEST(rcu_gpt_nohash_5_3)
-            CPPUNIT_TEST(rcu_gpt_nohash_5_3_stat)
-            CPPUNIT_TEST(rcu_gpt_stdhash)
-            CPPUNIT_TEST(rcu_gpt_stdhash_stat)
-            CPPUNIT_TEST(rcu_gpt_stdhash_5_3)
-            CPPUNIT_TEST(rcu_gpt_stdhash_5_3_stat)
-            CPPUNIT_TEST(rcu_gpt_hash128)
-            CPPUNIT_TEST(rcu_gpt_hash128_stat)
-            CPPUNIT_TEST(rcu_gpt_hash128_4_3)
-            CPPUNIT_TEST(rcu_gpt_hash128_4_3_stat)
-
-            CPPUNIT_TEST(rcu_shb_nohash)
-            CPPUNIT_TEST(rcu_shb_nohash_stat)
-            CPPUNIT_TEST(rcu_shb_nohash_5_3)
-            CPPUNIT_TEST(rcu_shb_nohash_5_3_stat)
-            CPPUNIT_TEST(rcu_shb_stdhash)
-            CPPUNIT_TEST(rcu_shb_stdhash_stat)
-            CPPUNIT_TEST(rcu_shb_stdhash_5_3)
-            CPPUNIT_TEST(rcu_shb_stdhash_5_3_stat)
-            CPPUNIT_TEST(rcu_shb_hash128)
-            CPPUNIT_TEST(rcu_shb_hash128_stat)
-            CPPUNIT_TEST(rcu_shb_hash128_4_3)
-            CPPUNIT_TEST(rcu_shb_hash128_4_3_stat)
-
-            CPPUNIT_TEST(rcu_sht_nohash)
-            CPPUNIT_TEST(rcu_sht_nohash_stat)
-            CPPUNIT_TEST(rcu_sht_nohash_5_3)
-            CPPUNIT_TEST(rcu_sht_nohash_5_3_stat)
-            CPPUNIT_TEST(rcu_sht_stdhash)
-            CPPUNIT_TEST(rcu_sht_stdhash_stat)
-            CPPUNIT_TEST(rcu_sht_stdhash_5_3)
-            CPPUNIT_TEST(rcu_sht_stdhash_5_3_stat)
-            CPPUNIT_TEST(rcu_sht_hash128)
-            CPPUNIT_TEST(rcu_sht_hash128_stat)
-            CPPUNIT_TEST(rcu_sht_hash128_4_3)
-            CPPUNIT_TEST(rcu_sht_hash128_4_3_stat)
-
-        CPPUNIT_TEST_SUITE_END()
-
-    };
-} // namespace set
-
-#endif // #ifndef CDSTEST_HDR_INTRUSIVE_FELDMAN_HASHSET_H
diff --git a/tests/test-hdr/set/hdr_intrusive_feldman_hashset_dhp.cpp b/tests/test-hdr/set/hdr_intrusive_feldman_hashset_dhp.cpp
deleted file mode 100644 (file)
index 83ddfae..0000000
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_feldman_hashset.h"
-#include <cds/intrusive/feldman_hashset_dhp.h>
-#include "unit/print_feldman_hashset_stat.h"
-
-namespace set {
-    namespace {
-        typedef cds::gc::DHP gc_type;
-    } // namespace
-
-    void IntrusiveFeldmanHashSetHdrTest::dhp_nohash()
-    {
-        typedef size_t key_type;
-
-        struct traits : public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_hp<set_type, nohash<key_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_key<key_type>>
-                , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_hp<set_type2, nohash<key_type>>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::dhp_stdhash()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_hp<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_hp<set_type2, std::hash<hash_type>>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::dhp_hash128()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef hash128::less less;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash128!!!" );
-        test_hp<set_type, hash128::make>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                , ci::opt::less< hash_type::less >
-            >::type
-        > set_type2;
-        test_hp<set_type2, hash128::make>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::dhp_nohash_stat()
-    {
-        typedef size_t key_type;
-
-        struct traits : public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_hp<set_type, nohash<key_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-            ci::feldman_hashset::hash_accessor< get_key<key_type>>
-            , ci::opt::disposer< item_disposer >
-            , co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, nohash<key_type>>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::dhp_stdhash_stat()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_hp<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, std::hash<hash_type>>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::dhp_hash128_stat()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef hash128::cmp  compare;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_hp<set_type, hash_type::make>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-                ,co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_hp<set_type2, hash_type::make>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::dhp_nohash_5_3()
-    {
-        typedef size_t key_type;
-
-        struct traits : public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_hp<set_type, nohash<key_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-            ci::feldman_hashset::hash_accessor< get_key<key_type>>
-            , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_hp<set_type2, nohash<key_type>>(5, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::dhp_stdhash_5_3()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_hp<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_hp<set_type2, std::hash<hash_type>>(5, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::dhp_hash128_4_3()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_hp<set_type, hash128::make >(4, 3);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        > set_type2;
-        test_hp<set_type2, hash128::make >(4, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::dhp_nohash_5_3_stat()
-    {
-        typedef size_t key_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_hp<set_type, nohash<key_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_key<key_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, nohash<key_type>>(5, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::dhp_stdhash_5_3_stat()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_hp<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, std::hash<hash_type>>(5, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::dhp_hash128_4_3_stat()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-            typedef hash128::less less;
-            typedef hash128::cmp compare;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_hp<set_type, hash_type::make>(4, 3);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                , co::stat< ci::feldman_hashset::stat<>>
-                , co::less< hash_type::less >
-                , co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_hp<set_type2, hash_type::make>(4, 3);
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_feldman_hashset_hp.cpp b/tests/test-hdr/set/hdr_intrusive_feldman_hashset_hp.cpp
deleted file mode 100644 (file)
index 059e037..0000000
+++ /dev/null
@@ -1,352 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_feldman_hashset.h"
-#include <cds/intrusive/feldman_hashset_hp.h>
-#include "unit/print_feldman_hashset_stat.h"
-
-namespace set {
-    namespace {
-        typedef cds::gc::HP gc_type;
-    } // namespace
-
-    void IntrusiveFeldmanHashSetHdrTest::hp_nohash()
-    {
-        typedef size_t key_type;
-
-        struct traits : public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_hp<set_type, nohash<key_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_key<key_type>>
-                , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_hp<set_type2, nohash<key_type>>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::hp_stdhash()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_hp<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_hp<set_type2, std::hash<hash_type>>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::hp_hash128()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef hash128::less less;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash128!!!" );
-        test_hp<set_type, hash128::make>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                , ci::opt::less< hash_type::less >
-            >::type
-        > set_type2;
-        test_hp<set_type2, hash128::make>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::hp_nohash_stat()
-    {
-        typedef size_t key_type;
-
-        struct traits : public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_hp<set_type, nohash<key_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-            ci::feldman_hashset::hash_accessor< get_key<key_type>>
-            , ci::opt::disposer< item_disposer >
-            , co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, nohash<key_type>>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::hp_stdhash_stat()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_hp<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, std::hash<hash_type>>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::hp_hash128_stat()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef hash128::cmp  compare;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_hp<set_type, hash_type::make>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-                ,co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_hp<set_type2, hash_type::make>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::hp_nohash_5_3()
-    {
-        typedef size_t key_type;
-
-        struct traits : public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_hp<set_type, nohash<key_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-            ci::feldman_hashset::hash_accessor< get_key<key_type>>
-            , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_hp<set_type2, nohash<key_type>>(5, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::hp_stdhash_5_3()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_hp<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_hp<set_type2, std::hash<hash_type>>(5, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::hp_hash128_4_3()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_hp<set_type, hash128::make >(4, 3);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        > set_type2;
-        test_hp<set_type2, hash128::make >(4, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::hp_nohash_5_3_stat()
-    {
-        typedef size_t key_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_hp<set_type, nohash<key_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_key<key_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, nohash<key_type>>(5, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::hp_stdhash_5_3_stat()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_hp<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_hp<set_type2, std::hash<hash_type>>(5, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::hp_hash128_4_3_stat()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-            typedef hash128::less less;
-            typedef hash128::cmp compare;
-        };
-        typedef ci::FeldmanHashSet< gc_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_hp<set_type, hash_type::make>(4, 3);
-
-        typedef ci::FeldmanHashSet<
-            gc_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                , co::stat< ci::feldman_hashset::stat<>>
-                , co::less< hash_type::less >
-                , co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_hp<set_type2, hash_type::make>(4, 3);
-    }
-
-} // namespace set
-
-CPPUNIT_TEST_SUITE_REGISTRATION(set::IntrusiveFeldmanHashSetHdrTest);
diff --git a/tests/test-hdr/set/hdr_intrusive_feldman_hashset_rcu_gpb.cpp b/tests/test-hdr/set/hdr_intrusive_feldman_hashset_rcu_gpb.cpp
deleted file mode 100644 (file)
index ea5589f..0000000
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_feldman_hashset.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/intrusive/feldman_hashset_rcu.h>
-#include "unit/print_feldman_hashset_stat.h"
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc<cds::urcu::general_buffered<>> rcu_type;
-    } // namespace
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpb_nohash()
-    {
-        typedef size_t key_type;
-
-        struct traits : public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_key<key_type>>
-                , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpb_stdhash()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpb_hash128()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef hash128::less less;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash128!!!" );
-        test_rcu<set_type, hash128::make>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                , ci::opt::less< hash_type::less >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash128::make>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpb_nohash_stat()
-    {
-        typedef size_t key_type;
-
-        struct traits : public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-            ci::feldman_hashset::hash_accessor< get_key<key_type>>
-            , ci::opt::disposer< item_disposer >
-            , co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpb_stdhash_stat()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpb_hash128_stat()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef hash128::cmp  compare;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash_type::make>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-                ,co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash_type::make>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpb_nohash_5_3()
-    {
-        typedef size_t key_type;
-
-        struct traits : public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-            ci::feldman_hashset::hash_accessor< get_key<key_type>>
-            , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(5, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpb_stdhash_5_3()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(5, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpb_hash128_4_3()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash128::make >(4, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash128::make >(4, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpb_nohash_5_3_stat()
-    {
-        typedef size_t key_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, nohash<key_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_key<key_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(5, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpb_stdhash_5_3_stat()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(5, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpb_hash128_4_3_stat()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-            typedef hash128::less less;
-            typedef hash128::cmp compare;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash_type::make>(4, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                , co::stat< ci::feldman_hashset::stat<>>
-                , co::less< hash_type::less >
-                , co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash_type::make>(4, 3);
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_feldman_hashset_rcu_gpi.cpp b/tests/test-hdr/set/hdr_intrusive_feldman_hashset_rcu_gpi.cpp
deleted file mode 100644 (file)
index aa1b7d1..0000000
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_feldman_hashset.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/intrusive/feldman_hashset_rcu.h>
-#include "unit/print_feldman_hashset_stat.h"
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc<cds::urcu::general_instant<>> rcu_type;
-    } // namespace
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpi_nohash()
-    {
-        typedef size_t key_type;
-
-        struct traits : public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_key<key_type>>
-                , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpi_stdhash()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpi_hash128()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef hash128::less less;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash128!!!" );
-        test_rcu<set_type, hash128::make>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                , ci::opt::less< hash_type::less >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash128::make>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpi_nohash_stat()
-    {
-        typedef size_t key_type;
-
-        struct traits : public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-            ci::feldman_hashset::hash_accessor< get_key<key_type>>
-            , ci::opt::disposer< item_disposer >
-            , co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpi_stdhash_stat()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpi_hash128_stat()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef hash128::cmp  compare;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash_type::make>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-                ,co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash_type::make>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpi_nohash_5_3()
-    {
-        typedef size_t key_type;
-
-        struct traits : public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-            ci::feldman_hashset::hash_accessor< get_key<key_type>>
-            , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(5, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpi_stdhash_5_3()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(5, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpi_hash128_4_3()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash128::make >(4, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash128::make >(4, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpi_nohash_5_3_stat()
-    {
-        typedef size_t key_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, nohash<key_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_key<key_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(5, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpi_stdhash_5_3_stat()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(5, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpi_hash128_4_3_stat()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-            typedef hash128::less less;
-            typedef hash128::cmp compare;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash_type::make>(4, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                , co::stat< ci::feldman_hashset::stat<>>
-                , co::less< hash_type::less >
-                , co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash_type::make>(4, 3);
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_feldman_hashset_rcu_gpt.cpp b/tests/test-hdr/set/hdr_intrusive_feldman_hashset_rcu_gpt.cpp
deleted file mode 100644 (file)
index 91d6bb1..0000000
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_feldman_hashset.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/intrusive/feldman_hashset_rcu.h>
-#include "unit/print_feldman_hashset_stat.h"
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc<cds::urcu::general_threaded<>> rcu_type;
-    } // namespace
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpt_nohash()
-    {
-        typedef size_t key_type;
-
-        struct traits : public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_key<key_type>>
-                , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpt_stdhash()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpt_hash128()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef hash128::less less;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash128!!!" );
-        test_rcu<set_type, hash128::make>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                , ci::opt::less< hash_type::less >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash128::make>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpt_nohash_stat()
-    {
-        typedef size_t key_type;
-
-        struct traits : public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-            ci::feldman_hashset::hash_accessor< get_key<key_type>>
-            , ci::opt::disposer< item_disposer >
-            , co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpt_stdhash_stat()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpt_hash128_stat()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef hash128::cmp  compare;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash_type::make>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-                ,co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash_type::make>(4, 2);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpt_nohash_5_3()
-    {
-        typedef size_t key_type;
-
-        struct traits : public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-            ci::feldman_hashset::hash_accessor< get_key<key_type>>
-            , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(5, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpt_stdhash_5_3()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(5, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpt_hash128_4_3()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash128::make >(4, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash128::make >(4, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpt_nohash_5_3_stat()
-    {
-        typedef size_t key_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, nohash<key_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_key<key_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(5, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpt_stdhash_5_3_stat()
-    {
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(5, 3);
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_gpt_hash128_4_3_stat()
-    {
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-            typedef hash128::less less;
-            typedef hash128::cmp compare;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash_type::make>(4, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                , co::stat< ci::feldman_hashset::stat<>>
-                , co::less< hash_type::less >
-                , co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash_type::make>(4, 3);
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_feldman_hashset_rcu_shb.cpp b/tests/test-hdr/set/hdr_intrusive_feldman_hashset_rcu_shb.cpp
deleted file mode 100644 (file)
index a57b624..0000000
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_feldman_hashset.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/intrusive/feldman_hashset_rcu.h>
-#include "unit/print_feldman_hashset_stat.h"
-
-namespace set {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc<cds::urcu::signal_buffered<>> rcu_type;
-    } // namespace
-#endif
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_shb_nohash()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t key_type;
-
-        struct traits : public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_key<key_type>>
-                , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(4, 2);
-#endif
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_shb_stdhash()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(4, 2);
-#endif
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_shb_hash128()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef hash128::less less;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash128!!!" );
-        test_rcu<set_type, hash128::make>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                , ci::opt::less< hash_type::less >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash128::make>(4, 2);
-#endif
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_shb_nohash_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t key_type;
-
-        struct traits : public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-            ci::feldman_hashset::hash_accessor< get_key<key_type>>
-            , ci::opt::disposer< item_disposer >
-            , co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(4, 2);
-#endif
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_shb_stdhash_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(4, 2);
-#endif
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_shb_hash128_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef hash128::cmp  compare;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash_type::make>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-                ,co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash_type::make>(4, 2);
-#endif
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_shb_nohash_5_3()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t key_type;
-
-        struct traits : public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-            ci::feldman_hashset::hash_accessor< get_key<key_type>>
-            , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(5, 3);
-#endif
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_shb_stdhash_5_3()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(5, 3);
-#endif
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_shb_hash128_4_3()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash128::make >(4, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash128::make >(4, 3);
-#endif
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_shb_nohash_5_3_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t key_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, nohash<key_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_key<key_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(5, 3);
-#endif
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_shb_stdhash_5_3_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(5, 3);
-#endif
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_shb_hash128_4_3_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-            typedef hash128::less less;
-            typedef hash128::cmp compare;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash_type::make>(4, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                , co::stat< ci::feldman_hashset::stat<>>
-                , co::less< hash_type::less >
-                , co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash_type::make>(4, 3);
-#endif
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_feldman_hashset_rcu_sht.cpp b/tests/test-hdr/set/hdr_intrusive_feldman_hashset_rcu_sht.cpp
deleted file mode 100644 (file)
index 44c05c3..0000000
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_feldman_hashset.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/intrusive/feldman_hashset_rcu.h>
-#include "unit/print_feldman_hashset_stat.h"
-
-namespace set {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc<cds::urcu::signal_threaded<>> rcu_type;
-    } // namespace
-#endif
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_sht_nohash()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t key_type;
-
-        struct traits : public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_key<key_type>>
-                , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(4, 2);
-#endif
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_sht_stdhash()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(4, 2);
-#endif
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_sht_hash128()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef hash128::less less;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash128!!!" );
-        test_rcu<set_type, hash128::make>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                , ci::opt::less< hash_type::less >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash128::make>(4, 2);
-#endif
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_sht_nohash_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t key_type;
-
-        struct traits : public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-            ci::feldman_hashset::hash_accessor< get_key<key_type>>
-            , ci::opt::disposer< item_disposer >
-            , co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(4, 2);
-#endif
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_sht_stdhash_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(4, 2);
-#endif
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_sht_hash128_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef hash128::cmp  compare;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash_type::make>(4, 2);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-                ,co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash_type::make>(4, 2);
-#endif
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_sht_nohash_5_3()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t key_type;
-
-        struct traits : public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!");
-        test_rcu<set_type, nohash<key_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-            ci::feldman_hashset::hash_accessor< get_key<key_type>>
-            , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(5, 3);
-#endif
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_sht_stdhash_5_3()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(5, 3);
-#endif
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_sht_hash128_4_3()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash128::make >(4, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash128::make >(4, 3);
-#endif
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_sht_nohash_5_3_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t key_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_key<key_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<key_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, nohash<key_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<key_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_key<key_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, nohash<key_type>>(5, 3);
-#endif
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_sht_stdhash_5_3_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef size_t hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
-        test_rcu<set_type, std::hash<hash_type>>(5, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                ,co::stat< ci::feldman_hashset::stat<>>
-            >::type
-        > set_type2;
-        test_rcu<set_type2, std::hash<hash_type>>(5, 3);
-#endif
-    }
-
-    void IntrusiveFeldmanHashSetHdrTest::rcu_sht_hash128_4_3_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef hash128 hash_type;
-
-        struct traits: public ci::feldman_hashset::traits
-        {
-            typedef get_hash<hash_type> hash_accessor;
-            typedef item_disposer disposer;
-            typedef ci::feldman_hashset::stat<> stat;
-            typedef hash128::less less;
-            typedef hash128::cmp compare;
-        };
-        typedef ci::FeldmanHashSet< rcu_type, Item<hash_type>, traits > set_type;
-        static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
-        test_rcu<set_type, hash_type::make>(4, 3);
-
-        typedef ci::FeldmanHashSet<
-            rcu_type,
-            Item<hash_type>,
-            typename ci::feldman_hashset::make_traits<
-                ci::feldman_hashset::hash_accessor< get_hash<hash_type>>
-                , ci::opt::disposer< item_disposer >
-                , co::stat< ci::feldman_hashset::stat<>>
-                , co::less< hash_type::less >
-                , co::compare< hash128::cmp >
-            >::type
-        > set_type2;
-        test_rcu<set_type2, hash_type::make>(4, 3);
-#endif
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_michael_set_dhp.cpp b/tests/test-hdr/set/hdr_intrusive_michael_set_dhp.cpp
deleted file mode 100644 (file)
index 244603f..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/intrusive/michael_list_dhp.h>
-#include <cds/intrusive/michael_set.h>
-
-namespace set {
-
-    void IntrusiveHashSetHdrTest::DHP_base_cmp()
-    {
-        typedef base_int_item< ci::michael_list::node<cds::gc::DHP> > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::DHP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::DHP_base_less()
-    {
-        typedef base_int_item< ci::michael_list::node<cds::gc::DHP> > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        > bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::DHP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::DHP_base_cmpmix()
-    {
-        typedef base_int_item< ci::michael_list::node<cds::gc::DHP> > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::DHP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::DHP_member_cmp()
-    {
-        typedef member_int_item< ci::michael_list::node<cds::gc::DHP> > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::DHP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::DHP_member_less()
-    {
-        typedef member_int_item< ci::michael_list::node<cds::gc::DHP> > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::DHP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::DHP_member_cmpmix()
-    {
-        typedef member_int_item< ci::michael_list::node<cds::gc::DHP> > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::DHP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_michael_set_dhp_lazy.cpp b/tests/test-hdr/set/hdr_intrusive_michael_set_dhp_lazy.cpp
deleted file mode 100644 (file)
index 216fd60..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/intrusive/lazy_list_dhp.h>
-#include <cds/intrusive/michael_set.h>
-
-namespace set {
-
-    void IntrusiveHashSetHdrTest::DHP_base_cmp_lazy()
-    {
-        typedef base_int_item< ci::lazy_list::node<cds::gc::DHP> > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::DHP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::DHP_base_less_lazy()
-    {
-        typedef base_int_item< ci::lazy_list::node<cds::gc::DHP> > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::DHP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::DHP_base_cmpmix_lazy()
-    {
-        typedef base_int_item< ci::lazy_list::node<cds::gc::DHP> > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::DHP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::DHP_member_cmp_lazy()
-    {
-        typedef member_int_item< ci::lazy_list::node<cds::gc::DHP> > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::DHP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::DHP_member_less_lazy()
-    {
-        typedef member_int_item< ci::lazy_list::node<cds::gc::DHP> > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::DHP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::DHP_member_cmpmix_lazy()
-    {
-        typedef member_int_item< ci::lazy_list::node<cds::gc::DHP> > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::DHP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_michael_set_hp.cpp b/tests/test-hdr/set/hdr_intrusive_michael_set_hp.cpp
deleted file mode 100644 (file)
index 5f18fd1..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/intrusive/michael_list_hp.h>
-#include <cds/intrusive/michael_set.h>
-
-namespace set {
-
-    void IntrusiveHashSetHdrTest::HP_base_cmp()
-    {
-        typedef base_int_item< ci::michael_list::node<cds::gc::HP> > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::HP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::HP_base_less()
-    {
-        typedef base_int_item< ci::michael_list::node<cds::gc::HP> > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::HP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::HP_base_cmpmix()
-    {
-        typedef base_int_item< ci::michael_list::node<cds::gc::HP> > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::HP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::HP_member_cmp()
-    {
-        typedef member_int_item< ci::michael_list::node<cds::gc::HP> > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::HP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::HP_member_less()
-    {
-        typedef member_int_item< ci::michael_list::node<cds::gc::HP> > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::HP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::HP_member_cmpmix()
-    {
-        typedef member_int_item< ci::michael_list::node<cds::gc::HP> > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::HP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-} // namespace set
-
-CPPUNIT_TEST_SUITE_REGISTRATION(set::IntrusiveHashSetHdrTest);
diff --git a/tests/test-hdr/set/hdr_intrusive_michael_set_hp_lazy.cpp b/tests/test-hdr/set/hdr_intrusive_michael_set_hp_lazy.cpp
deleted file mode 100644 (file)
index 9e930e2..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/intrusive/lazy_list_hp.h>
-#include <cds/intrusive/michael_set.h>
-
-namespace set {
-
-    void IntrusiveHashSetHdrTest::HP_base_cmp_lazy()
-    {
-        typedef base_int_item< ci::lazy_list::node<cds::gc::HP> > item;
-        struct list_traits :
-            public ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::opt::back_off< cds::backoff::pause >
-            >::type
-        {};
-        typedef ci::LazyList< cds::gc::HP, item, list_traits > bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::HP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::HP_base_less_lazy()
-    {
-        typedef base_int_item< ci::lazy_list::node<cds::gc::HP> > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::HP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::HP_base_cmpmix_lazy()
-    {
-        typedef base_int_item< ci::lazy_list::node<cds::gc::HP> > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::HP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::HP_member_cmp_lazy()
-    {
-        typedef member_int_item< ci::lazy_list::node<cds::gc::HP> > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::HP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::HP_member_less_lazy()
-    {
-        typedef member_int_item< ci::lazy_list::node<cds::gc::HP> > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::HP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::HP_member_cmpmix_lazy()
-    {
-        typedef member_int_item< ci::lazy_list::node<cds::gc::HP> > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::HP, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_int<set>();
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_michael_set_nogc.cpp b/tests/test-hdr/set/hdr_intrusive_michael_set_nogc.cpp
deleted file mode 100644 (file)
index 1eecec2..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/intrusive/michael_list_nogc.h>
-#include <cds/intrusive/michael_set_nogc.h>
-
-namespace set {
-
-    void IntrusiveHashSetHdrTest::nogc_base_cmp()
-    {
-        typedef base_int_item< ci::michael_list::node<cds::gc::nogc> > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::nogc, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::nogc_base_less()
-    {
-        typedef base_int_item< ci::michael_list::node<cds::gc::nogc> > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::nogc, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::nogc_base_cmpmix()
-    {
-        typedef base_int_item< ci::michael_list::node<cds::gc::nogc> > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::nogc, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::nogc_member_cmp()
-    {
-        typedef member_int_item< ci::michael_list::node<cds::gc::nogc> > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::nogc, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::nogc_member_less()
-    {
-        typedef member_int_item< ci::michael_list::node<cds::gc::nogc> > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::nogc, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::nogc_member_cmpmix()
-    {
-        typedef member_int_item< ci::michael_list::node<cds::gc::nogc> > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::nogc, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_michael_set_nogc_lazy.cpp b/tests/test-hdr/set/hdr_intrusive_michael_set_nogc_lazy.cpp
deleted file mode 100644 (file)
index 4a82695..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/intrusive/lazy_list_nogc.h>
-#include <cds/intrusive/michael_set_nogc.h>
-
-namespace set {
-
-    void IntrusiveHashSetHdrTest::nogc_base_cmp_lazy()
-    {
-        typedef base_int_item< ci::lazy_list::node<cds::gc::nogc> > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::nogc, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::nogc_base_less_lazy()
-    {
-        typedef base_int_item< ci::lazy_list::node<cds::gc::nogc> > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::nogc, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::nogc_base_cmpmix_lazy()
-    {
-        typedef base_int_item< ci::lazy_list::node<cds::gc::nogc> > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::nogc, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::nogc_member_cmp_lazy()
-    {
-        typedef member_int_item< ci::lazy_list::node<cds::gc::nogc> > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::nogc, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::nogc_member_less_lazy()
-    {
-        typedef member_int_item< ci::lazy_list::node<cds::gc::nogc> > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::nogc, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::nogc_member_cmpmix_lazy()
-    {
-        typedef member_int_item< ci::lazy_list::node<cds::gc::nogc> > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< cds::gc::nogc, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpb.cpp b/tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpb.cpp
deleted file mode 100644 (file)
index c303f80..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/intrusive/michael_list_rcu.h>
-#include <cds/intrusive/michael_set_rcu.h>
-
-namespace set {
-
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> >   RCU;
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPB_base_cmp()
-    {
-        typedef base_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPB_base_less()
-    {
-        typedef base_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPB_base_cmpmix()
-    {
-        typedef base_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPB_member_cmp()
-    {
-        typedef member_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPB_member_less()
-    {
-        typedef member_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPB_member_cmpmix()
-    {
-        typedef member_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpb_lazy.cpp b/tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpb_lazy.cpp
deleted file mode 100644 (file)
index a325beb..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/intrusive/lazy_list_rcu.h>
-#include <cds/intrusive/michael_set_rcu.h>
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> >   RCU;
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPB_base_cmp_lazy()
-    {
-        typedef base_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::opt::back_off< cds::backoff::pause >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPB_base_less_lazy()
-    {
-        typedef base_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPB_base_cmpmix_lazy()
-    {
-        typedef base_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPB_member_cmp_lazy()
-    {
-        typedef member_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPB_member_less_lazy()
-    {
-        typedef member_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPB_member_cmpmix_lazy()
-    {
-        typedef member_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpi.cpp b/tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpi.cpp
deleted file mode 100644 (file)
index 9639149..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/intrusive/michael_list_rcu.h>
-#include <cds/intrusive/michael_set_rcu.h>
-
-namespace set {
-
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> >   RCU;
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPI_base_cmp()
-    {
-        typedef base_int_item< ci::michael_list::node<RCU> > item;
-        struct list_traits :
-            public ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        {};
-        typedef ci::MichaelList< RCU, item, list_traits > bucket_type;
-
-        struct set_traits : public ci::michael_set::traits
-        {
-            typedef hash_int hash;
-        };
-        typedef ci::MichaelHashSet< RCU, bucket_type, set_traits > set;
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPI_base_less()
-    {
-        typedef base_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPI_base_cmpmix()
-    {
-        typedef base_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPI_member_cmp()
-    {
-        typedef member_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPI_member_less()
-    {
-        typedef member_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPI_member_cmpmix()
-    {
-        typedef member_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpi_lazy.cpp b/tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpi_lazy.cpp
deleted file mode 100644 (file)
index 9d0425e..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/intrusive/lazy_list_rcu.h>
-#include <cds/intrusive/michael_set_rcu.h>
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> >   RCU;
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPI_base_cmp_lazy()
-    {
-        typedef base_int_item< ci::lazy_list::node<RCU> > item;
-        struct list_traits :
-            public ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::opt::back_off< cds::backoff::pause >
-            >::type
-        {};
-
-        typedef ci::LazyList< RCU, item, list_traits >    bucket_type;
-
-        struct set_traits : public ci::michael_set::traits
-        {
-            typedef hash_int hash;
-        };
-        typedef ci::MichaelHashSet< RCU, bucket_type, set_traits > set;
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPI_base_less_lazy()
-    {
-        typedef base_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPI_base_cmpmix_lazy()
-    {
-        typedef base_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPI_member_cmp_lazy()
-    {
-        typedef member_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPI_member_less_lazy()
-    {
-        typedef member_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPI_member_cmpmix_lazy()
-    {
-        typedef member_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpt.cpp b/tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpt.cpp
deleted file mode 100644 (file)
index 32dfc68..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/intrusive/michael_list_rcu.h>
-#include <cds/intrusive/michael_set_rcu.h>
-
-namespace set {
-
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> >   RCU;
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPT_base_cmp()
-    {
-        typedef base_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPT_base_less()
-    {
-        typedef base_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPT_base_cmpmix()
-    {
-        typedef base_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPT_member_cmp()
-    {
-        typedef member_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPT_member_less()
-    {
-        typedef member_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPT_member_cmpmix()
-    {
-        typedef member_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpt_lazy.cpp b/tests/test-hdr/set/hdr_intrusive_michael_set_rcu_gpt_lazy.cpp
deleted file mode 100644 (file)
index ce49690..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/intrusive/lazy_list_rcu.h>
-#include <cds/intrusive/michael_set_rcu.h>
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> >   RCU;
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPT_base_cmp_lazy()
-    {
-        typedef base_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::opt::back_off< cds::backoff::pause >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPT_base_less_lazy()
-    {
-        typedef base_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPT_base_cmpmix_lazy()
-    {
-        typedef base_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPT_member_cmp_lazy()
-    {
-        typedef member_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPT_member_less_lazy()
-    {
-        typedef member_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_GPT_member_cmpmix_lazy()
-    {
-        typedef member_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_michael_set_rcu_shb.cpp b/tests/test-hdr/set/hdr_intrusive_michael_set_rcu_shb.cpp
deleted file mode 100644 (file)
index b9f461d..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/intrusive/michael_list_rcu.h>
-#include <cds/intrusive/michael_set_rcu.h>
-
-namespace set {
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> >   RCU;
-    }
-#endif
-
-    void IntrusiveHashSetHdrTest::RCU_SHB_base_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_SHB_base_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_SHB_base_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_SHB_member_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_SHB_member_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_SHB_member_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_michael_set_rcu_shb_lazy.cpp b/tests/test-hdr/set/hdr_intrusive_michael_set_rcu_shb_lazy.cpp
deleted file mode 100644 (file)
index e564e6d..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/intrusive/lazy_list_rcu.h>
-#include <cds/intrusive/michael_set_rcu.h>
-
-namespace set {
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> >   RCU;
-    }
-#endif
-
-    void IntrusiveHashSetHdrTest::RCU_SHB_base_cmp_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::opt::back_off< cds::backoff::pause >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_SHB_base_less_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_SHB_base_cmpmix_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_SHB_member_cmp_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_SHB_member_less_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_SHB_member_cmpmix_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-#endif
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_michael_set_rcu_sht.cpp b/tests/test-hdr/set/hdr_intrusive_michael_set_rcu_sht.cpp
deleted file mode 100644 (file)
index ef26d24..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/intrusive/michael_list_rcu.h>
-#include <cds/intrusive/michael_set_rcu.h>
-
-namespace set {
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> >   RCU;
-    }
-#endif
-
-    void IntrusiveHashSetHdrTest::RCU_SHT_base_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_SHT_base_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_SHT_base_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_SHT_member_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_SHT_member_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_SHT_member_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::michael_list::node<RCU> > item;
-        typedef ci::MichaelList< RCU
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_michael_set_rcu_sht_lazy.cpp b/tests/test-hdr/set/hdr_intrusive_michael_set_rcu_sht_lazy.cpp
deleted file mode 100644 (file)
index 2c0d76d..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/intrusive/lazy_list_rcu.h>
-#include <cds/intrusive/michael_set_rcu.h>
-
-namespace set {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> >   RCU;
-    }
-#endif
-
-    void IntrusiveHashSetHdrTest::RCU_SHT_base_cmp_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::opt::back_off< cds::backoff::pause >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_SHT_base_less_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_SHT_base_cmpmix_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_SHT_member_cmp_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_SHT_member_less_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::RCU_SHT_member_cmpmix_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::lazy_list::node<RCU> > item;
-        typedef ci::LazyList< RCU
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<RCU>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::MichaelHashSet< RCU, bucket_type,
-            ci::michael_set::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-
-        test_rcu_int<set>();
-#endif
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_refinable_hashset_avlset.cpp b/tests/test-hdr/set/hdr_intrusive_refinable_hashset_avlset.cpp
deleted file mode 100644 (file)
index 8709077..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_striped_set.h"
-#include <cds/intrusive/striped_set/boost_avl_set.h>
-#include <cds/intrusive/striped_set.h>
-
-namespace set {
-    namespace bi = boost::intrusive;
-
-    namespace {
-        typedef IntrusiveStripedSetHdrTest::base_item< bi::avl_set_base_hook<> > base_item_type;
-        typedef IntrusiveStripedSetHdrTest::member_item< bi::avl_set_member_hook<> > member_item_type;
-
-        template <typename T, typename Node>
-        struct get_key
-        {
-            typedef T type;
-
-            type const& operator()( Node const& v ) const
-            {
-                return v.nKey;
-            }
-        };
-    }
-
-#if BOOST_VERSION >= 105900
-#   define CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( type ) ,bi::key_of_value< get_key< int, type>>
-#else
-#   define CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( type )
-#endif
-
-    void IntrusiveStripedSetHdrTest::Refinable_avl_set_basehook()
-    {
-        typedef ci::StripedSet<
-            bi::avl_set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::back_off< cds::backoff::empty >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_avl_set_basehook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::avl_set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<64> >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_avl_set_basehook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::avl_set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(256) );
-        test_with( s );
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_avl_set_memberhook()
-    {
-        typedef ci::StripedSet<
-            bi::avl_set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::avl_set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_avl_set_memberhook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::avl_set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::avl_set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<256> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_avl_set_memberhook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::avl_set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::avl_set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(256) );
-        test_with( s );
-    }
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_intrusive_refinable_hashset_list.cpp b/tests/test-hdr/set/hdr_intrusive_refinable_hashset_list.cpp
deleted file mode 100644 (file)
index 3933eec..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_striped_set.h"
-#include <cds/intrusive/striped_set/boost_list.h>
-#include <cds/intrusive/striped_set.h>
-
-#include <type_traits> // std::is_same
-
-namespace set {
-    namespace bi = boost::intrusive;
-
-    namespace {
-        typedef IntrusiveStripedSetHdrTest::base_item< bi::list_base_hook<> > base_item_type;
-        typedef IntrusiveStripedSetHdrTest::member_item< bi::list_member_hook<> > member_item_type;
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_list_basehook_cmp()
-    {
-        typedef ci::StripedSet<
-            bi::list<base_item_type>
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<base_item_type> >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<base_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_list_basehook_less()
-    {
-        typedef ci::StripedSet<
-            bi::list<base_item_type>
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<base_item_type> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_list_basehook_cmpmix()
-    {
-        typedef ci::StripedSet<
-            bi::list<base_item_type>
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::less< IntrusiveStripedSetHdrTest::less<base_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<base_item_type> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<base_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_list_basehook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::list<base_item_type>
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<base_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<base_item_type> >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<8> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<base_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_list_basehook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::list<base_item_type>
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<base_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<base_item_type> >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<base_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        set_type s( 128, ci::striped_set::single_bucket_size_threshold<0>(4) );
-        test_with( s );
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_list_memberhook_cmp()
-    {
-        typedef ci::StripedSet<
-            bi::list<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::list_member_hook<>, &member_item_type::hMember>
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<member_item_type> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_list_memberhook_less()
-    {
-        typedef ci::StripedSet<
-            bi::list<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::list_member_hook<>, &member_item_type::hMember>
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<member_item_type> >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_list_memberhook_cmpmix()
-    {
-        typedef ci::StripedSet<
-            bi::list<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::list_member_hook<>, &member_item_type::hMember>
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<member_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<member_item_type> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_list_memberhook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::list<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::list_member_hook<>, &member_item_type::hMember>
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<member_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<member_item_type> >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<8> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<member_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_list_memberhook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::list<
-            member_item_type
-            , bi::member_hook< member_item_type, bi::list_member_hook<>, &member_item_type::hMember>
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<member_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<member_item_type> >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<member_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        set_type s( 128, ci::striped_set::single_bucket_size_threshold<0>(4) );
-        test_with( s );
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_intrusive_refinable_hashset_set.cpp b/tests/test-hdr/set/hdr_intrusive_refinable_hashset_set.cpp
deleted file mode 100644 (file)
index 60302c3..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_striped_set.h"
-#include <cds/intrusive/striped_set/boost_set.h>
-#include <cds/intrusive/striped_set.h>
-
-namespace set {
-    namespace bi = boost::intrusive;
-
-    namespace {
-        typedef IntrusiveStripedSetHdrTest::base_item< bi::set_base_hook<> > base_item_type;
-        typedef IntrusiveStripedSetHdrTest::member_item< bi::set_member_hook<> > member_item_type;
-
-        template <typename T, typename Node>
-        struct get_key
-        {
-            typedef T type;
-
-            type const& operator()( Node const& v ) const
-            {
-                return v.nKey;
-            }
-        };
-    }
-
-#if BOOST_VERSION >= 105900
-#   define CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( type ) ,bi::key_of_value< get_key< int, type>>
-#else
-#   define CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( type )
-#endif
-
-    void IntrusiveStripedSetHdrTest::Refinable_set_basehook()
-    {
-        typedef ci::StripedSet<
-            bi::set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_set_basehook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<64> >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_set_basehook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(256) );
-        test_with( s );
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_set_memberhook()
-    {
-        typedef ci::StripedSet<
-            bi::set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_set_memberhook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<256> >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_set_memberhook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(256) );
-        test_with( s );
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_intrusive_refinable_hashset_sgset.cpp b/tests/test-hdr/set/hdr_intrusive_refinable_hashset_sgset.cpp
deleted file mode 100644 (file)
index 292b200..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_striped_set.h"
-#include <cds/intrusive/striped_set/boost_sg_set.h>
-#include <cds/intrusive/striped_set.h>
-
-namespace set {
-    namespace bi = boost::intrusive;
-
-    namespace {
-        typedef IntrusiveStripedSetHdrTest::base_item< bi::bs_set_base_hook<> > base_item_type;
-        typedef IntrusiveStripedSetHdrTest::member_item< bi::bs_set_member_hook<> > member_item_type;
-
-        template <typename T, typename Node>
-        struct get_key
-        {
-            typedef T type;
-
-            type const& operator()( Node const& v ) const
-            {
-                return v.nKey;
-            }
-        };
-    }
-
-#if BOOST_VERSION >= 105900
-#   define CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( type ) ,bi::key_of_value< get_key< int, type>>
-#else
-#   define CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( type )
-#endif
-
-    void IntrusiveStripedSetHdrTest::Refinable_sg_set_basehook()
-    {
-        typedef ci::StripedSet<
-            bi::sg_set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_sg_set_basehook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::sg_set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<64> >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_sg_set_basehook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::sg_set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(256) );
-        test_with( s );
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_sg_set_memberhook()
-    {
-        typedef ci::StripedSet<
-            bi::sg_set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::bs_set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_sg_set_memberhook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::sg_set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::bs_set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<256> >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_sg_set_memberhook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::sg_set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::bs_set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(256) );
-        test_with( s );
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_intrusive_refinable_hashset_slist.cpp b/tests/test-hdr/set/hdr_intrusive_refinable_hashset_slist.cpp
deleted file mode 100644 (file)
index 9439fcf..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_striped_set.h"
-#include <cds/intrusive/striped_set/boost_slist.h>
-#include <cds/intrusive/striped_set.h>
-
-#include <type_traits>    // std::is_same
-
-namespace set {
-    namespace bi = boost::intrusive;
-
-    namespace {
-        typedef IntrusiveStripedSetHdrTest::base_item< bi::slist_base_hook<> > base_item_type;
-        typedef IntrusiveStripedSetHdrTest::member_item< bi::slist_member_hook<> > member_item_type;
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_slist_basehook_cmp()
-    {
-        typedef ci::StripedSet<
-            bi::slist<base_item_type>
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<base_item_type> >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<base_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_slist_basehook_less()
-    {
-        typedef ci::StripedSet<
-            bi::slist<base_item_type>
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<base_item_type> >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_slist_basehook_cmpmix()
-    {
-        typedef ci::StripedSet<
-            bi::slist<base_item_type>
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<base_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<base_item_type> >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<base_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_slist_basehook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::slist<base_item_type>
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<base_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<base_item_type> >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<8> >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<base_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_slist_basehook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::slist<base_item_type>
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<base_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<base_item_type> >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<base_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        set_type s( 128, ci::striped_set::single_bucket_size_threshold<0>(4) );
-        test_with( s );
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_slist_memberhook_cmp()
-    {
-        typedef ci::StripedSet<
-            bi::slist<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::slist_member_hook<>, &member_item_type::hMember>
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<member_item_type> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_slist_memberhook_less()
-    {
-        typedef ci::StripedSet<
-            bi::slist<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::slist_member_hook<>, &member_item_type::hMember>
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<member_item_type> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_slist_memberhook_cmpmix()
-    {
-        typedef ci::StripedSet<
-            bi::slist<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::slist_member_hook<>, &member_item_type::hMember>
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<member_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<member_item_type> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_slist_memberhook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::slist<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::slist_member_hook<>, &member_item_type::hMember>
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<member_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<member_item_type> >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<8> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<member_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_slist_memberhook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::slist<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::slist_member_hook<>, &member_item_type::hMember>
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<member_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<member_item_type> >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<member_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        set_type s( 128, ci::striped_set::single_bucket_size_threshold<0>(4) );
-        test_with( s );
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_intrusive_refinable_hashset_splayset.cpp b/tests/test-hdr/set/hdr_intrusive_refinable_hashset_splayset.cpp
deleted file mode 100644 (file)
index f86eb2d..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_striped_set.h"
-#include <cds/intrusive/striped_set/boost_splay_set.h>
-#include <cds/intrusive/striped_set.h>
-#include <boost/version.hpp>
-
-namespace set {
-    namespace bi = boost::intrusive;
-
-    namespace {
-#   if BOOST_VERSION < 105600
-        typedef bi::splay_set_member_hook<> splay_set_member_hook;
-        typedef bi::splay_set_base_hook<> splay_set_base_hook;
-#else
-        typedef bi::bs_set_base_hook<> splay_set_base_hook;
-        typedef bi::bs_set_member_hook<> splay_set_member_hook;
-#endif
-        typedef IntrusiveStripedSetHdrTest::base_item< splay_set_base_hook > base_item_type;
-        typedef IntrusiveStripedSetHdrTest::member_item< splay_set_member_hook > member_item_type;
-
-        template <typename T, typename Node>
-        struct get_key
-        {
-            typedef T type;
-
-            type const& operator()( Node const& v ) const
-            {
-                return v.nKey;
-            }
-        };
-    }
-
-#if BOOST_VERSION >= 105900
-#   define CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( type ) ,bi::key_of_value< get_key< int, type>>
-#else
-#   define CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( type )
-#endif
-
-    void IntrusiveStripedSetHdrTest::Refinable_splay_set_basehook()
-    {
-        typedef ci::StripedSet<
-            bi::splay_set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::back_off< cds::backoff::empty >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_splay_set_basehook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::splay_set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<64> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_splay_set_basehook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::splay_set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(256) );
-        test_with( s );
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_splay_set_memberhook()
-    {
-        typedef ci::StripedSet<
-            bi::splay_set<
-                member_item_type
-                , bi::member_hook< member_item_type, splay_set_member_hook, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_splay_set_memberhook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::splay_set<
-                member_item_type
-                , bi::member_hook< member_item_type, splay_set_member_hook, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<256> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_splay_set_memberhook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::splay_set<
-                member_item_type
-                , bi::member_hook< member_item_type, splay_set_member_hook, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(256) );
-        test_with( s );
-    }
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_intrusive_refinable_hashset_treapset.cpp b/tests/test-hdr/set/hdr_intrusive_refinable_hashset_treapset.cpp
deleted file mode 100644 (file)
index f081dc5..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_striped_set.h"
-#include <cds/intrusive/striped_set/boost_treap_set.h>
-#include <cds/intrusive/striped_set.h>
-
-namespace set {
-    namespace bi = boost::intrusive;
-
-    namespace {
-        typedef IntrusiveStripedSetHdrTest::base_item< bi::bs_set_base_hook<> > base_item_type;
-        typedef IntrusiveStripedSetHdrTest::member_item< bi::bs_set_member_hook<> > member_item_type;
-
-        template <typename T>
-        struct priority_cmp: private IntrusiveStripedSetHdrTest::less<T>
-        {
-            typedef IntrusiveStripedSetHdrTest::less<T> base_class;
-
-            template <typename A, typename B>
-            bool operator()( A const& a, B const& b ) const
-            {
-                return base_class::operator()( b, a );
-            }
-        };
-
-        template <typename T, typename Node>
-        struct get_key
-        {
-            typedef T type;
-
-            type const& operator()( Node const& v ) const
-            {
-                return v.nKey;
-            }
-        };
-    }
-
-#if BOOST_VERSION >= 105900
-#   define CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( type ) ,bi::key_of_value< get_key< int, type>>
-#else
-#   define CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( type )
-#endif
-
-    void IntrusiveStripedSetHdrTest::Refinable_treap_set_basehook()
-    {
-        typedef ci::StripedSet<
-            bi::treap_set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                , bi::priority<priority_cmp<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_treap_set_basehook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::treap_set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type> >
-                , bi::priority<priority_cmp<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<64> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_treap_set_basehook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::treap_set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                , bi::priority<priority_cmp<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(256) );
-        test_with( s );
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_treap_set_memberhook()
-    {
-        typedef ci::StripedSet<
-            bi::treap_set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::bs_set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                , bi::priority<priority_cmp<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_treap_set_memberhook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::treap_set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::bs_set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                , bi::priority<priority_cmp<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<256> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_treap_set_memberhook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::treap_set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::bs_set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                , bi::priority<priority_cmp<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(256) );
-        test_with( s );
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_intrusive_refinable_hashset_uset.cpp b/tests/test-hdr/set/hdr_intrusive_refinable_hashset_uset.cpp
deleted file mode 100644 (file)
index 5cfaf2a..0000000
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_striped_set.h"
-#include <cds/intrusive/striped_set/boost_unordered_set.h>
-#include <cds/intrusive/striped_set.h>
-
-namespace set {
-    namespace bi = boost::intrusive;
-
-    namespace {
-        typedef IntrusiveStripedSetHdrTest::base_item< bi::unordered_set_base_hook<> > base_item_type;
-        typedef IntrusiveStripedSetHdrTest::member_item< bi::unordered_set_member_hook<> > member_item_type;
-
-        struct hasher: private IntrusiveStripedSetHdrTest::hash_int
-        {
-            typedef IntrusiveStripedSetHdrTest::hash_int base_class;
-
-            size_t operator()( int i ) const
-            {
-                return ~( base_class::operator()(i));
-            }
-            template <typename Item>
-            size_t operator()( const Item& i ) const
-            {
-                return ~( base_class::operator()(i));
-            }
-            size_t operator()( IntrusiveStripedSetHdrTest::find_key const& i) const
-            {
-                return ~( base_class::operator()(i));
-            }
-        };
-
-        template <typename T>
-        struct is_equal: private IntrusiveStripedSetHdrTest::cmp<T>
-        {
-            typedef IntrusiveStripedSetHdrTest::cmp<T> base_class;
-
-            bool operator ()(const T& v1, const T& v2 ) const
-            {
-                return base_class::operator()( v1, v2 ) == 0;
-            }
-
-            template <typename Q>
-            bool operator ()(const T& v1, const Q& v2 ) const
-            {
-                return base_class::operator()( v1, v2 ) == 0;
-            }
-
-            template <typename Q>
-            bool operator ()(const Q& v1, const T& v2 ) const
-            {
-                return base_class::operator()( v1, v2 ) == 0;
-            }
-        };
-
-        template <size_t Capacity, typename T, class Alloc = CDS_DEFAULT_ALLOCATOR>
-        struct dyn_buffer: public co::v::dynamic_buffer< T, Alloc >
-        {
-            typedef co::v::dynamic_buffer< T, Alloc >   base_class;
-        public:
-            template <typename Q>
-            struct rebind {
-                typedef dyn_buffer<Capacity, Q, Alloc> other   ;  ///< Rebinding result type
-            };
-
-            dyn_buffer()
-                : base_class( Capacity )
-            {}
-        };
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_unordered_set_basehook()
-    {
-        typedef ci::StripedSet<
-            bi::unordered_set<base_item_type
-                , bi::hash< hasher >
-                , bi::equal< is_equal<base_item_type> >
-                , bi::power_2_buckets<true>
-                , bi::incremental<true>
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_unordered_set_basehook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::unordered_set<base_item_type
-                , bi::hash< hasher >
-                , bi::equal< is_equal<base_item_type> >
-                , bi::power_2_buckets<true>
-                , bi::incremental<true>
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::buffer< co::v::static_buffer< cds::any_type, 64 > >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<256> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_unordered_set_basehook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::unordered_set<base_item_type
-                , bi::hash< hasher >
-                , bi::equal< is_equal<base_item_type> >
-                , bi::power_2_buckets<true>
-                , bi::incremental<true>
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::buffer< dyn_buffer< 256, cds::any_type, std::allocator<int> > >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(512) );
-        test_with( s );
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_unordered_set_memberhook()
-    {
-        typedef ci::StripedSet<
-            bi::unordered_set<member_item_type
-                , bi::member_hook< member_item_type, bi::unordered_set_member_hook<>, &member_item_type::hMember>
-                , bi::hash< hasher >
-                , bi::equal< is_equal<member_item_type> >
-                , bi::power_2_buckets<true>
-                , bi::incremental<true>
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_unordered_set_memberhook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::unordered_set<member_item_type
-                , bi::member_hook< member_item_type, bi::unordered_set_member_hook<>, &member_item_type::hMember>
-                , bi::hash< hasher >
-                , bi::equal< is_equal<member_item_type> >
-                , bi::power_2_buckets<true>
-                , bi::incremental<true>
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::buffer< dyn_buffer< 64, cds::any_type, std::allocator<int> > >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<256> >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Refinable_unordered_set_memberhook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::unordered_set<member_item_type
-                , bi::member_hook< member_item_type, bi::unordered_set_member_hook<>, &member_item_type::hMember>
-                , bi::hash< hasher >
-                , bi::equal< is_equal<member_item_type> >
-                , bi::power_2_buckets<true>
-                , bi::incremental<true>
-            >
-            ,co::mutex_policy< ci::striped_set::refinable<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::buffer< co::v::static_buffer< cds::any_type, 128 > >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(256) );
-        test_with( s );
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_intrusive_set.h b/tests/test-hdr/set/hdr_intrusive_set.h
deleted file mode 100644 (file)
index e27a88c..0000000
+++ /dev/null
@@ -1,2043 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_INTRUSIVE_SET_H
-#define CDSTEST_HDR_INTRUSIVE_SET_H
-
-#include "cppunit/cppunit_proxy.h"
-#include "size_check.h"
-
-#include <cds/opt/hash.h>
-#include <functional>   // ref
-
-// forward declaration
-namespace cds { namespace intrusive {} }
-
-namespace set {
-    using misc::check_size;
-
-    namespace ci = cds::intrusive;
-    namespace co = cds::opt;
-
-    class IntrusiveHashSetHdrTest: public CppUnitMini::TestCase
-    {
-    protected:
-        struct stat
-        {
-            unsigned int nDisposeCount  ;   // count of disposer calling
-            unsigned int nFindCount     ;   // count of find-functor calling
-            unsigned int nUpdateNewCount;
-            unsigned int nUpdateCount;
-            mutable unsigned int nEraseCount;
-
-            stat()
-            {
-                memset( this, 0, sizeof(*this));
-            }
-        };
-
-        template <typename Node>
-        struct base_int_item
-            : public Node
-            , public stat
-
-        {
-            int nKey;
-            int nVal;
-
-            base_int_item()
-            {}
-
-            base_int_item(int key, int val)
-                : nKey( key )
-                , nVal(val)
-            {}
-
-            base_int_item(const base_int_item& v )
-                : Node()
-                , stat()
-                , nKey( v.nKey )
-                , nVal( v.nVal )
-            {}
-
-            int key() const
-            {
-                return nKey;
-            }
-        };
-
-        template <typename Node>
-        struct member_int_item: public stat
-        {
-            int nKey;
-            int nVal;
-
-            Node hMember;
-
-            stat s;
-
-            member_int_item()
-            {}
-
-            member_int_item(int key, int val)
-                : nKey( key )
-                , nVal(val)
-            {}
-
-            member_int_item(const member_int_item& v )
-                : stat()
-                , nKey( v.nKey )
-                , nVal( v.nVal )
-            {}
-
-            int key() const
-            {
-                return nKey;
-            }
-        };
-
-        struct hash_int {
-            size_t operator()( int i ) const
-            {
-                return co::v::hash<int>()( i );
-            }
-            template <typename Item>
-            size_t operator()( const Item& i ) const
-            {
-                return (*this)( i.key() );
-            }
-        };
-
-        struct simple_item_counter {
-            size_t  m_nCount;
-
-            simple_item_counter()
-                : m_nCount(0)
-            {}
-
-            size_t operator ++()
-            {
-                return ++m_nCount;
-            }
-
-            size_t operator --()
-            {
-                return --m_nCount;
-            }
-
-            void reset()
-            {
-                m_nCount = 0;
-            }
-
-            operator size_t() const
-            {
-                return m_nCount;
-            }
-
-        };
-
-
-        template <typename T>
-        struct less
-        {
-            bool operator ()(const T& v1, const T& v2 ) const
-            {
-                return v1.key() < v2.key();
-            }
-
-            template <typename Q>
-            bool operator ()(const T& v1, const Q& v2 ) const
-            {
-                return v1.key() < v2;
-            }
-
-            template <typename Q>
-            bool operator ()(const Q& v1, const T& v2 ) const
-            {
-                return v1 < v2.key();
-            }
-        };
-
-        template <typename T>
-        struct cmp {
-            int operator ()(const T& v1, const T& v2 ) const
-            {
-                if ( v1.key() < v2.key() )
-                    return -1;
-                return v1.key() > v2.key() ? 1 : 0;
-            }
-
-            template <typename Q>
-            int operator ()(const T& v1, const Q& v2 ) const
-            {
-                if ( v1.key() < v2 )
-                    return -1;
-                return v1.key() > v2 ? 1 : 0;
-            }
-
-            template <typename Q>
-            int operator ()(const Q& v1, const T& v2 ) const
-            {
-                if ( v1 < v2.key() )
-                    return -1;
-                return v1 > v2.key() ? 1 : 0;
-            }
-        };
-
-        struct faked_disposer
-        {
-            template <typename T>
-            void operator ()( T * p )
-            {
-                ++p->nDisposeCount;
-            }
-        };
-
-        struct find_functor
-        {
-            template <typename Item, typename T>
-            void operator()( Item& item, T& /*val*/ )
-            {
-                ++item.nFindCount;
-            }
-        };
-
-        struct insert_functor
-        {
-            template <typename Item>
-            void operator()(Item& item )
-            {
-                item.nVal = item.nKey * 100;
-            }
-        };
-
-        struct update_functor
-        {
-            template <typename Item>
-            void operator()( bool bNew, Item& item, Item& /*val*/ )
-            {
-                if ( bNew )
-                    ++item.nUpdateNewCount;
-                else
-                    ++item.nUpdateCount;
-            }
-        };
-
-        struct erase_functor
-        {
-            template <typename Item>
-            void operator()( Item const& item )
-            {
-                item.nEraseCount++;
-            }
-        };
-
-        template <class Set>
-        void test_int_with( Set& s )
-        {
-            typedef typename Set::value_type    value_type;
-
-            value_type v1( 10, 50 );
-            value_type v2( 5, 25  );
-            value_type v3( 20, 100 );
-            int key;
-
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-
-            // insert/find test
-            CPPUNIT_ASSERT( !s.contains( v1.key() ));
-            CPPUNIT_ASSERT( s.insert( v1 ));
-            CPPUNIT_ASSERT( s.contains( v1.key() ));
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-            CPPUNIT_ASSERT( !s.empty() );
-
-            CPPUNIT_ASSERT( !s.contains( v2.key(), less<value_type>() ));
-            CPPUNIT_ASSERT( s.insert( v2 ));
-            CPPUNIT_ASSERT( v2.nFindCount == 0 );
-            CPPUNIT_ASSERT( s.find_with( key = v2.key(), less<value_type>(), find_functor() ));
-            CPPUNIT_ASSERT( v2.nFindCount == 1 );
-            v2.nFindCount = 0;
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-            CPPUNIT_ASSERT( !s.empty() );
-
-            {
-                insert_functor  fi;
-                find_functor    ff;
-                CPPUNIT_ASSERT( !s.contains( v3 ));
-                CPPUNIT_ASSERT( v3.nVal != v3.nKey * 100 );
-                CPPUNIT_ASSERT( s.insert( v3, std::ref(fi) ));
-                CPPUNIT_ASSERT( v3.nVal == v3.nKey * 100 );
-                CPPUNIT_ASSERT( v3.nFindCount == 0 );
-                CPPUNIT_ASSERT( s.find( v3, std::ref(ff) ));
-                CPPUNIT_ASSERT( v3.nFindCount == 1 );
-                v3.nFindCount = 0;
-                CPPUNIT_ASSERT( check_size( s, 3 ));
-                CPPUNIT_ASSERT( !s.empty() );
-            }
-
-            // unlink test
-            CPPUNIT_ASSERT( s.unlink( v1 ));
-            CPPUNIT_ASSERT( !s.contains( v1 ));
-            CPPUNIT_ASSERT( s.contains( v2 ));
-            CPPUNIT_ASSERT( s.contains( v3 ));
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-
-            CPPUNIT_ASSERT( !s.unlink( v1 ));
-            CPPUNIT_ASSERT( !s.contains( v1 ));
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-
-            CPPUNIT_ASSERT( s.contains( v3, less<value_type>() ));
-            CPPUNIT_ASSERT( s.unlink( v3 ));
-            CPPUNIT_ASSERT( !s.contains( v3, less<value_type>() ));
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-
-            CPPUNIT_ASSERT( s.contains( v2 ));
-            CPPUNIT_ASSERT( s.unlink( v2 ));
-            CPPUNIT_ASSERT( !s.contains( v1 ));
-            CPPUNIT_ASSERT( !s.contains( v2 ));
-            CPPUNIT_ASSERT( !s.contains( v3 ));
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-            CPPUNIT_ASSERT( s.empty() );
-
-            Set::gc::force_dispose();
-            // unlink function calls disposer
-            CPPUNIT_ASSERT( v1.nDisposeCount == 1 );
-            CPPUNIT_ASSERT( v2.nDisposeCount == 1 );
-            CPPUNIT_ASSERT( v3.nDisposeCount == 1 );
-
-            // update test
-            {
-                update_functor f;
-                std::pair<bool, bool> ret = s.update(v1, f, false);
-                CPPUNIT_ASSERT(!ret.first);
-                CPPUNIT_ASSERT(!ret.second);
-                CPPUNIT_ASSERT(v1.nUpdateNewCount == 0);
-                CPPUNIT_ASSERT(v1.nUpdateCount == 0);
-                CPPUNIT_ASSERT(check_size(s, 0));
-
-                ret = s.update( v1, f );
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( ret.second );
-                CPPUNIT_ASSERT( v1.nUpdateNewCount == 1 );
-                CPPUNIT_ASSERT( v1.nUpdateCount == 0 );
-                CPPUNIT_ASSERT( check_size( s, 1 ));
-
-                ret = s.update(v1, f, false);
-                CPPUNIT_ASSERT(ret.first);
-                CPPUNIT_ASSERT(!ret.second);
-                CPPUNIT_ASSERT(v1.nUpdateNewCount == 1);
-                CPPUNIT_ASSERT(v1.nUpdateCount == 1);
-                CPPUNIT_ASSERT(check_size(s, 1));
-
-                ret = s.update( v2, f );
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( ret.second );
-                CPPUNIT_ASSERT( v2.nUpdateNewCount == 1 );
-                CPPUNIT_ASSERT( v2.nUpdateCount == 0 );
-                CPPUNIT_ASSERT( check_size( s, 2 ));
-
-                ret = s.update( v3, f );
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( ret.second );
-                CPPUNIT_ASSERT( v3.nUpdateNewCount == 1 );
-                CPPUNIT_ASSERT( v3.nUpdateCount == 0 );
-                CPPUNIT_ASSERT( check_size( s, 3 ));
-
-                CPPUNIT_ASSERT( s.contains( v1 ));
-                CPPUNIT_ASSERT( s.contains( v2 ));
-                CPPUNIT_ASSERT( s.contains( v3 ));
-
-                ret = s.update( v1, f );
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( !ret.second );
-                CPPUNIT_ASSERT( v1.nUpdateNewCount == 1 );
-                CPPUNIT_ASSERT( v1.nUpdateCount == 2 );
-                CPPUNIT_ASSERT( check_size( s, 3 ));
-
-                ret = s.update( v2, f );
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( !ret.second );
-                CPPUNIT_ASSERT( v2.nUpdateNewCount == 1 );
-                CPPUNIT_ASSERT( v2.nUpdateCount == 1 );
-                CPPUNIT_ASSERT( check_size( s, 3 ));
-
-                ret = s.update( v3, f );
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( !ret.second );
-                CPPUNIT_ASSERT( v3.nUpdateNewCount == 1 );
-                CPPUNIT_ASSERT( v3.nUpdateCount == 1 );
-                CPPUNIT_ASSERT( check_size( s, 3 ));
-
-                CPPUNIT_ASSERT( s.contains( v1 ));
-                CPPUNIT_ASSERT( s.contains( v2 ));
-                CPPUNIT_ASSERT( s.contains( v3 ));
-            }
-
-            // erase test
-            CPPUNIT_ASSERT( s.contains( v1 ));
-            CPPUNIT_ASSERT( s.contains( v2, less<value_type>() ));
-            CPPUNIT_ASSERT( s.contains( v3 ));
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-            CPPUNIT_ASSERT( !s.empty() );
-
-            CPPUNIT_ASSERT( s.erase( v1 ));
-            CPPUNIT_ASSERT( !s.contains( v1 ));
-            CPPUNIT_ASSERT( s.contains( v2 ));
-            CPPUNIT_ASSERT( s.contains( v3 ));
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-            CPPUNIT_ASSERT( !s.empty() );
-
-            CPPUNIT_ASSERT( v1.nEraseCount == 0 );
-            CPPUNIT_ASSERT( !s.erase( v1, erase_functor() ));
-            CPPUNIT_ASSERT( v1.nEraseCount == 0 );
-            CPPUNIT_ASSERT( !s.contains( v1 ));
-            CPPUNIT_ASSERT( s.contains( v2 ));
-            CPPUNIT_ASSERT( s.contains( v3 ));
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-            CPPUNIT_ASSERT( !s.empty() );
-
-            CPPUNIT_ASSERT( v2.nEraseCount == 0 );
-            CPPUNIT_ASSERT( s.erase_with( v2.key(), less<value_type>(), erase_functor() ));
-            CPPUNIT_ASSERT( v2.nEraseCount == 1 );
-            CPPUNIT_ASSERT( !s.contains( v1 ));
-            CPPUNIT_ASSERT( !s.contains( v2 ));
-            CPPUNIT_ASSERT( s.contains( v3 ));
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-            CPPUNIT_ASSERT( !s.empty() );
-
-            CPPUNIT_ASSERT( !s.erase( v2.key() ));
-            CPPUNIT_ASSERT( !s.contains( v1 ));
-            CPPUNIT_ASSERT( !s.contains( v2 ));
-            CPPUNIT_ASSERT( s.contains( v3 ));
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-            CPPUNIT_ASSERT( !s.empty() );
-
-            CPPUNIT_ASSERT( s.erase( v3 ));
-            CPPUNIT_ASSERT( !s.contains( v1 ));
-            CPPUNIT_ASSERT( !s.contains( v2 ));
-            CPPUNIT_ASSERT( !s.contains( v3 ));
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-            CPPUNIT_ASSERT( s.empty() );
-
-            // dispose test
-            Set::gc::force_dispose();
-            CPPUNIT_ASSERT( v1.nDisposeCount == 2 );
-            CPPUNIT_ASSERT( v2.nDisposeCount == 2 );
-            CPPUNIT_ASSERT( v3.nDisposeCount == 2 );
-
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( s.insert( v1 ));
-            CPPUNIT_ASSERT( s.insert( v3 ));
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-            CPPUNIT_ASSERT( !s.empty() );
-
-            {
-                value_type v( v1 );
-                CPPUNIT_ASSERT( !s.unlink( v ) );
-            }
-
-            CPPUNIT_ASSERT( s.unlink( v3 ) );
-            CPPUNIT_ASSERT( s.contains( v1 ));
-            CPPUNIT_ASSERT( !s.contains( v2 ));
-            CPPUNIT_ASSERT( !s.contains( v3 ));
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-            CPPUNIT_ASSERT( !s.empty() );
-
-            CPPUNIT_ASSERT( !s.unlink( v3 ));
-            CPPUNIT_ASSERT( s.contains( v1 ));
-            CPPUNIT_ASSERT( !s.contains( v2 ));
-            CPPUNIT_ASSERT( !s.contains( v3 ));
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-            CPPUNIT_ASSERT( !s.empty() );
-
-            CPPUNIT_ASSERT( s.unlink( v1 ));
-            CPPUNIT_ASSERT( !s.contains( v1 ));
-            CPPUNIT_ASSERT( !s.contains( v2 ));
-            CPPUNIT_ASSERT( !s.contains( v3 ));
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-            CPPUNIT_ASSERT( s.empty() );
-
-            CPPUNIT_ASSERT( !s.unlink( v2 ));
-            CPPUNIT_ASSERT( !s.contains( v1 ));
-            CPPUNIT_ASSERT( !s.contains( v2 ));
-            CPPUNIT_ASSERT( !s.contains( v3 ));
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-            CPPUNIT_ASSERT( s.empty() );
-
-            Set::gc::force_dispose();
-            CPPUNIT_ASSERT( v1.nDisposeCount == 3 );
-            CPPUNIT_ASSERT( v2.nDisposeCount == 2 );
-            CPPUNIT_ASSERT( v3.nDisposeCount == 3 );
-
-            // clear test
-            CPPUNIT_ASSERT( s.insert( v1 ));
-            CPPUNIT_ASSERT( s.insert( v3 ));
-            CPPUNIT_ASSERT( s.insert( v2 ));
-
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-            Set::gc::force_dispose();
-            CPPUNIT_CHECK( v1.nDisposeCount == 4 );
-            CPPUNIT_CHECK( v2.nDisposeCount == 3 );
-            CPPUNIT_CHECK( v3.nDisposeCount == 4 );
-        }
-
-
-        template <class Set>
-        void test_int()
-        {
-            {
-                Set s( 64, 4 );
-                test_int_with( s );
-            }
-
-            // Iterator test
-            test_iter<Set>();
-
-            // extract/get test
-            {
-                typedef typename Set::value_type    value_type;
-                typedef typename Set::guarded_ptr   guarded_ptr;
-
-                static size_t const nLimit = 1024;
-                value_type arrItems[nLimit];
-                int arr[nLimit];
-                for ( size_t i = 0; i < nLimit; ++i )
-                    arr[i] = (int) i;
-                shuffle( arr, arr + nLimit );
-
-                for ( size_t i = 0; i < nLimit; ++i ) {
-                    arrItems[i].nKey = arr[i];
-                    arrItems[i].nVal = arr[i] * 2;
-                }
-
-                Set s( nLimit, 2 );
-                for ( size_t i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( s.insert( arrItems[i] ));
-
-                guarded_ptr gp;
-                for ( size_t i = 0; i < nLimit; i += 2 ) {
-                    int nKey = arr[i];
-                    gp = s.get( nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-                    CPPUNIT_CHECK( gp->nVal == nKey * 2 );
-                    gp.release();
-
-                    gp = s.extract( nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty() );
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-                    CPPUNIT_CHECK( gp->nVal == nKey * 2 );
-                    gp.release();
-
-                    gp = s.get( nKey );
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_ASSERT( gp.empty() );
-                    CPPUNIT_CHECK( !s.extract( nKey ));
-                    CPPUNIT_CHECK( gp.empty() );
-
-                    nKey = arr[i+1];
-                    gp = s.get_with( nKey, less<value_type>() );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-                    CPPUNIT_CHECK( gp->nVal == nKey * 2 );
-                    gp.release();
-
-                    gp = s.extract_with( nKey, less<value_type>() );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty() );
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-                    CPPUNIT_CHECK( gp->nVal == nKey * 2 );
-                    gp.release();
-
-                    gp = s.get_with( nKey, less<value_type>() );
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_CHECK( gp.empty());
-                    CPPUNIT_CHECK( !s.extract_with( nKey, less<value_type>() ));
-                    CPPUNIT_CHECK( gp.empty());
-                }
-                CPPUNIT_CHECK( s.empty() );
-                CPPUNIT_CHECK( check_size( s, 0 ));
-
-                CPPUNIT_CHECK( !s.get( 100 ));
-                CPPUNIT_CHECK( !s.extract( 100 ));
-                CPPUNIT_CHECK( gp.empty() );
-
-                Set::gc::force_dispose();
-            }
-        }
-
-        template <class Set>
-        void test_iter()
-        {
-            typedef typename Set::value_type    value_type;
-            typedef typename Set::iterator set_iterator;
-            typedef typename Set::iterator const_set_iterator;
-
-            value_type  v[500];
-            {
-                Set s( 100, 4 );
-
-                for ( int i = 0; unsigned(i) < sizeof(v)/sizeof(v[0]); ++i ) {
-                    v[i].nKey = i;
-                    v[i].nVal = i * 2;
-
-                    CPPUNIT_ASSERT( s.insert( v[i] ));
-                }
-
-                {
-                    typename Set::iterator it( s.begin() );
-                    typename Set::const_iterator cit( s.cbegin() );
-                    CPPUNIT_CHECK( it == cit );
-                    CPPUNIT_CHECK( it != s.end() );
-                    CPPUNIT_CHECK( it != s.cend() );
-                    CPPUNIT_CHECK( cit != s.end() );
-                    CPPUNIT_CHECK( cit != s.cend() );
-                    ++it;
-                    CPPUNIT_CHECK( it != cit );
-                    CPPUNIT_CHECK( it != s.end() );
-                    CPPUNIT_CHECK( it != s.cend() );
-                    CPPUNIT_CHECK( cit != s.end() );
-                    CPPUNIT_CHECK( cit != s.cend() );
-                    ++cit;
-                    CPPUNIT_CHECK( it == cit );
-                    CPPUNIT_CHECK( it != s.end() );
-                    CPPUNIT_CHECK( it != s.cend() );
-                    CPPUNIT_CHECK( cit != s.end() );
-                    CPPUNIT_CHECK( cit != s.cend() );
-                }
-
-                int nCount = 0;
-                for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                    set_iterator it2 = it;
-                    CPPUNIT_CHECK( it == it2 );
-                    CPPUNIT_CHECK( it2 != itEnd );
-                    CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
-                    it->nVal = (*it).nKey;
-                    ++nCount;
-                }
-                CPPUNIT_ASSERT( nCount == sizeof(v)/sizeof(v[0]));
-
-                nCount = 0;
-                for ( const_set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( (*it).nKey == it->nVal );
-                    ++nCount;
-                }
-                CPPUNIT_ASSERT( nCount == sizeof(v)/sizeof(v[0]));
-
-                for ( size_t i = 0; i < sizeof(v)/sizeof(v[0]); ++i ) {
-                    CPPUNIT_ASSERT( v[i].nKey == v[i].nVal );
-                }
-            }
-
-            Set::gc::force_dispose();
-
-            for ( size_t i = 0; i < sizeof(v)/sizeof(v[0]); ++i ) {
-                CPPUNIT_ASSERT( v[i].nDisposeCount == 1 );
-            }
-        }
-
-        template <class Set>
-        void test_int_nogc()
-        {
-            typedef typename Set::value_type    value_type;
-
-            value_type v1( 10, 50 );
-            value_type v2( 5, 25  );
-            value_type v3( 20, 100 );
-            int key;
-
-            {
-                {
-                    Set s( 64, 4 );
-
-                    // insert test
-                    CPPUNIT_ASSERT( s.empty() );
-                    CPPUNIT_ASSERT( check_size( s, 0 ));
-
-                    // insert/find test
-                    CPPUNIT_ASSERT( s.contains( v1.key() ) == nullptr );
-                    CPPUNIT_ASSERT( s.insert( v1 ));
-                    CPPUNIT_ASSERT( s.contains( v1.key(), less<value_type>() ) == &v1 );
-                    CPPUNIT_ASSERT( check_size( s, 1 ));
-                    CPPUNIT_ASSERT( !s.empty() );
-
-                    CPPUNIT_ASSERT( s.contains( v2.key() ) == nullptr );
-                    CPPUNIT_ASSERT( s.insert( v2 ));
-                    CPPUNIT_ASSERT( v2.nFindCount == 0 );
-                    CPPUNIT_ASSERT( s.find( key = v2.key(), find_functor() ));
-                    CPPUNIT_ASSERT( v2.nFindCount == 1 );
-                    v2.nFindCount = 0;
-                    CPPUNIT_ASSERT( check_size( s, 2 ));
-                    CPPUNIT_ASSERT( !s.empty() );
-
-                    {
-                        find_functor    ff;
-                        CPPUNIT_ASSERT( s.contains( v3 ) == nullptr );
-                        CPPUNIT_ASSERT( s.insert( v3 ));
-                        CPPUNIT_ASSERT( v3.nFindCount == 0 );
-                        CPPUNIT_ASSERT( s.find_with( v3, less<value_type>(), std::ref(ff) ));
-                        CPPUNIT_ASSERT( v3.nFindCount == 1 );
-                        v3.nFindCount = 0;
-                        CPPUNIT_ASSERT( check_size( s, 3 ));
-                        CPPUNIT_ASSERT( !s.empty() );
-                    }
-                }
-
-                // s.clear()   ; // not all set supports clear() method
-                CPPUNIT_ASSERT( v1.nDisposeCount == 1 );
-                CPPUNIT_ASSERT( v2.nDisposeCount == 1 );
-                CPPUNIT_ASSERT( v3.nDisposeCount == 1 );
-
-
-                // update test
-                {
-                    Set s( 64, 4 );
-
-                    update_functor f;
-
-                    std::pair<bool, bool> ret = s.update(v1, f, false);
-                    CPPUNIT_ASSERT(!ret.first);
-                    CPPUNIT_ASSERT(!ret.second);
-                    CPPUNIT_ASSERT(v1.nUpdateNewCount == 0);
-                    CPPUNIT_ASSERT(v1.nUpdateCount == 0);
-                    CPPUNIT_ASSERT(check_size(s, 0));
-
-                    ret = s.update( v1, f );
-                    CPPUNIT_ASSERT( ret.first );
-                    CPPUNIT_ASSERT( ret.second );
-                    CPPUNIT_ASSERT( v1.nUpdateNewCount == 1 );
-                    CPPUNIT_ASSERT( v1.nUpdateCount == 0 );
-                    CPPUNIT_ASSERT( check_size( s, 1 ));
-
-                    ret = s.update(v1, f, false);
-                    CPPUNIT_ASSERT(ret.first);
-                    CPPUNIT_ASSERT(!ret.second);
-                    CPPUNIT_ASSERT(v1.nUpdateNewCount == 1);
-                    CPPUNIT_ASSERT(v1.nUpdateCount == 1);
-                    CPPUNIT_ASSERT(check_size(s, 1));
-
-                    ret = s.update( v2, f );
-                    CPPUNIT_ASSERT( ret.first );
-                    CPPUNIT_ASSERT( ret.second );
-                    CPPUNIT_ASSERT( v2.nUpdateNewCount == 1 );
-                    CPPUNIT_ASSERT( v2.nUpdateCount == 0 );
-                    CPPUNIT_ASSERT( check_size( s, 2 ));
-
-                    ret = s.update( v3, f );
-                    CPPUNIT_ASSERT( ret.first );
-                    CPPUNIT_ASSERT( ret.second );
-                    CPPUNIT_ASSERT( v3.nUpdateNewCount == 1 );
-                    CPPUNIT_ASSERT( v3.nUpdateCount == 0 );
-                    CPPUNIT_ASSERT( check_size( s, 3 ));
-
-                    CPPUNIT_ASSERT( s.contains( v1 ) == &v1 );
-                    CPPUNIT_ASSERT( s.contains( v2 ) == &v2 );
-                    CPPUNIT_ASSERT( s.contains( v3 ) == &v3 );
-
-                    ret = s.update( v1, f );
-                    CPPUNIT_ASSERT( ret.first );
-                    CPPUNIT_ASSERT( !ret.second );
-                    CPPUNIT_ASSERT( v1.nUpdateNewCount == 1 );
-                    CPPUNIT_ASSERT( v1.nUpdateCount == 2 );
-                    CPPUNIT_ASSERT( check_size( s, 3 ));
-
-                    ret = s.update( v2, f );
-                    CPPUNIT_ASSERT( ret.first );
-                    CPPUNIT_ASSERT( !ret.second );
-                    CPPUNIT_ASSERT( v2.nUpdateNewCount == 1 );
-                    CPPUNIT_ASSERT( v2.nUpdateCount == 1 );
-                    CPPUNIT_ASSERT( check_size( s, 3 ));
-
-                    ret = s.update( v3, f );
-                    CPPUNIT_ASSERT( ret.first );
-                    CPPUNIT_ASSERT( !ret.second );
-                    CPPUNIT_ASSERT( v3.nUpdateNewCount == 1 );
-                    CPPUNIT_ASSERT( v3.nUpdateCount == 1 );
-                    CPPUNIT_ASSERT( check_size( s, 3 ));
-
-                    CPPUNIT_ASSERT( s.contains( v1 ) == &v1 );
-                    CPPUNIT_ASSERT( s.contains( v2 ) == &v2 );
-                    CPPUNIT_ASSERT( s.contains( v3 ) == &v3 );
-                }
-            }
-
-            // dispose on destruct test
-            CPPUNIT_ASSERT( v1.nDisposeCount == 2 );
-            CPPUNIT_ASSERT( v2.nDisposeCount == 2 );
-            CPPUNIT_ASSERT( v3.nDisposeCount == 2 );
-
-            // Iterator test
-            test_iter<Set>();
-        }
-
-
-#define ASSERT_RCU_FIND( _expr ) { rcu_lock rl; CPPUNIT_ASSERT( _expr ); }
-        template <class Set>
-        void test_rcu_int_with( Set& s )
-        {
-            typedef typename Set::value_type    value_type;
-            typedef typename Set::gc::scoped_lock rcu_lock;
-
-            value_type v1( 10, 50 );
-            value_type v2( 5, 25  );
-            value_type v3( 20, 100 );
-            value_type v4( 40, 400 );
-            int key;
-
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-
-            // insert/find test
-
-            ASSERT_RCU_FIND( !s.contains( v1.key(), less<value_type>() ));
-            CPPUNIT_ASSERT( s.insert( v1 ));
-            ASSERT_RCU_FIND( s.contains( v1.key(), less<value_type>()) );
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-            CPPUNIT_ASSERT( !s.empty() );
-
-            ASSERT_RCU_FIND( !s.contains( v2.key() ));
-            CPPUNIT_ASSERT( s.insert( v2 ));
-            CPPUNIT_ASSERT( v2.nFindCount == 0 );
-            CPPUNIT_ASSERT( s.find( key = v2.key(), find_functor() ));
-            CPPUNIT_ASSERT( v2.nFindCount == 1 );
-            v2.nFindCount = 0;
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-            CPPUNIT_ASSERT( !s.empty() );
-
-            {
-                insert_functor  fi;
-                find_functor    ff;
-                ASSERT_RCU_FIND( !s.contains( v3 ));
-                CPPUNIT_ASSERT( v3.nVal != v3.nKey * 100 );
-                CPPUNIT_ASSERT( s.insert( v3, std::ref(fi) ));
-                CPPUNIT_ASSERT( v3.nVal == v3.nKey * 100 );
-                CPPUNIT_ASSERT( v3.nFindCount == 0 );
-                CPPUNIT_ASSERT( s.find_with( v3, less<value_type>(), std::ref(ff) ));
-                CPPUNIT_ASSERT( v3.nFindCount == 1 );
-                v3.nFindCount = 0;
-                CPPUNIT_ASSERT( check_size( s, 3 ));
-                CPPUNIT_ASSERT( !s.empty() );
-            }
-
-            // unlink test
-            CPPUNIT_ASSERT( s.unlink( v1 ));
-            ASSERT_RCU_FIND( !s.contains( v1 ));
-            ASSERT_RCU_FIND( s.contains( v2 ));
-            ASSERT_RCU_FIND( s.contains( v3 ));
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-
-            CPPUNIT_ASSERT( !s.unlink( v1 ));
-            ASSERT_RCU_FIND( !s.contains( v1 ));
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-
-            ASSERT_RCU_FIND( s.contains( v3 ) );
-            CPPUNIT_ASSERT( s.unlink( v3 ));
-            ASSERT_RCU_FIND( !s.contains( v3 ));
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-
-            ASSERT_RCU_FIND( s.contains( v2 ));
-            CPPUNIT_ASSERT( s.unlink( v2 ));
-            ASSERT_RCU_FIND( !s.contains( v1 ));
-            ASSERT_RCU_FIND( !s.contains( v2 ));
-            ASSERT_RCU_FIND( !s.contains( v3 ));
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-            CPPUNIT_ASSERT( s.empty() );
-
-            Set::gc::force_dispose();
-            // unlink function calls disposer
-            CPPUNIT_ASSERT( v1.nDisposeCount == 1 );
-            CPPUNIT_ASSERT( v2.nDisposeCount == 1 );
-            CPPUNIT_ASSERT( v3.nDisposeCount == 1 );
-
-            // update test
-            {
-                update_functor f;
-
-                std::pair<bool, bool> ret = s.update(v1, f, false);
-                CPPUNIT_ASSERT(!ret.first);
-                CPPUNIT_ASSERT(!ret.second);
-                CPPUNIT_ASSERT(v1.nUpdateNewCount == 0);
-                CPPUNIT_ASSERT(v1.nUpdateCount == 0);
-                CPPUNIT_ASSERT(check_size(s, 0));
-
-                ret = s.update( v1, f );
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( ret.second );
-                CPPUNIT_ASSERT( v1.nUpdateNewCount == 1 );
-                CPPUNIT_ASSERT( v1.nUpdateCount == 0 );
-                CPPUNIT_ASSERT( check_size( s, 1 ));
-
-                ret = s.update(v1, f, false);
-                CPPUNIT_ASSERT(ret.first);
-                CPPUNIT_ASSERT(!ret.second);
-                CPPUNIT_ASSERT(v1.nUpdateNewCount == 1);
-                CPPUNIT_ASSERT(v1.nUpdateCount == 1);
-                CPPUNIT_ASSERT(check_size(s, 1));
-
-                ret = s.update( v2, f );
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( ret.second );
-                CPPUNIT_ASSERT( v2.nUpdateNewCount == 1 );
-                CPPUNIT_ASSERT( v2.nUpdateCount == 0 );
-                CPPUNIT_ASSERT( check_size( s, 2 ));
-
-                ret = s.update( v3, f );
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( ret.second );
-                CPPUNIT_ASSERT( v3.nUpdateNewCount == 1 );
-                CPPUNIT_ASSERT( v3.nUpdateCount == 0 );
-                CPPUNIT_ASSERT( check_size( s, 3 ));
-
-                ASSERT_RCU_FIND( s.contains( v1 ));
-                ASSERT_RCU_FIND( s.contains( v2 ));
-                ASSERT_RCU_FIND( s.contains( v3 ));
-
-                ret = s.update( v1, f );
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( !ret.second );
-                CPPUNIT_ASSERT( v1.nUpdateNewCount == 1 );
-                CPPUNIT_ASSERT( v1.nUpdateCount == 2 );
-                CPPUNIT_ASSERT( check_size( s, 3 ));
-
-                ret = s.update( v2, f );
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( !ret.second );
-                CPPUNIT_ASSERT( v2.nUpdateNewCount == 1 );
-                CPPUNIT_ASSERT( v2.nUpdateCount == 1 );
-                CPPUNIT_ASSERT( check_size( s, 3 ));
-
-                ret = s.update( v3, f );
-                CPPUNIT_ASSERT( ret.first );
-                CPPUNIT_ASSERT( !ret.second );
-                CPPUNIT_ASSERT( v3.nUpdateNewCount == 1 );
-                CPPUNIT_ASSERT( v3.nUpdateCount == 1 );
-                CPPUNIT_ASSERT( check_size( s, 3 ));
-
-                ASSERT_RCU_FIND( s.contains( v1 ) );
-                ASSERT_RCU_FIND( s.contains( v2 ));
-                ASSERT_RCU_FIND( s.contains( v3 ));
-            }
-
-            // erase test
-            ASSERT_RCU_FIND( s.contains( v1 ));
-            ASSERT_RCU_FIND( s.contains( v2, less<value_type>() ));
-            ASSERT_RCU_FIND( s.contains( v3 ));
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-            CPPUNIT_ASSERT( !s.empty() );
-
-            CPPUNIT_ASSERT( v1.nEraseCount == 0 );
-            CPPUNIT_ASSERT( s.erase_with( v1, less<value_type>(), erase_functor() ));
-            CPPUNIT_ASSERT( v1.nEraseCount == 1 );
-            ASSERT_RCU_FIND( !s.contains( v1 ));
-            ASSERT_RCU_FIND( s.contains( v2 ) );
-            ASSERT_RCU_FIND( s.contains( v3 ) );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-            CPPUNIT_ASSERT( !s.empty() );
-
-            CPPUNIT_ASSERT( !s.erase( v1 ));
-            ASSERT_RCU_FIND( !s.contains( v1 ));
-            ASSERT_RCU_FIND( s.contains( v2 ));
-            ASSERT_RCU_FIND( s.contains( v3 ) );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-            CPPUNIT_ASSERT( !s.empty() );
-
-            ASSERT_RCU_FIND( !s.contains( v4 ));
-            CPPUNIT_ASSERT( s.insert(v4));
-            ASSERT_RCU_FIND( s.contains( v4.key() ));
-            CPPUNIT_ASSERT( s.erase_with( v4.key(), less<value_type>() ));
-            ASSERT_RCU_FIND( !s.contains( v4.key() ));
-
-            CPPUNIT_ASSERT( s.erase( v2.key() ));
-            ASSERT_RCU_FIND( !s.contains( v1 ));
-            ASSERT_RCU_FIND( !s.contains( v2 ));
-            ASSERT_RCU_FIND( s.contains( v3 ) );
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-            CPPUNIT_ASSERT( !s.empty() );
-
-            CPPUNIT_ASSERT( !s.erase( v2.key() ));
-            ASSERT_RCU_FIND( !s.contains( v1 ));
-            ASSERT_RCU_FIND( !s.contains( v2 ));
-            ASSERT_RCU_FIND( s.contains( v3 ) );
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-            CPPUNIT_ASSERT( !s.empty() );
-
-            CPPUNIT_ASSERT( v3.nEraseCount == 0 );
-            CPPUNIT_ASSERT( s.erase( v3, erase_functor() ));
-            CPPUNIT_ASSERT( v3.nEraseCount == 1 );
-            ASSERT_RCU_FIND( !s.contains( v1 ));
-            ASSERT_RCU_FIND( !s.contains( v2 ));
-            ASSERT_RCU_FIND( !s.contains( v3 ));
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-            CPPUNIT_ASSERT( s.empty() );
-
-            // dispose test
-            Set::gc::force_dispose();
-            CPPUNIT_ASSERT( v1.nDisposeCount == 2 );
-            CPPUNIT_ASSERT( v2.nDisposeCount == 2 );
-            CPPUNIT_ASSERT( v3.nDisposeCount == 2 );
-            CPPUNIT_ASSERT( v4.nDisposeCount == 1 );
-
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( s.insert( v1 ));
-            CPPUNIT_ASSERT( s.insert( v3 ));
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-            CPPUNIT_ASSERT( !s.empty() );
-
-            {
-                value_type v( v1 );
-                CPPUNIT_ASSERT( !s.unlink( v ) );
-            }
-
-            CPPUNIT_ASSERT( s.unlink( v3 ) );
-            ASSERT_RCU_FIND( s.contains( v1 ));
-            ASSERT_RCU_FIND( !s.contains( v2 ));
-            ASSERT_RCU_FIND( !s.contains( v3 ));
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-            CPPUNIT_ASSERT( !s.empty() );
-
-            CPPUNIT_ASSERT( !s.unlink( v3 ));
-            ASSERT_RCU_FIND( s.contains( v1 ));
-            ASSERT_RCU_FIND( !s.contains( v2 ));
-            ASSERT_RCU_FIND( !s.contains( v3 ));
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-            CPPUNIT_ASSERT( !s.empty() );
-
-            CPPUNIT_ASSERT( s.unlink( v1 ));
-            ASSERT_RCU_FIND( !s.contains( v1 ));
-            ASSERT_RCU_FIND( !s.contains( v2 ));
-            ASSERT_RCU_FIND( !s.contains( v3 ));
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-            CPPUNIT_ASSERT( s.empty() );
-
-            CPPUNIT_ASSERT( !s.unlink( v2 ));
-            ASSERT_RCU_FIND( !s.contains( v1 ));
-            ASSERT_RCU_FIND( !s.contains( v2 ));
-            ASSERT_RCU_FIND( !s.contains( v3 ));
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-            CPPUNIT_ASSERT( s.empty() );
-
-            Set::gc::force_dispose();
-            CPPUNIT_ASSERT( v1.nDisposeCount == 3 );
-            CPPUNIT_ASSERT( v2.nDisposeCount == 2 );
-            CPPUNIT_ASSERT( v3.nDisposeCount == 3 );
-            CPPUNIT_ASSERT( v4.nDisposeCount == 1 );
-
-            // clear test
-            CPPUNIT_ASSERT( s.insert( v1 ));
-            CPPUNIT_ASSERT( s.insert( v3 ));
-            CPPUNIT_ASSERT( s.insert( v2 ));
-
-            s.clear();
-            Set::gc::force_dispose();
-            CPPUNIT_ASSERT( v1.nDisposeCount == 4 );
-            CPPUNIT_ASSERT( v2.nDisposeCount == 3 );
-            CPPUNIT_ASSERT( v3.nDisposeCount == 4 );
-            CPPUNIT_ASSERT( v4.nDisposeCount == 1 );
-        }
-#undef ASSERT_RCU_FIND
-
-        template <class Set>
-        void test_rcu_int()
-        {
-            {
-                Set s( 64, 4 );
-                test_rcu_int_with( s );
-            }
-
-            // Iterator test
-            test_iter<Set>();
-
-            // Extract tests
-            typedef typename Set::gc    rcu;
-            typedef typename Set::value_type    value_type;
-            typedef typename Set::rcu_lock      rcu_lock;
-
-            typename Set::exempt_ptr ep;
-
-            {
-                static size_t const nLimit = 1024;
-                value_type arrItems[nLimit];
-                int arr[nLimit];
-                for ( size_t i = 0; i < nLimit; ++i )
-                    arr[i] = (int) i;
-                shuffle( arr, arr + nLimit );
-
-                for ( size_t i = 0; i < nLimit; ++i ) {
-                    arrItems[i].nKey = arr[i];
-                    arrItems[i].nVal = arr[i] * 2;
-                }
-
-                Set s( nLimit, 2 );
-                for ( size_t i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( s.insert( arrItems[i] ));
-
-                for ( size_t i = 0; i < nLimit; i += 2 ) {
-                    value_type * pVal;
-                    int nKey = arr[i];
-                    {
-                        rcu_lock l;
-                        pVal = s.get( nKey );
-                        CPPUNIT_ASSERT( pVal != nullptr );
-                        CPPUNIT_CHECK( pVal->nKey == nKey );
-                        CPPUNIT_CHECK( pVal->nVal == nKey * 2 );
-
-                        ep = s.extract( nKey );
-                        CPPUNIT_ASSERT( ep );
-                        CPPUNIT_ASSERT( !ep.empty() );
-                        CPPUNIT_CHECK( pVal->nKey == ep->nKey );
-                        CPPUNIT_CHECK( pVal->nVal == (*ep).nVal );
-                    }
-                    ep.release();
-                    {
-                        rcu_lock l;
-                        CPPUNIT_CHECK( s.get( nKey ) == nullptr );
-                        CPPUNIT_CHECK( !s.extract( nKey ));
-                        CPPUNIT_CHECK( ep.empty() );
-
-                        nKey = arr[i+1];
-                        pVal = s.get_with( nKey, less<value_type>() );
-                        CPPUNIT_ASSERT( pVal != nullptr );
-                        CPPUNIT_CHECK( pVal->nKey == nKey );
-                        CPPUNIT_CHECK( pVal->nVal == nKey * 2 );
-
-                        ep = s.extract_with( nKey, less<value_type>() );
-                        CPPUNIT_ASSERT( ep );
-                        CPPUNIT_ASSERT( !ep.empty() );
-                        CPPUNIT_CHECK( pVal->nKey == ep->nKey );
-                        CPPUNIT_CHECK( pVal->nVal == (*ep).nVal );
-                    }
-                    ep.release();
-                    {
-                        rcu_lock l;
-                        CPPUNIT_CHECK( s.get_with( nKey, less<value_type>() ) == nullptr );
-                        ep = s.extract_with( nKey, less<value_type>() );
-                        CPPUNIT_CHECK( !ep );
-                        CPPUNIT_CHECK( ep.empty() );
-                    }
-                }
-                CPPUNIT_CHECK( s.empty() );
-                CPPUNIT_CHECK( check_size( s, 0 ));
-                {
-                    rcu_lock l;
-                    CPPUNIT_CHECK( s.get( 100 ) == nullptr );
-                    ep = s.extract( 100 );
-                    CPPUNIT_CHECK( !ep );
-                    CPPUNIT_CHECK( ep.empty() );
-                }
-
-                Set::gc::force_dispose();
-            }
-        }
-
-        template <class Set>
-        void test_rcu_int_michael_list()
-        {
-            {
-                Set s( 64, 4 );
-                test_rcu_int_with( s );
-            }
-
-            // Iterator test
-            test_iter<Set>();
-
-            // Extract tests
-            typedef typename Set::gc    rcu;
-            typedef typename Set::value_type    value_type;
-            typedef typename Set::rcu_lock      rcu_lock;
-
-            typename Set::exempt_ptr ep;
-            typename Set::raw_ptr gp;
-
-            {
-                static size_t const nLimit = 1024;
-                value_type arrItems[nLimit];
-                int arr[nLimit];
-                for ( size_t i = 0; i < nLimit; ++i )
-                    arr[i] = (int) i;
-                shuffle( arr, arr + nLimit );
-
-                for ( size_t i = 0; i < nLimit; ++i ) {
-                    arrItems[i].nKey = arr[i];
-                    arrItems[i].nVal = arr[i] * 2;
-                }
-
-                Set s( nLimit, 2 );
-                for ( size_t i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( s.insert( arrItems[i] ));
-
-                for ( size_t i = 0; i < nLimit; i += 2 ) {
-                    int nKey = arr[i];
-                    {
-                        rcu_lock l;
-                        gp = s.get( nKey );
-                        CPPUNIT_ASSERT( gp );
-                        CPPUNIT_CHECK( gp->nKey == nKey );
-                        CPPUNIT_CHECK( (*gp).nVal == nKey * 2 );
-                    }
-                    gp.release();
-
-                    ep = s.extract( nKey );
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty() );
-                    CPPUNIT_CHECK( nKey == ep->nKey );
-                    CPPUNIT_CHECK( nKey * 2 == (*ep).nVal );
-                    ep.release();
-                    {
-                        rcu_lock l;
-                        CPPUNIT_CHECK( !s.get( nKey ));
-                    }
-                    CPPUNIT_CHECK( !s.extract( nKey ));
-                    CPPUNIT_CHECK( ep.empty() );
-
-                    nKey = arr[i+1];
-                    {
-                        rcu_lock l;
-                        gp = s.get_with( nKey, less<value_type>() );
-                        CPPUNIT_ASSERT( gp );
-                        CPPUNIT_CHECK( gp->nKey == nKey );
-                        CPPUNIT_CHECK( gp->nVal == nKey * 2 );
-                    }
-                    gp.release();
-
-                    ep = s.extract_with( nKey, less<value_type>() );
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty() );
-                    CPPUNIT_CHECK( nKey == ep->nKey );
-                    CPPUNIT_CHECK( nKey * 2 == (*ep).nVal );
-                    ep.release();
-
-                    {
-                        rcu_lock l;
-                        CPPUNIT_CHECK( !s.get_with( nKey, less<value_type>()));
-                    }
-                    ep = s.extract_with( nKey, less<value_type>() );
-                    CPPUNIT_CHECK( !ep );
-                    CPPUNIT_CHECK( ep.empty() );
-                }
-                CPPUNIT_CHECK( s.empty() );
-                CPPUNIT_CHECK( check_size( s, 0 ));
-                {
-                    rcu_lock l;
-                    CPPUNIT_CHECK( !s.get( 100 ));
-                }
-                ep = s.extract( 100 );
-                CPPUNIT_CHECK( !ep );
-                CPPUNIT_CHECK( ep.empty() );
-
-                Set::gc::force_dispose();
-            }
-        }
-
-        // MichaelHashSet + MichaelList
-        void HP_base_cmp();
-        void HP_base_less();
-        void HP_base_cmpmix();
-        void HP_member_cmp();
-        void HP_member_less();
-        void HP_member_cmpmix();
-
-        void DHP_base_cmp();
-        void DHP_base_less();
-        void DHP_base_cmpmix();
-        void DHP_member_cmp();
-        void DHP_member_less();
-        void DHP_member_cmpmix();
-
-        void RCU_GPI_base_cmp();
-        void RCU_GPI_base_less();
-        void RCU_GPI_base_cmpmix();
-        void RCU_GPI_member_cmp();
-        void RCU_GPI_member_less();
-        void RCU_GPI_member_cmpmix();
-
-        void RCU_GPB_base_cmp();
-        void RCU_GPB_base_less();
-        void RCU_GPB_base_cmpmix();
-        void RCU_GPB_member_cmp();
-        void RCU_GPB_member_less();
-        void RCU_GPB_member_cmpmix();
-
-        void RCU_GPT_base_cmp();
-        void RCU_GPT_base_less();
-        void RCU_GPT_base_cmpmix();
-        void RCU_GPT_member_cmp();
-        void RCU_GPT_member_less();
-        void RCU_GPT_member_cmpmix();
-
-        void RCU_SHB_base_cmp();
-        void RCU_SHB_base_less();
-        void RCU_SHB_base_cmpmix();
-        void RCU_SHB_member_cmp();
-        void RCU_SHB_member_less();
-        void RCU_SHB_member_cmpmix();
-
-        void RCU_SHT_base_cmp();
-        void RCU_SHT_base_less();
-        void RCU_SHT_base_cmpmix();
-        void RCU_SHT_member_cmp();
-        void RCU_SHT_member_less();
-        void RCU_SHT_member_cmpmix();
-
-        void nogc_base_cmp();
-        void nogc_base_less();
-        void nogc_base_cmpmix();
-        void nogc_member_cmp();
-        void nogc_member_less();
-        void nogc_member_cmpmix();
-
-        // MichaelHashSet + LazyList
-        void HP_base_cmp_lazy();
-        void HP_base_less_lazy();
-        void HP_base_cmpmix_lazy();
-        void HP_member_cmp_lazy();
-        void HP_member_less_lazy();
-        void HP_member_cmpmix_lazy();
-
-        void DHP_base_cmp_lazy();
-        void DHP_base_less_lazy();
-        void DHP_base_cmpmix_lazy();
-        void DHP_member_cmp_lazy();
-        void DHP_member_less_lazy();
-        void DHP_member_cmpmix_lazy();
-
-        void RCU_GPI_base_cmp_lazy();
-        void RCU_GPI_base_less_lazy();
-        void RCU_GPI_base_cmpmix_lazy();
-        void RCU_GPI_member_cmp_lazy();
-        void RCU_GPI_member_less_lazy();
-        void RCU_GPI_member_cmpmix_lazy();
-
-        void RCU_GPB_base_cmp_lazy();
-        void RCU_GPB_base_less_lazy();
-        void RCU_GPB_base_cmpmix_lazy();
-        void RCU_GPB_member_cmp_lazy();
-        void RCU_GPB_member_less_lazy();
-        void RCU_GPB_member_cmpmix_lazy();
-
-        void RCU_GPT_base_cmp_lazy();
-        void RCU_GPT_base_less_lazy();
-        void RCU_GPT_base_cmpmix_lazy();
-        void RCU_GPT_member_cmp_lazy();
-        void RCU_GPT_member_less_lazy();
-        void RCU_GPT_member_cmpmix_lazy();
-
-        void RCU_SHB_base_cmp_lazy();
-        void RCU_SHB_base_less_lazy();
-        void RCU_SHB_base_cmpmix_lazy();
-        void RCU_SHB_member_cmp_lazy();
-        void RCU_SHB_member_less_lazy();
-        void RCU_SHB_member_cmpmix_lazy();
-
-        void RCU_SHT_base_cmp_lazy();
-        void RCU_SHT_base_less_lazy();
-        void RCU_SHT_base_cmpmix_lazy();
-        void RCU_SHT_member_cmp_lazy();
-        void RCU_SHT_member_less_lazy();
-        void RCU_SHT_member_cmpmix_lazy();
-
-        void nogc_base_cmp_lazy();
-        void nogc_base_less_lazy();
-        void nogc_base_cmpmix_lazy();
-        void nogc_member_cmp_lazy();
-        void nogc_member_less_lazy();
-        void nogc_member_cmpmix_lazy();
-
-        // SplitListSet + MichaelList [dyn - dynamic bucket table, st - static bucket table]
-        void split_dyn_HP_base_cmp();
-        void split_dyn_HP_base_less();
-        void split_dyn_HP_base_cmpmix();
-        void split_dyn_HP_base_cmpmix_stat();
-        void split_dyn_HP_member_cmp();
-        void split_dyn_HP_member_less();
-        void split_dyn_HP_member_cmpmix();
-        void split_dyn_HP_member_cmpmix_stat();
-        void split_st_HP_base_cmp();
-        void split_st_HP_base_less();
-        void split_st_HP_base_cmpmix();
-        void split_st_HP_base_cmpmix_stat();
-        void split_st_HP_member_cmp();
-        void split_st_HP_member_less();
-        void split_st_HP_member_cmpmix();
-        void split_st_HP_member_cmpmix_stat();
-
-        void split_dyn_DHP_base_cmp();
-        void split_dyn_DHP_base_less();
-        void split_dyn_DHP_base_cmpmix();
-        void split_dyn_DHP_base_cmpmix_stat();
-        void split_dyn_DHP_member_cmp();
-        void split_dyn_DHP_member_less();
-        void split_dyn_DHP_member_cmpmix();
-        void split_dyn_DHP_member_cmpmix_stat();
-        void split_st_DHP_base_cmp();
-        void split_st_DHP_base_less();
-        void split_st_DHP_base_cmpmix();
-        void split_st_DHP_base_cmpmix_stat();
-        void split_st_DHP_member_cmp();
-        void split_st_DHP_member_less();
-        void split_st_DHP_member_cmpmix();
-        void split_st_DHP_member_cmpmix_stat();
-
-        void split_dyn_RCU_GPI_base_cmp();
-        void split_dyn_RCU_GPI_base_less();
-        void split_dyn_RCU_GPI_base_cmpmix();
-        void split_dyn_RCU_GPI_base_cmpmix_stat();
-        void split_dyn_RCU_GPI_member_cmp();
-        void split_dyn_RCU_GPI_member_less();
-        void split_dyn_RCU_GPI_member_cmpmix();
-        void split_dyn_RCU_GPI_member_cmpmix_stat();
-        void split_st_RCU_GPI_base_cmp();
-        void split_st_RCU_GPI_base_less();
-        void split_st_RCU_GPI_base_cmpmix();
-        void split_st_RCU_GPI_base_cmpmix_stat();
-        void split_st_RCU_GPI_member_cmp();
-        void split_st_RCU_GPI_member_less();
-        void split_st_RCU_GPI_member_cmpmix();
-        void split_st_RCU_GPI_member_cmpmix_stat();
-
-        void split_dyn_RCU_GPB_base_cmp();
-        void split_dyn_RCU_GPB_base_less();
-        void split_dyn_RCU_GPB_base_cmpmix();
-        void split_dyn_RCU_GPB_base_cmpmix_stat();
-        void split_dyn_RCU_GPB_member_cmp();
-        void split_dyn_RCU_GPB_member_less();
-        void split_dyn_RCU_GPB_member_cmpmix();
-        void split_dyn_RCU_GPB_member_cmpmix_stat();
-        void split_st_RCU_GPB_base_cmp();
-        void split_st_RCU_GPB_base_less();
-        void split_st_RCU_GPB_base_cmpmix();
-        void split_st_RCU_GPB_base_cmpmix_stat();
-        void split_st_RCU_GPB_member_cmp();
-        void split_st_RCU_GPB_member_less();
-        void split_st_RCU_GPB_member_cmpmix();
-        void split_st_RCU_GPB_member_cmpmix_stat();
-
-        void split_dyn_RCU_GPT_base_cmp();
-        void split_dyn_RCU_GPT_base_less();
-        void split_dyn_RCU_GPT_base_cmpmix();
-        void split_dyn_RCU_GPT_base_cmpmix_stat();
-        void split_dyn_RCU_GPT_member_cmp();
-        void split_dyn_RCU_GPT_member_less();
-        void split_dyn_RCU_GPT_member_cmpmix();
-        void split_dyn_RCU_GPT_member_cmpmix_stat();
-        void split_st_RCU_GPT_base_cmp();
-        void split_st_RCU_GPT_base_less();
-        void split_st_RCU_GPT_base_cmpmix();
-        void split_st_RCU_GPT_base_cmpmix_stat();
-        void split_st_RCU_GPT_member_cmp();
-        void split_st_RCU_GPT_member_less();
-        void split_st_RCU_GPT_member_cmpmix();
-        void split_st_RCU_GPT_member_cmpmix_stat();
-
-        void split_dyn_RCU_SHB_base_cmp();
-        void split_dyn_RCU_SHB_base_less();
-        void split_dyn_RCU_SHB_base_cmpmix();
-        void split_dyn_RCU_SHB_base_cmpmix_stat();
-        void split_dyn_RCU_SHB_member_cmp();
-        void split_dyn_RCU_SHB_member_less();
-        void split_dyn_RCU_SHB_member_cmpmix();
-        void split_dyn_RCU_SHB_member_cmpmix_stat();
-        void split_st_RCU_SHB_base_cmp();
-        void split_st_RCU_SHB_base_less();
-        void split_st_RCU_SHB_base_cmpmix();
-        void split_st_RCU_SHB_base_cmpmix_stat();
-        void split_st_RCU_SHB_member_cmp();
-        void split_st_RCU_SHB_member_less();
-        void split_st_RCU_SHB_member_cmpmix();
-        void split_st_RCU_SHB_member_cmpmix_stat();
-
-        void split_dyn_RCU_SHT_base_cmp();
-        void split_dyn_RCU_SHT_base_less();
-        void split_dyn_RCU_SHT_base_cmpmix();
-        void split_dyn_RCU_SHT_base_cmpmix_stat();
-        void split_dyn_RCU_SHT_member_cmp();
-        void split_dyn_RCU_SHT_member_less();
-        void split_dyn_RCU_SHT_member_cmpmix();
-        void split_dyn_RCU_SHT_member_cmpmix_stat();
-        void split_st_RCU_SHT_base_cmp();
-        void split_st_RCU_SHT_base_less();
-        void split_st_RCU_SHT_base_cmpmix();
-        void split_st_RCU_SHT_base_cmpmix_stat();
-        void split_st_RCU_SHT_member_cmp();
-        void split_st_RCU_SHT_member_less();
-        void split_st_RCU_SHT_member_cmpmix();
-        void split_st_RCU_SHT_member_cmpmix_stat();
-
-        void split_dyn_nogc_base_cmp();
-        void split_dyn_nogc_base_less();
-        void split_dyn_nogc_base_cmpmix();
-        void split_dyn_nogc_base_cmpmix_stat();
-        void split_dyn_nogc_member_cmp();
-        void split_dyn_nogc_member_less();
-        void split_dyn_nogc_member_cmpmix();
-        void split_dyn_nogc_member_cmpmix_stat();
-        void split_st_nogc_base_cmp();
-        void split_st_nogc_base_less();
-        void split_st_nogc_base_cmpmix();
-        void split_st_nogc_base_cmpmix_stat();
-        void split_st_nogc_member_cmp();
-        void split_st_nogc_member_less();
-        void split_st_nogc_member_cmpmix();
-        void split_st_nogc_member_cmpmix_stat();
-
-
-        // SplitListSet + LazyList [dyn - dynamic bucket table, st - static bucket table]
-        void split_dyn_HP_base_cmp_lazy();
-        void split_dyn_HP_base_less_lazy();
-        void split_dyn_HP_base_cmpmix_lazy();
-        void split_dyn_HP_base_cmpmix_stat_lazy();
-        void split_dyn_HP_member_cmp_lazy();
-        void split_dyn_HP_member_less_lazy();
-        void split_dyn_HP_member_cmpmix_lazy();
-        void split_dyn_HP_member_cmpmix_stat_lazy();
-        void split_st_HP_base_cmp_lazy();
-        void split_st_HP_base_less_lazy();
-        void split_st_HP_base_cmpmix_lazy();
-        void split_st_HP_base_cmpmix_stat_lazy();
-        void split_st_HP_member_cmp_lazy();
-        void split_st_HP_member_less_lazy();
-        void split_st_HP_member_cmpmix_lazy();
-        void split_st_HP_member_cmpmix_stat_lazy();
-
-        void split_dyn_DHP_base_cmp_lazy();
-        void split_dyn_DHP_base_less_lazy();
-        void split_dyn_DHP_base_cmpmix_lazy();
-        void split_dyn_DHP_base_cmpmix_stat_lazy();
-        void split_dyn_DHP_member_cmp_lazy();
-        void split_dyn_DHP_member_less_lazy();
-        void split_dyn_DHP_member_cmpmix_lazy();
-        void split_dyn_DHP_member_cmpmix_stat_lazy();
-        void split_st_DHP_base_cmp_lazy();
-        void split_st_DHP_base_less_lazy();
-        void split_st_DHP_base_cmpmix_lazy();
-        void split_st_DHP_base_cmpmix_stat_lazy();
-        void split_st_DHP_member_cmp_lazy();
-        void split_st_DHP_member_less_lazy();
-        void split_st_DHP_member_cmpmix_lazy();
-        void split_st_DHP_member_cmpmix_stat_lazy();
-
-        void split_dyn_RCU_GPI_base_cmp_lazy();
-        void split_dyn_RCU_GPI_base_less_lazy();
-        void split_dyn_RCU_GPI_base_cmpmix_lazy();
-        void split_dyn_RCU_GPI_base_cmpmix_stat_lazy();
-        void split_dyn_RCU_GPI_member_cmp_lazy();
-        void split_dyn_RCU_GPI_member_less_lazy();
-        void split_dyn_RCU_GPI_member_cmpmix_lazy();
-        void split_dyn_RCU_GPI_member_cmpmix_stat_lazy();
-        void split_st_RCU_GPI_base_cmp_lazy();
-        void split_st_RCU_GPI_base_less_lazy();
-        void split_st_RCU_GPI_base_cmpmix_lazy();
-        void split_st_RCU_GPI_base_cmpmix_stat_lazy();
-        void split_st_RCU_GPI_member_cmp_lazy();
-        void split_st_RCU_GPI_member_less_lazy();
-        void split_st_RCU_GPI_member_cmpmix_lazy();
-        void split_st_RCU_GPI_member_cmpmix_stat_lazy();
-
-        void split_dyn_RCU_GPB_base_cmp_lazy();
-        void split_dyn_RCU_GPB_base_less_lazy();
-        void split_dyn_RCU_GPB_base_cmpmix_lazy();
-        void split_dyn_RCU_GPB_base_cmpmix_stat_lazy();
-        void split_dyn_RCU_GPB_member_cmp_lazy();
-        void split_dyn_RCU_GPB_member_less_lazy();
-        void split_dyn_RCU_GPB_member_cmpmix_lazy();
-        void split_dyn_RCU_GPB_member_cmpmix_stat_lazy();
-        void split_st_RCU_GPB_base_cmp_lazy();
-        void split_st_RCU_GPB_base_less_lazy();
-        void split_st_RCU_GPB_base_cmpmix_lazy();
-        void split_st_RCU_GPB_base_cmpmix_stat_lazy();
-        void split_st_RCU_GPB_member_cmp_lazy();
-        void split_st_RCU_GPB_member_less_lazy();
-        void split_st_RCU_GPB_member_cmpmix_lazy();
-        void split_st_RCU_GPB_member_cmpmix_stat_lazy();
-
-        void split_dyn_RCU_GPT_base_cmp_lazy();
-        void split_dyn_RCU_GPT_base_less_lazy();
-        void split_dyn_RCU_GPT_base_cmpmix_lazy();
-        void split_dyn_RCU_GPT_base_cmpmix_stat_lazy();
-        void split_dyn_RCU_GPT_member_cmp_lazy();
-        void split_dyn_RCU_GPT_member_less_lazy();
-        void split_dyn_RCU_GPT_member_cmpmix_lazy();
-        void split_dyn_RCU_GPT_member_cmpmix_stat_lazy();
-        void split_st_RCU_GPT_base_cmp_lazy();
-        void split_st_RCU_GPT_base_less_lazy();
-        void split_st_RCU_GPT_base_cmpmix_lazy();
-        void split_st_RCU_GPT_base_cmpmix_stat_lazy();
-        void split_st_RCU_GPT_member_cmp_lazy();
-        void split_st_RCU_GPT_member_less_lazy();
-        void split_st_RCU_GPT_member_cmpmix_lazy();
-        void split_st_RCU_GPT_member_cmpmix_stat_lazy();
-
-        void split_dyn_RCU_SHB_base_cmp_lazy();
-        void split_dyn_RCU_SHB_base_less_lazy();
-        void split_dyn_RCU_SHB_base_cmpmix_lazy();
-        void split_dyn_RCU_SHB_base_cmpmix_stat_lazy();
-        void split_dyn_RCU_SHB_member_cmp_lazy();
-        void split_dyn_RCU_SHB_member_less_lazy();
-        void split_dyn_RCU_SHB_member_cmpmix_lazy();
-        void split_dyn_RCU_SHB_member_cmpmix_stat_lazy();
-        void split_st_RCU_SHB_base_cmp_lazy();
-        void split_st_RCU_SHB_base_less_lazy();
-        void split_st_RCU_SHB_base_cmpmix_lazy();
-        void split_st_RCU_SHB_base_cmpmix_stat_lazy();
-        void split_st_RCU_SHB_member_cmp_lazy();
-        void split_st_RCU_SHB_member_less_lazy();
-        void split_st_RCU_SHB_member_cmpmix_lazy();
-        void split_st_RCU_SHB_member_cmpmix_stat_lazy();
-
-        void split_dyn_RCU_SHT_base_cmp_lazy();
-        void split_dyn_RCU_SHT_base_less_lazy();
-        void split_dyn_RCU_SHT_base_cmpmix_lazy();
-        void split_dyn_RCU_SHT_base_cmpmix_stat_lazy();
-        void split_dyn_RCU_SHT_member_cmp_lazy();
-        void split_dyn_RCU_SHT_member_less_lazy();
-        void split_dyn_RCU_SHT_member_cmpmix_lazy();
-        void split_dyn_RCU_SHT_member_cmpmix_stat_lazy();
-        void split_st_RCU_SHT_base_cmp_lazy();
-        void split_st_RCU_SHT_base_less_lazy();
-        void split_st_RCU_SHT_base_cmpmix_lazy();
-        void split_st_RCU_SHT_base_cmpmix_stat_lazy();
-        void split_st_RCU_SHT_member_cmp_lazy();
-        void split_st_RCU_SHT_member_less_lazy();
-        void split_st_RCU_SHT_member_cmpmix_lazy();
-        void split_st_RCU_SHT_member_cmpmix_stat_lazy();
-
-        void split_dyn_nogc_base_cmp_lazy();
-        void split_dyn_nogc_base_less_lazy();
-        void split_dyn_nogc_base_cmpmix_lazy();
-        void split_dyn_nogc_base_cmpmix_stat_lazy();
-        void split_dyn_nogc_member_cmp_lazy();
-        void split_dyn_nogc_member_less_lazy();
-        void split_dyn_nogc_member_cmpmix_lazy();
-        void split_dyn_nogc_member_cmpmix_stat_lazy();
-        void split_st_nogc_base_cmp_lazy();
-        void split_st_nogc_base_less_lazy();
-        void split_st_nogc_base_cmpmix_lazy();
-        void split_st_nogc_base_cmpmix_stat_lazy();
-        void split_st_nogc_member_cmp_lazy();
-        void split_st_nogc_member_less_lazy();
-        void split_st_nogc_member_cmpmix_lazy();
-        void split_st_nogc_member_cmpmix_stat_lazy();
-
-        CPPUNIT_TEST_SUITE(IntrusiveHashSetHdrTest)
-            CPPUNIT_TEST(HP_base_cmp)
-            CPPUNIT_TEST(HP_base_less)
-            CPPUNIT_TEST(HP_base_cmpmix)
-            CPPUNIT_TEST(HP_member_cmp)
-            CPPUNIT_TEST(HP_member_less)
-            CPPUNIT_TEST(HP_member_cmpmix)
-
-            CPPUNIT_TEST(DHP_base_cmp)
-            CPPUNIT_TEST(DHP_base_less)
-            CPPUNIT_TEST(DHP_base_cmpmix)
-            CPPUNIT_TEST(DHP_member_cmp)
-            CPPUNIT_TEST(DHP_member_less)
-            CPPUNIT_TEST(DHP_member_cmpmix)
-
-            CPPUNIT_TEST(RCU_GPI_base_cmp)
-            CPPUNIT_TEST(RCU_GPI_base_less)
-            CPPUNIT_TEST(RCU_GPI_base_cmpmix)
-            CPPUNIT_TEST(RCU_GPI_member_cmp)
-            CPPUNIT_TEST(RCU_GPI_member_less)
-            CPPUNIT_TEST(RCU_GPI_member_cmpmix)
-
-            CPPUNIT_TEST(RCU_GPB_base_cmp)
-            CPPUNIT_TEST(RCU_GPB_base_less)
-            CPPUNIT_TEST(RCU_GPB_base_cmpmix)
-            CPPUNIT_TEST(RCU_GPB_member_cmp)
-            CPPUNIT_TEST(RCU_GPB_member_less)
-            CPPUNIT_TEST(RCU_GPB_member_cmpmix)
-
-            CPPUNIT_TEST(RCU_GPT_base_cmp)
-            CPPUNIT_TEST(RCU_GPT_base_less)
-            CPPUNIT_TEST(RCU_GPT_base_cmpmix)
-            CPPUNIT_TEST(RCU_GPT_member_cmp)
-            CPPUNIT_TEST(RCU_GPT_member_less)
-            CPPUNIT_TEST(RCU_GPT_member_cmpmix)
-
-            CPPUNIT_TEST(RCU_SHB_base_cmp)
-            CPPUNIT_TEST(RCU_SHB_base_less)
-            CPPUNIT_TEST(RCU_SHB_base_cmpmix)
-            CPPUNIT_TEST(RCU_SHB_member_cmp)
-            CPPUNIT_TEST(RCU_SHB_member_less)
-            CPPUNIT_TEST(RCU_SHB_member_cmpmix)
-
-            CPPUNIT_TEST(RCU_SHT_base_cmp)
-            CPPUNIT_TEST(RCU_SHT_base_less)
-            CPPUNIT_TEST(RCU_SHT_base_cmpmix)
-            CPPUNIT_TEST(RCU_SHT_member_cmp)
-            CPPUNIT_TEST(RCU_SHT_member_less)
-            CPPUNIT_TEST(RCU_SHT_member_cmpmix)
-
-            CPPUNIT_TEST(nogc_base_cmp)
-            CPPUNIT_TEST(nogc_base_less)
-            CPPUNIT_TEST(nogc_base_cmpmix)
-            CPPUNIT_TEST(nogc_member_cmp)
-            CPPUNIT_TEST(nogc_member_less)
-            CPPUNIT_TEST(nogc_member_cmpmix)
-
-            CPPUNIT_TEST(HP_base_cmp_lazy)
-            CPPUNIT_TEST(HP_base_less_lazy)
-            CPPUNIT_TEST(HP_base_cmpmix_lazy)
-            CPPUNIT_TEST(HP_member_cmp_lazy)
-            CPPUNIT_TEST(HP_member_less_lazy)
-            CPPUNIT_TEST(HP_member_cmpmix_lazy)
-
-            CPPUNIT_TEST(DHP_base_cmp_lazy)
-            CPPUNIT_TEST(DHP_base_less_lazy)
-            CPPUNIT_TEST(DHP_base_cmpmix_lazy)
-            CPPUNIT_TEST(DHP_member_cmp_lazy)
-            CPPUNIT_TEST(DHP_member_less_lazy)
-            CPPUNIT_TEST(DHP_member_cmpmix_lazy)
-
-            CPPUNIT_TEST(RCU_GPI_base_cmp_lazy)
-            CPPUNIT_TEST(RCU_GPI_base_less_lazy)
-            CPPUNIT_TEST(RCU_GPI_base_cmpmix_lazy)
-            CPPUNIT_TEST(RCU_GPI_member_cmp_lazy)
-            CPPUNIT_TEST(RCU_GPI_member_less_lazy)
-            CPPUNIT_TEST(RCU_GPI_member_cmpmix_lazy)
-
-            CPPUNIT_TEST(RCU_GPB_base_cmp_lazy)
-            CPPUNIT_TEST(RCU_GPB_base_less_lazy)
-            CPPUNIT_TEST(RCU_GPB_base_cmpmix_lazy)
-            CPPUNIT_TEST(RCU_GPB_member_cmp_lazy)
-            CPPUNIT_TEST(RCU_GPB_member_less_lazy)
-            CPPUNIT_TEST(RCU_GPB_member_cmpmix_lazy)
-
-            CPPUNIT_TEST(RCU_GPT_base_cmp_lazy)
-            CPPUNIT_TEST(RCU_GPT_base_less_lazy)
-            CPPUNIT_TEST(RCU_GPT_base_cmpmix_lazy)
-            CPPUNIT_TEST(RCU_GPT_member_cmp_lazy)
-            CPPUNIT_TEST(RCU_GPT_member_less_lazy)
-            CPPUNIT_TEST(RCU_GPT_member_cmpmix_lazy)
-
-            CPPUNIT_TEST(RCU_SHB_base_cmp_lazy)
-            CPPUNIT_TEST(RCU_SHB_base_less_lazy)
-            CPPUNIT_TEST(RCU_SHB_base_cmpmix_lazy)
-            CPPUNIT_TEST(RCU_SHB_member_cmp_lazy)
-            CPPUNIT_TEST(RCU_SHB_member_less_lazy)
-            CPPUNIT_TEST(RCU_SHB_member_cmpmix_lazy)
-
-            CPPUNIT_TEST(RCU_SHT_base_cmp_lazy)
-            CPPUNIT_TEST(RCU_SHT_base_less_lazy)
-            CPPUNIT_TEST(RCU_SHT_base_cmpmix_lazy)
-            CPPUNIT_TEST(RCU_SHT_member_cmp_lazy)
-            CPPUNIT_TEST(RCU_SHT_member_less_lazy)
-            CPPUNIT_TEST(RCU_SHT_member_cmpmix_lazy)
-
-            CPPUNIT_TEST(nogc_base_cmp_lazy)
-            CPPUNIT_TEST(nogc_base_less_lazy)
-            CPPUNIT_TEST(nogc_base_cmpmix_lazy)
-            CPPUNIT_TEST(nogc_member_cmp_lazy)
-            CPPUNIT_TEST(nogc_member_less_lazy)
-            CPPUNIT_TEST(nogc_member_cmpmix_lazy)
-
-            CPPUNIT_TEST(split_dyn_HP_base_cmp)
-            CPPUNIT_TEST(split_dyn_HP_base_less)
-            CPPUNIT_TEST(split_dyn_HP_base_cmpmix)
-            CPPUNIT_TEST( split_dyn_HP_base_cmpmix_stat )
-            CPPUNIT_TEST( split_dyn_HP_member_cmp )
-            CPPUNIT_TEST(split_dyn_HP_member_less)
-            CPPUNIT_TEST(split_dyn_HP_member_cmpmix)
-            CPPUNIT_TEST( split_dyn_HP_member_cmpmix_stat )
-            CPPUNIT_TEST( split_st_HP_base_cmp )
-            CPPUNIT_TEST(split_st_HP_base_less)
-            CPPUNIT_TEST(split_st_HP_base_cmpmix)
-            CPPUNIT_TEST( split_st_HP_base_cmpmix_stat )
-            CPPUNIT_TEST( split_st_HP_member_cmp )
-            CPPUNIT_TEST(split_st_HP_member_less)
-            CPPUNIT_TEST(split_st_HP_member_cmpmix)
-            CPPUNIT_TEST( split_st_HP_member_cmpmix_stat )
-
-            CPPUNIT_TEST(split_dyn_DHP_base_cmp)
-            CPPUNIT_TEST(split_dyn_DHP_base_less)
-            CPPUNIT_TEST(split_dyn_DHP_base_cmpmix)
-            CPPUNIT_TEST( split_dyn_DHP_base_cmpmix_stat )
-            CPPUNIT_TEST( split_dyn_DHP_member_cmp )
-            CPPUNIT_TEST(split_dyn_DHP_member_less)
-            CPPUNIT_TEST(split_dyn_DHP_member_cmpmix)
-            CPPUNIT_TEST( split_dyn_DHP_member_cmpmix_stat )
-            CPPUNIT_TEST( split_st_DHP_base_cmp )
-            CPPUNIT_TEST(split_st_DHP_base_less)
-            CPPUNIT_TEST(split_st_DHP_base_cmpmix)
-            CPPUNIT_TEST( split_st_DHP_base_cmpmix_stat )
-            CPPUNIT_TEST( split_st_DHP_member_cmp )
-            CPPUNIT_TEST(split_st_DHP_member_less)
-            CPPUNIT_TEST(split_st_DHP_member_cmpmix)
-            CPPUNIT_TEST( split_st_DHP_member_cmpmix_stat )
-
-            CPPUNIT_TEST(split_dyn_RCU_GPI_base_cmp)
-            CPPUNIT_TEST(split_dyn_RCU_GPI_base_less)
-            CPPUNIT_TEST(split_dyn_RCU_GPI_base_cmpmix)
-            CPPUNIT_TEST( split_dyn_RCU_GPI_base_cmpmix_stat )
-            CPPUNIT_TEST( split_dyn_RCU_GPI_member_cmp )
-            CPPUNIT_TEST(split_dyn_RCU_GPI_member_less)
-            CPPUNIT_TEST(split_dyn_RCU_GPI_member_cmpmix)
-            CPPUNIT_TEST( split_dyn_RCU_GPI_member_cmpmix_stat )
-            CPPUNIT_TEST( split_st_RCU_GPI_base_cmp )
-            CPPUNIT_TEST(split_st_RCU_GPI_base_less)
-            CPPUNIT_TEST(split_st_RCU_GPI_base_cmpmix)
-            CPPUNIT_TEST( split_st_RCU_GPI_base_cmpmix_stat )
-            CPPUNIT_TEST( split_st_RCU_GPI_member_cmp )
-            CPPUNIT_TEST(split_st_RCU_GPI_member_less)
-            CPPUNIT_TEST(split_st_RCU_GPI_member_cmpmix)
-            CPPUNIT_TEST( split_st_RCU_GPI_member_cmpmix_stat )
-
-            CPPUNIT_TEST(split_dyn_RCU_GPB_base_cmp)
-            CPPUNIT_TEST(split_dyn_RCU_GPB_base_less)
-            CPPUNIT_TEST(split_dyn_RCU_GPB_base_cmpmix)
-            CPPUNIT_TEST( split_dyn_RCU_GPB_base_cmpmix_stat )
-            CPPUNIT_TEST( split_dyn_RCU_GPB_member_cmp )
-            CPPUNIT_TEST(split_dyn_RCU_GPB_member_less)
-            CPPUNIT_TEST(split_dyn_RCU_GPB_member_cmpmix)
-            CPPUNIT_TEST( split_dyn_RCU_GPB_member_cmpmix_stat )
-            CPPUNIT_TEST( split_st_RCU_GPB_base_cmp )
-            CPPUNIT_TEST(split_st_RCU_GPB_base_less)
-            CPPUNIT_TEST(split_st_RCU_GPB_base_cmpmix)
-            CPPUNIT_TEST( split_st_RCU_GPB_base_cmpmix_stat )
-            CPPUNIT_TEST( split_st_RCU_GPB_member_cmp )
-            CPPUNIT_TEST(split_st_RCU_GPB_member_less)
-            CPPUNIT_TEST(split_st_RCU_GPB_member_cmpmix)
-            CPPUNIT_TEST( split_st_RCU_GPB_member_cmpmix_stat )
-
-            CPPUNIT_TEST(split_dyn_RCU_GPT_base_cmp)
-            CPPUNIT_TEST(split_dyn_RCU_GPT_base_less)
-            CPPUNIT_TEST(split_dyn_RCU_GPT_base_cmpmix)
-            CPPUNIT_TEST( split_dyn_RCU_GPT_base_cmpmix_stat )
-            CPPUNIT_TEST( split_dyn_RCU_GPT_member_cmp )
-            CPPUNIT_TEST(split_dyn_RCU_GPT_member_less)
-            CPPUNIT_TEST(split_dyn_RCU_GPT_member_cmpmix)
-            CPPUNIT_TEST( split_dyn_RCU_GPT_member_cmpmix_stat )
-            CPPUNIT_TEST( split_st_RCU_GPT_base_cmp )
-            CPPUNIT_TEST(split_st_RCU_GPT_base_less)
-            CPPUNIT_TEST(split_st_RCU_GPT_base_cmpmix)
-            CPPUNIT_TEST( split_st_RCU_GPT_base_cmpmix_stat )
-            CPPUNIT_TEST( split_st_RCU_GPT_member_cmp )
-            CPPUNIT_TEST(split_st_RCU_GPT_member_less)
-            CPPUNIT_TEST(split_st_RCU_GPT_member_cmpmix)
-            CPPUNIT_TEST( split_st_RCU_GPT_member_cmpmix_stat )
-
-            CPPUNIT_TEST(split_dyn_RCU_SHB_base_cmp)
-            CPPUNIT_TEST(split_dyn_RCU_SHB_base_less)
-            CPPUNIT_TEST(split_dyn_RCU_SHB_base_cmpmix)
-            CPPUNIT_TEST( split_dyn_RCU_SHB_base_cmpmix_stat )
-            CPPUNIT_TEST( split_dyn_RCU_SHB_member_cmp )
-            CPPUNIT_TEST(split_dyn_RCU_SHB_member_less)
-            CPPUNIT_TEST(split_dyn_RCU_SHB_member_cmpmix)
-            CPPUNIT_TEST( split_dyn_RCU_SHB_member_cmpmix_stat )
-            CPPUNIT_TEST( split_st_RCU_SHB_base_cmp )
-            CPPUNIT_TEST(split_st_RCU_SHB_base_less)
-            CPPUNIT_TEST(split_st_RCU_SHB_base_cmpmix)
-            CPPUNIT_TEST( split_st_RCU_SHB_base_cmpmix_stat )
-            CPPUNIT_TEST( split_st_RCU_SHB_member_cmp )
-            CPPUNIT_TEST(split_st_RCU_SHB_member_less)
-            CPPUNIT_TEST(split_st_RCU_SHB_member_cmpmix)
-            CPPUNIT_TEST( split_st_RCU_SHB_member_cmpmix_stat )
-
-            CPPUNIT_TEST(split_dyn_RCU_SHT_base_cmp)
-            CPPUNIT_TEST(split_dyn_RCU_SHT_base_less)
-            CPPUNIT_TEST(split_dyn_RCU_SHT_base_cmpmix)
-            CPPUNIT_TEST( split_dyn_RCU_SHT_base_cmpmix_stat )
-            CPPUNIT_TEST( split_dyn_RCU_SHT_member_cmp )
-            CPPUNIT_TEST(split_dyn_RCU_SHT_member_less)
-            CPPUNIT_TEST(split_dyn_RCU_SHT_member_cmpmix)
-            CPPUNIT_TEST( split_dyn_RCU_SHT_member_cmpmix_stat )
-            CPPUNIT_TEST( split_st_RCU_SHT_base_cmp )
-            CPPUNIT_TEST(split_st_RCU_SHT_base_less)
-            CPPUNIT_TEST(split_st_RCU_SHT_base_cmpmix)
-            CPPUNIT_TEST( split_st_RCU_SHT_base_cmpmix_stat )
-            CPPUNIT_TEST( split_st_RCU_SHT_member_cmp )
-            CPPUNIT_TEST(split_st_RCU_SHT_member_less)
-            CPPUNIT_TEST(split_st_RCU_SHT_member_cmpmix)
-            CPPUNIT_TEST( split_st_RCU_SHT_member_cmpmix_stat )
-
-            CPPUNIT_TEST(split_dyn_nogc_base_cmp)
-            CPPUNIT_TEST(split_dyn_nogc_base_less)
-            CPPUNIT_TEST(split_dyn_nogc_base_cmpmix)
-            CPPUNIT_TEST( split_dyn_nogc_base_cmpmix_stat )
-            CPPUNIT_TEST( split_dyn_nogc_member_cmp )
-            CPPUNIT_TEST(split_dyn_nogc_member_less)
-            CPPUNIT_TEST(split_dyn_nogc_member_cmpmix)
-            CPPUNIT_TEST( split_dyn_nogc_member_cmpmix_stat )
-            CPPUNIT_TEST( split_st_nogc_base_cmp )
-            CPPUNIT_TEST(split_st_nogc_base_less)
-            CPPUNIT_TEST(split_st_nogc_base_cmpmix)
-            CPPUNIT_TEST( split_st_nogc_base_cmpmix_stat )
-            CPPUNIT_TEST( split_st_nogc_member_cmp )
-            CPPUNIT_TEST(split_st_nogc_member_less)
-            CPPUNIT_TEST(split_st_nogc_member_cmpmix)
-            CPPUNIT_TEST( split_st_nogc_member_cmpmix_stat )
-
-            CPPUNIT_TEST(split_dyn_HP_base_cmp_lazy)
-            CPPUNIT_TEST(split_dyn_HP_base_less_lazy)
-            CPPUNIT_TEST(split_dyn_HP_base_cmpmix_lazy)
-            CPPUNIT_TEST( split_dyn_HP_base_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_dyn_HP_member_cmp_lazy )
-            CPPUNIT_TEST(split_dyn_HP_member_less_lazy)
-            CPPUNIT_TEST(split_dyn_HP_member_cmpmix_lazy)
-            CPPUNIT_TEST( split_dyn_HP_member_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_st_HP_base_cmp_lazy )
-            CPPUNIT_TEST(split_st_HP_base_less_lazy)
-            CPPUNIT_TEST(split_st_HP_base_cmpmix_lazy)
-            CPPUNIT_TEST( split_st_HP_base_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_st_HP_member_cmp_lazy )
-            CPPUNIT_TEST(split_st_HP_member_less_lazy)
-            CPPUNIT_TEST(split_st_HP_member_cmpmix_lazy)
-            CPPUNIT_TEST( split_st_HP_member_cmpmix_stat_lazy )
-
-            CPPUNIT_TEST(split_dyn_DHP_base_cmp_lazy)
-            CPPUNIT_TEST(split_dyn_DHP_base_less_lazy)
-            CPPUNIT_TEST(split_dyn_DHP_base_cmpmix_lazy)
-            CPPUNIT_TEST( split_dyn_DHP_base_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_dyn_DHP_member_cmp_lazy )
-            CPPUNIT_TEST(split_dyn_DHP_member_less_lazy)
-            CPPUNIT_TEST(split_dyn_DHP_member_cmpmix_lazy)
-            CPPUNIT_TEST( split_dyn_DHP_member_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_st_DHP_base_cmp_lazy )
-            CPPUNIT_TEST(split_st_DHP_base_less_lazy)
-            CPPUNIT_TEST(split_st_DHP_base_cmpmix_lazy)
-            CPPUNIT_TEST( split_st_DHP_base_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_st_DHP_member_cmp_lazy )
-            CPPUNIT_TEST(split_st_DHP_member_less_lazy)
-            CPPUNIT_TEST(split_st_DHP_member_cmpmix_lazy)
-            CPPUNIT_TEST( split_st_DHP_member_cmpmix_stat_lazy )
-
-            CPPUNIT_TEST(split_dyn_RCU_GPI_base_cmp_lazy)
-            CPPUNIT_TEST(split_dyn_RCU_GPI_base_less_lazy)
-            CPPUNIT_TEST(split_dyn_RCU_GPI_base_cmpmix_lazy)
-            CPPUNIT_TEST( split_dyn_RCU_GPI_base_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_dyn_RCU_GPI_member_cmp_lazy )
-            CPPUNIT_TEST(split_dyn_RCU_GPI_member_less_lazy)
-            CPPUNIT_TEST(split_dyn_RCU_GPI_member_cmpmix_lazy)
-            CPPUNIT_TEST( split_dyn_RCU_GPI_member_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_st_RCU_GPI_base_cmp_lazy )
-            CPPUNIT_TEST(split_st_RCU_GPI_base_less_lazy)
-            CPPUNIT_TEST(split_st_RCU_GPI_base_cmpmix_lazy)
-            CPPUNIT_TEST( split_st_RCU_GPI_base_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_st_RCU_GPI_member_cmp_lazy )
-            CPPUNIT_TEST(split_st_RCU_GPI_member_less_lazy)
-            CPPUNIT_TEST(split_st_RCU_GPI_member_cmpmix_lazy)
-            CPPUNIT_TEST( split_st_RCU_GPI_member_cmpmix_stat_lazy )
-
-            CPPUNIT_TEST(split_dyn_RCU_GPB_base_cmp_lazy)
-            CPPUNIT_TEST(split_dyn_RCU_GPB_base_less_lazy)
-            CPPUNIT_TEST(split_dyn_RCU_GPB_base_cmpmix_lazy)
-            CPPUNIT_TEST( split_dyn_RCU_GPB_base_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_dyn_RCU_GPB_member_cmp_lazy )
-            CPPUNIT_TEST(split_dyn_RCU_GPB_member_less_lazy)
-            CPPUNIT_TEST(split_dyn_RCU_GPB_member_cmpmix_lazy)
-            CPPUNIT_TEST( split_dyn_RCU_GPB_member_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_st_RCU_GPB_base_cmp_lazy )
-            CPPUNIT_TEST(split_st_RCU_GPB_base_less_lazy)
-            CPPUNIT_TEST(split_st_RCU_GPB_base_cmpmix_lazy)
-            CPPUNIT_TEST( split_st_RCU_GPB_base_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_st_RCU_GPB_member_cmp_lazy )
-            CPPUNIT_TEST(split_st_RCU_GPB_member_less_lazy)
-            CPPUNIT_TEST(split_st_RCU_GPB_member_cmpmix_lazy)
-            CPPUNIT_TEST( split_st_RCU_GPB_member_cmpmix_stat_lazy )
-
-            CPPUNIT_TEST(split_dyn_RCU_GPT_base_cmp_lazy)
-            CPPUNIT_TEST(split_dyn_RCU_GPT_base_less_lazy)
-            CPPUNIT_TEST(split_dyn_RCU_GPT_base_cmpmix_lazy)
-            CPPUNIT_TEST( split_dyn_RCU_GPT_base_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_dyn_RCU_GPT_member_cmp_lazy )
-            CPPUNIT_TEST(split_dyn_RCU_GPT_member_less_lazy)
-            CPPUNIT_TEST(split_dyn_RCU_GPT_member_cmpmix_lazy)
-            CPPUNIT_TEST( split_dyn_RCU_GPT_member_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_st_RCU_GPT_base_cmp_lazy )
-            CPPUNIT_TEST(split_st_RCU_GPT_base_less_lazy)
-            CPPUNIT_TEST(split_st_RCU_GPT_base_cmpmix_lazy)
-            CPPUNIT_TEST( split_st_RCU_GPT_base_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_st_RCU_GPT_member_cmp_lazy )
-            CPPUNIT_TEST(split_st_RCU_GPT_member_less_lazy)
-            CPPUNIT_TEST(split_st_RCU_GPT_member_cmpmix_lazy)
-            CPPUNIT_TEST( split_st_RCU_GPT_member_cmpmix_stat_lazy )
-
-            CPPUNIT_TEST(split_dyn_RCU_SHB_base_cmp_lazy)
-            CPPUNIT_TEST(split_dyn_RCU_SHB_base_less_lazy)
-            CPPUNIT_TEST(split_dyn_RCU_SHB_base_cmpmix_lazy)
-            CPPUNIT_TEST( split_dyn_RCU_SHB_base_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_dyn_RCU_SHB_member_cmp_lazy )
-            CPPUNIT_TEST(split_dyn_RCU_SHB_member_less_lazy)
-            CPPUNIT_TEST(split_dyn_RCU_SHB_member_cmpmix_lazy)
-            CPPUNIT_TEST( split_dyn_RCU_SHB_member_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_st_RCU_SHB_base_cmp_lazy )
-            CPPUNIT_TEST(split_st_RCU_SHB_base_less_lazy)
-            CPPUNIT_TEST(split_st_RCU_SHB_base_cmpmix_lazy)
-            CPPUNIT_TEST( split_st_RCU_SHB_base_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_st_RCU_SHB_member_cmp_lazy )
-            CPPUNIT_TEST(split_st_RCU_SHB_member_less_lazy)
-            CPPUNIT_TEST(split_st_RCU_SHB_member_cmpmix_lazy)
-            CPPUNIT_TEST( split_st_RCU_SHB_member_cmpmix_stat_lazy )
-
-            CPPUNIT_TEST(split_dyn_RCU_SHT_base_cmp_lazy)
-            CPPUNIT_TEST(split_dyn_RCU_SHT_base_less_lazy)
-            CPPUNIT_TEST(split_dyn_RCU_SHT_base_cmpmix_lazy)
-            CPPUNIT_TEST( split_dyn_RCU_SHT_base_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_dyn_RCU_SHT_member_cmp_lazy )
-            CPPUNIT_TEST(split_dyn_RCU_SHT_member_less_lazy)
-            CPPUNIT_TEST(split_dyn_RCU_SHT_member_cmpmix_lazy)
-            CPPUNIT_TEST( split_dyn_RCU_SHT_member_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_st_RCU_SHT_base_cmp_lazy )
-            CPPUNIT_TEST(split_st_RCU_SHT_base_less_lazy)
-            CPPUNIT_TEST(split_st_RCU_SHT_base_cmpmix_lazy)
-            CPPUNIT_TEST( split_st_RCU_SHT_base_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_st_RCU_SHT_member_cmp_lazy )
-            CPPUNIT_TEST(split_st_RCU_SHT_member_less_lazy)
-            CPPUNIT_TEST(split_st_RCU_SHT_member_cmpmix_lazy)
-            CPPUNIT_TEST( split_st_RCU_SHT_member_cmpmix_stat_lazy )
-
-            CPPUNIT_TEST(split_dyn_nogc_base_cmp_lazy)
-            CPPUNIT_TEST(split_dyn_nogc_base_less_lazy)
-            CPPUNIT_TEST(split_dyn_nogc_base_cmpmix_lazy)
-            CPPUNIT_TEST( split_dyn_nogc_base_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_dyn_nogc_member_cmp_lazy )
-            CPPUNIT_TEST(split_dyn_nogc_member_less_lazy)
-            CPPUNIT_TEST(split_dyn_nogc_member_cmpmix_lazy)
-            CPPUNIT_TEST( split_dyn_nogc_member_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_st_nogc_base_cmp_lazy )
-            CPPUNIT_TEST(split_st_nogc_base_less_lazy)
-            CPPUNIT_TEST(split_st_nogc_base_cmpmix_lazy)
-            CPPUNIT_TEST( split_st_nogc_base_cmpmix_stat_lazy )
-            CPPUNIT_TEST( split_st_nogc_member_cmp_lazy )
-            CPPUNIT_TEST(split_st_nogc_member_less_lazy)
-            CPPUNIT_TEST(split_st_nogc_member_cmpmix_lazy)
-            CPPUNIT_TEST( split_st_nogc_member_cmpmix_stat_lazy )
-        CPPUNIT_TEST_SUITE_END()
-
-    };
-
-}   // namespace set
-
-#endif // #ifndef CDSTEST_HDR_INTRUSIVE_SET_H
diff --git a/tests/test-hdr/set/hdr_intrusive_skiplist_dhp.cpp b/tests/test-hdr/set/hdr_intrusive_skiplist_dhp.cpp
deleted file mode 100644 (file)
index 3c297b4..0000000
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_skiplist_set.h"
-
-#include <cds/intrusive/skip_list_dhp.h>
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-
-    void IntrusiveSkipListSet::skiplist_dhp_base_cmp()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_base_less()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_base_cmpmix()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< cmp<item> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_base_cmp_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_base_less_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_base_cmpmix_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_base_cmp_xorshift()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_base_less_xorshift()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_base_cmpmix_xorshift()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSet::skiplist_dhp_base_cmp_xorshift_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_base_less_xorshift_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_base_cmpmix_xorshift_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-
-    //*********
-    void IntrusiveSkipListSet::skiplist_dhp_base_cmp_pascal()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_base_less_pascal()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_base_cmpmix_pascal()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSet::skiplist_dhp_base_cmp_pascal_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_base_less_pascal_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_base_cmpmix_pascal_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-}   // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_skiplist_dhp_member.cpp b/tests/test-hdr/set/hdr_intrusive_skiplist_dhp_member.cpp
deleted file mode 100644 (file)
index ec4f087..0000000
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_skiplist_set.h"
-
-#include <cds/intrusive/skip_list_dhp.h>
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-        void IntrusiveSkipListSet::skiplist_dhp_member_cmp()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_member_less()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_member_cmpmix()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_member_cmp_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_member_less_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_member_cmpmix_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_member_cmp_xorshift()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_member_less_xorshift()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_member_cmpmix_xorshift()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSet::skiplist_dhp_member_cmp_xorshift_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_member_less_xorshift_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_member_cmpmix_xorshift_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-
-    void IntrusiveSkipListSet::skiplist_dhp_member_cmp_pascal()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_member_less_pascal()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_member_cmpmix_pascal()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSet::skiplist_dhp_member_cmp_pascal_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_member_less_pascal_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_dhp_member_cmpmix_pascal_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::DHP> > item;
-
-        typedef ci::SkipListSet< cds::gc::DHP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_skiplist_hp.cpp b/tests/test-hdr/set/hdr_intrusive_skiplist_hp.cpp
deleted file mode 100644 (file)
index 4defa41..0000000
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_skiplist_set.h"
-
-#include <cds/intrusive/skip_list_hp.h>
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-
-    void IntrusiveSkipListSet::skiplist_hp_base_cmp()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
-        struct set_traits : public ci::skip_list::traits
-        {
-            typedef ci::skip_list::base_hook< co::gc<cds::gc::HP> > hook;
-            typedef cmp<item> compare;
-            typedef faked_disposer disposer;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-        typedef ci::SkipListSet< cds::gc::HP, item, set_traits > set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_base_less()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_base_cmpmix()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_base_cmp_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_base_less_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_base_cmpmix_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_base_cmp_xorshift()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_base_less_xorshift()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_base_cmpmix_xorshift()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSet::skiplist_hp_base_cmp_xorshift_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_base_less_xorshift_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_base_cmpmix_xorshift_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-
-    //*********
-    void IntrusiveSkipListSet::skiplist_hp_base_cmp_pascal()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_base_less_pascal()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_base_cmpmix_pascal()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSet::skiplist_hp_base_cmp_pascal_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_base_less_pascal_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_base_cmpmix_pascal_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-}   // namespace set
-
-CPPUNIT_TEST_SUITE_REGISTRATION(set::IntrusiveSkipListSet);
diff --git a/tests/test-hdr/set/hdr_intrusive_skiplist_hp_member.cpp b/tests/test-hdr/set/hdr_intrusive_skiplist_hp_member.cpp
deleted file mode 100644 (file)
index 3b5de83..0000000
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_skiplist_set.h"
-
-#include <cds/intrusive/skip_list_hp.h>
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-        void IntrusiveSkipListSet::skiplist_hp_member_cmp()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::HP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_member_less()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_member_cmpmix()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_member_cmp_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::HP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_member_less_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_member_cmpmix_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_member_cmp_xorshift()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::HP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_member_less_xorshift()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_member_cmpmix_xorshift()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSet::skiplist_hp_member_cmp_xorshift_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::HP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_member_less_xorshift_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_member_cmpmix_xorshift_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-
-    void IntrusiveSkipListSet::skiplist_hp_member_cmp_pascal()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::HP> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_member_less_pascal()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_member_cmpmix_pascal()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSet::skiplist_hp_member_cmp_pascal_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::HP> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_member_less_pascal_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_hp_member_cmpmix_pascal_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::HP> > item;
-
-        typedef ci::SkipListSet< cds::gc::HP, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_skiplist_nogc.cpp b/tests/test-hdr/set/hdr_intrusive_skiplist_nogc.cpp
deleted file mode 100644 (file)
index 689aa53..0000000
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_skiplist_set.h"
-
-#include <cds/intrusive/skip_list_nogc.h>
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-
-    void IntrusiveSkipListSet::skiplist_nogc_base_cmp()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_base_less()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_base_cmpmix()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< cmp<item> >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_base_cmp_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::compare< cmp<item> >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_base_less_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_base_cmpmix_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_base_cmp_xorshift()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_base_less_xorshift()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_base_cmpmix_xorshift()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSet::skiplist_nogc_base_cmp_xorshift_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_base_less_xorshift_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_base_cmpmix_xorshift_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-
-    //*********
-    void IntrusiveSkipListSet::skiplist_nogc_base_cmp_pascal()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_base_less_pascal()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_base_cmpmix_pascal()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSet::skiplist_nogc_base_cmp_pascal_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_base_less_pascal_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_base_cmpmix_pascal_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-}   // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_skiplist_nogc_member.cpp b/tests/test-hdr/set/hdr_intrusive_skiplist_nogc_member.cpp
deleted file mode 100644 (file)
index fc07262..0000000
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_skiplist_set.h"
-
-#include <cds/intrusive/skip_list_nogc.h>
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-
-    void IntrusiveSkipListSet::skiplist_nogc_member_cmp()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_member_less()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_member_cmpmix()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< cmp<item> >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_member_cmp_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
-                ,co::compare< cmp<item> >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_member_less_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_member_cmpmix_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_member_cmp_xorshift()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_member_less_xorshift()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_member_cmpmix_xorshift()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSet::skiplist_nogc_member_cmp_xorshift_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_member_less_xorshift_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_member_cmpmix_xorshift_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-
-    //*********
-    void IntrusiveSkipListSet::skiplist_nogc_member_cmp_pascal()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_member_less_pascal()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_member_cmpmix_pascal()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSet::skiplist_nogc_member_cmp_pascal_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_member_less_pascal_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSet::skiplist_nogc_member_cmpmix_pascal_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
-
-        typedef ci::SkipListSet< cds::gc::nogc, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-}   // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpb.cpp b/tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpb.cpp
deleted file mode 100644 (file)
index c816917..0000000
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_skiplist_set_rcu.h"
-
-#include <cds/urcu/general_buffered.h>
-#include <cds/intrusive/skip_list_rcu.h>
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_type;
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_base_cmp()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_base_less()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_base_cmpmix()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< cmp<item> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_base_cmp_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_base_less_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_base_cmpmix_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_base_cmp_xorshift()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_base_less_xorshift()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_base_cmpmix_xorshift()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_base_cmp_xorshift_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_base_less_xorshift_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_base_cmpmix_xorshift_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-
-    //*********
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_base_cmp_pascal()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_base_less_pascal()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_base_cmpmix_pascal()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_base_cmp_pascal_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_base_less_pascal_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_base_cmpmix_pascal_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-}   // namespace set
-
-CPPUNIT_TEST_SUITE_REGISTRATION(set::IntrusiveSkipListSetRCU);
diff --git a/tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpb_member.cpp b/tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpb_member.cpp
deleted file mode 100644 (file)
index 2e0190c..0000000
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_skiplist_set_rcu.h"
-
-#include <cds/urcu/general_buffered.h>
-#include <cds/intrusive/skip_list_rcu.h>
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_type;
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmp()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_less()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmpmix()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmp_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_less_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmpmix_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmp_xorshift()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_less_xorshift()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmpmix_xorshift()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmp_xorshift_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_less_xorshift_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmpmix_xorshift_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmp_pascal()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_less_pascal()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmpmix_pascal()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmp_pascal_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_less_pascal_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpb_member_cmpmix_pascal_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpi.cpp b/tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpi.cpp
deleted file mode 100644 (file)
index cbf80f9..0000000
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_skiplist_set_rcu.h"
-
-#include <cds/urcu/general_instant.h>
-#include <cds/intrusive/skip_list_rcu.h>
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_base_cmp()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_base_less()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_base_cmpmix()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< cmp<item> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_base_cmp_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_base_less_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_base_cmpmix_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_base_cmp_xorshift()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_base_less_xorshift()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_base_cmpmix_xorshift()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_base_cmp_xorshift_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_base_less_xorshift_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_base_cmpmix_xorshift_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-
-    //*********
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_base_cmp_pascal()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_base_less_pascal()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_base_cmpmix_pascal()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_base_cmp_pascal_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_base_less_pascal_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_base_cmpmix_pascal_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-}   // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpi_member.cpp b/tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpi_member.cpp
deleted file mode 100644 (file)
index 1b3d621..0000000
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_skiplist_set_rcu.h"
-
-#include <cds/urcu/general_instant.h>
-#include <cds/intrusive/skip_list_rcu.h>
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_member_cmp()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_member_less()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_member_cmpmix()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_member_cmp_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_member_less_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_member_cmpmix_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_member_cmp_xorshift()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_member_less_xorshift()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_member_cmpmix_xorshift()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_member_cmp_xorshift_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_member_less_xorshift_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_member_cmpmix_xorshift_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_member_cmp_pascal()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_member_less_pascal()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_member_cmpmix_pascal()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_member_cmp_pascal_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_member_less_pascal_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpi_member_cmpmix_pascal_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpt.cpp b/tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpt.cpp
deleted file mode 100644 (file)
index 55d44d6..0000000
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_skiplist_set_rcu.h"
-
-#include <cds/urcu/general_threaded.h>
-#include <cds/intrusive/skip_list_rcu.h>
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_type;
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmp()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_less()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmpmix()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< cmp<item> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmp_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_less_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmpmix_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmp_xorshift()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_less_xorshift()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmpmix_xorshift()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmp_xorshift_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_less_xorshift_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmpmix_xorshift_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-
-    //*********
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmp_pascal()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_less_pascal()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmpmix_pascal()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmp_pascal_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_less_pascal_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmpmix_pascal_stat()
-    {
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-}   // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpt_member.cpp b/tests/test-hdr/set/hdr_intrusive_skiplist_rcu_gpt_member.cpp
deleted file mode 100644 (file)
index 57249e2..0000000
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_skiplist_set_rcu.h"
-
-#include <cds/urcu/general_threaded.h>
-#include <cds/intrusive/skip_list_rcu.h>
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_type;
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmp()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_less()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmpmix()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmp_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_less_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmpmix_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmp_xorshift()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_less_xorshift()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmpmix_xorshift()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmp_xorshift_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_less_xorshift_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmpmix_xorshift_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmp_pascal()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_less_pascal()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmpmix_pascal()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-        void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmp_pascal_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_less_pascal_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_member_cmpmix_pascal_stat()
-    {
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_skiplist_rcu_shb.cpp b/tests/test-hdr/set/hdr_intrusive_skiplist_rcu_shb.cpp
deleted file mode 100644 (file)
index 92b12db..0000000
+++ /dev/null
@@ -1,400 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_skiplist_set_rcu.h"
-
-#include <cds/urcu/signal_buffered.h>
-#include <cds/intrusive/skip_list_rcu.h>
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_type;
-    }
-#endif
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_base_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_base_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_base_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< cmp<item> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_base_cmp_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_base_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_base_cmpmix_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_base_cmp_xorshift()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_base_less_xorshift()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_base_cmpmix_xorshift()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_base_cmp_xorshift_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_base_less_xorshift_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_base_cmpmix_xorshift_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-
-    //*********
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_base_cmp_pascal()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_base_less_pascal()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_base_cmpmix_pascal()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-        void IntrusiveSkipListSetRCU::skiplist_rcu_shb_base_cmp_pascal_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_base_less_pascal_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_base_cmpmix_pascal_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-}   // namespace set
-
-CPPUNIT_TEST_SUITE_REGISTRATION(set::IntrusiveSkipListSetRCU);
diff --git a/tests/test-hdr/set/hdr_intrusive_skiplist_rcu_shb_member.cpp b/tests/test-hdr/set/hdr_intrusive_skiplist_rcu_shb_member.cpp
deleted file mode 100644 (file)
index b809bed..0000000
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_skiplist_set_rcu.h"
-
-#include <cds/urcu/signal_buffered.h>
-#include <cds/intrusive/skip_list_rcu.h>
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_type;
-    }
-#endif
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_cmp_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_cmpmix_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_cmp_xorshift()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_less_xorshift()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_cmpmix_xorshift()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_cmp_xorshift_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_less_xorshift_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_cmpmix_xorshift_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_cmp_pascal()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_less_pascal()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_cmpmix_pascal()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_cmp_pascal_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_less_pascal_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_shb_member_cmpmix_pascal_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_skiplist_rcu_sht.cpp b/tests/test-hdr/set/hdr_intrusive_skiplist_rcu_sht.cpp
deleted file mode 100644 (file)
index 52e0df8..0000000
+++ /dev/null
@@ -1,397 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_skiplist_set_rcu.h"
-
-#include <cds/urcu/signal_threaded.h>
-#include <cds/intrusive/skip_list_rcu.h>
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_type;
-    }
-#endif
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< cmp<item> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmp_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmpmix_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmp_xorshift()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_less_xorshift()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmpmix_xorshift()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmp_xorshift_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_less_xorshift_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmpmix_xorshift_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-
-    //*********
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmp_pascal()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_less_pascal()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmpmix_pascal()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmp_pascal_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_less_pascal_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_base_cmpmix_pascal_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-}   // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_skiplist_rcu_sht_member.cpp b/tests/test-hdr/set/hdr_intrusive_skiplist_rcu_sht_member.cpp
deleted file mode 100644 (file)
index c843b54..0000000
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_skiplist_set_rcu.h"
-
-#include <cds/urcu/signal_threaded.h>
-#include <cds/intrusive/skip_list_rcu.h>
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_type;
-    }
-#endif
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_member_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_member_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_member_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_member_cmp_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_member_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_member_cmpmix_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_member_cmp_xorshift()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_member_less_xorshift()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_member_cmpmix_xorshift()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_member_cmp_xorshift_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_member_less_xorshift_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_member_cmpmix_xorshift_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
-                ,co::stat< ci::skip_list::stat<> >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_member_cmp_pascal()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_member_less_pascal()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_member_cmpmix_pascal()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_member_cmp_pascal_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_member_less_pascal_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-    void IntrusiveSkipListSetRCU::skiplist_rcu_sht_member_cmpmix_pascal_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::skip_list::node< rcu_type> > item;
-
-        typedef ci::SkipListSet< rcu_type, item,
-            ci::skip_list::make_traits<
-                ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,co::compare< cmp<item> >
-                ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
-                ,co::stat< ci::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        >   set_type;
-
-        test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
-#endif
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_skiplist_set.h b/tests/test-hdr/set/hdr_intrusive_skiplist_set.h
deleted file mode 100644 (file)
index 31947a5..0000000
+++ /dev/null
@@ -1,796 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_INTRUSIVE_SKIPLIST_SET_H
-#define CDSTEST_HDR_INTRUSIVE_SKIPLIST_SET_H
-
-#include "set/hdr_intrusive_set.h"
-
-namespace set {
-
-    class IntrusiveSkipListSet: public IntrusiveHashSetHdrTest
-    {
-        typedef IntrusiveHashSetHdrTest base_class;
-
-        static size_t const c_nArrSize = 1000;
-
-    protected:
-        struct other_key {
-            int nKey;
-
-            other_key()
-            {}
-
-            other_key( int key )
-                : nKey(key)
-            {}
-
-            template <typename Q>
-            other_key& operator=( Q const& src )
-            {
-                nKey = src.nKey;
-                return *this;
-            }
-        };
-
-        template <typename StoredType>
-        struct other_key_less
-        {
-            bool operator ()( StoredType const& n, other_key k ) const
-            {
-                return n.nKey < k.nKey;
-            }
-            bool operator ()( other_key k, StoredType const& n ) const
-            {
-                return k.nKey < n.nKey;
-            }
-        };
-
-        struct copy_other_key
-        {
-            template <typename Q>
-            void operator()( other_key& dest, Q const& src ) const
-            {
-                dest.nKey = src.nKey;
-            }
-        };
-
-    protected:
-        template <class Set, typename PrintStat>
-        void test_skiplist()
-        {
-            {
-                Set s;
-                base_class::test_int_with( s );
-            }
-
-            test_skiplist_<Set, PrintStat >();
-        }
-
-        template <class Set, typename PrintStat>
-        void test_skiplist_()
-        {
-            Set s;
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-
-            typedef typename Set::value_type        value_type;
-            typedef typename Set::iterator          set_iterator;
-            typedef typename Set::const_iterator    const_set_iterator;
-            typedef typename base_class::less<value_type>   less;
-
-            value_type  v[c_nArrSize];
-            int nCount = 0;
-            int nPrevKey = 0;
-
-            // Test iterator - ascending order
-            for ( int i = 0; i < (int) (sizeof(v)/sizeof(v[0])); ++i ) {
-                v[i].nKey = i;
-                v[i].nVal = i * 2;
-
-                CPPUNIT_ASSERT( s.insert( v[i] ));
-            }
-            CPPUNIT_ASSERT( check_size( s, sizeof(v)/sizeof(v[0]) ));
-            //CPPUNIT_MSG( PrintStat()(s, "Iterator test, ascending insert order") );
-
-            nCount = 0;
-            nPrevKey = 0;
-            for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
-                CPPUNIT_ASSERT( s.contains( it->nKey ));
-                it->nVal = (*it).nKey;
-                ++nCount;
-                if ( it != s.begin() ) {
-                    CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                }
-                nPrevKey = it->nKey;
-            }
-            CPPUNIT_ASSERT( check_size( s, sizeof(v)/sizeof(v[0]) ));
-            CPPUNIT_ASSERT( nCount == sizeof(v)/sizeof(v[0]));
-
-            nCount = 0;
-            for ( const_set_iterator it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( (*it).nKey == it->nVal );
-                ++nCount;
-                if ( it != s.cbegin() ) {
-                    CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                }
-                nPrevKey = it->nKey;
-            }
-            CPPUNIT_ASSERT( check_size( s, sizeof(v)/sizeof(v[0]) ));
-            CPPUNIT_ASSERT( nCount == sizeof(v)/sizeof(v[0]));
-
-            for ( size_t i = 0; i < sizeof(v)/sizeof(v[0]); ++i ) {
-                CPPUNIT_ASSERT( v[i].nKey == v[i].nVal );
-                CPPUNIT_ASSERT( s.contains( v[i].nKey, less() ));
-            }
-
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-            Set::gc::force_dispose();
-
-            for ( size_t i = 0; i < (int) sizeof(v)/sizeof(v[0]); ++i ) {
-                CPPUNIT_ASSERT( v[i].nDisposeCount == 1 );
-            }
-
-            // Test iterator - descending order
-            for ( int i = (int) sizeof(v)/sizeof(v[0]) - 1; i >= 0; --i ) {
-                v[i].nKey = i;
-                v[i].nVal = i * 2;
-
-                CPPUNIT_ASSERT( s.insert( v[i] ));
-            }
-            CPPUNIT_ASSERT( check_size( s, sizeof(v)/sizeof(v[0]) ));
-
-            //CPPUNIT_MSG( PrintStat()(s, "Iterator test, descending insert order") );
-
-            nCount = 0;
-            for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
-                it->nVal = (*it).nKey;
-                ++nCount;
-                if ( it != s.begin() ) {
-                    CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                }
-                nPrevKey = it->nKey;
-            }
-            CPPUNIT_ASSERT( check_size( s, sizeof(v)/sizeof(v[0]) ));
-            CPPUNIT_ASSERT( nCount == sizeof(v)/sizeof(v[0]));
-
-            nCount = 0;
-            for ( const_set_iterator it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( (*it).nKey == it->nVal );
-                ++nCount;
-                if ( it != s.cbegin() ) {
-                    CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                }
-                nPrevKey = it->nKey;
-            }
-            CPPUNIT_ASSERT( check_size( s, sizeof(v)/sizeof(v[0]) ));
-            CPPUNIT_ASSERT( nCount == sizeof(v)/sizeof(v[0]));
-
-            for ( size_t i = 0; i < sizeof(v)/sizeof(v[0]); ++i ) {
-                CPPUNIT_ASSERT( v[i].nKey == v[i].nVal );
-            }
-
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-            Set::gc::force_dispose();
-
-            for ( size_t i = 0; i < sizeof(v)/sizeof(v[0]); ++i ) {
-                CPPUNIT_ASSERT( v[i].nDisposeCount == 2 );
-            }
-
-            // Test iterator - random order
-            fill_skiplist( s, v );
-            //CPPUNIT_MSG( PrintStat()(s, "Iterator test, random insert order") );
-
-            nCount = 0;
-            for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
-                it->nVal = (*it).nKey;
-                ++nCount;
-                if ( it != s.begin() ) {
-                    CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                }
-                nPrevKey = it->nKey;
-            }
-            CPPUNIT_ASSERT( check_size( s, sizeof(v)/sizeof(v[0]) ));
-            CPPUNIT_ASSERT( nCount == sizeof(v)/sizeof(v[0]));
-
-            nCount = 0;
-            for ( const_set_iterator it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( (*it).nKey == it->nVal );
-                ++nCount;
-                if ( it != s.cbegin() ) {
-                    CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                }
-                nPrevKey = it->nKey;
-            }
-            CPPUNIT_ASSERT( check_size( s, sizeof(v)/sizeof(v[0]) ));
-            CPPUNIT_ASSERT( nCount == sizeof(v)/sizeof(v[0]));
-
-            for ( size_t i = 0; i < sizeof(v)/sizeof(v[0]); ++i ) {
-                CPPUNIT_ASSERT( v[i].nKey == v[i].nVal );
-            }
-
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-            Set::gc::force_dispose();
-
-            for ( size_t i = 0; i < sizeof(v)/sizeof(v[0]); ++i ) {
-                CPPUNIT_ASSERT( v[i].nDisposeCount == 3 );
-            }
-
-            CPPUNIT_MSG( "extract test" );
-            // extract/get test
-            {
-                typename Set::guarded_ptr gp;
-
-                // extract
-                fill_skiplist( s, v );
-                for ( int i = c_nArrSize - 1; i >= 0; i -= 1 ) {
-                    gp = s.get( i );
-                    CPPUNIT_CHECK( gp );
-                    CPPUNIT_CHECK( gp->nKey == i );
-                    CPPUNIT_CHECK( gp->nVal == i * 2 );
-                    gp->nVal *= 2;
-                    gp.release();
-
-                    gp = s.extract( i );
-                    CPPUNIT_CHECK( gp );
-                    CPPUNIT_CHECK_EX( gp->nKey == i, "i=" << i << ", gp->nKey=" << gp->nKey);
-                    CPPUNIT_CHECK_EX( (*gp).nVal == i * 4, "i=" << i << ", gp->nVal=" << gp->nVal );
-                    gp.release();
-
-                    gp = s.extract( i );
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_CHECK( !s.get( i ));
-                }
-                CPPUNIT_CHECK( s.empty() );
-                Set::gc::force_dispose();
-
-                // extract_with
-                fill_skiplist( s, v );
-                for ( int i = c_nArrSize - 1; i >= 0; i -= 1 ) {
-                    gp = s.get_with( other_key( i ), other_key_less<typename Set::value_type>() );
-                    CPPUNIT_CHECK( gp );
-                    CPPUNIT_CHECK( gp->nKey == i );
-                    CPPUNIT_CHECK( (*gp).nVal == i * 2 );
-                    gp->nVal *= 2;
-                    gp.release();
-
-                    gp = s.extract_with( other_key( i ), other_key_less<typename Set::value_type>() );
-                    CPPUNIT_CHECK( gp );
-                    CPPUNIT_CHECK_EX( gp->nKey == i, "i=" << i << ", gp->nKey=" << gp->nKey);
-                    CPPUNIT_CHECK_EX( (*gp).nVal == i * 4, "i=" << i << ", gp->nVal=" << gp->nVal );
-                    gp.release();
-
-                    gp = s.extract_with( other_key( i ), other_key_less<typename Set::value_type>() );
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_CHECK( !s.get_with( other_key(i), other_key_less<typename Set::value_type>() ));
-                }
-                CPPUNIT_CHECK( s.empty() );
-                Set::gc::force_dispose();
-
-                // extract_min
-                {
-                    fill_skiplist( s, v );
-                    int nPrevKey;
-                    gp = s.extract_min();
-                    CPPUNIT_ASSERT( gp );
-                    nPrevKey = gp->nKey;
-                    while ( !s.empty() ) {
-                        gp = s.extract_min();
-                        CPPUNIT_CHECK( gp );
-                        CPPUNIT_ASSERT( !gp.empty());
-                        CPPUNIT_CHECK( gp->nKey == nPrevKey + 1 );
-                        CPPUNIT_CHECK( (*gp).nVal == (nPrevKey + 1) * 2 );
-                        nPrevKey = gp->nKey;
-                        gp.release();
-                    }
-                    gp.release();
-                    CPPUNIT_CHECK( !s.extract_min());
-                    CPPUNIT_CHECK( gp.empty());
-                }
-                Set::gc::force_dispose();
-
-                // extract_max
-                {
-                    fill_skiplist( s, v );
-                    int nPrevKey;
-                    gp = s.extract_max();
-                    CPPUNIT_ASSERT( gp );
-                    nPrevKey = gp->nKey;
-                    while ( !s.empty() ) {
-                        gp = s.extract_max();
-                        CPPUNIT_CHECK( gp );
-                        CPPUNIT_ASSERT( !gp.empty() );
-                        CPPUNIT_CHECK( gp->nKey == nPrevKey - 1 );
-                        CPPUNIT_CHECK( (*gp).nVal == (nPrevKey - 1) * 2 );
-                        nPrevKey = gp->nKey;
-                        gp.release();
-                    }
-                    gp.release();
-                    CPPUNIT_CHECK( !s.extract_min());
-                    CPPUNIT_CHECK( gp.empty());
-
-                    CPPUNIT_CHECK( !s.extract_max());
-                }
-                Set::gc::force_dispose();
-            }
-
-            CPPUNIT_MSG( PrintStat()(s, nullptr) );
-        }
-
-        template <typename Set>
-        void fill_skiplist( Set& s, typename Set::value_type * pArr )
-        {
-            int nRand[c_nArrSize];
-            for ( int i = 0; i < (int) c_nArrSize; ++i ) {
-                nRand[i] = i;
-            }
-            shuffle( nRand, nRand + c_nArrSize );
-
-            for ( int i = 0; i < (int) c_nArrSize; ++i ) {
-                pArr[i].nKey = nRand[i];
-                pArr[i].nVal = nRand[i] * 2;
-                CPPUNIT_ASSERT( s.insert( pArr[i] ));
-            }
-            CPPUNIT_CHECK( check_size( s, c_nArrSize ));
-        }
-
-        template <class Set, typename PrintStat>
-        void test_skiplist_nogc()
-        {
-            typedef typename Set::value_type    value_type;
-            typedef typename Set::iterator set_iterator;
-            typedef typename Set::iterator const_set_iterator;
-            typedef typename base_class::less<value_type>   less;
-
-            value_type v1( 10, 50 );
-            value_type v2( 5, 25  );
-            value_type v3( 20, 100 );
-            int key;
-
-            Set s;
-
-            // insert test
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-
-            // insert/find test
-            CPPUNIT_ASSERT( s.contains( v1.key() ) == nullptr );
-            CPPUNIT_ASSERT( s.insert( v1 ));
-            CPPUNIT_ASSERT( s.contains( v1.key() ) == &v1 );
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-            CPPUNIT_ASSERT( !s.empty() );
-
-            CPPUNIT_ASSERT( s.contains( v2.key(), less() ) == nullptr );
-            CPPUNIT_ASSERT( s.insert( v2 ));
-            CPPUNIT_ASSERT( v2.nFindCount == 0 );
-            CPPUNIT_ASSERT( s.find_with( key = v2.key(), less(), find_functor() ));
-            CPPUNIT_ASSERT( v2.nFindCount == 1 );
-            v2.nFindCount = 0;
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-            CPPUNIT_ASSERT( !s.empty() );
-
-            {
-                find_functor    ff;
-                CPPUNIT_ASSERT( s.contains( v3 ) == nullptr );
-                CPPUNIT_ASSERT( s.insert( v3 ));
-                CPPUNIT_ASSERT( v3.nFindCount == 0 );
-                CPPUNIT_ASSERT( s.find( v3, std::ref(ff) ));
-                CPPUNIT_ASSERT( v3.nFindCount == 1 );
-                v3.nFindCount = 0;
-                CPPUNIT_ASSERT( check_size( s, 3 ));
-                CPPUNIT_ASSERT( !s.empty() );
-            }
-
-            CPPUNIT_ASSERT( !s.empty() );
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-            //CPPUNIT_MSG( PrintStat()(s, "Insert test") );
-
-            update_functor f;
-            std::pair<bool, bool> ret = s.update( v1, f, true );
-            CPPUNIT_ASSERT( ret.first );
-            CPPUNIT_ASSERT( ret.second );
-            CPPUNIT_ASSERT( v1.nUpdateNewCount == 1 );
-            CPPUNIT_ASSERT( v1.nUpdateCount == 0 );
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-
-            ret = s.update( v2, f, false );
-            CPPUNIT_ASSERT( !ret.first );
-            CPPUNIT_ASSERT( !ret.second );
-            CPPUNIT_ASSERT( v2.nUpdateNewCount == 0 );
-            CPPUNIT_ASSERT( v2.nUpdateCount == 0 );
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-
-            ret = s.update( v2, f );
-            CPPUNIT_ASSERT( ret.first );
-            CPPUNIT_ASSERT( ret.second );
-            CPPUNIT_ASSERT( v2.nUpdateNewCount == 1 );
-            CPPUNIT_ASSERT( v2.nUpdateCount == 0 );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-
-            ret = s.update( v3, f, true );
-            CPPUNIT_ASSERT( ret.first );
-            CPPUNIT_ASSERT( ret.second );
-            CPPUNIT_ASSERT( v3.nUpdateNewCount == 1 );
-            CPPUNIT_ASSERT( v3.nUpdateCount == 0 );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-
-            CPPUNIT_ASSERT( s.contains( v1 ) == &v1 );
-            CPPUNIT_ASSERT( s.contains( v2, base_class::less<value_type>() ) == &v2 );
-            CPPUNIT_ASSERT( s.contains( v3 ) == &v3 );
-
-            ret = s.update( v1, f, true );
-            CPPUNIT_ASSERT( ret.first );
-            CPPUNIT_ASSERT( !ret.second );
-            CPPUNIT_ASSERT( v1.nUpdateNewCount == 1 );
-            CPPUNIT_ASSERT( v1.nUpdateCount == 1 );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-
-            ret = s.update( v2, f, false );
-            CPPUNIT_ASSERT( ret.first );
-            CPPUNIT_ASSERT( !ret.second );
-            CPPUNIT_ASSERT( v2.nUpdateNewCount == 1 );
-            CPPUNIT_ASSERT( v2.nUpdateCount == 1 );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-
-            ret = s.update( v3, f );
-            CPPUNIT_ASSERT( ret.first );
-            CPPUNIT_ASSERT( !ret.second );
-            CPPUNIT_ASSERT( v3.nUpdateNewCount == 1 );
-            CPPUNIT_ASSERT( v3.nUpdateCount == 1 );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-
-            CPPUNIT_ASSERT( s.contains( v1 ) == &v1 );
-            CPPUNIT_ASSERT( s.contains( v2 ) == &v2 );
-            CPPUNIT_ASSERT( s.contains( v3 ) == &v3 );
-
-            CPPUNIT_ASSERT( !s.empty() );
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-
-            // get_min test
-            CPPUNIT_CHECK( s.get_min() == nullptr );
-            CPPUNIT_CHECK( s.get_max() == nullptr );
-
-            {
-                value_type  v[1000];
-                for ( int i = 999; i >= 0; --i ) {
-                    v[i].nKey = i;
-                    v[i].nVal = i * 2;
-
-                    CPPUNIT_ASSERT( s.insert( v[i] ));
-                    value_type * pVal = s.get_min();
-                    CPPUNIT_ASSERT( pVal != nullptr );
-                    CPPUNIT_CHECK( pVal->nKey == i );
-                    CPPUNIT_CHECK( pVal->nVal == i * 2 );
-                }
-
-                CPPUNIT_ASSERT( !s.empty() );
-                s.clear();
-                CPPUNIT_ASSERT( s.empty() );
-                CPPUNIT_ASSERT( check_size( s, 0 ));
-            }
-
-            // Iterator test
-            {
-                value_type  v[500];
-
-                for ( int i = 0; unsigned(i) < sizeof(v)/sizeof(v[0]); ++i ) {
-                    v[i].nKey = i;
-                    v[i].nVal = i * 2;
-
-                    CPPUNIT_ASSERT( s.insert( v[i] ));
-
-                    value_type * pVal = s.get_max();
-                    CPPUNIT_ASSERT( pVal != nullptr );
-                    CPPUNIT_CHECK( pVal->nKey == i );
-                    CPPUNIT_CHECK( pVal->nVal == i * 2 );
-                }
-
-                int nCount = 0;
-                for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
-                    it->nVal = (*it).nKey;
-                    ++nCount;
-                }
-                CPPUNIT_ASSERT( nCount == sizeof(v)/sizeof(v[0]));
-
-                nCount = 0;
-                for ( const_set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( (*it).nKey == it->nVal );
-                    ++nCount;
-                }
-                CPPUNIT_ASSERT( nCount == sizeof(v)/sizeof(v[0]));
-
-                for ( size_t i = 0; i < sizeof(v)/sizeof(v[0]); ++i ) {
-                    CPPUNIT_ASSERT( v[i].nKey == v[i].nVal );
-                }
-
-                //CPPUNIT_MSG( PrintStat()(s, "Iterator test") );
-                s.clear();
-            }
-
-            // Test empty set
-            CPPUNIT_ASSERT( s.begin() == s.end() );
-            CPPUNIT_ASSERT( s.cbegin() == s.cend() );
-
-            CPPUNIT_MSG( PrintStat()(s, nullptr) );
-        }
-
-    public:
-        // Skip-list - gc::HP
-        void skiplist_hp_base_cmp();
-        void skiplist_hp_base_less();
-        void skiplist_hp_base_cmpmix();
-        void skiplist_hp_base_cmp_stat();
-        void skiplist_hp_base_less_stat();
-        void skiplist_hp_base_cmpmix_stat();
-        void skiplist_hp_base_cmp_xorshift();
-        void skiplist_hp_base_less_xorshift();
-        void skiplist_hp_base_cmpmix_xorshift();
-        void skiplist_hp_base_cmp_xorshift_stat();
-        void skiplist_hp_base_less_xorshift_stat();
-        void skiplist_hp_base_cmpmix_xorshift_stat();
-        void skiplist_hp_base_cmp_pascal();
-        void skiplist_hp_base_less_pascal();
-        void skiplist_hp_base_cmpmix_pascal();
-        void skiplist_hp_base_cmp_pascal_stat();
-        void skiplist_hp_base_less_pascal_stat();
-        void skiplist_hp_base_cmpmix_pascal_stat();
-
-        void skiplist_hp_member_cmp();
-        void skiplist_hp_member_less();
-        void skiplist_hp_member_cmpmix();
-        void skiplist_hp_member_cmp_stat();
-        void skiplist_hp_member_less_stat();
-        void skiplist_hp_member_cmpmix_stat();
-        void skiplist_hp_member_cmp_xorshift();
-        void skiplist_hp_member_less_xorshift();
-        void skiplist_hp_member_cmpmix_xorshift();
-        void skiplist_hp_member_cmp_xorshift_stat();
-        void skiplist_hp_member_less_xorshift_stat();
-        void skiplist_hp_member_cmpmix_xorshift_stat();
-        void skiplist_hp_member_cmp_pascal();
-        void skiplist_hp_member_less_pascal();
-        void skiplist_hp_member_cmpmix_pascal();
-        void skiplist_hp_member_cmp_pascal_stat();
-        void skiplist_hp_member_less_pascal_stat();
-        void skiplist_hp_member_cmpmix_pascal_stat();
-
-        // Skip-list - gc::DHP
-        void skiplist_dhp_base_cmp();
-        void skiplist_dhp_base_less();
-        void skiplist_dhp_base_cmpmix();
-        void skiplist_dhp_base_cmp_stat();
-        void skiplist_dhp_base_less_stat();
-        void skiplist_dhp_base_cmpmix_stat();
-        void skiplist_dhp_base_cmp_xorshift();
-        void skiplist_dhp_base_less_xorshift();
-        void skiplist_dhp_base_cmpmix_xorshift();
-        void skiplist_dhp_base_cmp_xorshift_stat();
-        void skiplist_dhp_base_less_xorshift_stat();
-        void skiplist_dhp_base_cmpmix_xorshift_stat();
-        void skiplist_dhp_base_cmp_pascal();
-        void skiplist_dhp_base_less_pascal();
-        void skiplist_dhp_base_cmpmix_pascal();
-        void skiplist_dhp_base_cmp_pascal_stat();
-        void skiplist_dhp_base_less_pascal_stat();
-        void skiplist_dhp_base_cmpmix_pascal_stat();
-
-        void skiplist_dhp_member_cmp();
-        void skiplist_dhp_member_less();
-        void skiplist_dhp_member_cmpmix();
-        void skiplist_dhp_member_cmp_stat();
-        void skiplist_dhp_member_less_stat();
-        void skiplist_dhp_member_cmpmix_stat();
-        void skiplist_dhp_member_cmp_xorshift();
-        void skiplist_dhp_member_less_xorshift();
-        void skiplist_dhp_member_cmpmix_xorshift();
-        void skiplist_dhp_member_cmp_xorshift_stat();
-        void skiplist_dhp_member_less_xorshift_stat();
-        void skiplist_dhp_member_cmpmix_xorshift_stat();
-        void skiplist_dhp_member_cmp_pascal();
-        void skiplist_dhp_member_less_pascal();
-        void skiplist_dhp_member_cmpmix_pascal();
-        void skiplist_dhp_member_cmp_pascal_stat();
-        void skiplist_dhp_member_less_pascal_stat();
-        void skiplist_dhp_member_cmpmix_pascal_stat();
-
-        // Skip-list - gc::nogc
-        void skiplist_nogc_base_cmp();
-        void skiplist_nogc_base_less();
-        void skiplist_nogc_base_cmpmix();
-        void skiplist_nogc_base_cmp_stat();
-        void skiplist_nogc_base_less_stat();
-        void skiplist_nogc_base_cmpmix_stat();
-        void skiplist_nogc_base_cmp_xorshift();
-        void skiplist_nogc_base_less_xorshift();
-        void skiplist_nogc_base_cmpmix_xorshift();
-        void skiplist_nogc_base_cmp_xorshift_stat();
-        void skiplist_nogc_base_less_xorshift_stat();
-        void skiplist_nogc_base_cmpmix_xorshift_stat();
-        void skiplist_nogc_base_cmp_pascal();
-        void skiplist_nogc_base_less_pascal();
-        void skiplist_nogc_base_cmpmix_pascal();
-        void skiplist_nogc_base_cmp_pascal_stat();
-        void skiplist_nogc_base_less_pascal_stat();
-        void skiplist_nogc_base_cmpmix_pascal_stat();
-
-        void skiplist_nogc_member_cmp();
-        void skiplist_nogc_member_less();
-        void skiplist_nogc_member_cmpmix();
-        void skiplist_nogc_member_cmp_stat();
-        void skiplist_nogc_member_less_stat();
-        void skiplist_nogc_member_cmpmix_stat();
-        void skiplist_nogc_member_cmp_xorshift();
-        void skiplist_nogc_member_less_xorshift();
-        void skiplist_nogc_member_cmpmix_xorshift();
-        void skiplist_nogc_member_cmp_xorshift_stat();
-        void skiplist_nogc_member_less_xorshift_stat();
-        void skiplist_nogc_member_cmpmix_xorshift_stat();
-        void skiplist_nogc_member_cmp_pascal();
-        void skiplist_nogc_member_less_pascal();
-        void skiplist_nogc_member_cmpmix_pascal();
-        void skiplist_nogc_member_cmp_pascal_stat();
-        void skiplist_nogc_member_less_pascal_stat();
-        void skiplist_nogc_member_cmpmix_pascal_stat();
-
-        CPPUNIT_TEST_SUITE(IntrusiveSkipListSet)
-            CPPUNIT_TEST(skiplist_hp_base_cmp)
-            CPPUNIT_TEST(skiplist_hp_base_less)
-            CPPUNIT_TEST(skiplist_hp_base_cmpmix)
-            CPPUNIT_TEST(skiplist_hp_base_cmp_stat)
-            CPPUNIT_TEST(skiplist_hp_base_less_stat)
-            CPPUNIT_TEST(skiplist_hp_base_cmpmix_stat)
-            CPPUNIT_TEST(skiplist_hp_base_cmp_xorshift)
-            CPPUNIT_TEST(skiplist_hp_base_less_xorshift)
-            CPPUNIT_TEST(skiplist_hp_base_cmpmix_xorshift)
-            CPPUNIT_TEST(skiplist_hp_base_cmp_xorshift_stat)
-            CPPUNIT_TEST(skiplist_hp_base_less_xorshift_stat)
-            CPPUNIT_TEST(skiplist_hp_base_cmpmix_xorshift_stat)
-            CPPUNIT_TEST(skiplist_hp_base_cmp_pascal)
-            CPPUNIT_TEST(skiplist_hp_base_less_pascal)
-            CPPUNIT_TEST(skiplist_hp_base_cmpmix_pascal)
-            CPPUNIT_TEST(skiplist_hp_base_cmp_pascal_stat)
-            CPPUNIT_TEST(skiplist_hp_base_less_pascal_stat)
-            CPPUNIT_TEST(skiplist_hp_base_cmpmix_pascal_stat)
-
-            CPPUNIT_TEST(skiplist_hp_member_cmp)
-            CPPUNIT_TEST(skiplist_hp_member_less)
-            CPPUNIT_TEST(skiplist_hp_member_cmpmix)
-            CPPUNIT_TEST(skiplist_hp_member_cmp_stat)
-            CPPUNIT_TEST(skiplist_hp_member_less_stat)
-            CPPUNIT_TEST(skiplist_hp_member_cmpmix_stat)
-            CPPUNIT_TEST(skiplist_hp_member_cmp_xorshift)
-            CPPUNIT_TEST(skiplist_hp_member_less_xorshift)
-            CPPUNIT_TEST(skiplist_hp_member_cmpmix_xorshift)
-            CPPUNIT_TEST(skiplist_hp_member_cmp_xorshift_stat)
-            CPPUNIT_TEST(skiplist_hp_member_less_xorshift_stat)
-            CPPUNIT_TEST(skiplist_hp_member_cmpmix_xorshift_stat)
-            CPPUNIT_TEST(skiplist_hp_member_cmp_pascal)
-            CPPUNIT_TEST(skiplist_hp_member_less_pascal)
-            CPPUNIT_TEST(skiplist_hp_member_cmpmix_pascal)
-            CPPUNIT_TEST(skiplist_hp_member_cmp_pascal_stat)
-            CPPUNIT_TEST(skiplist_hp_member_less_pascal_stat)
-            CPPUNIT_TEST(skiplist_hp_member_cmpmix_pascal_stat)
-
-            CPPUNIT_TEST(skiplist_dhp_base_cmp)
-            CPPUNIT_TEST(skiplist_dhp_base_less)
-            CPPUNIT_TEST(skiplist_dhp_base_cmpmix)
-            CPPUNIT_TEST(skiplist_dhp_base_cmp_stat)
-            CPPUNIT_TEST(skiplist_dhp_base_less_stat)
-            CPPUNIT_TEST(skiplist_dhp_base_cmpmix_stat)
-            CPPUNIT_TEST(skiplist_dhp_base_cmp_xorshift)
-            CPPUNIT_TEST(skiplist_dhp_base_less_xorshift)
-            CPPUNIT_TEST(skiplist_dhp_base_cmpmix_xorshift)
-            CPPUNIT_TEST(skiplist_dhp_base_cmp_xorshift_stat)
-            CPPUNIT_TEST(skiplist_dhp_base_less_xorshift_stat)
-            CPPUNIT_TEST(skiplist_dhp_base_cmpmix_xorshift_stat)
-            CPPUNIT_TEST(skiplist_dhp_base_cmp_pascal)
-            CPPUNIT_TEST(skiplist_dhp_base_less_pascal)
-            CPPUNIT_TEST(skiplist_dhp_base_cmpmix_pascal)
-            CPPUNIT_TEST(skiplist_dhp_base_cmp_pascal_stat)
-            CPPUNIT_TEST(skiplist_dhp_base_less_pascal_stat)
-            CPPUNIT_TEST(skiplist_dhp_base_cmpmix_pascal_stat)
-
-            CPPUNIT_TEST(skiplist_dhp_member_cmp)
-            CPPUNIT_TEST(skiplist_dhp_member_less)
-            CPPUNIT_TEST(skiplist_dhp_member_cmpmix)
-            CPPUNIT_TEST(skiplist_dhp_member_cmp_stat)
-            CPPUNIT_TEST(skiplist_dhp_member_less_stat)
-            CPPUNIT_TEST(skiplist_dhp_member_cmpmix_stat)
-            CPPUNIT_TEST(skiplist_dhp_member_cmp_xorshift)
-            CPPUNIT_TEST(skiplist_dhp_member_less_xorshift)
-            CPPUNIT_TEST(skiplist_dhp_member_cmpmix_xorshift)
-            CPPUNIT_TEST(skiplist_dhp_member_cmp_xorshift_stat)
-            CPPUNIT_TEST(skiplist_dhp_member_less_xorshift_stat)
-            CPPUNIT_TEST(skiplist_dhp_member_cmpmix_xorshift_stat)
-            CPPUNIT_TEST(skiplist_dhp_member_cmp_pascal)
-            CPPUNIT_TEST(skiplist_dhp_member_less_pascal)
-            CPPUNIT_TEST(skiplist_dhp_member_cmpmix_pascal)
-            CPPUNIT_TEST(skiplist_dhp_member_cmp_pascal_stat)
-            CPPUNIT_TEST(skiplist_dhp_member_less_pascal_stat)
-            CPPUNIT_TEST(skiplist_dhp_member_cmpmix_pascal_stat)
-
-            CPPUNIT_TEST(skiplist_nogc_base_cmp)
-            CPPUNIT_TEST(skiplist_nogc_base_less)
-            CPPUNIT_TEST(skiplist_nogc_base_cmpmix)
-            CPPUNIT_TEST(skiplist_nogc_base_cmp_stat)
-            CPPUNIT_TEST(skiplist_nogc_base_less_stat)
-            CPPUNIT_TEST(skiplist_nogc_base_cmpmix_stat)
-            CPPUNIT_TEST(skiplist_nogc_base_cmp_xorshift)
-            CPPUNIT_TEST(skiplist_nogc_base_less_xorshift)
-            CPPUNIT_TEST(skiplist_nogc_base_cmpmix_xorshift)
-            CPPUNIT_TEST(skiplist_nogc_base_cmp_xorshift_stat)
-            CPPUNIT_TEST(skiplist_nogc_base_less_xorshift_stat)
-            CPPUNIT_TEST(skiplist_nogc_base_cmpmix_xorshift_stat)
-            CPPUNIT_TEST(skiplist_nogc_base_cmp_pascal)
-            CPPUNIT_TEST(skiplist_nogc_base_less_pascal)
-            CPPUNIT_TEST(skiplist_nogc_base_cmpmix_pascal)
-            CPPUNIT_TEST(skiplist_nogc_base_cmp_pascal_stat)
-            CPPUNIT_TEST(skiplist_nogc_base_less_pascal_stat)
-            CPPUNIT_TEST(skiplist_nogc_base_cmpmix_pascal_stat)
-
-            CPPUNIT_TEST(skiplist_nogc_member_cmp)
-            CPPUNIT_TEST(skiplist_nogc_member_less)
-            CPPUNIT_TEST(skiplist_nogc_member_cmpmix)
-            CPPUNIT_TEST(skiplist_nogc_member_cmp_stat)
-            CPPUNIT_TEST(skiplist_nogc_member_less_stat)
-            CPPUNIT_TEST(skiplist_nogc_member_cmpmix_stat)
-            CPPUNIT_TEST(skiplist_nogc_member_cmp_xorshift)
-            CPPUNIT_TEST(skiplist_nogc_member_less_xorshift)
-            CPPUNIT_TEST(skiplist_nogc_member_cmpmix_xorshift)
-            CPPUNIT_TEST(skiplist_nogc_member_cmp_xorshift_stat)
-            CPPUNIT_TEST(skiplist_nogc_member_less_xorshift_stat)
-            CPPUNIT_TEST(skiplist_nogc_member_cmpmix_xorshift_stat)
-            CPPUNIT_TEST(skiplist_nogc_member_cmp_pascal)
-            CPPUNIT_TEST(skiplist_nogc_member_less_pascal)
-            CPPUNIT_TEST(skiplist_nogc_member_cmpmix_pascal)
-            CPPUNIT_TEST(skiplist_nogc_member_cmp_pascal_stat)
-            CPPUNIT_TEST(skiplist_nogc_member_less_pascal_stat)
-            CPPUNIT_TEST(skiplist_nogc_member_cmpmix_pascal_stat)
-
-        CPPUNIT_TEST_SUITE_END()
-    };
-} // namespace set
-
-#endif // #ifndef CDSTEST_HDR_INTRUSIVE_SKIPLIST_SET_H
diff --git a/tests/test-hdr/set/hdr_intrusive_skiplist_set_rcu.h b/tests/test-hdr/set/hdr_intrusive_skiplist_set_rcu.h
deleted file mode 100644 (file)
index a9c5f75..0000000
+++ /dev/null
@@ -1,824 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_INTRUSIVE_SKIPLIST_SET_RCU_H
-#define CDSTEST_HDR_INTRUSIVE_SKIPLIST_SET_RCU_H
-
-#include "set/hdr_intrusive_set.h"
-
-namespace set {
-
-    class IntrusiveSkipListSetRCU: public IntrusiveHashSetHdrTest
-    {
-        typedef IntrusiveHashSetHdrTest base_class;
-
-        static size_t const c_nArrSize = 1000;
-
-        template <typename Set>
-        struct extract_disposer {
-            void operator()( typename Set::value_type * pVal ) const
-            {
-                pVal->nVal = 0;
-            }
-        };
-
-    protected:
-        struct other_key {
-            int nKey;
-
-            other_key()
-            {}
-
-            other_key( int key )
-                : nKey(key)
-            {}
-
-            template <typename Q>
-            other_key& operator=( Q const& src )
-            {
-                nKey = src.nKey;
-                return *this;
-            }
-        };
-
-        template <typename StoredType>
-        struct other_key_less
-        {
-            bool operator ()( StoredType const& n, other_key k ) const
-            {
-                return n.nKey < k.nKey;
-            }
-            bool operator ()( other_key k, StoredType const& n ) const
-            {
-                return k.nKey < n.nKey;
-            }
-        };
-
-        struct copy_other_key
-        {
-            template <typename Q>
-            void operator()( other_key& dest, Q const& src ) const
-            {
-                dest.nKey = src.nKey;
-            }
-        };
-
-    protected:
-
-        template <class Set, typename PrintStat>
-        void test_skiplist()
-        {
-            {
-                Set s;
-                base_class::test_int_with( s );
-            }
-
-            test_skiplist_<Set, PrintStat >();
-        }
-
-        template <class Set, typename PrintStat>
-        void test_skiplist_()
-        {
-            Set s;
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-
-            typedef typename Set::gc::scoped_lock   rcu_lock;
-            typedef typename Set::value_type        value_type;
-            typedef typename Set::iterator          set_iterator;
-            typedef typename Set::const_iterator    const_set_iterator;
-
-            value_type  v[c_nArrSize];
-            int nCount = 0;
-            int nPrevKey = 0;
-
-            // Test iterator - ascending order
-            for ( int i = 0; i < (int) (sizeof(v)/sizeof(v[0])); ++i ) {
-                v[i].nKey = i;
-                v[i].nVal = i * 2;
-
-                CPPUNIT_ASSERT( s.insert( v[i] ));
-            }
-            CPPUNIT_ASSERT( check_size( s, sizeof(v)/sizeof(v[0]) ));
-
-            //CPPUNIT_MSG( PrintStat()(s, "Iterator test, ascending insert order") );
-
-            nCount = 0;
-            nPrevKey = 0;
-            {
-                rcu_lock l;
-                for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
-                    CPPUNIT_ASSERT( s.contains( it->nKey ));
-                    it->nVal = (*it).nKey;
-                    ++nCount;
-                    if ( it != s.begin() ) {
-                        CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                    }
-                    nPrevKey = it->nKey;
-                }
-            }
-            CPPUNIT_ASSERT( check_size( s, sizeof(v)/sizeof(v[0]) ));
-            CPPUNIT_ASSERT( nCount == sizeof(v)/sizeof(v[0]));
-
-            nCount = 0;
-            {
-                rcu_lock l;
-                for ( const_set_iterator it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( (*it).nKey == it->nVal );
-                    ++nCount;
-                    if ( it != s.cbegin() ) {
-                        CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                    }
-                    nPrevKey = it->nKey;
-                }
-            }
-            CPPUNIT_CHECK( check_size( s, sizeof(v)/sizeof(v[0]) ));
-            CPPUNIT_CHECK( nCount == sizeof(v)/sizeof(v[0]));
-
-            for ( size_t i = 0; i < sizeof(v)/sizeof(v[0]); ++i ) {
-                CPPUNIT_ASSERT( v[i].nKey == v[i].nVal );
-                CPPUNIT_ASSERT( s.contains( v[i].nKey ));
-            }
-
-            s.clear();
-            CPPUNIT_CHECK( s.empty() );
-            CPPUNIT_CHECK( check_size( s, 0));
-            Set::gc::force_dispose();
-
-            for ( size_t i = 0; i < (int) sizeof(v)/sizeof(v[0]); ++i ) {
-                CPPUNIT_CHECK( v[i].nDisposeCount == 1 );
-            }
-
-            // Test iterator - descending order
-            for ( int i = (int) sizeof(v)/sizeof(v[0]) - 1; i >= 0; --i ) {
-                v[i].nKey = i;
-                v[i].nVal = i * 2;
-
-                CPPUNIT_ASSERT( s.insert( v[i] ));
-            }
-            CPPUNIT_CHECK( check_size( s, sizeof(v)/sizeof(v[0]) ));
-
-            //CPPUNIT_MSG( PrintStat()(s, "Iterator test, descending insert order") );
-
-            nCount = 0;
-            {
-                rcu_lock l;
-                for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
-                    it->nVal = (*it).nKey;
-                    ++nCount;
-                    if ( it != s.begin() ) {
-                        CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                    }
-                    nPrevKey = it->nKey;
-                }
-            }
-            CPPUNIT_ASSERT( check_size( s, sizeof(v)/sizeof(v[0]) ));
-            CPPUNIT_ASSERT( nCount == sizeof(v)/sizeof(v[0]));
-
-            nCount = 0;
-            {
-                rcu_lock l;
-                for ( const_set_iterator it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( (*it).nKey == it->nVal );
-                    ++nCount;
-                    if ( it != s.cbegin() ) {
-                        CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                    }
-                    nPrevKey = it->nKey;
-                }
-            }
-            CPPUNIT_ASSERT( check_size( s, sizeof(v)/sizeof(v[0]) ));
-            CPPUNIT_ASSERT( nCount == sizeof(v)/sizeof(v[0]));
-
-            for ( size_t i = 0; i < sizeof(v)/sizeof(v[0]); ++i ) {
-                CPPUNIT_ASSERT( v[i].nKey == v[i].nVal );
-            }
-
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-            Set::gc::force_dispose();
-
-            for ( size_t i = 0; i < sizeof(v)/sizeof(v[0]); ++i ) {
-                CPPUNIT_ASSERT( v[i].nDisposeCount == 2 );
-            }
-
-            // Test iterator - random order
-            fill_skiplist( s, v );
-            CPPUNIT_ASSERT( check_size( s, sizeof(v)/sizeof(v[0]) ));
-            //CPPUNIT_MSG( PrintStat()(s, "Iterator test, random insert order") );
-
-            nCount = 0;
-            {
-                rcu_lock l;
-                for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
-                    it->nVal = (*it).nKey;
-                    ++nCount;
-                    if ( it != s.begin() ) {
-                        CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                    }
-                    nPrevKey = it->nKey;
-                }
-            }
-            CPPUNIT_ASSERT( check_size( s, sizeof(v)/sizeof(v[0]) ));
-            CPPUNIT_ASSERT( nCount == sizeof(v)/sizeof(v[0]));
-
-            nCount = 0;
-            {
-                rcu_lock l;
-                for ( const_set_iterator it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( (*it).nKey == it->nVal );
-                    ++nCount;
-                    if ( it != s.cbegin() ) {
-                        CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                    }
-                    nPrevKey = it->nKey;
-                }
-            }
-            CPPUNIT_ASSERT( check_size( s, sizeof(v)/sizeof(v[0]) ));
-            CPPUNIT_ASSERT( nCount == sizeof(v)/sizeof(v[0]));
-
-            for ( size_t i = 0; i < sizeof(v)/sizeof(v[0]); ++i ) {
-                CPPUNIT_ASSERT( v[i].nKey == v[i].nVal );
-            }
-
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-            Set::gc::force_dispose();
-
-            for ( size_t i = 0; i < sizeof(v)/sizeof(v[0]); ++i ) {
-                CPPUNIT_ASSERT( v[i].nDisposeCount == 3 );
-            }
-
-            // extract/get test
-            {
-                typename Set::exempt_ptr ep;
-                typename Set::raw_ptr rp;
-                // extract
-                {
-                    fill_skiplist( s, v );
-
-                    for ( int i = c_nArrSize - 1; i >= 0; i -= 1 ) {
-                        {
-                            rcu_lock l;
-                            rp = s.get( i );
-                            CPPUNIT_ASSERT( rp );
-                            CPPUNIT_CHECK( rp->nKey == i );
-                            CPPUNIT_CHECK( rp->nVal == i * 2 );
-                            rp->nVal *= 2;
-                        }
-                        rp.release();
-
-                        ep = s.extract( i );
-                        CPPUNIT_ASSERT( ep );
-                        CPPUNIT_ASSERT( !ep.empty() );
-                        CPPUNIT_CHECK( ep->nKey == i );
-                        CPPUNIT_CHECK( ep->nVal == i * 4 );
-                        ep.release();
-
-                        {
-                            rcu_lock l;
-                            CPPUNIT_CHECK( !s.get( i ));
-                        }
-                        ep = s.extract( i );
-                        CPPUNIT_CHECK( !ep );
-                        CPPUNIT_ASSERT( ep.empty() );
-                    }
-                    CPPUNIT_CHECK( s.empty() );
-                }
-                Set::gc::force_dispose();
-
-                // extract_with
-                {
-                    fill_skiplist( s, v );
-                    for ( int i = c_nArrSize - 1; i >= 0; i -= 1 ) {
-                        {
-                            rcu_lock l;
-                            rp = s.get_with( other_key(i), other_key_less<typename Set::value_type>() );
-                            CPPUNIT_ASSERT( rp );
-                            CPPUNIT_CHECK( rp->nKey == i );
-                            CPPUNIT_CHECK( rp->nVal == i * 2 );
-                            rp->nVal *= 2;
-                        }
-                        rp.release();
-
-                        ep = s.extract_with( other_key( i ), other_key_less<typename Set::value_type>() );
-                        CPPUNIT_ASSERT( ep );
-                        CPPUNIT_ASSERT( !ep.empty() );
-                        CPPUNIT_CHECK( ep->nKey == i );
-                        CPPUNIT_CHECK( ep->nVal == i * 4 );
-                        ep.release();
-
-                        {
-                            rcu_lock l;
-                            CPPUNIT_CHECK( !s.get_with( other_key( i ), other_key_less<typename Set::value_type>() ));
-                        }
-                        ep = s.extract_with( other_key( i ), other_key_less<typename Set::value_type>() );
-                        CPPUNIT_CHECK( !ep );
-                    }
-                    CPPUNIT_CHECK( s.empty() );
-                }
-                Set::gc::force_dispose();
-
-                // extract_min
-                {
-                    fill_skiplist( s, v );
-                    int nPrevKey;
-
-                    ep = s.extract_min();
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty());
-                    nPrevKey = ep->nKey;
-                    ep.release();
-
-                    while ( !s.empty() ) {
-                        ep = s.extract_min();
-                        CPPUNIT_ASSERT( ep );
-                        CPPUNIT_ASSERT( !ep.empty());
-                        CPPUNIT_CHECK( ep->nKey == nPrevKey + 1 );
-                        CPPUNIT_CHECK( ep->nVal == (nPrevKey + 1) * 2 );
-                        nPrevKey = ep->nKey;
-                        ep.release();
-                    }
-                    ep = s.extract_min();
-                    CPPUNIT_CHECK( !ep );
-                    CPPUNIT_CHECK( !s.extract_max() );
-                }
-                Set::gc::force_dispose();
-
-                // extract_max
-                {
-                    fill_skiplist( s, v );
-                    int nPrevKey;
-
-                    ep = s.extract_max();
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty());
-                    nPrevKey = ep->nKey;
-                    ep.release();
-
-                    while ( !s.empty() ) {
-                        ep = s.extract_max();
-                        CPPUNIT_ASSERT( ep );
-                        CPPUNIT_ASSERT( !ep.empty());
-                        CPPUNIT_CHECK( ep->nKey == nPrevKey - 1 );
-                        CPPUNIT_CHECK( ep->nVal == (nPrevKey - 1) * 2 );
-                        nPrevKey = ep->nKey;
-                        ep.release();
-                    }
-                    ep = s.extract_min();
-                    CPPUNIT_CHECK( !ep );
-                    CPPUNIT_CHECK( !s.extract_max() );
-                }
-                Set::gc::force_dispose();
-            }
-
-            CPPUNIT_MSG( PrintStat()(s, nullptr) );
-        }
-
-        template <typename Set>
-        void fill_skiplist( Set& s, typename Set::value_type * pArr )
-        {
-            int nRand[c_nArrSize];
-            for ( int i = 0; i < (int) c_nArrSize; ++i ) {
-                nRand[i] = i;
-            }
-            shuffle( nRand, nRand + c_nArrSize );
-
-            for ( int i = 0; i < (int) c_nArrSize; ++i ) {
-                pArr[i].nKey = nRand[i];
-                pArr[i].nVal = nRand[i] * 2;
-                CPPUNIT_ASSERT( s.insert( pArr[i] ));
-            }
-            CPPUNIT_CHECK( check_size( s, c_nArrSize ));
-        }
-
-    public:
-
-        // Skip-list RCU
-        void skiplist_rcu_gpi_base_cmp();
-        void skiplist_rcu_gpi_base_less();
-        void skiplist_rcu_gpi_base_cmpmix();
-        void skiplist_rcu_gpi_base_cmp_stat();
-        void skiplist_rcu_gpi_base_less_stat();
-        void skiplist_rcu_gpi_base_cmpmix_stat();
-        void skiplist_rcu_gpi_base_cmp_xorshift();
-        void skiplist_rcu_gpi_base_less_xorshift();
-        void skiplist_rcu_gpi_base_cmpmix_xorshift();
-        void skiplist_rcu_gpi_base_cmp_xorshift_stat();
-        void skiplist_rcu_gpi_base_less_xorshift_stat();
-        void skiplist_rcu_gpi_base_cmpmix_xorshift_stat();
-        void skiplist_rcu_gpi_base_cmp_pascal();
-        void skiplist_rcu_gpi_base_less_pascal();
-        void skiplist_rcu_gpi_base_cmpmix_pascal();
-        void skiplist_rcu_gpi_base_cmp_pascal_stat();
-        void skiplist_rcu_gpi_base_less_pascal_stat();
-        void skiplist_rcu_gpi_base_cmpmix_pascal_stat();
-
-        void skiplist_rcu_gpi_member_cmp();
-        void skiplist_rcu_gpi_member_less();
-        void skiplist_rcu_gpi_member_cmpmix();
-        void skiplist_rcu_gpi_member_cmp_stat();
-        void skiplist_rcu_gpi_member_less_stat();
-        void skiplist_rcu_gpi_member_cmpmix_stat();
-        void skiplist_rcu_gpi_member_cmp_xorshift();
-        void skiplist_rcu_gpi_member_less_xorshift();
-        void skiplist_rcu_gpi_member_cmpmix_xorshift();
-        void skiplist_rcu_gpi_member_cmp_xorshift_stat();
-        void skiplist_rcu_gpi_member_less_xorshift_stat();
-        void skiplist_rcu_gpi_member_cmpmix_xorshift_stat();
-        void skiplist_rcu_gpi_member_cmp_pascal();
-        void skiplist_rcu_gpi_member_less_pascal();
-        void skiplist_rcu_gpi_member_cmpmix_pascal();
-        void skiplist_rcu_gpi_member_cmp_pascal_stat();
-        void skiplist_rcu_gpi_member_less_pascal_stat();
-        void skiplist_rcu_gpi_member_cmpmix_pascal_stat();
-
-        // general_buffered
-        void skiplist_rcu_gpb_base_cmp();
-        void skiplist_rcu_gpb_base_less();
-        void skiplist_rcu_gpb_base_cmpmix();
-        void skiplist_rcu_gpb_base_cmp_stat();
-        void skiplist_rcu_gpb_base_less_stat();
-        void skiplist_rcu_gpb_base_cmpmix_stat();
-        void skiplist_rcu_gpb_base_cmp_xorshift();
-        void skiplist_rcu_gpb_base_less_xorshift();
-        void skiplist_rcu_gpb_base_cmpmix_xorshift();
-        void skiplist_rcu_gpb_base_cmp_xorshift_stat();
-        void skiplist_rcu_gpb_base_less_xorshift_stat();
-        void skiplist_rcu_gpb_base_cmpmix_xorshift_stat();
-        void skiplist_rcu_gpb_base_cmp_pascal();
-        void skiplist_rcu_gpb_base_less_pascal();
-        void skiplist_rcu_gpb_base_cmpmix_pascal();
-        void skiplist_rcu_gpb_base_cmp_pascal_stat();
-        void skiplist_rcu_gpb_base_less_pascal_stat();
-        void skiplist_rcu_gpb_base_cmpmix_pascal_stat();
-
-        void skiplist_rcu_gpb_member_cmp();
-        void skiplist_rcu_gpb_member_less();
-        void skiplist_rcu_gpb_member_cmpmix();
-        void skiplist_rcu_gpb_member_cmp_stat();
-        void skiplist_rcu_gpb_member_less_stat();
-        void skiplist_rcu_gpb_member_cmpmix_stat();
-        void skiplist_rcu_gpb_member_cmp_xorshift();
-        void skiplist_rcu_gpb_member_less_xorshift();
-        void skiplist_rcu_gpb_member_cmpmix_xorshift();
-        void skiplist_rcu_gpb_member_cmp_xorshift_stat();
-        void skiplist_rcu_gpb_member_less_xorshift_stat();
-        void skiplist_rcu_gpb_member_cmpmix_xorshift_stat();
-        void skiplist_rcu_gpb_member_cmp_pascal();
-        void skiplist_rcu_gpb_member_less_pascal();
-        void skiplist_rcu_gpb_member_cmpmix_pascal();
-        void skiplist_rcu_gpb_member_cmp_pascal_stat();
-        void skiplist_rcu_gpb_member_less_pascal_stat();
-        void skiplist_rcu_gpb_member_cmpmix_pascal_stat();
-
-        // general_threaded
-        void skiplist_rcu_gpt_base_cmp();
-        void skiplist_rcu_gpt_base_less();
-        void skiplist_rcu_gpt_base_cmpmix();
-        void skiplist_rcu_gpt_base_cmp_stat();
-        void skiplist_rcu_gpt_base_less_stat();
-        void skiplist_rcu_gpt_base_cmpmix_stat();
-        void skiplist_rcu_gpt_base_cmp_xorshift();
-        void skiplist_rcu_gpt_base_less_xorshift();
-        void skiplist_rcu_gpt_base_cmpmix_xorshift();
-        void skiplist_rcu_gpt_base_cmp_xorshift_stat();
-        void skiplist_rcu_gpt_base_less_xorshift_stat();
-        void skiplist_rcu_gpt_base_cmpmix_xorshift_stat();
-        void skiplist_rcu_gpt_base_cmp_pascal();
-        void skiplist_rcu_gpt_base_less_pascal();
-        void skiplist_rcu_gpt_base_cmpmix_pascal();
-        void skiplist_rcu_gpt_base_cmp_pascal_stat();
-        void skiplist_rcu_gpt_base_less_pascal_stat();
-        void skiplist_rcu_gpt_base_cmpmix_pascal_stat();
-
-        void skiplist_rcu_gpt_member_cmp();
-        void skiplist_rcu_gpt_member_less();
-        void skiplist_rcu_gpt_member_cmpmix();
-        void skiplist_rcu_gpt_member_cmp_stat();
-        void skiplist_rcu_gpt_member_less_stat();
-        void skiplist_rcu_gpt_member_cmpmix_stat();
-        void skiplist_rcu_gpt_member_cmp_xorshift();
-        void skiplist_rcu_gpt_member_less_xorshift();
-        void skiplist_rcu_gpt_member_cmpmix_xorshift();
-        void skiplist_rcu_gpt_member_cmp_xorshift_stat();
-        void skiplist_rcu_gpt_member_less_xorshift_stat();
-        void skiplist_rcu_gpt_member_cmpmix_xorshift_stat();
-        void skiplist_rcu_gpt_member_cmp_pascal();
-        void skiplist_rcu_gpt_member_less_pascal();
-        void skiplist_rcu_gpt_member_cmpmix_pascal();
-        void skiplist_rcu_gpt_member_cmp_pascal_stat();
-        void skiplist_rcu_gpt_member_less_pascal_stat();
-        void skiplist_rcu_gpt_member_cmpmix_pascal_stat();
-
-        // signal_buffered
-        void skiplist_rcu_shb_base_cmp();
-        void skiplist_rcu_shb_base_less();
-        void skiplist_rcu_shb_base_cmpmix();
-        void skiplist_rcu_shb_base_cmp_stat();
-        void skiplist_rcu_shb_base_less_stat();
-        void skiplist_rcu_shb_base_cmpmix_stat();
-        void skiplist_rcu_shb_base_cmp_xorshift();
-        void skiplist_rcu_shb_base_less_xorshift();
-        void skiplist_rcu_shb_base_cmpmix_xorshift();
-        void skiplist_rcu_shb_base_cmp_xorshift_stat();
-        void skiplist_rcu_shb_base_less_xorshift_stat();
-        void skiplist_rcu_shb_base_cmpmix_xorshift_stat();
-        void skiplist_rcu_shb_base_cmp_pascal();
-        void skiplist_rcu_shb_base_less_pascal();
-        void skiplist_rcu_shb_base_cmpmix_pascal();
-        void skiplist_rcu_shb_base_cmp_pascal_stat();
-        void skiplist_rcu_shb_base_less_pascal_stat();
-        void skiplist_rcu_shb_base_cmpmix_pascal_stat();
-
-        void skiplist_rcu_shb_member_cmp();
-        void skiplist_rcu_shb_member_less();
-        void skiplist_rcu_shb_member_cmpmix();
-        void skiplist_rcu_shb_member_cmp_stat();
-        void skiplist_rcu_shb_member_less_stat();
-        void skiplist_rcu_shb_member_cmpmix_stat();
-        void skiplist_rcu_shb_member_cmp_xorshift();
-        void skiplist_rcu_shb_member_less_xorshift();
-        void skiplist_rcu_shb_member_cmpmix_xorshift();
-        void skiplist_rcu_shb_member_cmp_xorshift_stat();
-        void skiplist_rcu_shb_member_less_xorshift_stat();
-        void skiplist_rcu_shb_member_cmpmix_xorshift_stat();
-        void skiplist_rcu_shb_member_cmp_pascal();
-        void skiplist_rcu_shb_member_less_pascal();
-        void skiplist_rcu_shb_member_cmpmix_pascal();
-        void skiplist_rcu_shb_member_cmp_pascal_stat();
-        void skiplist_rcu_shb_member_less_pascal_stat();
-        void skiplist_rcu_shb_member_cmpmix_pascal_stat();
-
-        // signal_threaded
-        void skiplist_rcu_sht_base_cmp();
-        void skiplist_rcu_sht_base_less();
-        void skiplist_rcu_sht_base_cmpmix();
-        void skiplist_rcu_sht_base_cmp_stat();
-        void skiplist_rcu_sht_base_less_stat();
-        void skiplist_rcu_sht_base_cmpmix_stat();
-        void skiplist_rcu_sht_base_cmp_xorshift();
-        void skiplist_rcu_sht_base_less_xorshift();
-        void skiplist_rcu_sht_base_cmpmix_xorshift();
-        void skiplist_rcu_sht_base_cmp_xorshift_stat();
-        void skiplist_rcu_sht_base_less_xorshift_stat();
-        void skiplist_rcu_sht_base_cmpmix_xorshift_stat();
-        void skiplist_rcu_sht_base_cmp_pascal();
-        void skiplist_rcu_sht_base_less_pascal();
-        void skiplist_rcu_sht_base_cmpmix_pascal();
-        void skiplist_rcu_sht_base_cmp_pascal_stat();
-        void skiplist_rcu_sht_base_less_pascal_stat();
-        void skiplist_rcu_sht_base_cmpmix_pascal_stat();
-
-        void skiplist_rcu_sht_member_cmp();
-        void skiplist_rcu_sht_member_less();
-        void skiplist_rcu_sht_member_cmpmix();
-        void skiplist_rcu_sht_member_cmp_stat();
-        void skiplist_rcu_sht_member_less_stat();
-        void skiplist_rcu_sht_member_cmpmix_stat();
-        void skiplist_rcu_sht_member_cmp_xorshift();
-        void skiplist_rcu_sht_member_less_xorshift();
-        void skiplist_rcu_sht_member_cmpmix_xorshift();
-        void skiplist_rcu_sht_member_cmp_xorshift_stat();
-        void skiplist_rcu_sht_member_less_xorshift_stat();
-        void skiplist_rcu_sht_member_cmpmix_xorshift_stat();
-        void skiplist_rcu_sht_member_cmp_pascal();
-        void skiplist_rcu_sht_member_less_pascal();
-        void skiplist_rcu_sht_member_cmpmix_pascal();
-        void skiplist_rcu_sht_member_cmp_pascal_stat();
-        void skiplist_rcu_sht_member_less_pascal_stat();
-        void skiplist_rcu_sht_member_cmpmix_pascal_stat();
-
-        CPPUNIT_TEST_SUITE(IntrusiveSkipListSetRCU)
-            CPPUNIT_TEST(skiplist_rcu_gpi_base_cmp)
-            CPPUNIT_TEST(skiplist_rcu_gpi_base_less)
-            CPPUNIT_TEST(skiplist_rcu_gpi_base_cmpmix)
-            CPPUNIT_TEST(skiplist_rcu_gpi_base_cmp_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpi_base_less_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpi_base_cmpmix_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpi_base_cmp_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_gpi_base_less_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_gpi_base_cmpmix_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_gpi_base_cmp_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpi_base_less_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpi_base_cmpmix_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpi_base_cmp_pascal)
-            CPPUNIT_TEST(skiplist_rcu_gpi_base_less_pascal)
-            CPPUNIT_TEST(skiplist_rcu_gpi_base_cmpmix_pascal)
-            CPPUNIT_TEST(skiplist_rcu_gpi_base_cmp_pascal_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpi_base_less_pascal_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpi_base_cmpmix_pascal_stat)
-
-            CPPUNIT_TEST(skiplist_rcu_gpi_member_cmp)
-            CPPUNIT_TEST(skiplist_rcu_gpi_member_less)
-            CPPUNIT_TEST(skiplist_rcu_gpi_member_cmpmix)
-            CPPUNIT_TEST(skiplist_rcu_gpi_member_cmp_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpi_member_less_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpi_member_cmpmix_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpi_member_cmp_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_gpi_member_less_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_gpi_member_cmpmix_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_gpi_member_cmp_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpi_member_less_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpi_member_cmpmix_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpi_member_cmp_pascal)
-            CPPUNIT_TEST(skiplist_rcu_gpi_member_less_pascal)
-            CPPUNIT_TEST(skiplist_rcu_gpi_member_cmpmix_pascal)
-            CPPUNIT_TEST(skiplist_rcu_gpi_member_cmp_pascal_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpi_member_less_pascal_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpi_member_cmpmix_pascal_stat)
-
-            //
-            CPPUNIT_TEST(skiplist_rcu_gpb_base_cmp)
-            CPPUNIT_TEST(skiplist_rcu_gpb_base_less)
-            CPPUNIT_TEST(skiplist_rcu_gpb_base_cmpmix)
-            CPPUNIT_TEST(skiplist_rcu_gpb_base_cmp_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpb_base_less_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpb_base_cmpmix_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpb_base_cmp_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_gpb_base_less_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_gpb_base_cmpmix_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_gpb_base_cmp_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpb_base_less_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpb_base_cmpmix_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpb_base_cmp_pascal)
-            CPPUNIT_TEST(skiplist_rcu_gpb_base_less_pascal)
-            CPPUNIT_TEST(skiplist_rcu_gpb_base_cmpmix_pascal)
-            CPPUNIT_TEST(skiplist_rcu_gpb_base_cmp_pascal_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpb_base_less_pascal_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpb_base_cmpmix_pascal_stat)
-
-            CPPUNIT_TEST(skiplist_rcu_gpb_member_cmp)
-            CPPUNIT_TEST(skiplist_rcu_gpb_member_less)
-            CPPUNIT_TEST(skiplist_rcu_gpb_member_cmpmix)
-            CPPUNIT_TEST(skiplist_rcu_gpb_member_cmp_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpb_member_less_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpb_member_cmpmix_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpb_member_cmp_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_gpb_member_less_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_gpb_member_cmpmix_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_gpb_member_cmp_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpb_member_less_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpb_member_cmpmix_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpb_member_cmp_pascal)
-            CPPUNIT_TEST(skiplist_rcu_gpb_member_less_pascal)
-            CPPUNIT_TEST(skiplist_rcu_gpb_member_cmpmix_pascal)
-            CPPUNIT_TEST(skiplist_rcu_gpb_member_cmp_pascal_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpb_member_less_pascal_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpb_member_cmpmix_pascal_stat)
-
-            //
-            CPPUNIT_TEST(skiplist_rcu_gpt_base_cmp)
-            CPPUNIT_TEST(skiplist_rcu_gpt_base_less)
-            CPPUNIT_TEST(skiplist_rcu_gpt_base_cmpmix)
-            CPPUNIT_TEST(skiplist_rcu_gpt_base_cmp_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpt_base_less_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpt_base_cmpmix_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpt_base_cmp_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_gpt_base_less_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_gpt_base_cmpmix_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_gpt_base_cmp_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpt_base_less_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpt_base_cmpmix_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpt_base_cmp_pascal)
-            CPPUNIT_TEST(skiplist_rcu_gpt_base_less_pascal)
-            CPPUNIT_TEST(skiplist_rcu_gpt_base_cmpmix_pascal)
-            CPPUNIT_TEST(skiplist_rcu_gpt_base_cmp_pascal_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpt_base_less_pascal_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpt_base_cmpmix_pascal_stat)
-
-            CPPUNIT_TEST(skiplist_rcu_gpt_member_cmp)
-            CPPUNIT_TEST(skiplist_rcu_gpt_member_less)
-            CPPUNIT_TEST(skiplist_rcu_gpt_member_cmpmix)
-            CPPUNIT_TEST(skiplist_rcu_gpt_member_cmp_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpt_member_less_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpt_member_cmpmix_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpt_member_cmp_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_gpt_member_less_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_gpt_member_cmpmix_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_gpt_member_cmp_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpt_member_less_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpt_member_cmpmix_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpt_member_cmp_pascal)
-            CPPUNIT_TEST(skiplist_rcu_gpt_member_less_pascal)
-            CPPUNIT_TEST(skiplist_rcu_gpt_member_cmpmix_pascal)
-            CPPUNIT_TEST(skiplist_rcu_gpt_member_cmp_pascal_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpt_member_less_pascal_stat)
-            CPPUNIT_TEST(skiplist_rcu_gpt_member_cmpmix_pascal_stat)
-
-            //
-            CPPUNIT_TEST(skiplist_rcu_shb_base_cmp)
-            CPPUNIT_TEST(skiplist_rcu_shb_base_less)
-            CPPUNIT_TEST(skiplist_rcu_shb_base_cmpmix)
-            CPPUNIT_TEST(skiplist_rcu_shb_base_cmp_stat)
-            CPPUNIT_TEST(skiplist_rcu_shb_base_less_stat)
-            CPPUNIT_TEST(skiplist_rcu_shb_base_cmpmix_stat)
-            CPPUNIT_TEST(skiplist_rcu_shb_base_cmp_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_shb_base_less_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_shb_base_cmpmix_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_shb_base_cmp_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_shb_base_less_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_shb_base_cmpmix_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_shb_base_cmp_pascal)
-            CPPUNIT_TEST(skiplist_rcu_shb_base_less_pascal)
-            CPPUNIT_TEST(skiplist_rcu_shb_base_cmpmix_pascal)
-            CPPUNIT_TEST(skiplist_rcu_shb_base_cmp_pascal_stat)
-            CPPUNIT_TEST(skiplist_rcu_shb_base_less_pascal_stat)
-            CPPUNIT_TEST(skiplist_rcu_shb_base_cmpmix_pascal_stat)
-
-            CPPUNIT_TEST(skiplist_rcu_shb_member_cmp)
-            CPPUNIT_TEST(skiplist_rcu_shb_member_less)
-            CPPUNIT_TEST(skiplist_rcu_shb_member_cmpmix)
-            CPPUNIT_TEST(skiplist_rcu_shb_member_cmp_stat)
-            CPPUNIT_TEST(skiplist_rcu_shb_member_less_stat)
-            CPPUNIT_TEST(skiplist_rcu_shb_member_cmpmix_stat)
-            CPPUNIT_TEST(skiplist_rcu_shb_member_cmp_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_shb_member_less_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_shb_member_cmpmix_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_shb_member_cmp_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_shb_member_less_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_shb_member_cmpmix_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_shb_member_cmp_pascal)
-            CPPUNIT_TEST(skiplist_rcu_shb_member_less_pascal)
-            CPPUNIT_TEST(skiplist_rcu_shb_member_cmpmix_pascal)
-            CPPUNIT_TEST(skiplist_rcu_shb_member_cmp_pascal_stat)
-            CPPUNIT_TEST(skiplist_rcu_shb_member_less_pascal_stat)
-            CPPUNIT_TEST(skiplist_rcu_shb_member_cmpmix_pascal_stat)
-
-            //
-            CPPUNIT_TEST(skiplist_rcu_sht_base_cmp)
-            CPPUNIT_TEST(skiplist_rcu_sht_base_less)
-            CPPUNIT_TEST(skiplist_rcu_sht_base_cmpmix)
-            CPPUNIT_TEST(skiplist_rcu_sht_base_cmp_stat)
-            CPPUNIT_TEST(skiplist_rcu_sht_base_less_stat)
-            CPPUNIT_TEST(skiplist_rcu_sht_base_cmpmix_stat)
-            CPPUNIT_TEST(skiplist_rcu_sht_base_cmp_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_sht_base_less_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_sht_base_cmpmix_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_sht_base_cmp_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_sht_base_less_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_sht_base_cmpmix_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_sht_base_cmp_pascal)
-            CPPUNIT_TEST(skiplist_rcu_sht_base_less_pascal)
-            CPPUNIT_TEST(skiplist_rcu_sht_base_cmpmix_pascal)
-            CPPUNIT_TEST(skiplist_rcu_sht_base_cmp_pascal_stat)
-            CPPUNIT_TEST(skiplist_rcu_sht_base_less_pascal_stat)
-            CPPUNIT_TEST(skiplist_rcu_sht_base_cmpmix_pascal_stat)
-
-            CPPUNIT_TEST(skiplist_rcu_sht_member_cmp)
-            CPPUNIT_TEST(skiplist_rcu_sht_member_less)
-            CPPUNIT_TEST(skiplist_rcu_sht_member_cmpmix)
-            CPPUNIT_TEST(skiplist_rcu_sht_member_cmp_stat)
-            CPPUNIT_TEST(skiplist_rcu_sht_member_less_stat)
-            CPPUNIT_TEST(skiplist_rcu_sht_member_cmpmix_stat)
-            CPPUNIT_TEST(skiplist_rcu_sht_member_cmp_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_sht_member_less_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_sht_member_cmpmix_xorshift)
-            CPPUNIT_TEST(skiplist_rcu_sht_member_cmp_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_sht_member_less_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_sht_member_cmpmix_xorshift_stat)
-            CPPUNIT_TEST(skiplist_rcu_sht_member_cmp_pascal)
-            CPPUNIT_TEST(skiplist_rcu_sht_member_less_pascal)
-            CPPUNIT_TEST(skiplist_rcu_sht_member_cmpmix_pascal)
-            CPPUNIT_TEST(skiplist_rcu_sht_member_cmp_pascal_stat)
-            CPPUNIT_TEST(skiplist_rcu_sht_member_less_pascal_stat)
-            CPPUNIT_TEST(skiplist_rcu_sht_member_cmpmix_pascal_stat)
-
-        CPPUNIT_TEST_SUITE_END()
-    };
-} // namespace set
-
-#endif // #ifndef CDSTEST_HDR_INTRUSIVE_SKIPLIST_SET_RCU_H
diff --git a/tests/test-hdr/set/hdr_intrusive_splitlist_set_dhp.cpp b/tests/test-hdr/set/hdr_intrusive_splitlist_set_dhp.cpp
deleted file mode 100644 (file)
index 9d54e91..0000000
+++ /dev/null
@@ -1,452 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/intrusive/michael_list_dhp.h>
-#include <cds/intrusive/split_list.h>
-
-namespace set {
-
-    void IntrusiveHashSetHdrTest::split_dyn_DHP_base_cmp()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::DHP> > > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_DHP_base_less()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::DHP> > > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_DHP_base_cmpmix()
-    {
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<cds::gc::DHP> > > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<true>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_DHP_base_cmpmix_stat()
-    {
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<cds::gc::DHP> > > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_DHP_member_cmp()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::DHP> > > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_DHP_member_less()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::DHP> > > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_DHP_member_cmpmix()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::DHP> > > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_DHP_member_cmpmix_stat()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::DHP> > > item;
-        struct list_traits : public ci::michael_list::traits
-        {
-            typedef ci::michael_list::member_hook< offsetof( item, hMember ), co::gc<cds::gc::DHP> > hook;
-            typedef cmp<item> compare;
-            typedef IntrusiveHashSetHdrTest::less<item> less;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::MichaelList< cds::gc::DHP, item, list_traits > ord_list;
-
-        struct set_traits : public ci::split_list::traits {
-            typedef hash_int hash;
-            typedef simple_item_counter item_counter;
-            typedef co::v::sequential_consistent memory_model;
-            typedef ci::split_list::stat<> stat;
-        };
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list, set_traits > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-
-    // Static bucket table
-    void IntrusiveHashSetHdrTest::split_st_DHP_base_cmp()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::DHP> > > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_DHP_base_less()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::DHP> > > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_DHP_base_cmpmix()
-    {
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<cds::gc::DHP> > > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_DHP_base_cmpmix_stat()
-    {
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<cds::gc::DHP> > > item;
-        struct list_traits :
-            public ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        {};
-        typedef ci::MichaelList< cds::gc::DHP, item, list_traits > ord_list;
-
-        struct set_traits :
-            public ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        {};
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list, set_traits > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_DHP_member_cmp()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::DHP> > > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_DHP_member_less()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::DHP> > > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                ci::split_list::dynamic_bucket_table<false>
-                ,co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_DHP_member_cmpmix()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::DHP> > > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_DHP_member_cmpmix_stat()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::DHP> > > item;
-        typedef ci::MichaelList< cds::gc::DHP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_splitlist_set_dhp_lazy.cpp b/tests/test-hdr/set/hdr_intrusive_splitlist_set_dhp_lazy.cpp
deleted file mode 100644 (file)
index 0107216..0000000
+++ /dev/null
@@ -1,449 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/intrusive/lazy_list_dhp.h>
-#include <cds/intrusive/split_list.h>
-
-namespace set {
-
-    void IntrusiveHashSetHdrTest::split_dyn_DHP_base_cmp_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::DHP> > > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_DHP_base_less_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::DHP> > > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_DHP_base_cmpmix_lazy()
-    {
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<cds::gc::DHP> > > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<true>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_DHP_base_cmpmix_stat_lazy()
-    {
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<cds::gc::DHP> > > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_DHP_member_cmp_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::DHP> > > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_DHP_member_less_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::DHP> > > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_DHP_member_cmpmix_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::DHP> > > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_DHP_member_cmpmix_stat_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::DHP> > > item;
-        struct list_traits : public ci::lazy_list::traits
-        {
-            typedef ci::lazy_list::member_hook< offsetof( item, hMember ), co::gc<cds::gc::DHP>> hook;
-            typedef cmp<item> compare;
-            typedef IntrusiveHashSetHdrTest::less<item> less;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::LazyList< cds::gc::DHP, item, list_traits > ord_list;
-
-        struct set_traits : public ci::split_list::traits {
-            typedef hash_int hash;
-            typedef simple_item_counter item_counter;
-            typedef ci::split_list::stat<> stat;
-        };
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list, set_traits > set;
-
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    // Static bucket table
-    void IntrusiveHashSetHdrTest::split_st_DHP_base_cmp_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::DHP> > > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_DHP_base_less_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::DHP> > > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_DHP_base_cmpmix_lazy()
-    {
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<cds::gc::DHP> > > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_DHP_base_cmpmix_stat_lazy()
-    {
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<cds::gc::DHP> > > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::DHP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_DHP_member_cmp_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::DHP> > > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_DHP_member_less_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::DHP> > > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                ci::split_list::dynamic_bucket_table<false>
-                ,co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_DHP_member_cmpmix_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::DHP> > > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_DHP_member_cmpmix_stat_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::DHP> > > item;
-        typedef ci::LazyList< cds::gc::DHP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::DHP>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::DHP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_splitlist_set_hp.cpp b/tests/test-hdr/set/hdr_intrusive_splitlist_set_hp.cpp
deleted file mode 100644 (file)
index 85bbf10..0000000
+++ /dev/null
@@ -1,451 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/intrusive/michael_list_hp.h>
-#include <cds/intrusive/split_list.h>
-
-namespace set {
-
-    void IntrusiveHashSetHdrTest::split_dyn_HP_base_cmp()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::HP> > > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_HP_base_less()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::HP> > > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_HP_base_cmpmix()
-    {
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<cds::gc::HP> > > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<true>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_HP_base_cmpmix_stat()
-    {
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<cds::gc::HP> > > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_HP_member_cmp()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::HP> > > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_HP_member_less()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::HP> > > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_HP_member_cmpmix()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::HP> > > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                , ci::split_list::dynamic_bucket_table<true>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_HP_member_cmpmix_stat()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::HP> > > item;
-        struct list_traits : public ci::michael_list::traits {
-            typedef ci::michael_list::member_hook< offsetof( item, hMember ), co::gc<cds::gc::HP>> hook;
-            typedef cmp<item> compare;
-            typedef IntrusiveHashSetHdrTest::less<item> less;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::MichaelList< cds::gc::HP, item, list_traits > ord_list;
-
-        struct set_traits : public ci::split_list::traits {
-            typedef hash_int hash;
-            typedef simple_item_counter item_counter;
-            typedef ci::split_list::stat<> stat;
-        };
-        typedef ci::SplitListSet< cds::gc::HP, ord_list, set_traits > set;
-
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    // Static bucket table
-    void IntrusiveHashSetHdrTest::split_st_HP_base_cmp()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::HP> > > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_HP_base_less()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::HP> > > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_HP_base_cmpmix()
-    {
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<cds::gc::HP> > > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_HP_base_cmpmix_stat()
-    {
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<cds::gc::HP> > > item;
-        struct list_traits :
-            public ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        {};
-        typedef ci::MichaelList< cds::gc::HP, item, list_traits > ord_list;
-
-        struct set_traits :
-            public ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        {};
-        typedef ci::SplitListSet< cds::gc::HP, ord_list, set_traits > set;
-
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_HP_member_cmp()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::HP> > > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_HP_member_less()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::HP> > > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                ci::split_list::dynamic_bucket_table<false>
-                ,co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_HP_member_cmpmix()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::HP> > > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_HP_member_cmpmix_stat()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::HP> > > item;
-        typedef ci::MichaelList< cds::gc::HP
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_splitlist_set_hp_lazy.cpp b/tests/test-hdr/set/hdr_intrusive_splitlist_set_hp_lazy.cpp
deleted file mode 100644 (file)
index f3e0cfc..0000000
+++ /dev/null
@@ -1,456 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/intrusive/lazy_list_hp.h>
-#include <cds/intrusive/split_list.h>
-
-namespace set {
-
-    void IntrusiveHashSetHdrTest::split_dyn_HP_base_cmp_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::opt::back_off< cds::backoff::empty >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_HP_base_less_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_HP_base_cmpmix_lazy()
-    {
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<cds::gc::HP> > > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<true>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_HP_base_cmpmix_stat_lazy()
-    {
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<cds::gc::HP> > > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_HP_member_cmp_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_HP_member_less_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_HP_member_cmpmix_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_HP_member_cmpmix_stat_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
-        struct list_traits : public ci::lazy_list::traits
-        {
-            typedef ci::lazy_list::member_hook< offsetof( item, hMember ), co::gc<cds::gc::HP>> hook;
-            typedef cmp<item> compare;
-            typedef IntrusiveHashSetHdrTest::less<item> less;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::LazyList< cds::gc::HP, item, list_traits > ord_list;
-
-        struct set_traits : public ci::split_list::traits
-        {
-            typedef hash_int hash;
-            typedef simple_item_counter item_counter;
-            typedef ci::split_list::stat<> stat;
-        };
-        typedef ci::SplitListSet< cds::gc::HP, ord_list, set_traits > set;
-
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_int<set>();
-    }
-
-
-    // Static bucket table
-    void IntrusiveHashSetHdrTest::split_st_HP_base_cmp_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_HP_base_less_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_HP_base_cmpmix_lazy()
-    {
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<cds::gc::HP> > > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_HP_base_cmpmix_stat_lazy()
-    {
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<cds::gc::HP> > > item;
-        struct list_traits :
-            public ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        {};
-        typedef ci::LazyList< cds::gc::HP, item, list_traits > ord_list;
-
-        struct set_traits :
-            public ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        {
-            typedef ci::split_list::stat<> stat;
-        };
-        typedef ci::SplitListSet< cds::gc::HP, ord_list, set_traits > set;
-
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_HP_member_cmp_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_HP_member_less_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                ci::split_list::dynamic_bucket_table<false>
-                ,co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_HP_member_cmpmix_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_HP_member_cmpmix_stat_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
-        typedef ci::LazyList< cds::gc::HP
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::HP>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< cds::gc::HP, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        > set;
-
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_int<set>();
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_splitlist_set_nogc.cpp b/tests/test-hdr/set/hdr_intrusive_splitlist_set_nogc.cpp
deleted file mode 100644 (file)
index c8eb957..0000000
+++ /dev/null
@@ -1,441 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/intrusive/michael_list_nogc.h>
-#include <cds/intrusive/split_list_nogc.h>
-
-namespace set {
-
-    void IntrusiveHashSetHdrTest::split_dyn_nogc_base_cmp()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_nogc_base_less()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_nogc_base_cmpmix()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<true>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_nogc_base_cmpmix_stat()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
-        struct list_traits : public ci::michael_list::traits
-        {
-            typedef ci::michael_list::base_hook< co::gc<cds::gc::nogc> > hook;
-            typedef cmp<item> compare;
-            typedef IntrusiveHashSetHdrTest::less<item> less;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::MichaelList< cds::gc::nogc, item, list_traits > bucket_type;
-
-        struct set_traits : public ci::split_list::make_traits< ci::split_list::dynamic_bucket_table<true> >::type
-        {
-            typedef hash_int hash;
-            typedef simple_item_counter item_counter;
-            typedef ci::split_list::stat<> stat;
-        };
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type, set_traits > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_nogc_member_cmp()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_nogc_member_less()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_nogc_member_cmpmix()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<true>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_nogc_member_cmpmix_stat()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
-        struct list_traits:
-            public ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        {};
-        typedef ci::MichaelList< cds::gc::nogc, item, list_traits >  bucket_type;
-
-        struct set_traits :
-            public ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        {};
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type, set_traits > set;
-
-        test_int_nogc<set>();
-    }
-
-    // Static bucket table
-    void IntrusiveHashSetHdrTest::split_st_nogc_base_cmp()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_nogc_base_less()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_nogc_base_cmpmix()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_nogc_base_cmpmix_stat()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_nogc_member_cmp()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_nogc_member_less()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_nogc_member_cmpmix()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_nogc_member_cmpmix_stat()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<cds::gc::nogc> > > item;
-        typedef ci::MichaelList< cds::gc::nogc
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_splitlist_set_nogc_lazy.cpp b/tests/test-hdr/set/hdr_intrusive_splitlist_set_nogc_lazy.cpp
deleted file mode 100644 (file)
index 454e673..0000000
+++ /dev/null
@@ -1,442 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/intrusive/lazy_list_nogc.h>
-#include <cds/intrusive/split_list_nogc.h>
-
-namespace set {
-
-    void IntrusiveHashSetHdrTest::split_dyn_nogc_base_cmp_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-                ,ci::opt::back_off< cds::backoff::empty >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_nogc_base_less_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_nogc_base_cmpmix_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<true>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_nogc_base_cmpmix_stat_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
-        struct list_traits : public ci::lazy_list::traits
-        {
-            typedef ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > hook;
-            typedef IntrusiveHashSetHdrTest::less<item> less;
-            typedef cmp<item> compare;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::LazyList< cds::gc::nogc, item, list_traits > bucket_type;
-
-        struct set_traits : public ci::split_list::make_traits<ci::split_list::dynamic_bucket_table<true>>::type
-        {
-            typedef hash_int hash;
-            typedef simple_item_counter item_counter;
-            typedef ci::split_list::stat<> stat;
-        };
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type, set_traits > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_nogc_member_cmp_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_nogc_member_less_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_nogc_member_cmpmix_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<true>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_nogc_member_cmpmix_stat_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
-        struct list_traits :
-            public ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        {};
-        typedef ci::LazyList< cds::gc::nogc, item, list_traits > bucket_type;
-
-        struct set_traits :
-            public ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        {};
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type, set_traits > set;
-
-        test_int_nogc<set>();
-    }
-
-    // Static bucket table
-    void IntrusiveHashSetHdrTest::split_st_nogc_base_cmp_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_nogc_base_less_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_nogc_base_cmpmix_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_nogc_base_cmpmix_stat_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_nogc_member_cmp_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_nogc_member_less_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_nogc_member_cmpmix_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_nogc_member_cmpmix_stat_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::nogc> > > item;
-        typedef ci::LazyList< cds::gc::nogc
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<cds::gc::nogc>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    bucket_type;
-
-        typedef ci::SplitListSet< cds::gc::nogc, bucket_type,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        > set;
-
-        test_int_nogc<set>();
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpb.cpp b/tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpb.cpp
deleted file mode 100644 (file)
index da19a5a..0000000
+++ /dev/null
@@ -1,457 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/intrusive/michael_list_rcu.h>
-#include <cds/intrusive/split_list_rcu.h>
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_type;
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_base_cmp()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList < rcu_type
-            , item
-            , ci::michael_list::make_traits <
-            ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-            , co::compare< cmp<item> >
-            , ci::opt::disposer < faked_disposer >
-            > ::type
-        > ord_list;
-
-        typedef ci::SplitListSet < rcu_type, ord_list,
-            ci::split_list::make_traits <
-            co::hash< hash_int >
-            , ci::split_list::dynamic_bucket_table<true>
-            , co::memory_model < co::v::relaxed_ordering >
-            > ::type
-        > set;
-        static_assert(set::traits::dynamic_bucket_table, "Set has static bucket table");
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_base_less()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList < rcu_type
-            , item
-            , ci::michael_list::make_traits <
-            ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-            , co::less< less<item> >
-            , ci::opt::disposer < faked_disposer >
-            > ::type
-        > ord_list;
-
-        typedef ci::SplitListSet < rcu_type, ord_list,
-            ci::split_list::make_traits <
-            co::hash< hash_int >
-            , co::memory_model < co::v::sequential_consistent >
-            > ::type
-        > set;
-        static_assert(set::traits::dynamic_bucket_table, "Set has static bucket table");
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_base_cmpmix()
-    {
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList < rcu_type
-            , item
-            , ci::michael_list::make_traits <
-            ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-            , co::less< less<item> >
-            , co::compare< cmp<item> >
-            , ci::opt::disposer < faked_disposer >
-            > ::type
-        > ord_list;
-
-        typedef ci::SplitListSet < rcu_type, ord_list,
-            ci::split_list::make_traits <
-            co::hash< hash_int >
-            , co::item_counter< simple_item_counter >
-            , ci::split_list::dynamic_bucket_table < true >
-            > ::type
-        > set;
-        static_assert(set::traits::dynamic_bucket_table, "Set has static bucket table");
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_base_cmpmix_stat()
-    {
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
-        struct list_traits : public ci::michael_list::traits
-        {
-            typedef ci::michael_list::base_hook< co::gc<rcu_type> > hook;
-            typedef IntrusiveHashSetHdrTest::less<item> less;
-            typedef cmp<item> compare;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::MichaelList< rcu_type, item, list_traits > ord_list;
-
-        struct set_traits : public ci::split_list::make_traits<ci::split_list::dynamic_bucket_table<true> >::type
-        {
-            typedef hash_int hash;
-            typedef simple_item_counter item_counter;
-            typedef ci::split_list::stat<> stat;
-        };
-        typedef ci::SplitListSet< rcu_type, ord_list, set_traits > set;
-
-        static_assert(set::traits::dynamic_bucket_table, "Set has static bucket table");
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_member_cmp()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList < rcu_type
-            , item
-            , ci::michael_list::make_traits <
-            ci::opt::hook< ci::michael_list::member_hook <
-            offsetof( item, hMember ),
-            co::gc<rcu_type>
-            > >
-            , co::compare< cmp<item> >
-            , ci::opt::disposer < faked_disposer >
-            > ::type
-        > ord_list;
-
-        typedef ci::SplitListSet < rcu_type, ord_list,
-            ci::split_list::make_traits <
-            co::hash < hash_int >
-            > ::type
-        > set;
-        static_assert(set::traits::dynamic_bucket_table, "Set has static bucket table");
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_member_less()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList < rcu_type
-            , item
-            , ci::michael_list::make_traits <
-            ci::opt::hook< ci::michael_list::member_hook <
-            offsetof( item, hMember ),
-            co::gc<rcu_type>
-            > >
-            , co::less< less<item> >
-            , ci::opt::disposer < faked_disposer >
-            > ::type
-        > ord_list;
-
-        typedef ci::SplitListSet < rcu_type, ord_list,
-            ci::split_list::make_traits <
-            co::hash< hash_int >
-            , co::memory_model < co::v::relaxed_ordering >
-            > ::type
-        > set;
-        static_assert(set::traits::dynamic_bucket_table, "Set has static bucket table");
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_member_cmpmix()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList < rcu_type
-            , item
-            , ci::michael_list::make_traits <
-            ci::opt::hook< ci::michael_list::member_hook <
-            offsetof( item, hMember ),
-            co::gc<rcu_type>
-            > >
-            , co::compare< cmp<item> >
-            , co::less< less<item> >
-            , ci::opt::disposer < faked_disposer >
-            > ::type
-        > ord_list;
-
-        typedef ci::SplitListSet < rcu_type, ord_list,
-            ci::split_list::make_traits <
-            co::hash< hash_int >
-            , co::item_counter< simple_item_counter >
-            , co::memory_model < co::v::sequential_consistent >
-            > ::type
-        > set;
-        static_assert(set::traits::dynamic_bucket_table, "Set has static bucket table");
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_member_cmpmix_stat()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        struct list_traits :
-            public ci::michael_list::make_traits <
-            ci::opt::hook< ci::michael_list::member_hook <
-            offsetof( item, hMember ),
-            co::gc<rcu_type>
-            > >
-            , co::compare< cmp<item> >
-            , co::less< less<item> >
-            , ci::opt::disposer < faked_disposer >
-            > ::type
-        {};
-        typedef ci::MichaelList< rcu_type, item, list_traits > ord_list;
-
-        struct set_traits :
-            public ci::split_list::make_traits <
-            co::hash< hash_int >
-            , co::item_counter< simple_item_counter >
-            , co::memory_model<co::v::sequential_consistent>
-            , co::stat < ci::split_list::stat<> >
-            > ::type
-        {};
-        typedef ci::SplitListSet< rcu_type, ord_list, set_traits > set;
-        static_assert(set::traits::dynamic_bucket_table, "Set has static bucket table");
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    // Static bucket table
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPB_base_cmp()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList < rcu_type
-            , item
-            , ci::michael_list::make_traits <
-            ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-            , co::compare< cmp<item> >
-            , ci::opt::disposer < faked_disposer >
-            > ::type
-        > ord_list;
-
-        typedef ci::SplitListSet < rcu_type, ord_list,
-            ci::split_list::make_traits <
-            co::hash< hash_int >
-            , ci::split_list::dynamic_bucket_table<false>
-            , co::memory_model < co::v::relaxed_ordering >
-            > ::type
-        > set;
-        static_assert(!set::traits::dynamic_bucket_table, "Set has dynamic bucket table");
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPB_base_less()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList < rcu_type
-            , item
-            , ci::michael_list::make_traits <
-            ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-            , co::less< less<item> >
-            , ci::opt::disposer < faked_disposer >
-            > ::type
-        > ord_list;
-
-        typedef ci::SplitListSet < rcu_type, ord_list,
-            ci::split_list::make_traits <
-            co::hash< hash_int >
-            , ci::split_list::dynamic_bucket_table<false>
-            , co::memory_model < co::v::sequential_consistent >
-            > ::type
-        > set;
-        static_assert(!set::traits::dynamic_bucket_table, "Set has dynamic bucket table");
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPB_base_cmpmix()
-    {
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList < rcu_type
-            , item
-            , ci::michael_list::make_traits <
-            ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-            , co::less< less<item> >
-            , co::compare< cmp<item> >
-            , ci::opt::disposer < faked_disposer >
-            > ::type
-        > ord_list;
-
-        typedef ci::SplitListSet < rcu_type, ord_list,
-            ci::split_list::make_traits <
-            co::hash< hash_int >
-            , co::item_counter< simple_item_counter >
-            , ci::split_list::dynamic_bucket_table < false >
-            > ::type
-        > set;
-        static_assert(!set::traits::dynamic_bucket_table, "Set has dynamic bucket table");
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPB_base_cmpmix_stat()
-    {
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList < rcu_type
-            , item
-            , ci::michael_list::make_traits <
-            ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-            , co::less< less<item> >
-            , co::compare< cmp<item> >
-            , ci::opt::disposer < faked_disposer >
-            > ::type
-        > ord_list;
-
-        typedef ci::SplitListSet < rcu_type, ord_list,
-            ci::split_list::make_traits <
-            co::hash< hash_int >
-            , co::item_counter< simple_item_counter >
-            , ci::split_list::dynamic_bucket_table<false>
-            , co::stat < ci::split_list::stat<> >
-            > ::type
-        > set;
-        static_assert(!set::traits::dynamic_bucket_table, "Set has dynamic bucket table");
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPB_member_cmp()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList < rcu_type
-            , item
-            , ci::michael_list::make_traits <
-            ci::opt::hook< ci::michael_list::member_hook <
-            offsetof( item, hMember ),
-            co::gc<rcu_type>
-            > >
-            , co::compare< cmp<item> >
-            , ci::opt::disposer < faked_disposer >
-            > ::type
-        > ord_list;
-
-        typedef ci::SplitListSet < rcu_type, ord_list,
-            ci::split_list::make_traits <
-            co::hash< hash_int >
-            , ci::split_list::dynamic_bucket_table<false>
-            , co::memory_model < co::v::relaxed_ordering >
-            > ::type
-        > set;
-        static_assert(!set::traits::dynamic_bucket_table, "Set has dynamic bucket table");
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPB_member_less()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList < rcu_type
-            , item
-            , ci::michael_list::make_traits <
-            ci::opt::hook< ci::michael_list::member_hook <
-            offsetof( item, hMember ),
-            co::gc<rcu_type>
-            > >
-            , co::less< less<item> >
-            , ci::opt::disposer < faked_disposer >
-            > ::type
-        > ord_list;
-
-        typedef ci::SplitListSet < rcu_type, ord_list,
-            ci::split_list::make_traits <
-            ci::split_list::dynamic_bucket_table<false>
-            , co::hash< hash_int >
-            , co::memory_model < co::v::sequential_consistent >
-            > ::type
-        > set;
-        static_assert(!set::traits::dynamic_bucket_table, "Set has dynamic bucket table");
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPB_member_cmpmix()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList < rcu_type
-            , item
-            , ci::michael_list::make_traits <
-            ci::opt::hook< ci::michael_list::member_hook <
-            offsetof( item, hMember ),
-            co::gc<rcu_type>
-            > >
-            , co::compare< cmp<item> >
-            , co::less< less<item> >
-            , ci::opt::disposer < faked_disposer >
-            > ::type
-        > ord_list;
-
-        typedef ci::SplitListSet < rcu_type, ord_list,
-            ci::split_list::make_traits <
-            co::hash< hash_int >
-            , co::item_counter< simple_item_counter >
-            , ci::split_list::dynamic_bucket_table < false >
-            > ::type
-        > set;
-        static_assert(!set::traits::dynamic_bucket_table, "Set has dynamic bucket table");
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPB_member_cmpmix_stat()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList < rcu_type
-            , item
-            , ci::michael_list::make_traits <
-            ci::opt::hook< ci::michael_list::member_hook <
-            offsetof( item, hMember ),
-            co::gc<rcu_type>
-            > >
-            , co::compare< cmp<item> >
-            , co::less< less<item> >
-            , ci::opt::disposer < faked_disposer >
-            > ::type
-        > ord_list;
-
-        typedef ci::SplitListSet < rcu_type, ord_list,
-            ci::split_list::make_traits <
-            co::hash< hash_int >
-            , co::item_counter< simple_item_counter >
-            , ci::split_list::dynamic_bucket_table<false>
-            , co::stat < ci::split_list::stat<> >
-            > ::type
-        > set;
-        static_assert(!set::traits::dynamic_bucket_table, "Set has dynamic bucket table");
-
-        test_rcu_int_michael_list<set>();
-    }
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpb_lazy.cpp b/tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpb_lazy.cpp
deleted file mode 100644 (file)
index c360fbc..0000000
+++ /dev/null
@@ -1,456 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/intrusive/lazy_list_rcu.h>
-#include <cds/intrusive/split_list_rcu.h>
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_type;
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_base_cmp_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_base_less_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_base_cmpmix_lazy()
-    {
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<true>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_base_cmpmix_stat_lazy()
-    {
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
-        struct list_traits : public ci::lazy_list::traits
-        {
-            typedef ci::lazy_list::base_hook< co::gc<rcu_type> > hook;
-            typedef IntrusiveHashSetHdrTest::less< item > less;
-            typedef cmp<item> compare;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::LazyList< rcu_type, item, list_traits > ord_list;
-
-        struct set_traits : public ci::split_list::make_traits<ci::split_list::dynamic_bucket_table<true>>::type
-        {
-            typedef hash_int hash;
-            typedef simple_item_counter item_counter;
-            typedef ci::split_list::stat<> stat;
-        };
-        typedef ci::SplitListSet< rcu_type, ord_list, set_traits > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_member_cmp_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_member_less_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_member_cmpmix_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_member_cmpmix_stat_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        struct list_traits :
-            public ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        {};
-        typedef ci::LazyList< rcu_type, item, list_traits > ord_list;
-
-        struct set_traits :
-            public ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        {};
-        typedef ci::SplitListSet< rcu_type, ord_list, set_traits > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    // Static bucket table
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPB_base_cmp_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPB_base_less_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPB_base_cmpmix_lazy()
-    {
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPB_base_cmpmix_stat_lazy()
-    {
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<>>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPB_member_cmp_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPB_member_less_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                ci::split_list::dynamic_bucket_table<false>
-                ,co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPB_member_cmpmix_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPB_member_cmpmix_stat_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<>>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpi.cpp b/tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpi.cpp
deleted file mode 100644 (file)
index d21ec23..0000000
+++ /dev/null
@@ -1,460 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/intrusive/michael_list_rcu.h>
-#include <cds/intrusive/split_list_rcu.h>
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPI_base_cmp()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPI_base_less()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPI_base_cmpmix()
-    {
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<true>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPI_member_cmp()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPI_member_less()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPI_member_cmpmix()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-
-    // Static bucket table
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPI_base_cmp()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPI_base_less()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPI_base_cmpmix()
-    {
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPI_member_cmp()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPI_member_less()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                ci::split_list::dynamic_bucket_table<false>
-                ,co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPI_member_cmpmix()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPI_base_cmpmix_stat()
-    {
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
-        struct list_traits : public ci::michael_list::traits
-        {
-            typedef ci::michael_list::base_hook< co::gc<rcu_type> > hook;
-            typedef IntrusiveHashSetHdrTest::less<item> less;
-            typedef cmp<item> compare;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::MichaelList< rcu_type, item, list_traits > ord_list;
-
-        struct set_traits : public ci::split_list::make_traits<ci::split_list::dynamic_bucket_table<true> >::type
-        {
-            typedef hash_int hash;
-            typedef simple_item_counter item_counter;
-            typedef ci::split_list::stat<> stat;
-        };
-        typedef ci::SplitListSet< rcu_type, ord_list, set_traits > set;
-
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPI_member_cmpmix_stat()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        struct list_traits :
-            public ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        {};
-        typedef ci::MichaelList< rcu_type, item, list_traits > ord_list;
-
-        struct set_traits :
-            public ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,co::memory_model<co::v::sequential_consistent>
-                ,co::stat< ci::split_list::stat<>>
-            >::type
-        {};
-        typedef ci::SplitListSet< rcu_type, ord_list, set_traits > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPI_base_cmpmix_stat()
-    {
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<>>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPI_member_cmpmix_stat()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpi_lazy.cpp b/tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpi_lazy.cpp
deleted file mode 100644 (file)
index 2bb9c0d..0000000
+++ /dev/null
@@ -1,459 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/intrusive/lazy_list_rcu.h>
-#include <cds/intrusive/split_list_rcu.h>
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPI_base_cmp_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPI_base_less_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPI_base_cmpmix_lazy()
-    {
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<true>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPI_member_cmp_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPI_member_less_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPI_member_cmpmix_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-
-    // Static bucket table
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPI_base_cmp_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPI_base_less_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPI_base_cmpmix_lazy()
-    {
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPI_member_cmp_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPI_member_less_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                ci::split_list::dynamic_bucket_table<false>
-                ,co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPI_member_cmpmix_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPI_base_cmpmix_stat_lazy()
-    {
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
-        struct list_traits : public ci::lazy_list::traits
-        {
-            typedef ci::lazy_list::base_hook< co::gc<rcu_type> > hook;
-            typedef IntrusiveHashSetHdrTest::less< item > less;
-            typedef cmp<item> compare;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::LazyList< rcu_type, item, list_traits > ord_list;
-
-        struct set_traits : public ci::split_list::make_traits<ci::split_list::dynamic_bucket_table<true>>::type
-        {
-            typedef hash_int hash;
-            typedef simple_item_counter item_counter;
-            typedef ci::split_list::stat<> stat;
-        };
-        typedef ci::SplitListSet< rcu_type, ord_list, set_traits > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPI_member_cmpmix_stat_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        struct list_traits :
-            public ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        {};
-        typedef ci::LazyList< rcu_type, item, list_traits > ord_list;
-
-        struct set_traits :
-            public ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        {};
-        typedef ci::SplitListSet< rcu_type, ord_list, set_traits > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPI_base_cmpmix_stat_lazy()
-    {
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<>>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPI_member_cmpmix_stat_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<>>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpt.cpp b/tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpt.cpp
deleted file mode 100644 (file)
index 8135df6..0000000
+++ /dev/null
@@ -1,460 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/intrusive/michael_list_rcu.h>
-#include <cds/intrusive/split_list_rcu.h>
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_type;
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPT_base_cmp()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPT_base_less()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPT_base_cmpmix()
-    {
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<true>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPT_member_cmp()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPT_member_less()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPT_member_cmpmix()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-
-    // Static bucket table
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPT_base_cmp()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPT_base_less()
-    {
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPT_base_cmpmix()
-    {
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPT_member_cmp()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPT_member_less()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                ci::split_list::dynamic_bucket_table<false>
-                ,co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPT_member_cmpmix()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPT_base_cmpmix_stat()
-    {
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
-        struct list_traits : public ci::michael_list::traits
-        {
-            typedef ci::michael_list::base_hook< co::gc<rcu_type> > hook;
-            typedef IntrusiveHashSetHdrTest::less<item> less;
-            typedef cmp<item> compare;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::MichaelList< rcu_type, item, list_traits > ord_list;
-
-        struct set_traits : public ci::split_list::make_traits<ci::split_list::dynamic_bucket_table<true> >::type
-        {
-            typedef hash_int hash;
-            typedef simple_item_counter item_counter;
-            typedef ci::split_list::stat<> stat;
-        };
-        typedef ci::SplitListSet< rcu_type, ord_list, set_traits > set;
-
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPT_member_cmpmix_stat()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        struct list_traits :
-            public ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        {};
-        typedef ci::MichaelList< rcu_type, item, list_traits > ord_list;
-
-        struct set_traits :
-            public ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,co::memory_model<co::v::sequential_consistent>
-                ,co::stat< ci::split_list::stat<>>
-            >::type
-        {};
-        typedef ci::SplitListSet< rcu_type, ord_list, set_traits > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPT_base_cmpmix_stat()
-    {
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<>>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPT_member_cmpmix_stat()
-    {
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpt_lazy.cpp b/tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_gpt_lazy.cpp
deleted file mode 100644 (file)
index be363a5..0000000
+++ /dev/null
@@ -1,458 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/intrusive/lazy_list_rcu.h>
-#include <cds/intrusive/split_list_rcu.h>
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_type;
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPT_base_cmp_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPT_base_less_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPT_base_cmpmix_lazy()
-    {
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<true>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPT_member_cmp_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPT_member_less_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPT_member_cmpmix_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-
-    // Static bucket table
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPT_base_cmp_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPT_base_less_lazy()
-    {
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPT_base_cmpmix_lazy()
-    {
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPT_member_cmp_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPT_member_less_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                ci::split_list::dynamic_bucket_table<false>
-                ,co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPT_member_cmpmix_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPT_base_cmpmix_stat_lazy()
-    {
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
-        struct list_traits : public ci::lazy_list::traits
-        {
-            typedef ci::lazy_list::base_hook< co::gc<rcu_type> > hook;
-            typedef IntrusiveHashSetHdrTest::less< item > less;
-            typedef cmp<item> compare;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::LazyList< rcu_type, item, list_traits > ord_list;
-
-        struct set_traits : public ci::split_list::make_traits<ci::split_list::dynamic_bucket_table<true>>::type
-        {
-            typedef hash_int hash;
-            typedef simple_item_counter item_counter;
-            typedef ci::split_list::stat<> stat;
-        };
-        typedef ci::SplitListSet< rcu_type, ord_list, set_traits > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_GPT_member_cmpmix_stat_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        struct list_traits :
-            public ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        {};
-        typedef ci::LazyList< rcu_type, item, list_traits > ord_list;
-
-        struct set_traits :
-            public ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        {};
-        typedef ci::SplitListSet< rcu_type, ord_list, set_traits > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPT_base_cmpmix_stat_lazy()
-    {
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<>>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_GPT_member_cmpmix_stat_lazy()
-    {
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<>>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_shb.cpp b/tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_shb.cpp
deleted file mode 100644 (file)
index c4c53ec..0000000
+++ /dev/null
@@ -1,493 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/intrusive/michael_list_rcu.h>
-#include <cds/intrusive/split_list_rcu.h>
-
-namespace set {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_type;
-    }
-#endif
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHB_base_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHB_base_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHB_base_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<true>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHB_member_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHB_member_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHB_member_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-
-    // Static bucket table
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHB_base_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHB_base_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHB_base_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHB_member_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHB_member_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                ci::split_list::dynamic_bucket_table<false>
-                ,co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHB_member_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHB_base_cmpmix_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
-        struct list_traits : public ci::michael_list::traits
-        {
-            typedef ci::michael_list::base_hook< co::gc<rcu_type> > hook;
-            typedef IntrusiveHashSetHdrTest::less<item> less;
-            typedef cmp<item> compare;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::MichaelList< rcu_type, item, list_traits > ord_list;
-
-        struct set_traits : public ci::split_list::make_traits<ci::split_list::dynamic_bucket_table<true> >::type
-        {
-            typedef hash_int hash;
-            typedef simple_item_counter item_counter;
-            typedef ci::split_list::stat<> stat;
-        };
-        typedef ci::SplitListSet< rcu_type, ord_list, set_traits > set;
-
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHB_member_cmpmix_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        struct list_traits :
-            public ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        {};
-        typedef ci::MichaelList< rcu_type, item, list_traits > ord_list;
-
-        struct set_traits :
-            public ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,co::memory_model<co::v::sequential_consistent>
-                ,co::stat< ci::split_list::stat<>>
-            >::type
-        {};
-        typedef ci::SplitListSet< rcu_type, ord_list, set_traits > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHB_base_cmpmix_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<>>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHB_member_cmpmix_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_shb_lazy.cpp b/tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_shb_lazy.cpp
deleted file mode 100644 (file)
index 410acea..0000000
+++ /dev/null
@@ -1,492 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/intrusive/lazy_list_rcu.h>
-#include <cds/intrusive/split_list_rcu.h>
-
-namespace set {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_type;
-    }
-#endif
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHB_base_cmp_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHB_base_less_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHB_base_cmpmix_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<true>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHB_member_cmp_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHB_member_less_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHB_member_cmpmix_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-
-    // Static bucket table
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHB_base_cmp_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHB_base_less_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHB_base_cmpmix_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHB_member_cmp_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHB_member_less_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                ci::split_list::dynamic_bucket_table<false>
-                ,co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHB_member_cmpmix_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHB_base_cmpmix_stat_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
-        struct list_traits : public ci::lazy_list::traits
-        {
-            typedef ci::lazy_list::base_hook< co::gc<rcu_type> > hook;
-            typedef IntrusiveHashSetHdrTest::less< item > less;
-            typedef cmp<item> compare;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::LazyList< rcu_type, item, list_traits > ord_list;
-
-        struct set_traits : public ci::split_list::make_traits<ci::split_list::dynamic_bucket_table<true>>::type
-        {
-            typedef hash_int hash;
-            typedef simple_item_counter item_counter;
-            typedef ci::split_list::stat<> stat;
-        };
-        typedef ci::SplitListSet< rcu_type, ord_list, set_traits > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHB_member_cmpmix_stat_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        struct list_traits :
-            public ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        {};
-        typedef ci::LazyList< rcu_type, item, list_traits > ord_list;
-
-        struct set_traits :
-            public ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        {};
-        typedef ci::SplitListSet< rcu_type, ord_list, set_traits > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHB_base_cmpmix_stat_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<>>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHB_member_cmpmix_stat_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<>>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_sht.cpp b/tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_sht.cpp
deleted file mode 100644 (file)
index 1e6a212..0000000
+++ /dev/null
@@ -1,494 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/intrusive/michael_list_rcu.h>
-#include <cds/intrusive/split_list_rcu.h>
-
-namespace set {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_type;
-    }
-#endif
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHT_base_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHT_base_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHT_base_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<true>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHT_member_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHT_member_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHT_member_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-
-    // Static bucket table
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHT_base_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHT_base_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHT_base_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHT_member_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHT_member_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                ci::split_list::dynamic_bucket_table<false>
-                ,co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHT_member_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHT_base_cmpmix_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
-        struct list_traits : public ci::michael_list::traits
-        {
-            typedef ci::michael_list::base_hook< co::gc<rcu_type> > hook;
-            typedef IntrusiveHashSetHdrTest::less<item> less;
-            typedef cmp<item> compare;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::MichaelList< rcu_type, item, list_traits > ord_list;
-
-        struct set_traits : public ci::split_list::make_traits<ci::split_list::dynamic_bucket_table<true> >::type
-        {
-            typedef hash_int hash;
-            typedef simple_item_counter item_counter;
-            typedef ci::split_list::stat<> stat;
-        };
-        typedef ci::SplitListSet< rcu_type, ord_list, set_traits > set;
-
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHT_member_cmpmix_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        struct list_traits :
-            public ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        {};
-        typedef ci::MichaelList< rcu_type, item, list_traits > ord_list;
-
-        struct set_traits :
-            public ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,co::memory_model<co::v::sequential_consistent>
-                ,co::stat< ci::split_list::stat<>>
-            >::type
-        {};
-        typedef ci::SplitListSet< rcu_type, ord_list, set_traits > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHT_base_cmpmix_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<>>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHT_member_cmpmix_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
-        typedef ci::MichaelList< rcu_type
-            ,item
-            ,ci::michael_list::make_traits<
-                ci::opt::hook< ci::michael_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int_michael_list<set>();
-#endif
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_sht_lazy.cpp b/tests/test-hdr/set/hdr_intrusive_splitlist_set_rcu_sht_lazy.cpp
deleted file mode 100644 (file)
index d413a4b..0000000
+++ /dev/null
@@ -1,491 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_set.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/intrusive/lazy_list_rcu.h>
-#include <cds/intrusive/split_list_rcu.h>
-
-namespace set {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_type;
-    }
-#endif
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHT_base_cmp_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<true>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHT_base_less_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHT_base_cmpmix_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<true>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHT_member_cmp_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHT_member_less_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHT_member_cmpmix_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-
-    // Static bucket table
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHT_base_cmp_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHT_base_less_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHT_base_cmpmix_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHT_member_cmp_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::memory_model<co::v::relaxed_ordering>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHT_member_less_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                ci::split_list::dynamic_bucket_table<false>
-                ,co::hash< hash_int >
-                ,co::memory_model<co::v::sequential_consistent>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHT_member_cmpmix_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHT_base_cmpmix_stat_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
-        struct list_traits : public ci::lazy_list::traits
-        {
-            typedef ci::lazy_list::base_hook< co::gc<rcu_type> > hook;
-            typedef IntrusiveHashSetHdrTest::less< item > less;
-            typedef cmp<item> compare;
-            typedef faked_disposer disposer;
-        };
-        typedef ci::LazyList< rcu_type, item, list_traits > ord_list;
-
-        struct set_traits : public ci::split_list::make_traits<ci::split_list::dynamic_bucket_table<true>>::type
-        {
-            typedef hash_int hash;
-            typedef simple_item_counter item_counter;
-            typedef ci::split_list::stat<> stat;
-        };
-        typedef ci::SplitListSet< rcu_type, ord_list, set_traits > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_dyn_RCU_SHT_member_cmpmix_stat_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        struct list_traits :
-            public ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        {};
-        typedef ci::LazyList< rcu_type, item, list_traits > ord_list;
-
-        struct set_traits :
-            public ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< ci::split_list::stat<> >
-            >::type
-        {};
-        typedef ci::SplitListSet< rcu_type, ord_list, set_traits > set;
-        static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHT_base_cmpmix_stat_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
-                ,co::less< less<item> >
-                ,co::compare< cmp<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<>>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-    void IntrusiveHashSetHdrTest::split_st_RCU_SHT_member_cmpmix_stat_lazy()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
-        typedef ci::LazyList< rcu_type
-            ,item
-            ,ci::lazy_list::make_traits<
-                ci::opt::hook< ci::lazy_list::member_hook<
-                    offsetof( item, hMember ),
-                    co::gc<rcu_type>
-                > >
-                ,co::compare< cmp<item> >
-                ,co::less< less<item> >
-                ,ci::opt::disposer< faked_disposer >
-            >::type
-        >    ord_list;
-
-        typedef ci::SplitListSet< rcu_type, ord_list,
-            ci::split_list::make_traits<
-                co::hash< hash_int >
-                ,co::item_counter< simple_item_counter >
-                ,ci::split_list::dynamic_bucket_table<false>
-                ,co::stat< ci::split_list::stat<>>
-            >::type
-        > set;
-        static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
-
-        test_rcu_int<set>();
-#endif
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_intrusive_striped_hashset_avlset.cpp b/tests/test-hdr/set/hdr_intrusive_striped_hashset_avlset.cpp
deleted file mode 100644 (file)
index a4d1d32..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_striped_set.h"
-#include <cds/intrusive/striped_set/boost_avl_set.h>
-#include <cds/intrusive/striped_set.h>
-
-namespace set {
-    namespace bi = boost::intrusive;
-
-    namespace {
-        typedef IntrusiveStripedSetHdrTest::base_item< bi::avl_set_base_hook<> > base_item_type;
-        typedef IntrusiveStripedSetHdrTest::member_item< bi::avl_set_member_hook<> > member_item_type;
-
-        template <typename T, typename Node>
-        struct get_key
-        {
-            typedef T type;
-
-            type const& operator()( Node const& v ) const
-            {
-                return v.nKey;
-            }
-        };
-    }
-
-#if BOOST_VERSION >= 105900
-#   define CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( type ) ,bi::key_of_value< get_key< int, type>>
-#else
-#   define CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( type )
-#endif
-
-    void IntrusiveStripedSetHdrTest::Striped_avl_set_basehook()
-    {
-        typedef ci::StripedSet<
-            bi::avl_set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::mutex_policy< ci::striped_set::striping<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_avl_set_basehook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::avl_set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<64> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_avl_set_basehook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::avl_set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(256) );
-        test_with( s );
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_avl_set_memberhook()
-    {
-        typedef ci::StripedSet<
-            bi::avl_set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::avl_set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_avl_set_memberhook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::avl_set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::avl_set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<256> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_avl_set_memberhook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::avl_set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::avl_set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(256) );
-        test_with( s );
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_intrusive_striped_hashset_list.cpp b/tests/test-hdr/set/hdr_intrusive_striped_hashset_list.cpp
deleted file mode 100644 (file)
index 762d7da..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_striped_set.h"
-#include <cds/intrusive/striped_set/boost_list.h>
-#include <cds/intrusive/striped_set.h>
-
-#include <type_traits> // std::is_same
-
-namespace set {
-    namespace bi = boost::intrusive;
-
-    namespace {
-        typedef IntrusiveStripedSetHdrTest::base_item< bi::list_base_hook<> > base_item_type;
-        typedef IntrusiveStripedSetHdrTest::member_item< bi::list_member_hook<> > member_item_type;
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_list_basehook_cmp()
-    {
-        typedef ci::StripedSet<
-            bi::list<base_item_type>
-            ,co::mutex_policy< ci::striped_set::striping<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<base_item_type> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<base_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_list_basehook_less()
-    {
-        typedef ci::StripedSet<
-            bi::list<base_item_type>
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<base_item_type> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_list_basehook_cmpmix()
-    {
-        typedef ci::StripedSet<
-            bi::list<base_item_type>
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<base_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<base_item_type> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<base_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_list_basehook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::list<base_item_type>
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<base_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<base_item_type> >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<8> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<base_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_list_basehook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::list<base_item_type>
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<base_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<base_item_type> >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<base_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        set_type s( 128, ci::striped_set::single_bucket_size_threshold<0>(4) );
-        test_with( s );
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_list_memberhook_cmp()
-    {
-        typedef ci::StripedSet<
-            bi::list<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::list_member_hook<>, &member_item_type::hMember>
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<member_item_type> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_list_memberhook_less()
-    {
-        typedef ci::StripedSet<
-            bi::list<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::list_member_hook<>, &member_item_type::hMember>
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<member_item_type> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_list_memberhook_cmpmix()
-    {
-        typedef ci::StripedSet<
-            bi::list<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::list_member_hook<>, &member_item_type::hMember>
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<member_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<member_item_type> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_list_memberhook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::list<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::list_member_hook<>, &member_item_type::hMember>
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<member_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<member_item_type> >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<8> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<member_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_list_memberhook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::list<
-            member_item_type
-            , bi::member_hook< member_item_type, bi::list_member_hook<>, &member_item_type::hMember>
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<member_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<member_item_type> >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<member_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        set_type s( 128, ci::striped_set::single_bucket_size_threshold<0>(4) );
-        test_with( s );
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_intrusive_striped_hashset_set.cpp b/tests/test-hdr/set/hdr_intrusive_striped_hashset_set.cpp
deleted file mode 100644 (file)
index 3ff23de..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_striped_set.h"
-#include <cds/intrusive/striped_set/boost_set.h>
-#include <cds/intrusive/striped_set.h>
-
-namespace set {
-    namespace bi = boost::intrusive;
-
-    namespace {
-        typedef IntrusiveStripedSetHdrTest::base_item< bi::set_base_hook<> > base_item_type;
-        typedef IntrusiveStripedSetHdrTest::member_item< bi::set_member_hook<> > member_item_type;
-
-        template <typename T, typename Node>
-        struct get_key
-        {
-            typedef T type;
-
-            type const& operator()( Node const& v ) const
-            {
-                return v.nKey;
-            }
-        };
-    }
-
-#if BOOST_VERSION >= 105900
-#   define CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( type ) ,bi::key_of_value< get_key< int, type>>
-#else
-#   define CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( type )
-#endif
-
-
-    void IntrusiveStripedSetHdrTest::Striped_set_basehook()
-    {
-        typedef ci::StripedSet<
-            bi::set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::mutex_policy< ci::striped_set::striping<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_set_basehook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<64> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_set_basehook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(256) );
-        test_with( s );
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_set_memberhook()
-    {
-        typedef ci::StripedSet<
-            bi::set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_set_memberhook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<256> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_set_memberhook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(256) );
-        test_with( s );
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_intrusive_striped_hashset_sgset.cpp b/tests/test-hdr/set/hdr_intrusive_striped_hashset_sgset.cpp
deleted file mode 100644 (file)
index 2b5d382..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_striped_set.h"
-#include <cds/intrusive/striped_set/boost_sg_set.h>
-#include <cds/intrusive/striped_set.h>
-
-namespace set {
-    namespace bi = boost::intrusive;
-
-    namespace {
-        typedef IntrusiveStripedSetHdrTest::base_item< bi::bs_set_base_hook<> > base_item_type;
-        typedef IntrusiveStripedSetHdrTest::member_item< bi::bs_set_member_hook<> > member_item_type;
-
-        template <typename T, typename Node>
-        struct get_key
-        {
-            typedef T type;
-
-            type const& operator()( Node const& v ) const
-            {
-                return v.nKey;
-            }
-        };
-    }
-
-#if BOOST_VERSION >= 105900
-#   define CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( type ) ,bi::key_of_value< get_key< int, type>>
-#else
-#   define CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( type )
-#endif
-
-
-    void IntrusiveStripedSetHdrTest::Striped_sg_set_basehook()
-    {
-        typedef ci::StripedSet<
-            bi::sg_set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::mutex_policy< ci::striped_set::striping<> >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_sg_set_basehook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::sg_set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<64> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_sg_set_basehook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::sg_set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(256) );
-        test_with( s );
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_sg_set_memberhook()
-    {
-        typedef ci::StripedSet<
-            bi::sg_set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::bs_set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_sg_set_memberhook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::sg_set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::bs_set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<256> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_sg_set_memberhook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::sg_set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::bs_set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(256) );
-        test_with( s );
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_intrusive_striped_hashset_slist.cpp b/tests/test-hdr/set/hdr_intrusive_striped_hashset_slist.cpp
deleted file mode 100644 (file)
index 92e60df..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_striped_set.h"
-#include <cds/intrusive/striped_set/boost_slist.h>
-#include <cds/intrusive/striped_set.h>
-
-#include <type_traits> // std::is_same
-
-namespace set {
-    namespace bi = boost::intrusive;
-
-    namespace {
-        typedef IntrusiveStripedSetHdrTest::base_item< bi::slist_base_hook<> > base_item_type;
-        typedef IntrusiveStripedSetHdrTest::member_item< bi::slist_member_hook<> > member_item_type;
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_slist_basehook_cmp()
-    {
-        typedef ci::StripedSet<
-            bi::slist<base_item_type>
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<base_item_type> >
-            ,co::mutex_policy< ci::striped_set::striping<> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<base_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_slist_basehook_less()
-    {
-        typedef ci::StripedSet<
-            bi::slist<base_item_type>
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<base_item_type> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_slist_basehook_cmpmix()
-    {
-        typedef ci::StripedSet<
-            bi::slist<base_item_type>
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<base_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<base_item_type> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<base_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_slist_basehook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::slist<base_item_type>
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<base_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<base_item_type> >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<8> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<base_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_slist_basehook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::slist<base_item_type>
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<base_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<base_item_type> >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<base_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        set_type s( 128, ci::striped_set::single_bucket_size_threshold<0>(4) );
-        test_with( s );
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_slist_memberhook_cmp()
-    {
-        typedef ci::StripedSet<
-            bi::slist<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::slist_member_hook<>, &member_item_type::hMember>
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<member_item_type> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_slist_memberhook_less()
-    {
-        typedef ci::StripedSet<
-            bi::slist<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::slist_member_hook<>, &member_item_type::hMember>
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<member_item_type> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_slist_memberhook_cmpmix()
-    {
-        typedef ci::StripedSet<
-            bi::slist<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::slist_member_hook<>, &member_item_type::hMember>
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<member_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<member_item_type> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_slist_memberhook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::slist<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::slist_member_hook<>, &member_item_type::hMember>
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<member_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<member_item_type> >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<8> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<member_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_slist_memberhook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::slist<
-            member_item_type
-            , bi::member_hook< member_item_type, bi::slist_member_hook<>, &member_item_type::hMember>
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::less< IntrusiveStripedSetHdrTest::less<member_item_type> >
-            ,co::compare< IntrusiveStripedSetHdrTest::cmp<member_item_type> >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        static_assert( (std::is_same<
-            IntrusiveStripedSetHdrTest::cmp<member_item_type>
-            ,set_type::bucket_type::key_comparator
-        >::value), "Key compare function selection error" );
-
-        set_type s( 128, ci::striped_set::single_bucket_size_threshold<0>(4) );
-        test_with( s );
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_intrusive_striped_hashset_splayset.cpp b/tests/test-hdr/set/hdr_intrusive_striped_hashset_splayset.cpp
deleted file mode 100644 (file)
index 286836b..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_striped_set.h"
-#include <cds/intrusive/striped_set/boost_splay_set.h>
-#include <cds/intrusive/striped_set.h>
-#include <boost/version.hpp>
-
-namespace set {
-    namespace bi = boost::intrusive;
-
-    namespace {
-#   if BOOST_VERSION < 105600
-        typedef bi::splay_set_member_hook<> splay_set_member_hook;
-        typedef bi::splay_set_base_hook<> splay_set_base_hook;
-#else
-        typedef bi::bs_set_base_hook<> splay_set_base_hook;
-        typedef bi::bs_set_member_hook<> splay_set_member_hook;
-#endif
-
-        typedef IntrusiveStripedSetHdrTest::base_item< splay_set_base_hook> base_item_type;
-        typedef IntrusiveStripedSetHdrTest::member_item< splay_set_member_hook > member_item_type;
-
-        template <typename T, typename Node>
-        struct get_key
-        {
-            typedef T type;
-
-            type const& operator()( Node const& v ) const
-            {
-                return v.nKey;
-            }
-        };
-    }
-
-#if BOOST_VERSION >= 105900
-#   define CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( type ) ,bi::key_of_value< get_key< int, type>>
-#else
-#   define CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( type )
-#endif
-
-
-    void IntrusiveStripedSetHdrTest::Striped_splay_set_basehook()
-    {
-        typedef ci::StripedSet<
-            bi::splay_set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::mutex_policy< ci::striped_set::striping<> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_splay_set_basehook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::splay_set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<64> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_splay_set_basehook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::splay_set<base_item_type
-                , bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(256) );
-        test_with( s );
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_splay_set_memberhook()
-    {
-        typedef ci::StripedSet<
-            bi::splay_set<
-                member_item_type
-                , bi::member_hook< member_item_type, splay_set_member_hook, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_splay_set_memberhook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::splay_set<
-                member_item_type
-                , bi::member_hook< member_item_type, splay_set_member_hook, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<256> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_splay_set_memberhook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::splay_set<
-                member_item_type
-                , bi::member_hook< member_item_type, splay_set_member_hook, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(256) );
-        test_with( s );
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_intrusive_striped_hashset_treapset.cpp b/tests/test-hdr/set/hdr_intrusive_striped_hashset_treapset.cpp
deleted file mode 100644 (file)
index 9fce097..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_striped_set.h"
-#include <cds/intrusive/striped_set/boost_treap_set.h>
-#include <cds/intrusive/striped_set.h>
-
-namespace set {
-    namespace bi = boost::intrusive;
-
-    namespace {
-        typedef IntrusiveStripedSetHdrTest::base_item< bi::bs_set_base_hook<> > base_item_type;
-        typedef IntrusiveStripedSetHdrTest::member_item< bi::bs_set_member_hook<> > member_item_type;
-
-        template <typename T>
-        struct priority_cmp: private IntrusiveStripedSetHdrTest::less<T>
-        {
-            typedef IntrusiveStripedSetHdrTest::less<T> base_class;
-
-            template <typename A, typename B>
-            bool operator()( A const& a, B const& b ) const
-            {
-                return base_class::operator()( b, a );
-            }
-        };
-
-        template <typename T, typename Node>
-        struct get_key
-        {
-            typedef T type;
-
-            type const& operator()( Node const& v ) const
-            {
-                return v.nKey;
-            }
-        };
-    }
-
-#if BOOST_VERSION >= 105900
-#   define CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( type ) ,bi::key_of_value< get_key< int, type>>
-#else
-#   define CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( type )
-#endif
-
-    void IntrusiveStripedSetHdrTest::Striped_treap_set_basehook()
-    {
-        typedef ci::StripedSet<
-            bi::treap_set < base_item_type,
-                bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>,
-                bi::priority<priority_cmp<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::mutex_policy< ci::striped_set::striping<> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_treap_set_basehook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::treap_set<base_item_type,
-                bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type> >,
-                bi::priority<priority_cmp<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<64> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_treap_set_basehook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::treap_set<base_item_type,
-                bi::compare<IntrusiveStripedSetHdrTest::less<base_item_type>>,
-                bi::priority<priority_cmp<base_item_type>>
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( base_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(256) );
-        test_with( s );
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_treap_set_memberhook()
-    {
-        typedef ci::StripedSet<
-            bi::treap_set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::bs_set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                , bi::priority<priority_cmp<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_treap_set_memberhook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::treap_set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::bs_set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                , bi::priority<priority_cmp<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<256> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_treap_set_memberhook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::treap_set<
-                member_item_type
-                , bi::member_hook< member_item_type, bi::bs_set_member_hook<>, &member_item_type::hMember>
-                , bi::compare<IntrusiveStripedSetHdrTest::less<member_item_type> >
-                , bi::priority<priority_cmp<member_item_type> >
-                CDS_BOOST_INTRUSIVE_KEY_OF_VALUE_OPTION( member_item_type )
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(256) );
-        test_with( s );
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_intrusive_striped_hashset_uset.cpp b/tests/test-hdr/set/hdr_intrusive_striped_hashset_uset.cpp
deleted file mode 100644 (file)
index 15f1adc..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_intrusive_striped_set.h"
-#include <cds/intrusive/striped_set/boost_unordered_set.h>
-#include <cds/intrusive/striped_set.h>
-
-namespace set {
-    namespace bi = boost::intrusive;
-
-    namespace {
-        typedef IntrusiveStripedSetHdrTest::base_item< bi::unordered_set_base_hook<> > base_item_type;
-        typedef IntrusiveStripedSetHdrTest::member_item< bi::unordered_set_member_hook<> > member_item_type;
-
-        struct hasher: private IntrusiveStripedSetHdrTest::hash_int
-        {
-            typedef IntrusiveStripedSetHdrTest::hash_int base_class;
-
-            size_t operator()( int i ) const
-            {
-                return ~( base_class::operator()(i));
-            }
-            template <typename Item>
-            size_t operator()( const Item& i ) const
-            {
-                return ~( base_class::operator()(i));
-            }
-            size_t operator()( IntrusiveStripedSetHdrTest::find_key const& i) const
-            {
-                return ~( base_class::operator()(i));
-            }
-        };
-
-        template <typename T>
-        struct is_equal: private IntrusiveStripedSetHdrTest::cmp<T>
-        {
-            typedef IntrusiveStripedSetHdrTest::cmp<T> base_class;
-
-            bool operator ()(const T& v1, const T& v2 ) const
-            {
-                return base_class::operator()( v1, v2 ) == 0;
-            }
-
-            template <typename Q>
-            bool operator ()(const T& v1, const Q& v2 ) const
-            {
-                return base_class::operator()( v1, v2 ) == 0;
-            }
-
-            template <typename Q>
-            bool operator ()(const Q& v1, const T& v2 ) const
-            {
-                return base_class::operator()( v1, v2 ) == 0;
-            }
-        };
-
-        template <size_t Capacity, typename T, class Alloc = CDS_DEFAULT_ALLOCATOR>
-        struct dyn_buffer: public co::v::dynamic_buffer< T, Alloc >
-        {
-            typedef co::v::dynamic_buffer< T, Alloc >   base_class;
-        public:
-            template <typename Q>
-            struct rebind {
-                typedef dyn_buffer<Capacity, Q, Alloc> other   ;  ///< Rebinding result type
-            };
-
-            dyn_buffer()
-                : base_class( Capacity )
-            {}
-        };
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_unordered_set_basehook()
-    {
-        typedef ci::StripedSet<
-            bi::unordered_set<base_item_type
-                , bi::hash< hasher >
-                , bi::equal< is_equal<base_item_type> >
-                , bi::power_2_buckets<true>
-                , bi::incremental<true>
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_unordered_set_basehook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::unordered_set<base_item_type
-                , bi::hash< hasher >
-                , bi::equal< is_equal<base_item_type> >
-                , bi::power_2_buckets<true>
-                , bi::incremental<true>
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::buffer< co::v::static_buffer< cds::any_type, 64 > >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<256> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_unordered_set_basehook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::unordered_set<base_item_type
-                , bi::hash< hasher >
-                , bi::equal< is_equal<base_item_type> >
-                , bi::power_2_buckets<true>
-                , bi::incremental<true>
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::buffer< dyn_buffer< 256, cds::any_type, std::allocator<int> > >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(512) );
-        test_with( s );
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_unordered_set_memberhook()
-    {
-        typedef ci::StripedSet<
-            bi::unordered_set<member_item_type
-                , bi::member_hook< member_item_type, bi::unordered_set_member_hook<>, &member_item_type::hMember>
-                , bi::hash< hasher >
-                , bi::equal< is_equal<member_item_type> >
-                , bi::power_2_buckets<true>
-                , bi::incremental<true>
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_unordered_set_memberhook_bucket_threshold()
-    {
-        typedef ci::StripedSet<
-            bi::unordered_set<member_item_type
-                , bi::member_hook< member_item_type, bi::unordered_set_member_hook<>, &member_item_type::hMember>
-                , bi::hash< hasher >
-                , bi::equal< is_equal<member_item_type> >
-                , bi::power_2_buckets<true>
-                , bi::incremental<true>
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::buffer< dyn_buffer< 64, cds::any_type, std::allocator<int> > >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<256> >
-            ,co::mutex_policy< ci::striped_set::striping<> >
-        > set_type;
-
-        test<set_type>();
-    }
-
-    void IntrusiveStripedSetHdrTest::Striped_unordered_set_memberhook_bucket_threshold_rt()
-    {
-        typedef ci::StripedSet<
-            bi::unordered_set<member_item_type
-                , bi::member_hook< member_item_type, bi::unordered_set_member_hook<>, &member_item_type::hMember>
-                , bi::hash< hasher >
-                , bi::equal< is_equal<member_item_type> >
-                , bi::power_2_buckets<true>
-                , bi::incremental<true>
-            >
-            ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
-            ,co::buffer< co::v::static_buffer< cds::any_type, 128 > >
-            ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
-        > set_type;
-
-        set_type s( 64, ci::striped_set::single_bucket_size_threshold<0>(256) );
-        test_with( s );
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_intrusive_striped_set.cpp b/tests/test-hdr/set/hdr_intrusive_striped_set.cpp
deleted file mode 100644 (file)
index fd565ed..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-#include "set/hdr_intrusive_striped_set.h"
-CPPUNIT_TEST_SUITE_REGISTRATION(set::IntrusiveStripedSetHdrTest);
diff --git a/tests/test-hdr/set/hdr_intrusive_striped_set.h b/tests/test-hdr/set/hdr_intrusive_striped_set.h
deleted file mode 100644 (file)
index 4cba53f..0000000
+++ /dev/null
@@ -1,823 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_INTRUSIVE_STRIPED_SET_H
-#define CDSTEST_HDR_INTRUSIVE_STRIPED_SET_H
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/opt/hash.h>
-
-#include <boost/version.hpp>
-
-// boost 1.59 bug: intrusive containers require implicit conversion from value_type to key_type
-// Fixed in boost 1.60+
-#if BOOST_VERSION == 105900
-#   define CDSTEST_BOOST_INTRUSIVE_REQUIRES_IMPLICIT_CONVERSION_WORKAROUND
-#else
-#   define CDSTEST_BOOST_INTRUSIVE_REQUIRES_IMPLICIT_CONVERSION_WORKAROUND explicit
-#endif
-
-// cds::intrusive namespace forward declaration
-namespace cds { namespace intrusive {}}
-
-namespace set {
-    namespace ci = cds::intrusive;
-    namespace co = cds::opt;
-
-    template <typename T>
-    struct get_int_key
-    {
-        int operator()( T const & v ) const
-        {
-            return v.key();
-        }
-    };
-
-    template <>
-    struct get_int_key<int>
-    {
-        int operator()( int i ) const
-        {
-            return i;
-        }
-    };
-
-    // MichaelHashSet
-    class IntrusiveStripedSetHdrTest: public CppUnitMini::TestCase
-    {
-    public:
-        struct stat
-        {
-            unsigned int nDisposeCount  ;   // count of disposer calling
-            unsigned int nFindCount     ;   // count of find-functor calling
-            unsigned int nFindArgCount;
-            unsigned int nInsertCount;
-            unsigned int nUpdateNewCount;
-            unsigned int nUpdateCount;
-            unsigned int nEraseCount;
-
-            stat()
-            {
-                memset( this, 0, sizeof(*this));
-            }
-
-            stat& operator=( stat const& s)
-            {
-                memcpy( this, &s, sizeof(*this));
-                return *this;
-            }
-        };
-
-        struct item
-        {
-            int nKey;
-            int nVal;
-
-            item()
-            {}
-
-            explicit item( int key )
-                : nKey( key )
-                , nVal(0)
-            {}
-
-            item(int key, int val)
-                : nKey( key )
-                , nVal(val)
-            {}
-
-            item(const item& v )
-                : nKey( v.nKey )
-                , nVal( v.nVal )
-            {}
-
-            int key() const
-            {
-                return nKey;
-            }
-
-            int val() const
-            {
-                return nVal;
-            }
-        };
-
-        template <typename Hook>
-        struct base_item
-            : public item
-            , public Hook
-            , public stat
-
-        {
-            base_item()
-            {}
-
-            CDSTEST_BOOST_INTRUSIVE_REQUIRES_IMPLICIT_CONVERSION_WORKAROUND
-            base_item( int key )
-                : item( key )
-            {}
-
-            base_item(int key, int val)
-                : item( key, val )
-            {}
-
-            base_item(const base_item& v )
-                : item( static_cast<item const&>(v) )
-                , stat()
-            {}
-
-            operator int() const
-            {
-                return key();
-            }
-        };
-
-        template <typename Hook>
-        struct member_item
-            : public item
-            , public stat
-        {
-            Hook hMember;
-
-            member_item()
-            {}
-
-            CDSTEST_BOOST_INTRUSIVE_REQUIRES_IMPLICIT_CONVERSION_WORKAROUND
-            member_item( int key )
-                : item( key )
-            {}
-
-            member_item(int key, int val)
-                : item( key, val )
-            {}
-
-            member_item(const member_item& v )
-                : item( static_cast<item const&>(v))
-                , stat()
-            {}
-
-            operator int() const
-            {
-                return key();
-            }
-        };
-
-        struct find_key {
-            int nKey;
-
-            find_key( int key )
-                : nKey(key)
-            {}
-        };
-
-        struct hash_int {
-            size_t operator()( int i ) const
-            {
-                return co::v::hash<int>()( i );
-            }
-            template <typename Item>
-            size_t operator()( const Item& i ) const
-            {
-                return (*this)( i.key() );
-            }
-            size_t operator()( find_key const& i) const
-            {
-                return co::v::hash<int>()( i.nKey );
-            }
-        };
-
-        template <typename T>
-        struct less
-        {
-            bool operator ()(const T& v1, const T& v2 ) const
-            {
-                return v1.key() < v2.key();
-            }
-
-            template <typename Q>
-            bool operator ()(const T& v1, const Q& v2 ) const
-            {
-                return v1.key() < v2;
-            }
-
-            template <typename Q>
-            bool operator ()(const Q& v1, const T& v2 ) const
-            {
-                return v1 < v2.key();
-            }
-
-            bool operator()( int i1, int i2 ) const
-            {
-                return i1 < i2;
-            }
-        };
-
-        template <typename T>
-        struct cmp {
-            int operator ()(const T& v1, const T& v2 ) const
-            {
-                if ( v1.key() < v2.key() )
-                    return -1;
-                return v1.key() > v2.key() ? 1 : 0;
-            }
-
-            template <typename Q>
-            int operator ()(const T& v1, const Q& v2 ) const
-            {
-                if ( v1.key() < v2 )
-                    return -1;
-                return v1.key() > v2 ? 1 : 0;
-            }
-
-            template <typename Q>
-            int operator ()(const Q& v1, const T& v2 ) const
-            {
-                if ( v1 < v2.key() )
-                    return -1;
-                return v1 > v2.key() ? 1 : 0;
-            }
-        };
-
-        struct faked_disposer
-        {
-            template <typename T>
-            void operator ()( T * p )
-            {
-                ++p->nDisposeCount;
-            }
-        };
-
-        struct insert_functor {
-            template <typename Item>
-            void operator()( Item& e)
-            {
-                ++e.nInsertCount;
-            }
-        };
-
-        struct update_functor {
-            template <typename Item>
-            void operator()( bool bNew, Item& e, Item& arg )
-            {
-                if ( bNew ) {
-                    ++e.nUpdateNewCount;
-                    CPPUNIT_ASSERT_CURRENT( &e == &arg );
-                }
-                else
-                    ++e.nUpdateCount;
-            }
-        };
-
-        struct erase_functor {
-            template< typename Item >
-            void operator()( Item& e )
-            {
-                ++e.nEraseCount;
-            }
-        };
-
-        struct find_functor {
-            template <typename Item, typename What>
-            void operator()( Item& e, What& )
-            {
-                ++e.nFindCount;
-            }
-
-            template <typename Item>
-            void operator()( Item& e, Item& w )
-            {
-                ++e.nFindCount;
-                ++w.nFindArgCount;
-            }
-        };
-
-        struct less2 {
-            template <typename Item>
-            bool operator()( Item const& e, find_key const& k ) const
-            {
-                return get_int_key<Item>()(e) < k.nKey;
-            }
-            template <typename Item>
-            bool operator()( find_key const& k, Item const& e ) const
-            {
-                return k.nKey < get_int_key<Item>()(e);
-            }
-            template <typename Item1, typename Item2>
-            bool operator()( Item1 const& e, Item2 const& k ) const
-            {
-                return get_int_key<Item1>()(e) < get_int_key<Item2>()(k);
-            }
-        };
-
-        template <typename T>
-        struct auto_dispose {
-            T * m_pArr;
-            auto_dispose( T * pArr ): m_pArr( pArr ) {}
-            ~auto_dispose() { delete[] m_pArr; }
-        };
-
-        template <class Set>
-        void test_with(Set& s)
-        {
-            typedef typename Set::value_type    value_type;
-
-            int const k1 = 10;
-            int const k2 = 25;
-            int const k3 = 51;
-
-            int const v1 = 25;
-            int const v2 = 56;
-            int const v3 = 23;
-
-            value_type e1( k1, v1 );
-            value_type e2( k2, v2 );
-            value_type e3( k3, v3);
-
-            stat s1 = e1;
-            stat s2 = e2;
-            stat s3 = e3;
-
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( s.size() == 0 );
-
-            CPPUNIT_ASSERT( !s.contains(k1));
-            CPPUNIT_ASSERT( !s.contains(k2));
-            CPPUNIT_ASSERT( !s.contains(k3));
-
-            CPPUNIT_ASSERT( s.insert(e1));
-            CPPUNIT_ASSERT( s.contains(e1));
-            CPPUNIT_ASSERT( s.contains(k1));
-            CPPUNIT_ASSERT( !s.contains(e2));
-            CPPUNIT_ASSERT( !s.contains(e3));
-
-            CPPUNIT_ASSERT( e2.nInsertCount == 0 );
-            CPPUNIT_ASSERT( s.insert(e2, insert_functor() ));
-            CPPUNIT_ASSERT( e2.nInsertCount == 1 );
-            CPPUNIT_ASSERT( s.find(e1, find_functor() ));
-            CPPUNIT_ASSERT( e1.nFindCount == 1 );
-            CPPUNIT_ASSERT( e1.nFindArgCount == 1 );
-            CPPUNIT_ASSERT( s.find(k1, find_functor() ));
-            CPPUNIT_ASSERT( e1.nFindCount == 2 );
-            CPPUNIT_ASSERT( e1.nFindArgCount == 1 );
-            CPPUNIT_ASSERT( s.find(k2, find_functor() ));
-            CPPUNIT_ASSERT( e2.nFindCount == 1 );
-            CPPUNIT_ASSERT( e2.nFindArgCount == 0 );
-            CPPUNIT_ASSERT( s.find(e2, find_functor() ));
-            CPPUNIT_ASSERT( e2.nFindCount == 2 );
-            CPPUNIT_ASSERT( e2.nFindArgCount == 1 );
-            CPPUNIT_ASSERT( !s.find(k3, find_functor()));
-            CPPUNIT_ASSERT( e3.nFindCount == 0 );
-            CPPUNIT_ASSERT( e3.nFindArgCount == 0 );
-            CPPUNIT_ASSERT( !s.find(e3, find_functor()));
-            CPPUNIT_ASSERT( e3.nFindCount == 0 );
-            CPPUNIT_ASSERT( e3.nFindArgCount == 0 );
-
-            s1 = e1 ; s2 = e2 ; s3 = e3;
-
-            CPPUNIT_ASSERT( e3.nUpdateNewCount == 0 );
-            CPPUNIT_ASSERT( e3.nUpdateCount == 0 );
-            CPPUNIT_ASSERT(s.update(e3, update_functor(), false) == std::make_pair(false, false));
-            CPPUNIT_ASSERT(e3.nUpdateNewCount == 0);
-            CPPUNIT_ASSERT(e3.nUpdateCount == 0);
-            CPPUNIT_ASSERT( s.update( e3, update_functor() ) == std::make_pair(true, true));
-            CPPUNIT_ASSERT( e3.nUpdateNewCount == 1 );
-            CPPUNIT_ASSERT( e3.nUpdateCount == 0 );
-            CPPUNIT_ASSERT( s.find_with(find_key(k1), less2(), find_functor() ));
-            CPPUNIT_ASSERT( e1.nFindCount == s1.nFindCount + 1 );
-            CPPUNIT_ASSERT( e1.nFindArgCount == s1.nFindArgCount );
-            CPPUNIT_ASSERT( s.find_with(k1, less2(), find_functor() ));
-            CPPUNIT_ASSERT( e1.nFindCount == s1.nFindCount + 2 );
-            CPPUNIT_ASSERT( e1.nFindArgCount == s1.nFindArgCount );
-            CPPUNIT_ASSERT( s.find_with(k2, less2(), find_functor() ));
-            CPPUNIT_ASSERT( e2.nFindCount == s2.nFindCount + 1 );
-            CPPUNIT_ASSERT( e2.nFindArgCount == s2.nFindArgCount );
-            CPPUNIT_ASSERT( s.contains(find_key(k2), less2() ));
-            CPPUNIT_ASSERT( e2.nFindCount == s2.nFindCount + 1 )        ;   // unchanged, no find_functor
-            CPPUNIT_ASSERT( e2.nFindArgCount == s2.nFindArgCount );
-            CPPUNIT_ASSERT( s.contains(k3, less2() ));
-            CPPUNIT_ASSERT( e3.nFindCount == s3.nFindCount )            ;   // unchanged, no find_functor
-            CPPUNIT_ASSERT( e3.nFindArgCount == s3.nFindArgCount );
-            CPPUNIT_ASSERT( s.find_with(find_key(k3), less2(), find_functor() ));
-            CPPUNIT_ASSERT( e3.nFindCount == s3.nFindCount + 1 );
-            CPPUNIT_ASSERT( e3.nFindArgCount == s3.nFindArgCount );
-
-            s1 = e1 ; s2 = e2 ; s3 = e3;
-
-            // insert existing elements
-            {
-                value_type eu( k2, 1000 );
-                CPPUNIT_ASSERT( !s.insert( eu ));
-                CPPUNIT_ASSERT( !s.insert( eu, insert_functor() ));
-                CPPUNIT_ASSERT( e2.nInsertCount == s2.nInsertCount );
-
-                CPPUNIT_ASSERT( s.update( eu, update_functor()) == std::make_pair(true, false));
-                CPPUNIT_ASSERT( e2.nInsertCount == s2.nInsertCount );
-                CPPUNIT_ASSERT( e2.nUpdateCount == s2.nUpdateCount + 1 );
-                CPPUNIT_ASSERT( e2.nUpdateNewCount == s2.nUpdateNewCount  );
-            }
-
-            s1 = e1 ; s2 = e2 ; s3 = e3;
-
-            // unlink & erase test
-            {
-                value_type eu( k2, 10 );
-                CPPUNIT_ASSERT( !s.unlink(eu));
-            }
-
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( s.size() == 3 );
-
-            CPPUNIT_ASSERT( s.unlink( e1 ) );
-            CPPUNIT_ASSERT( s.erase_with( k2, less2() ) == &e2 );
-            CPPUNIT_ASSERT( s.erase( e2 ) == nullptr );
-            CPPUNIT_ASSERT( e3.nEraseCount == 0 );
-            CPPUNIT_ASSERT( s.erase_with( k3, less2(), erase_functor()) == &e3 );
-            CPPUNIT_ASSERT( e3.nEraseCount == 1 );
-            CPPUNIT_ASSERT( s.erase( k3, erase_functor() ) == nullptr );
-            CPPUNIT_ASSERT( e3.nEraseCount == 1 );
-
-            CPPUNIT_ASSERT( s.insert( e3 ) );
-            CPPUNIT_ASSERT( s.erase( e3 ) == &e3 );
-            CPPUNIT_ASSERT( e3.nEraseCount == 1 );
-
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( s.size() == 0 );
-
-            s1 = e1 ; s2 = e2 ; s3 = e3;
-
-            // clear & clear_and_dispose test
-            CPPUNIT_ASSERT( s.insert(e1));
-            CPPUNIT_ASSERT( s.insert(e2));
-            CPPUNIT_ASSERT( s.insert(e3));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( s.size() == 3 );
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( s.size() == 0 );
-
-            CPPUNIT_ASSERT( s.insert(e1));
-            CPPUNIT_ASSERT( s.insert(e2));
-            CPPUNIT_ASSERT( s.insert(e3));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( s.size() == 3 );
-
-            CPPUNIT_ASSERT( e1.nDisposeCount == 0 );
-            CPPUNIT_ASSERT( e2.nDisposeCount == 0 );
-            CPPUNIT_ASSERT( e3.nDisposeCount == 0 );
-            s.clear_and_dispose( faked_disposer() );
-            CPPUNIT_ASSERT( e1.nDisposeCount == 1 );
-            CPPUNIT_ASSERT( e2.nDisposeCount == 1 );
-            CPPUNIT_ASSERT( e3.nDisposeCount == 1 );
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( s.size() == 0 );
-
-            // resize test (up to 64K elements)
-            size_t const nSize = 64 * 1024;
-            value_type * arr = new value_type[nSize];
-            auto_dispose<value_type> ad(arr);
-            for ( size_t i = 0; i < nSize; ++i ) {
-                value_type * p = new (arr + i) value_type( (int) i, (int) i * 2 );
-                CPPUNIT_ASSERT_EX( s.insert( *p, insert_functor() ), "i=" << i );
-                CPPUNIT_ASSERT_EX( p->nInsertCount == 1, "i=" << i );
-                //for ( size_t j = 0; j <= i; ++j ) {
-                //    if ( !s.contains((int) j) ) {
-                //        CPPUNIT_MSG( "Key " << j << " is not found after inserting key " << i );
-                //    }
-                //}
-            }
-
-            for ( size_t i = 0; i < nSize; ++i )
-                CPPUNIT_ASSERT_EX( s.contains((int) i), "Key " << i << " is not found" );
-
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( s.size() == nSize );
-            s.clear_and_dispose( faked_disposer() );
-            for ( size_t i = 0; i < nSize; ++i ) {
-                CPPUNIT_ASSERT_EX( arr[i].nDisposeCount == 1, "i=" << i );
-            }
-        }
-
-        template <class Set>
-        void test()
-        {
-            // default ctor
-            {
-                Set s;
-                test_with(s);
-            }
-
-            // ctor with explicit initial capacity
-            {
-                Set s(256);
-                test_with(s);
-            }
-        }
-
-        template <class Set>
-        void test_cuckoo()
-        {
-            unsigned int nProbesetSize = Set::node_type::probeset_size ? Set::node_type::probeset_size : 4;
-            Set s( 256, nProbesetSize, nProbesetSize / 2 );
-            test_with( s );
-        }
-
-        // ***********************************************************
-        // Striped set
-
-        void Striped_list_basehook_cmp();
-        void Striped_list_basehook_less();
-        void Striped_list_basehook_cmpmix();
-        void Striped_list_basehook_bucket_threshold();
-        void Striped_list_basehook_bucket_threshold_rt();
-        void Striped_list_memberhook_cmp();
-        void Striped_list_memberhook_less();
-        void Striped_list_memberhook_cmpmix();
-        void Striped_list_memberhook_bucket_threshold();
-        void Striped_list_memberhook_bucket_threshold_rt();
-
-        void Striped_slist_basehook_cmp();
-        void Striped_slist_basehook_less();
-        void Striped_slist_basehook_cmpmix();
-        void Striped_slist_basehook_bucket_threshold();
-        void Striped_slist_basehook_bucket_threshold_rt();
-        void Striped_slist_memberhook_cmp();
-        void Striped_slist_memberhook_less();
-        void Striped_slist_memberhook_cmpmix();
-        void Striped_slist_memberhook_bucket_threshold();
-        void Striped_slist_memberhook_bucket_threshold_rt();
-
-        void Striped_set_basehook();
-        void Striped_set_basehook_bucket_threshold();
-        void Striped_set_basehook_bucket_threshold_rt();
-        void Striped_set_memberhook();
-        void Striped_set_memberhook_bucket_threshold();
-        void Striped_set_memberhook_bucket_threshold_rt();
-
-        void Striped_unordered_set_basehook();
-        void Striped_unordered_set_basehook_bucket_threshold();
-        void Striped_unordered_set_basehook_bucket_threshold_rt();
-        void Striped_unordered_set_memberhook();
-        void Striped_unordered_set_memberhook_bucket_threshold();
-        void Striped_unordered_set_memberhook_bucket_threshold_rt();
-
-        void Striped_avl_set_basehook();
-        void Striped_avl_set_basehook_bucket_threshold();
-        void Striped_avl_set_basehook_bucket_threshold_rt();
-        void Striped_avl_set_memberhook();
-        void Striped_avl_set_memberhook_bucket_threshold();
-        void Striped_avl_set_memberhook_bucket_threshold_rt();
-
-        void Striped_sg_set_basehook();
-        void Striped_sg_set_basehook_bucket_threshold();
-        void Striped_sg_set_basehook_bucket_threshold_rt();
-        void Striped_sg_set_memberhook();
-        void Striped_sg_set_memberhook_bucket_threshold();
-        void Striped_sg_set_memberhook_bucket_threshold_rt();
-
-        void Striped_splay_set_basehook();
-        void Striped_splay_set_basehook_bucket_threshold();
-        void Striped_splay_set_basehook_bucket_threshold_rt();
-        void Striped_splay_set_memberhook();
-        void Striped_splay_set_memberhook_bucket_threshold();
-        void Striped_splay_set_memberhook_bucket_threshold_rt();
-
-        void Striped_treap_set_basehook();
-        void Striped_treap_set_basehook_bucket_threshold();
-        void Striped_treap_set_basehook_bucket_threshold_rt();
-        void Striped_treap_set_memberhook();
-        void Striped_treap_set_memberhook_bucket_threshold();
-        void Striped_treap_set_memberhook_bucket_threshold_rt();
-
-        // ***********************************************************
-        // Refinable set
-
-        void Refinable_list_basehook_cmp();
-        void Refinable_list_basehook_less();
-        void Refinable_list_basehook_cmpmix();
-        void Refinable_list_basehook_bucket_threshold();
-        void Refinable_list_basehook_bucket_threshold_rt();
-        void Refinable_list_memberhook_cmp();
-        void Refinable_list_memberhook_less();
-        void Refinable_list_memberhook_cmpmix();
-        void Refinable_list_memberhook_bucket_threshold();
-        void Refinable_list_memberhook_bucket_threshold_rt();
-
-        void Refinable_slist_basehook_cmp();
-        void Refinable_slist_basehook_less();
-        void Refinable_slist_basehook_cmpmix();
-        void Refinable_slist_basehook_bucket_threshold();
-        void Refinable_slist_basehook_bucket_threshold_rt();
-        void Refinable_slist_memberhook_cmp();
-        void Refinable_slist_memberhook_less();
-        void Refinable_slist_memberhook_cmpmix();
-        void Refinable_slist_memberhook_bucket_threshold();
-        void Refinable_slist_memberhook_bucket_threshold_rt();
-
-        void Refinable_set_basehook();
-        void Refinable_set_basehook_bucket_threshold();
-        void Refinable_set_basehook_bucket_threshold_rt();
-        void Refinable_set_memberhook();
-        void Refinable_set_memberhook_bucket_threshold();
-        void Refinable_set_memberhook_bucket_threshold_rt();
-
-        void Refinable_unordered_set_basehook();
-        void Refinable_unordered_set_basehook_bucket_threshold();
-        void Refinable_unordered_set_basehook_bucket_threshold_rt();
-        void Refinable_unordered_set_memberhook();
-        void Refinable_unordered_set_memberhook_bucket_threshold();
-        void Refinable_unordered_set_memberhook_bucket_threshold_rt();
-
-        void Refinable_avl_set_basehook();
-        void Refinable_avl_set_basehook_bucket_threshold();
-        void Refinable_avl_set_basehook_bucket_threshold_rt();
-        void Refinable_avl_set_memberhook();
-        void Refinable_avl_set_memberhook_bucket_threshold();
-        void Refinable_avl_set_memberhook_bucket_threshold_rt();
-
-        void Refinable_sg_set_basehook();
-        void Refinable_sg_set_basehook_bucket_threshold();
-        void Refinable_sg_set_basehook_bucket_threshold_rt();
-        void Refinable_sg_set_memberhook();
-        void Refinable_sg_set_memberhook_bucket_threshold();
-        void Refinable_sg_set_memberhook_bucket_threshold_rt();
-
-        void Refinable_splay_set_basehook();
-        void Refinable_splay_set_basehook_bucket_threshold();
-        void Refinable_splay_set_basehook_bucket_threshold_rt();
-        void Refinable_splay_set_memberhook();
-        void Refinable_splay_set_memberhook_bucket_threshold();
-        void Refinable_splay_set_memberhook_bucket_threshold_rt();
-
-        void Refinable_treap_set_basehook();
-        void Refinable_treap_set_basehook_bucket_threshold();
-        void Refinable_treap_set_basehook_bucket_threshold_rt();
-        void Refinable_treap_set_memberhook();
-        void Refinable_treap_set_memberhook_bucket_threshold();
-        void Refinable_treap_set_memberhook_bucket_threshold_rt();
-
-        CPPUNIT_TEST_SUITE(IntrusiveStripedSetHdrTest)
-            // ***********************************************************
-            // Striped set
-
-            CPPUNIT_TEST( Striped_list_basehook_cmp)
-            CPPUNIT_TEST( Striped_list_basehook_less)
-            CPPUNIT_TEST( Striped_list_basehook_cmpmix)
-            CPPUNIT_TEST( Striped_list_basehook_bucket_threshold)
-            CPPUNIT_TEST( Striped_list_basehook_bucket_threshold_rt)
-            CPPUNIT_TEST( Striped_list_memberhook_cmp)
-            CPPUNIT_TEST( Striped_list_memberhook_less)
-            CPPUNIT_TEST( Striped_list_memberhook_cmpmix)
-            CPPUNIT_TEST( Striped_list_memberhook_bucket_threshold)
-            CPPUNIT_TEST( Striped_list_memberhook_bucket_threshold_rt)
-
-            CPPUNIT_TEST( Striped_slist_basehook_cmp)
-            CPPUNIT_TEST( Striped_slist_basehook_less)
-            CPPUNIT_TEST( Striped_slist_basehook_cmpmix)
-            CPPUNIT_TEST( Striped_slist_basehook_bucket_threshold)
-            CPPUNIT_TEST( Striped_slist_basehook_bucket_threshold_rt)
-            CPPUNIT_TEST( Striped_slist_memberhook_cmp)
-            CPPUNIT_TEST( Striped_slist_memberhook_less)
-            CPPUNIT_TEST( Striped_slist_memberhook_cmpmix)
-            CPPUNIT_TEST( Striped_slist_memberhook_bucket_threshold)
-            CPPUNIT_TEST( Striped_slist_memberhook_bucket_threshold_rt)
-
-            CPPUNIT_TEST( Striped_set_basehook )
-            CPPUNIT_TEST( Striped_set_basehook_bucket_threshold )
-            CPPUNIT_TEST( Striped_set_basehook_bucket_threshold_rt )
-            CPPUNIT_TEST( Striped_set_memberhook)
-            CPPUNIT_TEST( Striped_set_memberhook_bucket_threshold )
-            CPPUNIT_TEST( Striped_set_memberhook_bucket_threshold_rt )
-
-            CPPUNIT_TEST( Striped_unordered_set_basehook )
-            CPPUNIT_TEST( Striped_unordered_set_basehook_bucket_threshold )
-            CPPUNIT_TEST( Striped_unordered_set_basehook_bucket_threshold_rt )
-            CPPUNIT_TEST( Striped_unordered_set_memberhook)
-            CPPUNIT_TEST( Striped_unordered_set_memberhook_bucket_threshold )
-            CPPUNIT_TEST( Striped_unordered_set_memberhook_bucket_threshold_rt )
-
-            CPPUNIT_TEST( Striped_avl_set_basehook )
-            CPPUNIT_TEST( Striped_avl_set_basehook_bucket_threshold )
-            CPPUNIT_TEST( Striped_avl_set_basehook_bucket_threshold_rt )
-            CPPUNIT_TEST( Striped_avl_set_memberhook)
-            CPPUNIT_TEST( Striped_avl_set_memberhook_bucket_threshold )
-            CPPUNIT_TEST( Striped_avl_set_memberhook_bucket_threshold_rt )
-
-            CPPUNIT_TEST( Striped_sg_set_basehook )
-            CPPUNIT_TEST( Striped_sg_set_basehook_bucket_threshold )
-            CPPUNIT_TEST( Striped_sg_set_basehook_bucket_threshold_rt )
-            CPPUNIT_TEST( Striped_sg_set_memberhook)
-            CPPUNIT_TEST( Striped_sg_set_memberhook_bucket_threshold )
-            CPPUNIT_TEST( Striped_sg_set_memberhook_bucket_threshold_rt )
-
-            CPPUNIT_TEST( Striped_splay_set_basehook )
-            CPPUNIT_TEST( Striped_splay_set_basehook_bucket_threshold )
-            CPPUNIT_TEST( Striped_splay_set_basehook_bucket_threshold_rt )
-            CPPUNIT_TEST( Striped_splay_set_memberhook)
-            CPPUNIT_TEST( Striped_splay_set_memberhook_bucket_threshold )
-            CPPUNIT_TEST( Striped_splay_set_memberhook_bucket_threshold_rt )
-
-            CPPUNIT_TEST( Striped_treap_set_basehook )
-            CPPUNIT_TEST( Striped_treap_set_basehook_bucket_threshold )
-            CPPUNIT_TEST( Striped_treap_set_basehook_bucket_threshold_rt )
-            CPPUNIT_TEST( Striped_treap_set_memberhook)
-            CPPUNIT_TEST( Striped_treap_set_memberhook_bucket_threshold )
-            CPPUNIT_TEST( Striped_treap_set_memberhook_bucket_threshold_rt )
-
-            // ***********************************************************
-            // Refinable set
-
-            CPPUNIT_TEST( Refinable_list_basehook_cmp)
-            CPPUNIT_TEST( Refinable_list_basehook_less)
-            CPPUNIT_TEST( Refinable_list_basehook_cmpmix)
-            CPPUNIT_TEST( Refinable_list_basehook_bucket_threshold)
-            CPPUNIT_TEST( Refinable_list_basehook_bucket_threshold_rt)
-            CPPUNIT_TEST( Refinable_list_memberhook_cmp)
-            CPPUNIT_TEST( Refinable_list_memberhook_less)
-            CPPUNIT_TEST( Refinable_list_memberhook_cmpmix)
-            CPPUNIT_TEST( Refinable_list_memberhook_bucket_threshold)
-            CPPUNIT_TEST( Refinable_list_memberhook_bucket_threshold_rt)
-
-            CPPUNIT_TEST( Refinable_slist_basehook_cmp)
-            CPPUNIT_TEST( Refinable_slist_basehook_less)
-            CPPUNIT_TEST( Refinable_slist_basehook_cmpmix)
-            CPPUNIT_TEST( Refinable_slist_basehook_bucket_threshold)
-            CPPUNIT_TEST( Refinable_slist_basehook_bucket_threshold_rt)
-            CPPUNIT_TEST( Refinable_slist_memberhook_cmp)
-            CPPUNIT_TEST( Refinable_slist_memberhook_less)
-            CPPUNIT_TEST( Refinable_slist_memberhook_cmpmix)
-            CPPUNIT_TEST( Refinable_slist_memberhook_bucket_threshold)
-            CPPUNIT_TEST( Refinable_slist_memberhook_bucket_threshold_rt)
-
-            CPPUNIT_TEST( Refinable_set_basehook )
-            CPPUNIT_TEST( Refinable_set_basehook_bucket_threshold )
-            CPPUNIT_TEST( Refinable_set_basehook_bucket_threshold_rt )
-            CPPUNIT_TEST( Refinable_set_memberhook)
-            CPPUNIT_TEST( Refinable_set_memberhook_bucket_threshold )
-            CPPUNIT_TEST( Refinable_set_memberhook_bucket_threshold_rt )
-
-            CPPUNIT_TEST( Refinable_unordered_set_basehook )
-            CPPUNIT_TEST( Refinable_unordered_set_basehook_bucket_threshold )
-            CPPUNIT_TEST( Refinable_unordered_set_basehook_bucket_threshold_rt )
-            CPPUNIT_TEST( Refinable_unordered_set_memberhook)
-            CPPUNIT_TEST( Refinable_unordered_set_memberhook_bucket_threshold )
-            CPPUNIT_TEST( Refinable_unordered_set_memberhook_bucket_threshold_rt )
-
-            CPPUNIT_TEST( Refinable_avl_set_basehook )
-            CPPUNIT_TEST( Refinable_avl_set_basehook_bucket_threshold )
-            CPPUNIT_TEST( Refinable_avl_set_basehook_bucket_threshold_rt )
-            CPPUNIT_TEST( Refinable_avl_set_memberhook)
-            CPPUNIT_TEST( Refinable_avl_set_memberhook_bucket_threshold )
-            CPPUNIT_TEST( Refinable_avl_set_memberhook_bucket_threshold_rt )
-
-            CPPUNIT_TEST( Refinable_sg_set_basehook )
-            CPPUNIT_TEST( Refinable_sg_set_basehook_bucket_threshold )
-            CPPUNIT_TEST( Refinable_sg_set_basehook_bucket_threshold_rt )
-            CPPUNIT_TEST( Refinable_sg_set_memberhook)
-            CPPUNIT_TEST( Refinable_sg_set_memberhook_bucket_threshold )
-            CPPUNIT_TEST( Refinable_sg_set_memberhook_bucket_threshold_rt )
-
-            CPPUNIT_TEST( Refinable_splay_set_basehook )
-            CPPUNIT_TEST( Refinable_splay_set_basehook_bucket_threshold )
-            CPPUNIT_TEST( Refinable_splay_set_basehook_bucket_threshold_rt )
-            CPPUNIT_TEST( Refinable_splay_set_memberhook)
-            CPPUNIT_TEST( Refinable_splay_set_memberhook_bucket_threshold )
-            CPPUNIT_TEST( Refinable_splay_set_memberhook_bucket_threshold_rt )
-
-            CPPUNIT_TEST( Refinable_treap_set_basehook )
-            CPPUNIT_TEST( Refinable_treap_set_basehook_bucket_threshold )
-            CPPUNIT_TEST( Refinable_treap_set_basehook_bucket_threshold_rt )
-            CPPUNIT_TEST( Refinable_treap_set_memberhook)
-            CPPUNIT_TEST( Refinable_treap_set_memberhook_bucket_threshold )
-            CPPUNIT_TEST( Refinable_treap_set_memberhook_bucket_threshold_rt )
-        CPPUNIT_TEST_SUITE_END()
-    };
-} // namespace set
-
-#endif // #ifndef CDSTEST_HDR_INTRUSIVE_STRIPED_SET_H
diff --git a/tests/test-hdr/set/hdr_michael_set_dhp.cpp b/tests/test-hdr/set/hdr_michael_set_dhp.cpp
deleted file mode 100644 (file)
index 3f19e03..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/container/michael_list_dhp.h>
-#include <cds/container/michael_set.h>
-
-namespace set {
-
-    namespace {
-        struct set_traits: public cc::michael_set::traits
-        {
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-        };
-
-        struct DHP_cmp_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-        };
-
-        struct DHP_less_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-
-        struct DHP_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-    }
-
-    void HashSetHdrTest::Michael_DHP_cmp()
-    {
-        typedef cc::MichaelList< cds::gc::DHP, item, DHP_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< cds::gc::DHP, list, set_traits > set;
-        test_int< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< cds::gc::DHP, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-    void HashSetHdrTest::Michael_DHP_less()
-    {
-        typedef cc::MichaelList< cds::gc::DHP, item, DHP_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< cds::gc::DHP, list, set_traits > set;
-        test_int< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< cds::gc::DHP, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-    void HashSetHdrTest::Michael_DHP_cmpmix()
-    {
-        typedef cc::MichaelList< cds::gc::DHP, item, DHP_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< cds::gc::DHP, list, set_traits > set;
-        test_int< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< cds::gc::DHP, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_michael_set_hp.cpp b/tests/test-hdr/set/hdr_michael_set_hp.cpp
deleted file mode 100644 (file)
index 7b44461..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/container/michael_list_hp.h>
-#include <cds/container/michael_set.h>
-
-namespace set {
-
-    namespace {
-        struct set_traits: public cc::michael_set::traits
-        {
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-        };
-
-        struct HP_cmp_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-        };
-
-        struct HP_less_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-
-        struct HP_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-    }
-
-    void HashSetHdrTest::Michael_HP_cmp()
-    {
-        typedef cc::MichaelList< cds::gc::HP, item, HP_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< cds::gc::HP, list, set_traits > set;
-        test_int< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< cds::gc::HP, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-    void HashSetHdrTest::Michael_HP_less()
-    {
-        typedef cc::MichaelList< cds::gc::HP, item, HP_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< cds::gc::HP, list, set_traits > set;
-        test_int< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< cds::gc::HP, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-    void HashSetHdrTest::Michael_HP_cmpmix()
-    {
-        typedef cc::MichaelList< cds::gc::HP, item, HP_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< cds::gc::HP, list, set_traits > set;
-        test_int< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< cds::gc::HP, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-
-} // namespace set
-
-CPPUNIT_TEST_SUITE_REGISTRATION(set::HashSetHdrTest);
-
diff --git a/tests/test-hdr/set/hdr_michael_set_lazy_dhp.cpp b/tests/test-hdr/set/hdr_michael_set_lazy_dhp.cpp
deleted file mode 100644 (file)
index 0f14571..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/container/lazy_list_dhp.h>
-#include <cds/container/michael_set.h>
-
-namespace set {
-
-    namespace {
-        struct set_traits: public cc::michael_set::traits
-        {
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-        };
-
-        struct DHP_cmp_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-        };
-
-        struct DHP_less_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-
-        struct DHP_cmpmix_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-    }
-
-    void HashSetHdrTest::Lazy_DHP_cmp()
-    {
-        typedef cc::LazyList< cds::gc::DHP, item, DHP_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< cds::gc::DHP, list, set_traits > set;
-        test_int< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< cds::gc::DHP, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-    void HashSetHdrTest::Lazy_DHP_less()
-    {
-        typedef cc::LazyList< cds::gc::DHP, item, DHP_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< cds::gc::DHP, list, set_traits > set;
-        test_int< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< cds::gc::DHP, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-    void HashSetHdrTest::Lazy_DHP_cmpmix()
-    {
-        typedef cc::LazyList< cds::gc::DHP, item, DHP_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< cds::gc::DHP, list, set_traits > set;
-        test_int< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< cds::gc::DHP, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_michael_set_lazy_hp.cpp b/tests/test-hdr/set/hdr_michael_set_lazy_hp.cpp
deleted file mode 100644 (file)
index edb4f91..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/container/lazy_list_hp.h>
-#include <cds/container/michael_set.h>
-
-namespace set {
-
-    namespace {
-        struct set_traits: public cc::michael_set::traits
-        {
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-        };
-
-        struct HP_cmp_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-        };
-
-        struct HP_less_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-
-        struct HP_cmpmix_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-    }
-
-    void HashSetHdrTest::Lazy_HP_cmp()
-    {
-        typedef cc::LazyList< cds::gc::HP, item, HP_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< cds::gc::HP, list, set_traits > set;
-        test_int< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< cds::gc::HP, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-    void HashSetHdrTest::Lazy_HP_less()
-    {
-        typedef cc::LazyList< cds::gc::HP, item, HP_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< cds::gc::HP, list, set_traits > set;
-        test_int< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< cds::gc::HP, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-    void HashSetHdrTest::Lazy_HP_cmpmix()
-    {
-        typedef cc::LazyList< cds::gc::HP, item, HP_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< cds::gc::HP, list, set_traits > set;
-        test_int< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< cds::gc::HP, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-
-} // namespace set
-
diff --git a/tests/test-hdr/set/hdr_michael_set_lazy_nogc.cpp b/tests/test-hdr/set/hdr_michael_set_lazy_nogc.cpp
deleted file mode 100644 (file)
index b74adca..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/container/lazy_list_nogc.h>
-#include <cds/container/michael_set_nogc.h>
-
-namespace set {
-
-    namespace {
-        struct set_traits: public cc::michael_set::traits
-        {
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-        };
-
-        struct nogc_cmp_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-        };
-
-        struct nogc_less_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-
-        struct nogc_equal_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::equal<HashSetHdrTest::item>   equal_to;
-            static const bool sort = false;
-        };
-
-        struct nogc_cmpmix_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-    }
-
-    void HashSetHdrTest::Lazy_nogc_cmp()
-    {
-        typedef cc::LazyList< cds::gc::nogc, item, nogc_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< cds::gc::nogc, list, set_traits > set;
-        test_int_nogc< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< cds::gc::nogc, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_nogc< opt_set >();
-    }
-
-    void HashSetHdrTest::Lazy_nogc_less()
-    {
-        typedef cc::LazyList< cds::gc::nogc, item, nogc_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< cds::gc::nogc, list, set_traits > set;
-        test_int_nogc< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< cds::gc::nogc, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_nogc< opt_set >();
-    }
-
-    void HashSetHdrTest::Lazy_nogc_equal()
-    {
-        typedef cc::LazyList< cds::gc::nogc, item, nogc_equal_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< cds::gc::nogc, list, set_traits > set;
-        test_int_nogc_unordered< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< cds::gc::nogc, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_nogc_unordered< opt_set >();
-    }
-
-    void HashSetHdrTest::Lazy_nogc_cmpmix()
-    {
-        typedef cc::LazyList< cds::gc::nogc, item, nogc_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< cds::gc::nogc, list, set_traits > set;
-        test_int_nogc< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< cds::gc::nogc, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_nogc< opt_set >();
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_michael_set_lazy_rcu_gpb.cpp b/tests/test-hdr/set/hdr_michael_set_lazy_rcu_gpb.cpp
deleted file mode 100644 (file)
index 0b3163d..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/container/lazy_list_rcu.h>
-#include <cds/container/michael_set_rcu.h>
-
-namespace set {
-
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_type;
-
-        struct set_traits: public cc::michael_set::traits
-        {
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-        };
-
-        struct RCU_GPB_cmp_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-        };
-
-        struct RCU_GPB_less_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-
-        struct RCU_GPB_cmpmix_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-    }
-
-    void HashSetHdrTest::Lazy_RCU_GPB_cmp()
-    {
-        typedef cc::LazyList< rcu_type, item, RCU_GPB_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-    }
-
-    void HashSetHdrTest::Lazy_RCU_GPB_less()
-    {
-        typedef cc::LazyList< rcu_type, item, RCU_GPB_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-    }
-
-    void HashSetHdrTest::Lazy_RCU_GPB_cmpmix()
-    {
-        typedef cc::LazyList< rcu_type, item, RCU_GPB_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_michael_set_lazy_rcu_gpi.cpp b/tests/test-hdr/set/hdr_michael_set_lazy_rcu_gpi.cpp
deleted file mode 100644 (file)
index faf540c..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/container/lazy_list_rcu.h>
-#include <cds/container/michael_set_rcu.h>
-
-namespace set {
-
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
-
-        struct set_traits: public cc::michael_set::traits
-        {
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-        };
-
-        struct RCU_GPI_cmp_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-        };
-
-        struct RCU_GPI_less_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-
-        struct RCU_GPI_cmpmix_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-    }
-
-    void HashSetHdrTest::Lazy_RCU_GPI_cmp()
-    {
-        typedef cc::LazyList< rcu_type, item, RCU_GPI_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-    }
-
-    void HashSetHdrTest::Lazy_RCU_GPI_less()
-    {
-        typedef cc::LazyList< rcu_type, item, RCU_GPI_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-    }
-
-    void HashSetHdrTest::Lazy_RCU_GPI_cmpmix()
-    {
-        typedef cc::LazyList< rcu_type, item, RCU_GPI_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_michael_set_lazy_rcu_gpt.cpp b/tests/test-hdr/set/hdr_michael_set_lazy_rcu_gpt.cpp
deleted file mode 100644 (file)
index 6aff4ce..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/container/lazy_list_rcu.h>
-#include <cds/container/michael_set_rcu.h>
-
-namespace set {
-
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_type;
-
-        struct set_traits: public cc::michael_set::traits
-        {
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-        };
-
-        struct RCU_GPT_cmp_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-        };
-
-        struct RCU_GPT_less_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-
-        struct RCU_GPT_cmpmix_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-    }
-
-    void HashSetHdrTest::Lazy_RCU_GPT_cmp()
-    {
-        typedef cc::LazyList< rcu_type, item, RCU_GPT_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-    }
-
-    void HashSetHdrTest::Lazy_RCU_GPT_less()
-    {
-        typedef cc::LazyList< rcu_type, item, RCU_GPT_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-    }
-
-    void HashSetHdrTest::Lazy_RCU_GPT_cmpmix()
-    {
-        typedef cc::LazyList< rcu_type, item, RCU_GPT_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_michael_set_lazy_rcu_shb.cpp b/tests/test-hdr/set/hdr_michael_set_lazy_rcu_shb.cpp
deleted file mode 100644 (file)
index 82a5218..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/container/lazy_list_rcu.h>
-#include <cds/container/michael_set_rcu.h>
-
-namespace set {
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_type;
-
-        struct set_traits: public cc::michael_set::traits
-        {
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-        };
-
-        struct RCU_SHB_cmp_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-        };
-
-        struct RCU_SHB_less_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-
-        struct RCU_SHB_cmpmix_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-    }
-#endif
-
-    void HashSetHdrTest::Lazy_RCU_SHB_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyList< rcu_type, item, RCU_SHB_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-#endif
-    }
-
-    void HashSetHdrTest::Lazy_RCU_SHB_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyList< rcu_type, item, RCU_SHB_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-#endif
-    }
-
-    void HashSetHdrTest::Lazy_RCU_SHB_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyList< rcu_type, item, RCU_SHB_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-#endif
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_michael_set_lazy_rcu_sht.cpp b/tests/test-hdr/set/hdr_michael_set_lazy_rcu_sht.cpp
deleted file mode 100644 (file)
index 8a94495..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/container/lazy_list_rcu.h>
-#include <cds/container/michael_set_rcu.h>
-
-namespace set {
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_type;
-
-        struct set_traits: public cc::michael_set::traits
-        {
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-        };
-
-        struct RCU_SHT_cmp_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-        };
-
-        struct RCU_SHT_less_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-
-        struct RCU_SHT_cmpmix_traits: public cc::lazy_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-    }
-#endif
-
-    void HashSetHdrTest::Lazy_RCU_SHT_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyList< rcu_type, item, RCU_SHT_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-#endif
-    }
-
-    void HashSetHdrTest::Lazy_RCU_SHT_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyList< rcu_type, item, RCU_SHT_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-#endif
-    }
-
-    void HashSetHdrTest::Lazy_RCU_SHT_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyList< rcu_type, item, RCU_SHT_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-#endif
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_michael_set_nogc.cpp b/tests/test-hdr/set/hdr_michael_set_nogc.cpp
deleted file mode 100644 (file)
index 8471c0a..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/container/michael_list_nogc.h>
-#include <cds/container/michael_set_nogc.h>
-
-namespace set {
-
-    namespace {
-        struct set_traits: public cc::michael_set::traits
-        {
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-        };
-
-        struct nogc_cmp_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-        };
-
-        struct nogc_less_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-
-        struct nogc_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-    }
-
-    void HashSetHdrTest::Michael_nogc_cmp()
-    {
-        typedef cc::MichaelList< cds::gc::nogc, item, nogc_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< cds::gc::nogc, list, set_traits > set;
-        test_int_nogc< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< cds::gc::nogc, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_nogc< opt_set >();
-    }
-
-    void HashSetHdrTest::Michael_nogc_less()
-    {
-        typedef cc::MichaelList< cds::gc::nogc, item, nogc_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< cds::gc::nogc, list, set_traits > set;
-        test_int_nogc< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< cds::gc::nogc, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_nogc< opt_set >();
-    }
-
-    void HashSetHdrTest::Michael_nogc_cmpmix()
-    {
-        typedef cc::MichaelList< cds::gc::nogc, item, nogc_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< cds::gc::nogc, list, set_traits > set;
-        test_int_nogc< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< cds::gc::nogc, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_nogc< opt_set >();
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_michael_set_rcu_gpb.cpp b/tests/test-hdr/set/hdr_michael_set_rcu_gpb.cpp
deleted file mode 100644 (file)
index cb1310f..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/container/michael_list_rcu.h>
-#include <cds/container/michael_set_rcu.h>
-
-namespace set {
-
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_type;
-
-        struct set_traits: public cc::michael_set::traits
-        {
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-        };
-
-        struct RCU_GPB_cmp_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-        };
-
-        struct RCU_GPB_less_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-
-        struct RCU_GPB_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-    }
-
-    void HashSetHdrTest::Michael_RCU_GPB_cmp()
-    {
-        typedef cc::MichaelList< rcu_type, item, RCU_GPB_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-    }
-
-    void HashSetHdrTest::Michael_RCU_GPB_less()
-    {
-        typedef cc::MichaelList< rcu_type, item, RCU_GPB_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-    }
-
-    void HashSetHdrTest::Michael_RCU_GPB_cmpmix()
-    {
-        typedef cc::MichaelList< rcu_type, item, RCU_GPB_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_michael_set_rcu_gpi.cpp b/tests/test-hdr/set/hdr_michael_set_rcu_gpi.cpp
deleted file mode 100644 (file)
index 183f76b..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/container/michael_list_rcu.h>
-#include <cds/container/michael_set_rcu.h>
-
-namespace set {
-
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
-
-        struct set_traits: public cc::michael_set::traits
-        {
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-        };
-
-        struct RCU_GPI_cmp_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-        };
-
-        struct RCU_GPI_less_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-
-        struct RCU_GPI_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-    }
-
-    void HashSetHdrTest::Michael_RCU_GPI_cmp()
-    {
-        typedef cc::MichaelList< rcu_type, item, RCU_GPI_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-    }
-
-    void HashSetHdrTest::Michael_RCU_GPI_less()
-    {
-        typedef cc::MichaelList< rcu_type, item, RCU_GPI_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-    }
-
-    void HashSetHdrTest::Michael_RCU_GPI_cmpmix()
-    {
-        typedef cc::MichaelList< rcu_type, item, RCU_GPI_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_michael_set_rcu_gpt.cpp b/tests/test-hdr/set/hdr_michael_set_rcu_gpt.cpp
deleted file mode 100644 (file)
index 64f6b3a..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/container/michael_list_rcu.h>
-#include <cds/container/michael_set_rcu.h>
-
-namespace set {
-
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_type;
-
-        struct set_traits: public cc::michael_set::traits
-        {
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-        };
-
-        struct RCU_GPT_cmp_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-        };
-
-        struct RCU_GPT_less_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-
-        struct RCU_GPT_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-    }
-
-    void HashSetHdrTest::Michael_RCU_GPT_cmp()
-    {
-        typedef cc::MichaelList< rcu_type, item, RCU_GPT_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-    }
-
-    void HashSetHdrTest::Michael_RCU_GPT_less()
-    {
-        typedef cc::MichaelList< rcu_type, item, RCU_GPT_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-    }
-
-    void HashSetHdrTest::Michael_RCU_GPT_cmpmix()
-    {
-        typedef cc::MichaelList< rcu_type, item, RCU_GPT_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-    }
-
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_michael_set_rcu_shb.cpp b/tests/test-hdr/set/hdr_michael_set_rcu_shb.cpp
deleted file mode 100644 (file)
index 7ae7a01..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/container/michael_list_rcu.h>
-#include <cds/container/michael_set_rcu.h>
-
-namespace set {
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_type;
-
-        struct set_traits: public cc::michael_set::traits
-        {
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-        };
-
-        struct RCU_SHB_cmp_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-        };
-
-        struct RCU_SHB_less_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-
-        struct RCU_SHB_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-    }
-#endif
-
-    void HashSetHdrTest::Michael_RCU_SHB_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelList< rcu_type, item, RCU_SHB_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-#endif
-    }
-
-    void HashSetHdrTest::Michael_RCU_SHB_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelList< rcu_type, item, RCU_SHB_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-#endif
-    }
-
-    void HashSetHdrTest::Michael_RCU_SHB_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelList< rcu_type, item, RCU_SHB_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-#endif
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_michael_set_rcu_sht.cpp b/tests/test-hdr/set/hdr_michael_set_rcu_sht.cpp
deleted file mode 100644 (file)
index f2d88a5..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/container/michael_list_rcu.h>
-#include <cds/container/michael_set_rcu.h>
-
-namespace set {
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_type;
-
-        struct set_traits: public cc::michael_set::traits
-        {
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-        };
-
-        struct RCU_SHT_cmp_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-        };
-
-        struct RCU_SHT_less_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-
-        struct RCU_SHT_cmpmix_traits: public cc::michael_list::traits
-        {
-            typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-        };
-    }
-#endif
-
-    void HashSetHdrTest::Michael_RCU_SHT_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelList< rcu_type, item, RCU_SHT_cmp_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-#endif
-    }
-
-    void HashSetHdrTest::Michael_RCU_SHT_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelList< rcu_type, item, RCU_SHT_less_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-#endif
-    }
-
-    void HashSetHdrTest::Michael_RCU_SHT_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelList< rcu_type, item, RCU_SHT_cmpmix_traits > list;
-
-        // traits-based version
-        typedef cc::MichaelHashSet< rcu_type, list, set_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::MichaelHashSet< rcu_type, list,
-            cc::michael_set::make_traits<
-                cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-#endif
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_refinable_hashset_boost_flat_set.cpp b/tests/test-hdr/set/hdr_refinable_hashset_boost_flat_set.cpp
deleted file mode 100644 (file)
index 6e3c454..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_striped_set.h"
-
-#include <boost/version.hpp>
-#include <cds/details/defs.h>
-
-#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION <= 105500
-namespace set {
-    void StripedSetHdrTest::Refinable_boost_flat_set()
-    {
-        CPPUNIT_MESSAGE( "Skipped; for Microsoft Visual C++ 2013 and boost::container::flat_set you should use boost version 1.56 or above" );
-    }
-}
-
-#elif BOOST_VERSION >= 104800
-
-#include <cds/container/striped_set/boost_flat_set.h>
-#include <cds/container/striped_set.h>
-#include <cds/sync/spinlock.h>
-
-namespace set {
-
-    namespace {
-        typedef boost::container::flat_set< StripedSetHdrTest::item, StripedSetHdrTest::less<StripedSetHdrTest::item> > set_t;
-
-        struct my_copy_policy {
-            typedef set_t::iterator iterator;
-
-            void operator()( set_t& set, iterator itWhat )
-            {
-                set.insert( *itWhat );
-            }
-        };
-    }
-
-    void StripedSetHdrTest::Refinable_boost_flat_set()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-        >   set_cmp;
-        test_striped< set_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_less;
-        test_striped< set_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::less< less<item> >
-        >   set_cmpmix;
-        test_striped< set_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedSet< set_t
-            , co::mutex_policy< cc::striped_set::refinable<cds::sync::reentrant_spin> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_spin;
-        test_striped< set_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(1024)");
-        {
-            typedef cc::StripedSet< set_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   set_less_resizing_lf;
-            set_less_resizing_lf s(30, cc::striped_set::load_factor_resizing<0>(1024));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-        >   set_less_resizing_lf16;
-        test_striped< set_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(1024)");
-        {
-            typedef cc::StripedSet< set_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   set_less_resizing_sbt;
-            set_less_resizing_sbt s(30, cc::striped_set::single_bucket_size_threshold<0>(1024) );
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<256>");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<256> >
-        >   set_less_resizing_sbt16;
-        test_striped< set_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, copy_item");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, swap_item");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, move_item");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped< set_move_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, special copy_item");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped< set_special_copy_item >();
-
-    }
-
-}   // namespace set
-
-#else // BOOST_VERSION < 104800
-
-namespace set {
-    void StripedSetHdrTest::Refinable_boost_flat_set()
-    {
-        CPPUNIT_MESSAGE( "Skipped; for boost::container::flat_set you should use boost version 1.48 or above" );
-    }
-}
-#endif  // BOOST_VERSION
diff --git a/tests/test-hdr/set/hdr_refinable_hashset_boost_list.cpp b/tests/test-hdr/set/hdr_refinable_hashset_boost_list.cpp
deleted file mode 100644 (file)
index 3172480..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_striped_set.h"
-
-#include <boost/version.hpp>
-#include <cds/details/defs.h>
-#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION <= 105500
-namespace set {
-    void StripedSetHdrTest::Refinable_boost_list()
-    {
-        CPPUNIT_MESSAGE("Skipped; for Microsoft Visual C++ 2013 and boost::container::list you should use boost version 1.56 or above");
-    }
-}
-
-#elif BOOST_VERSION >= 104800
-
-#include <cds/container/striped_set/boost_list.h>
-#include <cds/container/striped_set.h>
-#include <cds/sync/spinlock.h>
-
-namespace set {
-
-    namespace {
-        struct my_copy_policy {
-            typedef boost::container::list<StripedSetHdrTest::item> list_type;
-            typedef list_type::iterator iterator;
-
-            void operator()( list_type& list, iterator itInsert, iterator itWhat )
-            {
-                list.insert( itInsert, std::make_pair(itWhat->key(), itWhat->val()) );
-            }
-        };
-
-        typedef boost::container::list<StripedSetHdrTest::item> sequence_t;
-    }
-
-    void StripedSetHdrTest::Refinable_boost_list()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-        >   set_cmp;
-        test_striped2< set_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_less;
-        test_striped2< set_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::less< less<item> >
-        >   set_cmpmix;
-        test_striped2< set_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedSet< sequence_t
-            , co::mutex_policy< cc::striped_set::refinable<cds::sync::reentrant_spin> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_spin;
-        test_striped2< set_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   set_less_resizing_lf;
-            set_less_resizing_lf s(30, cc::striped_set::load_factor_resizing<0>(8));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<4>");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<4> >
-        >   set_less_resizing_lf16;
-        test_striped2< set_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   set_less_resizing_sbt;
-            set_less_resizing_sbt s(30, cc::striped_set::single_bucket_size_threshold<0>(8));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<6>");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<6> >
-        >   set_less_resizing_sbt16;
-        test_striped2< set_less_resizing_sbt16 >();
-
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "copy_item");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped2< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "swap_item");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped2< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "move_item");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped2< set_move_item >();
-
-        CPPUNIT_MESSAGE( "special copy policy");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped2< set_special_copy_item >();
-    }
-
-}   // namespace set
-
-#else // BOOST_VERSION < 104800
-
-namespace set {
-    void StripedSetHdrTest::Refinable_boost_list()
-    {
-        CPPUNIT_MESSAGE( "Skipped; for boost::container::list you should use boost version 1.48 or above" );
-    }
-}
-#endif  // BOOST_VERSION
diff --git a/tests/test-hdr/set/hdr_refinable_hashset_boost_set.cpp b/tests/test-hdr/set/hdr_refinable_hashset_boost_set.cpp
deleted file mode 100644 (file)
index e7165c6..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_striped_set.h"
-
-#include <boost/version.hpp>
-#include <cds/details/defs.h>
-#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION <= 105500
-namespace set {
-    void StripedSetHdrTest::Refinable_boost_set()
-    {
-        CPPUNIT_MESSAGE("Skipped; for Microsoft Visual C++ 2013 and boost::container::set you should use boost version 1.56 or above");
-    }
-}
-
-#elif BOOST_VERSION >= 104800
-
-#include <cds/container/striped_set/boost_set.h>
-#include <cds/container/striped_set.h>
-#include <cds/sync/spinlock.h>
-
-namespace set {
-
-    namespace {
-        typedef boost::container::set< StripedSetHdrTest::item, StripedSetHdrTest::less<StripedSetHdrTest::item> > set_t;
-
-        struct my_copy_policy {
-            typedef set_t::iterator iterator;
-
-            void operator()( set_t& set, iterator itWhat )
-            {
-                set.insert( *itWhat );
-            }
-        };
-    }
-
-    void StripedSetHdrTest::Refinable_boost_set()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-        >   set_cmp;
-        test_striped< set_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_less;
-        test_striped< set_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::less< less<item> >
-        >   set_cmpmix;
-        test_striped< set_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedSet< set_t
-            , co::mutex_policy< cc::striped_set::refinable<cds::sync::reentrant_spin> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_spin;
-        test_striped< set_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(1024)");
-        {
-            typedef cc::StripedSet< set_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   set_less_resizing_lf;
-            set_less_resizing_lf s(30, cc::striped_set::load_factor_resizing<0>(1024));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-        >   set_less_resizing_lf16;
-        test_striped< set_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(1024)");
-        {
-            typedef cc::StripedSet< set_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   set_less_resizing_sbt;
-            set_less_resizing_sbt s(30, cc::striped_set::single_bucket_size_threshold<0>(1024) );
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<256>");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<256> >
-        >   set_less_resizing_sbt16;
-        test_striped< set_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, copy_item");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, swap_item");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, move_item");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped< set_move_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, special copy_item");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped< set_special_copy_item >();
-    }
-
-}   // namespace set
-
-#else // BOOST_VERSION < 104800
-
-namespace set {
-    void StripedSetHdrTest::Refinable_boost_set()
-    {
-        CPPUNIT_MESSAGE( "Skipped; for boost::container::set you should use boost version 1.48 or above" );
-    }
-}
-#endif  // BOOST_VERSION
diff --git a/tests/test-hdr/set/hdr_refinable_hashset_boost_stable_vector.cpp b/tests/test-hdr/set/hdr_refinable_hashset_boost_stable_vector.cpp
deleted file mode 100644 (file)
index 98d9bf8..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_striped_set.h"
-
-#include <boost/version.hpp>
-#include <cds/details/defs.h>
-#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION <= 105500
-namespace set {
-    void StripedSetHdrTest::Refinable_boost_stable_vector()
-    {
-        CPPUNIT_MESSAGE("Skipped; for Microsoft Visual C++ 2013 and boost::container::stable_vector you should use boost version 1.56 or above");
-    }
-}
-
-#elif BOOST_VERSION >= 104800
-
-#include <cds/details/defs.h>
-#include <cds/container/striped_set/boost_stable_vector.h>
-#include <cds/container/striped_set.h>
-#include <cds/sync/spinlock.h>
-
-namespace set {
-
-    namespace {
-        struct my_copy_policy {
-            typedef boost::container::stable_vector<StripedSetHdrTest::item> vector_type;
-            typedef vector_type::iterator iterator;
-
-            void operator()( vector_type& vec, iterator itInsert, iterator itWhat )
-            {
-                vec.insert( itInsert, *itWhat );
-            }
-        };
-
-        typedef boost::container::stable_vector<StripedSetHdrTest::item> sequence_t;
-    }
-
-    void StripedSetHdrTest::Refinable_boost_stable_vector()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-        >   set_cmp;
-        test_striped2< set_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_less;
-        test_striped2< set_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::less< less<item> >
-        >   set_cmpmix;
-        test_striped2< set_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedSet< sequence_t
-            , co::mutex_policy< cc::striped_set::refinable<cds::sync::reentrant_spin> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_spin;
-        test_striped2< set_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   set_less_resizing_lf;
-            set_less_resizing_lf s(30, cc::striped_set::load_factor_resizing<0>(8));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<4>");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<4> >
-        >   set_less_resizing_lf16;
-        test_striped2< set_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   set_less_resizing_sbt;
-            set_less_resizing_sbt s(30, cc::striped_set::single_bucket_size_threshold<0>(8));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<6>");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<6> >
-        >   set_less_resizing_sbt16;
-        test_striped2< set_less_resizing_sbt16 >();
-
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "copy_item");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped2< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "swap_item");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped2< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "move_item");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped2< set_move_item >();
-
-        CPPUNIT_MESSAGE( "special copy policy");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped2< set_special_copy_item >();
-    }
-
-}   // namespace set
-
-#else // BOOST_VERSION < 104800
-
-namespace set {
-    void StripedSetHdrTest::Refinable_boost_stable_vector()
-    {
-        CPPUNIT_MESSAGE( "Skipped; for boost::container::stable_vector you should use boost version 1.48 or above" );
-    }
-}
-#endif  // BOOST_VERSION
diff --git a/tests/test-hdr/set/hdr_refinable_hashset_boost_unordered_set.cpp b/tests/test-hdr/set/hdr_refinable_hashset_boost_unordered_set.cpp
deleted file mode 100644 (file)
index 51abbb2..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_striped_set.h"
-#include <cds/container/striped_set/boost_unordered_set.h>
-#include <cds/container/striped_set.h>
-#include <cds/sync/spinlock.h>
-
-namespace set {
-
-    namespace {
-        struct equal_item
-        {
-            template <typename T>
-            bool operator ()( T const& i1, T const& i2) const
-            {
-                return i1.key() == i2.key();
-            }
-        };
-
-        typedef boost::unordered_set< StripedSetHdrTest::item, StripedSetHdrTest::hash_int, equal_item > set_t;
-
-        struct my_copy_policy {
-            typedef set_t::iterator iterator;
-
-            void operator()( set_t& set, iterator itWhat )
-            {
-                set.insert( std::make_pair(itWhat->key(), itWhat->val()) );
-            }
-        };
-    }
-
-    void StripedSetHdrTest::Refinable_boost_unordered_set()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-        >   set_cmp;
-        test_striped< set_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_less;
-        test_striped< set_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::less< less<item> >
-        >   set_cmpmix;
-        test_striped< set_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedSet< set_t
-            , co::mutex_policy< cc::striped_set::refinable<cds::sync::reentrant_spin> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_spin;
-        test_striped< set_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(1024)");
-        {
-            typedef cc::StripedSet< set_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   set_less_resizing_lf;
-            set_less_resizing_lf s(30, cc::striped_set::load_factor_resizing<0>(1024));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-        >   set_less_resizing_lf16;
-        test_striped< set_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(1024)");
-        {
-            typedef cc::StripedSet< set_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   set_less_resizing_sbt;
-            set_less_resizing_sbt s(30, cc::striped_set::single_bucket_size_threshold<0>(1024) );
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<256>");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<256> >
-        >   set_less_resizing_sbt16;
-        test_striped< set_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, copy_item");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, swap_item");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, move_item");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped< set_move_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, special copy_item");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped< set_special_copy_item >();
-
-    }
-
-}   // namespace set
diff --git a/tests/test-hdr/set/hdr_refinable_hashset_boost_vector.cpp b/tests/test-hdr/set/hdr_refinable_hashset_boost_vector.cpp
deleted file mode 100644 (file)
index 934b849..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_striped_set.h"
-
-#include <boost/version.hpp>
-#include <cds/details/defs.h>
-#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION <= 105500
-namespace set {
-    void StripedSetHdrTest::Refinable_boost_vector()
-    {
-        CPPUNIT_MESSAGE("Skipped; for Microsoft Visual C++ 2013 and boost::container::vector you should use boost version 1.56 or above");
-    }
-}
-
-#elif BOOST_VERSION >= 104800
-
-#include <cds/details/defs.h>
-
-#include <cds/container/striped_set/boost_vector.h>
-#include <cds/container/striped_set.h>
-#include <cds/sync/spinlock.h>
-
-namespace set {
-
-    namespace {
-        struct my_copy_policy {
-            typedef boost::container::vector<StripedSetHdrTest::item> vector_type;
-            typedef vector_type::iterator iterator;
-
-            void operator()( vector_type& vec, iterator itInsert, iterator itWhat )
-            {
-                vec.insert( itInsert, std::make_pair(itWhat->key(), itWhat->val()) );
-            }
-        };
-
-        typedef boost::container::vector<StripedSetHdrTest::item>  sequence_t;
-    }
-
-    void StripedSetHdrTest::Refinable_boost_vector()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-        >   set_cmp;
-        test_striped2< set_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_less;
-        test_striped2< set_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::less< less<item> >
-        >   set_cmpmix;
-        test_striped2< set_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedSet< sequence_t
-            , co::mutex_policy< cc::striped_set::refinable<cds::sync::reentrant_spin> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_spin;
-        test_striped2< set_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   set_less_resizing_lf;
-            set_less_resizing_lf s(30, cc::striped_set::load_factor_resizing<0>(8));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<4>");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<4> >
-        >   set_less_resizing_lf16;
-        test_striped2< set_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   set_less_resizing_sbt;
-            set_less_resizing_sbt s(30, cc::striped_set::single_bucket_size_threshold<0>(8));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<6>");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<6> >
-        >   set_less_resizing_sbt16;
-        test_striped2< set_less_resizing_sbt16 >();
-
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "copy_item");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped2< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "swap_item");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped2< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "move_item");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped2< set_move_item >();
-
-        CPPUNIT_MESSAGE( "special copy policy");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped2< set_special_copy_item >();
-    }
-
-}   // namespace set
-
-#else // BOOST_VERSION < 104800
-
-namespace set {
-    void StripedSetHdrTest::Refinable_boost_vector()
-    {
-        CPPUNIT_MESSAGE( "Skipped; for boost::container::vector you should use boost version 1.48 or above" );
-    }
-}
-#endif  // BOOST_VERSION
diff --git a/tests/test-hdr/set/hdr_refinable_hashset_hashset_std.cpp b/tests/test-hdr/set/hdr_refinable_hashset_hashset_std.cpp
deleted file mode 100644 (file)
index 33227b0..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_striped_set.h"
-#include <cds/container/striped_set/std_hash_set.h>
-#include <cds/container/striped_set.h>
-#include <cds/sync/spinlock.h>
-
-namespace set {
-
-    namespace {
-        struct equal_item
-        {
-            template <typename T>
-            bool operator ()( T const& i1, T const& i2) const
-            {
-                return i1.key() == i2.key();
-            }
-        };
-
-        typedef std::unordered_set< StripedSetHdrTest::item, StripedSetHdrTest::hash_int, equal_item > set_t;
-
-        struct my_copy_policy {
-            typedef set_t::iterator iterator;
-
-            void operator()( set_t& set, iterator itWhat )
-            {
-                set.insert( std::make_pair(itWhat->key(), itWhat->val()) );
-            }
-        };
-    }
-
-    void StripedSetHdrTest::Refinable_hashset()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-        >   set_cmp;
-        test_striped< set_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_less;
-        test_striped< set_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::less< less<item> >
-        >   set_cmpmix;
-        test_striped< set_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedSet< set_t
-            , co::mutex_policy< cc::striped_set::refinable<cds::sync::reentrant_spin> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_spin;
-        test_striped< set_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(1024)");
-        {
-            typedef cc::StripedSet< set_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   set_less_resizing_lf;
-            set_less_resizing_lf s(30, cc::striped_set::load_factor_resizing<0>(1024));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-        >   set_less_resizing_lf16;
-        test_striped< set_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(1024)");
-        {
-            typedef cc::StripedSet< set_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   set_less_resizing_sbt;
-            set_less_resizing_sbt s(30, cc::striped_set::single_bucket_size_threshold<0>(1024) );
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<256>");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<256> >
-        >   set_less_resizing_sbt16;
-        test_striped< set_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, copy_item");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, swap_item");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, move_item");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped< set_move_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, special copy_item");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped< set_special_copy_item >();
-    }
-
-}   // namespace set
diff --git a/tests/test-hdr/set/hdr_refinable_hashset_list.cpp b/tests/test-hdr/set/hdr_refinable_hashset_list.cpp
deleted file mode 100644 (file)
index e5525fe..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_striped_set.h"
-#include <cds/container/striped_set/std_list.h>
-#include <cds/container/striped_set.h>
-#include <cds/sync/spinlock.h>
-
-namespace set {
-
-    namespace {
-        struct my_copy_policy {
-            typedef std::list<StripedSetHdrTest::item> list_type;
-            typedef list_type::iterator iterator;
-
-            void operator()( list_type& list, iterator itInsert, iterator itWhat )
-            {
-                list.insert( itInsert, std::make_pair(itWhat->key(), itWhat->val()) );
-            }
-        };
-
-        typedef std::list<StripedSetHdrTest::item> sequence_t;
-    }
-
-    void StripedSetHdrTest::Refinable_list()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-        >   set_cmp;
-        test_striped2< set_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_less;
-        test_striped2< set_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::less< less<item> >
-        >   set_cmpmix;
-        test_striped2< set_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedSet< sequence_t
-            , co::mutex_policy< cc::striped_set::refinable<cds::sync::reentrant_spin> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_spin;
-        test_striped2< set_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   set_less_resizing_lf;
-            set_less_resizing_lf s(30, cc::striped_set::load_factor_resizing<0>(8));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<4>");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<4> >
-        >   set_less_resizing_lf16;
-        test_striped2< set_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   set_less_resizing_sbt;
-            set_less_resizing_sbt s(30, cc::striped_set::single_bucket_size_threshold<0>(8));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<6>");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<6> >
-        >   set_less_resizing_sbt16;
-        test_striped2< set_less_resizing_sbt16 >();
-
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "copy_item");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped2< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "swap_item");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped2< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "move_item");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped2< set_move_item >();
-
-        CPPUNIT_MESSAGE( "special copy policy");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped2< set_special_copy_item >();
-    }
-
-}   // namespace set
diff --git a/tests/test-hdr/set/hdr_refinable_hashset_set.cpp b/tests/test-hdr/set/hdr_refinable_hashset_set.cpp
deleted file mode 100644 (file)
index cfc9714..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_striped_set.h"
-#include <cds/container/striped_set/std_set.h>
-#include <cds/container/striped_set.h>
-#include <cds/sync/spinlock.h>
-
-namespace set {
-
-    namespace {
-        struct my_copy_policy {
-            typedef std::set<StripedSetHdrTest::item, StripedSetHdrTest::less<StripedSetHdrTest::item> > set_type;
-            typedef set_type::iterator iterator;
-
-            void operator()( set_type& set, iterator itWhat )
-            {
-                set.insert( std::make_pair(itWhat->key(), itWhat->val()) );
-            }
-        };
-
-        typedef std::set<StripedSetHdrTest::item, StripedSetHdrTest::less<StripedSetHdrTest::item> > set_t;
-    }
-
-    void StripedSetHdrTest::Refinable_set()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-        >   set_cmp;
-        test_striped< set_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_less;
-        test_striped< set_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::less< less<item> >
-        >   set_cmpmix;
-        test_striped< set_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedSet< set_t
-            , co::mutex_policy< cc::striped_set::refinable<cds::sync::reentrant_spin> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_spin;
-        test_striped< set_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(1024)");
-        {
-            typedef cc::StripedSet< set_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   set_less_resizing_lf;
-            set_less_resizing_lf s(30, cc::striped_set::load_factor_resizing<0>(1024));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-        >   set_less_resizing_lf16;
-        test_striped< set_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(1024)");
-        {
-            typedef cc::StripedSet< set_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   set_less_resizing_sbt;
-            set_less_resizing_sbt s(30, cc::striped_set::single_bucket_size_threshold<0>(1024) );
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<256>");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<256> >
-        >   set_less_resizing_sbt16;
-        test_striped< set_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, copy_item");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, swap_item");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, move_item");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped< set_move_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, special copy_item");
-        typedef cc::StripedSet< set_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped< set_special_copy_item >();
-    }
-}   // namespace set
diff --git a/tests/test-hdr/set/hdr_refinable_hashset_slist.cpp b/tests/test-hdr/set/hdr_refinable_hashset_slist.cpp
deleted file mode 100644 (file)
index 9979d98..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_striped_set.h"
-#include <boost/version.hpp>
-#include <cds/details/defs.h>
-#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION <= 105500
-namespace set {
-    void StripedSetHdrTest::Refinable_slist()
-    {
-        CPPUNIT_MESSAGE("Skipped; for Microsoft Visual C++ 2013 and boost::container::slist you should use boost version 1.56 or above");
-    }
-}
-
-#elif BOOST_VERSION >= 104800
-
-#include <cds/container/striped_set/boost_slist.h>
-#include <cds/container/striped_set.h>
-#include <cds/sync/spinlock.h>
-
-namespace set {
-
-    namespace {
-        struct my_copy_policy {
-            typedef boost::container::slist<StripedSetHdrTest::item> list_type;
-            typedef list_type::iterator iterator;
-
-            void operator()( list_type& list, iterator itInsert, iterator itWhat )
-            {
-                list.insert_after( itInsert, StripedSetHdrTest::item(std::make_pair(itWhat->key(), itWhat->val())) );
-            }
-        };
-
-        typedef boost::container::slist<StripedSetHdrTest::item> sequence_t;
-    }
-
-    void StripedSetHdrTest::Refinable_slist()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-        >   set_cmp;
-        test_striped2< set_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_less;
-        test_striped2< set_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::less< less<item> >
-        >   set_cmpmix;
-        test_striped2< set_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedSet< sequence_t
-            , co::mutex_policy< cc::striped_set::refinable<cds::sync::reentrant_spin> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_spin;
-        test_striped2< set_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   set_less_resizing_lf;
-            set_less_resizing_lf s(30, cc::striped_set::load_factor_resizing<0>(8));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<4>");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<4> >
-        >   set_less_resizing_lf16;
-        test_striped2< set_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   set_less_resizing_sbt;
-            set_less_resizing_sbt s(30, cc::striped_set::single_bucket_size_threshold<0>(8));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<6>");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<6> >
-        >   set_less_resizing_sbt16;
-        test_striped2< set_less_resizing_sbt16 >();
-
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "copy_item");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped2< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "swap_item");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped2< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "move_item");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped2< set_move_item >();
-
-        CPPUNIT_MESSAGE( "special copy policy");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped2< set_special_copy_item >();
-    }
-
-}   // namespace set
-
-#else
-
-namespace set {
-    void StripedSetHdrTest::Refinable_slist()
-    {
-        CPPUNIT_MESSAGE("Skipped; for boost::container::slist you should use boost version 1.48 or above");
-    }
-} // namespace set
-
-#endif
diff --git a/tests/test-hdr/set/hdr_refinable_hashset_vector.cpp b/tests/test-hdr/set/hdr_refinable_hashset_vector.cpp
deleted file mode 100644 (file)
index c215e52..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_striped_set.h"
-#include <cds/container/striped_set/std_vector.h>
-#include <cds/container/striped_set.h>
-#include <cds/sync/spinlock.h>
-
-namespace set {
-
-    namespace {
-        struct my_copy_policy {
-            typedef std::vector<StripedSetHdrTest::item> vector_type;
-            typedef vector_type::iterator iterator;
-
-            void operator()( vector_type& vec, iterator itInsert, iterator itWhat )
-            {
-                vec.insert( itInsert, std::make_pair(itWhat->key(), itWhat->val()) );
-            }
-        };
-
-        typedef std::vector<StripedSetHdrTest::item> sequence_t;
-    }
-
-    void StripedSetHdrTest::Refinable_vector()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-        >   set_cmp;
-        test_striped2< set_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_less;
-        test_striped2< set_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::less< less<item> >
-        >   set_cmpmix;
-        test_striped2< set_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedSet< sequence_t
-            , co::mutex_policy< cc::striped_set::refinable<cds::sync::reentrant_spin> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_spin;
-        test_striped2< set_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   set_less_resizing_lf;
-            set_less_resizing_lf s(30, cc::striped_set::load_factor_resizing<0>(8));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<4>");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<4> >
-        >   set_less_resizing_lf16;
-        test_striped2< set_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   set_less_resizing_sbt;
-            set_less_resizing_sbt s(30, cc::striped_set::single_bucket_size_threshold<0>(8));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<6>");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<6> >
-        >   set_less_resizing_sbt16;
-        test_striped2< set_less_resizing_sbt16 >();
-
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "copy_item");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped2< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "swap_item");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped2< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "move_item");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped2< set_move_item >();
-
-        CPPUNIT_MESSAGE( "special copy policy");
-        typedef cc::StripedSet< sequence_t
-            ,co::mutex_policy< cc::striped_set::refinable<> >
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped2< set_special_copy_item >();
-    }
-
-}   // namespace set
diff --git a/tests/test-hdr/set/hdr_set.h b/tests/test-hdr/set/hdr_set.h
deleted file mode 100644 (file)
index cc805aa..0000000
+++ /dev/null
@@ -1,1432 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_SET_H
-#define CDSTEST_HDR_SET_H
-
-#include "cppunit/cppunit_proxy.h"
-#include "size_check.h"
-
-#include <cds/opt/hash.h>
-#include <cds/os/timer.h>
-#include <functional>   // ref
-
-// forward namespace declaration
-namespace cds {
-    namespace container {}
-    namespace opt {}
-}
-
-namespace set {
-    using misc::check_size;
-
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-
-
-    class HashSetHdrTest: public CppUnitMini::TestCase
-    {
-    public:
-        struct stat
-        {
-            unsigned int nFindCount     ;   // count of find-functor calling
-            unsigned int nUpdateNewCount;
-            unsigned int nUpdateCount;
-
-            stat()
-            {
-                memset( this, 0, sizeof(*this));
-            }
-
-            void copy( stat const& s )
-            {
-                nFindCount = s.nFindCount;
-                nUpdateCount = s.nUpdateCount;
-                nUpdateNewCount = s.nUpdateNewCount;
-            }
-        };
-
-        struct item: public stat
-        {
-            int nKey;
-            int nVal;
-
-            item()
-            {}
-
-            item( int key )
-                : nKey( key )
-                , nVal( key )
-            {}
-
-            item (int key, int val )
-                : nKey(key)
-                , nVal( val )
-            {}
-
-            item( std::pair<int,int> const& p )
-                : nKey( p.first )
-                , nVal( p.second )
-            {}
-
-            item( item const& i )
-                : nKey( i.nKey )
-                , nVal( i.nVal )
-            {}
-
-            item& operator=(item const& i)
-            {
-                nKey = i.nKey;
-                nVal = i.nVal;
-                stat::copy(i);
-
-                return *this;
-            }
-
-            item( item&& i )
-                : nKey( i.nKey )
-                , nVal( i.nVal )
-            {}
-
-            //item& operator=(item&& i)
-            //{
-            //    nKey = i.nKey;
-            //    nVal = i.nVal;
-            //    return *this;
-            //}
-
-            int key() const
-            {
-                return nKey;
-            }
-
-            int val() const
-            {
-                return nVal;
-            }
-        };
-
-        struct hash_int {
-            size_t operator()( int i ) const
-            {
-                return co::v::hash<int>()( i );
-            }
-
-            size_t operator()( std::pair<int,int> const& i ) const
-            {
-                return co::v::hash<int>()( i.first );
-            }
-
-            template <typename Item>
-            size_t operator()( Item const& i ) const
-            {
-                return (*this)( i.key() );
-            }
-        };
-
-        struct simple_item_counter {
-            size_t  m_nCount;
-
-            simple_item_counter()
-                : m_nCount(0)
-            {}
-
-            size_t operator ++()
-            {
-                return ++m_nCount;
-            }
-
-            size_t operator --()
-            {
-                return --m_nCount;
-            }
-
-            void reset()
-            {
-                m_nCount = 0;
-            }
-
-            operator size_t() const
-            {
-                return m_nCount;
-            }
-        };
-
-        template <typename T>
-        struct less
-        {
-            bool operator ()(const T& v1, const T& v2 ) const
-            {
-                return v1.key() < v2.key();
-            }
-
-            template <typename Q>
-            bool operator ()(const T& v1, const Q& v2 ) const
-            {
-                return v1.key() < v2;
-            }
-
-            template <typename Q>
-            bool operator ()(const Q& v1, const T& v2 ) const
-            {
-                return v1 < v2.key();
-            }
-
-            bool operator ()( std::pair<int, int> const& v1, const T& v2 ) const
-            {
-                return v1.first < v2.key();
-            }
-
-            bool operator ()(const T& v1, std::pair<int, int> const& v2 ) const
-            {
-                return v1.key() < v2.first;
-            }
-        };
-
-        struct other_item {
-            int nKey;
-
-            other_item( int key )
-                : nKey(key)
-            {}
-
-            int key() const
-            {
-                return nKey;
-            }
-        };
-
-        struct other_less
-        {
-            template <typename T>
-            bool operator ()(T const& v1, other_item const& v2 ) const
-            {
-                return v1.key() < v2.nKey;
-            }
-            template <typename T>
-            bool operator ()(other_item const& v1, T const& v2 ) const
-            {
-                return v1.nKey < v2.key();
-            }
-        };
-
-        template <typename T>
-        struct cmp {
-            int operator ()(const T& v1, const T& v2 ) const
-            {
-                if ( v1.key() < v2.key() )
-                    return -1;
-                return v1.key() > v2.key() ? 1 : 0;
-            }
-
-            template <typename Q>
-            int operator ()(const T& v1, const Q& v2 ) const
-            {
-                if ( v1.key() < v2 )
-                    return -1;
-                return v1.key() > v2 ? 1 : 0;
-            }
-
-            template <typename Q>
-            int operator ()(const Q& v1, const T& v2 ) const
-            {
-                if ( v1 < v2.key() )
-                    return -1;
-                return v1 > v2.key() ? 1 : 0;
-            }
-
-            int operator()( std::pair<int,int> const& v1, T const& v2 ) const
-            {
-                if ( v1.first < v2.key() )
-                    return -1;
-                return v1.first > v2.key() ? 1 : 0;
-            }
-
-            int operator()( T const& v1, std::pair<int,int> const& v2 ) const
-            {
-                if ( v1.key() < v2.first )
-                    return -1;
-                return v1.key() > v2.first ? 1 : 0;
-            }
-        };
-
-        template <typename T>
-        struct equal
-        {
-            bool operator ()(const T& v1, const T& v2 ) const
-            {
-                return v1.key() == v2.key();
-            }
-
-            template <typename Q>
-            bool operator ()(const T& v1, const Q& v2 ) const
-            {
-                return v1.key() == v2;
-            }
-
-            template <typename Q>
-            bool operator ()(const Q& v1, const T& v2 ) const
-            {
-                return v1 == v2.key();
-            }
-
-            bool operator ()( std::pair<int, int> const& v1, const T& v2 ) const
-            {
-                return v1.first == v2.key();
-            }
-
-            bool operator ()(const T& v1, std::pair<int, int> const& v2 ) const
-            {
-                return v1.key() == v2.first;
-            }
-        };
-
-        struct find_functor
-        {
-            template <typename Item, typename T>
-            void operator()( Item& i, T& /*val*/ ) const
-            {
-                ++i.nFindCount;
-            }
-            template <typename Item, typename T>
-            void operator()( Item& i, T const& /*val*/ ) const
-            {
-                ++i.nFindCount;
-            }
-        };
-
-        template <typename Item>
-        struct copy_found
-        {
-            Item    m_found;
-
-            template <typename T>
-            void operator()( Item& i, T& /*val*/ )
-            {
-                m_found = i;
-            }
-
-            void operator()( Item const& i )
-            {
-                m_found = i;
-            }
-        };
-
-        struct insert_functor
-        {
-            template <typename Item>
-            void operator()(Item& i )
-            {
-                i.nVal = i.nKey * 100;
-            }
-        };
-
-        template <typename Item, typename Q>
-        static void udate_func( bool bNew, Item& i, Q& /*val*/ )
-        {
-            if ( bNew )
-                ++i.nUpdateNewCount;
-            else
-                ++i.nUpdateCount;
-        }
-
-        struct udate_functor
-        {
-            template <typename Item, typename Q>
-            void operator()( bool bNew, Item& i, Q& val )
-            {
-                udate_func( bNew, i, val );
-            }
-        };
-
-        template <class Set>
-        void test_int()
-        {
-            Set s( 100, 4 );
-            test_int_with( s );
-
-            // extract/get test
-            CPPUNIT_ASSERT( s.empty() );
-            {
-                const int nLimit = 100;
-                typename Set::guarded_ptr gp;
-                int arrRandom[nLimit];
-                for ( int i = 0; i < nLimit; ++i )
-                    arrRandom[i] = i;
-                shuffle( arrRandom, arrRandom + nLimit );
-
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( s.insert( arrRandom[i] ));
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    int nKey = arrRandom[i];
-                    gp = s.get( nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-                    CPPUNIT_CHECK( gp->nVal == nKey );
-                    gp.release();
-
-                    gp = s.extract( nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-                    CPPUNIT_CHECK( gp->nVal == nKey );
-                    gp.release();
-                    CPPUNIT_CHECK( !s.get( nKey ) );
-
-                    gp = s.extract( nKey );
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_CHECK( gp.empty());
-                }
-                CPPUNIT_ASSERT( s.empty() );
-
-
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( s.insert( arrRandom[i] ));
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    int nKey = arrRandom[i];
-                    gp = s.get_with( other_item( nKey ), other_less() );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-                    CPPUNIT_CHECK( gp->nVal == nKey );
-                    gp.release();
-
-                    gp = s.extract_with( other_item( nKey ), other_less() );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-                    CPPUNIT_CHECK( gp->nVal == nKey );
-                    gp.release();
-
-                    gp = s.get_with( other_item( nKey ), other_less() );
-                    CPPUNIT_CHECK( !gp );
-
-                    CPPUNIT_CHECK( !s.extract_with(other_item(nKey), other_less() ));
-                    CPPUNIT_CHECK( gp.empty());
-                }
-                CPPUNIT_ASSERT( s.empty() );
-            }
-
-            // iterator test
-            test_iter<Set>();
-        }
-
-        template <class Set>
-        void test_int_rcu()
-        {
-            Set s( 100, 4 );
-            test_int_with( s );
-
-            // extract/get test
-            {
-                typedef typename Set::gc    rcu;
-                typedef typename Set::rcu_lock rcu_lock;
-                typedef typename Set::value_type value_type;
-                typename Set::exempt_ptr ep;
-
-                static size_t const nLimit = 100;
-                int arr[nLimit];
-                for ( size_t i = 0; i < nLimit; ++i )
-                    arr[i] = (int) i;
-                shuffle( arr, arr + nLimit );
-
-                for ( size_t i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( s.insert( arr[i] ));
-
-                for ( size_t i = 0; i < nLimit; i += 2 ) {
-                    value_type * pVal;
-                    int nKey = arr[i];
-                    {
-                        rcu_lock l;
-                        pVal = s.get( nKey );
-                        CPPUNIT_ASSERT( pVal != nullptr );
-                        CPPUNIT_CHECK( pVal->nKey == nKey );
-                        CPPUNIT_CHECK( pVal->nVal == nKey );
-
-                        ep = s.extract( nKey );
-                        CPPUNIT_ASSERT( ep );
-                        CPPUNIT_ASSERT( !ep.empty() );
-                        CPPUNIT_CHECK( pVal->nKey == ep->nKey );
-                        CPPUNIT_CHECK( pVal->nVal == (*ep).nVal );
-                    }
-                    ep.release();
-                    {
-                        rcu_lock l;
-                        CPPUNIT_CHECK( s.get( nKey ) == nullptr );
-                        ep = s.extract( nKey );
-                        CPPUNIT_CHECK( !ep );
-                        CPPUNIT_CHECK( ep.empty() );
-
-                        nKey = arr[i+1];
-                        pVal = s.get_with( other_item(nKey), other_less() );
-                        CPPUNIT_ASSERT( pVal != nullptr );
-                        CPPUNIT_CHECK( pVal->nKey == nKey );
-                        CPPUNIT_CHECK( pVal->nVal == nKey );
-
-                        ep = s.extract_with( other_item( nKey ), other_less() );
-                        CPPUNIT_ASSERT( ep );
-                        CPPUNIT_ASSERT( !ep.empty() );
-                        CPPUNIT_CHECK( pVal->nKey == ep->nKey );
-                        CPPUNIT_CHECK( pVal->nVal == (*ep).nVal );
-                    }
-                    ep.release();
-                    {
-                        rcu_lock l;
-                        CPPUNIT_CHECK( s.get_with( other_item( nKey ), other_less() ) == nullptr );
-                        CPPUNIT_CHECK( !s.extract_with( other_item(nKey), other_less() ));
-                        CPPUNIT_CHECK( ep.empty() );
-                    }
-                }
-                CPPUNIT_CHECK( s.empty() );
-                CPPUNIT_CHECK( check_size( s, 0 ));
-                {
-                    rcu_lock l;
-                    CPPUNIT_CHECK( s.get( int( nLimit / 2 ) ) == nullptr );
-                    ep = s.extract( int( nLimit / 2 ) );
-                    CPPUNIT_CHECK( !ep );
-                    CPPUNIT_CHECK( ep.empty() );
-                }
-            }
-
-            // iterator test
-            test_iter<Set>();
-        }
-
-        template <class Set>
-        void test_int_rcu_michael_list()
-        {
-            Set s( 100, 4 );
-            test_int_with( s );
-
-            // extract/get test
-            {
-                typedef typename Set::gc    rcu;
-                typedef typename Set::rcu_lock rcu_lock;
-                typedef typename Set::value_type value_type;
-                typename Set::exempt_ptr ep;
-                typename Set::raw_ptr gp;
-
-                static size_t const nLimit = 100;
-                int arr[nLimit];
-                for ( size_t i = 0; i < nLimit; ++i )
-                    arr[i] = (int) i;
-                shuffle( arr, arr + nLimit );
-
-                for ( size_t i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( s.insert( arr[i] ));
-
-                for ( size_t i = 0; i < nLimit; i += 2 ) {
-                    int nKey = arr[i];
-                    {
-                        rcu_lock l;
-                        gp = s.get( nKey );
-                        CPPUNIT_ASSERT( gp );
-                        CPPUNIT_CHECK( gp->nKey == nKey );
-                        CPPUNIT_CHECK( gp->nVal == nKey );
-                    }
-                    gp.release();
-
-                    ep = s.extract( nKey );
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty() );
-                    CPPUNIT_CHECK( nKey == ep->nKey );
-                    CPPUNIT_CHECK( nKey == (*ep).nVal );
-                    ep.release();
-
-                    {
-                        rcu_lock l;
-                        CPPUNIT_CHECK( !s.get( nKey ));
-                    }
-                    ep = s.extract( nKey );
-                    CPPUNIT_CHECK( !ep );
-                    CPPUNIT_CHECK( ep.empty() );
-
-                    {
-                        rcu_lock l;
-                        nKey = arr[i+1];
-                        gp = s.get_with( other_item(nKey), other_less() );
-                        CPPUNIT_ASSERT( gp );
-                        CPPUNIT_CHECK( gp->nKey == nKey );
-                        CPPUNIT_CHECK( gp->nVal == nKey );
-                    }
-                    gp.release();
-
-                    ep = s.extract_with( other_item( nKey ), other_less() );
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty() );
-                    CPPUNIT_CHECK( nKey == ep->nKey );
-                    CPPUNIT_CHECK( nKey == (*ep).nVal );
-                    ep.release();
-
-                    {
-                        rcu_lock l;
-                        CPPUNIT_CHECK( !s.get_with( other_item( nKey ), other_less()));
-                    }
-                    CPPUNIT_CHECK( !s.extract_with( other_item(nKey), other_less() ));
-                    CPPUNIT_CHECK( ep.empty() );
-                }
-                CPPUNIT_CHECK( s.empty() );
-                CPPUNIT_CHECK( check_size( s, 0 ));
-
-                {
-                    rcu_lock l;
-                    CPPUNIT_CHECK( !s.get( int( nLimit / 2 )));
-                }
-
-                ep = s.extract( int( nLimit / 2 ) );
-                CPPUNIT_CHECK( !ep );
-                CPPUNIT_CHECK( ep.empty() );
-            }
-
-            // iterator test
-            test_iter<Set>();
-        }
-
-
-        template <class Set>
-        void test_int_with( Set& s)
-        {
-            typedef typename Set::value_type    value_type;
-
-            item itm;
-            int key;
-
-            // insert/find test
-            CPPUNIT_ASSERT( !s.contains( 10 ) );
-            CPPUNIT_ASSERT( s.insert( 10 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-            CPPUNIT_ASSERT( s.contains( 10 ) );
-
-            CPPUNIT_ASSERT( !s.insert( 10 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-
-            CPPUNIT_ASSERT( !s.contains( 20, less<value_type>() ) );
-            CPPUNIT_ASSERT( s.insert( std::make_pair(20, 25) ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-            CPPUNIT_ASSERT( s.contains( 10, less<value_type>() ) );
-            CPPUNIT_ASSERT( s.contains( key = 20 ) );
-            CPPUNIT_ASSERT( s.find_with( key, less<value_type>(), find_functor() ) );
-            {
-                copy_found<item> f;
-                key = 20;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 20 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 25 );
-                CPPUNIT_ASSERT( f.m_found.nFindCount == 1 );
-            }
-            CPPUNIT_ASSERT( s.find( key, find_functor() ) );
-            {
-                copy_found<item> f;
-                key = 20;
-                CPPUNIT_ASSERT( s.find_with( key, less<value_type>(), std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 20 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 25 );
-                CPPUNIT_ASSERT( f.m_found.nFindCount == 2 );
-            }
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-
-            CPPUNIT_ASSERT( !s.contains( 25 ) );
-            CPPUNIT_ASSERT( s.insert( std::make_pair(25, -1), insert_functor() ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-            {
-                copy_found<item> f;
-                key = 25;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 25 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 2500 );
-            }
-
-            // update test
-            key = 10;
-            {
-                copy_found<item> f;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 10 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 10 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateCount == 0 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateNewCount == 0 );
-            }
-            std::pair<bool, bool> updateResult = s.update( key, udate_functor() );
-            CPPUNIT_ASSERT( updateResult.first && !updateResult.second );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-            {
-                copy_found<item> f;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 10 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 10 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateCount == 1 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateNewCount == 0 );
-            }
-
-            updateResult = s.update(std::make_pair(13, 1300), udate_functor(), false);
-            CPPUNIT_ASSERT(!updateResult.first && !updateResult.second);
-            CPPUNIT_ASSERT(check_size(s, 3));
-
-            updateResult = s.update( std::make_pair(13, 1300), udate_functor() );
-            CPPUNIT_ASSERT( updateResult.first && updateResult.second );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 4 ));
-            {
-                copy_found<item> f;
-                key = 13;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 13 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 1300 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateCount == 0 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateNewCount == 1 );
-            }
-
-            // erase test
-            CPPUNIT_ASSERT( s.erase(13) );
-            CPPUNIT_ASSERT( !s.contains( 13 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-            CPPUNIT_ASSERT( !s.erase(13) );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-
-            CPPUNIT_ASSERT( s.contains( 10 ));
-            CPPUNIT_ASSERT( s.erase_with( 10, less<value_type>() ));
-            CPPUNIT_ASSERT( !s.contains( 10 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-            CPPUNIT_ASSERT( !s.erase_with(10, less<value_type>()) );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-
-            CPPUNIT_ASSERT( s.contains(20) );
-            {
-                copy_found<item> f;
-                CPPUNIT_ASSERT( s.erase( 20, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 20 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 25 );
-
-                CPPUNIT_ASSERT( s.insert(235))
-                    CPPUNIT_ASSERT( s.erase_with( 235, less<value_type>(), std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 235 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 235 );
-            }
-            CPPUNIT_ASSERT( !s.contains( 20 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-
-            // emplace test
-            CPPUNIT_ASSERT( s.emplace( 151 )) ;  // key = 151,  val = 151
-            CPPUNIT_ASSERT( s.emplace( 174, 471 )) ;    // key = 174, val = 471
-            CPPUNIT_ASSERT( s.emplace( std::make_pair( 190, 91 ) )) ; // key == 190, val = 91
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-
-            CPPUNIT_ASSERT( s.contains(151));
-            CPPUNIT_ASSERT( s.contains(174, less<value_type>()));
-            CPPUNIT_ASSERT( s.contains(190));
-
-            {
-                copy_found<item> f;
-                key = 151;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 151 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 151 );
-
-                key = 174;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 174 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 471 );
-
-                key = 190;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 190 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 91 );
-            }
-
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-        }
-
-
-        template <class Set>
-        void test_int_nogc()
-        {
-            typedef typename Set::value_type        value_type;
-            typedef typename Set::iterator          iterator;
-            typedef typename Set::const_iterator    const_iterator;
-
-            {
-                Set s( 52, 4 );
-                iterator it;
-
-                CPPUNIT_ASSERT( s.empty() );
-                CPPUNIT_ASSERT( check_size( s, 0 ));
-
-                // insert
-                it = s.insert( 10 );
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 10 );
-                CPPUNIT_ASSERT( it->val() == 10 );
-                CPPUNIT_ASSERT( !s.empty() );
-                CPPUNIT_ASSERT( check_size( s, 1 ));
-                CPPUNIT_ASSERT( s.insert( 10 ) == s.end() );
-
-                it = s.insert( std::make_pair( 50, 25 ));
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 50 );
-                CPPUNIT_ASSERT( it->val() == 25 );
-                CPPUNIT_ASSERT( !s.empty() );
-                CPPUNIT_ASSERT( check_size( s, 2 ));
-                CPPUNIT_ASSERT( s.insert( 50 ) == s.end() );
-
-                // update
-                std::pair< iterator, bool>  updateResult;
-                updateResult = s.update(20, false);
-                CPPUNIT_ASSERT(updateResult.first == s.end());
-                CPPUNIT_ASSERT(!updateResult.second);
-                CPPUNIT_ASSERT(check_size(s, 2));
-
-                updateResult = s.update( 20 );
-                CPPUNIT_ASSERT( updateResult.first != s.end() );
-                CPPUNIT_ASSERT( updateResult.second  );
-                CPPUNIT_ASSERT( updateResult.first->key() == 20 );
-                CPPUNIT_ASSERT( updateResult.first->val() == 20 );
-                CPPUNIT_ASSERT( !s.empty() );
-                CPPUNIT_ASSERT( check_size( s, 3 ));
-
-                updateResult = s.update( std::make_pair( 20, 200 ));
-                CPPUNIT_ASSERT( updateResult.first != s.end() );
-                CPPUNIT_ASSERT( !updateResult.second  );
-                CPPUNIT_ASSERT( updateResult.first->key() == 20 );
-                CPPUNIT_ASSERT( updateResult.first->val() == 20 );
-                CPPUNIT_ASSERT( !s.empty() );
-                CPPUNIT_ASSERT( check_size( s, 3 ));
-                updateResult.first->nVal = 22;
-
-                updateResult = s.update( std::make_pair( 30, 33 ));
-                CPPUNIT_ASSERT( updateResult.first != s.end() );
-                CPPUNIT_ASSERT( updateResult.second  );
-                CPPUNIT_ASSERT( updateResult.first->key() == 30 );
-                CPPUNIT_ASSERT( updateResult.first->val() == 33 );
-                CPPUNIT_ASSERT( !s.empty() );
-                CPPUNIT_ASSERT( check_size( s, 4 ));
-
-                // find
-                it = s.contains( 10 );
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 10 );
-                CPPUNIT_ASSERT( it->val() == 10 );
-
-                it = s.contains( 20, less<value_type>() );
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 20 );
-                CPPUNIT_ASSERT( it->val() == 22 );
-
-                it = s.contains( 30 );
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 30 );
-                CPPUNIT_ASSERT( it->val() == 33 );
-
-                it = s.contains( 40 );
-                CPPUNIT_ASSERT( it == s.end() );
-
-                it = s.contains( 50 );
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 50 );
-                CPPUNIT_ASSERT( it->val() == 25 );
-
-                // emplace test
-                it = s.emplace( 151 ) ;  // key = 151,  val = 151
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 151 );
-                CPPUNIT_ASSERT( it->val() == 151 );
-
-                it = s.emplace( 174, 471 ) ; // key == 174, val = 471
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 174 );
-                CPPUNIT_ASSERT( it->val() == 471 );
-
-                it = s.emplace( std::make_pair( 190, 91 )) ; // key == 190, val = 91
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 190 );
-                CPPUNIT_ASSERT( it->val() == 91 );
-
-                it = s.contains( 174 );
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 174 );
-                CPPUNIT_ASSERT( it->val() == 471 );
-
-                it = s.contains( 190, less<value_type>() );
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 190 );
-                CPPUNIT_ASSERT( it->val() == 91 );
-
-                it = s.contains( 151 );
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 151 );
-                CPPUNIT_ASSERT( it->val() == 151 );
-
-                //s.clear();
-                //CPPUNIT_ASSERT( s.empty() );
-                //CPPUNIT_ASSERT( check_size( s, 0 ));
-            }
-
-            {
-                Set s( 52, 4 );
-
-                // iterator test
-                for ( int i = 0; i < 500; ++i ) {
-                    CPPUNIT_ASSERT( s.insert( std::make_pair( i, i * 2) ) != s.end() );
-                }
-                for ( iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                    iterator it2 = it;
-                    CPPUNIT_CHECK( it2 == it );
-                    CPPUNIT_CHECK( it2 != itEnd );
-                    CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
-                    it->nVal = (*it).nKey;
-                }
-
-                Set const& refSet = s;
-                for ( const_iterator it = refSet.begin(), itEnd = refSet.end(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( (*it).nKey == it->nVal );
-                }
-            }
-        }
-
-        template <class Set>
-        void test_int_nogc_unordered()
-        {
-            typedef typename Set::value_type        value_type;
-            typedef typename Set::iterator          iterator;
-            typedef typename Set::const_iterator    const_iterator;
-
-            {
-                Set s( 52, 4 );
-                iterator it;
-
-                CPPUNIT_ASSERT( s.empty() );
-                CPPUNIT_ASSERT( check_size( s, 0 ));
-
-                // insert
-                it = s.insert( 10 );
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 10 );
-                CPPUNIT_ASSERT( it->val() == 10 );
-                CPPUNIT_ASSERT( !s.empty() );
-                CPPUNIT_ASSERT( check_size( s, 1 ));
-                CPPUNIT_ASSERT( s.insert( 10 ) == s.end() );
-
-                it = s.insert( std::make_pair( 50, 25 ));
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 50 );
-                CPPUNIT_ASSERT( it->val() == 25 );
-                CPPUNIT_ASSERT( !s.empty() );
-                CPPUNIT_ASSERT( check_size( s, 2 ));
-                CPPUNIT_ASSERT( s.insert( 50 ) == s.end() );
-
-                // update
-                std::pair< iterator, bool>  updateResult;
-                updateResult = s.update(20, false);
-                CPPUNIT_ASSERT(updateResult.first == s.end());
-                CPPUNIT_ASSERT(!updateResult.second);
-                CPPUNIT_ASSERT(check_size(s, 2));
-
-                updateResult = s.update( 20 );
-                CPPUNIT_ASSERT( updateResult.first != s.end() );
-                CPPUNIT_ASSERT( updateResult.second  );
-                CPPUNIT_ASSERT( updateResult.first->key() == 20 );
-                CPPUNIT_ASSERT( updateResult.first->val() == 20 );
-                CPPUNIT_ASSERT( !s.empty() );
-                CPPUNIT_ASSERT( check_size( s, 3 ));
-
-                updateResult = s.update( std::make_pair( 20, 200 ));
-                CPPUNIT_ASSERT( updateResult.first != s.end() );
-                CPPUNIT_ASSERT( !updateResult.second  );
-                CPPUNIT_ASSERT( updateResult.first->key() == 20 );
-                CPPUNIT_ASSERT( updateResult.first->val() == 20 );
-                CPPUNIT_ASSERT( !s.empty() );
-                CPPUNIT_ASSERT( check_size( s, 3 ));
-                updateResult.first->nVal = 22;
-
-                updateResult = s.update( std::make_pair( 30, 33 ));
-                CPPUNIT_ASSERT( updateResult.first != s.end() );
-                CPPUNIT_ASSERT( updateResult.second  );
-                CPPUNIT_ASSERT( updateResult.first->key() == 30 );
-                CPPUNIT_ASSERT( updateResult.first->val() == 33 );
-                CPPUNIT_ASSERT( !s.empty() );
-                CPPUNIT_ASSERT( check_size( s, 4 ));
-
-                // find
-                it = s.contains( 10 );
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 10 );
-                CPPUNIT_ASSERT( it->val() == 10 );
-
-                it = s.contains( 20, equal<value_type>() );
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 20 );
-                CPPUNIT_ASSERT( it->val() == 22 );
-
-                it = s.contains( 30 );
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 30 );
-                CPPUNIT_ASSERT( it->val() == 33 );
-
-                it = s.contains( 40 );
-                CPPUNIT_ASSERT( it == s.end() );
-
-                it = s.contains( 50 );
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 50 );
-                CPPUNIT_ASSERT( it->val() == 25 );
-
-                // emplace test
-                it = s.emplace( 151 ) ;  // key = 151,  val = 151
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 151 );
-                CPPUNIT_ASSERT( it->val() == 151 );
-
-                it = s.emplace( 174, 471 ) ; // key == 174, val = 471
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 174 );
-                CPPUNIT_ASSERT( it->val() == 471 );
-
-                it = s.emplace( std::make_pair( 190, 91 )) ; // key == 190, val = 91
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 190 );
-                CPPUNIT_ASSERT( it->val() == 91 );
-
-                it = s.contains( 174 );
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 174 );
-                CPPUNIT_ASSERT( it->val() == 471 );
-
-                it = s.contains( 190, equal<value_type>() );
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 190 );
-                CPPUNIT_ASSERT( it->val() == 91 );
-
-                it = s.contains( 151 );
-                CPPUNIT_ASSERT( it != s.end() );
-                CPPUNIT_ASSERT( it->key() == 151 );
-                CPPUNIT_ASSERT( it->val() == 151 );
-
-                //s.clear();
-                //CPPUNIT_ASSERT( s.empty() );
-                //CPPUNIT_ASSERT( check_size( s, 0 ));
-            }
-
-            {
-                Set s( 52, 4 );
-
-                // iterator test
-                for ( int i = 0; i < 500; ++i ) {
-                    CPPUNIT_ASSERT( s.insert( std::make_pair( i, i * 2) ) != s.end() );
-                }
-                for ( iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                    iterator it2 = it;
-                    CPPUNIT_CHECK( it2 == it );
-                    CPPUNIT_CHECK( it2 != itEnd );
-                    CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
-                    it->nVal = (*it).nKey;
-                }
-
-                Set const& refSet = s;
-                for ( const_iterator it = refSet.begin(), itEnd = refSet.end(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( (*it).nKey == it->nVal );
-                }
-            }
-        }
-        template <class Set>
-        void test_iter()
-        {
-            typedef typename Set::value_type        value_type;
-            typedef typename Set::iterator          iterator;
-            typedef typename Set::const_iterator    const_iterator;
-
-            Set s( 100, 4 );
-
-            const size_t nMaxCount = 500;
-            for ( int i = 0; size_t(i) < nMaxCount; ++i ) {
-                CPPUNIT_ASSERT( s.insert( std::make_pair( i, i * 2) ));
-            }
-
-            {
-                typename Set::iterator it( s.begin() );
-                typename Set::const_iterator cit( s.cbegin() );
-                CPPUNIT_CHECK( it == cit );
-                CPPUNIT_CHECK( it != s.end() );
-                CPPUNIT_CHECK( it != s.cend() );
-                CPPUNIT_CHECK( cit != s.end() );
-                CPPUNIT_CHECK( cit != s.cend() );
-                ++it;
-                CPPUNIT_CHECK( it != cit );
-                CPPUNIT_CHECK( it != s.end() );
-                CPPUNIT_CHECK( it != s.cend() );
-                CPPUNIT_CHECK( cit != s.end() );
-                CPPUNIT_CHECK( cit != s.cend() );
-                ++cit;
-                CPPUNIT_CHECK( it == cit );
-                CPPUNIT_CHECK( it != s.end() );
-                CPPUNIT_CHECK( it != s.cend() );
-                CPPUNIT_CHECK( cit != s.end() );
-                CPPUNIT_CHECK( cit != s.cend() );
-            }
-
-            size_t nCount = 0;
-            for ( iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT_EX( (*it).nKey * 2 == it->nVal,
-                    "Step " << nCount << ": Iterator key=" << it->nKey <<  ", value expected=" << it->nKey * 2 << ", value real=" << it->nVal
-                    );
-                it->nVal = (*it).nKey;
-                ++nCount;
-            }
-            CPPUNIT_ASSERT( nCount == nMaxCount );
-
-            nCount = 0;
-            Set const& refSet = s;
-            for ( const_iterator it = refSet.begin(), itEnd = refSet.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT_EX( (*it).nKey == it->nVal,
-                    "Step " << nCount << ": Iterator key=" << it->nKey <<  ", value expected=" << it->nKey << ", value real=" << it->nVal
-                    );
-                ++nCount;
-            }
-            CPPUNIT_ASSERT( nCount == nMaxCount );
-        }
-
-        void Michael_HP_cmp();
-        void Michael_HP_less();
-        void Michael_HP_cmpmix();
-
-        void Michael_DHP_cmp();
-        void Michael_DHP_less();
-        void Michael_DHP_cmpmix();
-
-        void Michael_RCU_GPI_cmp();
-        void Michael_RCU_GPI_less();
-        void Michael_RCU_GPI_cmpmix();
-
-        void Michael_RCU_GPT_cmp();
-        void Michael_RCU_GPT_less();
-        void Michael_RCU_GPT_cmpmix();
-
-        void Michael_RCU_GPB_cmp();
-        void Michael_RCU_GPB_less();
-        void Michael_RCU_GPB_cmpmix();
-
-        void Michael_RCU_SHT_cmp();
-        void Michael_RCU_SHT_less();
-        void Michael_RCU_SHT_cmpmix();
-
-        void Michael_RCU_SHB_cmp();
-        void Michael_RCU_SHB_less();
-        void Michael_RCU_SHB_cmpmix();
-
-        void Michael_nogc_cmp();
-        void Michael_nogc_less();
-        void Michael_nogc_cmpmix();
-
-        void Lazy_HP_cmp();
-        void Lazy_HP_less();
-        void Lazy_HP_cmpmix();
-
-        void Lazy_DHP_cmp();
-        void Lazy_DHP_less();
-        void Lazy_DHP_cmpmix();
-
-        void Lazy_RCU_GPI_cmp();
-        void Lazy_RCU_GPI_less();
-        void Lazy_RCU_GPI_cmpmix();
-
-        void Lazy_RCU_GPB_cmp();
-        void Lazy_RCU_GPB_less();
-        void Lazy_RCU_GPB_cmpmix();
-
-        void Lazy_RCU_GPT_cmp();
-        void Lazy_RCU_GPT_less();
-        void Lazy_RCU_GPT_cmpmix();
-
-        void Lazy_RCU_SHB_cmp();
-        void Lazy_RCU_SHB_less();
-        void Lazy_RCU_SHB_cmpmix();
-
-        void Lazy_RCU_SHT_cmp();
-        void Lazy_RCU_SHT_less();
-        void Lazy_RCU_SHT_cmpmix();
-
-        void Lazy_nogc_cmp();
-        void Lazy_nogc_less();
-        void Lazy_nogc_equal();
-        void Lazy_nogc_cmpmix();
-
-        void Split_HP_cmp();
-        void Split_HP_less();
-        void Split_HP_cmpmix();
-        void Split_HP_cmpmix_stat();
-
-        void Split_DHP_cmp();
-        void Split_DHP_less();
-        void Split_DHP_cmpmix();
-        void Split_DHP_cmpmix_stat();
-
-        void Split_RCU_GPI_cmp();
-        void Split_RCU_GPI_less();
-        void Split_RCU_GPI_cmpmix();
-        void Split_RCU_GPI_cmpmix_stat();
-
-        void Split_RCU_GPB_cmp();
-        void Split_RCU_GPB_less();
-        void Split_RCU_GPB_cmpmix();
-        void Split_RCU_GPB_cmpmix_stat();
-
-        void Split_RCU_GPT_cmp();
-        void Split_RCU_GPT_less();
-        void Split_RCU_GPT_cmpmix();
-        void Split_RCU_GPT_cmpmix_stat();
-
-        void Split_RCU_SHB_cmp();
-        void Split_RCU_SHB_less();
-        void Split_RCU_SHB_cmpmix();
-        void Split_RCU_SHB_cmpmix_stat();
-
-        void Split_RCU_SHT_cmp();
-        void Split_RCU_SHT_less();
-        void Split_RCU_SHT_cmpmix();
-        void Split_RCU_SHT_cmpmix_stat();
-
-        void Split_nogc_cmp();
-        void Split_nogc_less();
-        void Split_nogc_cmpmix();
-        void Split_nogc_cmpmix_stat();
-
-
-        void Split_Lazy_HP_cmp();
-        void Split_Lazy_HP_less();
-        void Split_Lazy_HP_cmpmix();
-        void Split_Lazy_HP_cmpmix_stat();
-
-        void Split_Lazy_DHP_cmp();
-        void Split_Lazy_DHP_less();
-        void Split_Lazy_DHP_cmpmix();
-        void Split_Lazy_DHP_cmpmix_stat();
-
-        void Split_Lazy_RCU_GPI_cmp();
-        void Split_Lazy_RCU_GPI_less();
-        void Split_Lazy_RCU_GPI_cmpmix();
-        void Split_Lazy_RCU_GPI_cmpmix_stat();
-
-        void Split_Lazy_RCU_GPB_cmp();
-        void Split_Lazy_RCU_GPB_less();
-        void Split_Lazy_RCU_GPB_cmpmix();
-        void Split_Lazy_RCU_GPB_cmpmix_stat();
-
-        void Split_Lazy_RCU_GPT_cmp();
-        void Split_Lazy_RCU_GPT_less();
-        void Split_Lazy_RCU_GPT_cmpmix();
-        void Split_Lazy_RCU_GPT_cmpmix_stat();
-
-        void Split_Lazy_RCU_SHB_cmp();
-        void Split_Lazy_RCU_SHB_less();
-        void Split_Lazy_RCU_SHB_cmpmix();
-        void Split_Lazy_RCU_SHB_cmpmix_stat();
-
-        void Split_Lazy_RCU_SHT_cmp();
-        void Split_Lazy_RCU_SHT_less();
-        void Split_Lazy_RCU_SHT_cmpmix();
-        void Split_Lazy_RCU_SHT_cmpmix_stat();
-
-        void Split_Lazy_nogc_cmp();
-        void Split_Lazy_nogc_less();
-        void Split_Lazy_nogc_cmpmix();
-        void Split_Lazy_nogc_cmpmix_stat();
-
-        CPPUNIT_TEST_SUITE(HashSetHdrTest)
-            CPPUNIT_TEST(Michael_HP_cmp)
-            CPPUNIT_TEST(Michael_HP_less)
-            CPPUNIT_TEST(Michael_HP_cmpmix)
-
-            CPPUNIT_TEST(Michael_DHP_cmp)
-            CPPUNIT_TEST(Michael_DHP_less)
-            CPPUNIT_TEST(Michael_DHP_cmpmix)
-
-            CPPUNIT_TEST(Michael_RCU_GPI_cmp)
-            CPPUNIT_TEST(Michael_RCU_GPI_less)
-            CPPUNIT_TEST(Michael_RCU_GPI_cmpmix)
-
-            CPPUNIT_TEST(Michael_RCU_GPB_cmp)
-            CPPUNIT_TEST(Michael_RCU_GPB_less)
-            CPPUNIT_TEST(Michael_RCU_GPB_cmpmix)
-
-            CPPUNIT_TEST(Michael_RCU_GPT_cmp)
-            CPPUNIT_TEST(Michael_RCU_GPT_less)
-            CPPUNIT_TEST(Michael_RCU_GPT_cmpmix)
-
-            CPPUNIT_TEST(Michael_RCU_SHB_cmp)
-            CPPUNIT_TEST(Michael_RCU_SHB_less)
-            CPPUNIT_TEST(Michael_RCU_SHB_cmpmix)
-
-            CPPUNIT_TEST(Michael_RCU_SHT_cmp)
-            CPPUNIT_TEST(Michael_RCU_SHT_less)
-            CPPUNIT_TEST(Michael_RCU_SHT_cmpmix)
-
-            CPPUNIT_TEST(Michael_nogc_cmp)
-            CPPUNIT_TEST(Michael_nogc_less)
-            CPPUNIT_TEST(Michael_nogc_cmpmix)
-
-            CPPUNIT_TEST(Lazy_HP_cmp)
-            CPPUNIT_TEST(Lazy_HP_less)
-            CPPUNIT_TEST(Lazy_HP_cmpmix)
-
-            CPPUNIT_TEST(Lazy_DHP_cmp)
-            CPPUNIT_TEST(Lazy_DHP_less)
-            CPPUNIT_TEST(Lazy_DHP_cmpmix)
-
-            CPPUNIT_TEST(Lazy_RCU_GPI_cmp)
-            CPPUNIT_TEST(Lazy_RCU_GPI_less)
-            CPPUNIT_TEST(Lazy_RCU_GPI_cmpmix)
-
-            CPPUNIT_TEST(Lazy_RCU_GPB_cmp)
-            CPPUNIT_TEST(Lazy_RCU_GPB_less)
-            CPPUNIT_TEST(Lazy_RCU_GPB_cmpmix)
-
-            CPPUNIT_TEST(Lazy_RCU_GPT_cmp)
-            CPPUNIT_TEST(Lazy_RCU_GPT_less)
-            CPPUNIT_TEST(Lazy_RCU_GPT_cmpmix)
-
-            CPPUNIT_TEST(Lazy_RCU_SHB_cmp)
-            CPPUNIT_TEST(Lazy_RCU_SHB_less)
-            CPPUNIT_TEST(Lazy_RCU_SHB_cmpmix)
-
-            CPPUNIT_TEST(Lazy_RCU_SHT_cmp)
-            CPPUNIT_TEST(Lazy_RCU_SHT_less)
-            CPPUNIT_TEST(Lazy_RCU_SHT_cmpmix)
-
-            CPPUNIT_TEST(Lazy_nogc_cmp)
-            CPPUNIT_TEST(Lazy_nogc_less)
-            CPPUNIT_TEST(Lazy_nogc_equal)
-            CPPUNIT_TEST(Lazy_nogc_cmpmix)
-
-            CPPUNIT_TEST(Split_HP_cmp)
-            CPPUNIT_TEST(Split_HP_less)
-            CPPUNIT_TEST(Split_HP_cmpmix)
-            CPPUNIT_TEST( Split_HP_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_DHP_cmp)
-            CPPUNIT_TEST(Split_DHP_less)
-            CPPUNIT_TEST(Split_DHP_cmpmix)
-            CPPUNIT_TEST( Split_DHP_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_RCU_GPI_cmp)
-            CPPUNIT_TEST(Split_RCU_GPI_less)
-            CPPUNIT_TEST(Split_RCU_GPI_cmpmix)
-            CPPUNIT_TEST( Split_RCU_GPI_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_RCU_GPB_cmp)
-            CPPUNIT_TEST(Split_RCU_GPB_less)
-            CPPUNIT_TEST(Split_RCU_GPB_cmpmix)
-            CPPUNIT_TEST( Split_RCU_GPB_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_RCU_GPT_cmp)
-            CPPUNIT_TEST(Split_RCU_GPT_less)
-            CPPUNIT_TEST(Split_RCU_GPT_cmpmix)
-            CPPUNIT_TEST( Split_RCU_GPT_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_RCU_SHB_cmp)
-            CPPUNIT_TEST(Split_RCU_SHB_less)
-            CPPUNIT_TEST(Split_RCU_SHB_cmpmix)
-            CPPUNIT_TEST( Split_RCU_SHB_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_RCU_SHT_cmp)
-            CPPUNIT_TEST(Split_RCU_SHT_less)
-            CPPUNIT_TEST(Split_RCU_SHT_cmpmix)
-            CPPUNIT_TEST( Split_RCU_SHT_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_nogc_cmp)
-            CPPUNIT_TEST(Split_nogc_less)
-            CPPUNIT_TEST(Split_nogc_cmpmix)
-            CPPUNIT_TEST( Split_nogc_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_Lazy_HP_cmp)
-            CPPUNIT_TEST(Split_Lazy_HP_less)
-            CPPUNIT_TEST(Split_Lazy_HP_cmpmix)
-            CPPUNIT_TEST( Split_Lazy_HP_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_Lazy_DHP_cmp)
-            CPPUNIT_TEST(Split_Lazy_DHP_less)
-            CPPUNIT_TEST(Split_Lazy_DHP_cmpmix)
-            CPPUNIT_TEST( Split_Lazy_DHP_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_Lazy_RCU_GPI_cmp)
-            CPPUNIT_TEST(Split_Lazy_RCU_GPI_less)
-            CPPUNIT_TEST(Split_Lazy_RCU_GPI_cmpmix)
-            CPPUNIT_TEST( Split_Lazy_RCU_GPI_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_Lazy_RCU_GPB_cmp)
-            CPPUNIT_TEST(Split_Lazy_RCU_GPB_less)
-            CPPUNIT_TEST(Split_Lazy_RCU_GPB_cmpmix)
-            CPPUNIT_TEST( Split_Lazy_RCU_GPB_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_Lazy_RCU_GPT_cmp)
-            CPPUNIT_TEST(Split_Lazy_RCU_GPT_less)
-            CPPUNIT_TEST(Split_Lazy_RCU_GPT_cmpmix)
-            CPPUNIT_TEST( Split_Lazy_RCU_GPT_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_Lazy_RCU_SHB_cmp)
-            CPPUNIT_TEST(Split_Lazy_RCU_SHB_less)
-            CPPUNIT_TEST(Split_Lazy_RCU_SHB_cmpmix)
-            CPPUNIT_TEST( Split_Lazy_RCU_SHB_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_Lazy_RCU_SHT_cmp)
-            CPPUNIT_TEST(Split_Lazy_RCU_SHT_less)
-            CPPUNIT_TEST(Split_Lazy_RCU_SHT_cmpmix)
-            CPPUNIT_TEST( Split_Lazy_RCU_SHT_cmpmix_stat )
-
-            CPPUNIT_TEST(Split_Lazy_nogc_cmp)
-            CPPUNIT_TEST(Split_Lazy_nogc_less)
-            CPPUNIT_TEST(Split_Lazy_nogc_cmpmix)
-            CPPUNIT_TEST( Split_Lazy_nogc_cmpmix_stat )
-
-        CPPUNIT_TEST_SUITE_END()
-
-    };
-
-} // namespace set
-
-#endif // CDSTEST_HDR_SET_H
diff --git a/tests/test-hdr/set/hdr_skiplist_set.h b/tests/test-hdr/set/hdr_skiplist_set.h
deleted file mode 100644 (file)
index 5fa1d14..0000000
+++ /dev/null
@@ -1,614 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_SKIPLIST_SET_H
-#define CDSTEST_HDR_SKIPLIST_SET_H
-
-#include "set/hdr_set.h"
-
-namespace set {
-
-    class SkipListSetHdrTest: public HashSetHdrTest
-    {
-        typedef HashSetHdrTest base_class;
-
-        typedef base_class::other_item  wrapped_item;
-        typedef base_class::other_less  wrapped_less;
-
-        template <class Set, typename PrintStat >
-        void test()
-        {
-            Set s;
-            base_class::test_int_with( s );
-
-            static int const nLimit = 10000;
-            typedef typename Set::iterator          set_iterator;
-            typedef typename Set::const_iterator    const_set_iterator;
-            typedef typename Set::guarded_ptr       guarded_ptr;
-
-            int nCount = 0;
-            int nPrevKey = 0;
-            guarded_ptr gp;
-            int arrRandom[nLimit];
-            for ( int i = 0; i < nLimit; ++i )
-                arrRandom[i] = i;
-            shuffle( arrRandom, arrRandom + nLimit );
-
-
-            // Test iterator - ascending order
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-
-            for ( int i = 0; i < nLimit; ++i ) {
-                gp = s.get( i );
-                CPPUNIT_CHECK( !gp );
-                CPPUNIT_CHECK( gp.empty() );
-
-                CPPUNIT_ASSERT( s.insert(i) );
-
-                gp = s.get( i );
-                CPPUNIT_CHECK( gp );
-                CPPUNIT_ASSERT( !gp.empty());
-                CPPUNIT_CHECK( gp->nKey == i );
-                CPPUNIT_CHECK( gp->nVal == i );
-                gp.release();
-            }
-            CPPUNIT_MSG( PrintStat()(s, "Iterator test, ascending insert order") );
-
-            nCount = 0;
-            nPrevKey = 0;
-            for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( (*it).nKey == it->nVal );
-                CPPUNIT_ASSERT( s.contains( it->nKey ));
-                it->nVal = (*it).nKey * 2;
-                ++nCount;
-                if ( it != s.begin() ) {
-                    CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                }
-                nPrevKey = it->nKey;
-
-                // get
-                gp = s.get( it->nKey );
-                CPPUNIT_CHECK( gp );
-                CPPUNIT_ASSERT( !gp.empty() );
-                CPPUNIT_CHECK( gp->nKey == it->nKey );
-                CPPUNIT_CHECK( gp->nVal == it->nKey * 2 );
-                gp.release();
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            nCount = 0;
-            for ( const_set_iterator it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
-                ++nCount;
-                if ( it != s.cbegin() ) {
-                    CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                }
-                nPrevKey = it->nKey;
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            // Test iterator - descending order
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-
-            for ( int i = nLimit; i > 0; --i ) {
-                gp = s.get_with( i - 1, base_class::less<typename Set::value_type>());
-                CPPUNIT_CHECK( !gp );
-                CPPUNIT_CHECK( gp.empty() );
-
-                CPPUNIT_ASSERT( s.insert( std::make_pair(i - 1, (i-1) * 2) ));
-
-                // get_with
-                gp = s.get_with( i - 1, base_class::less<typename Set::value_type>());
-                CPPUNIT_CHECK( gp );
-                CPPUNIT_ASSERT( !gp.empty());
-                CPPUNIT_CHECK( gp->nKey == i-1 );
-                CPPUNIT_CHECK( gp->nVal == (i-1) * 2 );
-                gp.release();
-            }
-            CPPUNIT_MSG( PrintStat()(s, "Iterator test, descending insert order") );
-
-            nCount = 0;
-            nPrevKey = 0;
-            for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
-                CPPUNIT_ASSERT( s.contains( it->nKey ));
-                it->nVal = (*it).nKey;
-                ++nCount;
-                if ( it != s.begin() ) {
-                    CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                }
-                nPrevKey = it->nKey;
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            nCount = 0;
-            for ( const_set_iterator it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( (*it).nKey == it->nVal );
-                ++nCount;
-                if ( it != s.cbegin() ) {
-                    CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                }
-                nPrevKey = it->nKey;
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            // Test iterator - random order
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            {
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( s.insert( arrRandom[i]) );
-                CPPUNIT_MSG( PrintStat()(s, "Iterator test, random insert order") );
-            }
-
-            nCount = 0;
-            nPrevKey = 0;
-            for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( (*it).nKey == it->nVal );
-                CPPUNIT_ASSERT( s.contains( it->nKey ));
-                it->nVal = (*it).nKey * 2;
-                ++nCount;
-                if ( it != s.begin() ) {
-                    CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                }
-                nPrevKey = it->nKey;
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            nCount = 0;
-            for ( const_set_iterator it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
-                ++nCount;
-                if ( it != s.cbegin() ) {
-                    CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                }
-                nPrevKey = it->nKey;
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            // extract test
-            {
-                typedef typename base_class::less<typename Set::value_type> less_predicate;
-                typename Set::guarded_ptr gp;
-
-                // extract/get
-                for ( int i = 0; i < nLimit; ++i ) {
-                    int nKey = arrRandom[i];
-                    gp = s.get( nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-                    CPPUNIT_CHECK( gp->nVal == nKey * 2);
-                    gp.release();
-
-                    gp = s.extract( nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-                    CPPUNIT_CHECK( gp->nVal == nKey * 2);
-                    gp.release();
-
-                    gp = s.get( nKey );
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_ASSERT( gp.empty());
-                    CPPUNIT_ASSERT( !s.extract(nKey));
-                }
-                CPPUNIT_ASSERT( s.empty() );
-
-                // extract_with/get_with
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( s.insert( arrRandom[i]) );
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    int nKey = arrRandom[i];
-                    gp = s.get_with( wrapped_item( nKey ), wrapped_less());
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-                    CPPUNIT_CHECK( gp->nVal == nKey );
-                    gp.release();
-
-                    gp = s.extract_with( wrapped_item( nKey ), wrapped_less());
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-                    CPPUNIT_CHECK( gp->nVal == nKey );
-                    gp.release();
-
-                    gp = s.get_with( wrapped_item( nKey ), wrapped_less());
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_ASSERT( !s.extract_with( wrapped_item(nKey), wrapped_less() ));
-                }
-                CPPUNIT_ASSERT( s.empty() );
-
-                // extract_min
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( s.insert( arrRandom[i]) );
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    gp = s.extract_min();
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == i );
-                    CPPUNIT_CHECK( gp->nVal == i );
-                    gp.release();
-
-                    gp = s.get( i );
-                    CPPUNIT_CHECK( !gp );
-                }
-                CPPUNIT_ASSERT( s.empty() );
-                CPPUNIT_CHECK( !s.extract_min());
-                CPPUNIT_CHECK( !s.extract_max());
-
-                // extract_max
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( s.insert( arrRandom[i]) );
-
-                for ( int i = nLimit-1; i >= 0; --i ) {
-                    gp = s.extract_max();
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == i );
-                    CPPUNIT_CHECK( gp->nVal == i );
-                    gp.release();
-
-                    gp = s.get( i );
-                    CPPUNIT_CHECK( !gp );
-                }
-                CPPUNIT_ASSERT( s.empty() );
-                CPPUNIT_CHECK( !s.extract_min());
-                CPPUNIT_CHECK( !s.extract_max());
-            }
-
-            CPPUNIT_MSG( PrintStat()(s, nullptr) );
-        }
-
-        template <class Set, typename PrintStat >
-        void test_nogc()
-        {
-            typedef typename Set::value_type        value_type;
-            typedef typename Set::iterator          iterator;
-            typedef typename Set::const_iterator    const_iterator;
-
-            Set s;
-            iterator it;
-
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-
-            // insert
-            it = s.insert( 10 );
-            CPPUNIT_ASSERT( it != s.end() );
-            CPPUNIT_ASSERT( it->key() == 10 );
-            CPPUNIT_ASSERT( it->val() == 10 );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-            CPPUNIT_ASSERT( s.insert( 10 ) == s.end() );
-
-            it = s.insert( std::make_pair( 50, 25 ));
-            CPPUNIT_ASSERT( it != s.end() );
-            CPPUNIT_ASSERT( it->key() == 50 );
-            CPPUNIT_ASSERT( it->val() == 25 );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-            CPPUNIT_ASSERT( s.insert( 50 ) == s.end() );
-
-            // update
-            std::pair< iterator, bool>  updateResult;
-            updateResult = s.update(20, false);
-            CPPUNIT_ASSERT(updateResult.first == s.end());
-            CPPUNIT_ASSERT(!updateResult.second);
-            CPPUNIT_ASSERT(check_size(s, 2));
-
-            updateResult = s.update( 20 );
-            CPPUNIT_ASSERT( updateResult.first != s.end() );
-            CPPUNIT_ASSERT( updateResult.second  );
-            CPPUNIT_ASSERT( updateResult.first->key() == 20 );
-            CPPUNIT_ASSERT( updateResult.first->val() == 20 );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-
-            updateResult = s.update( std::make_pair( 20, 200 ));
-            CPPUNIT_ASSERT( updateResult.first != s.end() );
-            CPPUNIT_ASSERT( !updateResult.second  );
-            CPPUNIT_ASSERT( updateResult.first->key() == 20 );
-            CPPUNIT_ASSERT( updateResult.first->val() == 20 );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-            updateResult.first->nVal = 22;
-
-            updateResult = s.update( std::make_pair( 30, 33 ));
-            CPPUNIT_ASSERT( updateResult.first != s.end() );
-            CPPUNIT_ASSERT( updateResult.second  );
-            CPPUNIT_ASSERT( updateResult.first->key() == 30 );
-            CPPUNIT_ASSERT( updateResult.first->val() == 33 );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 4 ));
-
-            // find
-            it = s.contains( 10 );
-            CPPUNIT_ASSERT( it != s.end() );
-            CPPUNIT_ASSERT( it->key() == 10 );
-            CPPUNIT_ASSERT( it->val() == 10 );
-
-            it = s.contains( 20 );
-            CPPUNIT_ASSERT( it != s.end() );
-            CPPUNIT_ASSERT( it->key() == 20 );
-            CPPUNIT_ASSERT( it->val() == 22 );
-
-            it = s.contains( 30, base_class::less<value_type>() );
-            CPPUNIT_ASSERT( it != s.end() );
-            CPPUNIT_ASSERT( it->key() == 30 );
-            CPPUNIT_ASSERT( it->val() == 33 );
-
-            it = s.contains( 40 );
-            CPPUNIT_ASSERT( it == s.end() );
-
-            it = s.contains( 50 );
-            CPPUNIT_ASSERT( it != s.end() );
-            CPPUNIT_ASSERT( it->key() == 50 );
-            CPPUNIT_ASSERT( it->val() == 25 );
-
-            // emplace test
-            it = s.emplace( 151 ) ;  // key = 151,  val = 151
-            CPPUNIT_ASSERT( it != s.end() );
-            CPPUNIT_ASSERT( it->key() == 151 );
-            CPPUNIT_ASSERT( it->val() == 151 );
-
-            it = s.emplace( 174, 471 ) ; // key == 174, val = 471
-            CPPUNIT_ASSERT( it != s.end() );
-            CPPUNIT_ASSERT( it->key() == 174 );
-            CPPUNIT_ASSERT( it->val() == 471 );
-
-            it = s.emplace( std::make_pair( 190, 91 )) ; // key == 190, val = 91
-            CPPUNIT_ASSERT( it != s.end() );
-            CPPUNIT_ASSERT( it->key() == 190 );
-            CPPUNIT_ASSERT( it->val() == 91 );
-
-            it = s.contains( 174 );
-            CPPUNIT_ASSERT( it != s.end() );
-            CPPUNIT_ASSERT( it->key() == 174 );
-            CPPUNIT_ASSERT( it->val() == 471 );
-
-            it = s.contains( 190 );
-            CPPUNIT_ASSERT( it != s.end() );
-            CPPUNIT_ASSERT( it->key() == 190 );
-            CPPUNIT_ASSERT( it->val() == 91 );
-
-            it = s.contains( 151 );
-            CPPUNIT_ASSERT( it != s.end() );
-            CPPUNIT_ASSERT( it->key() == 151 );
-            CPPUNIT_ASSERT( it->val() == 151 );
-
-            CPPUNIT_ASSERT( !s.empty() );
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-
-            // get_min test
-            for ( int i = 500; i > 0; --i ) {
-                CPPUNIT_ASSERT( s.insert( std::make_pair( i, i * 2) ) != s.end() );
-
-                typename Set::value_type * pVal = s.get_min();
-                CPPUNIT_ASSERT( pVal != nullptr );
-                CPPUNIT_CHECK( pVal->nKey == i );
-                CPPUNIT_CHECK( pVal->nVal ==  i * 2 );
-            }
-            CPPUNIT_ASSERT( !s.empty() );
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-
-            CPPUNIT_CHECK( s.get_min() == nullptr );
-            CPPUNIT_CHECK( s.get_max() == nullptr );
-
-            // iterator test
-            for ( int i = 0; i < 500; ++i ) {
-                CPPUNIT_ASSERT( s.insert( std::make_pair( i, i * 2) ) != s.end() );
-
-                typename Set::value_type * pVal = s.get_max();
-                CPPUNIT_ASSERT( pVal != nullptr );
-                CPPUNIT_CHECK( pVal->nKey == i );
-                CPPUNIT_CHECK( pVal->nVal == i * 2 );
-            }
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 500 ));
-
-            for ( iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
-                it->nVal = (*it).nKey;
-            }
-
-            Set const& refSet = s;
-            for ( const_iterator it = refSet.begin(), itEnd = refSet.end(); it != itEnd; ++it ) {
-                CPPUNIT_ASSERT( (*it).nKey == it->nVal );
-            }
-        }
-
-    public:
-        void SkipList_HP_less();
-        void SkipList_HP_cmp();
-        void SkipList_HP_cmpless();
-        void SkipList_HP_less_stat();
-        void SkipList_HP_cmp_stat();
-        void SkipList_HP_cmpless_stat();
-        void SkipList_HP_xorshift_less();
-        void SkipList_HP_xorshift_cmp();
-        void SkipList_HP_xorshift_cmpless();
-        void SkipList_HP_xorshift_less_stat();
-        void SkipList_HP_xorshift_cmp_stat();
-        void SkipList_HP_xorshift_cmpless_stat();
-        void SkipList_HP_turbopas_less();
-        void SkipList_HP_turbopas_cmp();
-        void SkipList_HP_turbopas_cmpless();
-        void SkipList_HP_turbopas_less_stat();
-        void SkipList_HP_turbopas_cmp_stat();
-        void SkipList_HP_turbopas_cmpless_stat();
-        void SkipList_HP_michaelalloc_less();
-        void SkipList_HP_michaelalloc_cmp();
-        void SkipList_HP_michaelalloc_cmpless();
-        void SkipList_HP_michaelalloc_less_stat();
-        void SkipList_HP_michaelalloc_cmp_stat();
-        void SkipList_HP_michaelalloc_cmpless_stat();
-
-        void SkipList_DHP_less();
-        void SkipList_DHP_cmp();
-        void SkipList_DHP_cmpless();
-        void SkipList_DHP_less_stat();
-        void SkipList_DHP_cmp_stat();
-        void SkipList_DHP_cmpless_stat();
-        void SkipList_DHP_xorshift_less();
-        void SkipList_DHP_xorshift_cmp();
-        void SkipList_DHP_xorshift_cmpless();
-        void SkipList_DHP_xorshift_less_stat();
-        void SkipList_DHP_xorshift_cmp_stat();
-        void SkipList_DHP_xorshift_cmpless_stat();
-        void SkipList_DHP_turbopas_less();
-        void SkipList_DHP_turbopas_cmp();
-        void SkipList_DHP_turbopas_cmpless();
-        void SkipList_DHP_turbopas_less_stat();
-        void SkipList_DHP_turbopas_cmp_stat();
-        void SkipList_DHP_turbopas_cmpless_stat();
-        void SkipList_DHP_michaelalloc_less();
-        void SkipList_DHP_michaelalloc_cmp();
-        void SkipList_DHP_michaelalloc_cmpless();
-        void SkipList_DHP_michaelalloc_less_stat();
-        void SkipList_DHP_michaelalloc_cmp_stat();
-        void SkipList_DHP_michaelalloc_cmpless_stat();
-
-        void SkipList_NOGC_less();
-        void SkipList_NOGC_cmp();
-        void SkipList_NOGC_cmpless();
-        void SkipList_NOGC_less_stat();
-        void SkipList_NOGC_cmp_stat();
-        void SkipList_NOGC_cmpless_stat();
-        void SkipList_NOGC_xorshift_less();
-        void SkipList_NOGC_xorshift_cmp();
-        void SkipList_NOGC_xorshift_cmpless();
-        void SkipList_NOGC_xorshift_less_stat();
-        void SkipList_NOGC_xorshift_cmp_stat();
-        void SkipList_NOGC_xorshift_cmpless_stat();
-        void SkipList_NOGC_turbopas_less();
-        void SkipList_NOGC_turbopas_cmp();
-        void SkipList_NOGC_turbopas_cmpless();
-        void SkipList_NOGC_turbopas_less_stat();
-        void SkipList_NOGC_turbopas_cmp_stat();
-        void SkipList_NOGC_turbopas_cmpless_stat();
-        void SkipList_NOGC_michaelalloc_less();
-        void SkipList_NOGC_michaelalloc_cmp();
-        void SkipList_NOGC_michaelalloc_cmpless();
-        void SkipList_NOGC_michaelalloc_less_stat();
-        void SkipList_NOGC_michaelalloc_cmp_stat();
-        void SkipList_NOGC_michaelalloc_cmpless_stat();
-
-        CPPUNIT_TEST_SUITE(SkipListSetHdrTest)
-            CPPUNIT_TEST(SkipList_HP_less)
-            CPPUNIT_TEST(SkipList_HP_cmp)
-            CPPUNIT_TEST(SkipList_HP_cmpless)
-            CPPUNIT_TEST(SkipList_HP_less_stat)
-            CPPUNIT_TEST(SkipList_HP_cmp_stat)
-            CPPUNIT_TEST(SkipList_HP_cmpless_stat)
-            CPPUNIT_TEST(SkipList_HP_xorshift_less)
-            CPPUNIT_TEST(SkipList_HP_xorshift_cmp)
-            CPPUNIT_TEST(SkipList_HP_xorshift_cmpless)
-            CPPUNIT_TEST(SkipList_HP_xorshift_less_stat)
-            CPPUNIT_TEST(SkipList_HP_xorshift_cmp_stat)
-            CPPUNIT_TEST(SkipList_HP_xorshift_cmpless_stat)
-            CPPUNIT_TEST(SkipList_HP_turbopas_less)
-            CPPUNIT_TEST(SkipList_HP_turbopas_cmp)
-            CPPUNIT_TEST(SkipList_HP_turbopas_cmpless)
-            CPPUNIT_TEST(SkipList_HP_turbopas_less_stat)
-            CPPUNIT_TEST(SkipList_HP_turbopas_cmp_stat)
-            CPPUNIT_TEST(SkipList_HP_turbopas_cmpless_stat)
-            CPPUNIT_TEST(SkipList_HP_michaelalloc_less)
-            CPPUNIT_TEST(SkipList_HP_michaelalloc_cmp)
-            CPPUNIT_TEST(SkipList_HP_michaelalloc_cmpless)
-            CPPUNIT_TEST(SkipList_HP_michaelalloc_less_stat)
-            CPPUNIT_TEST(SkipList_HP_michaelalloc_cmp_stat)
-            CPPUNIT_TEST(SkipList_HP_michaelalloc_cmpless_stat)
-
-            CPPUNIT_TEST(SkipList_DHP_less)
-            CPPUNIT_TEST(SkipList_DHP_cmp)
-            CPPUNIT_TEST(SkipList_DHP_cmpless)
-            CPPUNIT_TEST(SkipList_DHP_less_stat)
-            CPPUNIT_TEST(SkipList_DHP_cmp_stat)
-            CPPUNIT_TEST(SkipList_DHP_cmpless_stat)
-            CPPUNIT_TEST(SkipList_DHP_xorshift_less)
-            CPPUNIT_TEST(SkipList_DHP_xorshift_cmp)
-            CPPUNIT_TEST(SkipList_DHP_xorshift_cmpless)
-            CPPUNIT_TEST(SkipList_DHP_xorshift_less_stat)
-            CPPUNIT_TEST(SkipList_DHP_xorshift_cmp_stat)
-            CPPUNIT_TEST(SkipList_DHP_xorshift_cmpless_stat)
-            CPPUNIT_TEST(SkipList_DHP_turbopas_less)
-            CPPUNIT_TEST(SkipList_DHP_turbopas_cmp)
-            CPPUNIT_TEST(SkipList_DHP_turbopas_cmpless)
-            CPPUNIT_TEST(SkipList_DHP_turbopas_less_stat)
-            CPPUNIT_TEST(SkipList_DHP_turbopas_cmp_stat)
-            CPPUNIT_TEST(SkipList_DHP_turbopas_cmpless_stat)
-            CPPUNIT_TEST(SkipList_DHP_michaelalloc_less)
-            CPPUNIT_TEST(SkipList_DHP_michaelalloc_cmp)
-            CPPUNIT_TEST(SkipList_DHP_michaelalloc_cmpless)
-            CPPUNIT_TEST(SkipList_DHP_michaelalloc_less_stat)
-            CPPUNIT_TEST(SkipList_DHP_michaelalloc_cmp_stat)
-            CPPUNIT_TEST(SkipList_DHP_michaelalloc_cmpless_stat)
-
-            CPPUNIT_TEST(SkipList_NOGC_less)
-            CPPUNIT_TEST(SkipList_NOGC_cmp)
-            CPPUNIT_TEST(SkipList_NOGC_cmpless)
-            CPPUNIT_TEST(SkipList_NOGC_less_stat)
-            CPPUNIT_TEST(SkipList_NOGC_cmp_stat)
-            CPPUNIT_TEST(SkipList_NOGC_cmpless_stat)
-            CPPUNIT_TEST(SkipList_NOGC_xorshift_less)
-            CPPUNIT_TEST(SkipList_NOGC_xorshift_cmp)
-            CPPUNIT_TEST(SkipList_NOGC_xorshift_cmpless)
-            CPPUNIT_TEST(SkipList_NOGC_xorshift_less_stat)
-            CPPUNIT_TEST(SkipList_NOGC_xorshift_cmp_stat)
-            CPPUNIT_TEST(SkipList_NOGC_xorshift_cmpless_stat)
-            CPPUNIT_TEST(SkipList_NOGC_turbopas_less)
-            CPPUNIT_TEST(SkipList_NOGC_turbopas_cmp)
-            CPPUNIT_TEST(SkipList_NOGC_turbopas_cmpless)
-            CPPUNIT_TEST(SkipList_NOGC_turbopas_less_stat)
-            CPPUNIT_TEST(SkipList_NOGC_turbopas_cmp_stat)
-            CPPUNIT_TEST(SkipList_NOGC_turbopas_cmpless_stat)
-            CPPUNIT_TEST(SkipList_NOGC_michaelalloc_less)
-            CPPUNIT_TEST(SkipList_NOGC_michaelalloc_cmp)
-            CPPUNIT_TEST(SkipList_NOGC_michaelalloc_cmpless)
-            CPPUNIT_TEST(SkipList_NOGC_michaelalloc_less_stat)
-            CPPUNIT_TEST(SkipList_NOGC_michaelalloc_cmp_stat)
-            CPPUNIT_TEST(SkipList_NOGC_michaelalloc_cmpless_stat)
-
-        CPPUNIT_TEST_SUITE_END()
-
-    };
-}
-
-#endif // #ifndef CDSTEST_HDR_SKIPLIST_SET_H
diff --git a/tests/test-hdr/set/hdr_skiplist_set_dhp.cpp b/tests/test-hdr/set/hdr_skiplist_set_dhp.cpp
deleted file mode 100644 (file)
index fa5299e..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_skiplist_set.h"
-#include <cds/container/skip_list_set_dhp.h>
-#include "unit/michael_alloc.h"
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-
-    void SkipListSetHdrTest::SkipList_DHP_less()
-    {
-        typedef cc::SkipListSet< cds::gc::DHP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_DHP_cmp()
-    {
-        typedef cc::SkipListSet< cds::gc::DHP, item,
-            cc::skip_list::make_traits<
-            co::compare< cmp<item > >
-            ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_DHP_cmpless()
-    {
-        typedef cc::SkipListSet< cds::gc::DHP, item,
-            cc::skip_list::make_traits<
-            co::less< less<item > >
-            ,co::compare< cmp<item > >
-            ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_DHP_less_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::DHP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_DHP_cmp_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::DHP, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_DHP_cmpless_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::DHP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_DHP_xorshift_less()
-    {
-        typedef cc::SkipListSet< cds::gc::DHP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_DHP_xorshift_cmp()
-    {
-        typedef cc::SkipListSet< cds::gc::DHP, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_DHP_xorshift_cmpless()
-    {
-        typedef cc::SkipListSet< cds::gc::DHP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_DHP_xorshift_less_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::DHP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_DHP_xorshift_cmp_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::DHP, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_DHP_xorshift_cmpless_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::DHP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_DHP_turbopas_less()
-    {
-        typedef cc::SkipListSet< cds::gc::DHP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_DHP_turbopas_cmp()
-    {
-        typedef cc::SkipListSet< cds::gc::DHP, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_DHP_turbopas_cmpless()
-    {
-        typedef cc::SkipListSet< cds::gc::DHP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_DHP_turbopas_less_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::DHP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_DHP_turbopas_cmp_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::DHP, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_DHP_turbopas_cmpless_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::DHP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_DHP_michaelalloc_less()
-    {
-        typedef cc::SkipListSet< cds::gc::DHP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_DHP_michaelalloc_cmp()
-    {
-        typedef cc::SkipListSet< cds::gc::DHP, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_DHP_michaelalloc_cmpless()
-    {
-        typedef cc::SkipListSet< cds::gc::DHP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_DHP_michaelalloc_less_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::DHP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_DHP_michaelalloc_cmp_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::DHP, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_DHP_michaelalloc_cmpless_stat()
-    {
-        struct set_traits : public cc::skip_list::traits
-        {
-            typedef SkipListSetHdrTest::less<item> less;
-            typedef cmp<item> compare;
-            typedef simple_item_counter item_counter;
-            typedef cc::skip_list::stat<> stat;
-            typedef memory::MichaelAllocator<int> allocator;
-        };
-
-        typedef cc::SkipListSet< cds::gc::DHP, item, set_traits > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_skiplist_set_hp.cpp b/tests/test-hdr/set/hdr_skiplist_set_hp.cpp
deleted file mode 100644 (file)
index 1fbe269..0000000
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_skiplist_set.h"
-#include <cds/container/skip_list_set_hp.h>
-#include "unit/michael_alloc.h"
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-
-    void SkipListSetHdrTest::SkipList_HP_less()
-    {
-        struct set_traits : public cc::skip_list::traits
-        {
-            typedef SkipListSetHdrTest::less<item > less;
-            typedef simple_item_counter item_counter;
-        };
-        typedef cc::SkipListSet< cds::gc::HP, item, set_traits > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_HP_cmp()
-    {
-        typedef cc::SkipListSet< cds::gc::HP, item,
-            cc::skip_list::make_traits<
-            co::compare< cmp<item > >
-            ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_HP_cmpless()
-    {
-        typedef cc::SkipListSet< cds::gc::HP, item,
-            cc::skip_list::make_traits<
-            co::less< less<item > >
-            ,co::compare< cmp<item > >
-            ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_HP_less_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::HP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_HP_cmp_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::HP, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_HP_cmpless_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::HP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_HP_xorshift_less()
-    {
-        typedef cc::SkipListSet< cds::gc::HP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_HP_xorshift_cmp()
-    {
-        typedef cc::SkipListSet< cds::gc::HP, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_HP_xorshift_cmpless()
-    {
-        typedef cc::SkipListSet< cds::gc::HP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_HP_xorshift_less_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::HP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_HP_xorshift_cmp_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::HP, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_HP_xorshift_cmpless_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::HP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_HP_turbopas_less()
-    {
-        typedef cc::SkipListSet< cds::gc::HP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_HP_turbopas_cmp()
-    {
-        typedef cc::SkipListSet< cds::gc::HP, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_HP_turbopas_cmpless()
-    {
-        typedef cc::SkipListSet< cds::gc::HP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_HP_turbopas_less_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::HP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_HP_turbopas_cmp_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::HP, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_HP_turbopas_cmpless_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::HP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_HP_michaelalloc_less()
-    {
-        typedef cc::SkipListSet< cds::gc::HP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_HP_michaelalloc_cmp()
-    {
-        typedef cc::SkipListSet< cds::gc::HP, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_HP_michaelalloc_cmpless()
-    {
-        typedef cc::SkipListSet< cds::gc::HP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_HP_michaelalloc_less_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::HP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_HP_michaelalloc_cmp_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::HP, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_HP_michaelalloc_cmpless_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::HP, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-} // namespace set
-
-CPPUNIT_TEST_SUITE_REGISTRATION(set::SkipListSetHdrTest);
diff --git a/tests/test-hdr/set/hdr_skiplist_set_nogc.cpp b/tests/test-hdr/set/hdr_skiplist_set_nogc.cpp
deleted file mode 100644 (file)
index 006d9de..0000000
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_skiplist_set.h"
-#include <cds/container/skip_list_set_nogc.h>
-#include "unit/michael_alloc.h"
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-
-    void SkipListSetHdrTest::SkipList_NOGC_less()
-    {
-        struct set_traits : public cc::skip_list::traits
-        {
-            typedef SkipListSetHdrTest::less<item> less;
-            typedef simple_item_counter item_counter;
-        };
-        typedef cc::SkipListSet< cds::gc::nogc, item, set_traits > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_NOGC_cmp()
-    {
-        typedef cc::SkipListSet< cds::gc::nogc, item,
-            cc::skip_list::make_traits<
-            co::compare< cmp<item > >
-            ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_NOGC_cmpless()
-    {
-        typedef cc::SkipListSet< cds::gc::nogc, item,
-            cc::skip_list::make_traits<
-            co::less< less<item > >
-            ,co::compare< cmp<item > >
-            ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_NOGC_less_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::nogc, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_NOGC_cmp_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::nogc, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_NOGC_cmpless_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::nogc, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_NOGC_xorshift_less()
-    {
-        typedef cc::SkipListSet< cds::gc::nogc, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_NOGC_xorshift_cmp()
-    {
-        typedef cc::SkipListSet< cds::gc::nogc, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_NOGC_xorshift_cmpless()
-    {
-        typedef cc::SkipListSet< cds::gc::nogc, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_NOGC_xorshift_less_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::nogc, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_NOGC_xorshift_cmp_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::nogc, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_NOGC_xorshift_cmpless_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::nogc, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_NOGC_turbopas_less()
-    {
-        typedef cc::SkipListSet< cds::gc::nogc, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_NOGC_turbopas_cmp()
-    {
-        typedef cc::SkipListSet< cds::gc::nogc, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_NOGC_turbopas_cmpless()
-    {
-        typedef cc::SkipListSet< cds::gc::nogc, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_NOGC_turbopas_less_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::nogc, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_NOGC_turbopas_cmp_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::nogc, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_NOGC_turbopas_cmpless_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::nogc, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_NOGC_michaelalloc_less()
-    {
-        typedef cc::SkipListSet< cds::gc::nogc, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_NOGC_michaelalloc_cmp()
-    {
-        typedef cc::SkipListSet< cds::gc::nogc, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_NOGC_michaelalloc_cmpless()
-    {
-        typedef cc::SkipListSet< cds::gc::nogc, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_NOGC_michaelalloc_less_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::nogc, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_NOGC_michaelalloc_cmp_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::nogc, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetHdrTest::SkipList_NOGC_michaelalloc_cmpless_stat()
-    {
-        typedef cc::SkipListSet< cds::gc::nogc, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test_nogc< set, misc::print_skiplist_stat<set::stat> >();
-    }
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_skiplist_set_rcu.h b/tests/test-hdr/set/hdr_skiplist_set_rcu.h
deleted file mode 100644 (file)
index 3f5bfd8..0000000
+++ /dev/null
@@ -1,544 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_SKIPLIST_SET_RCU_H
-#define CDSTEST_HDR_SKIPLIST_SET_RCU_H
-
-#include "set/hdr_set.h"
-
-namespace set {
-
-    class SkipListSetRCUHdrTest: public HashSetHdrTest
-    {
-        typedef HashSetHdrTest base_class;
-
-        typedef base_class::other_item  wrapped_item;
-        typedef base_class::other_less  wrapped_less;
-
-        template <class Set, typename PrintStat >
-        void test()
-        {
-            Set s;
-            base_class::test_int_with( s );
-
-            static int const nLimit = 10000;
-            typedef typename Set::iterator          set_iterator;
-            typedef typename Set::const_iterator    const_set_iterator;
-            typedef typename Set::gc::scoped_lock   rcu_lock;
-
-            int nCount = 0;
-            int nPrevKey = 0;
-
-            int arrRandom[nLimit];
-            for ( int i = 0; i < nLimit; ++i )
-                arrRandom[i] = i;
-            shuffle( arrRandom, arrRandom + nLimit );
-
-            // Test iterator - ascending order
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-
-            for ( int i = 0; i < nLimit; ++i ) {
-                CPPUNIT_ASSERT( s.insert(i) );
-            }
-            CPPUNIT_MSG( PrintStat()(s, "Iterator test, ascending insert order") );
-
-            nCount = 0;
-            nPrevKey = 0;
-            {
-                rcu_lock l;
-                for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( (*it).nKey == it->nVal );
-                    CPPUNIT_ASSERT( s.contains( it->nKey ));
-                    it->nVal = (*it).nKey * 2;
-                    ++nCount;
-                    if ( it != s.begin() ) {
-                        CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                    }
-                    nPrevKey = it->nKey;
-                }
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            nCount = 0;
-            {
-                rcu_lock l;
-                for ( const_set_iterator it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
-                    ++nCount;
-                    if ( it != s.cbegin() ) {
-                        CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                    }
-                    nPrevKey = it->nKey;
-                }
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            // Test iterator - descending order
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-
-            for ( int i = nLimit; i > 0; --i ) {
-                CPPUNIT_ASSERT( s.insert( std::make_pair(i - 1, (i-1) * 2) ));
-            }
-            CPPUNIT_MSG( PrintStat()(s, "Iterator test, descending insert order") );
-
-            nCount = 0;
-            nPrevKey = 0;
-            {
-                rcu_lock l;
-                for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
-                    CPPUNIT_ASSERT( s.contains( it->nKey ));
-                    it->nVal = (*it).nKey;
-                    ++nCount;
-                    if ( it != s.begin() ) {
-                        CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                    }
-                    nPrevKey = it->nKey;
-                }
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            nCount = 0;
-            {
-                rcu_lock l;
-                for ( const_set_iterator it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( (*it).nKey == it->nVal );
-                    ++nCount;
-                    if ( it != s.cbegin() ) {
-                        CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                    }
-                    nPrevKey = it->nKey;
-                }
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            // Test iterator - random order
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            {
-                for ( int i = 0; i < nLimit; ++i ) {
-                    CPPUNIT_ASSERT( s.insert( arrRandom[i] ) );
-                }
-                CPPUNIT_MSG( PrintStat()(s, "Iterator test, random insert order") );
-            }
-
-            nCount = 0;
-            nPrevKey = 0;
-            {
-                rcu_lock l;
-                for ( set_iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( (*it).nKey == it->nVal );
-                    CPPUNIT_ASSERT( s.contains( it->nKey ));
-                    it->nVal = (*it).nKey * 2;
-                    ++nCount;
-                    if ( it != s.begin() ) {
-                        CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                    }
-                    nPrevKey = it->nKey;
-                }
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            nCount = 0;
-            {
-                rcu_lock l;
-                for ( const_set_iterator it = s.cbegin(), itEnd = s.cend(); it != itEnd; ++it ) {
-                    CPPUNIT_ASSERT( (*it).nKey * 2 == it->nVal );
-                    ++nCount;
-                    if ( it != s.cbegin() ) {
-                        CPPUNIT_ASSERT( nPrevKey + 1 == it->nKey );
-                    }
-                    nPrevKey = it->nKey;
-                }
-            }
-            CPPUNIT_ASSERT( nCount == nLimit );
-
-            // extract/get tests
-            {
-                typedef typename base_class::less<typename Set::value_type> less_predicate;
-                typename Set::exempt_ptr ep;
-                typename Set::raw_ptr rp;
-
-                // extract/get
-                for ( int i = 0; i < nLimit; ++i ) {
-                    int nKey = arrRandom[i];
-                    {
-                        rcu_lock l;
-                        rp = s.get( nKey );
-                        CPPUNIT_ASSERT( rp );
-                        CPPUNIT_CHECK( rp->nKey == nKey );
-                        CPPUNIT_CHECK( rp->nVal == nKey * 2 );
-                    }
-                    rp.release();
-
-                    ep = s.extract( nKey );
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty() );
-                    CPPUNIT_CHECK( ep->nKey == nKey );
-                    CPPUNIT_CHECK( ep->nVal == nKey * 2 );
-                    ep.release();
-
-                    {
-                        rcu_lock l;
-                        CPPUNIT_CHECK( !s.get( nKey ));
-                    }
-                    ep = s.extract( nKey );
-                    CPPUNIT_CHECK( !ep );
-                }
-                CPPUNIT_CHECK( s.empty());
-
-                // extract_with/get_with
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( s.insert( arrRandom[i]) );
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    int nKey = arrRandom[i];
-                    {
-                        rcu_lock l;
-                        rp = s.get_with( wrapped_item(nKey), wrapped_less() );
-                        CPPUNIT_ASSERT( rp );
-                        CPPUNIT_CHECK( rp->nKey == nKey );
-                        CPPUNIT_CHECK( rp->nVal == nKey );
-                    }
-                    rp.release();
-
-                    ep = s.extract_with( wrapped_item( nKey ), wrapped_less() );
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty() );
-                    CPPUNIT_CHECK( ep->nKey == nKey );
-                    CPPUNIT_CHECK( ep->nVal == nKey );
-                    ep.release();
-
-                    {
-                        rcu_lock l;
-                        CPPUNIT_CHECK( !s.get_with( wrapped_item( nKey ), wrapped_less() ));
-                    }
-                    ep = s.extract_with( wrapped_item( nKey ), wrapped_less() );
-                    CPPUNIT_CHECK( !ep );
-                }
-                CPPUNIT_CHECK( s.empty());
-
-                // extract_min
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( s.insert( arrRandom[i]) );
-
-                for ( int i = 0; i < nLimit; ++i ) {
-                    ep = s.extract_min();
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty() );
-                    CPPUNIT_CHECK( ep->nKey == i );
-                    CPPUNIT_CHECK( ep->nVal == i );
-                    CPPUNIT_CHECK( !s.contains(i) );
-                    ep.release();
-                }
-                CPPUNIT_CHECK( s.empty());
-
-                // extract_max
-                for ( int i = 0; i < nLimit; ++i )
-                    CPPUNIT_ASSERT( s.insert( arrRandom[i]) );
-
-                for ( int i = nLimit-1; i >= 0; --i ) {
-                    ep = s.extract_max();
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty() );
-                    CPPUNIT_CHECK( ep->nKey == i );
-                    CPPUNIT_CHECK( ep->nVal == i );
-                    CPPUNIT_CHECK( !s.contains(i) );
-                    ep.release();
-                }
-                CPPUNIT_CHECK( s.empty());
-                ep = s.extract_min();
-                CPPUNIT_CHECK( !ep );
-                CPPUNIT_CHECK( !s.extract_max() );
-            }
-
-            CPPUNIT_MSG( PrintStat()(s, nullptr) );
-        }
-
-    public:
-        void SkipList_RCU_GPI_less();
-        void SkipList_RCU_GPI_cmp();
-        void SkipList_RCU_GPI_cmpless();
-        void SkipList_RCU_GPI_less_stat();
-        void SkipList_RCU_GPI_cmp_stat();
-        void SkipList_RCU_GPI_cmpless_stat();
-        void SkipList_RCU_GPI_xorshift_less();
-        void SkipList_RCU_GPI_xorshift_cmp();
-        void SkipList_RCU_GPI_xorshift_cmpless();
-        void SkipList_RCU_GPI_xorshift_less_stat();
-        void SkipList_RCU_GPI_xorshift_cmp_stat();
-        void SkipList_RCU_GPI_xorshift_cmpless_stat();
-        void SkipList_RCU_GPI_turbopas_less();
-        void SkipList_RCU_GPI_turbopas_cmp();
-        void SkipList_RCU_GPI_turbopas_cmpless();
-        void SkipList_RCU_GPI_turbopas_less_stat();
-        void SkipList_RCU_GPI_turbopas_cmp_stat();
-        void SkipList_RCU_GPI_turbopas_cmpless_stat();
-        void SkipList_RCU_GPI_michaelalloc_less();
-        void SkipList_RCU_GPI_michaelalloc_cmp();
-        void SkipList_RCU_GPI_michaelalloc_cmpless();
-        void SkipList_RCU_GPI_michaelalloc_less_stat();
-        void SkipList_RCU_GPI_michaelalloc_cmp_stat();
-        void SkipList_RCU_GPI_michaelalloc_cmpless_stat();
-
-        void SkipList_RCU_GPB_less();
-        void SkipList_RCU_GPB_cmp();
-        void SkipList_RCU_GPB_cmpless();
-        void SkipList_RCU_GPB_less_stat();
-        void SkipList_RCU_GPB_cmp_stat();
-        void SkipList_RCU_GPB_cmpless_stat();
-        void SkipList_RCU_GPB_xorshift_less();
-        void SkipList_RCU_GPB_xorshift_cmp();
-        void SkipList_RCU_GPB_xorshift_cmpless();
-        void SkipList_RCU_GPB_xorshift_less_stat();
-        void SkipList_RCU_GPB_xorshift_cmp_stat();
-        void SkipList_RCU_GPB_xorshift_cmpless_stat();
-        void SkipList_RCU_GPB_turbopas_less();
-        void SkipList_RCU_GPB_turbopas_cmp();
-        void SkipList_RCU_GPB_turbopas_cmpless();
-        void SkipList_RCU_GPB_turbopas_less_stat();
-        void SkipList_RCU_GPB_turbopas_cmp_stat();
-        void SkipList_RCU_GPB_turbopas_cmpless_stat();
-        void SkipList_RCU_GPB_michaelalloc_less();
-        void SkipList_RCU_GPB_michaelalloc_cmp();
-        void SkipList_RCU_GPB_michaelalloc_cmpless();
-        void SkipList_RCU_GPB_michaelalloc_less_stat();
-        void SkipList_RCU_GPB_michaelalloc_cmp_stat();
-        void SkipList_RCU_GPB_michaelalloc_cmpless_stat();
-
-        void SkipList_RCU_GPT_less();
-        void SkipList_RCU_GPT_cmp();
-        void SkipList_RCU_GPT_cmpless();
-        void SkipList_RCU_GPT_less_stat();
-        void SkipList_RCU_GPT_cmp_stat();
-        void SkipList_RCU_GPT_cmpless_stat();
-        void SkipList_RCU_GPT_xorshift_less();
-        void SkipList_RCU_GPT_xorshift_cmp();
-        void SkipList_RCU_GPT_xorshift_cmpless();
-        void SkipList_RCU_GPT_xorshift_less_stat();
-        void SkipList_RCU_GPT_xorshift_cmp_stat();
-        void SkipList_RCU_GPT_xorshift_cmpless_stat();
-        void SkipList_RCU_GPT_turbopas_less();
-        void SkipList_RCU_GPT_turbopas_cmp();
-        void SkipList_RCU_GPT_turbopas_cmpless();
-        void SkipList_RCU_GPT_turbopas_less_stat();
-        void SkipList_RCU_GPT_turbopas_cmp_stat();
-        void SkipList_RCU_GPT_turbopas_cmpless_stat();
-        void SkipList_RCU_GPT_michaelalloc_less();
-        void SkipList_RCU_GPT_michaelalloc_cmp();
-        void SkipList_RCU_GPT_michaelalloc_cmpless();
-        void SkipList_RCU_GPT_michaelalloc_less_stat();
-        void SkipList_RCU_GPT_michaelalloc_cmp_stat();
-        void SkipList_RCU_GPT_michaelalloc_cmpless_stat();
-
-        void SkipList_RCU_SHB_less();
-        void SkipList_RCU_SHB_cmp();
-        void SkipList_RCU_SHB_cmpless();
-        void SkipList_RCU_SHB_less_stat();
-        void SkipList_RCU_SHB_cmp_stat();
-        void SkipList_RCU_SHB_cmpless_stat();
-        void SkipList_RCU_SHB_xorshift_less();
-        void SkipList_RCU_SHB_xorshift_cmp();
-        void SkipList_RCU_SHB_xorshift_cmpless();
-        void SkipList_RCU_SHB_xorshift_less_stat();
-        void SkipList_RCU_SHB_xorshift_cmp_stat();
-        void SkipList_RCU_SHB_xorshift_cmpless_stat();
-        void SkipList_RCU_SHB_turbopas_less();
-        void SkipList_RCU_SHB_turbopas_cmp();
-        void SkipList_RCU_SHB_turbopas_cmpless();
-        void SkipList_RCU_SHB_turbopas_less_stat();
-        void SkipList_RCU_SHB_turbopas_cmp_stat();
-        void SkipList_RCU_SHB_turbopas_cmpless_stat();
-        void SkipList_RCU_SHB_michaelalloc_less();
-        void SkipList_RCU_SHB_michaelalloc_cmp();
-        void SkipList_RCU_SHB_michaelalloc_cmpless();
-        void SkipList_RCU_SHB_michaelalloc_less_stat();
-        void SkipList_RCU_SHB_michaelalloc_cmp_stat();
-        void SkipList_RCU_SHB_michaelalloc_cmpless_stat();
-
-        void SkipList_RCU_SHT_less();
-        void SkipList_RCU_SHT_cmp();
-        void SkipList_RCU_SHT_cmpless();
-        void SkipList_RCU_SHT_less_stat();
-        void SkipList_RCU_SHT_cmp_stat();
-        void SkipList_RCU_SHT_cmpless_stat();
-        void SkipList_RCU_SHT_xorshift_less();
-        void SkipList_RCU_SHT_xorshift_cmp();
-        void SkipList_RCU_SHT_xorshift_cmpless();
-        void SkipList_RCU_SHT_xorshift_less_stat();
-        void SkipList_RCU_SHT_xorshift_cmp_stat();
-        void SkipList_RCU_SHT_xorshift_cmpless_stat();
-        void SkipList_RCU_SHT_turbopas_less();
-        void SkipList_RCU_SHT_turbopas_cmp();
-        void SkipList_RCU_SHT_turbopas_cmpless();
-        void SkipList_RCU_SHT_turbopas_less_stat();
-        void SkipList_RCU_SHT_turbopas_cmp_stat();
-        void SkipList_RCU_SHT_turbopas_cmpless_stat();
-        void SkipList_RCU_SHT_michaelalloc_less();
-        void SkipList_RCU_SHT_michaelalloc_cmp();
-        void SkipList_RCU_SHT_michaelalloc_cmpless();
-        void SkipList_RCU_SHT_michaelalloc_less_stat();
-        void SkipList_RCU_SHT_michaelalloc_cmp_stat();
-        void SkipList_RCU_SHT_michaelalloc_cmpless_stat();
-
-        CPPUNIT_TEST_SUITE(SkipListSetRCUHdrTest)
-            CPPUNIT_TEST(SkipList_RCU_GPI_less)
-            CPPUNIT_TEST(SkipList_RCU_GPI_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPI_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPI_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPI_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPI_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_less)
-            CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPI_xorshift_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_less)
-            CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPI_turbopas_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_less)
-            CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPI_michaelalloc_cmpless_stat)
-
-            CPPUNIT_TEST(SkipList_RCU_GPB_less)
-            CPPUNIT_TEST(SkipList_RCU_GPB_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPB_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPB_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPB_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPB_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_less)
-            CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPB_xorshift_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_less)
-            CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPB_turbopas_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_less)
-            CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPB_michaelalloc_cmpless_stat)
-
-            CPPUNIT_TEST(SkipList_RCU_GPT_less)
-            CPPUNIT_TEST(SkipList_RCU_GPT_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPT_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPT_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPT_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPT_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_less)
-            CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPT_xorshift_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_less)
-            CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPT_turbopas_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_less)
-            CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_cmp)
-            CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_GPT_michaelalloc_cmpless_stat)
-
-            CPPUNIT_TEST(SkipList_RCU_SHB_less)
-            CPPUNIT_TEST(SkipList_RCU_SHB_cmp)
-            CPPUNIT_TEST(SkipList_RCU_SHB_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_SHB_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHB_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHB_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_less)
-            CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_cmp)
-            CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHB_xorshift_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_less)
-            CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_cmp)
-            CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHB_turbopas_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_less)
-            CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_cmp)
-            CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHB_michaelalloc_cmpless_stat)
-
-            CPPUNIT_TEST(SkipList_RCU_SHT_less)
-            CPPUNIT_TEST(SkipList_RCU_SHT_cmp)
-            CPPUNIT_TEST(SkipList_RCU_SHT_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_SHT_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHT_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHT_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_less)
-            CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_cmp)
-            CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHT_xorshift_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_less)
-            CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_cmp)
-            CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHT_turbopas_cmpless_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_less)
-            CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_cmp)
-            CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_cmpless)
-            CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_less_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_cmp_stat)
-            CPPUNIT_TEST(SkipList_RCU_SHT_michaelalloc_cmpless_stat)
-
-        CPPUNIT_TEST_SUITE_END()
-
-    };
-}
-
-#endif // #ifndef CDSTEST_HDR_SKIPLIST_SET_RCU_H
diff --git a/tests/test-hdr/set/hdr_skiplist_set_rcu_gpb.cpp b/tests/test-hdr/set/hdr_skiplist_set_rcu_gpb.cpp
deleted file mode 100644 (file)
index ad8a243..0000000
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_skiplist_set_rcu.h"
-
-#include <cds/urcu/general_buffered.h>
-#include <cds/container/skip_list_set_rcu.h>
-
-#include "unit/michael_alloc.h"
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_type;
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_less()
-    {
-        struct set_traits : public cc::skip_list::traits
-        {
-            typedef SkipListSetRCUHdrTest::less<item> less;
-            typedef simple_item_counter item_counter;
-        };
-        typedef cc::SkipListSet< rcu_type, item, set_traits > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_cmp()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-            co::compare< cmp<item > >
-            ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_cmpless()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-            co::less< less<item > >
-            ,co::compare< cmp<item > >
-            ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_less_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_cmp_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_cmpless_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_xorshift_less()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_xorshift_cmp()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_xorshift_cmpless()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_xorshift_less_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_xorshift_cmp_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_xorshift_cmpless_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_turbopas_less()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_turbopas_cmp()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_turbopas_cmpless()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_turbopas_less_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_turbopas_cmp_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_turbopas_cmpless_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_michaelalloc_less()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_michaelalloc_cmp()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_michaelalloc_cmpless()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_michaelalloc_less_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_michaelalloc_cmp_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPB_michaelalloc_cmpless_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_skiplist_set_rcu_gpi.cpp b/tests/test-hdr/set/hdr_skiplist_set_rcu_gpi.cpp
deleted file mode 100644 (file)
index 5246462..0000000
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_skiplist_set_rcu.h"
-
-#include <cds/urcu/general_instant.h>
-#include <cds/container/skip_list_set_rcu.h>
-
-#include "unit/michael_alloc.h"
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_less()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_cmp()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-            co::compare< cmp<item > >
-            ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_cmpless()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-            co::less< less<item > >
-            ,co::compare< cmp<item > >
-            ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_less_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_cmp_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_cmpless_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_xorshift_less()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_xorshift_cmp()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_xorshift_cmpless()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_xorshift_less_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_xorshift_cmp_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_xorshift_cmpless_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_turbopas_less()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_turbopas_cmp()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_turbopas_cmpless()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_turbopas_less_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_turbopas_cmp_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_turbopas_cmpless_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_michaelalloc_less()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_michaelalloc_cmp()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_michaelalloc_cmpless()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_michaelalloc_less_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_michaelalloc_cmp_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPI_michaelalloc_cmpless_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-} // namespace set
-
-CPPUNIT_TEST_SUITE_REGISTRATION(set::SkipListSetRCUHdrTest);
diff --git a/tests/test-hdr/set/hdr_skiplist_set_rcu_gpt.cpp b/tests/test-hdr/set/hdr_skiplist_set_rcu_gpt.cpp
deleted file mode 100644 (file)
index 2d01198..0000000
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_skiplist_set_rcu.h"
-
-#include <cds/urcu/general_threaded.h>
-#include <cds/container/skip_list_set_rcu.h>
-
-#include "unit/michael_alloc.h"
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_type;
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_less()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_cmp()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-            co::compare< cmp<item > >
-            ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_cmpless()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-            co::less< less<item > >
-            ,co::compare< cmp<item > >
-            ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_less_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_cmp_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_cmpless_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_xorshift_less()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_xorshift_cmp()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_xorshift_cmpless()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_xorshift_less_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_xorshift_cmp_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_xorshift_cmpless_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_turbopas_less()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_turbopas_cmp()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_turbopas_cmpless()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_turbopas_less_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_turbopas_cmp_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_turbopas_cmpless_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_michaelalloc_less()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_michaelalloc_cmp()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_michaelalloc_cmpless()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_michaelalloc_less_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_michaelalloc_cmp_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_GPT_michaelalloc_cmpless_stat()
-    {
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-    }
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_skiplist_set_rcu_shb.cpp b/tests/test-hdr/set/hdr_skiplist_set_rcu_shb.cpp
deleted file mode 100644 (file)
index df67d97..0000000
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_skiplist_set_rcu.h"
-
-#include <cds/urcu/signal_buffered.h>
-#include <cds/container/skip_list_set_rcu.h>
-
-#include "unit/michael_alloc.h"
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_type;
-    }
-#endif
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-            co::compare< cmp<item > >
-            ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-            co::less< less<item > >
-            ,co::compare< cmp<item > >
-            ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_cmp_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_cmpless_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_xorshift_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_xorshift_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_xorshift_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_xorshift_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_xorshift_cmp_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_xorshift_cmpless_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_turbopas_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_turbopas_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_turbopas_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_turbopas_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_turbopas_cmp_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_turbopas_cmpless_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_michaelalloc_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_michaelalloc_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_michaelalloc_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_michaelalloc_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_michaelalloc_cmp_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHB_michaelalloc_cmpless_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_skiplist_set_rcu_sht.cpp b/tests/test-hdr/set/hdr_skiplist_set_rcu_sht.cpp
deleted file mode 100644 (file)
index abfa077..0000000
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_skiplist_set_rcu.h"
-
-#include <cds/urcu/signal_threaded.h>
-#include <cds/container/skip_list_set_rcu.h>
-
-#include "unit/michael_alloc.h"
-#include "map/print_skiplist_stat.h"
-
-namespace set {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_type;
-    }
-#endif
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-            co::compare< cmp<item > >
-            ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-            co::less< less<item > >
-            ,co::compare< cmp<item > >
-            ,co::item_counter< simple_item_counter >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_cmp_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_cmpless_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_xorshift_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_xorshift_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_xorshift_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_xorshift_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_xorshift_cmp_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_xorshift_cmpless_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_turbopas_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_turbopas_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_turbopas_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_turbopas_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_turbopas_cmp_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_turbopas_cmpless_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_michaelalloc_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_michaelalloc_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_michaelalloc_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_michaelalloc_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_michaelalloc_cmp_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-    void SkipListSetRCUHdrTest::SkipList_RCU_SHT_michaelalloc_cmpless_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListSet< rcu_type, item,
-            cc::skip_list::make_traits<
-                co::less< less<item > >
-                ,co::compare< cmp<item > >
-                ,co::item_counter< simple_item_counter >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        > set;
-        test< set, misc::print_skiplist_stat<set::stat> >();
-#endif
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_splitlist_set_dhp.cpp b/tests/test-hdr/set/hdr_splitlist_set_dhp.cpp
deleted file mode 100644 (file)
index 59f83c7..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/container/michael_list_dhp.h>
-#include <cds/container/split_list_set.h>
-
-namespace set {
-
-    namespace {
-        struct DHP_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            };
-        };
-
-        struct DHP_less_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent   memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct DHP_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct DHP_cmpmix_stat_traits : public DHP_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-    }
-
-    void HashSetHdrTest::Split_DHP_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::DHP, item, DHP_cmp_traits > set;
-
-        test_int< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::DHP, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_DHP_less()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::DHP, item, DHP_less_traits > set;
-
-        test_int< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::DHP, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::sequential_consistent >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_DHP_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::DHP, item, DHP_cmpmix_traits > set;
-        test_int< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::DHP, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_DHP_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::DHP, item, DHP_cmpmix_stat_traits > set;
-        test_int< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::DHP, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-                ,cds::opt::stat< cc::split_list::stat<> >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_splitlist_set_hp.cpp b/tests/test-hdr/set/hdr_splitlist_set_hp.cpp
deleted file mode 100644 (file)
index d204dd0..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/container/michael_list_hp.h>
-#include <cds/container/split_list_set.h>
-
-namespace set {
-
-    namespace {
-        struct HP_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            };
-        };
-
-        struct HP_less_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct HP_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct HP_cmpmix_stat_traits : public HP_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-    }
-
-    void HashSetHdrTest::Split_HP_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::HP, item, HP_cmp_traits > set;
-
-        test_int< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::HP, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_HP_less()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::HP, item, HP_less_traits > set;
-
-        test_int< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::HP, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::sequential_consistent >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_HP_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::HP, item, HP_cmpmix_traits > set;
-        test_int< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::HP, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_HP_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::HP, item, HP_cmpmix_stat_traits > set;
-        test_int< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::HP, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-                ,cds::opt::stat< cc::split_list::stat<> >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_splitlist_set_lazy_dhp.cpp b/tests/test-hdr/set/hdr_splitlist_set_lazy_dhp.cpp
deleted file mode 100644 (file)
index 74d1f8f..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/container/lazy_list_dhp.h>
-#include <cds/container/split_list_set.h>
-
-namespace set {
-
-    namespace {
-        struct DHP_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            };
-        };
-
-        struct DHP_less_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct DHP_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct DHP_cmpmix_stat_traits : public DHP_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-    }
-
-    void HashSetHdrTest::Split_Lazy_DHP_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::DHP, item, DHP_cmp_traits > set;
-
-        test_int< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::DHP, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_Lazy_DHP_less()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::DHP, item, DHP_less_traits > set;
-
-        test_int< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::DHP, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::sequential_consistent >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_Lazy_DHP_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::DHP, item, DHP_cmpmix_traits > set;
-        test_int< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::DHP, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_Lazy_DHP_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::DHP, item, DHP_cmpmix_stat_traits > set;
-        test_int< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::DHP, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-                ,cds::opt::stat< cc::split_list::stat<> >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_splitlist_set_lazy_hp.cpp b/tests/test-hdr/set/hdr_splitlist_set_lazy_hp.cpp
deleted file mode 100644 (file)
index 140b6a8..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/container/lazy_list_hp.h>
-#include <cds/container/split_list_set.h>
-
-namespace set {
-
-    namespace {
-        struct HP_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            };
-        };
-
-        struct HP_less_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct HP_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct HP_cmpmix_stat_traits : public HP_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-    }
-
-    void HashSetHdrTest::Split_Lazy_HP_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::HP, item, HP_cmp_traits > set;
-
-        test_int< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::HP, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_Lazy_HP_less()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::HP, item, HP_less_traits > set;
-
-        test_int< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::HP, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::sequential_consistent >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_Lazy_HP_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::HP, item, HP_cmpmix_traits > set;
-        test_int< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::HP, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_Lazy_HP_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::HP, item, HP_cmpmix_stat_traits > set;
-        test_int< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::HP, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cds::opt::stat< cc::split_list::stat<> >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int< opt_set >();
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_splitlist_set_lazy_nogc.cpp b/tests/test-hdr/set/hdr_splitlist_set_lazy_nogc.cpp
deleted file mode 100644 (file)
index 165c766..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/container/lazy_list_nogc.h>
-#include <cds/container/split_list_set_nogc.h>
-
-namespace set {
-
-    namespace {
-        struct nogc_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            };
-        };
-
-        struct nogc_less_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct nogc_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct nogc_cmpmix_stat_traits : public nogc_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-    }
-
-    void HashSetHdrTest::Split_Lazy_nogc_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::nogc, item, nogc_cmp_traits > set;
-
-        test_int_nogc< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::nogc, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_nogc< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_Lazy_nogc_less()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::nogc, item, nogc_less_traits > set;
-
-        test_int_nogc< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::nogc, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::sequential_consistent >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_nogc< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_Lazy_nogc_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::nogc, item, nogc_cmpmix_traits > set;
-        test_int_nogc< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::nogc, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_nogc< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_Lazy_nogc_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::nogc, item, nogc_cmpmix_stat_traits > set;
-        test_int_nogc< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::nogc, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cds::opt::stat< cc::split_list::stat<>>
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_nogc< opt_set >();
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_splitlist_set_lazy_rcu_gpb.cpp b/tests/test-hdr/set/hdr_splitlist_set_lazy_rcu_gpb.cpp
deleted file mode 100644 (file)
index e417312..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/container/lazy_list_rcu.h>
-#include <cds/container/split_list_set_rcu.h>
-
-namespace set {
-
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_type;
-
-        struct RCU_GPB_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            };
-        };
-
-        struct RCU_GPB_less_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct RCU_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct RCU_cmpmix_stat_traits : public RCU_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-    }
-
-    void HashSetHdrTest::Split_Lazy_RCU_GPB_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_GPB_cmp_traits > set;
-
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_Lazy_RCU_GPB_less()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_GPB_less_traits > set;
-
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::sequential_consistent >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_Lazy_RCU_GPB_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_cmpmix_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_Lazy_RCU_GPB_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_cmpmix_stat_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::stat< cc::split_list::stat<>>
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_splitlist_set_lazy_rcu_gpi.cpp b/tests/test-hdr/set/hdr_splitlist_set_lazy_rcu_gpi.cpp
deleted file mode 100644 (file)
index 9edfb6a..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/container/lazy_list_rcu.h>
-#include <cds/container/split_list_set_rcu.h>
-
-namespace set {
-
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
-
-        struct RCU_GPI_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            };
-        };
-
-        struct RCU_GPI_less_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct RCU_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct RCU_cmpmix_stat_traits : public RCU_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-
-    }
-
-    void HashSetHdrTest::Split_Lazy_RCU_GPI_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_GPI_cmp_traits > set;
-
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_Lazy_RCU_GPI_less()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_GPI_less_traits > set;
-
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::sequential_consistent >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_Lazy_RCU_GPI_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_cmpmix_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_Lazy_RCU_GPI_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_cmpmix_stat_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                , cc::opt::stat< cc::split_list::stat<>>
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_splitlist_set_lazy_rcu_gpt.cpp b/tests/test-hdr/set/hdr_splitlist_set_lazy_rcu_gpt.cpp
deleted file mode 100644 (file)
index ed02514..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/container/lazy_list_rcu.h>
-#include <cds/container/split_list_set_rcu.h>
-
-namespace set {
-
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_type;
-
-        struct RCU_GPT_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            };
-        };
-
-        struct RCU_GPT_less_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct RCU_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct RCU_cmpmix_stat_traits : public RCU_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-    }
-
-    void HashSetHdrTest::Split_Lazy_RCU_GPT_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_GPT_cmp_traits > set;
-
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_Lazy_RCU_GPT_less()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_GPT_less_traits > set;
-
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::sequential_consistent >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_Lazy_RCU_GPT_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_cmpmix_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_Lazy_RCU_GPT_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_cmpmix_stat_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-                , cc::opt::stat< cc::split_list::stat<>>
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_splitlist_set_lazy_rcu_shb.cpp b/tests/test-hdr/set/hdr_splitlist_set_lazy_rcu_shb.cpp
deleted file mode 100644 (file)
index e63448f..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/container/lazy_list_rcu.h>
-#include <cds/container/split_list_set_rcu.h>
-
-namespace set {
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_type;
-
-        struct RCU_SHB_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            };
-        };
-
-        struct RCU_SHB_less_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct RCU_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct RCU_cmpmix_stat_traits : public RCU_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-
-    }
-#endif
-
-    void HashSetHdrTest::Split_Lazy_RCU_SHB_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_SHB_cmp_traits > set;
-
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-#endif
-    }
-
-    void HashSetHdrTest::Split_Lazy_RCU_SHB_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_SHB_less_traits > set;
-
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::sequential_consistent >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-#endif
-    }
-
-    void HashSetHdrTest::Split_Lazy_RCU_SHB_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_cmpmix_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-#endif
-    }
-
-    void HashSetHdrTest::Split_Lazy_RCU_SHB_cmpmix_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_cmpmix_stat_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-                ,cc::opt::stat< cc::split_list::stat<>>
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-#endif
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_splitlist_set_lazy_rcu_sht.cpp b/tests/test-hdr/set/hdr_splitlist_set_lazy_rcu_sht.cpp
deleted file mode 100644 (file)
index 75e6d10..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/container/lazy_list_rcu.h>
-#include <cds/container/split_list_set_rcu.h>
-
-namespace set {
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_type;
-
-        struct RCU_SHT_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                   ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            };
-        };
-
-        struct RCU_SHT_less_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct RCU_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::lazy_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::lazy_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct RCU_cmpmix_stat_traits : public RCU_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-
-    }
-#endif
-
-    void HashSetHdrTest::Split_Lazy_RCU_SHT_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_SHT_cmp_traits > set;
-
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-#endif
-    }
-
-    void HashSetHdrTest::Split_Lazy_RCU_SHT_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_SHT_less_traits > set;
-
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::sequential_consistent >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-#endif
-    }
-
-    void HashSetHdrTest::Split_Lazy_RCU_SHT_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_cmpmix_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-#endif
-    }
-
-    void HashSetHdrTest::Split_Lazy_RCU_SHT_cmpmix_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_cmpmix_stat_traits > set;
-        test_int_rcu< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::lazy_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-                ,cc::opt::stat< cc::split_list::stat<>>
-            >::type
-        > opt_set;
-        test_int_rcu< opt_set >();
-#endif
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_splitlist_set_nogc.cpp b/tests/test-hdr/set/hdr_splitlist_set_nogc.cpp
deleted file mode 100644 (file)
index fbf395a..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/container/michael_list_nogc.h>
-#include <cds/container/split_list_set_nogc.h>
-
-namespace set {
-
-    namespace {
-        struct nogc_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            };
-        };
-
-        struct nogc_less_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent                      memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct nogc_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct nogc_cmpmix_stat_traits : public nogc_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-    }
-
-    void HashSetHdrTest::Split_nogc_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::nogc, item, nogc_cmp_traits > set;
-
-        test_int_nogc< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::nogc, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_nogc< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_nogc_less()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::nogc, item, nogc_less_traits > set;
-
-        test_int_nogc< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::nogc, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::sequential_consistent >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_nogc< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_nogc_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::nogc, item, nogc_cmpmix_traits > set;
-        test_int_nogc< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::nogc, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_nogc< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_nogc_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< cds::gc::nogc, item, nogc_cmpmix_stat_traits > set;
-        test_int_nogc< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< cds::gc::nogc, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::stat< cc::split_list::stat<>>
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_nogc< opt_set >();
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_splitlist_set_rcu_gpb.cpp b/tests/test-hdr/set/hdr_splitlist_set_rcu_gpb.cpp
deleted file mode 100644 (file)
index 9ff0d07..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/container/michael_list_rcu.h>
-#include <cds/container/split_list_set_rcu.h>
-
-namespace set {
-
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_type;
-
-        struct RCU_GPB_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            };
-        };
-
-        struct RCU_GPB_less_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent   memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct RCU_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct RCU_cmpmix_stat_traits : public RCU_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-
-    }
-
-    void HashSetHdrTest::Split_RCU_GPB_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_GPB_cmp_traits > set;
-
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_RCU_GPB_less()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_GPB_less_traits > set;
-
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::sequential_consistent >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_RCU_GPB_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_cmpmix_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_RCU_GPB_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_cmpmix_stat_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-                , cc::opt::stat< cc::split_list::stat<>>
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_splitlist_set_rcu_gpi.cpp b/tests/test-hdr/set/hdr_splitlist_set_rcu_gpi.cpp
deleted file mode 100644 (file)
index 569c336..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/container/michael_list_rcu.h>
-#include <cds/container/split_list_set_rcu.h>
-
-namespace set {
-
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
-
-        struct RCU_GPI_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            };
-        };
-
-        struct RCU_GPI_less_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent   memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct RCU_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct RCU_cmpmix_stat_traits : public RCU_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-    }
-
-    void HashSetHdrTest::Split_RCU_GPI_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_GPI_cmp_traits > set;
-
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_RCU_GPI_less()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_GPI_less_traits > set;
-
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::sequential_consistent >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_RCU_GPI_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_cmpmix_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_RCU_GPI_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_cmpmix_stat_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                , cc::opt::stat< cc::split_list::stat<>>
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_splitlist_set_rcu_gpt.cpp b/tests/test-hdr/set/hdr_splitlist_set_rcu_gpt.cpp
deleted file mode 100644 (file)
index 5069794..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/container/michael_list_rcu.h>
-#include <cds/container/split_list_set_rcu.h>
-
-namespace set {
-
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_type;
-
-        struct RCU_GPT_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            };
-        };
-
-        struct RCU_GPT_less_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent   memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct RCU_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct RCU_cmpmix_stat_traits : public RCU_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-
-    }
-
-    void HashSetHdrTest::Split_RCU_GPT_cmp()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_GPT_cmp_traits > set;
-
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_RCU_GPT_less()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_GPT_less_traits > set;
-
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::sequential_consistent >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_RCU_GPT_cmpmix()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_cmpmix_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-    }
-
-    void HashSetHdrTest::Split_RCU_GPT_cmpmix_stat()
-    {
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_cmpmix_stat_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                , cc::opt::stat< cc::split_list::stat<>>
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-    }
-
-} // namespace set
-
-
diff --git a/tests/test-hdr/set/hdr_splitlist_set_rcu_shb.cpp b/tests/test-hdr/set/hdr_splitlist_set_rcu_shb.cpp
deleted file mode 100644 (file)
index 4c330db..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/container/michael_list_rcu.h>
-#include <cds/container/split_list_set_rcu.h>
-
-namespace set {
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_type;
-
-        struct RCU_SHB_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            };
-        };
-
-        struct RCU_SHB_less_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent   memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct RCU_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct RCU_cmpmix_stat_traits : public RCU_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-
-    }
-#endif
-
-    void HashSetHdrTest::Split_RCU_SHB_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_SHB_cmp_traits > set;
-
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-#endif
-    }
-
-    void HashSetHdrTest::Split_RCU_SHB_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_SHB_less_traits > set;
-
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::sequential_consistent >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-#endif
-    }
-
-    void HashSetHdrTest::Split_RCU_SHB_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_cmpmix_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-#endif
-    }
-
-    void HashSetHdrTest::Split_RCU_SHB_cmpmix_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_cmpmix_stat_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-                ,cc::opt::stat< cc::split_list::stat<>>
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-#endif
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_splitlist_set_rcu_sht.cpp b/tests/test-hdr/set/hdr_splitlist_set_rcu_sht.cpp
deleted file mode 100644 (file)
index 13d795e..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_set.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/container/michael_list_rcu.h>
-#include <cds/container/split_list_set_rcu.h>
-
-namespace set {
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_type;
-
-        struct RCU_SHT_cmp_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::relaxed_ordering        memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-            };
-        };
-
-        struct RCU_SHT_less_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-            typedef cc::opt::v::sequential_consistent   memory_model;
-            enum { dynamic_bucket_table = false };
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct RCU_cmpmix_traits: public cc::split_list::traits
-        {
-            typedef cc::michael_list_tag                ordered_list;
-            typedef HashSetHdrTest::hash_int            hash;
-            typedef HashSetHdrTest::simple_item_counter item_counter;
-
-            struct ordered_list_traits: public cc::michael_list::traits
-            {
-                typedef HashSetHdrTest::cmp<HashSetHdrTest::item>   compare;
-                typedef HashSetHdrTest::less<HashSetHdrTest::item>   less;
-            };
-        };
-
-        struct RCU_cmpmix_stat_traits : public RCU_cmpmix_traits
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-
-    }
-#endif
-
-    void HashSetHdrTest::Split_RCU_SHT_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_SHT_cmp_traits > set;
-
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::relaxed_ordering >
-                ,cc::split_list::dynamic_bucket_table< true >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-#endif
-    }
-
-    void HashSetHdrTest::Split_RCU_SHT_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_SHT_less_traits > set;
-
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::memory_model< cc::opt::v::sequential_consistent >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-#endif
-    }
-
-    void HashSetHdrTest::Split_RCU_SHT_cmpmix()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_cmpmix_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-#endif
-    }
-
-    void HashSetHdrTest::Split_RCU_SHT_cmpmix_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        // traits-based version
-        typedef cc::SplitListSet< rcu_type, item, RCU_cmpmix_stat_traits > set;
-        test_int_rcu_michael_list< set >();
-
-        // option-based version
-        typedef cc::SplitListSet< rcu_type, item,
-            cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::opt::hash< hash_int >
-                ,cc::opt::item_counter< simple_item_counter >
-                ,cc::opt::stat< cc::split_list::stat<>>
-                ,cc::split_list::ordered_list_traits<
-                    cc::michael_list::make_traits<
-                        cc::opt::less< less<item> >
-                        ,cc::opt::compare< cmp<item> >
-                    >::type
-                >
-            >::type
-        > opt_set;
-        test_int_rcu_michael_list< opt_set >();
-#endif
-    }
-
-} // namespace set
diff --git a/tests/test-hdr/set/hdr_striped_hashset_boost_flat_set.cpp b/tests/test-hdr/set/hdr_striped_hashset_boost_flat_set.cpp
deleted file mode 100644 (file)
index 77b5d45..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_striped_set.h"
-
-#include <boost/version.hpp>
-#include <cds/details/defs.h>
-#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION <= 105500
-namespace set {
-    void StripedSetHdrTest::Striped_boost_flat_set()
-    {
-        CPPUNIT_MESSAGE("Skipped; for Microsoft Visual C++ 2013 and boost::container::flat_set you should use boost version 1.56 or above");
-    }
-}
-
-#elif BOOST_VERSION >= 104800
-
-#include <cds/container/striped_set/boost_flat_set.h>
-#include <cds/container/striped_set.h>
-#include <cds/sync/spinlock.h>
-
-namespace set {
-
-    namespace {
-        typedef boost::container::flat_set< StripedSetHdrTest::item, StripedSetHdrTest::less<StripedSetHdrTest::item> > set_t;
-
-        struct my_copy_policy {
-            typedef set_t::iterator iterator;
-
-            void operator()( set_t& set, iterator itWhat )
-            {
-                set.insert( *itWhat );
-            }
-        };
-    }
-
-    void StripedSetHdrTest::Striped_boost_flat_set()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   set_cmp;
-        test_striped< set_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_less;
-        test_striped< set_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::less< less<item> >
-        >   set_cmpmix;
-        test_striped< set_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            ,co::mutex_policy< cc::striped_set::striping< cds::sync::spin> >
-        >   set_spin;
-        test_striped< set_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(1024)");
-        {
-            typedef cc::StripedSet< set_t
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   set_less_resizing_lf;
-
-            set_less_resizing_lf s( 30, cc::striped_set::load_factor_resizing<0>( 1024 ) );
-            test_striped_with( s );
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-        >   set_less_resizing_lf16;
-        test_striped< set_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(1024)");
-        {
-            typedef cc::StripedSet< set_t
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   set_less_resizing_sbt;
-
-            set_less_resizing_sbt s( 30, cc::striped_set::single_bucket_size_threshold<0>( 1024 ) );
-            test_striped_with( s );
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<256>");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<256> >
-        >   set_less_resizing_sbt16;
-        test_striped< set_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, copy_item");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, swap_item");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, move_item");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped< set_move_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, special copy_policy");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped< set_special_copy_item >();
-
-    }
-
-}   // namespace set
-
-/*
-#else
-    namespace set {
-        void StripedSetHdrTest::Striped_boost_flat_set()
-        {
-            CPPUNIT_MESSAGE( "Skipped; boost::container::flat_set is not compatible with MS VC++ 11" );
-        }
-    }
-#endif
-*/
-
-#else // BOOST_VERSION < 104800
-
-namespace set {
-    void StripedSetHdrTest::Striped_boost_flat_set()
-    {
-        CPPUNIT_MESSAGE( "Skipped; for boost::container::flat_set you should use boost version 1.48 or above" );
-    }
-}
-#endif  // BOOST_VERSION
diff --git a/tests/test-hdr/set/hdr_striped_hashset_boost_list.cpp b/tests/test-hdr/set/hdr_striped_hashset_boost_list.cpp
deleted file mode 100644 (file)
index 223ddf0..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_striped_set.h"
-
-#include <boost/version.hpp>
-#include <cds/details/defs.h>
-#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION <= 105500
-namespace set {
-    void StripedSetHdrTest::Striped_boost_list()
-    {
-        CPPUNIT_MESSAGE("Skipped; for Microsoft Visual C++ 2013 and boost::container::list you should use boost version 1.56 or above");
-    }
-}
-
-#elif BOOST_VERSION >= 104800
-
-#include <cds/container/striped_set/boost_list.h>
-#include <cds/container/striped_set.h>
-#include <cds/sync/spinlock.h>
-
-namespace set {
-
-    namespace {
-        struct my_copy_policy {
-            typedef boost::container::list<StripedSetHdrTest::item> list_type;
-            typedef list_type::iterator iterator;
-
-            void operator()( list_type& list, iterator itInsert, iterator itWhat )
-            {
-                list.insert( itInsert, std::make_pair(itWhat->key(), itWhat->val()) );
-            }
-        };
-        typedef boost::container::list<StripedSetHdrTest::item> sequence_t;
-    }
-
-    void StripedSetHdrTest::Striped_boost_list()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-        >   set_cmp;
-        test_striped2< set_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-        >   set_less;
-        test_striped2< set_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::less< less<item> >
-        >   set_cmpmix;
-        test_striped2< set_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::mutex_policy< cc::striped_set::striping< cds::sync::spin> >
-        >   set_spin;
-        test_striped2< set_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   set_less_resizing_lf;
-            set_less_resizing_lf s( 30, cc::striped_set::load_factor_resizing<0>(8));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<4>");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<4> >
-        >   set_less_resizing_lf16;
-        test_striped2< set_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   set_less_resizing_sbt;
-            set_less_resizing_sbt s(30, cc::striped_set::single_bucket_size_threshold<0>(8) );
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<6>");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<6> >
-        >   set_less_resizing_sbt6;
-        test_striped2< set_less_resizing_sbt6 >();
-
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "copy_item");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped2< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "swap_item");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped2< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "move_item");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped2< set_move_item >();
-
-        CPPUNIT_MESSAGE( "special copy policy");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped2< set_special_copy_item >();
-    }
-
-}   // namespace set
-
-#else // BOOST_VERSION < 104800
-
-namespace set {
-    void StripedSetHdrTest::Striped_boost_list()
-    {
-        CPPUNIT_MESSAGE( "Skipped; for boost::container::list you should use boost version 1.48 or above" );
-    }
-}
-#endif  // BOOST_VERSION
diff --git a/tests/test-hdr/set/hdr_striped_hashset_boost_set.cpp b/tests/test-hdr/set/hdr_striped_hashset_boost_set.cpp
deleted file mode 100644 (file)
index 31d4ada..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_striped_set.h"
-
-#include <boost/version.hpp>
-#include <cds/details/defs.h>
-#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION <= 105500
-namespace set {
-    void StripedSetHdrTest::Striped_boost_set()
-    {
-        CPPUNIT_MESSAGE("Skipped; for Microsoft Visual C++ 2013 and boost::container::set you should use boost version 1.56 or above");
-    }
-}
-
-#elif BOOST_VERSION >= 104800
-
-#include <cds/container/striped_set/boost_set.h>
-#include <cds/container/striped_set.h>
-#include <cds/sync/spinlock.h>
-
-namespace set {
-
-    namespace {
-        typedef boost::container::set< StripedSetHdrTest::item, StripedSetHdrTest::less<StripedSetHdrTest::item> > set_t;
-
-        struct my_copy_policy {
-            typedef set_t::iterator iterator;
-
-            void operator()( set_t& set, iterator itWhat )
-            {
-                set.insert( *itWhat );
-            }
-        };
-    }
-
-    void StripedSetHdrTest::Striped_boost_set()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   set_cmp;
-        test_striped< set_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   set_less;
-        test_striped< set_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::less< less<item> >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   set_cmpmix;
-        test_striped< set_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::mutex_policy< cc::striped_set::striping< cds::sync::spin> >
-        >   set_spin;
-        test_striped< set_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(1024)");
-        {
-            typedef cc::StripedSet< set_t
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   set_less_resizing_lf;
-            set_less_resizing_lf s(30, cc::striped_set::load_factor_resizing<0>( 1024 ));
-            test_striped_with( s );
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-        >   set_less_resizing_lf16;
-        test_striped< set_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(1024");
-        {
-            typedef cc::StripedSet< set_t
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   set_less_resizing_sbt;
-            set_less_resizing_sbt s( 30, cc::striped_set::single_bucket_size_threshold<0>(1024));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<256>");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<256> >
-        >   set_less_resizing_sbt16;
-        test_striped< set_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, copy_item");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, swap_item");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, move_item");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped< set_move_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, special copy_item");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped< set_special_copy_item >();
-    }
-
-}   // namespace set
-
-#else // BOOST_VERSION < 104800
-
-namespace set {
-    void StripedSetHdrTest::Striped_boost_set()
-    {
-        CPPUNIT_MESSAGE( "Skipped; for boost::container::set you should use boost version 1.48 or above" );
-    }
-}
-#endif  // BOOST_VERSION
diff --git a/tests/test-hdr/set/hdr_striped_hashset_boost_stable_vector.cpp b/tests/test-hdr/set/hdr_striped_hashset_boost_stable_vector.cpp
deleted file mode 100644 (file)
index 16286b7..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_striped_set.h"
-
-#include <boost/version.hpp>
-#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION <= 105500
-namespace set {
-    void StripedSetHdrTest::Striped_boost_stable_vector()
-    {
-        CPPUNIT_MESSAGE("Skipped; for Microsoft Visual C++ 2013 and boost::container::stable_vector you should use boost version 1.56 or above");
-    }
-}
-
-#elif BOOST_VERSION >= 104800
-
-#include <cds/details/defs.h>
-
-#include <cds/container/striped_set/boost_stable_vector.h>
-#include <cds/container/striped_set.h>
-#include <cds/sync/spinlock.h>
-
-namespace set {
-
-    namespace {
-        struct my_copy_policy {
-            typedef boost::container::stable_vector<StripedSetHdrTest::item> vector_type;
-            typedef vector_type::iterator iterator;
-
-            void operator()( vector_type& vec, iterator itInsert, iterator itWhat )
-            {
-                vec.insert( itInsert, *itWhat );
-            }
-        };
-
-        typedef boost::container::stable_vector<StripedSetHdrTest::item> sequence_t;
-    }
-
-    void StripedSetHdrTest::Striped_boost_stable_vector()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   set_cmp;
-        test_striped2< set_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-            , co::less< less<item> >
-        >   set_less;
-        test_striped2< set_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-            , co::less< less<item> >
-        >   set_cmpmix;
-        test_striped2< set_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::mutex_policy< cc::striped_set::striping< cds::sync::spin> >
-        >   set_spin;
-        test_striped2< set_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   set_less_resizing_lf;
-            set_less_resizing_lf s( 30, cc::striped_set::load_factor_resizing<0>(8));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<4>");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<4> >
-        >   set_less_resizing_lf16;
-        test_striped2< set_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   set_less_resizing_sbt;
-            set_less_resizing_sbt s(30, cc::striped_set::single_bucket_size_threshold<0>(8) );
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<6>");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<6> >
-        >   set_less_resizing_sbt6;
-        test_striped2< set_less_resizing_sbt6 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "copy_item");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped2< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "swap_item");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped2< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "move_item");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped2< set_move_item >();
-
-        CPPUNIT_MESSAGE( "special copy_item");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped2< set_special_copy_item >();
-    }
-}   // namespace set
-
-#else // BOOST_VERSION < 104800
-
-namespace set {
-    void StripedSetHdrTest::Striped_boost_stable_vector()
-    {
-        CPPUNIT_MESSAGE( "Skipped; for boost::container::stable_vector you should use boost version 1.48 or above" );
-    }
-}
-#endif  // BOOST_VERSION
diff --git a/tests/test-hdr/set/hdr_striped_hashset_boost_unordered_set.cpp b/tests/test-hdr/set/hdr_striped_hashset_boost_unordered_set.cpp
deleted file mode 100644 (file)
index 5a71a65..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_striped_set.h"
-#include <cds/container/striped_set/boost_unordered_set.h>
-#include <cds/container/striped_set.h>
-#include <cds/sync/spinlock.h>
-
-namespace set {
-
-    namespace {
-        struct equal_item
-        {
-            template <typename T>
-            bool operator ()( T const& i1, T const& i2) const
-            {
-                return i1.key() == i2.key();
-            }
-        };
-
-        typedef boost::unordered_set< StripedSetHdrTest::item, StripedSetHdrTest::hash_int, equal_item > set_t;
-
-        struct my_copy_policy {
-            typedef set_t::iterator iterator;
-
-            void operator()( set_t& set, iterator itWhat )
-            {
-                set.insert( std::make_pair(itWhat->key(), itWhat->val()) );
-            }
-        };
-    }
-
-    void StripedSetHdrTest::Striped_boost_unordered_set()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   set_cmp;
-        test_striped< set_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   set_less;
-        test_striped< set_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::less< less<item> >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   set_cmpmix;
-        test_striped< set_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::mutex_policy< cc::striped_set::striping< cds::sync::spin> >
-        >   set_spin;
-        test_striped< set_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(1024)");
-        {
-            typedef cc::StripedSet< set_t
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   set_less_resizing_lf;
-            set_less_resizing_lf s(30, cc::striped_set::load_factor_resizing<0>( 1024 ));
-            test_striped_with( s );
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-        >   set_less_resizing_lf16;
-        test_striped< set_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(1024");
-        {
-            typedef cc::StripedSet< set_t
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   set_less_resizing_sbt;
-            set_less_resizing_sbt s( 30, cc::striped_set::single_bucket_size_threshold<0>(1024));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<256>");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<256> >
-        >   set_less_resizing_sbt16;
-        test_striped< set_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, copy_item");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, swap_item");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, move_item");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped< set_move_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, special copy_item");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped< set_special_copy_item >();
-    }
-
-}   // namespace set
diff --git a/tests/test-hdr/set/hdr_striped_hashset_boost_vector.cpp b/tests/test-hdr/set/hdr_striped_hashset_boost_vector.cpp
deleted file mode 100644 (file)
index 7baff3d..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_striped_set.h"
-
-#include <boost/version.hpp>
-#include <cds/details/defs.h>
-#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION <= 105500
-namespace set {
-    void StripedSetHdrTest::Striped_boost_vector()
-    {
-        CPPUNIT_MESSAGE("Skipped; for Microsoft Visual C++ 2013 and boost::container::vector you should use boost version 1.56 or above");
-    }
-}
-
-#elif BOOST_VERSION >= 104800
-
-#include <cds/container/striped_set/boost_vector.h>
-#include <cds/container/striped_set.h>
-#include <cds/sync/spinlock.h>
-
-namespace set {
-
-    namespace {
-        struct my_copy_policy {
-            typedef boost::container::vector<StripedSetHdrTest::item> vector_type;
-            typedef vector_type::iterator iterator;
-
-            void operator()( vector_type& vec, iterator itInsert, iterator itWhat )
-            {
-                vec.insert( itInsert, *itWhat );
-            }
-        };
-
-        typedef boost::container::vector<StripedSetHdrTest::item> sequence_t;
-    }
-
-    void StripedSetHdrTest::Striped_boost_vector()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   set_cmp;
-        test_striped2< set_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-            , co::less< less<item> >
-        >   set_less;
-        test_striped2< set_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-            , co::less< less<item> >
-        >   set_cmpmix;
-        test_striped2< set_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::mutex_policy< cc::striped_set::striping< cds::sync::spin> >
-        >   set_spin;
-        test_striped2< set_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   set_less_resizing_lf;
-            set_less_resizing_lf s( 30, cc::striped_set::load_factor_resizing<0>(8));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<4>");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<4> >
-        >   set_less_resizing_lf16;
-        test_striped2< set_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   set_less_resizing_sbt;
-            set_less_resizing_sbt s(30, cc::striped_set::single_bucket_size_threshold<0>(8) );
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<6>");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<6> >
-        >   set_less_resizing_sbt6;
-        test_striped2< set_less_resizing_sbt6 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "copy_item");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped2< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "swap_item");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped2< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "move_item");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped2< set_move_item >();
-
-        CPPUNIT_MESSAGE( "special copy_item");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped2< set_special_copy_item >();
-    }
-
-}   // namespace set
-
-#else // BOOST_VERSION < 104800
-
-namespace set {
-    void StripedSetHdrTest::Striped_boost_vector()
-    {
-        CPPUNIT_MESSAGE( "Skipped; for boost::container::vector you should use boost version 1.48 or above" );
-    }
-}
-#endif  // BOOST_VERSION
diff --git a/tests/test-hdr/set/hdr_striped_hashset_hashset_std.cpp b/tests/test-hdr/set/hdr_striped_hashset_hashset_std.cpp
deleted file mode 100644 (file)
index 5a21ba0..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_striped_set.h"
-#include <cds/container/striped_set/std_hash_set.h>
-#include <cds/container/striped_set.h>
-#include <cds/sync/spinlock.h>
-
-namespace set {
-
-    namespace {
-        struct equal_item
-        {
-            template <typename T>
-            bool operator ()( T const& i1, T const& i2) const
-            {
-                return i1.key() == i2.key();
-            }
-        };
-
-        typedef std::unordered_set< StripedSetHdrTest::item, StripedSetHdrTest::hash_int, equal_item > set_t;
-
-        struct my_copy_policy {
-            typedef set_t::iterator iterator;
-
-            void operator()( set_t& set, iterator itWhat )
-            {
-                set.insert( std::make_pair(itWhat->key(), itWhat->val()) );
-            }
-        };
-    }
-
-    void StripedSetHdrTest::Striped_hashset()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   set_cmp;
-        test_striped< set_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   set_less;
-        test_striped< set_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::less< less<item> >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   set_cmpmix;
-        test_striped< set_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::mutex_policy< cc::striped_set::striping< cds::sync::spin> >
-        >   set_spin;
-        test_striped< set_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(1024)");
-        {
-            typedef cc::StripedSet< set_t
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   set_less_resizing_lf;
-            set_less_resizing_lf s(30, cc::striped_set::load_factor_resizing<0>( 1024 ));
-            test_striped_with( s );
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-        >   set_less_resizing_lf16;
-        test_striped< set_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(1024");
-        {
-            typedef cc::StripedSet< set_t
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   set_less_resizing_sbt;
-            set_less_resizing_sbt s( 30, cc::striped_set::single_bucket_size_threshold<0>(1024));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<256>");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<256> >
-        >   set_less_resizing_sbt16;
-        test_striped< set_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, copy_item");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, swap_item");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, move_item");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped< set_move_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, special copy_item");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped< set_special_copy_item >();
-
-    }
-
-}   // namespace set
diff --git a/tests/test-hdr/set/hdr_striped_hashset_list.cpp b/tests/test-hdr/set/hdr_striped_hashset_list.cpp
deleted file mode 100644 (file)
index 27b19a7..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_striped_set.h"
-#include <cds/container/striped_set/std_list.h>
-#include <cds/container/striped_set.h>
-#include <cds/sync/spinlock.h>
-
-namespace set {
-
-    namespace {
-        struct my_copy_policy {
-            typedef std::list<StripedSetHdrTest::item> list_type;
-            typedef list_type::iterator iterator;
-
-            void operator()( list_type& list, iterator itInsert, iterator itWhat )
-            {
-                list.insert( itInsert, std::make_pair(itWhat->key(), itWhat->val()) );
-            }
-        };
-
-        typedef std::list<StripedSetHdrTest::item> sequence_t;
-    }
-
-    void StripedSetHdrTest::Striped_list()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   set_cmp;
-        test_striped2< set_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-            , co::less< less<item> >
-        >   set_less;
-        test_striped2< set_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-            , co::less< less<item> >
-        >   set_cmpmix;
-        test_striped2< set_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::mutex_policy< cc::striped_set::striping< cds::sync::spin> >
-        >   set_spin;
-        test_striped2< set_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   set_less_resizing_lf;
-            set_less_resizing_lf s( 30, cc::striped_set::load_factor_resizing<0>(8));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<4>");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<4> >
-        >   set_less_resizing_lf16;
-        test_striped2< set_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   set_less_resizing_sbt;
-            set_less_resizing_sbt s(30, cc::striped_set::single_bucket_size_threshold<0>(8) );
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<6>");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<6> >
-        >   set_less_resizing_sbt6;
-        test_striped2< set_less_resizing_sbt6 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "copy_item");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped2< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "swap_item");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped2< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "move_item");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped2< set_move_item >();
-
-        CPPUNIT_MESSAGE( "special copy_item");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped2< set_special_copy_item >();
-
-    }
-
-}   // namespace set
diff --git a/tests/test-hdr/set/hdr_striped_hashset_set.cpp b/tests/test-hdr/set/hdr_striped_hashset_set.cpp
deleted file mode 100644 (file)
index 7b3182d..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_striped_set.h"
-#include <cds/container/striped_set/std_set.h>
-#include <cds/container/striped_set.h>
-#include <cds/sync/spinlock.h>
-
-namespace set {
-
-    namespace {
-        struct my_copy_policy {
-            typedef std::set<StripedSetHdrTest::item, StripedSetHdrTest::less<StripedSetHdrTest::item> > set_type;
-            typedef set_type::iterator iterator;
-
-            void operator()( set_type& set, iterator itWhat )
-            {
-                set.insert( std::make_pair(itWhat->key(), itWhat->val()) );
-            }
-        };
-
-        typedef std::set<StripedSetHdrTest::item, StripedSetHdrTest::less<StripedSetHdrTest::item> > set_t;
-    }
-
-    void StripedSetHdrTest::Striped_set()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   set_cmp;
-        test_striped< set_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   set_less;
-        test_striped< set_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::less< less<item> >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   set_cmpmix;
-        test_striped< set_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::mutex_policy< cc::striped_set::striping< cds::sync::spin> >
-        >   set_spin;
-        test_striped< set_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(1024)");
-        {
-            typedef cc::StripedSet< set_t
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   set_less_resizing_lf;
-            set_less_resizing_lf s(30, cc::striped_set::load_factor_resizing<0>( 1024 ));
-            test_striped_with( s );
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-        >   set_less_resizing_lf16;
-        test_striped< set_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(1024");
-        {
-            typedef cc::StripedSet< set_t
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   set_less_resizing_sbt;
-            set_less_resizing_sbt s( 30, cc::striped_set::single_bucket_size_threshold<0>(1024));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<256>");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<256> >
-        >   set_less_resizing_sbt16;
-        test_striped< set_less_resizing_sbt16 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, copy_item");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, swap_item");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, move_item");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped< set_move_item >();
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<256>, special copy_item");
-        typedef cc::StripedSet< set_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped< set_special_copy_item >();
-    }
-
-}   // namespace set
diff --git a/tests/test-hdr/set/hdr_striped_hashset_slist.cpp b/tests/test-hdr/set/hdr_striped_hashset_slist.cpp
deleted file mode 100644 (file)
index 287e289..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_striped_set.h"
-#include <boost/version.hpp>
-#include <cds/details/defs.h>
-#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION <= 105500
-namespace set {
-    void StripedSetHdrTest::Striped_slist()
-    {
-        CPPUNIT_MESSAGE("Skipped; for Microsoft Visual C++ 2013 and boost::container::slist you should use boost version 1.56 or above");
-    }
-}
-
-#elif BOOST_VERSION >= 104800
-
-#include <cds/container/striped_set/boost_slist.h>
-#include <cds/container/striped_set.h>
-#include <cds/sync/spinlock.h>
-
-namespace set {
-
-    namespace {
-        struct my_copy_policy {
-            typedef boost::container::slist<StripedSetHdrTest::item> list_type;
-            typedef list_type::iterator iterator;
-
-            void operator()( list_type& list, iterator itInsert, iterator itWhat )
-            {
-                list.insert_after( itInsert, StripedSetHdrTest::item(std::make_pair(itWhat->key(), itWhat->val())) );
-            }
-        };
-
-        typedef boost::container::slist<StripedSetHdrTest::item> sequence_t;
-    }
-
-    void StripedSetHdrTest::Striped_slist()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   set_cmp;
-        test_striped2< set_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-            , co::less< less<item> >
-        >   set_less;
-        test_striped2< set_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-            , co::less< less<item> >
-        >   set_cmpmix;
-        test_striped2< set_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::mutex_policy< cc::striped_set::striping< cds::sync::spin> >
-        >   set_spin;
-        test_striped2< set_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   set_less_resizing_lf;
-            set_less_resizing_lf s( 30, cc::striped_set::load_factor_resizing<0>(8));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<4>");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<4> >
-        >   set_less_resizing_lf16;
-        test_striped2< set_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   set_less_resizing_sbt;
-            set_less_resizing_sbt s(30, cc::striped_set::single_bucket_size_threshold<0>(8) );
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<6>");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<6> >
-        >   set_less_resizing_sbt6;
-        test_striped2< set_less_resizing_sbt6 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "copy_item");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped2< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "swap_item");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped2< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "move_item");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped2< set_move_item >();
-
-        CPPUNIT_MESSAGE( "special copy_item");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped2< set_special_copy_item >();
-    }
-
-}   // namespace set
-
-
-#else
-
-namespace set {
-    void StripedSetHdrTest::Striped_slist()
-    {
-        CPPUNIT_MESSAGE("Skipped; for boost::container::slist you should use boost version 1.48 or above");
-    }
-} // namespace set
-
-#endif // BOOST_VERSION
-
diff --git a/tests/test-hdr/set/hdr_striped_hashset_vector.cpp b/tests/test-hdr/set/hdr_striped_hashset_vector.cpp
deleted file mode 100644 (file)
index 01b63ef..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set/hdr_striped_set.h"
-#include <cds/container/striped_set/std_vector.h>
-#include <cds/container/striped_set.h>
-#include <cds/sync/spinlock.h>
-
-namespace set {
-
-    namespace {
-        struct my_copy_policy {
-            typedef std::vector<StripedSetHdrTest::item> vector_type;
-            typedef vector_type::iterator iterator;
-
-            void operator()( vector_type& vec, iterator itInsert, iterator itWhat )
-            {
-                vec.insert( itInsert, std::make_pair(itWhat->key(), itWhat->val()) );
-            }
-        };
-
-        typedef std::vector<StripedSetHdrTest::item> sequence_t;
-    }
-
-    void StripedSetHdrTest::Striped_vector()
-    {
-        CPPUNIT_MESSAGE( "cmp");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-        >   set_cmp;
-        test_striped2< set_cmp >();
-
-        CPPUNIT_MESSAGE( "less");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-            , co::less< less<item> >
-        >   set_less;
-        test_striped2< set_less >();
-
-        CPPUNIT_MESSAGE( "cmpmix");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            ,co::mutex_policy< cc::striped_set::striping<> >
-            , co::less< less<item> >
-        >   set_cmpmix;
-        test_striped2< set_cmpmix >();
-
-        // Spinlock as lock policy
-        CPPUNIT_MESSAGE( "spinlock");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::mutex_policy< cc::striped_set::striping< cds::sync::spin> >
-        >   set_spin;
-        test_striped2< set_spin >();
-
-        // Resizing policy
-        CPPUNIT_MESSAGE( "load_factor_resizing<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
-            >   set_less_resizing_lf;
-            set_less_resizing_lf s( 30, cc::striped_set::load_factor_resizing<0>(8));
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "load_factor_resizing<4>");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::load_factor_resizing<4> >
-        >   set_less_resizing_lf16;
-        test_striped2< set_less_resizing_lf16 >();
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(8)");
-        {
-            typedef cc::StripedSet< sequence_t
-                , co::hash< hash_int >
-                , co::less< less<item> >
-                , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
-            >   set_less_resizing_sbt;
-            set_less_resizing_sbt s(30, cc::striped_set::single_bucket_size_threshold<0>(8) );
-            test_striped_with(s);
-        }
-
-        CPPUNIT_MESSAGE( "single_bucket_size_threshold<6>");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::less< less<item> >
-            , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<6> >
-        >   set_less_resizing_sbt6;
-        test_striped2< set_less_resizing_sbt6 >();
-
-        // Copy policy
-        CPPUNIT_MESSAGE( "copy_item");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::copy_item >
-        >   set_copy_item;
-        test_striped2< set_copy_item >();
-
-        CPPUNIT_MESSAGE( "swap_item");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::swap_item >
-        >   set_swap_item;
-        test_striped2< set_swap_item >();
-
-        CPPUNIT_MESSAGE( "move_item");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< cc::striped_set::move_item >
-        >   set_move_item;
-        test_striped2< set_move_item >();
-
-        CPPUNIT_MESSAGE( "special copy_item");
-        typedef cc::StripedSet< sequence_t
-            , co::hash< hash_int >
-            , co::compare< cmp<item> >
-            , co::copy_policy< my_copy_policy >
-        >   set_special_copy_item;
-        test_striped2< set_special_copy_item >();
-    }
-
-}   // namespace set
-
-CPPUNIT_TEST_SUITE_REGISTRATION(set::StripedSetHdrTest);
diff --git a/tests/test-hdr/set/hdr_striped_set.h b/tests/test-hdr/set/hdr_striped_set.h
deleted file mode 100644 (file)
index 68dd250..0000000
+++ /dev/null
@@ -1,784 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_STRIPED_SET_H
-#define CDSTEST_HDR_STRIPED_SET_H
-
-#include "cppunit/cppunit_proxy.h"
-#include "size_check.h"
-
-#include <cds/opt/hash.h>
-#include <cds/os/timer.h>
-#include <functional>   // ref
-
-// forward namespace declaration
-namespace cds {
-    namespace container {}
-    namespace opt {}
-}
-
-namespace set {
-    using misc::check_size;
-
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-
-
-    class StripedSetHdrTest: public CppUnitMini::TestCase
-    {
-    public:
-        struct stat
-        {
-            unsigned int nFindCount     ;   // count of find-functor calling
-            unsigned int nUpdateNewCount;
-            unsigned int nUpdateCount;
-
-            stat()
-            {
-                memset( this, 0, sizeof(*this));
-            }
-
-            void copy( stat const& s )
-            {
-                nFindCount = s.nFindCount;
-                nUpdateCount = s.nUpdateCount;
-                nUpdateNewCount = s.nUpdateNewCount;
-            }
-        };
-
-        struct item: public stat
-        {
-            int nKey;
-            int nVal;
-
-            item()
-            {}
-
-            item( int key )
-                : nKey( key )
-                , nVal( key )
-            {}
-
-            item (int key, int val )
-                : nKey(key)
-                , nVal( val )
-            {}
-
-            item( std::pair<int,int> const& p )
-                : nKey( p.first )
-                , nVal( p.second )
-            {}
-
-            item( item const& i )
-                : nKey( i.nKey )
-                , nVal( i.nVal )
-            {}
-
-            item& operator=(item const& i)
-            {
-                nKey = i.nKey;
-                nVal = i.nVal;
-                stat::copy(i);
-
-                return *this;
-            }
-
-            item( item&& i )
-                : nKey( i.nKey )
-                , nVal( i.nVal )
-            {}
-
-            //item& operator=(item&& i)
-            //{
-            //    nKey = i.nKey;
-            //    nVal = i.nVal;
-            //    return *this;
-            //}
-
-            int key() const
-            {
-                return nKey;
-            }
-
-            int val() const
-            {
-                return nVal;
-            }
-        };
-
-        struct hash_int {
-            size_t operator()( int i ) const
-            {
-                return co::v::hash<int>()( i );
-            }
-
-            size_t operator()( std::pair<int,int> const& i ) const
-            {
-                return co::v::hash<int>()( i.first );
-            }
-
-            template <typename Item>
-            size_t operator()( Item const& i ) const
-            {
-                return (*this)( i.key() );
-            }
-        };
-
-        struct simple_item_counter {
-            size_t  m_nCount;
-
-            simple_item_counter()
-                : m_nCount(0)
-            {}
-
-            size_t operator ++()
-            {
-                return ++m_nCount;
-            }
-
-            size_t operator --()
-            {
-                return --m_nCount;
-            }
-
-            void reset()
-            {
-                m_nCount = 0;
-            }
-
-            operator size_t() const
-            {
-                return m_nCount;
-            }
-        };
-
-        template <typename T>
-        struct less
-        {
-            bool operator ()(const T& v1, const T& v2 ) const
-            {
-                return v1.key() < v2.key();
-            }
-
-            template <typename Q>
-            bool operator ()(const T& v1, const Q& v2 ) const
-            {
-                return v1.key() < v2;
-            }
-
-            template <typename Q>
-            bool operator ()(const Q& v1, const T& v2 ) const
-            {
-                return v1 < v2.key();
-            }
-
-            bool operator ()( std::pair<int, int> const& v1, const T& v2 ) const
-            {
-                return v1.first < v2.key();
-            }
-
-            bool operator ()(const T& v1, std::pair<int, int> const& v2 ) const
-            {
-                return v1.key() < v2.first;
-            }
-        };
-
-        template <typename T>
-        struct cmp {
-            int operator ()(const T& v1, const T& v2 ) const
-            {
-                if ( v1.key() < v2.key() )
-                    return -1;
-                return v1.key() > v2.key() ? 1 : 0;
-            }
-
-            template <typename Q>
-            int operator ()(const T& v1, const Q& v2 ) const
-            {
-                if ( v1.key() < v2 )
-                    return -1;
-                return v1.key() > v2 ? 1 : 0;
-            }
-
-            template <typename Q>
-            int operator ()(const Q& v1, const T& v2 ) const
-            {
-                if ( v1 < v2.key() )
-                    return -1;
-                return v1 > v2.key() ? 1 : 0;
-            }
-
-            int operator()( std::pair<int,int> const& v1, T const& v2 ) const
-            {
-                if ( v1.first < v2.key() )
-                    return -1;
-                return v1.first > v2.key() ? 1 : 0;
-            }
-
-            int operator()( T const& v1, std::pair<int,int> const& v2 ) const
-            {
-                if ( v1.key() < v2.first )
-                    return -1;
-                return v1.key() > v2.first ? 1 : 0;
-            }
-        };
-
-        template <typename T>
-        struct equal
-        {
-            bool operator ()(const T& v1, const T& v2 ) const
-            {
-                return v1.key() == v2.key();
-            }
-
-            template <typename Q>
-            bool operator ()(const T& v1, const Q& v2 ) const
-            {
-                return v1.key() == v2;
-            }
-
-            template <typename Q>
-            bool operator ()(const Q& v1, const T& v2 ) const
-            {
-                return v1 == v2.key();
-            }
-
-            bool operator ()( std::pair<int, int> const& v1, const T& v2 ) const
-            {
-                return v1.first == v2.key();
-            }
-
-            bool operator ()(const T& v1, std::pair<int, int> const& v2 ) const
-            {
-                return v1.key() == v2.first;
-            }
-        };
-
-        struct find_functor
-        {
-            template <typename Item, typename T>
-            void operator()( Item& i, T& /*val*/ ) const
-            {
-                ++i.nFindCount;
-            }
-            template <typename Item, typename T>
-            void operator()( Item& i, T const& /*val*/ ) const
-            {
-                ++i.nFindCount;
-            }
-        };
-
-        template <typename Item>
-        struct copy_found
-        {
-            Item    m_found;
-
-            template <typename T>
-            void operator()( Item& i, T& /*val*/ )
-            {
-                m_found = i;
-            }
-
-            void operator()( Item const& i )
-            {
-                m_found = i;
-            }
-        };
-
-        struct insert_functor
-        {
-            template <typename Item>
-            void operator()(Item& i )
-            {
-                i.nVal = i.nKey * 100;
-            }
-        };
-
-        template <typename Item, typename Q>
-        static void update_func( bool bNew, Item& i, Q& /*val*/ )
-        {
-            if ( bNew )
-                ++i.nUpdateNewCount;
-            else
-                ++i.nUpdateCount;
-        }
-
-        struct update_functor
-        {
-            template <typename Item, typename Q>
-            void operator()( bool bNew, Item& i, Q& val )
-            {
-                update_func( bNew, i, val );
-            }
-        };
-
-    public:
-        template <class Set>
-        void test_striped()
-        {
-            Set s( 30 );
-            CPPUNIT_ASSERT( s.bucket_count() == 32 );
-            CPPUNIT_ASSERT( s.lock_count() == 32 );
-
-            test_striped_with( s );
-        }
-
-        template <class Set>
-        void test_striped_with( Set& s )
-        {
-            cds::OS::Timer    timer;
-
-            test_int_with( s );
-
-            // Resizing test
-            for ( int i = 0; i < 10000; i++ ) {
-                s.insert( i );
-            }
-
-            CPPUNIT_MSG( "   Duration=" << timer.duration() );
-        }
-
-        template <class Set>
-        void test_int_with( Set& s)
-        {
-            typedef typename Set::value_type    value_type;
-
-            item itm;
-            int key;
-
-            // insert/find test
-            CPPUNIT_ASSERT( !s.contains( 10 ) );
-            CPPUNIT_ASSERT( s.insert( 10 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-            CPPUNIT_ASSERT( s.contains( 10 ) );
-
-            CPPUNIT_ASSERT( !s.insert( 10 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-
-            CPPUNIT_ASSERT( !s.contains( 20 ) );
-            CPPUNIT_ASSERT( s.insert( std::make_pair(20, 25) ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-            CPPUNIT_ASSERT( s.contains( 10 ) );
-            CPPUNIT_ASSERT( s.contains( key = 20 ) );
-            CPPUNIT_ASSERT( s.find( key, find_functor() ) );
-            {
-                copy_found<item> f;
-                key = 20;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 20 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 25 );
-                CPPUNIT_ASSERT( f.m_found.nFindCount == 1 );
-            }
-            {
-                copy_found<item> f;
-                key = 20;
-                CPPUNIT_ASSERT( s.find( key, find_functor() ) );
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 20 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 25 );
-                CPPUNIT_ASSERT( f.m_found.nFindCount == 2 );
-            }
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-
-            CPPUNIT_ASSERT( !s.contains( 25 ) );
-            CPPUNIT_ASSERT( s.insert( std::make_pair(25, -1), insert_functor() ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-            {
-                copy_found<item> f;
-                key = 25;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 25 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 2500 );
-            }
-
-            // update() test
-            key = 10;
-            {
-                copy_found<item> f;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 10 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 10 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateCount == 0 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateNewCount == 0 );
-            }
-            std::pair<bool, bool> updateResult = s.update( key, update_functor() );
-            CPPUNIT_ASSERT( updateResult.first && !updateResult.second );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-            {
-                copy_found<item> f;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 10 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 10 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateCount == 1 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateNewCount == 0 );
-            }
-
-            updateResult = s.update(std::make_pair(13, 1300), update_functor(), false);
-            CPPUNIT_ASSERT(!updateResult.first && !updateResult.second);
-            updateResult = s.update( std::make_pair(13, 1300), update_functor() );
-            CPPUNIT_ASSERT( updateResult.first && updateResult.second );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 4 ));
-            {
-                copy_found<item> f;
-                key = 13;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 13 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 1300 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateCount == 0 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateNewCount == 1 );
-            }
-
-            // erase test
-            CPPUNIT_ASSERT( s.erase(13) );
-            CPPUNIT_ASSERT( !s.contains( 13 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-            CPPUNIT_ASSERT( !s.erase(13) );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-
-            CPPUNIT_ASSERT( s.contains( 10 ));
-            CPPUNIT_ASSERT( s.erase( 10 ));
-            CPPUNIT_ASSERT( !s.contains( 10 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-            CPPUNIT_ASSERT( !s.erase(10) );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-
-            CPPUNIT_ASSERT( s.contains(20) );
-            {
-                copy_found<item> f;
-                CPPUNIT_ASSERT( s.erase( 20, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 20 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 25 );
-
-                CPPUNIT_ASSERT( s.insert(235))
-                    CPPUNIT_ASSERT( s.erase( 235, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 235 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 235 );
-            }
-            CPPUNIT_ASSERT( !s.contains( 20 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-
-            // emplace test
-            CPPUNIT_ASSERT( s.emplace( 151 )) ;  // key = 151,  val = 151
-            CPPUNIT_ASSERT( s.emplace( 174, 471 )) ;    // key = 174, val = 471
-            CPPUNIT_ASSERT( s.emplace( std::make_pair( 190, 91 ) )) ; // key == 190, val = 91
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-
-            CPPUNIT_ASSERT( s.contains(151));
-            CPPUNIT_ASSERT( s.contains(174));
-            CPPUNIT_ASSERT( s.contains(190));
-
-            {
-                copy_found<item> f;
-                key = 151;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 151 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 151 );
-
-                key = 174;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 174 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 471 );
-
-                key = 190;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 190 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 91 );
-            }
-
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-        }
-
-        template <class Set>
-        void test_striped2()
-        {
-            Set s( 30 );
-            CPPUNIT_ASSERT( s.bucket_count() == 32 );
-            CPPUNIT_ASSERT( s.lock_count() == 32 );
-
-            test_striped_with2( s );
-        }
-
-        template <class Set>
-        void test_striped_with2( Set& s )
-        {
-            cds::OS::Timer    timer;
-
-            test_int_with2( s );
-
-            // Resizing test
-            for ( int i = 0; i < 10000; i++ ) {
-                s.insert( i );
-            }
-
-            CPPUNIT_MSG( "   Duration=" << timer.duration() );
-        }
-
-        template <class Set>
-        void test_int_with2( Set& s)
-        {
-            typedef typename Set::value_type    value_type;
-
-            item itm;
-            int key;
-
-            // insert/find test
-            CPPUNIT_ASSERT( !s.contains( 10 ) );
-            CPPUNIT_ASSERT( s.insert( 10 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-            CPPUNIT_ASSERT( s.contains( 10 ) );
-
-            CPPUNIT_ASSERT( !s.insert( 10 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-
-            CPPUNIT_ASSERT( !s.contains( 20, less<value_type>() ) );
-            CPPUNIT_ASSERT( s.insert( std::make_pair(20, 25) ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-            CPPUNIT_ASSERT( s.contains( 10 ) );
-            CPPUNIT_ASSERT( s.contains( key = 20, less<value_type>() ) );
-            CPPUNIT_ASSERT( s.find_with( key, less<value_type>(), find_functor() ) );
-            {
-                copy_found<item> f;
-                key = 20;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 20 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 25 );
-                CPPUNIT_ASSERT( f.m_found.nFindCount == 1 );
-            }
-            {
-                copy_found<item> f;
-                key = 20;
-                CPPUNIT_ASSERT( s.find_with( 20, less<value_type>(), find_functor() ) );
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 20 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 25 );
-                CPPUNIT_ASSERT( f.m_found.nFindCount == 2 );
-            }
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-
-            CPPUNIT_ASSERT( !s.contains( 25 ) );
-            CPPUNIT_ASSERT( s.insert( std::make_pair(25, -1), insert_functor() ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-            {
-                copy_found<item> f;
-                key = 25;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 25 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 2500 );
-            }
-
-            // update() test
-            key = 10;
-            {
-                copy_found<item> f;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 10 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 10 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateCount == 0 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateNewCount == 0 );
-            }
-            std::pair<bool, bool> updateResult = s.update( key, update_functor() );
-            CPPUNIT_ASSERT( updateResult.first && !updateResult.second );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-            {
-                copy_found<item> f;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 10 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 10 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateCount == 1 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateNewCount == 0 );
-            }
-
-            updateResult = s.update(std::make_pair(13, 1300), update_functor(), false);
-            CPPUNIT_ASSERT(!updateResult.first && !updateResult.second);
-            updateResult = s.update( std::make_pair(13, 1300), update_functor() );
-            CPPUNIT_ASSERT( updateResult.first && updateResult.second );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 4 ));
-            {
-                copy_found<item> f;
-                key = 13;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 13 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 1300 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateCount == 0 );
-                CPPUNIT_ASSERT( f.m_found.nUpdateNewCount == 1 );
-            }
-
-            // erase test
-            CPPUNIT_ASSERT( s.erase(13) );
-            CPPUNIT_ASSERT( !s.contains( 13 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-            CPPUNIT_ASSERT( !s.erase(13) );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-
-            CPPUNIT_ASSERT( s.contains( 10 ));
-            CPPUNIT_ASSERT( s.erase_with( 10, less<value_type>() ));
-            CPPUNIT_ASSERT( !s.contains( 10 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-            CPPUNIT_ASSERT( !s.erase_with( 10, less<value_type>() ) );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-
-            CPPUNIT_ASSERT( s.contains(20) );
-            {
-                copy_found<item> f;
-                CPPUNIT_ASSERT( s.erase( 20, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 20 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 25 );
-
-                CPPUNIT_ASSERT( s.insert(235))
-                    CPPUNIT_ASSERT( s.erase_with( 235, less<value_type>(), std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 235 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 235 );
-            }
-            CPPUNIT_ASSERT( !s.contains( 20 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-
-            // emplace test
-            CPPUNIT_ASSERT( s.emplace( 151 )) ;  // key = 151,  val = 151
-            CPPUNIT_ASSERT( s.emplace( 174, 471 )) ;    // key = 174, val = 471
-            CPPUNIT_ASSERT( s.emplace( std::make_pair( 190, 91 ) )) ; // key == 190, val = 91
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-
-            CPPUNIT_ASSERT( s.contains(151));
-            CPPUNIT_ASSERT( s.contains(174));
-            CPPUNIT_ASSERT( s.contains(190));
-
-            {
-                copy_found<item> f;
-                key = 151;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 151 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 151 );
-
-                key = 174;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 174 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 471 );
-
-                key = 190;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 190 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 91 );
-            }
-
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-        }
-
-        void Striped_list();
-        void Striped_vector();
-        void Striped_set();
-        void Striped_hashset();
-        void Striped_slist();
-        void Striped_boost_list();
-        void Striped_boost_vector();
-        void Striped_boost_stable_vector();
-        void Striped_boost_flat_set();
-        void Striped_boost_set();
-        void Striped_boost_unordered_set();
-
-        void Refinable_list();
-        void Refinable_vector();
-        void Refinable_set();
-        void Refinable_hashset();
-        void Refinable_slist();
-        void Refinable_boost_list();
-        void Refinable_boost_vector();
-        void Refinable_boost_stable_vector();
-        void Refinable_boost_flat_set();
-        void Refinable_boost_set();
-        void Refinable_boost_unordered_set();
-
-        CPPUNIT_TEST_SUITE(StripedSetHdrTest)
-            CPPUNIT_TEST(Striped_list)
-            CPPUNIT_TEST(Striped_vector)
-            CPPUNIT_TEST(Striped_set)
-            CPPUNIT_TEST(Striped_hashset)
-            CPPUNIT_TEST(Striped_slist)
-            CPPUNIT_TEST(Striped_boost_list)
-            CPPUNIT_TEST(Striped_boost_vector)
-            CPPUNIT_TEST(Striped_boost_stable_vector)
-            CPPUNIT_TEST(Striped_boost_flat_set)
-            CPPUNIT_TEST(Striped_boost_set)
-            CPPUNIT_TEST(Striped_boost_unordered_set)
-
-            CPPUNIT_TEST(Refinable_list)
-            CPPUNIT_TEST(Refinable_vector)
-            CPPUNIT_TEST(Refinable_set)
-            CPPUNIT_TEST(Refinable_hashset)
-            CPPUNIT_TEST(Refinable_slist)
-            CPPUNIT_TEST(Refinable_boost_list)
-            CPPUNIT_TEST(Refinable_boost_vector)
-            CPPUNIT_TEST(Refinable_boost_stable_vector)
-            CPPUNIT_TEST(Refinable_boost_flat_set)
-            CPPUNIT_TEST(Refinable_boost_set)
-            CPPUNIT_TEST(Refinable_boost_unordered_set)
-
-        CPPUNIT_TEST_SUITE_END()
-    };
-} // namespace set
-
-#endif // #ifndef CDSTEST_HDR_STRIPED_SET_H
diff --git a/tests/test-hdr/set/intrusive_cuckoo_set_common.h b/tests/test-hdr/set/intrusive_cuckoo_set_common.h
deleted file mode 100644 (file)
index 7e3eabd..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_INTRUSIVE_CUCKOO_SET_COMMON_H
-#define CDSTEST_HDR_INTRUSIVE_CUCKOO_SET_COMMON_H
-
-namespace set {
-    namespace {
-
-        typedef IntrusiveCuckooSetHdrTest::hash_int    hash1;
-        struct hash2: private hash1
-        {
-            typedef hash1 base_class;
-
-            size_t operator()( int i ) const
-            {
-                size_t h = ~( base_class::operator()(i));
-                return ~h + 0x9e3779b9 + (h << 6) + (h >> 2);
-            }
-            template <typename Item>
-            size_t operator()( const Item& i ) const
-            {
-                size_t h = ~( base_class::operator()(i));
-                return ~h + 0x9e3779b9 + (h << 6) + (h >> 2);
-            }
-            size_t operator()( IntrusiveCuckooSetHdrTest::find_key const& i) const
-            {
-                size_t h = ~( base_class::operator()(i));
-                return ~h + 0x9e3779b9 + (h << 6) + (h >> 2);
-            }
-        };
-
-        template <typename T>
-        struct equal_to
-        {
-            bool operator ()(const T& v1, const T& v2 ) const
-            {
-                return v1.key() == v2.key();
-            }
-
-            template <typename Q>
-            bool operator ()(const T& v1, const Q& v2 ) const
-            {
-                return v1.key() == v2;
-            }
-
-            template <typename Q>
-            bool operator ()(const Q& v1, const T& v2 ) const
-            {
-                return v1 == v2.key();
-            }
-        };
-
-    }
-} // namespace set
-
-#endif // #ifndef CDSTEST_HDR_INTRUSIVE_CUCKOO_SET_COMMON_H
diff --git a/tests/test-hdr/size_check.h b/tests/test-hdr/size_check.h
deleted file mode 100644 (file)
index feca79b..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_SIZE_CHECK_H
-#define CDSTEST_SIZE_CHECK_H
-
-#include <cds/algo/atomic.h>
-
-namespace misc {
-
-    template <typename ItemCounter>
-    struct size_checker {
-        template <typename Container>
-        bool operator()( Container const& c, size_t nSize ) const
-        {
-            return c.size() == nSize;
-        }
-    };
-
-    template<>
-    struct size_checker< cds::atomicity::empty_item_counter > {
-        template <typename Container>
-        bool operator()( Container const& /*c*/, size_t /*nSize*/ ) const
-        {
-            return true;
-        }
-    };
-
-    template <class Container>
-    static inline bool check_size( Container const& cont, size_t nSize )
-    {
-        return size_checker<typename Container::item_counter>()( cont, nSize );
-    }
-
-} // namespace misc
-
-#endif // #ifndef CDSTEST_SIZE_CHECK_H
diff --git a/tests/test-hdr/stack/hdr_elimination_stack_dhp.cpp b/tests/test-hdr/stack/hdr_elimination_stack_dhp.cpp
deleted file mode 100644 (file)
index 0df497f..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_treiber_stack.h"
-#include <cds/gc/dhp.h>
-#include <cds/container/treiber_stack.h>
-
-namespace stack {
-#define TEST(X)     void TestStack::X() { test<defs::X>(); }
-#define TEST_DYN(X)     void TestStack::X() { test_elimination<defs::X>(); }
-    namespace cs = cds::container;
-
-    namespace defs { namespace {
-
-        typedef cs::TreiberStack< cds::gc::DHP, int
-            ,typename cs::treiber_stack::make_traits<
-                cds::opt::enable_elimination<true>
-            >::type
-        > Elimination_DHP;
-
-
-        typedef cs::TreiberStack< cds::gc::DHP, int
-            ,typename cs::treiber_stack::make_traits<
-                cds::opt::enable_elimination<true>
-                ,cds::opt::buffer< cds::opt::v::dynamic_buffer<void *> >
-            >::type
-        > Elimination_DHP_dyn;
-
-        typedef cs::TreiberStack< cds::gc::DHP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
-                ,cds::opt::stat< cs::treiber_stack::stat<> >
-                ,cds::opt::enable_elimination<true>
-            >::type
-        > Elimination_DHP_stat;
-
-        typedef cs::TreiberStack< cds::gc::DHP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-                ,cds::opt::enable_elimination<true>
-            >::type
-        > Elimination_DHP_relaxed;
-
-        typedef cs::TreiberStack< cds::gc::DHP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::back_off< cds::backoff::yield>
-                ,cds::opt::enable_elimination<true>
-            >::type
-        > Elimination_DHP_yield;
-
-        typedef cs::TreiberStack< cds::gc::DHP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::back_off< cds::backoff::yield>
-                ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-                ,cds::opt::enable_elimination<true>
-            >::type
-        > Elimination_DHP_yield_relaxed;
-
-        typedef cs::TreiberStack< cds::gc::DHP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::back_off< cds::backoff::pause >
-                ,cds::opt::allocator< std::allocator< bool * > >
-                ,cds::opt::enable_elimination<true>
-            >::type
-        > Elimination_DHP_pause_alloc;
-
-        typedef cs::TreiberStack< cds::gc::DHP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-                ,cds::opt::back_off< cds::backoff::pause>
-                ,cds::opt::allocator< std::allocator< bool * > >
-                ,cds::opt::enable_elimination<true>
-            >::type
-        > Elimination_DHP_pause_alloc_relaxed;
-    }}
-
-    TEST(Elimination_DHP)
-    TEST_DYN(Elimination_DHP_dyn)
-    TEST_DYN(Elimination_DHP_stat)
-    TEST(Elimination_DHP_yield)
-    TEST(Elimination_DHP_pause_alloc)
-
-    TEST(Elimination_DHP_relaxed)
-    TEST(Elimination_DHP_yield_relaxed)
-    TEST(Elimination_DHP_pause_alloc_relaxed)
-
-}
diff --git a/tests/test-hdr/stack/hdr_elimination_stack_hp.cpp b/tests/test-hdr/stack/hdr_elimination_stack_hp.cpp
deleted file mode 100644 (file)
index 5b03cfd..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_treiber_stack.h"
-#include <cds/gc/hp.h>
-#include <cds/container/treiber_stack.h>
-
-namespace stack {
-#define TEST(X)         void TestStack::X() { test<defs::X>(); }
-#define TEST_DYN(X)     void TestStack::X() { test_elimination<defs::X>(); }
-
-    namespace cs = cds::container;
-
-    namespace defs { namespace {
-
-        typedef cs::TreiberStack< cds::gc::HP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::enable_elimination<true>
-            >::type
-        > Elimination_HP;
-
-        typedef cs::TreiberStack< cds::gc::HP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::enable_elimination<true>
-                , cds::opt::buffer< cds::opt::v::dynamic_buffer<void *> >
-            >::type
-        > Elimination_HP_dyn;
-
-        typedef cs::TreiberStack< cds::gc::HP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::enable_elimination<true>
-                , cds::opt::buffer< cds::opt::v::dynamic_buffer<void *> >
-                , cds::opt::stat< cs::treiber_stack::stat<> >
-            >::type
-        > Elimination_HP_stat;
-
-        typedef cs::TreiberStack< cds::gc::HP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::enable_elimination<true>
-                , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-            >::type
-        > Elimination_HP_relaxed;
-
-        typedef cs::TreiberStack< cds::gc::HP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::enable_elimination<true>
-                ,cds::opt::back_off< cds::backoff::yield>
-            >::type
-        > Elimination_HP_yield;
-
-        typedef cs::TreiberStack< cds::gc::HP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::back_off< cds::backoff::yield>
-                ,cds::opt::enable_elimination<true>
-                , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-            >::type
-        > Elimination_HP_yield_relaxed;
-
-        typedef cs::TreiberStack< cds::gc::HP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::back_off< cds::backoff::pause>
-                ,cds::opt::allocator< std::allocator< bool * > >
-                ,cds::opt::enable_elimination<true>
-            >::type
-        > Elimination_HP_pause_alloc;
-
-        typedef cs::TreiberStack< cds::gc::HP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::back_off< cds::backoff::pause>
-                ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-                ,cds::opt::allocator< std::allocator< bool * > >
-                ,cds::opt::enable_elimination<true>
-            >::type
-        > Elimination_HP_pause_alloc_relaxed;
-
-    }}
-
-    TEST(Elimination_HP)
-    TEST_DYN(Elimination_HP_dyn)
-    TEST_DYN(Elimination_HP_stat)
-    TEST(Elimination_HP_yield)
-    TEST(Elimination_HP_pause_alloc)
-
-    TEST(Elimination_HP_relaxed)
-    TEST(Elimination_HP_yield_relaxed)
-    TEST(Elimination_HP_pause_alloc_relaxed)
-}
diff --git a/tests/test-hdr/stack/hdr_fcstack.cpp b/tests/test-hdr/stack/hdr_fcstack.cpp
deleted file mode 100644 (file)
index b85a0d5..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/container/fcstack.h>
-
-#include <vector>
-#include <list>
-
-namespace stack {
-
-    class TestFCStack: public CppUnitMini::TestCase
-    {
-        template <class Stack>
-        void test()
-        {
-            Stack s;
-            test_with( s );
-        }
-
-        template <class Stack>
-        void test_with( Stack& stack)
-        {
-            typedef typename Stack::value_type  value_type;
-            value_type v;
-
-            CPPUNIT_ASSERT( stack.empty() );
-            CPPUNIT_ASSERT( stack.size() == 0 );
-
-            CPPUNIT_ASSERT( stack.push(1));
-            CPPUNIT_ASSERT( !stack.empty() );
-            CPPUNIT_ASSERT( stack.size() == 1 );
-            CPPUNIT_ASSERT( stack.push(2));
-            CPPUNIT_ASSERT( !stack.empty() );
-            CPPUNIT_ASSERT( stack.size() == 2 );
-            CPPUNIT_ASSERT( stack.push(3));
-            CPPUNIT_ASSERT( !stack.empty() );
-            CPPUNIT_ASSERT( stack.size() == 3 );
-
-            CPPUNIT_ASSERT( stack.pop(v) );
-            CPPUNIT_ASSERT( v == 3 );
-            CPPUNIT_ASSERT( !stack.empty() );
-            CPPUNIT_ASSERT( stack.size() == 2 );
-            CPPUNIT_ASSERT( stack.pop(v) );
-            CPPUNIT_ASSERT( v == 2 );
-            CPPUNIT_ASSERT( !stack.empty() );
-            CPPUNIT_ASSERT( stack.size() == 1 );
-            CPPUNIT_ASSERT( stack.pop(v) );
-            CPPUNIT_ASSERT( v == 1 );
-            CPPUNIT_ASSERT( stack.empty() );
-            CPPUNIT_ASSERT( stack.size() == 0 );
-            v = 1000;
-            CPPUNIT_ASSERT( !stack.pop(v) );
-            CPPUNIT_ASSERT( v == 1000 );
-            CPPUNIT_ASSERT( stack.empty() );
-            CPPUNIT_ASSERT( stack.size() == 0 );
-
-            CPPUNIT_ASSERT( stack.push(10));
-            CPPUNIT_ASSERT( stack.push(20));
-            CPPUNIT_ASSERT( stack.push(30));
-            CPPUNIT_ASSERT( !stack.empty());
-            CPPUNIT_ASSERT( stack.size() == 3 );
-
-            while ( stack.pop(v) );
-
-            CPPUNIT_ASSERT( stack.empty() );
-            CPPUNIT_ASSERT( stack.size() == 0 );
-        }
-
-        void FCStack_default();
-        void FCStack_deque();
-        void FCStack_deque_elimination();
-        void FCStack_vector();
-        void FCStack_vector_elimination();
-        void FCStack_list();
-        void FCStack_list_elimination();
-
-        CPPUNIT_TEST_SUITE(TestFCStack);
-            CPPUNIT_TEST( FCStack_default )
-            CPPUNIT_TEST( FCStack_deque )
-            CPPUNIT_TEST( FCStack_deque_elimination )
-            CPPUNIT_TEST( FCStack_vector )
-            CPPUNIT_TEST( FCStack_vector_elimination )
-            CPPUNIT_TEST( FCStack_list )
-            CPPUNIT_TEST( FCStack_list_elimination )
-        CPPUNIT_TEST_SUITE_END();
-    };
-
-    void TestFCStack::FCStack_default()
-    {
-        typedef cds::container::FCStack< unsigned int > stack_type;
-        test<stack_type>();
-    }
-
-    void TestFCStack::FCStack_deque()
-    {
-        typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::deque<unsigned int> > > stack_type;
-        test<stack_type>();
-    }
-
-    void TestFCStack::FCStack_deque_elimination()
-    {
-        struct stack_traits : public
-            cds::container::fcstack::make_traits <
-            cds::opt::enable_elimination < true >
-            > ::type
-        {};
-        typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::deque<unsigned int> >, stack_traits > stack_type;
-        test<stack_type>();
-    }
-
-    void TestFCStack::FCStack_vector()
-    {
-        typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::vector<unsigned int> > > stack_type;
-        test<stack_type>();
-    }
-
-    void TestFCStack::FCStack_vector_elimination()
-    {
-        typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::vector<unsigned int> >,
-            cds::container::fcstack::make_traits<
-                cds::opt::enable_elimination< true >
-            >::type
-        > stack_type;
-        test<stack_type>();
-    }
-
-    void TestFCStack::FCStack_list()
-    {
-        typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::list<unsigned int> > > stack_type;
-        test<stack_type>();
-    }
-
-    void TestFCStack::FCStack_list_elimination()
-    {
-        typedef cds::container::FCStack< unsigned int, std::stack<unsigned int, std::list<unsigned int> >,
-            cds::container::fcstack::make_traits<
-                cds::opt::enable_elimination< true >
-            >::type
-        > stack_type;
-        test<stack_type>();
-    }
-
-    CPPUNIT_TEST_SUITE_REGISTRATION(stack::TestFCStack);
-}   // namespace stack
-
diff --git a/tests/test-hdr/stack/hdr_intrusive_elimination_stack_dhp.cpp b/tests/test-hdr/stack/hdr_intrusive_elimination_stack_dhp.cpp
deleted file mode 100644 (file)
index 427bc6d..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_intrusive_treiber_stack.h"
-#include <cds/gc/dhp.h>
-#include <cds/intrusive/treiber_stack.h>
-
-namespace stack {
-
-#define TEST(X)     void TestIntrusiveStack::X() { test<defs::X>(); }
-#define TEST_DYN(X) void TestIntrusiveStack::X() { test_elimination<defs::X>(); }
-
-    namespace defs {
-        // DHP GC + base hook
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
-            TestIntrusiveStack::base_hook_item<cds::gc::DHP>
-            , typename ci::treiber_stack::make_traits<
-                cds::opt::enable_elimination<true>
-                ,ci::opt::hook<
-                    ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::DHP> >
-                >
-            >::type
-        > Elimination_DHP_base;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
-            TestIntrusiveStack::base_hook_item<cds::gc::DHP>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::DHP> >
-                >
-                ,cds::opt::enable_elimination<true>
-                ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
-            >::type
-        > Elimination_DHP_base_dyn;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
-            TestIntrusiveStack::base_hook_item<cds::gc::DHP>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::DHP> >
-                >
-                ,cds::opt::enable_elimination<true>
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        > Elimination_DHP_base_relaxed;
-
-        // DHP GC + base hook + disposer
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
-            TestIntrusiveStack::base_hook_item<cds::gc::DHP>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::DHP> >
-                >
-                ,cds::opt::enable_elimination<true>
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-            >::type
-        > Elimination_DHP_base_disposer;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
-            TestIntrusiveStack::base_hook_item<cds::gc::DHP>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::DHP> >
-                >
-                ,cds::opt::enable_elimination<true>
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        > Elimination_DHP_base_disposer_relaxed;
-
-        // DHP GC + member hook
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
-            TestIntrusiveStack::member_hook_item<cds::gc::DHP>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::treiber_stack::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
-                        ci::opt::gc<cds::gc::DHP>
-                    >
-                >
-                ,cds::opt::enable_elimination<true>
-            >::type
-        > Elimination_DHP_member;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
-            TestIntrusiveStack::member_hook_item<cds::gc::DHP>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::treiber_stack::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
-                        ci::opt::gc<cds::gc::DHP>
-                    >
-                >
-                ,cds::opt::enable_elimination<true>
-                ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
-            >::type
-        > Elimination_DHP_member_dyn;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
-            TestIntrusiveStack::member_hook_item<cds::gc::DHP>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::treiber_stack::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
-                        ci::opt::gc<cds::gc::DHP>
-                    >
-                >
-                ,cds::opt::enable_elimination<true>
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        > Elimination_DHP_member_relaxed;
-
-        // DHP GC + member hook + disposer
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
-            TestIntrusiveStack::member_hook_item<cds::gc::DHP>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::treiber_stack::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
-                        ci::opt::gc<cds::gc::DHP>
-                    >
-                >
-                ,cds::opt::enable_elimination<true>
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-            >::type
-        > Elimination_DHP_member_disposer;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
-            TestIntrusiveStack::member_hook_item<cds::gc::DHP>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::treiber_stack::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
-                        ci::opt::gc<cds::gc::DHP>
-                    >
-                >
-                ,cds::opt::enable_elimination<true>
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        > Elimination_DHP_member_disposer_relaxed;
-    }
-
-    TEST(Elimination_DHP_base)
-    TEST_DYN(Elimination_DHP_base_dyn)
-    TEST(Elimination_DHP_base_disposer)
-    TEST(Elimination_DHP_member)
-    TEST_DYN(Elimination_DHP_member_dyn)
-    TEST(Elimination_DHP_member_disposer)
-
-    TEST(Elimination_DHP_base_relaxed)
-    TEST(Elimination_DHP_base_disposer_relaxed)
-    TEST(Elimination_DHP_member_relaxed)
-    TEST(Elimination_DHP_member_disposer_relaxed)
-
-} // namespace stack
-
diff --git a/tests/test-hdr/stack/hdr_intrusive_elimination_stack_hp.cpp b/tests/test-hdr/stack/hdr_intrusive_elimination_stack_hp.cpp
deleted file mode 100644 (file)
index fc09eca..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_intrusive_treiber_stack.h"
-#include <cds/gc/hp.h>
-#include <cds/intrusive/treiber_stack.h>
-
-namespace stack {
-
-#define TEST(X)     void TestIntrusiveStack::X() { test<defs::X>(); }
-#define TEST_DYN(X)     void TestIntrusiveStack::X() { test_elimination<defs::X>(); }
-
-    namespace defs {
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,
-            TestIntrusiveStack::base_hook_item<cds::gc::HP>
-            , typename ci::treiber_stack::make_traits<
-                cds::opt::enable_elimination<true>
-            >::type
-        > Elimination_HP_default;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,
-            TestIntrusiveStack::base_hook_item<cds::gc::HP>
-            , typename ci::treiber_stack::make_traits<
-                cds::opt::enable_elimination<true>
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        > Elimination_HP_default_relaxed;
-
-        // HZP GC + base hook
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,
-            TestIntrusiveStack::base_hook_item<cds::gc::HP>
-            , typename ci::treiber_stack::make_traits<
-                cds::opt::enable_elimination<true>
-                ,ci::opt::hook<
-                    ci::treiber_stack::base_hook<
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-            >::type
-        > Elimination_HP_base;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,
-            TestIntrusiveStack::base_hook_item<cds::gc::HP>
-            , typename ci::treiber_stack::make_traits<
-                cds::opt::enable_elimination<true>
-                ,ci::opt::hook<
-                    ci::treiber_stack::base_hook<
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
-            >::type
-        > Elimination_HP_base_dyn;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,
-            TestIntrusiveStack::base_hook_item<cds::gc::HP>
-            , typename ci::treiber_stack::make_traits<
-                cds::opt::enable_elimination<true>
-                ,ci::opt::hook<
-                    ci::treiber_stack::base_hook<
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        > Elimination_HP_base_relaxed;
-
-        // HZP GC + base hook + disposer
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,
-            TestIntrusiveStack::base_hook_item<cds::gc::HP>
-            , typename ci::treiber_stack::make_traits<
-                cds::opt::enable_elimination<true>
-                ,ci::opt::hook<
-                    ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::HP> >
-                >
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-            >::type
-        > Elimination_HP_base_disposer;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,
-            TestIntrusiveStack::base_hook_item<cds::gc::HP>
-            , typename ci::treiber_stack::make_traits<
-                cds::opt::enable_elimination<true>
-                ,ci::opt::hook<
-                    ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::HP> >
-                >
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        > Elimination_HP_base_disposer_relaxed;
-
-        // HZP GC + member hook
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,
-            TestIntrusiveStack::member_hook_item<cds::gc::HP>
-            , typename ci::treiber_stack::make_traits<
-                cds::opt::enable_elimination<true>
-                ,ci::opt::hook<
-                    ci::treiber_stack::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-            >::type
-        > Elimination_HP_member;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,
-            TestIntrusiveStack::member_hook_item<cds::gc::HP>
-            , typename ci::treiber_stack::make_traits<
-                cds::opt::enable_elimination<true>
-                ,ci::opt::hook<
-                    ci::treiber_stack::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
-            >::type
-        > Elimination_HP_member_dyn;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,
-            TestIntrusiveStack::member_hook_item<cds::gc::HP>
-            , typename ci::treiber_stack::make_traits<
-                cds::opt::enable_elimination<true>
-                ,ci::opt::hook<
-                    ci::treiber_stack::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        > Elimination_HP_member_relaxed;
-
-        // HZP GC + member hook + disposer
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,
-            TestIntrusiveStack::member_hook_item<cds::gc::HP>
-            , typename ci::treiber_stack::make_traits<
-                cds::opt::enable_elimination<true>
-                ,ci::opt::hook<
-                    ci::treiber_stack::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-            >::type
-        > Elimination_HP_member_disposer;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,
-            TestIntrusiveStack::member_hook_item<cds::gc::HP>
-            , typename ci::treiber_stack::make_traits<
-                cds::opt::enable_elimination<true>
-                ,ci::opt::hook<
-                    ci::treiber_stack::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        > Elimination_HP_member_disposer_relaxed;
-    }
-
-    TEST(Elimination_HP_default)
-    TEST(Elimination_HP_base)
-    TEST_DYN(Elimination_HP_base_dyn)
-    TEST(Elimination_HP_base_disposer)
-    TEST(Elimination_HP_member)
-    TEST_DYN(Elimination_HP_member_dyn)
-    TEST(Elimination_HP_member_disposer)
-
-    TEST(Elimination_HP_default_relaxed)
-    TEST(Elimination_HP_base_relaxed)
-    TEST(Elimination_HP_base_disposer_relaxed)
-    TEST(Elimination_HP_member_relaxed)
-    TEST(Elimination_HP_member_disposer_relaxed)
-
-} // namespace stack
diff --git a/tests/test-hdr/stack/hdr_intrusive_fcstack.cpp b/tests/test-hdr/stack/hdr_intrusive_fcstack.cpp
deleted file mode 100644 (file)
index 985ae3b..0000000
+++ /dev/null
@@ -1,323 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/intrusive/fcstack.h>
-
-#include <boost/intrusive/list.hpp>
-
-namespace stack {
-
-    class TestIntrusiveFCStack: public CppUnitMini::TestCase
-    {
-    public:
-        template <typename Hook>
-        struct base_hook_item: public Hook
-        {
-            int nVal;
-            int nDisposeCount;
-
-            base_hook_item()
-                : nDisposeCount(0)
-            {}
-        };
-
-        template <typename Hook>
-        struct member_hook_item
-        {
-            int nVal;
-            int nDisposeCount;
-            Hook hMember;
-
-            member_hook_item()
-                : nDisposeCount(0)
-            {}
-        };
-
-        struct faked_disposer
-        {
-            template <typename T>
-            void operator ()( T * p )
-            {
-                ++p->nDisposeCount;
-            }
-        };
-
-        template <class Stack>
-        void test()
-        {
-            Stack stack;
-            test_with(stack);
-        }
-
-        template <class Stack>
-        void test_with( Stack& stack )
-        {
-            typedef typename Stack::value_type  value_type;
-
-            CPPUNIT_ASSERT( stack.empty() );
-
-            value_type v1, v2, v3;
-            v1.nVal = 1;
-            v2.nVal = 2;
-            v3.nVal = 3;
-            CPPUNIT_ASSERT( stack.push(v1));
-            CPPUNIT_ASSERT( !stack.empty() );
-            CPPUNIT_ASSERT( stack.push(v2));
-            CPPUNIT_ASSERT( !stack.empty() );
-            CPPUNIT_ASSERT( stack.push(v3));
-            CPPUNIT_ASSERT( !stack.empty() );
-
-            value_type * pv;
-            pv = stack.pop();
-            CPPUNIT_ASSERT( pv != nullptr );
-            CPPUNIT_ASSERT( pv->nVal == 3 );
-            CPPUNIT_ASSERT( !stack.empty() );
-            pv = stack.pop();
-            CPPUNIT_ASSERT( pv != nullptr );
-            CPPUNIT_ASSERT( pv->nVal == 2 );
-            CPPUNIT_ASSERT( !stack.empty() );
-            pv = stack.pop();
-            CPPUNIT_ASSERT( pv != nullptr );
-            CPPUNIT_ASSERT( pv->nVal == 1 );
-            CPPUNIT_ASSERT( stack.empty() );
-            pv = stack.pop();
-            CPPUNIT_ASSERT( pv == nullptr );
-
-            CPPUNIT_ASSERT( v1.nDisposeCount == 0 );
-            CPPUNIT_ASSERT( v2.nDisposeCount == 0 );
-            CPPUNIT_ASSERT( v3.nDisposeCount == 0 );
-
-            stack.push(v1);
-            stack.push(v2);
-            stack.push(v3);
-
-            stack.clear();
-            CPPUNIT_ASSERT( stack.empty() );
-
-            if ( !std::is_same<typename Stack::disposer, cds::intrusive::opt::v::empty_disposer>::value ) {
-                CPPUNIT_ASSERT( v1.nDisposeCount == 1 );
-                CPPUNIT_ASSERT( v2.nDisposeCount == 1 );
-                CPPUNIT_ASSERT( v3.nDisposeCount == 1 );
-            }
-        }
-
-        void FCStack_slist();
-        void FCStack_slist_mutex();
-        void FCStack_slist_elimination();
-        void FCStack_slist_elimination_stat();
-        void FCStack_slist_member();
-        void FCStack_slist_member_elimination();
-        void FCStack_slist_member_elimination_stat();
-        void FCStack_list();
-        void FCStack_list_mutex();
-        void FCStack_list_elimination();
-        void FCStack_list_elimination_stat();
-        void FCStack_list_member();
-        void FCStack_list_member_elimination();
-        void FCStack_list_member_elimination_stat();
-
-        CPPUNIT_TEST_SUITE(TestIntrusiveFCStack)
-            CPPUNIT_TEST(FCStack_slist)
-            CPPUNIT_TEST(FCStack_slist_mutex)
-            CPPUNIT_TEST(FCStack_slist_elimination)
-            CPPUNIT_TEST(FCStack_slist_elimination_stat)
-            CPPUNIT_TEST(FCStack_slist_member)
-            CPPUNIT_TEST(FCStack_slist_member_elimination)
-            CPPUNIT_TEST(FCStack_slist_member_elimination_stat)
-            CPPUNIT_TEST(FCStack_list)
-            CPPUNIT_TEST(FCStack_list_mutex)
-            CPPUNIT_TEST(FCStack_list_elimination)
-            CPPUNIT_TEST(FCStack_list_elimination_stat)
-            CPPUNIT_TEST(FCStack_list_member)
-            CPPUNIT_TEST(FCStack_list_member_elimination)
-            CPPUNIT_TEST(FCStack_list_member_elimination_stat)
-        CPPUNIT_TEST_SUITE_END()
-    };
-
-    void TestIntrusiveFCStack::FCStack_slist()
-    {
-        typedef base_hook_item< boost::intrusive::slist_base_hook<> > value_type;
-        typedef cds::intrusive::FCStack< value_type, boost::intrusive::slist< value_type > > stack_type;
-        test<stack_type>();
-    }
-
-    void TestIntrusiveFCStack::FCStack_slist_mutex()
-    {
-        typedef base_hook_item< boost::intrusive::slist_base_hook<> > value_type;
-        struct stack_traits : public cds::intrusive::fcstack::traits
-        {
-            typedef std::mutex lock_type;
-        };
-        typedef cds::intrusive::FCStack< value_type, boost::intrusive::slist< value_type >, stack_traits > stack_type;
-        test<stack_type>();
-    }
-
-    void TestIntrusiveFCStack::FCStack_slist_elimination()
-    {
-        typedef base_hook_item< boost::intrusive::slist_base_hook<> > value_type;
-        struct stack_traits : public
-            cds::intrusive::fcstack::make_traits <
-                cds::opt::enable_elimination < true >
-            > ::type
-        {};
-        typedef cds::intrusive::FCStack< value_type, boost::intrusive::slist< value_type >, stack_traits > stack_type;
-        test<stack_type>();
-    }
-
-    void TestIntrusiveFCStack::FCStack_slist_elimination_stat()
-    {
-        typedef base_hook_item< boost::intrusive::slist_base_hook<> > value_type;
-        typedef cds::intrusive::FCStack< value_type, boost::intrusive::slist< value_type >,
-            cds::intrusive::fcstack::make_traits<
-                cds::opt::enable_elimination< true >
-                ,cds::opt::stat< cds::intrusive::fcstack::stat<> >
-            >::type
-        > stack_type;
-        test<stack_type>();
-    }
-
-    void TestIntrusiveFCStack::FCStack_slist_member()
-    {
-        typedef member_hook_item< boost::intrusive::slist_member_hook<> > value_type;
-        typedef boost::intrusive::member_hook<value_type, boost::intrusive::slist_member_hook<>, &value_type::hMember> member_option;
-
-        typedef cds::intrusive::FCStack< value_type, boost::intrusive::slist< value_type, member_option > > stack_type;
-        test<stack_type>();
-    }
-
-    void TestIntrusiveFCStack::FCStack_slist_member_elimination()
-    {
-        typedef member_hook_item< boost::intrusive::slist_member_hook<> > value_type;
-        typedef boost::intrusive::member_hook<value_type, boost::intrusive::slist_member_hook<>, &value_type::hMember> member_option;
-
-        typedef cds::intrusive::FCStack< value_type, boost::intrusive::slist< value_type, member_option >,
-            cds::intrusive::fcstack::make_traits<
-                cds::opt::enable_elimination< true >
-            >::type
-        > stack_type;
-        test<stack_type>();
-    }
-
-    void TestIntrusiveFCStack::FCStack_slist_member_elimination_stat()
-    {
-        typedef member_hook_item< boost::intrusive::slist_member_hook<> > value_type;
-        typedef boost::intrusive::member_hook<value_type, boost::intrusive::slist_member_hook<>, &value_type::hMember> member_option;
-
-        typedef cds::intrusive::FCStack< value_type, boost::intrusive::slist< value_type, member_option >,
-            cds::intrusive::fcstack::make_traits<
-                cds::opt::enable_elimination< true >
-                ,cds::opt::stat< cds::intrusive::fcstack::stat<> >
-            >::type
-        > stack_type;
-        test<stack_type>();
-    }
-
-    void TestIntrusiveFCStack::FCStack_list()
-    {
-        typedef base_hook_item< boost::intrusive::list_base_hook<> > value_type;
-        typedef cds::intrusive::FCStack< value_type, boost::intrusive::list< value_type > > stack_type;
-        test<stack_type>();
-    }
-
-    void TestIntrusiveFCStack::FCStack_list_mutex()
-    {
-        typedef base_hook_item< boost::intrusive::list_base_hook<> > value_type;
-        typedef cds::intrusive::FCStack< value_type, boost::intrusive::list< value_type >,
-            cds::intrusive::fcstack::make_traits<
-                cds::opt::lock_type< std::mutex >
-            >::type
-        > stack_type;
-        test<stack_type>();
-    }
-
-
-    void TestIntrusiveFCStack::FCStack_list_elimination()
-    {
-        typedef base_hook_item< boost::intrusive::list_base_hook<> > value_type;
-        typedef cds::intrusive::FCStack< value_type, boost::intrusive::list< value_type >,
-            cds::intrusive::fcstack::make_traits<
-                cds::opt::enable_elimination< true >
-            >::type
-        > stack_type;
-        test<stack_type>();
-    }
-
-    void TestIntrusiveFCStack::FCStack_list_elimination_stat()
-    {
-        typedef base_hook_item< boost::intrusive::list_base_hook<> > value_type;
-        typedef cds::intrusive::FCStack< value_type, boost::intrusive::list< value_type >,
-            cds::intrusive::fcstack::make_traits<
-                cds::opt::enable_elimination< true >
-                ,cds::opt::stat< cds::intrusive::fcstack::stat<> >
-            >::type
-        > stack_type;
-        test<stack_type>();
-    }
-
-    void TestIntrusiveFCStack::FCStack_list_member()
-    {
-        typedef member_hook_item< boost::intrusive::list_member_hook<> > value_type;
-        typedef boost::intrusive::member_hook<value_type, boost::intrusive::list_member_hook<>, &value_type::hMember> member_option;
-
-        typedef cds::intrusive::FCStack< value_type, boost::intrusive::list< value_type, member_option > > stack_type;
-        test<stack_type>();
-    }
-
-    void TestIntrusiveFCStack::FCStack_list_member_elimination()
-    {
-        typedef member_hook_item< boost::intrusive::list_member_hook<> > value_type;
-        typedef boost::intrusive::member_hook<value_type, boost::intrusive::list_member_hook<>, &value_type::hMember> member_option;
-
-        typedef cds::intrusive::FCStack< value_type, boost::intrusive::list< value_type, member_option >,
-            cds::intrusive::fcstack::make_traits<
-                cds::opt::enable_elimination< true >
-            >::type
-        > stack_type;
-        test<stack_type>();
-    }
-
-    void TestIntrusiveFCStack::FCStack_list_member_elimination_stat()
-    {
-        typedef member_hook_item< boost::intrusive::list_member_hook<> > value_type;
-        typedef boost::intrusive::member_hook<value_type, boost::intrusive::list_member_hook<>, &value_type::hMember> member_option;
-
-        typedef cds::intrusive::FCStack< value_type, boost::intrusive::list< value_type, member_option >,
-            cds::intrusive::fcstack::make_traits<
-                cds::opt::enable_elimination< true >
-                ,cds::opt::stat< cds::intrusive::fcstack::stat<> >
-            >::type
-        > stack_type;
-        test<stack_type>();
-    }
-
-    CPPUNIT_TEST_SUITE_REGISTRATION(stack::TestIntrusiveFCStack);
-}   // namespace stack
-
diff --git a/tests/test-hdr/stack/hdr_intrusive_treiber_stack.h b/tests/test-hdr/stack/hdr_intrusive_treiber_stack.h
deleted file mode 100644 (file)
index 4be3183..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_INTRUSIVE_TREIBER_STACK_H
-#define CDSTEST_HDR_INTRUSIVE_TREIBER_STACK_H
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/intrusive/details/single_link_struct.h>
-
-namespace stack {
-
-    namespace ci = cds::intrusive;
-
-    class TestIntrusiveStack: public CppUnitMini::TestCase
-    {
-    public:
-        template <typename GC>
-        struct base_hook_item: public ci::single_link::node< GC >
-        {
-            int nVal;
-            int nDisposeCount;
-
-            base_hook_item()
-                : nDisposeCount(0)
-            {}
-        };
-
-        template <typename GC>
-        struct member_hook_item
-        {
-            int nVal;
-            int nDisposeCount;
-            ci::single_link::node< GC > hMember;
-
-            member_hook_item()
-                : nDisposeCount(0)
-            {}
-        };
-
-        struct faked_disposer
-        {
-            template <typename T>
-            void operator ()( T * p )
-            {
-                ++p->nDisposeCount;
-            }
-        };
-
-        template <class Stack>
-        void test_elimination()
-        {
-            Stack stack( 2 );
-            test_with( stack );
-        }
-
-        template <class Stack>
-        void test()
-        {
-            Stack stack;
-            test_with(stack);
-        }
-
-
-        template <class Stack>
-        void test_with( Stack& stack )
-        {
-            typedef typename Stack::value_type  value_type;
-
-            CPPUNIT_ASSERT( stack.empty() );
-
-            value_type v1, v2, v3;
-            v1.nVal = 1;
-            v2.nVal = 2;
-            v3.nVal = 3;
-            CPPUNIT_ASSERT( stack.push(v1));
-            CPPUNIT_ASSERT( !stack.empty() );
-            CPPUNIT_ASSERT( stack.push(v2));
-            CPPUNIT_ASSERT( !stack.empty() );
-            CPPUNIT_ASSERT( stack.push(v3));
-            CPPUNIT_ASSERT( !stack.empty() );
-
-            value_type * pv;
-            pv = stack.pop();
-            CPPUNIT_ASSERT( pv != nullptr );
-            CPPUNIT_ASSERT( pv->nVal == 3 );
-            CPPUNIT_ASSERT( !stack.empty() );
-            pv = stack.pop();
-            CPPUNIT_ASSERT( pv != nullptr );
-            CPPUNIT_ASSERT( pv->nVal == 2 );
-            CPPUNIT_ASSERT( !stack.empty() );
-            pv = stack.pop();
-            CPPUNIT_ASSERT( pv != nullptr );
-            CPPUNIT_ASSERT( pv->nVal == 1 );
-            CPPUNIT_ASSERT( stack.empty() );
-            pv = stack.pop();
-            CPPUNIT_ASSERT( pv == nullptr );
-
-            CPPUNIT_ASSERT( v1.nDisposeCount == 0 );
-            CPPUNIT_ASSERT( v2.nDisposeCount == 0 );
-            CPPUNIT_ASSERT( v3.nDisposeCount == 0 );
-
-            stack.push(v1);
-            stack.push(v2);
-            stack.push(v3);
-
-            stack.clear();
-            CPPUNIT_ASSERT( stack.empty() );
-
-            Stack::gc::scan();
-            if ( !std::is_same<typename Stack::disposer, ci::opt::v::empty_disposer>::value ) {
-                CPPUNIT_ASSERT( v1.nDisposeCount == 1 );
-                CPPUNIT_ASSERT( v2.nDisposeCount == 1 );
-                CPPUNIT_ASSERT( v3.nDisposeCount == 1 );
-            }
-        }
-
-        void Treiber_HP_default();
-        void Treiber_HP_base();
-        void Treiber_HP_base_disposer();
-        void Treiber_HP_member();
-        void Treiber_HP_member_disposer();
-        void Treiber_DHP_base();
-        void Treiber_DHP_base_disposer();
-        void Treiber_DHP_member();
-        void Treiber_DHP_member_disposer();
-
-        void Treiber_HP_default_relaxed();
-        void Treiber_HP_base_relaxed();
-        void Treiber_HP_base_disposer_relaxed();
-        void Treiber_HP_member_relaxed();
-        void Treiber_HP_member_disposer_relaxed();
-        void Treiber_DHP_base_relaxed();
-        void Treiber_DHP_base_disposer_relaxed();
-        void Treiber_DHP_member_relaxed();
-        void Treiber_DHP_member_disposer_relaxed();
-
-        void Elimination_HP_default();
-        void Elimination_HP_base();
-        void Elimination_HP_base_dyn();
-        void Elimination_HP_base_disposer();
-        void Elimination_HP_member();
-        void Elimination_HP_member_dyn();
-        void Elimination_HP_member_disposer();
-        void Elimination_DHP_base();
-        void Elimination_DHP_base_dyn();
-        void Elimination_DHP_base_disposer();
-        void Elimination_DHP_member();
-        void Elimination_DHP_member_dyn();
-        void Elimination_DHP_member_disposer();
-
-        void Elimination_HP_default_relaxed();
-        void Elimination_HP_base_relaxed();
-        void Elimination_HP_base_disposer_relaxed();
-        void Elimination_HP_member_relaxed();
-        void Elimination_HP_member_disposer_relaxed();
-        void Elimination_DHP_base_relaxed();
-        void Elimination_DHP_base_disposer_relaxed();
-        void Elimination_DHP_member_relaxed();
-        void Elimination_DHP_member_disposer_relaxed();
-
-        CPPUNIT_TEST_SUITE(TestIntrusiveStack)
-            CPPUNIT_TEST(Treiber_HP_default)
-            CPPUNIT_TEST(Treiber_HP_default_relaxed)
-            CPPUNIT_TEST(Treiber_HP_base)
-            CPPUNIT_TEST(Treiber_HP_base_relaxed)
-            CPPUNIT_TEST(Treiber_HP_base_disposer)
-            CPPUNIT_TEST(Treiber_HP_base_disposer_relaxed)
-            CPPUNIT_TEST(Treiber_HP_member)
-            CPPUNIT_TEST(Treiber_HP_member_relaxed)
-            CPPUNIT_TEST(Treiber_HP_member_disposer)
-            CPPUNIT_TEST(Treiber_HP_member_disposer_relaxed)
-            CPPUNIT_TEST(Treiber_DHP_base)
-            CPPUNIT_TEST(Treiber_DHP_base_relaxed)
-            CPPUNIT_TEST(Treiber_DHP_base_disposer)
-            CPPUNIT_TEST(Treiber_DHP_base_disposer_relaxed)
-            CPPUNIT_TEST(Treiber_DHP_member)
-            CPPUNIT_TEST(Treiber_DHP_member_relaxed)
-            CPPUNIT_TEST(Treiber_DHP_member_disposer)
-            CPPUNIT_TEST(Treiber_DHP_member_disposer_relaxed)
-
-            CPPUNIT_TEST(Elimination_HP_default)
-            CPPUNIT_TEST(Elimination_HP_default_relaxed)
-            CPPUNIT_TEST(Elimination_HP_base)
-            CPPUNIT_TEST(Elimination_HP_base_dyn)
-            CPPUNIT_TEST(Elimination_HP_base_relaxed)
-            CPPUNIT_TEST(Elimination_HP_base_disposer)
-            CPPUNIT_TEST(Elimination_HP_base_disposer_relaxed)
-            CPPUNIT_TEST(Elimination_HP_member)
-            CPPUNIT_TEST(Elimination_HP_member_dyn)
-            CPPUNIT_TEST(Elimination_HP_member_relaxed)
-            CPPUNIT_TEST(Elimination_HP_member_disposer)
-            CPPUNIT_TEST(Elimination_HP_member_disposer_relaxed)
-            CPPUNIT_TEST(Elimination_DHP_base)
-            CPPUNIT_TEST(Elimination_DHP_base_dyn)
-            CPPUNIT_TEST(Elimination_DHP_base_relaxed)
-            CPPUNIT_TEST(Elimination_DHP_base_disposer)
-            CPPUNIT_TEST(Elimination_DHP_base_disposer_relaxed)
-            CPPUNIT_TEST(Elimination_DHP_member)
-            CPPUNIT_TEST(Elimination_DHP_member_dyn)
-            CPPUNIT_TEST(Elimination_DHP_member_relaxed)
-            CPPUNIT_TEST(Elimination_DHP_member_disposer)
-            CPPUNIT_TEST(Elimination_DHP_member_disposer_relaxed)
-        CPPUNIT_TEST_SUITE_END()
-    };
-
-} // namespace stack
-
-#endif // #ifndef CDSTEST_HDR_INTRUSIVE_TREIBER_STACK_H
diff --git a/tests/test-hdr/stack/hdr_intrusive_treiber_stack_dhp.cpp b/tests/test-hdr/stack/hdr_intrusive_treiber_stack_dhp.cpp
deleted file mode 100644 (file)
index 8b26202..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_intrusive_treiber_stack.h"
-#include <cds/gc/dhp.h>
-#include <cds/intrusive/treiber_stack.h>
-
-namespace stack {
-
-#define TEST(X)     void TestIntrusiveStack::X() { test<defs::X>(); }
-
-    namespace defs {
-        // DHP GC + base hook
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
-            TestIntrusiveStack::base_hook_item<cds::gc::DHP>
-            ,typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::DHP> >
-                >
-            >::type
-        > Treiber_DHP_base;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
-            TestIntrusiveStack::base_hook_item<cds::gc::DHP>
-            ,typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::DHP> >
-                >
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        > Treiber_DHP_base_relaxed;
-
-        // DHP GC + base hook + disposer
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
-            TestIntrusiveStack::base_hook_item<cds::gc::DHP>
-            ,typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::DHP> >
-                >
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-            >::type
-        > Treiber_DHP_base_disposer;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
-            TestIntrusiveStack::base_hook_item<cds::gc::DHP>
-            ,typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::DHP> >
-                >
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        > Treiber_DHP_base_disposer_relaxed;
-
-        // DHP GC + member hook
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
-            TestIntrusiveStack::member_hook_item<cds::gc::DHP>
-            ,typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::treiber_stack::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
-                        ci::opt::gc<cds::gc::DHP>
-                    >
-                >
-            >::type
-        > Treiber_DHP_member;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
-            TestIntrusiveStack::member_hook_item<cds::gc::DHP>
-            ,typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::treiber_stack::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
-                        ci::opt::gc<cds::gc::DHP>
-                    >
-                >
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        > Treiber_DHP_member_relaxed;
-
-        // DHP GC + member hook + disposer
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
-            TestIntrusiveStack::member_hook_item<cds::gc::DHP>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::treiber_stack::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
-                        ci::opt::gc<cds::gc::DHP>
-                    >
-                >
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-            >::type
-        > Treiber_DHP_member_disposer;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP,
-            TestIntrusiveStack::member_hook_item<cds::gc::DHP>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::treiber_stack::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
-                        ci::opt::gc<cds::gc::DHP>
-                    >
-                >
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        > Treiber_DHP_member_disposer_relaxed;
-    }
-
-    TEST(Treiber_DHP_base)
-    TEST(Treiber_DHP_base_disposer)
-    TEST(Treiber_DHP_member)
-    TEST(Treiber_DHP_member_disposer)
-
-    TEST(Treiber_DHP_base_relaxed)
-    TEST(Treiber_DHP_base_disposer_relaxed)
-    TEST(Treiber_DHP_member_relaxed)
-    TEST(Treiber_DHP_member_disposer_relaxed)
-
-} // namespace stack
-
diff --git a/tests/test-hdr/stack/hdr_intrusive_treiber_stack_hp.cpp b/tests/test-hdr/stack/hdr_intrusive_treiber_stack_hp.cpp
deleted file mode 100644 (file)
index 5c7d3f9..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_intrusive_treiber_stack.h"
-#include <cds/gc/hp.h>
-#include <cds/intrusive/treiber_stack.h>
-
-namespace stack {
-
-#define TEST(X)     void TestIntrusiveStack::X() { test<defs::X>(); }
-
-    namespace defs { namespace {
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,
-            TestIntrusiveStack::base_hook_item<cds::gc::HP>
-        > Treiber_HP_default;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,
-            TestIntrusiveStack::base_hook_item<cds::gc::HP>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        > Treiber_HP_default_relaxed;
-
-        // HZP GC + base hook
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,
-            TestIntrusiveStack::base_hook_item<cds::gc::HP>
-            , typename ci::treiber_stack::make_traits<
-                ci::opt::hook<
-                    ci::treiber_stack::base_hook<
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-            >::type
-        > Treiber_HP_base;
-
-        struct traits_Treiber_HP_base_relaxed
-            : ci::treiber_stack::make_traits <
-                ci::opt::hook<
-                    ci::treiber_stack::base_hook<
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            > ::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,
-            TestIntrusiveStack::base_hook_item<cds::gc::HP>,
-            traits_Treiber_HP_base_relaxed
-        > Treiber_HP_base_relaxed;
-
-        // HZP GC + base hook + disposer
-        struct traits_Treiber_HP_base_disposer
-            : ci::treiber_stack::make_traits <
-                ci::opt::hook<
-                    ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::HP> >
-                >
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-            >::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,
-            TestIntrusiveStack::base_hook_item<cds::gc::HP>,
-            traits_Treiber_HP_base_disposer
-        > Treiber_HP_base_disposer;
-
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,
-            TestIntrusiveStack::base_hook_item<cds::gc::HP>
-            ,typename ci::treiber_stack::make_traits <
-                ci::opt::hook<
-                    ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::HP> >
-                >
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        > Treiber_HP_base_disposer_relaxed;
-
-        // HZP GC + member hook
-        struct traits_Treiber_HP_member
-            : ci::treiber_stack::make_traits <
-                ci::opt::hook<
-                    ci::treiber_stack::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-            > ::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,
-            TestIntrusiveStack::member_hook_item<cds::gc::HP>,
-            traits_Treiber_HP_member
-        > Treiber_HP_member;
-
-        struct traits_Treiber_HP_member_relaxed
-            : ci::treiber_stack::make_traits <
-                ci::opt::hook<
-                    ci::treiber_stack::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,
-            TestIntrusiveStack::member_hook_item<cds::gc::HP>,
-            traits_Treiber_HP_member_relaxed
-        > Treiber_HP_member_relaxed;
-
-        // HZP GC + member hook + disposer
-        struct traits_Treiber_HP_member_disposer
-            : ci::treiber_stack::make_traits <
-                ci::opt::hook<
-                    ci::treiber_stack::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-            >::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,
-            TestIntrusiveStack::member_hook_item<cds::gc::HP>,
-            traits_Treiber_HP_member_disposer
-        > Treiber_HP_member_disposer;
-
-        struct traits_Treiber_HP_member_disposer_relaxed
-            : ci::treiber_stack::make_traits <
-                ci::opt::hook<
-                    ci::treiber_stack::member_hook<
-                        offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
-                        ci::opt::gc<cds::gc::HP>
-                    >
-                >
-                ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
-                ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
-            >::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,
-            TestIntrusiveStack::member_hook_item<cds::gc::HP>,
-            traits_Treiber_HP_member_disposer_relaxed
-        > Treiber_HP_member_disposer_relaxed;
-    }}
-
-    TEST(Treiber_HP_default)
-    TEST(Treiber_HP_base)
-    TEST(Treiber_HP_base_disposer)
-    TEST(Treiber_HP_member)
-    TEST(Treiber_HP_member_disposer)
-
-    TEST(Treiber_HP_default_relaxed)
-    TEST(Treiber_HP_base_relaxed)
-    TEST(Treiber_HP_base_disposer_relaxed)
-    TEST(Treiber_HP_member_relaxed)
-    TEST(Treiber_HP_member_disposer_relaxed)
-
-} // namespace stack
-
-CPPUNIT_TEST_SUITE_REGISTRATION(stack::TestIntrusiveStack);
diff --git a/tests/test-hdr/stack/hdr_treiber_stack.h b/tests/test-hdr/stack/hdr_treiber_stack.h
deleted file mode 100644 (file)
index 0fe4709..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_TREIBER_STACK_H
-#define CDSTEST_HDR_TREIBER_STACK_H
-
-#include "cppunit/cppunit_proxy.h"
-
-namespace stack {
-
-    class TestStack: public CppUnitMini::TestCase
-    {
-        template <class Stack>
-        void test()
-        {
-            Stack s;
-            test_with( s );
-        }
-
-        template <class Stack>
-        void test_elimination()
-        {
-            Stack s(2);
-            test_with( s );
-        }
-
-        template <class Stack>
-        void test_with( Stack& stack)
-        {
-            typedef typename Stack::value_type  value_type;
-            value_type v;
-
-            CPPUNIT_ASSERT( stack.empty() );
-
-            CPPUNIT_ASSERT( stack.push(1));
-            CPPUNIT_ASSERT( !stack.empty() );
-            CPPUNIT_ASSERT( stack.push(2));
-            CPPUNIT_ASSERT( !stack.empty() );
-            CPPUNIT_ASSERT( stack.push(3));
-            CPPUNIT_ASSERT( !stack.empty() );
-
-            CPPUNIT_ASSERT( stack.pop(v) );
-            CPPUNIT_ASSERT( v == 3 );
-            CPPUNIT_ASSERT( !stack.empty() );
-            CPPUNIT_ASSERT( stack.pop_with( [&v]( value_type& src ) { v = src; } ));
-            CPPUNIT_ASSERT( v == 2 );
-            CPPUNIT_ASSERT( !stack.empty() );
-            CPPUNIT_ASSERT( stack.pop(v) );
-            CPPUNIT_ASSERT( v == 1 );
-            CPPUNIT_ASSERT( stack.empty() );
-            v = 1000;
-            CPPUNIT_ASSERT( !stack.pop(v) );
-            CPPUNIT_ASSERT( v == 1000 );
-            CPPUNIT_ASSERT( stack.empty() );
-
-            CPPUNIT_ASSERT( stack.push(10));
-            CPPUNIT_ASSERT( stack.push(20));
-            CPPUNIT_ASSERT( stack.push(30));
-            CPPUNIT_ASSERT( !stack.empty());
-
-            CPPUNIT_ASSERT( stack.emplace(100));
-            CPPUNIT_ASSERT( stack.pop(v));
-            CPPUNIT_ASSERT( v == 100 );
-
-            stack.clear();
-            CPPUNIT_ASSERT( stack.empty() );
-
-            Stack::gc::scan();
-        }
-
-        void Treiber_HP();
-        void Treiber_DHP();
-        void Treiber_HP_yield();
-        void Treiber_DHP_yield();
-        void Treiber_HP_pause_alloc();
-        void Treiber_DHP_pause_alloc();
-
-        void Treiber_HP_relaxed();
-        void Treiber_DHP_relaxed();
-        void Treiber_HP_yield_relaxed();
-        void Treiber_DHP_yield_relaxed();
-        void Treiber_HP_pause_alloc_relaxed();
-        void Treiber_DHP_pause_alloc_relaxed();
-
-        void Elimination_HP();
-        void Elimination_HP_dyn();
-        void Elimination_HP_stat();
-        void Elimination_DHP();
-        void Elimination_DHP_dyn();
-        void Elimination_DHP_stat();
-        void Elimination_HP_yield();
-        void Elimination_DHP_yield();
-        void Elimination_HP_pause_alloc();
-        void Elimination_DHP_pause_alloc();
-
-        void Elimination_HP_relaxed();
-        void Elimination_DHP_relaxed();
-        void Elimination_HP_yield_relaxed();
-        void Elimination_DHP_yield_relaxed();
-        void Elimination_HP_pause_alloc_relaxed();
-        void Elimination_DHP_pause_alloc_relaxed();
-
-        CPPUNIT_TEST_SUITE(TestStack);
-            CPPUNIT_TEST(Treiber_HP)
-            CPPUNIT_TEST(Treiber_HP_relaxed)
-            CPPUNIT_TEST(Treiber_DHP)
-            CPPUNIT_TEST(Treiber_DHP_relaxed)
-            CPPUNIT_TEST(Treiber_HP_yield)
-            CPPUNIT_TEST(Treiber_HP_yield_relaxed)
-            CPPUNIT_TEST(Treiber_DHP_yield)
-            CPPUNIT_TEST(Treiber_DHP_yield_relaxed)
-            CPPUNIT_TEST(Treiber_HP_pause_alloc)
-            CPPUNIT_TEST(Treiber_HP_pause_alloc_relaxed)
-            CPPUNIT_TEST(Treiber_DHP_pause_alloc)
-            CPPUNIT_TEST(Treiber_DHP_pause_alloc_relaxed)
-
-            CPPUNIT_TEST(Elimination_HP)
-            CPPUNIT_TEST(Elimination_HP_dyn)
-            CPPUNIT_TEST(Elimination_HP_stat)
-            CPPUNIT_TEST(Elimination_HP_relaxed)
-            CPPUNIT_TEST(Elimination_DHP)
-            CPPUNIT_TEST(Elimination_DHP_dyn)
-            CPPUNIT_TEST(Elimination_DHP_stat)
-            CPPUNIT_TEST(Elimination_DHP_relaxed)
-            CPPUNIT_TEST(Elimination_HP_yield)
-            CPPUNIT_TEST(Elimination_HP_yield_relaxed)
-            CPPUNIT_TEST(Elimination_DHP_yield)
-            CPPUNIT_TEST(Elimination_DHP_yield_relaxed)
-            CPPUNIT_TEST(Elimination_HP_pause_alloc)
-            CPPUNIT_TEST(Elimination_HP_pause_alloc_relaxed)
-            CPPUNIT_TEST(Elimination_DHP_pause_alloc)
-            CPPUNIT_TEST(Elimination_DHP_pause_alloc_relaxed)
-        CPPUNIT_TEST_SUITE_END();
-    };
-}   // namespace stack
-
-#endif // #ifndef CDSTEST_HDR_TREIBER_STACK_H
diff --git a/tests/test-hdr/stack/hdr_treiber_stack_dhp.cpp b/tests/test-hdr/stack/hdr_treiber_stack_dhp.cpp
deleted file mode 100644 (file)
index 63c4364..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_treiber_stack.h"
-#include <cds/gc/dhp.h>
-#include <cds/container/treiber_stack.h>
-
-namespace stack {
-#define TEST(X)     void TestStack::X() { test<defs::X>(); }
-    namespace cs = cds::container;
-
-    namespace defs { namespace {
-
-        typedef cs::TreiberStack< cds::gc::DHP, int > Treiber_DHP;
-        typedef cs::TreiberStack< cds::gc::DHP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-            >::type
-        > Treiber_DHP_relaxed;
-
-        typedef cs::TreiberStack< cds::gc::DHP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::back_off< cds::backoff::yield>
-            >::type
-        > Treiber_DHP_yield;
-
-        typedef cs::TreiberStack< cds::gc::DHP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::back_off< cds::backoff::yield>
-                ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-            >::type
-        > Treiber_DHP_yield_relaxed;
-
-        typedef cs::TreiberStack< cds::gc::DHP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::back_off< cds::backoff::pause>
-                ,cds::opt::allocator< std::allocator< bool * > >
-            >::type
-        > Treiber_DHP_pause_alloc;
-
-        typedef cs::TreiberStack< cds::gc::DHP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-                ,cds::opt::back_off< cds::backoff::pause>
-                ,cds::opt::allocator< std::allocator< bool * > >
-            >::type
-        > Treiber_DHP_pause_alloc_relaxed;
-    }}
-
-    TEST(Treiber_DHP)
-    TEST(Treiber_DHP_yield)
-    TEST(Treiber_DHP_pause_alloc)
-
-    TEST(Treiber_DHP_relaxed)
-    TEST(Treiber_DHP_yield_relaxed)
-    TEST(Treiber_DHP_pause_alloc_relaxed)
-
-}
diff --git a/tests/test-hdr/stack/hdr_treiber_stack_hp.cpp b/tests/test-hdr/stack/hdr_treiber_stack_hp.cpp
deleted file mode 100644 (file)
index 2a5963e..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "hdr_treiber_stack.h"
-#include <cds/gc/hp.h>
-#include <cds/container/treiber_stack.h>
-
-
-namespace stack {
-#define TEST(X)     void TestStack::X() { test<defs::X>(); }
-    namespace cs = cds::container;
-
-    namespace defs { namespace {
-
-        typedef cs::TreiberStack< cds::gc::HP, int > Treiber_HP;
-        typedef cs::TreiberStack< cds::gc::HP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-            >::type
-        > Treiber_HP_relaxed;
-
-        typedef cs::TreiberStack< cds::gc::HP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::back_off< cds::backoff::yield>
-            >::type
-        > Treiber_HP_yield;
-
-        typedef cs::TreiberStack< cds::gc::HP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::back_off< cds::backoff::yield>
-                , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-            >::type
-        > Treiber_HP_yield_relaxed;
-
-        typedef cs::TreiberStack< cds::gc::HP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::back_off< cds::backoff::pause>
-                ,cds::opt::allocator< std::allocator< bool * > >
-            >::type
-        > Treiber_HP_pause_alloc;
-
-        typedef cs::TreiberStack< cds::gc::HP, int
-            , typename cs::treiber_stack::make_traits<
-                cds::opt::back_off< cds::backoff::pause>
-                ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-                ,cds::opt::allocator< std::allocator< unsigned long > >
-            >::type
-        > Treiber_HP_pause_alloc_relaxed;
-    }}
-
-    TEST(Treiber_HP)
-    TEST(Treiber_HP_yield)
-    TEST(Treiber_HP_pause_alloc)
-
-    TEST(Treiber_HP_relaxed)
-    TEST(Treiber_HP_yield_relaxed)
-    TEST(Treiber_HP_pause_alloc_relaxed)
-}
-CPPUNIT_TEST_SUITE_REGISTRATION(stack::TestStack);
diff --git a/tests/test-hdr/tree/hdr_bronson_avltree_map.h b/tests/test-hdr/tree/hdr_bronson_avltree_map.h
deleted file mode 100644 (file)
index c91518d..0000000
+++ /dev/null
@@ -1,706 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_BRONSON_AVLTREE_MAP_H
-#define CDSTEST_HDR_BRONSON_AVLTREE_MAP_H
-
-#include "cppunit/cppunit_proxy.h"
-#include "size_check.h"
-#include <functional>   // ref
-#include <algorithm>
-
-namespace tree {
-    using misc::check_size;
-
-    class BronsonAVLTreeHdrTest : public CppUnitMini::TestCase
-    {
-    public:
-        typedef int     key_type;
-
-        struct stat_data {
-            size_t  nInsertFuncCall;
-            size_t  nEnsureExistFuncCall;
-            size_t  nEnsureNewFuncCall;
-            size_t  nEraseFuncCall;
-            size_t  nFindFuncCall;
-
-            stat_data()
-                : nInsertFuncCall( 0 )
-                , nEnsureExistFuncCall( 0 )
-                , nEnsureNewFuncCall( 0 )
-                , nEraseFuncCall( 0 )
-                , nFindFuncCall( 0 )
-            {}
-        };
-
-        struct value_type {
-            int         nVal;
-            stat_data   stat;
-
-            value_type()
-                : nVal(0)
-            {}
-
-            value_type( int v )
-                : nVal( v )
-            {}
-        };
-
-        struct compare {
-            int operator()( key_type k1, key_type k2 )
-            {
-                return k1 < k2 ? -1 : k1 > k2 ? 1 : 0;
-            }
-        };
-
-        struct wrapped_int {
-            int  nKey;
-
-            wrapped_int( int n )
-                : nKey( n )
-            {}
-        };
-
-        struct wrapped_less
-        {
-            bool operator()( wrapped_int const& w, int n ) const
-            {
-                return w.nKey < n;
-            }
-            bool operator()( int n, wrapped_int const& w ) const
-            {
-                return n < w.nKey;
-            }
-            template <typename T>
-            bool operator()( wrapped_int const& w, T const& v ) const
-            {
-                return w.nKey < v.nKey;
-            }
-            template <typename T>
-            bool operator()( T const& v, wrapped_int const& w ) const
-            {
-                return v.nKey < w.nKey;
-            }
-        };
-
-    protected:
-        static const size_t c_nItemCount = 10000;
-
-        struct find_functor
-        {
-            void operator()( key_type, value_type& v ) const
-            {
-                ++v.stat.nFindFuncCall;
-            }
-        };
-
-        template <typename Item>
-        struct copy_found
-        {
-            Item    m_found;
-
-            void operator()( key_type const&, Item& v )
-            {
-                m_found = v;
-            }
-
-            void operator()( Item& v )
-            {
-                m_found = v;
-            }
-        };
-
-        struct insert_functor
-        {
-            template <typename Item>
-            void operator()( key_type key, Item& i )
-            {
-                i.nVal = key * 100;
-                ++i.stat.nInsertFuncCall;
-            }
-        };
-
-        template <typename Q>
-        static void update_func( bool bNew, Q key, value_type& i )
-        {
-            i.nVal = key * 100;
-            if ( bNew )
-                ++i.stat.nEnsureNewFuncCall;
-            else
-                ++i.stat.nEnsureExistFuncCall;
-        }
-
-        struct update_functor
-        {
-            template <typename Q>
-            void operator()( bool bNew, Q key, value_type& i )
-            {
-                update_func( bNew, key, i );
-            }
-        };
-
-        struct check_functor
-        {
-            void operator()( size_t nLevel, size_t hLeft, size_t hRight )
-            {
-                CPPUNIT_MSG("Consistency violation: level=" << nLevel << ", hLeft=" << hLeft << ", hRight=" << hRight );
-            }
-        };
-
-    protected:
-        template <class Set>
-        void test_with( Set& s )
-        {
-            value_type itm;
-            int key;
-            typedef typename Set::exempt_ptr exempt_ptr;
-
-            // insert/find test
-            CPPUNIT_ASSERT( !s.contains( 10 ) );
-            CPPUNIT_ASSERT( s.insert( 10 ) );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 1 ) );
-            CPPUNIT_ASSERT( s.contains( 10 ) );
-
-            CPPUNIT_ASSERT( !s.insert( 10 ) );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 1 ) );
-
-            CPPUNIT_ASSERT( !s.contains( 20, std::less<key_type>() ) );
-            CPPUNIT_ASSERT( s.insert( 20, 25 ) );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ) );
-            CPPUNIT_ASSERT( s.contains( 10, std::less<key_type>() ) );
-            CPPUNIT_ASSERT( s.contains( key = 20 ) );
-            CPPUNIT_ASSERT( s.find_with( key, std::less<key_type>(), find_functor() ) );
-            {
-                copy_found<value_type> f;
-                key = 20;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nVal == 25 );
-                CPPUNIT_ASSERT( f.m_found.stat.nFindFuncCall == 1 );
-            }
-            CPPUNIT_ASSERT( s.find( key, find_functor() ) );
-            {
-                copy_found<value_type> f;
-                key = 20;
-                CPPUNIT_ASSERT( s.find_with( key, std::less<key_type>(), std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nVal == 25 );
-                CPPUNIT_ASSERT( f.m_found.stat.nFindFuncCall == 2 );
-            }
-            CPPUNIT_ASSERT( s.find( 20, find_functor() ) );
-            {
-                copy_found<value_type> f;
-                CPPUNIT_ASSERT( s.find_with( 20, std::less<key_type>(), std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nVal == 25 );
-                CPPUNIT_ASSERT( f.m_found.stat.nFindFuncCall == 3 );
-            }
-
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ) );
-
-            CPPUNIT_ASSERT( !s.contains( 25 ) );
-            CPPUNIT_ASSERT( s.insert_with( 25, insert_functor() ) );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ) );
-            {
-                copy_found<value_type> f;
-                key = 25;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nVal == 2500 );
-                CPPUNIT_ASSERT( f.m_found.stat.nInsertFuncCall == 1 );
-            }
-
-            // update test
-            key = 10;
-            {
-                copy_found<value_type> f;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nVal == 0 );
-                CPPUNIT_ASSERT( f.m_found.stat.nEnsureExistFuncCall == 0 );
-                CPPUNIT_ASSERT( f.m_found.stat.nEnsureNewFuncCall == 0 );
-            }
-            std::pair<bool, bool> updateResult = s.update( key, update_functor() );
-            CPPUNIT_ASSERT( updateResult.first && !updateResult.second );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ) );
-            {
-                copy_found<value_type> f;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nVal == 1000 );
-                CPPUNIT_ASSERT( f.m_found.stat.nEnsureExistFuncCall == 1 );
-                CPPUNIT_ASSERT( f.m_found.stat.nEnsureNewFuncCall == 0 );
-            }
-
-            updateResult = s.update( 13, []( bool /*bNew*/, key_type key, value_type& v )
-                {
-                    v.nVal = key * 1000;
-                    ++v.stat.nEnsureNewFuncCall;
-                });
-            CPPUNIT_ASSERT( updateResult.first && updateResult.second );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 4 ) );
-            {
-                copy_found<value_type> f;
-                key = 13;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nVal == 13000 );
-                CPPUNIT_ASSERT( f.m_found.stat.nEnsureExistFuncCall == 0 );
-                CPPUNIT_ASSERT( f.m_found.stat.nEnsureNewFuncCall == 1 );
-            }
-
-            // erase test
-            CPPUNIT_ASSERT( s.erase( 13 ) );
-            CPPUNIT_ASSERT( !s.contains( 13 ) );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ) );
-            CPPUNIT_ASSERT( !s.erase( 13 ) );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ) );
-
-            CPPUNIT_ASSERT( s.contains( 10 ) );
-            CPPUNIT_ASSERT( s.erase_with( 10, std::less<key_type>() ) );
-            CPPUNIT_ASSERT( !s.contains( 10 ) );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ) );
-            CPPUNIT_ASSERT( !s.erase_with( 10, std::less<key_type>() ) );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ) );
-
-            CPPUNIT_ASSERT( s.contains( 20 ) );
-            {
-                copy_found<value_type> f;
-                CPPUNIT_ASSERT( s.erase( 20, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nVal == 25 );
-
-                CPPUNIT_ASSERT( s.insert( 235, 2350 ) );
-                CPPUNIT_ASSERT( s.erase_with( 235, std::less<key_type>(), std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nVal == 2350 );
-            }
-            CPPUNIT_ASSERT( !s.contains( 20 ) );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 1 ) );
-
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ) );
-
-            // emplace test
-            CPPUNIT_ASSERT( s.emplace( 151 ) );  // key = 151, val=0
-            CPPUNIT_ASSERT( s.emplace( 174, 471 ) );    // key = 174, val = 471
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ) );
-
-            CPPUNIT_ASSERT( s.contains( 151 ) );
-            CPPUNIT_ASSERT( s.contains( 174, std::less<key_type>() ) );
-            CPPUNIT_ASSERT( !s.contains( 190 ) );
-
-            {
-                copy_found<value_type> f;
-                key = 151;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f )));
-                CPPUNIT_ASSERT( f.m_found.nVal == 0 );
-
-                key = 174;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f )));
-                CPPUNIT_ASSERT( f.m_found.nVal == 471 );
-            }
-
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ) );
-
-            const int c_nStep = 10;
-            int keys[1000];
-            for ( key_type i = 0; i < static_cast<key_type>(sizeof(keys) / sizeof(keys[0])); ++i )
-                keys[i] = i;
-            shuffle( keys, keys + sizeof(keys) / sizeof(keys[0]));
-
-            size_t nCount = 1;
-            int nPrev;
-            key_type keyPrev;
-            exempt_ptr xp;
-
-            // extract_min
-            for ( int i = 0; i < static_cast<int>(sizeof(keys) / sizeof(keys[0])); ++i )
-                CPPUNIT_ASSERT( s.emplace( keys[i], keys[i] * c_nStep ));
-            CPPUNIT_CHECK( s.check_consistency( check_functor() ));
-
-            xp = s.extract_min();
-            CPPUNIT_ASSERT( xp );
-            nPrev = xp->nVal;
-            CPPUNIT_CHECK_EX( nPrev == 0, "Expected=0 real=" << nPrev );
-            while ( !s.empty() ) {
-                xp = s.extract_min();
-                CPPUNIT_ASSERT( xp );
-                CPPUNIT_CHECK_EX( nPrev + c_nStep == xp->nVal, "Expected=" << nPrev + c_nStep << " real=" << xp->nVal );
-                nPrev = xp->nVal;
-                ++nCount;
-            }
-            CPPUNIT_CHECK( nCount == sizeof(keys) / sizeof(keys[0]));
-
-            // extract_min<Func>
-            for ( int i = 0; i < static_cast<int>(sizeof(keys) / sizeof(keys[0])); ++i )
-                CPPUNIT_ASSERT( s.insert( keys[i], keys[i] * c_nStep ));
-            CPPUNIT_CHECK( s.check_consistency( check_functor() ));
-
-            nCount = 1;
-            xp = s.extract_min( [&keyPrev]( key_type k ){ keyPrev = k; });
-            CPPUNIT_ASSERT( xp );
-            nPrev = xp->nVal;
-            CPPUNIT_CHECK_EX( keyPrev == 0, "Expected=0 real=" << keyPrev );
-            CPPUNIT_CHECK_EX( nPrev == 0, "Expected=0 real=" << nPrev );
-            while ( !s.empty() ) {
-                xp = s.extract_min( [&key](key_type k){ key = k; } );
-                CPPUNIT_ASSERT( xp );
-                CPPUNIT_CHECK_EX( key == keyPrev + 1, "Expected=" << keyPrev + 1 << " real=" << key );
-                CPPUNIT_CHECK_EX( nPrev + c_nStep == xp->nVal, "Expected=" << nPrev + c_nStep << " real=" << xp->nVal );
-                nPrev = xp->nVal;
-                ++keyPrev;
-                ++nCount;
-            }
-            CPPUNIT_CHECK( nCount == sizeof(keys) / sizeof(keys[0]));
-
-            // extract_min_key
-            for ( int i = 0; i < static_cast<int>(sizeof(keys) / sizeof(keys[0])); ++i )
-                CPPUNIT_ASSERT( s.insert( keys[i], keys[i] * c_nStep ));
-            CPPUNIT_CHECK( s.check_consistency( check_functor() ));
-
-            nCount = 1;
-            xp = s.extract_min_key( keyPrev );
-            CPPUNIT_ASSERT( xp );
-            nPrev = xp->nVal;
-            CPPUNIT_CHECK_EX( keyPrev == 0, "Expected=0 real=" << keyPrev );
-            CPPUNIT_CHECK_EX( nPrev == 0, "Expected=0 real=" << nPrev );
-            while ( !s.empty() ) {
-                xp = s.extract_min_key( key );
-                CPPUNIT_ASSERT( xp );
-                CPPUNIT_CHECK_EX( key == keyPrev + 1, "Expected=" << keyPrev + 1 << " real=" << key );
-                CPPUNIT_CHECK_EX( nPrev + c_nStep == xp->nVal, "Expected=" << nPrev + c_nStep << " real=" << xp->nVal );
-                nPrev = xp->nVal;
-                ++keyPrev;
-                ++nCount;
-            }
-            CPPUNIT_CHECK( nCount == sizeof(keys) / sizeof(keys[0]));
-
-            // extract_max
-            for ( int i = 0; i < static_cast<int>(sizeof(keys) / sizeof(keys[0])); ++i )
-                CPPUNIT_ASSERT( s.emplace( keys[i], keys[i] * c_nStep ));
-            CPPUNIT_CHECK( s.check_consistency( check_functor() ));
-
-            nCount = 1;
-            xp = s.extract_max();
-            CPPUNIT_ASSERT( xp );
-            nPrev = xp->nVal;
-            CPPUNIT_CHECK_EX( nPrev == c_nStep * (sizeof(keys) / sizeof(keys[0]) - 1),
-                "Expected=" << c_nStep * (sizeof(keys) / sizeof(keys[0]) - 1) << " real=" << nPrev );
-            while ( !s.empty() ) {
-                xp = s.extract_max();
-                CPPUNIT_ASSERT( xp );
-                CPPUNIT_CHECK_EX( nPrev - c_nStep == xp->nVal, "Expected=" << nPrev - c_nStep << " real=" << xp->nVal );
-                nPrev = xp->nVal;
-                ++nCount;
-            }
-            CPPUNIT_CHECK( nCount == sizeof(keys) / sizeof(keys[0]));
-
-            // extract_max<Func>
-            for ( int i = 0; i < static_cast<int>(sizeof(keys) / sizeof(keys[0])); ++i )
-                CPPUNIT_ASSERT( s.emplace( keys[i], keys[i] * c_nStep ));
-            CPPUNIT_CHECK( s.check_consistency( check_functor() ));
-
-            nCount = 1;
-            xp = s.extract_max( [&keyPrev]( key_type k ){ keyPrev = k; });
-            CPPUNIT_ASSERT( xp );
-            nPrev = xp->nVal;
-            CPPUNIT_CHECK_EX( keyPrev == sizeof(keys) / sizeof(keys[0]) - 1,
-                "Expected=" << sizeof(keys) / sizeof(keys[0]) - 1 << " real=" << keyPrev );
-            CPPUNIT_CHECK_EX( nPrev == c_nStep * (sizeof(keys) / sizeof(keys[0]) - 1),
-                "Expected=" << c_nStep * (sizeof(keys) / sizeof(keys[0]) - 1) << " real=" << nPrev );
-            while ( !s.empty() ) {
-                xp = s.extract_max( [&key](key_type k){ key = k; });
-                CPPUNIT_ASSERT( xp );
-                CPPUNIT_CHECK_EX( key == keyPrev - 1, "Expected=" << keyPrev - 1 << " real=" << key );
-                CPPUNIT_CHECK_EX( nPrev - c_nStep == xp->nVal, "Expected=" << nPrev - c_nStep << " real=" << xp->nVal );
-                nPrev = xp->nVal;
-                --keyPrev;
-                ++nCount;
-            }
-            CPPUNIT_CHECK( nCount == sizeof(keys) / sizeof(keys[0]));
-
-            // extract_max_key
-            for ( int i = 0; i < static_cast<int>(sizeof(keys) / sizeof(keys[0])); ++i )
-                CPPUNIT_ASSERT( s.emplace( keys[i], keys[i] * c_nStep ));
-            CPPUNIT_CHECK( s.check_consistency( check_functor() ));
-
-            nCount = 1;
-            xp = s.extract_max_key( keyPrev );
-            CPPUNIT_ASSERT( xp );
-            nPrev = xp->nVal;
-            CPPUNIT_CHECK_EX( keyPrev == sizeof(keys) / sizeof(keys[0]) - 1,
-                "Expected=" << sizeof(keys) / sizeof(keys[0]) - 1 << " real=" << keyPrev );
-            CPPUNIT_CHECK_EX( nPrev == c_nStep * (sizeof(keys) / sizeof(keys[0]) - 1),
-                "Expected=" << c_nStep * (sizeof(keys) / sizeof(keys[0]) - 1) << " real=" << nPrev );
-            while ( !s.empty() ) {
-                xp = s.extract_max_key( key );
-                CPPUNIT_ASSERT( xp );
-                CPPUNIT_CHECK_EX( key == keyPrev - 1, "Expected=" << keyPrev - 1 << " real=" << key );
-                CPPUNIT_CHECK_EX( nPrev - c_nStep == xp->nVal, "Expected=" << nPrev - c_nStep << " real=" << xp->nVal );
-                nPrev = xp->nVal;
-                --keyPrev;
-                ++nCount;
-            }
-            CPPUNIT_CHECK( nCount == sizeof(keys) / sizeof(keys[0]));
-
-            // extract
-            for ( int i = 0; i < static_cast<int>(sizeof(keys) / sizeof(keys[0])); ++i )
-                CPPUNIT_ASSERT( s.emplace( keys[i], keys[i] * c_nStep ));
-            CPPUNIT_CHECK( s.check_consistency( check_functor() ));
-
-            for ( int i = 0; i < static_cast<int>(sizeof( keys ) / sizeof( keys[0] )); ++i ) {
-                xp = s.extract(keys[i]);
-                CPPUNIT_CHECK_EX( xp->nVal == keys[i] * c_nStep, "Expected value=" << keys[i] * c_nStep << " real=" << xp->nVal );
-            }
-            CPPUNIT_ASSERT(s.empty());
-
-
-            // extract_with
-            for ( int i = 0; i < static_cast<int>(sizeof(keys) / sizeof(keys[0])); ++i )
-                CPPUNIT_ASSERT( s.emplace( keys[i], keys[i] * c_nStep ));
-            CPPUNIT_CHECK( s.check_consistency( check_functor() ));
-
-            for ( int i = 0; i < static_cast<int>(sizeof( keys ) / sizeof( keys[0] )); ++i ) {
-                xp = s.extract_with( wrapped_int(keys[i]), wrapped_less());
-                CPPUNIT_CHECK_EX( xp->nVal == keys[i] * c_nStep, "Expected value=" << keys[i] * c_nStep << " real=" << xp->nVal );
-            }
-            CPPUNIT_ASSERT(s.empty());
-        }
-
-        template <class Set, class PrintStat>
-        void test()
-        {
-            typedef Set set_type;
-
-            set_type s;
-
-            test_with( s );
-
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ) );
-
-            PrintStat()(s);
-        }
-
-        void BronsonAVLTree_rcu_gpi_less();
-        void BronsonAVLTree_rcu_gpi_less_stat();
-        void BronsonAVLTree_rcu_gpi_cmp();
-        void BronsonAVLTree_rcu_gpi_cmp_stat();
-        void BronsonAVLTree_rcu_gpi_cmpless();
-        void BronsonAVLTree_rcu_gpi_less_ic();
-        void BronsonAVLTree_rcu_gpi_cmp_ic();
-        void BronsonAVLTree_rcu_gpi_cmp_ic_stat();
-        void BronsonAVLTree_rcu_gpi_cmp_ic_stat_yield();
-        void BronsonAVLTree_rcu_gpi_less_relaxed_insert();
-        void BronsonAVLTree_rcu_gpi_less_relaxed_insert_stat();
-        void BronsonAVLTree_rcu_gpi_pool_monitor_less();
-        void BronsonAVLTree_rcu_gpi_pool_monitor_less_stat();
-        void BronsonAVLTree_rcu_gpi_pool_monitor_cmp_ic_stat();
-        void BronsonAVLTree_rcu_gpi_pool_monitor_cmp_ic_stat_yield();
-        void BronsonAVLTree_rcu_gpi_pool_monitor_less_relaxed_insert();
-        void BronsonAVLTree_rcu_gpi_pool_monitor_less_relaxed_insert_stat();
-
-        void BronsonAVLTree_rcu_gpb_less();
-        void BronsonAVLTree_rcu_gpb_less_stat();
-        void BronsonAVLTree_rcu_gpb_cmp();
-        void BronsonAVLTree_rcu_gpb_cmp_stat();
-        void BronsonAVLTree_rcu_gpb_cmpless();
-        void BronsonAVLTree_rcu_gpb_less_ic();
-        void BronsonAVLTree_rcu_gpb_cmp_ic();
-        void BronsonAVLTree_rcu_gpb_cmp_ic_stat();
-        void BronsonAVLTree_rcu_gpb_cmp_ic_stat_yield();
-        void BronsonAVLTree_rcu_gpb_less_relaxed_insert();
-        void BronsonAVLTree_rcu_gpb_less_relaxed_insert_stat();
-        void BronsonAVLTree_rcu_gpb_pool_monitor_less();
-        void BronsonAVLTree_rcu_gpb_pool_monitor_less_stat();
-        void BronsonAVLTree_rcu_gpb_pool_monitor_cmp_ic_stat();
-        void BronsonAVLTree_rcu_gpb_pool_monitor_cmp_ic_stat_yield();
-        void BronsonAVLTree_rcu_gpb_pool_monitor_less_relaxed_insert();
-        void BronsonAVLTree_rcu_gpb_pool_monitor_less_relaxed_insert_stat();
-
-        void BronsonAVLTree_rcu_gpt_less();
-        void BronsonAVLTree_rcu_gpt_less_stat();
-        void BronsonAVLTree_rcu_gpt_cmp();
-        void BronsonAVLTree_rcu_gpt_cmp_stat();
-        void BronsonAVLTree_rcu_gpt_cmpless();
-        void BronsonAVLTree_rcu_gpt_less_ic();
-        void BronsonAVLTree_rcu_gpt_cmp_ic();
-        void BronsonAVLTree_rcu_gpt_cmp_ic_stat();
-        void BronsonAVLTree_rcu_gpt_cmp_ic_stat_yield();
-        void BronsonAVLTree_rcu_gpt_less_relaxed_insert();
-        void BronsonAVLTree_rcu_gpt_less_relaxed_insert_stat();
-        void BronsonAVLTree_rcu_gpt_pool_monitor_less();
-        void BronsonAVLTree_rcu_gpt_pool_monitor_less_stat();
-        void BronsonAVLTree_rcu_gpt_pool_monitor_cmp_ic_stat();
-        void BronsonAVLTree_rcu_gpt_pool_monitor_cmp_ic_stat_yield();
-        void BronsonAVLTree_rcu_gpt_pool_monitor_less_relaxed_insert();
-        void BronsonAVLTree_rcu_gpt_pool_monitor_less_relaxed_insert_stat();
-
-        void BronsonAVLTree_rcu_shb_less();
-        void BronsonAVLTree_rcu_shb_less_stat();
-        void BronsonAVLTree_rcu_shb_cmp();
-        void BronsonAVLTree_rcu_shb_cmp_stat();
-        void BronsonAVLTree_rcu_shb_cmpless();
-        void BronsonAVLTree_rcu_shb_less_ic();
-        void BronsonAVLTree_rcu_shb_cmp_ic();
-        void BronsonAVLTree_rcu_shb_cmp_ic_stat();
-        void BronsonAVLTree_rcu_shb_cmp_ic_stat_yield();
-        void BronsonAVLTree_rcu_shb_less_relaxed_insert();
-        void BronsonAVLTree_rcu_shb_less_relaxed_insert_stat();
-        void BronsonAVLTree_rcu_shb_pool_monitor_less();
-        void BronsonAVLTree_rcu_shb_pool_monitor_less_stat();
-        void BronsonAVLTree_rcu_shb_pool_monitor_cmp_ic_stat();
-        void BronsonAVLTree_rcu_shb_pool_monitor_cmp_ic_stat_yield();
-        void BronsonAVLTree_rcu_shb_pool_monitor_less_relaxed_insert();
-        void BronsonAVLTree_rcu_shb_pool_monitor_less_relaxed_insert_stat();
-
-        void BronsonAVLTree_rcu_sht_less();
-        void BronsonAVLTree_rcu_sht_less_stat();
-        void BronsonAVLTree_rcu_sht_cmp();
-        void BronsonAVLTree_rcu_sht_cmp_stat();
-        void BronsonAVLTree_rcu_sht_cmpless();
-        void BronsonAVLTree_rcu_sht_less_ic();
-        void BronsonAVLTree_rcu_sht_cmp_ic();
-        void BronsonAVLTree_rcu_sht_cmp_ic_stat();
-        void BronsonAVLTree_rcu_sht_cmp_ic_stat_yield();
-        void BronsonAVLTree_rcu_sht_less_relaxed_insert();
-        void BronsonAVLTree_rcu_sht_less_relaxed_insert_stat();
-        void BronsonAVLTree_rcu_sht_pool_monitor_less();
-        void BronsonAVLTree_rcu_sht_pool_monitor_less_stat();
-        void BronsonAVLTree_rcu_sht_pool_monitor_cmp_ic_stat();
-        void BronsonAVLTree_rcu_sht_pool_monitor_cmp_ic_stat_yield();
-        void BronsonAVLTree_rcu_sht_pool_monitor_less_relaxed_insert();
-        void BronsonAVLTree_rcu_sht_pool_monitor_less_relaxed_insert_stat();
-
-        CPPUNIT_TEST_SUITE( BronsonAVLTreeHdrTest )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpi_less )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpi_less_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpi_cmp )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpi_cmp_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpi_cmpless )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpi_less_ic )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpi_cmp_ic )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpi_cmp_ic_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpi_cmp_ic_stat_yield )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpi_less_relaxed_insert )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpi_less_relaxed_insert_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpi_pool_monitor_less )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpi_pool_monitor_less_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpi_pool_monitor_cmp_ic_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpi_pool_monitor_cmp_ic_stat_yield )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpi_pool_monitor_less_relaxed_insert )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpi_pool_monitor_less_relaxed_insert_stat )
-
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpb_less )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpb_less_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpb_cmp )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpb_cmp_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpb_cmpless )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpb_less_ic )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpb_cmp_ic )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpb_cmp_ic_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpb_cmp_ic_stat_yield )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpb_less_relaxed_insert )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpb_less_relaxed_insert_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpb_pool_monitor_less )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpb_pool_monitor_less_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpb_pool_monitor_cmp_ic_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpb_pool_monitor_cmp_ic_stat_yield )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpb_pool_monitor_less_relaxed_insert )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpb_pool_monitor_less_relaxed_insert_stat )
-
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpt_less )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpt_less_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpt_cmp )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpt_cmp_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpt_cmpless )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpt_less_ic )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpt_cmp_ic )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpt_cmp_ic_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpt_cmp_ic_stat_yield )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpt_less_relaxed_insert )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpt_less_relaxed_insert_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpt_pool_monitor_less )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpt_pool_monitor_less_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpt_pool_monitor_cmp_ic_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpt_pool_monitor_cmp_ic_stat_yield )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpt_pool_monitor_less_relaxed_insert )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_gpt_pool_monitor_less_relaxed_insert_stat )
-
-            CPPUNIT_TEST( BronsonAVLTree_rcu_shb_less )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_shb_less_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_shb_cmp )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_shb_cmp_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_shb_cmpless )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_shb_less_ic )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_shb_cmp_ic )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_shb_cmp_ic_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_shb_cmp_ic_stat_yield )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_shb_less_relaxed_insert )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_shb_less_relaxed_insert_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_shb_pool_monitor_less )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_shb_pool_monitor_less_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_shb_pool_monitor_cmp_ic_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_shb_pool_monitor_cmp_ic_stat_yield )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_shb_pool_monitor_less_relaxed_insert )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_shb_pool_monitor_less_relaxed_insert_stat )
-
-            CPPUNIT_TEST( BronsonAVLTree_rcu_sht_less )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_sht_less_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_sht_cmp )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_sht_cmp_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_sht_cmpless )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_sht_less_ic )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_sht_cmp_ic )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_sht_cmp_ic_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_sht_cmp_ic_stat_yield )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_sht_less_relaxed_insert )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_sht_less_relaxed_insert_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_sht_pool_monitor_less )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_sht_pool_monitor_less_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_sht_pool_monitor_cmp_ic_stat )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_sht_pool_monitor_cmp_ic_stat_yield )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_sht_pool_monitor_less_relaxed_insert )
-            CPPUNIT_TEST( BronsonAVLTree_rcu_sht_pool_monitor_less_relaxed_insert_stat )
-
-        CPPUNIT_TEST_SUITE_END()
-    };
-} // namespace tree
-
-#endif // #ifndef CDSTEST_HDR_BRONSON_AVLTREE_MAP_H
diff --git a/tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpb.cpp b/tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpb.cpp
deleted file mode 100644 (file)
index b265d00..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_bronson_avltree_map.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/container/bronson_avltree_map_rcu.h>
-
-#include "unit/print_bronsonavltree_stat.h"
-
-namespace tree {
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_type;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t )
-            {
-                std::cout << t.statistics();
-            }
-        };
-    } // namespace
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpb_less()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,cc::bronson_avltree::relaxed_insert< false >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpb_less_stat()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,cc::bronson_avltree::relaxed_insert< false >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpb_cmp()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpb_cmp_stat()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::stat< cc::bronson_avltree::stat<> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpb_cmpless()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::less< std::less<key_type> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpb_less_ic()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpb_cmp_ic()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpb_cmp_ic_stat()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::bronson_avltree::stat<> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpb_cmp_ic_stat_yield()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,co::back_off< cds::backoff::yield >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpb_less_relaxed_insert()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,cc::bronson_avltree::relaxed_insert< true >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpb_less_relaxed_insert_stat()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,cc::bronson_avltree::relaxed_insert< true >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpb_pool_monitor.cpp b/tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpb_pool_monitor.cpp
deleted file mode 100644 (file)
index a1780dd..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_bronson_avltree_map.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/container/bronson_avltree_map_rcu.h>
-#include <cds/sync/pool_monitor.h>
-#include <cds/memory/vyukov_queue_pool.h>
-
-#include "unit/print_bronsonavltree_stat.h"
-#include "unit/print_sync_monitor_stat.h"
-
-namespace tree {
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_type;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t ) const
-            {
-                std::cout << t.statistics();
-                std::cout << t.monitor().statistics();
-            }
-        };
-
-        typedef cds::memory::vyukov_queue_pool< std::mutex > simple_pool;
-        typedef cds::memory::lazy_vyukov_queue_pool< std::mutex > lazy_pool;
-        typedef cds::memory::bounded_vyukov_queue_pool< std::mutex > bounded_pool;
-    } // namespace
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpb_pool_monitor_less()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::sync_monitor< cds::sync::pool_monitor<simple_pool> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpb_pool_monitor_less_stat()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,co::sync_monitor< cds::sync::pool_monitor<lazy_pool, cds::opt::none, true >>
-                ,cc::bronson_avltree::relaxed_insert< false >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-        void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpb_pool_monitor_cmp_ic_stat()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,co::sync_monitor< cds::sync::pool_monitor<bounded_pool, cds::opt::none, true >>
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpb_pool_monitor_cmp_ic_stat_yield()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,co::back_off< cds::backoff::yield >
-                ,co::sync_monitor< cds::sync::pool_monitor<lazy_pool, cds::opt::none, true >>
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpb_pool_monitor_less_relaxed_insert()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,cc::bronson_avltree::relaxed_insert< true >
-                ,co::sync_monitor< cds::sync::pool_monitor<lazy_pool> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpb_pool_monitor_less_relaxed_insert_stat()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,cc::bronson_avltree::relaxed_insert< true >
-                ,co::sync_monitor< cds::sync::pool_monitor<simple_pool, cds::opt::none, true >>
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpi.cpp b/tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpi.cpp
deleted file mode 100644 (file)
index 32c65b6..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_bronson_avltree_map.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/container/bronson_avltree_map_rcu.h>
-
-#include "unit/print_bronsonavltree_stat.h"
-
-namespace tree {
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t )
-            {
-                std::cout << t.statistics();
-            }
-        };
-    } // namespace
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpi_less()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,cc::bronson_avltree::relaxed_insert< false >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpi_less_stat()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,cc::bronson_avltree::relaxed_insert< false >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpi_cmp()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpi_cmp_stat()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::stat< cc::bronson_avltree::stat<> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpi_cmpless()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::less< std::less<key_type> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpi_less_ic()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpi_cmp_ic()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpi_cmp_ic_stat()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::bronson_avltree::stat<> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpi_cmp_ic_stat_yield()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,co::back_off< cds::backoff::yield >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpi_less_relaxed_insert()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,cc::bronson_avltree::relaxed_insert< true >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpi_less_relaxed_insert_stat()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,cc::bronson_avltree::relaxed_insert< true >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpi_pool_monitor.cpp b/tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpi_pool_monitor.cpp
deleted file mode 100644 (file)
index 3976d54..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_bronson_avltree_map.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/container/bronson_avltree_map_rcu.h>
-#include <cds/sync/pool_monitor.h>
-#include <cds/memory/vyukov_queue_pool.h>
-
-#include "unit/print_bronsonavltree_stat.h"
-#include "unit/print_sync_monitor_stat.h"
-
-namespace tree {
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t )
-            {
-                std::cout << t.statistics();
-                std::cout << t.monitor().statistics();
-            }
-        };
-
-        typedef cds::memory::vyukov_queue_pool< std::mutex > simple_pool;
-        typedef cds::memory::lazy_vyukov_queue_pool< std::mutex > lazy_pool;
-        typedef cds::memory::bounded_vyukov_queue_pool< std::mutex > bounded_pool;
-    } // namespace
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpi_pool_monitor_less()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::sync_monitor< cds::sync::pool_monitor<simple_pool> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpi_pool_monitor_less_stat()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,co::sync_monitor< cds::sync::pool_monitor<lazy_pool> >
-                ,cc::bronson_avltree::relaxed_insert< false >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-        void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpi_pool_monitor_cmp_ic_stat()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,co::sync_monitor< cds::sync::pool_monitor<bounded_pool> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpi_pool_monitor_cmp_ic_stat_yield()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,co::back_off< cds::backoff::yield >
-                ,co::sync_monitor< cds::sync::pool_monitor<lazy_pool> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpi_pool_monitor_less_relaxed_insert()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,cc::bronson_avltree::relaxed_insert< true >
-                ,co::sync_monitor< cds::sync::pool_monitor<lazy_pool> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpi_pool_monitor_less_relaxed_insert_stat()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,cc::bronson_avltree::relaxed_insert< true >
-                ,co::sync_monitor< cds::sync::pool_monitor<simple_pool> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpt.cpp b/tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpt.cpp
deleted file mode 100644 (file)
index d628bca..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_bronson_avltree_map.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/container/bronson_avltree_map_rcu.h>
-
-#include "unit/print_bronsonavltree_stat.h"
-
-namespace tree {
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_type;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t )
-            {
-                std::cout << t.statistics();
-            }
-        };
-    } // namespace
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpt_less()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,cc::bronson_avltree::relaxed_insert< false >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpt_less_stat()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,cc::bronson_avltree::relaxed_insert< false >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpt_cmp()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpt_cmp_stat()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::stat< cc::bronson_avltree::stat<> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpt_cmpless()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::less< std::less<key_type> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpt_less_ic()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpt_cmp_ic()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpt_cmp_ic_stat()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::bronson_avltree::stat<> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpt_cmp_ic_stat_yield()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,co::back_off< cds::backoff::yield >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpt_less_relaxed_insert()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,cc::bronson_avltree::relaxed_insert< true >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpt_less_relaxed_insert_stat()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,cc::bronson_avltree::relaxed_insert< true >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpt_pool_monitor.cpp b/tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_gpt_pool_monitor.cpp
deleted file mode 100644 (file)
index e00e601..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_bronson_avltree_map.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/container/bronson_avltree_map_rcu.h>
-#include <cds/sync/pool_monitor.h>
-#include <cds/memory/vyukov_queue_pool.h>
-
-#include "unit/print_bronsonavltree_stat.h"
-#include "unit/print_sync_monitor_stat.h"
-
-
-namespace tree {
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_type;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t )
-            {
-                std::cout << t.statistics();
-                std::cout << t.monitor().statistics();
-            }
-        };
-
-        typedef cds::memory::vyukov_queue_pool< std::mutex > simple_pool;
-        typedef cds::memory::lazy_vyukov_queue_pool< std::mutex > lazy_pool;
-        typedef cds::memory::bounded_vyukov_queue_pool< std::mutex > bounded_pool;
-    } // namespace
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpt_pool_monitor_less()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::sync_monitor< cds::sync::pool_monitor<simple_pool> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpt_pool_monitor_less_stat()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,co::sync_monitor< cds::sync::pool_monitor<lazy_pool> >
-                ,cc::bronson_avltree::relaxed_insert< false >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-        void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpt_pool_monitor_cmp_ic_stat()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,co::sync_monitor< cds::sync::pool_monitor<bounded_pool> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpt_pool_monitor_cmp_ic_stat_yield()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,co::back_off< cds::backoff::yield >
-                ,co::sync_monitor< cds::sync::pool_monitor<lazy_pool> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpt_pool_monitor_less_relaxed_insert()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,cc::bronson_avltree::relaxed_insert< true >
-                ,co::sync_monitor< cds::sync::pool_monitor<lazy_pool> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_gpt_pool_monitor_less_relaxed_insert_stat()
-    {
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,cc::bronson_avltree::relaxed_insert< true >
-                ,co::sync_monitor< cds::sync::pool_monitor<simple_pool> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-    }
-
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_shb.cpp b/tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_shb.cpp
deleted file mode 100644 (file)
index a33836d..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_bronson_avltree_map.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/container/bronson_avltree_map_rcu.h>
-
-#include "unit/print_bronsonavltree_stat.h"
-
-namespace tree {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_type;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t )
-            {
-                std::cout << t.statistics();
-            }
-        };
-    } // namespace
-#endif
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_shb_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,cc::bronson_avltree::relaxed_insert< false >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_shb_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,cc::bronson_avltree::relaxed_insert< false >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_shb_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_shb_cmp_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::stat< cc::bronson_avltree::stat<> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_shb_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::less< std::less<key_type> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_shb_less_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_shb_cmp_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_shb_cmp_ic_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::bronson_avltree::stat<> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_shb_cmp_ic_stat_yield()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,co::back_off< cds::backoff::yield >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_shb_less_relaxed_insert()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,cc::bronson_avltree::relaxed_insert< true >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_shb_less_relaxed_insert_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,cc::bronson_avltree::relaxed_insert< true >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_shb_pool_monitor.cpp b/tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_shb_pool_monitor.cpp
deleted file mode 100644 (file)
index ca6df31..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_bronson_avltree_map.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/container/bronson_avltree_map_rcu.h>
-#include <cds/sync/pool_monitor.h>
-#include <cds/memory/vyukov_queue_pool.h>
-
-#include "unit/print_bronsonavltree_stat.h"
-#include "unit/print_sync_monitor_stat.h"
-
-namespace tree {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_type;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t )
-            {
-                std::cout << t.statistics();
-                std::cout << t.monitor().statistics();
-            }
-        };
-
-        typedef cds::memory::vyukov_queue_pool< std::mutex > simple_pool;
-        typedef cds::memory::lazy_vyukov_queue_pool< std::mutex > lazy_pool;
-        typedef cds::memory::bounded_vyukov_queue_pool< std::mutex > bounded_pool;
-    } // namespace
-#endif
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_shb_pool_monitor_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::sync_monitor< cds::sync::pool_monitor<simple_pool> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_shb_pool_monitor_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,co::sync_monitor< cds::sync::pool_monitor<lazy_pool> >
-                ,cc::bronson_avltree::relaxed_insert< false >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_shb_pool_monitor_cmp_ic_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,co::sync_monitor< cds::sync::pool_monitor<bounded_pool> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_shb_pool_monitor_cmp_ic_stat_yield()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,co::back_off< cds::backoff::yield >
-                ,co::sync_monitor< cds::sync::pool_monitor<lazy_pool> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_shb_pool_monitor_less_relaxed_insert()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,cc::bronson_avltree::relaxed_insert< true >
-                ,co::sync_monitor< cds::sync::pool_monitor<lazy_pool> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_shb_pool_monitor_less_relaxed_insert_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,cc::bronson_avltree::relaxed_insert< true >
-                ,co::sync_monitor< cds::sync::pool_monitor<simple_pool> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_sht.cpp b/tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_sht.cpp
deleted file mode 100644 (file)
index a83d2d6..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_bronson_avltree_map.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/container/bronson_avltree_map_rcu.h>
-
-#include "unit/print_bronsonavltree_stat.h"
-
-namespace tree {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_type;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t )
-            {
-                std::cout << t.statistics();
-            }
-        };
-    } // namespace
-#endif
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_sht_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,cc::bronson_avltree::relaxed_insert< false >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_sht_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,cc::bronson_avltree::relaxed_insert< false >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_sht_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_sht_cmp_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::stat< cc::bronson_avltree::stat<> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_sht_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::less< std::less<key_type> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_sht_less_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_sht_cmp_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_sht_cmp_ic_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::bronson_avltree::stat<> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_sht_cmp_ic_stat_yield()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,co::back_off< cds::backoff::yield >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_sht_less_relaxed_insert()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,cc::bronson_avltree::relaxed_insert< true >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_sht_less_relaxed_insert_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,cc::bronson_avltree::relaxed_insert< true >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_sht_pool_monitor.cpp b/tests/test-hdr/tree/hdr_bronson_avltree_map_rcu_sht_pool_monitor.cpp
deleted file mode 100644 (file)
index aa542c7..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_bronson_avltree_map.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/container/bronson_avltree_map_rcu.h>
-#include <cds/sync/pool_monitor.h>
-#include <cds/memory/vyukov_queue_pool.h>
-
-#include "unit/print_bronsonavltree_stat.h"
-#include "unit/print_sync_monitor_stat.h"
-
-namespace tree {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_type;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t )
-            {
-                std::cout << t.statistics();
-                std::cout << t.monitor().statistics();
-            }
-        };
-
-        typedef cds::memory::vyukov_queue_pool< std::mutex > simple_pool;
-        typedef cds::memory::lazy_vyukov_queue_pool< std::mutex > lazy_pool;
-        typedef cds::memory::bounded_vyukov_queue_pool< std::mutex > bounded_pool;
-    } // namespace
-#endif
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_sht_pool_monitor_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::sync_monitor< cds::sync::pool_monitor<simple_pool> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_sht_pool_monitor_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,co::sync_monitor< cds::sync::pool_monitor<lazy_pool> >
-                ,cc::bronson_avltree::relaxed_insert< false >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_sht_pool_monitor_cmp_ic_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,co::sync_monitor< cds::sync::pool_monitor<bounded_pool> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_sht_pool_monitor_cmp_ic_stat_yield()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,co::back_off< cds::backoff::yield >
-                ,co::sync_monitor< cds::sync::pool_monitor<lazy_pool> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_sht_pool_monitor_less_relaxed_insert()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,cc::bronson_avltree::relaxed_insert< true >
-                ,co::sync_monitor< cds::sync::pool_monitor<lazy_pool> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-
-    void BronsonAVLTreeHdrTest::BronsonAVLTree_rcu_sht_pool_monitor_less_relaxed_insert_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits: public
-            cc::bronson_avltree::make_traits<
-                co::less< std::less<key_type> >
-                ,co::stat< cc::bronson_avltree::stat<> >
-                ,cc::bronson_avltree::relaxed_insert< true >
-                ,co::sync_monitor< cds::sync::pool_monitor<simple_pool> >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_type, key_type, value_type, traits > map_type;
-        test<map_type, print_stat>();
-#endif
-    }
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_ellenbintree_map.h b/tests/test-hdr/tree/hdr_ellenbintree_map.h
deleted file mode 100644 (file)
index b62589c..0000000
+++ /dev/null
@@ -1,758 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_ELLENBINTREE_MAP_H
-#define CDSTEST_HDR_ELLENBINTREE_MAP_H
-
-#include "cppunit/cppunit_proxy.h"
-#include "size_check.h"
-#include <functional>   // ref
-#include <algorithm>
-
-namespace tree {
-    using misc::check_size;
-
-    class EllenBinTreeMapHdrTest: public CppUnitMini::TestCase
-    {
-    public:
-        typedef int     key_type;
-
-        struct stat_data {
-            size_t  nInsertFuncCall;
-            size_t  nEnsureExistFuncCall;
-            size_t  nEnsureNewFuncCall;
-            size_t  nEraseFuncCall;
-            size_t  nFindFuncCall;
-            size_t  nFindConstFuncCall;
-
-            stat_data()
-                : nInsertFuncCall(0)
-                , nEnsureExistFuncCall(0)
-                , nEnsureNewFuncCall(0)
-                , nEraseFuncCall(0)
-                , nFindFuncCall(0)
-                , nFindConstFuncCall(0)
-            {}
-        };
-
-        struct value_type: public stat_data
-        {
-            int         nVal;
-
-            value_type()
-                : nVal(0)
-            {}
-
-            value_type( int v )
-                : nVal( v )
-            {}
-
-            value_type( value_type const& v )
-                : nVal( v.nVal )
-            {}
-
-            value_type( value_type&& v )
-                : nVal( v.nVal )
-            {}
-
-            value_type& operator=( int n )
-            {
-                nVal = n;
-                return *this;
-            }
-
-            value_type& operator=( value_type const& v )
-            {
-                nVal = v.nVal;
-                return *this;
-            }
-        };
-
-        typedef std::pair<key_type const, value_type> pair_type;
-
-        struct less {
-            bool operator()( int k1, int k2 ) const
-            {
-                return k1 < k2;
-            }
-        };
-
-        struct compare {
-            int cmp( int k1, int k2 ) const
-            {
-                return k1 < k2 ? -1 : (k1 > k2 ? 1 : 0);
-            }
-            int operator()( int k1, int k2 ) const
-            {
-                return cmp( k1, k2 );
-            }
-        };
-
-        struct wrapped_int {
-            int  nKey;
-
-            wrapped_int( int n )
-                : nKey(n)
-            {}
-        };
-
-        struct wrapped_less
-        {
-            bool operator()( wrapped_int const& w, int n ) const
-            {
-                return w.nKey < n;
-            }
-            bool operator()( int n, wrapped_int const& w ) const
-            {
-                return n < w.nKey;
-            }
-            /*
-            template <typename T>
-            bool operator()( wrapped_int const& w, T const& v ) const
-            {
-                return w.nKey < v.nKey;
-            }
-            template <typename T>
-            bool operator()( T const& v, wrapped_int const& w ) const
-            {
-                return v.nKey < w.nKey;
-            }
-            */
-        };
-
-    protected:
-        template <typename Map>
-        struct insert_functor
-        {
-            typedef typename Map::value_type pair_type;
-
-            // insert ftor
-            void operator()( pair_type& item )
-            {
-                item.second.nVal = item.first * 3;
-            }
-
-            // update ftor
-            void operator()( bool bNew, pair_type& item )
-            {
-                if ( bNew )
-                    item.second.nVal = item.first * 2;
-                else
-                    item.second.nVal = item.first * 5;
-            }
-        };
-
-        struct check_value {
-            int     m_nExpected;
-
-            check_value( int nExpected )
-                : m_nExpected( nExpected )
-            {}
-
-            template <typename T>
-            void operator ()( T& pair )
-            {
-                CPPUNIT_ASSERT_CURRENT( pair.second.nVal == m_nExpected );
-            }
-            template <typename T, typename Q>
-            void operator ()( T& pair, Q )
-            {
-                CPPUNIT_ASSERT_CURRENT( pair.second.nVal == m_nExpected );
-            }
-        };
-
-        struct extract_functor
-        {
-            int *   m_pVal;
-            void operator()( pair_type const& val )
-            {
-                *m_pVal = val.second.nVal;
-            }
-        };
-
-    protected:
-        static const size_t c_nItemCount = 10000;
-
-        class data_array
-        {
-            int *     pFirst;
-            int *     pLast;
-
-        public:
-            data_array()
-                : pFirst( new int[c_nItemCount] )
-                , pLast( pFirst + c_nItemCount )
-            {
-                int i = 0;
-                for ( int * p = pFirst; p != pLast; ++p, ++i )
-                    *p = i;
-
-                shuffle( pFirst, pLast );
-            }
-
-            ~data_array()
-            {
-                delete [] pFirst;
-            }
-
-            int operator[]( size_t i ) const
-            {
-                assert( i < size_t(pLast - pFirst) );
-                return pFirst[i];
-            }
-        };
-
-        struct extract_functor2
-        {
-            int nKey;
-
-            template <typename Q>
-            void operator()( Q&, pair_type& v )
-            {
-                nKey = v.first;
-            }
-        };
-
-
-    protected:
-
-        template <class Map>
-        void test_with( Map& m )
-        {
-            std::pair<bool, bool> updateResult;
-
-            // insert
-            CPPUNIT_ASSERT( m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 0 ));
-            CPPUNIT_ASSERT( !m.contains(25) );
-            CPPUNIT_ASSERT( m.insert( 25 ) )    ;   // value = 0
-            CPPUNIT_ASSERT( m.contains(25) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 1 ));
-            CPPUNIT_ASSERT( m.contains(25) );
-
-            CPPUNIT_ASSERT( !m.insert( 25 ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 1 ));
-
-            CPPUNIT_ASSERT( !m.contains(10, less()) );
-            CPPUNIT_ASSERT( m.insert( 10, 10 ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 2 ));
-            CPPUNIT_ASSERT( m.contains(10, less()) );
-
-            CPPUNIT_ASSERT( !m.insert( 10, 20 ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 2 ));
-
-            CPPUNIT_ASSERT( !m.contains(30) );
-            CPPUNIT_ASSERT( m.insert_with( 30, insert_functor<Map>() ) )    ; // value = 90
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-            CPPUNIT_ASSERT( m.contains(30) );
-
-            CPPUNIT_ASSERT( !m.insert_with( 10, insert_functor<Map>() ) );
-            CPPUNIT_ASSERT( !m.insert_with( 25, insert_functor<Map>() ) );
-            CPPUNIT_ASSERT( !m.insert_with( 30, insert_functor<Map>() ) );
-
-            // update (new key)
-            CPPUNIT_ASSERT( !m.contains(27) );
-            updateResult = m.update( 27, insert_functor<Map>(), false ) ;   // value = 54
-            CPPUNIT_ASSERT( !updateResult.first );
-            CPPUNIT_ASSERT( !updateResult.second );
-            CPPUNIT_ASSERT( !m.contains(27) );
-            updateResult = m.update( 27, insert_functor<Map>(), true ) ;   // value = 54
-            CPPUNIT_ASSERT( updateResult.first );
-            CPPUNIT_ASSERT( updateResult.second );
-            CPPUNIT_ASSERT( m.contains(27) );
-
-            // find test
-            check_value chk(10);
-            CPPUNIT_ASSERT( m.find( 10, std::ref(chk) ));
-            chk.m_nExpected = 0;
-            CPPUNIT_ASSERT( m.find_with( 25, less(), std::ref( chk ) ) );
-            chk.m_nExpected = 90;
-            CPPUNIT_ASSERT( m.find( 30, std::ref( chk ) ) );
-            chk.m_nExpected = 54;
-            CPPUNIT_ASSERT( m.find( 27, std::ref( chk ) ) );
-
-            updateResult = m.update( 10, insert_functor<Map>() ) ;   // value = 50
-            CPPUNIT_ASSERT( updateResult.first );
-            CPPUNIT_ASSERT( !updateResult.second );
-            chk.m_nExpected = 50;
-            CPPUNIT_ASSERT( m.find( 10, std::ref( chk ) ) );
-
-            // erase test
-            CPPUNIT_ASSERT( !m.contains(100) );
-            CPPUNIT_ASSERT( !m.erase( 100 )) ;  // not found
-
-            CPPUNIT_ASSERT( m.contains(25) );
-            CPPUNIT_ASSERT( check_size( m, 4 ));
-            CPPUNIT_ASSERT( m.erase( 25 ));
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-            CPPUNIT_ASSERT( !m.contains(25) );
-            CPPUNIT_ASSERT( !m.erase( 25 ));
-
-            CPPUNIT_ASSERT( !m.contains(258) );
-            CPPUNIT_ASSERT( m.insert(258))
-            CPPUNIT_ASSERT( check_size( m, 4 ));
-            CPPUNIT_ASSERT( m.contains(258, less()) );
-            CPPUNIT_ASSERT( m.erase_with( 258, less() ));
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-            CPPUNIT_ASSERT( !m.contains(258) );
-            CPPUNIT_ASSERT( !m.erase_with( 258, less() ));
-
-            int nVal;
-            extract_functor ext;
-            ext.m_pVal = &nVal;
-
-            CPPUNIT_ASSERT( !m.contains(29) );
-            CPPUNIT_ASSERT( m.insert(29, 290));
-            CPPUNIT_ASSERT( check_size( m, 4 ));
-            CPPUNIT_ASSERT( m.erase_with( 29, less(), std::ref( ext ) ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-            CPPUNIT_ASSERT( nVal == 290 );
-            nVal = -1;
-            CPPUNIT_ASSERT( !m.erase_with( 29, less(), std::ref( ext ) ) );
-            CPPUNIT_ASSERT( nVal == -1 );
-
-            CPPUNIT_ASSERT( m.erase( 30, std::ref( ext ) ) );
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 2 ));
-            CPPUNIT_ASSERT( nVal == 90 );
-            nVal = -1;
-            CPPUNIT_ASSERT( !m.erase( 30, std::ref( ext ) ) );
-            CPPUNIT_ASSERT( nVal == -1 );
-
-            m.clear();
-            CPPUNIT_ASSERT( m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 0 ));
-
-            // emplace test
-            CPPUNIT_ASSERT( m.emplace(126) ) ; // key = 126, val = 0
-            CPPUNIT_ASSERT( m.emplace(137, 731))    ;   // key = 137, val = 731
-            CPPUNIT_ASSERT( m.emplace( 149, value_type(941) ))   ;   // key = 149, val = 941
-
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-
-            chk.m_nExpected = 0;
-            CPPUNIT_ASSERT( m.find( 126, std::ref(chk) ));
-            chk.m_nExpected = 731;
-            CPPUNIT_ASSERT( m.find_with( 137, less(), std::ref(chk) ));
-            chk.m_nExpected = 941;
-            CPPUNIT_ASSERT( m.find( 149, std::ref(chk) ));
-
-            CPPUNIT_ASSERT( !m.emplace(126, 621)) ; // already in map
-            chk.m_nExpected = 0;
-            CPPUNIT_ASSERT( m.find( 126, std::ref(chk) ));
-            CPPUNIT_ASSERT( !m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 3 ));
-
-            m.clear();
-            CPPUNIT_ASSERT( m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 0 ));
-        }
-
-        template <typename Map>
-        void fill_map( Map& s, data_array& a )
-        {
-            CPPUNIT_ASSERT( s.empty() );
-            for ( size_t i = 0; i < c_nItemCount; ++i ) {
-                CPPUNIT_ASSERT( s.insert( a[i] ));
-            }
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, c_nItemCount ));
-        }
-
-        template <class Map, class PrintStat>
-        void test()
-        {
-            typedef Map map_type;
-
-            map_type m;
-
-            test_with( m );
-
-            m.clear();
-            CPPUNIT_ASSERT( m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 0 ));
-
-            // extract min/max
-            {
-                typename map_type::guarded_ptr gp;
-
-                data_array arr;
-                fill_map( m, arr );
-
-                int i = 0;
-                std::pair<key_type, value_type> v;
-                while ( !m.empty() ) {
-                    gp = m.extract_min();
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_ASSERT( gp->first == i );
-                    ++i;
-                }
-                CPPUNIT_ASSERT( m.empty() );
-                CPPUNIT_ASSERT( check_size( m, 0 ));
-
-
-                fill_map( m, arr );
-                i = (int) c_nItemCount - 1;
-                while ( !m.empty() ) {
-                    gp = m.extract_max();
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_ASSERT( gp->first == i );
-                    --i;
-                }
-                CPPUNIT_ASSERT( m.empty() );
-                CPPUNIT_ASSERT( check_size( m, 0 ));
-
-                fill_map( m, arr );
-                for ( int i = 0; i < static_cast<int>( c_nItemCount ); ++i ) {
-                    int nKey = arr[i];
-                    gp = m.get( nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->first == nKey );
-
-                    gp = m.extract( nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->first == nKey );
-
-                    gp = m.get( nKey );
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_CHECK( gp.empty());
-                    CPPUNIT_CHECK( !m.extract( nKey ));
-                    CPPUNIT_CHECK( gp.empty());
-                }
-                CPPUNIT_ASSERT( m.empty() );
-                CPPUNIT_ASSERT( check_size( m, 0 ));
-
-                fill_map( m, arr );
-                for ( int i = 0; i < static_cast<int>( c_nItemCount ); ++i ) {
-                    int nKey = arr[i];
-                    gp = m.get_with( wrapped_int( nKey ), wrapped_less() );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->first == nKey );
-
-                    gp = m.extract_with( wrapped_int( nKey ), wrapped_less() );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->first == nKey );
-
-                    gp = m.get_with( wrapped_int( nKey ), wrapped_less() );
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_CHECK( gp.empty());
-                    CPPUNIT_CHECK( !m.extract_with( wrapped_int(nKey), wrapped_less() ));
-                    CPPUNIT_CHECK( gp.empty());
-                }
-
-                CPPUNIT_ASSERT( m.empty() );
-                CPPUNIT_ASSERT( check_size( m, 0 ));
-            }
-
-            PrintStat()( m );
-        }
-
-        template <class Map, class PrintStat>
-        void test_rcu()
-        {
-            typedef Map map_type;
-
-            map_type m;
-
-            test_with( m );
-
-            m.clear();
-            CPPUNIT_ASSERT( m.empty() );
-            CPPUNIT_ASSERT( check_size( m, 0 ));
-
-            // extract min/max
-            {
-                typename map_type::exempt_ptr ep;
-                data_array arr;
-                fill_map( m, arr );
-
-                int i = 0;
-                while ( !m.empty() ) {
-                    ep = m.extract_min();
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty());
-                    CPPUNIT_ASSERT(ep->first == i );
-                    ++i;
-                    //ep.release();
-                }
-                CPPUNIT_ASSERT( m.empty() );
-                CPPUNIT_ASSERT( check_size( m, 0 ));
-                ep = m.extract_min();
-                CPPUNIT_ASSERT( !ep );
-                CPPUNIT_ASSERT( ep.empty());
-
-                fill_map( m, arr );
-                i = (int) c_nItemCount - 1;
-                while ( !m.empty() ) {
-                    ep = m.extract_max();
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty());
-                    CPPUNIT_ASSERT( ep->first == i );
-                    --i;
-                    //ep.release();
-                }
-                CPPUNIT_ASSERT( m.empty() );
-                CPPUNIT_ASSERT( check_size( m, 0 ));
-                ep = m.extract_max();
-                CPPUNIT_ASSERT( !ep );
-                CPPUNIT_ASSERT( ep.empty());
-
-                fill_map( m, arr );
-                for ( size_t i = 0; i < c_nItemCount; ++i ) {
-                    int nKey = arr[i];
-                    {
-                        typename map_type::rcu_lock l;
-                        typename map_type::value_type * pVal = m.get(nKey);
-                        CPPUNIT_ASSERT( pVal != nullptr );
-                        CPPUNIT_CHECK( pVal->first == nKey);
-                    }
-                    ep = m.extract( nKey );
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty());
-                    CPPUNIT_CHECK( ep->first == nKey);
-                    //ep.release();
-
-                    ep = m.extract( nKey );
-                    CPPUNIT_ASSERT( !ep );
-                    CPPUNIT_ASSERT( ep.empty());
-                    {
-                        typename map_type::rcu_lock l;
-                        CPPUNIT_CHECK( !m.get(nKey));
-                    }
-                }
-                CPPUNIT_ASSERT( m.empty() );
-                CPPUNIT_ASSERT( check_size( m, 0 ));
-
-                fill_map( m, arr );
-                for ( size_t i = 0; i < c_nItemCount; ++i ) {
-                    int nKey = arr[i];
-                    {
-                        typename map_type::rcu_lock l;
-                        typename map_type::value_type * pVal = m.get_with(wrapped_int(nKey), wrapped_less());
-                        CPPUNIT_ASSERT( pVal != nullptr );
-                        CPPUNIT_CHECK( pVal->first == nKey);
-                    }
-                    ep = m.extract_with( wrapped_int( nKey ), wrapped_less() );
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty());
-                    CPPUNIT_CHECK( ep->first == nKey);
-                    //ep.release();
-
-                    ep = m.extract_with( wrapped_int( nKey ), wrapped_less() );
-                    CPPUNIT_ASSERT( !ep );
-                    CPPUNIT_ASSERT( ep.empty());
-                    {
-                        typename map_type::rcu_lock l;
-                        CPPUNIT_CHECK( !m.get_with(wrapped_int(nKey), wrapped_less()));
-                    }
-                }
-                CPPUNIT_ASSERT( m.empty() );
-                CPPUNIT_ASSERT( check_size( m, 0 ));
-            }
-
-            PrintStat()( m );
-        }
-
-        void EllenBinTree_hp_less();
-        void EllenBinTree_hp_cmp();
-        void EllenBinTree_hp_cmpless();
-        void EllenBinTree_hp_less_ic();
-        void EllenBinTree_hp_cmp_ic();
-        void EllenBinTree_hp_less_stat();
-        void EllenBinTree_hp_cmp_ic_stat();
-        void EllenBinTree_hp_cmp_ic_stat_yield();
-        void EllenBinTree_hp_less_pool();
-        void EllenBinTree_hp_less_pool_ic_stat();
-
-        void EllenBinTree_dhp_less();
-        void EllenBinTree_dhp_cmp();
-        void EllenBinTree_dhp_cmpless();
-        void EllenBinTree_dhp_less_ic();
-        void EllenBinTree_dhp_cmp_ic();
-        void EllenBinTree_dhp_less_stat();
-        void EllenBinTree_dhp_cmp_ic_stat();
-        void EllenBinTree_dhp_cmp_ic_stat_yield();
-        void EllenBinTree_dhp_less_pool();
-        void EllenBinTree_dhp_less_pool_ic_stat();
-
-        void EllenBinTree_rcu_gpi_less();
-        void EllenBinTree_rcu_gpi_cmp();
-        void EllenBinTree_rcu_gpi_cmpless();
-        void EllenBinTree_rcu_gpi_less_ic();
-        void EllenBinTree_rcu_gpi_cmp_ic();
-        void EllenBinTree_rcu_gpi_less_stat();
-        void EllenBinTree_rcu_gpi_cmp_ic_stat();
-        void EllenBinTree_rcu_gpi_cmp_ic_stat_yield();
-        void EllenBinTree_rcu_gpi_less_pool();
-        void EllenBinTree_rcu_gpi_less_pool_ic_stat();
-
-        void EllenBinTree_rcu_gpb_less();
-        void EllenBinTree_rcu_gpb_cmp();
-        void EllenBinTree_rcu_gpb_cmpless();
-        void EllenBinTree_rcu_gpb_less_ic();
-        void EllenBinTree_rcu_gpb_cmp_ic();
-        void EllenBinTree_rcu_gpb_less_stat();
-        void EllenBinTree_rcu_gpb_cmp_ic_stat();
-        void EllenBinTree_rcu_gpb_cmp_ic_stat_yield();
-        void EllenBinTree_rcu_gpb_less_pool();
-        void EllenBinTree_rcu_gpb_less_pool_ic_stat();
-
-        void EllenBinTree_rcu_gpt_less();
-        void EllenBinTree_rcu_gpt_cmp();
-        void EllenBinTree_rcu_gpt_cmpless();
-        void EllenBinTree_rcu_gpt_less_ic();
-        void EllenBinTree_rcu_gpt_cmp_ic();
-        void EllenBinTree_rcu_gpt_less_stat();
-        void EllenBinTree_rcu_gpt_cmp_ic_stat();
-        void EllenBinTree_rcu_gpt_cmp_ic_stat_yield();
-        void EllenBinTree_rcu_gpt_less_pool();
-        void EllenBinTree_rcu_gpt_less_pool_ic_stat();
-
-        void EllenBinTree_rcu_shb_less();
-        void EllenBinTree_rcu_shb_cmp();
-        void EllenBinTree_rcu_shb_cmpless();
-        void EllenBinTree_rcu_shb_less_ic();
-        void EllenBinTree_rcu_shb_cmp_ic();
-        void EllenBinTree_rcu_shb_less_stat();
-        void EllenBinTree_rcu_shb_cmp_ic_stat();
-        void EllenBinTree_rcu_shb_cmp_ic_stat_yield();
-        void EllenBinTree_rcu_shb_less_pool();
-        void EllenBinTree_rcu_shb_less_pool_ic_stat();
-
-        void EllenBinTree_rcu_sht_less();
-        void EllenBinTree_rcu_sht_cmp();
-        void EllenBinTree_rcu_sht_cmpless();
-        void EllenBinTree_rcu_sht_less_ic();
-        void EllenBinTree_rcu_sht_cmp_ic();
-        void EllenBinTree_rcu_sht_less_stat();
-        void EllenBinTree_rcu_sht_cmp_ic_stat();
-        void EllenBinTree_rcu_sht_cmp_ic_stat_yield();
-        void EllenBinTree_rcu_sht_less_pool();
-        void EllenBinTree_rcu_sht_less_pool_ic_stat();
-
-        CPPUNIT_TEST_SUITE(EllenBinTreeMapHdrTest)
-            CPPUNIT_TEST(EllenBinTree_hp_less)
-            CPPUNIT_TEST(EllenBinTree_hp_cmp)
-            CPPUNIT_TEST(EllenBinTree_hp_less_stat)
-            CPPUNIT_TEST(EllenBinTree_hp_cmpless)
-            CPPUNIT_TEST(EllenBinTree_hp_less_ic)
-            CPPUNIT_TEST(EllenBinTree_hp_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_hp_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_hp_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_hp_less_pool )
-            CPPUNIT_TEST(EllenBinTree_hp_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_dhp_less)
-            CPPUNIT_TEST(EllenBinTree_dhp_cmp)
-            CPPUNIT_TEST(EllenBinTree_dhp_less_stat)
-            CPPUNIT_TEST(EllenBinTree_dhp_cmpless)
-            CPPUNIT_TEST(EllenBinTree_dhp_less_ic)
-            CPPUNIT_TEST(EllenBinTree_dhp_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_dhp_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_dhp_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_dhp_less_pool )
-            CPPUNIT_TEST(EllenBinTree_dhp_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_less)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_cmp)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_less_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_cmpless)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_less_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_rcu_gpi_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_rcu_gpi_less_pool )
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_less)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_cmp)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_less_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_cmpless)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_less_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_rcu_gpb_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_rcu_gpb_less_pool )
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_less)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_cmp)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_less_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_cmpless)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_less_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_rcu_gpt_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_rcu_gpt_less_pool )
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_less)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_cmp)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_less_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_cmpless)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_less_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_rcu_shb_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_rcu_shb_less_pool )
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_less)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_cmp)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_less_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_cmpless)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_less_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_rcu_sht_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_rcu_sht_less_pool )
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_less_pool_ic_stat)
-
-            CPPUNIT_TEST_SUITE_END()
-
-    };
-} // namespace tree
-
-#endif // #ifndef CDSTEST_HDR_ELLENBINTREE_MAP_H
diff --git a/tests/test-hdr/tree/hdr_ellenbintree_map_dhp.cpp b/tests/test-hdr/tree/hdr_ellenbintree_map_dhp.cpp
deleted file mode 100644 (file)
index 5536b7c..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_ellenbintree_map.h"
-#include <cds/container/ellen_bintree_map_dhp.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_dhp.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::gc::DHP gc_type;
-
-        typedef cc::ellen_bintree::map_node<gc_type, EllenBinTreeMapHdrTest::key_type, EllenBinTreeMapHdrTest::value_type>  tree_leaf_node;
-        typedef cc::ellen_bintree::internal_node< EllenBinTreeMapHdrTest::key_type, tree_leaf_node >                        tree_internal_node;
-        typedef cc::ellen_bintree::update_desc<tree_leaf_node, tree_internal_node>                                          tree_update_desc;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_dhp_less()
-    {
-        struct map_traits : public cc::ellen_bintree::traits
-        {
-            typedef EllenBinTreeMapHdrTest::less less;
-        };
-        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type, map_traits > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_dhp_cmp()
-    {
-        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::compare< compare >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_dhp_cmpless()
-    {
-        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::compare< compare >
-                ,co::less< less >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_dhp_less_ic()
-    {
-        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_dhp_cmp_ic()
-    {
-        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_dhp_less_stat()
-    {
-        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_dhp_cmp_ic_stat()
-    {
-        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_dhp_cmp_ic_stat_yield()
-    {
-        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-                , co::back_off< cds::backoff::yield >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_dhp_less_pool()
-    {
-        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_dhp::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_dhp::update_desc_pool_accessor > >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_dhp_less_pool_ic_stat()
-    {
-        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_dhp::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_dhp::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_ellenbintree_map_hp.cpp b/tests/test-hdr/tree/hdr_ellenbintree_map_hp.cpp
deleted file mode 100644 (file)
index b6a3bce..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_ellenbintree_map.h"
-#include <cds/container/ellen_bintree_map_hp.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_hp.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::gc::HP gc_type;
-
-        typedef cc::ellen_bintree::map_node<gc_type, EllenBinTreeMapHdrTest::key_type, EllenBinTreeMapHdrTest::value_type>  tree_leaf_node;
-        typedef cc::ellen_bintree::internal_node< EllenBinTreeMapHdrTest::key_type, tree_leaf_node >                        tree_internal_node;
-        typedef cc::ellen_bintree::update_desc<tree_leaf_node, tree_internal_node>                                          tree_update_desc;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_hp_less()
-    {
-        struct set_traits : public cc::ellen_bintree::traits
-        {
-            typedef EllenBinTreeMapHdrTest::less less;
-        };
-        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type, set_traits > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_hp_cmp()
-    {
-        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::compare< compare >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_hp_cmpless()
-    {
-        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::compare< compare >
-                ,co::less< less >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_hp_less_ic()
-    {
-        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_hp_cmp_ic()
-    {
-        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_hp_less_stat()
-    {
-        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_hp_cmp_ic_stat()
-    {
-        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_hp_cmp_ic_stat_yield()
-    {
-        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-                , co::back_off< cds::backoff::yield >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_hp_less_pool()
-    {
-        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_hp::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_hp::update_desc_pool_accessor > >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_hp_less_pool_ic_stat()
-    {
-        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_hp::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_hp::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_ellenbintree_map_rcu_gpb.cpp b/tests/test-hdr/tree/hdr_ellenbintree_map_rcu_gpb.cpp
deleted file mode 100644 (file)
index dbf2730..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_ellenbintree_map.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/container/ellen_bintree_map_rcu.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_type;
-
-        typedef cc::ellen_bintree::map_node<rcu_type, EllenBinTreeMapHdrTest::key_type, EllenBinTreeMapHdrTest::value_type> tree_leaf_node;
-        typedef cc::ellen_bintree::internal_node< EllenBinTreeMapHdrTest::key_type, tree_leaf_node >                        tree_internal_node;
-        typedef cc::ellen_bintree::update_desc<tree_leaf_node, tree_internal_node>                                          tree_update_desc;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpb_less()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-            >::type
-        > map_type;
-
-        test_rcu<map_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpb_cmp()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::compare< compare >
-            >::type
-        > map_type;
-
-        test_rcu<map_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpb_cmpless()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::compare< compare >
-                ,co::less< less >
-            >::type
-        > map_type;
-
-        test_rcu<map_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpb_less_ic()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > map_type;
-
-        test_rcu<map_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpb_cmp_ic()
-    {
-        struct map_traits : public cc::ellen_bintree::traits {
-            typedef cds::atomicity::item_counter item_counter;
-            typedef EllenBinTreeMapHdrTest::compare compare;
-        };
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type, map_traits > map_type;
-
-        test_rcu<map_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpb_less_stat()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > map_type;
-
-        test_rcu<map_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpb_cmp_ic_stat()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-            >::type
-        > map_type;
-
-        test_rcu<map_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpb_cmp_ic_stat_yield()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-                , co::back_off< cds::backoff::yield >
-            >::type
-        > map_type;
-
-        test_rcu<map_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpb_less_pool()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-            >::type
-        > map_type;
-
-        test_rcu<map_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpb_less_pool_ic_stat()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > map_type;
-
-        test_rcu<map_type, print_stat>();
-    }
-
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_ellenbintree_map_rcu_gpi.cpp b/tests/test-hdr/tree/hdr_ellenbintree_map_rcu_gpi.cpp
deleted file mode 100644 (file)
index b5ef0f2..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_ellenbintree_map.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/container/ellen_bintree_map_rcu.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
-
-        typedef cc::ellen_bintree::map_node<rcu_type, EllenBinTreeMapHdrTest::key_type, EllenBinTreeMapHdrTest::value_type> tree_leaf_node;
-        typedef cc::ellen_bintree::internal_node< EllenBinTreeMapHdrTest::key_type, tree_leaf_node >                        tree_internal_node;
-        typedef cc::ellen_bintree::update_desc<tree_leaf_node, tree_internal_node>                                          tree_update_desc;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpi_less()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpi_cmp()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpi_cmpless()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::compare< compare >
-                ,co::less< less >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpi_less_ic()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpi_cmp_ic()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpi_less_stat()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpi_cmp_ic_stat()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpi_cmp_ic_stat_yield()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-                , co::back_off< cds::backoff::yield >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpi_less_pool()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpi_less_pool_ic_stat()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_ellenbintree_map_rcu_gpt.cpp b/tests/test-hdr/tree/hdr_ellenbintree_map_rcu_gpt.cpp
deleted file mode 100644 (file)
index 314dc67..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_ellenbintree_map.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/container/ellen_bintree_map_rcu.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_type;
-
-        typedef cc::ellen_bintree::map_node<rcu_type, EllenBinTreeMapHdrTest::key_type, EllenBinTreeMapHdrTest::value_type> tree_leaf_node;
-        typedef cc::ellen_bintree::internal_node< EllenBinTreeMapHdrTest::key_type, tree_leaf_node >                        tree_internal_node;
-        typedef cc::ellen_bintree::update_desc<tree_leaf_node, tree_internal_node>                                          tree_update_desc;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpt_less()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpt_cmp()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpt_cmpless()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::compare< compare >
-                ,co::less< less >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpt_less_ic()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpt_cmp_ic()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpt_less_stat()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpt_cmp_ic_stat()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpt_cmp_ic_stat_yield()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-                , co::back_off< cds::backoff::yield >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpt_less_pool()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpt_less_pool_ic_stat()
-    {
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_ellenbintree_map_rcu_shb.cpp b/tests/test-hdr/tree/hdr_ellenbintree_map_rcu_shb.cpp
deleted file mode 100644 (file)
index 745eb63..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_ellenbintree_map.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/container/ellen_bintree_map_rcu.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_type;
-
-        typedef cc::ellen_bintree::map_node<rcu_type, EllenBinTreeMapHdrTest::key_type, EllenBinTreeMapHdrTest::value_type> tree_leaf_node;
-        typedef cc::ellen_bintree::internal_node< EllenBinTreeMapHdrTest::key_type, tree_leaf_node >                        tree_internal_node;
-        typedef cc::ellen_bintree::update_desc<tree_leaf_node, tree_internal_node>                                          tree_update_desc;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-    }
-#endif
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_shb_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_shb_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_shb_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::compare< compare >
-                ,co::less< less >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_shb_less_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_shb_cmp_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_shb_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_shb_cmp_ic_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_shb_cmp_ic_stat_yield()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-                , co::back_off< cds::backoff::yield >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_shb_less_pool()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_shb_less_pool_ic_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_ellenbintree_map_rcu_sht.cpp b/tests/test-hdr/tree/hdr_ellenbintree_map_rcu_sht.cpp
deleted file mode 100644 (file)
index 78b621c..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_ellenbintree_map.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/container/ellen_bintree_map_rcu.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_type;
-
-        typedef cc::ellen_bintree::map_node<rcu_type, EllenBinTreeMapHdrTest::key_type, EllenBinTreeMapHdrTest::value_type> tree_leaf_node;
-        typedef cc::ellen_bintree::internal_node< EllenBinTreeMapHdrTest::key_type, tree_leaf_node >                        tree_internal_node;
-        typedef cc::ellen_bintree::update_desc<tree_leaf_node, tree_internal_node>                                          tree_update_desc;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-    }
-#endif
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_sht_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_sht_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_sht_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::compare< compare >
-                ,co::less< less >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_sht_less_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_sht_cmp_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_sht_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_sht_cmp_ic_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_sht_cmp_ic_stat_yield()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-                , co::back_off< cds::backoff::yield >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_sht_less_pool()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_sht_less_pool_ic_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_map_traits<
-                co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_ellenbintree_set.h b/tests/test-hdr/tree/hdr_ellenbintree_set.h
deleted file mode 100644 (file)
index 6f55d6d..0000000
+++ /dev/null
@@ -1,855 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_ELLENBINTREE_SET_H
-#define CDSTEST_HDR_ELLENBINTREE_SET_H
-
-#include "cppunit/cppunit_proxy.h"
-#include "size_check.h"
-#include <functional>   // ref
-#include <algorithm>
-
-namespace tree {
-    using misc::check_size;
-
-    class EllenBinTreeSetHdrTest: public CppUnitMini::TestCase
-    {
-    public:
-        typedef int     key_type;
-
-        struct stat_data {
-            size_t  nInsertFuncCall;
-            size_t  nEnsureExistFuncCall;
-            size_t  nEnsureNewFuncCall;
-            size_t  nEraseFuncCall;
-            size_t  nFindFuncCall;
-            size_t  nFindConstFuncCall;
-
-            stat_data()
-                : nInsertFuncCall(0)
-                , nEnsureExistFuncCall(0)
-                , nEnsureNewFuncCall(0)
-                , nEraseFuncCall(0)
-                , nFindFuncCall(0)
-                , nFindConstFuncCall(0)
-            {}
-        };
-
-        struct value_type {
-            key_type    nKey;
-            int         nVal;
-
-            stat_data   stat;
-
-            value_type()
-            {}
-
-            value_type( int key )
-                : nKey( key )
-                , nVal( key * 10 )
-            {}
-
-            value_type( int key, int v )
-                : nKey( key )
-                , nVal( v )
-            {}
-
-            value_type( std::pair<int,int> const& p )
-                : nKey( p.first )
-                , nVal( p.second )
-            {}
-        };
-
-        struct key_extractor {
-            void operator()( key_type& dest, value_type const& src ) const
-            {
-                dest = src.nKey;
-            }
-        };
-
-        struct less {
-            bool operator()( int k1, int k2 ) const
-            {
-                return k1 < k2;
-            }
-            bool operator()( value_type const& v1, value_type const& v2 ) const
-            {
-                return v1.nKey < v2.nKey;
-            }
-            bool operator()( value_type const& v, int k ) const
-            {
-                return v.nKey < k;
-            }
-            bool operator()( int k, value_type const& v ) const
-            {
-                return k < v.nKey;
-            }
-            bool operator()( std::pair<int,int> const& p, value_type& v ) const
-            {
-                return p.first < v.nKey;
-            }
-            bool operator()( value_type& v, std::pair<int,int> const& p ) const
-            {
-                return v.nKey < p.first;
-            }
-            bool operator()( std::pair<int,int> const& p, int v ) const
-            {
-                return p.first < v;
-            }
-            bool operator()( int v, std::pair<int,int> const& p ) const
-            {
-                return v < p.first;
-            }
-        };
-
-        struct compare {
-            int cmp( int k1, int k2 ) const
-            {
-                return k1 < k2 ? -1 : (k1 > k2 ? 1 : 0);
-            }
-            int operator()( int k1, int k2 ) const
-            {
-                return cmp( k1, k2 );
-            }
-            int operator()( value_type const& v1, value_type const& v2 ) const
-            {
-                return cmp( v1.nKey, v2.nKey );
-            }
-            int operator()( value_type const& v, int k ) const
-            {
-                return cmp( v.nKey, k );
-            }
-            int operator()( int k, value_type const& v ) const
-            {
-                return cmp( k, v.nKey );
-            }
-            int operator()( std::pair<int,int> const& p, value_type& v ) const
-            {
-                return cmp( p.first, v.nKey );
-            }
-            int operator()( value_type& v, std::pair<int,int> const& p ) const
-            {
-                return cmp( v.nKey, p.first );
-            }
-            int operator()( std::pair<int,int> const& p, int v ) const
-            {
-                return cmp( p.first, v );
-            }
-            int operator()( int v, std::pair<int,int> const& p ) const
-            {
-                return cmp( v, p.first );
-            }
-        };
-
-        struct wrapped_int {
-            int  nKey;
-
-            wrapped_int( int n )
-                : nKey(n)
-            {}
-        };
-
-        struct wrapped_less
-        {
-            bool operator()( wrapped_int const& w, int n ) const
-            {
-                return w.nKey < n;
-            }
-            bool operator()( int n, wrapped_int const& w ) const
-            {
-                return n < w.nKey;
-            }
-            template <typename T>
-            bool operator()( wrapped_int const& w, T const& v ) const
-            {
-                return w.nKey < v.nKey;
-            }
-            template <typename T>
-            bool operator()( T const& v, wrapped_int const& w ) const
-            {
-                return v.nKey < w.nKey;
-            }
-        };
-
-    protected:
-        static const size_t c_nItemCount = 10000;
-
-        class data_array
-        {
-            int *     pFirst;
-            int *     pLast;
-
-        public:
-            data_array()
-                : pFirst( new int[c_nItemCount] )
-                , pLast( pFirst + c_nItemCount )
-            {
-                int i = 0;
-                for ( int * p = pFirst; p != pLast; ++p, ++i )
-                    *p = i;
-
-                shuffle( pFirst, pLast );
-            }
-
-            ~data_array()
-            {
-                delete [] pFirst;
-            }
-
-            int operator[]( size_t i ) const
-            {
-                assert( i < size_t(pLast - pFirst) );
-                return pFirst[i];
-            }
-        };
-
-        struct find_functor
-        {
-            template <typename T>
-            void operator()( value_type& i, T& /*val*/ )
-            {
-                ++i.stat.nFindFuncCall;
-            }
-            template <typename T>
-            void operator()( value_type& i, T const& /*val*/ )
-            {
-                ++i.stat.nFindConstFuncCall;
-            }
-        };
-
-        template <typename Item>
-        struct copy_found
-        {
-            Item    m_found;
-
-            template <typename T>
-            void operator()( Item& i, T& /*val*/ )
-            {
-                m_found = i;
-            }
-
-            void operator()( Item const& i )
-            {
-                m_found = i;
-            }
-        };
-
-        struct insert_functor
-        {
-            template <typename Item>
-            void operator()(Item& i )
-            {
-                i.nVal = i.nKey * 100;
-                ++i.stat.nInsertFuncCall;
-            }
-        };
-
-        template <typename Q>
-        static void ensure_func( bool bNew, value_type& i, Q& /*val*/ )
-        {
-            if ( bNew )
-                ++i.stat.nEnsureNewFuncCall;
-            else
-                ++i.stat.nEnsureExistFuncCall;
-        }
-
-        struct update_functor
-        {
-            template <typename Q>
-            void operator()( bool bNew, value_type& i, Q& val )
-            {
-                ensure_func( bNew, i, val );
-            }
-        };
-
-        struct extract_functor
-        {
-            int nKey;
-
-            template <typename Q>
-            void operator()( Q&, value_type& v )
-            {
-                nKey = v.nKey;
-            }
-        };
-
-
-    protected:
-        template <class Set>
-        void test_with( Set& s)
-        {
-            value_type itm;
-            int key;
-
-            // insert/find test
-            CPPUNIT_ASSERT( !s.contains( 10 ) );
-            CPPUNIT_ASSERT( s.insert( 10 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-            CPPUNIT_ASSERT( s.contains( 10 ) );
-
-            CPPUNIT_ASSERT( !s.insert( 10 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-
-            CPPUNIT_ASSERT( !s.contains( 20, less() ) );
-            CPPUNIT_ASSERT( s.insert( std::make_pair(20, 25) ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-            CPPUNIT_ASSERT( s.contains( 10, less() ) );
-            CPPUNIT_ASSERT( s.contains( key = 20 ) );
-            CPPUNIT_ASSERT( s.find_with( key, less(), find_functor() ) );
-            {
-                copy_found<value_type> f;
-                f.m_found.nKey = 0;
-                key = 20;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 20 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 25 );
-                CPPUNIT_ASSERT( f.m_found.stat.nFindFuncCall == 1 );
-                CPPUNIT_ASSERT( f.m_found.stat.nFindConstFuncCall == 0 );
-            }
-            CPPUNIT_ASSERT( s.find( key, find_functor() ) );
-            {
-                copy_found<value_type> f;
-                f.m_found.nKey = 0;
-                key = 20;
-                CPPUNIT_ASSERT( s.find_with( key, less(), std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 20 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 25 );
-                CPPUNIT_ASSERT( f.m_found.stat.nFindFuncCall == 2 );
-                CPPUNIT_ASSERT( f.m_found.stat.nFindConstFuncCall == 0 );
-            }
-            CPPUNIT_ASSERT( s.find( 20, find_functor() ) );
-            {
-                copy_found<value_type> f;
-                f.m_found.nKey = 0;
-                CPPUNIT_ASSERT( s.find_with( 20, less(), std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 20 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 25 );
-                CPPUNIT_ASSERT( f.m_found.stat.nFindFuncCall == 2 );
-                CPPUNIT_ASSERT( f.m_found.stat.nFindConstFuncCall == 1 );
-            }
-
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-
-            CPPUNIT_ASSERT( !s.contains( 25 ) );
-            CPPUNIT_ASSERT( s.insert( std::make_pair(25, -1), insert_functor() ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-            {
-                copy_found<value_type> f;
-                f.m_found.nKey = 0;
-                key = 25;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 25 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 2500 );
-                CPPUNIT_ASSERT( f.m_found.stat.nInsertFuncCall == 1 );
-            }
-
-            // update test
-            key = 10;
-            {
-                copy_found<value_type> f;
-                f.m_found.nKey = 0;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 10 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 100 );
-                CPPUNIT_ASSERT( f.m_found.stat.nEnsureExistFuncCall == 0 );
-                CPPUNIT_ASSERT( f.m_found.stat.nEnsureNewFuncCall == 0 );
-            }
-            std::pair<bool, bool> updateResult = s.update( key, update_functor(), false );
-            CPPUNIT_ASSERT( updateResult.first && !updateResult.second );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-            {
-                copy_found<value_type> f;
-                f.m_found.nKey = 0;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 10 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 100 );
-                CPPUNIT_ASSERT( f.m_found.stat.nEnsureExistFuncCall == 1 );
-                CPPUNIT_ASSERT( f.m_found.stat.nEnsureNewFuncCall == 0 );
-            }
-
-            updateResult = s.update( std::make_pair(13, 1300), update_functor(), false );
-            CPPUNIT_ASSERT( !updateResult.first && !updateResult.second );
-            updateResult = s.update( std::make_pair(13, 1300), update_functor());
-            CPPUNIT_ASSERT( updateResult.first && updateResult.second );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 4 ));
-            {
-                copy_found<value_type> f;
-                f.m_found.nKey = 0;
-                key = 13;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 13 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 1300 );
-                CPPUNIT_ASSERT( f.m_found.stat.nEnsureExistFuncCall == 0 );
-                CPPUNIT_ASSERT( f.m_found.stat.nEnsureNewFuncCall == 1 );
-            }
-
-            // erase test
-            CPPUNIT_ASSERT( s.erase(13) );
-            CPPUNIT_ASSERT( !s.contains( 13 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-            CPPUNIT_ASSERT( !s.erase(13) );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-
-            CPPUNIT_ASSERT( s.contains( 10 ));
-            CPPUNIT_ASSERT( s.erase_with( 10, less() ));
-            CPPUNIT_ASSERT( !s.contains( 10 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-            CPPUNIT_ASSERT( !s.erase_with(10, less()) );
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 2 ));
-
-            CPPUNIT_ASSERT( s.contains(20) );
-            {
-                copy_found<value_type> f;
-                f.m_found.nKey = 0;
-                CPPUNIT_ASSERT( s.erase( 20, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 20 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 25 );
-
-                CPPUNIT_ASSERT( s.insert(235))
-                CPPUNIT_ASSERT( s.erase_with( 235, less(), std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 235 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 2350 );
-            }
-            CPPUNIT_ASSERT( !s.contains( 20 ));
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 1 ));
-
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-
-            // emplace test
-            CPPUNIT_ASSERT( s.emplace( 151 )) ;  // key = 151,  val = 1510
-            CPPUNIT_ASSERT( s.emplace( 174, 471 )) ;    // key = 174, val = 471
-            CPPUNIT_ASSERT( s.emplace( std::make_pair( 190, 91 ) )) ; // key == 190, val = 91
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 3 ));
-
-            CPPUNIT_ASSERT( s.contains(151));
-            CPPUNIT_ASSERT( s.contains(174, less()));
-            CPPUNIT_ASSERT( s.contains(190));
-
-            {
-                copy_found<value_type> f;
-                f.m_found.nKey = 0;
-                key = 151;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 151 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 1510 );
-
-                key = 174;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 174 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 471 );
-
-                key = 190;
-                CPPUNIT_ASSERT( s.find( key, std::ref( f ) ) );
-                CPPUNIT_ASSERT( f.m_found.nKey == 190 );
-                CPPUNIT_ASSERT( f.m_found.nVal == 91 );
-            }
-
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-        }
-
-        template <typename Set>
-        void fill_set( Set& s, data_array& a )
-        {
-            CPPUNIT_ASSERT( s.empty() );
-            for ( size_t i = 0; i < c_nItemCount; ++i ) {
-                CPPUNIT_ASSERT( s.insert( a[i] ));
-            }
-            CPPUNIT_ASSERT( !s.empty() );
-            CPPUNIT_ASSERT( check_size( s, c_nItemCount ));
-
-        }
-
-        template <class Set, class PrintStat>
-        void test()
-        {
-            typedef Set set_type;
-
-            set_type s;
-
-            test_with( s );
-
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-
-            // extract min/max
-            {
-                typename Set::guarded_ptr gp;
-
-                data_array arr;
-                fill_set( s, arr );
-
-                int i = 0;
-                while ( !s.empty() ) {
-                    gp = s.extract_min();
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( gp->nKey == i );
-                    ++i;
-                }
-                CPPUNIT_ASSERT( s.empty() );
-                CPPUNIT_ASSERT( check_size( s, 0 ));
-
-                fill_set( s, arr );
-                i = (int) c_nItemCount - 1;
-                while ( !s.empty() ) {
-                    gp = s.extract_max();
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( gp->nKey == i );
-                    --i;
-                }
-                CPPUNIT_ASSERT( s.empty() );
-                CPPUNIT_ASSERT( check_size( s, 0 ));
-
-                fill_set( s, arr );
-                for ( int i = 0; i < static_cast<int>( c_nItemCount ); ++i ) {
-                    int nKey = arr[i];
-                    gp = s.get( nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-
-                    gp = s.extract( nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-
-                    gp = s.get( nKey );
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_CHECK( gp.empty());
-                    CPPUNIT_CHECK( !s.extract( nKey ));
-                    CPPUNIT_CHECK( gp.empty());
-                }
-                CPPUNIT_ASSERT( s.empty() );
-                CPPUNIT_ASSERT( check_size( s, 0 ));
-
-                fill_set( s, arr );
-                for ( int i = 0; i < static_cast<int>( c_nItemCount ); ++i ) {
-                    int nKey = arr[i];
-                    gp = s.get_with( wrapped_int( nKey ), wrapped_less() );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-
-                    gp = s.extract_with( wrapped_int( nKey ), wrapped_less() );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == nKey );
-
-                    gp = s.get_with( wrapped_int( nKey ), wrapped_less() );
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_CHECK( gp.empty());
-                    CPPUNIT_CHECK( !s.extract_with( wrapped_int(nKey), wrapped_less() ));
-                    CPPUNIT_CHECK( gp.empty());
-                }
-                CPPUNIT_ASSERT( s.empty() );
-                CPPUNIT_ASSERT( check_size( s, 0 ));
-            }
-
-            PrintStat()( s );
-        }
-
-        template <class Set, class PrintStat>
-        void test_rcu()
-        {
-            typedef Set set_type;
-
-            set_type s;
-
-            test_with( s );
-
-            s.clear();
-            CPPUNIT_ASSERT( s.empty() );
-            CPPUNIT_ASSERT( check_size( s, 0 ));
-
-            // extract min/max
-            {
-                typename set_type::exempt_ptr ep;
-                data_array arr;
-                fill_set( s, arr );
-
-                int i = 0;
-                value_type v;
-                while ( !s.empty() ) {
-                    ep = s.extract_min();
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty());
-                    CPPUNIT_CHECK( ep->nKey == i );
-                    ++i;
-                    //ep.release();
-                }
-                ep.release();
-                CPPUNIT_ASSERT( s.empty() );
-                CPPUNIT_ASSERT( check_size( s, 0 ));
-
-                fill_set( s, arr );
-                i = (int) c_nItemCount - 1;
-                while ( !s.empty() ) {
-                    ep = s.extract_max();
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty());
-                    CPPUNIT_CHECK( ep->nKey == i );
-                    --i;
-                    //ep.release();
-                }
-                ep.release();
-                CPPUNIT_ASSERT( s.empty() );
-                CPPUNIT_ASSERT( check_size( s, 0 ));
-
-                fill_set( s, arr );
-                for ( size_t i = 0; i < c_nItemCount; ++i ) {
-                    int nKey = arr[i];
-                    {
-                        typename set_type::rcu_lock l;
-                        value_type * p = s.get( nKey );
-                        CPPUNIT_ASSERT( p != nullptr );
-                        CPPUNIT_CHECK( p->nKey == nKey );
-                    }
-                    ep = s.extract( nKey );
-                    CPPUNIT_ASSERT( !ep.empty());
-                    CPPUNIT_CHECK( ep->nKey == nKey);
-                    //ep.release();
-
-                    {
-                        typename set_type::rcu_lock l;
-                        CPPUNIT_CHECK( s.get( nKey ) == nullptr );
-                    }
-                    ep = s.extract( nKey );
-                    CPPUNIT_CHECK( !ep );
-                }
-                CPPUNIT_ASSERT( s.empty() );
-                CPPUNIT_ASSERT( check_size( s, 0 ));
-
-                fill_set( s, arr );
-                for ( size_t i = 0; i < c_nItemCount; ++i ) {
-                    int nKey = arr[i];
-                    {
-                        typename set_type::rcu_lock l;
-                        value_type * p = s.get_with( wrapped_int(nKey), wrapped_less() );
-                        CPPUNIT_ASSERT( p != nullptr );
-                        CPPUNIT_CHECK( p->nKey == nKey );
-                    }
-                    ep = s.extract_with( wrapped_int( nKey ), wrapped_less() );
-                    CPPUNIT_ASSERT( ep );
-                    CPPUNIT_ASSERT( !ep.empty());
-                    CPPUNIT_CHECK( ep->nKey == nKey);
-                    //ep.release();
-
-                    {
-                        typename set_type::rcu_lock l;
-                        CPPUNIT_CHECK( s.get_with( wrapped_int( nKey ), wrapped_less() ) == nullptr );
-                    }
-                    ep = s.extract_with( wrapped_int( nKey ), wrapped_less() );
-                    CPPUNIT_CHECK( !ep );
-                }
-                CPPUNIT_ASSERT( s.empty() );
-                CPPUNIT_ASSERT( check_size( s, 0 ));
-
-            }
-
-            PrintStat()( s );
-        }
-
-        void EllenBinTree_hp_less();
-        void EllenBinTree_hp_cmp();
-        void EllenBinTree_hp_cmpless();
-        void EllenBinTree_hp_less_ic();
-        void EllenBinTree_hp_cmp_ic();
-        void EllenBinTree_hp_less_stat();
-        void EllenBinTree_hp_cmp_ic_stat();
-        void EllenBinTree_hp_cmp_ic_stat_yield();
-        void EllenBinTree_hp_less_pool();
-        void EllenBinTree_hp_less_pool_ic_stat();
-
-        void EllenBinTree_dhp_less();
-        void EllenBinTree_dhp_cmp();
-        void EllenBinTree_dhp_cmpless();
-        void EllenBinTree_dhp_less_ic();
-        void EllenBinTree_dhp_cmp_ic();
-        void EllenBinTree_dhp_less_stat();
-        void EllenBinTree_dhp_cmp_ic_stat();
-        void EllenBinTree_dhp_cmp_ic_stat_yield();
-        void EllenBinTree_dhp_less_pool();
-        void EllenBinTree_dhp_less_pool_ic_stat();
-
-        void EllenBinTree_rcu_gpi_less();
-        void EllenBinTree_rcu_gpi_cmp();
-        void EllenBinTree_rcu_gpi_cmpless();
-        void EllenBinTree_rcu_gpi_less_ic();
-        void EllenBinTree_rcu_gpi_cmp_ic();
-        void EllenBinTree_rcu_gpi_less_stat();
-        void EllenBinTree_rcu_gpi_cmp_ic_stat();
-        void EllenBinTree_rcu_gpi_cmp_ic_stat_yield();
-        void EllenBinTree_rcu_gpi_less_pool();
-        void EllenBinTree_rcu_gpi_less_pool_ic_stat();
-
-        void EllenBinTree_rcu_gpb_less();
-        void EllenBinTree_rcu_gpb_cmp();
-        void EllenBinTree_rcu_gpb_cmpless();
-        void EllenBinTree_rcu_gpb_less_ic();
-        void EllenBinTree_rcu_gpb_cmp_ic();
-        void EllenBinTree_rcu_gpb_less_stat();
-        void EllenBinTree_rcu_gpb_cmp_ic_stat();
-        void EllenBinTree_rcu_gpb_cmp_ic_stat_yield();
-        void EllenBinTree_rcu_gpb_less_pool();
-        void EllenBinTree_rcu_gpb_less_pool_ic_stat();
-
-        void EllenBinTree_rcu_gpt_less();
-        void EllenBinTree_rcu_gpt_cmp();
-        void EllenBinTree_rcu_gpt_cmpless();
-        void EllenBinTree_rcu_gpt_less_ic();
-        void EllenBinTree_rcu_gpt_cmp_ic();
-        void EllenBinTree_rcu_gpt_less_stat();
-        void EllenBinTree_rcu_gpt_cmp_ic_stat();
-        void EllenBinTree_rcu_gpt_cmp_ic_stat_yield();
-        void EllenBinTree_rcu_gpt_less_pool();
-        void EllenBinTree_rcu_gpt_less_pool_ic_stat();
-
-        void EllenBinTree_rcu_shb_less();
-        void EllenBinTree_rcu_shb_cmp();
-        void EllenBinTree_rcu_shb_cmpless();
-        void EllenBinTree_rcu_shb_less_ic();
-        void EllenBinTree_rcu_shb_cmp_ic();
-        void EllenBinTree_rcu_shb_less_stat();
-        void EllenBinTree_rcu_shb_cmp_ic_stat();
-        void EllenBinTree_rcu_shb_cmp_ic_stat_yield();
-        void EllenBinTree_rcu_shb_less_pool();
-        void EllenBinTree_rcu_shb_less_pool_ic_stat();
-
-        void EllenBinTree_rcu_sht_less();
-        void EllenBinTree_rcu_sht_cmp();
-        void EllenBinTree_rcu_sht_cmpless();
-        void EllenBinTree_rcu_sht_less_ic();
-        void EllenBinTree_rcu_sht_cmp_ic();
-        void EllenBinTree_rcu_sht_less_stat();
-        void EllenBinTree_rcu_sht_cmp_ic_stat();
-        void EllenBinTree_rcu_sht_cmp_ic_stat_yield();
-        void EllenBinTree_rcu_sht_less_pool();
-        void EllenBinTree_rcu_sht_less_pool_ic_stat();
-
-        CPPUNIT_TEST_SUITE(EllenBinTreeSetHdrTest)
-            CPPUNIT_TEST(EllenBinTree_hp_less)
-            CPPUNIT_TEST(EllenBinTree_hp_cmp)
-            CPPUNIT_TEST(EllenBinTree_hp_less_stat)
-            CPPUNIT_TEST(EllenBinTree_hp_cmpless)
-            CPPUNIT_TEST(EllenBinTree_hp_less_ic)
-            CPPUNIT_TEST(EllenBinTree_hp_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_hp_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_hp_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_hp_less_pool )
-            CPPUNIT_TEST(EllenBinTree_hp_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_dhp_less)
-            CPPUNIT_TEST(EllenBinTree_dhp_cmp)
-            CPPUNIT_TEST(EllenBinTree_dhp_less_stat)
-            CPPUNIT_TEST(EllenBinTree_dhp_cmpless)
-            CPPUNIT_TEST(EllenBinTree_dhp_less_ic)
-            CPPUNIT_TEST(EllenBinTree_dhp_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_dhp_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_dhp_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_dhp_less_pool )
-            CPPUNIT_TEST(EllenBinTree_dhp_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_less)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_cmp)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_less_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_cmpless)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_less_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_rcu_gpi_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_rcu_gpi_less_pool )
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_less)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_cmp)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_less_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_cmpless)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_less_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_rcu_gpb_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_rcu_gpb_less_pool )
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_less)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_cmp)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_less_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_cmpless)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_less_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_rcu_gpt_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_rcu_gpt_less_pool )
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_less)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_cmp)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_less_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_cmpless)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_less_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_rcu_shb_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_rcu_shb_less_pool )
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_less)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_cmp)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_less_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_cmpless)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_less_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_rcu_sht_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_rcu_sht_less_pool )
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_less_pool_ic_stat)
-
-        CPPUNIT_TEST_SUITE_END()
-    };
-} // namespace tree
-
-#endif // #ifndef CDSTEST_HDR_ELLENBINTREE_SET_H
diff --git a/tests/test-hdr/tree/hdr_ellenbintree_set_dhp.cpp b/tests/test-hdr/tree/hdr_ellenbintree_set_dhp.cpp
deleted file mode 100644 (file)
index 251918d..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_ellenbintree_set.h"
-#include <cds/container/ellen_bintree_set_dhp.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_dhp.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::gc::DHP     gc_type;
-
-        typedef cc::ellen_bintree::node<gc_type, EllenBinTreeSetHdrTest::value_type>                    tree_leaf_node;
-        typedef cc::ellen_bintree::internal_node< EllenBinTreeSetHdrTest::key_type, tree_leaf_node >    tree_internal_node;
-        typedef cc::ellen_bintree::update_desc<tree_leaf_node, tree_internal_node>                      tree_update_desc;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_dhp_less()
-    {
-        struct set_traits: public cc::ellen_bintree::traits{
-            typedef EllenBinTreeSetHdrTest::key_extractor key_extractor;
-            typedef EllenBinTreeSetHdrTest::less less;
-        };
-        typedef cc::EllenBinTreeSet< gc_type, key_type, value_type, set_traits > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_dhp_cmp()
-    {
-        typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_dhp_cmpless()
-    {
-        typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::compare< compare >
-                ,co::less< less >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_dhp_less_ic()
-    {
-        typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_dhp_cmp_ic()
-    {
-        typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_dhp_less_stat()
-    {
-        typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_dhp_cmp_ic_stat()
-    {
-        typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_dhp_cmp_ic_stat_yield()
-    {
-        typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-                , co::back_off< cds::backoff::yield >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_dhp_less_pool()
-    {
-        typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_dhp::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_dhp::update_desc_pool_accessor > >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_dhp_less_pool_ic_stat()
-    {
-        typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_dhp::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_dhp::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_ellenbintree_set_hp.cpp b/tests/test-hdr/tree/hdr_ellenbintree_set_hp.cpp
deleted file mode 100644 (file)
index 4404ec8..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_ellenbintree_set.h"
-#include <cds/container/ellen_bintree_set_hp.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_hp.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::gc::HP     gc_type;
-
-        typedef cc::ellen_bintree::node<gc_type, EllenBinTreeSetHdrTest::value_type>                    tree_leaf_node;
-        typedef cc::ellen_bintree::internal_node< EllenBinTreeSetHdrTest::key_type, tree_leaf_node >    tree_internal_node;
-        typedef cc::ellen_bintree::update_desc<tree_leaf_node, tree_internal_node>                      tree_update_desc;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_hp_less()
-    {
-        struct set_traits : public cc::ellen_bintree::traits{
-            typedef EllenBinTreeSetHdrTest::key_extractor key_extractor;
-            typedef EllenBinTreeSetHdrTest::less less;
-        };
-        typedef cc::EllenBinTreeSet< gc_type, key_type, value_type, set_traits > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_hp_cmp()
-    {
-        typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_hp_cmpless()
-    {
-        typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::compare< compare >
-                ,co::less< less >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_hp_less_ic()
-    {
-        typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_hp_cmp_ic()
-    {
-        typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_hp_less_stat()
-    {
-        typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_hp_cmp_ic_stat()
-    {
-        typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_hp_cmp_ic_stat_yield()
-    {
-        typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-                , co::back_off< cds::backoff::yield >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_hp_less_pool()
-    {
-        typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_hp::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_hp::update_desc_pool_accessor > >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_hp_less_pool_ic_stat()
-    {
-        typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_hp::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_hp::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test<set_type, print_stat>();
-    }
-
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_ellenbintree_set_rcu_gpb.cpp b/tests/test-hdr/tree/hdr_ellenbintree_set_rcu_gpb.cpp
deleted file mode 100644 (file)
index 108d4c9..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_ellenbintree_set.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/container/ellen_bintree_set_rcu.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_type;
-
-        typedef cc::ellen_bintree::node<rcu_type, EllenBinTreeSetHdrTest::value_type>                   tree_leaf_node;
-        typedef cc::ellen_bintree::internal_node< EllenBinTreeSetHdrTest::key_type, tree_leaf_node >    tree_internal_node;
-        typedef cc::ellen_bintree::update_desc<tree_leaf_node, tree_internal_node>                      tree_update_desc;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpb_less()
-    {
-        struct set_traits : public cc::ellen_bintree::traits{
-            typedef EllenBinTreeSetHdrTest::key_extractor key_extractor;
-            typedef EllenBinTreeSetHdrTest::less less;
-        };
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type, set_traits > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpb_cmp()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpb_cmpless()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::compare< compare >
-                ,co::less< less >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpb_less_ic()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpb_cmp_ic()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpb_less_stat()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpb_cmp_ic_stat()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpb_cmp_ic_stat_yield()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                , co::back_off< cds::backoff::yield >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpb_less_pool()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpb_less_pool_ic_stat()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_ellenbintree_set_rcu_gpi.cpp b/tests/test-hdr/tree/hdr_ellenbintree_set_rcu_gpi.cpp
deleted file mode 100644 (file)
index ea40b96..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_ellenbintree_set.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/container/ellen_bintree_set_rcu.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
-
-        typedef cc::ellen_bintree::node<rcu_type, EllenBinTreeSetHdrTest::value_type>                   tree_leaf_node;
-        typedef cc::ellen_bintree::internal_node< EllenBinTreeSetHdrTest::key_type, tree_leaf_node >    tree_internal_node;
-        typedef cc::ellen_bintree::update_desc<tree_leaf_node, tree_internal_node>                      tree_update_desc;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpi_less()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpi_cmp()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpi_cmpless()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::compare< compare >
-                ,co::less< less >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpi_less_ic()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpi_cmp_ic()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpi_less_stat()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpi_cmp_ic_stat()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpi_cmp_ic_stat_yield()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-                , co::back_off< cds::backoff::yield >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpi_less_pool()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpi_less_pool_ic_stat()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_ellenbintree_set_rcu_gpt.cpp b/tests/test-hdr/tree/hdr_ellenbintree_set_rcu_gpt.cpp
deleted file mode 100644 (file)
index 9501506..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_ellenbintree_set.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/container/ellen_bintree_set_rcu.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_type;
-
-        typedef cc::ellen_bintree::node<rcu_type, EllenBinTreeSetHdrTest::value_type>                   tree_leaf_node;
-        typedef cc::ellen_bintree::internal_node< EllenBinTreeSetHdrTest::key_type, tree_leaf_node >    tree_internal_node;
-        typedef cc::ellen_bintree::update_desc<tree_leaf_node, tree_internal_node>                      tree_update_desc;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpt_less()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpt_cmp()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpt_cmpless()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::compare< compare >
-                ,co::less< less >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpt_less_ic()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpt_cmp_ic()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpt_less_stat()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpt_cmp_ic_stat()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpt_cmp_ic_stat_yield()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-                , co::back_off< cds::backoff::yield >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpt_less_pool()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpt_less_pool_ic_stat()
-    {
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-    }
-
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_ellenbintree_set_rcu_shb.cpp b/tests/test-hdr/tree/hdr_ellenbintree_set_rcu_shb.cpp
deleted file mode 100644 (file)
index ba4a505..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_ellenbintree_set.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/container/ellen_bintree_set_rcu.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_type;
-
-        typedef cc::ellen_bintree::node<rcu_type, EllenBinTreeSetHdrTest::value_type>                   tree_leaf_node;
-        typedef cc::ellen_bintree::internal_node< EllenBinTreeSetHdrTest::key_type, tree_leaf_node >    tree_internal_node;
-        typedef cc::ellen_bintree::update_desc<tree_leaf_node, tree_internal_node>                      tree_update_desc;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-    }
-#endif
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_shb_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_shb_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_shb_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::compare< compare >
-                ,co::less< less >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_shb_less_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_shb_cmp_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_shb_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_shb_cmp_ic_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_shb_cmp_ic_stat_yield()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                , co::back_off< cds::backoff::yield >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_shb_less_pool()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_shb_less_pool_ic_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_ellenbintree_set_rcu_sht.cpp b/tests/test-hdr/tree/hdr_ellenbintree_set_rcu_sht.cpp
deleted file mode 100644 (file)
index e83f032..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_ellenbintree_set.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/container/ellen_bintree_set_rcu.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_type;
-
-        typedef cc::ellen_bintree::node<rcu_type, EllenBinTreeSetHdrTest::value_type>                   tree_leaf_node;
-        typedef cc::ellen_bintree::internal_node< EllenBinTreeSetHdrTest::key_type, tree_leaf_node >    tree_internal_node;
-        typedef cc::ellen_bintree::update_desc<tree_leaf_node, tree_internal_node>                      tree_update_desc;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-    }
-#endif
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_sht_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_sht_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_sht_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::compare< compare >
-                ,co::less< less >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_sht_less_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_sht_cmp_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_sht_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_sht_cmp_ic_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_sht_cmp_ic_stat_yield()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                , co::back_off< cds::backoff::yield >
-                ,co::compare< compare >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_sht_less_pool()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_sht_less_pool_ic_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
-            cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< key_extractor >
-                ,co::less< less >
-                ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        > set_type;
-
-        test_rcu<set_type, print_stat>();
-#endif
-    }
-
-} // namespace tree
diff --git a/tests/test-hdr/tree/hdr_intrusive_bintree.h b/tests/test-hdr/tree/hdr_intrusive_bintree.h
deleted file mode 100644 (file)
index 62368e0..0000000
+++ /dev/null
@@ -1,1281 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_INTRUSIVE_BINTREE_H
-#define CDSTEST_HDR_INTRUSIVE_BINTREE_H
-
-#include "cppunit/cppunit_proxy.h"
-#include "size_check.h"
-#include <algorithm>
-
-namespace tree {
-
-    class IntrusiveBinTreeHdrTest: public CppUnitMini::TestCase
-    {
-    public:
-        typedef int     key_type;
-
-        struct stat_data {
-            size_t  nDisposeCount;
-            size_t  nWaitingDispCount;
-            size_t  nInsertFuncCall;
-            size_t  nEnsureExistFuncCall;
-            size_t  nEnsureNewFuncCall;
-            size_t  nEraseFuncCall;
-            size_t  nFindFuncCall;
-            size_t  nFindConstFuncCall;
-
-            stat_data()
-                : nDisposeCount(0)
-                , nWaitingDispCount(0)
-                , nInsertFuncCall(0)
-                , nEnsureExistFuncCall(0)
-                , nEnsureNewFuncCall(0)
-                , nEraseFuncCall(0)
-                , nFindFuncCall(0)
-                , nFindConstFuncCall(0)
-            {}
-        };
-
-        template <typename Hook>
-        struct base_hook_value: public Hook
-        {
-            int     nKey;
-            int     nValue;
-            mutable stat_data   stat;
-
-            base_hook_value()
-            {}
-
-            base_hook_value( int key )
-                : nKey(key)
-                , nValue(key * 2)
-            {}
-
-            base_hook_value( int key, int val )
-                : nKey(key)
-                , nValue(val)
-            {}
-
-            base_hook_value( base_hook_value&& s )
-                : Hook()
-                , nKey(s.nKey)
-                , nValue(s.nValue)
-            {}
-            base_hook_value& operator=( base_hook_value const& s )
-            {
-                nKey = s.nKey;
-                nValue = s.nValue;
-                return *this;
-            }
-        };
-
-        template <typename Hook>
-        struct member_hook_value
-        {
-            int     nKey;
-            int     nValue;
-            Hook    hook;
-            mutable stat_data   stat;
-
-            member_hook_value()
-            {}
-
-            member_hook_value( int key )
-                : nKey(key)
-                , nValue(key * 2)
-            {}
-
-            member_hook_value( int key, int val )
-                : nKey(key)
-                , nValue(val)
-            {}
-
-            member_hook_value( member_hook_value&& s )
-                : nKey(s.nKey)
-                , nValue(s.nValue)
-                , hook()
-            {}
-            member_hook_value& operator=( member_hook_value const& s )
-            {
-                nKey = s.nKey;
-                nValue = s.nValue;
-                return *this;
-            }
-        };
-
-        template <typename ValueType>
-        struct less {
-            typedef ValueType value_type;
-
-            bool operator()( int k1, int k2 ) const
-            {
-                return k1 < k2;
-            }
-            bool operator()( value_type const& v1, value_type const& v2 ) const
-            {
-                return v1.nKey < v2.nKey;
-            }
-            bool operator()( value_type const& v, int k ) const
-            {
-                return v.nKey < k;
-            }
-            bool operator()( int k, value_type const& v ) const
-            {
-                return k < v.nKey;
-            }
-        };
-
-        template <typename ValueType>
-        struct compare {
-            typedef ValueType value_type;
-
-            int cmp( int k1, int k2 ) const
-            {
-                return k1 < k2 ? -1 : (k1 > k2 ? 1 : 0);
-            }
-            int operator()( int k1, int k2 ) const
-            {
-                return cmp( k1, k2 );
-            }
-            int operator()( value_type const& v1, value_type const& v2 ) const
-            {
-                return cmp( v1.nKey, v2.nKey );
-            }
-            int operator()( value_type const& v, int k ) const
-            {
-                return cmp( v.nKey, k );
-            }
-            int operator()( int k, value_type const& v ) const
-            {
-                return cmp( k, v.nKey );
-            }
-        };
-
-        struct wrapped_int {
-            int  nKey;
-
-            wrapped_int( int n )
-                : nKey(n)
-            {}
-        };
-
-        template <typename T>
-        struct wrapped_less
-        {
-            bool operator()( wrapped_int const& w, int n ) const
-            {
-                return w.nKey < n;
-            }
-            bool operator()( int n, wrapped_int const& w ) const
-            {
-                return n < w.nKey;
-            }
-            bool operator()( wrapped_int const& w, T const& v ) const
-            {
-                return w.nKey < v.nKey;
-            }
-            bool operator()( T const& v, wrapped_int const& w ) const
-            {
-                return v.nKey < w.nKey;
-            }
-        };
-
-        template <typename ValueType>
-        struct key_extractor {
-            void operator()( int& dest, ValueType const& src ) const
-            {
-                dest = src.nKey;
-            }
-        };
-
-        template <typename ValueType>
-        struct disposer {
-            void operator()( ValueType * v ) const
-            {
-                ++v->stat.nDisposeCount;
-            }
-        };
-
-        struct insert_functor {
-            template <typename T>
-            void operator()( T& v ) const
-            {
-                ++v.stat.nInsertFuncCall;
-            }
-        };
-
-        struct update_functor {
-            template <typename T>
-            void operator()( bool bNew, T& dest, T& src) const
-            {
-                if ( bNew )
-                    ++dest.stat.nEnsureNewFuncCall;
-                else {
-                    dest.nValue *= 2;
-                    ++src.stat.nEnsureExistFuncCall;
-                }
-            }
-        };
-
-        struct erase_functor {
-            template <typename T>
-            void operator()( T const& v ) const
-            {
-                ++v.stat.nEraseFuncCall;
-            }
-        };
-
-        struct find_functor {
-            template <typename T, typename Q>
-            void operator()( T const& v, Q& /*q*/ ) const
-            {
-                ++v.stat.nFindFuncCall;
-            }
-            template <typename T, typename Q>
-            void operator()( T const& v, Q const& /*q*/ ) const
-            {
-                ++v.stat.nFindConstFuncCall;
-            }
-        };
-
-    protected:
-        static const size_t c_nItemCount = 10000;
-
-        template <typename T>
-        class data_array
-        {
-            T *     pFirst;
-            T *     pLast;
-
-        public:
-            data_array()
-                : pFirst( new T[c_nItemCount] )
-                , pLast( pFirst + c_nItemCount )
-            {
-                int i = 0;
-                for ( T * p = pFirst; p != pLast; ++p, ++i ) {
-                    p->nKey = i;
-                    p->nValue = i * 2;
-                }
-
-                shuffle( pFirst, pLast );
-            }
-
-            ~data_array()
-            {
-                delete [] pFirst;
-            }
-
-            T * begin() { return pFirst; }
-            T * end()   { return pLast ; }
-        };
-
-    protected:
-        template <typename Tree>
-        void test_common( Tree& t )
-        {
-            typedef Tree tree_type;
-            typedef typename tree_type::key_type     key_type;
-            typedef typename tree_type::value_type   value_type;
-
-            {
-                value_type v1( 10, 100 );
-                value_type v2( 20, 200 );
-                value_type v3( 30, 300 );
-                value_type v4( 25, 250 );
-                value_type v5( -50, -500 );
-
-                // insert/update
-                CPPUNIT_ASSERT( t.empty() );
-                CPPUNIT_ASSERT( misc::check_size( t, 0 ));
-                CPPUNIT_CHECK( !t.contains( v1.nKey ));
-                CPPUNIT_CHECK( !t.contains( v1 ));
-                CPPUNIT_CHECK( !t.contains( v2.nKey ));
-                CPPUNIT_CHECK( !t.contains( v2 ));
-                CPPUNIT_CHECK( !t.contains( v3.nKey ));
-                CPPUNIT_CHECK( !t.contains( v3 ));
-                CPPUNIT_CHECK( !t.contains( v4.nKey ));
-                CPPUNIT_CHECK( !t.contains( v4 ));
-                CPPUNIT_CHECK( !t.contains( v5.nKey ));
-                CPPUNIT_CHECK( !t.contains( v5 ));
-
-                CPPUNIT_ASSERT( t.insert( v1 ));
-                CPPUNIT_ASSERT( t.check_consistency() );
-                CPPUNIT_ASSERT( !t.empty() );
-                CPPUNIT_ASSERT( misc::check_size( t, 1 ));
-                CPPUNIT_CHECK( t.contains( v1.nKey ));
-                CPPUNIT_CHECK( t.contains( v1 ));
-                CPPUNIT_CHECK( !t.contains( v2.nKey ));
-                CPPUNIT_CHECK( !t.contains( v2 ));
-                CPPUNIT_CHECK( !t.contains( v3.nKey ));
-                CPPUNIT_CHECK( !t.contains( v3 ));
-                CPPUNIT_CHECK( !t.contains( v4.nKey ));
-                CPPUNIT_CHECK( !t.contains( v4 ));
-                CPPUNIT_CHECK( !t.contains( v5.nKey ));
-                CPPUNIT_CHECK( !t.contains( v5 ));
-
-                CPPUNIT_ASSERT( v2.stat.nInsertFuncCall == 0 );
-                CPPUNIT_ASSERT( t.insert( v2, insert_functor() ));
-                CPPUNIT_ASSERT( t.check_consistency() );
-                CPPUNIT_ASSERT( v2.stat.nInsertFuncCall == 1 );
-                CPPUNIT_ASSERT( t.contains( v1.nKey ));
-                CPPUNIT_ASSERT( t.contains( v1 ));
-                CPPUNIT_ASSERT( t.contains( v2.nKey ));
-                CPPUNIT_ASSERT( t.contains( v2 ));
-                CPPUNIT_ASSERT( !t.contains( v3.nKey ));
-                CPPUNIT_ASSERT( !t.contains( v3 ));
-                CPPUNIT_ASSERT( !t.contains( v4.nKey ));
-                CPPUNIT_ASSERT( !t.contains( v4 ));
-                CPPUNIT_ASSERT( !t.contains( v5.nKey ));
-                CPPUNIT_ASSERT( !t.contains( v5 ));
-                CPPUNIT_ASSERT( !t.empty() );
-                CPPUNIT_ASSERT( misc::check_size( t, 2 ));
-
-                std::pair<bool, bool> updateResult;
-                CPPUNIT_ASSERT( v3.stat.nEnsureNewFuncCall == 0 );
-                CPPUNIT_ASSERT( v3.stat.nEnsureExistFuncCall == 0 );
-                updateResult = t.update( v3, update_functor(), false );
-                CPPUNIT_ASSERT( !updateResult.first && !updateResult.second );
-                CPPUNIT_ASSERT( v3.stat.nEnsureNewFuncCall == 0 );
-                CPPUNIT_ASSERT( v3.stat.nEnsureExistFuncCall == 0 );
-                updateResult = t.update( v3, update_functor(), true );
-                CPPUNIT_ASSERT( updateResult.first && updateResult.second );
-                CPPUNIT_ASSERT( t.check_consistency() );
-                CPPUNIT_ASSERT( v3.stat.nEnsureNewFuncCall == 1 );
-                CPPUNIT_ASSERT( v3.stat.nEnsureExistFuncCall == 0 );
-                CPPUNIT_ASSERT( v3.nValue == 300 );
-                updateResult = t.update( v3, update_functor(), false );
-                CPPUNIT_ASSERT( updateResult.first && !updateResult.second );
-                CPPUNIT_ASSERT( v3.stat.nEnsureNewFuncCall == 1 );
-                CPPUNIT_ASSERT( v3.stat.nEnsureExistFuncCall == 1 );
-                CPPUNIT_ASSERT( v3.nValue == 600 );
-                CPPUNIT_ASSERT( t.contains( v1.nKey ));
-                CPPUNIT_ASSERT( t.contains( v1 ));
-                CPPUNIT_ASSERT( t.contains( v2.nKey ));
-                CPPUNIT_ASSERT( t.contains( v2 ));
-                CPPUNIT_ASSERT( t.contains( v3.nKey ));
-                CPPUNIT_ASSERT( t.contains( v3 ));
-                CPPUNIT_ASSERT( !t.contains( v4.nKey ));
-                CPPUNIT_ASSERT( !t.contains( v4 ));
-                CPPUNIT_ASSERT( !t.contains( v5.nKey ));
-                CPPUNIT_ASSERT( !t.contains( v5 ));
-                CPPUNIT_ASSERT( !t.empty() );
-                CPPUNIT_ASSERT( misc::check_size( t, 3 ));
-
-                {
-                    value_type v( v3.nKey, v3.nValue );
-                    CPPUNIT_ASSERT( v.stat.nEnsureExistFuncCall == 0 );
-                    CPPUNIT_ASSERT( v3.stat.nEnsureNewFuncCall == 1 );
-                    CPPUNIT_ASSERT( v3.stat.nEnsureExistFuncCall == 1 );
-                    CPPUNIT_ASSERT( v3.nValue == 600 );
-                    CPPUNIT_ASSERT( !t.update( v, update_functor() ).second );
-                    CPPUNIT_ASSERT( v3.stat.nEnsureNewFuncCall == 1 );
-                    CPPUNIT_ASSERT( v.stat.nEnsureExistFuncCall == 1 );
-                    CPPUNIT_ASSERT( v3.nValue == 1200 );
-
-                }
-                v3.nValue = 300;
-                CPPUNIT_ASSERT( !t.insert( v3 ));
-
-                CPPUNIT_ASSERT( t.insert( v4 ));
-                CPPUNIT_ASSERT( t.check_consistency() );
-                CPPUNIT_ASSERT( t.contains( v1.nKey ));
-                CPPUNIT_ASSERT( t.contains( v1 ));
-                CPPUNIT_ASSERT( t.contains( v2.nKey ));
-                CPPUNIT_ASSERT( t.contains( v2 ));
-                CPPUNIT_ASSERT( t.contains( v3.nKey ));
-                CPPUNIT_ASSERT( t.contains( v3 ));
-                CPPUNIT_ASSERT( t.contains( v4.nKey ));
-                CPPUNIT_ASSERT( t.contains( v4 ));
-                CPPUNIT_ASSERT( !t.contains( v5.nKey ));
-                CPPUNIT_ASSERT( !t.contains( v5 ));
-                CPPUNIT_ASSERT( !t.empty() );
-                CPPUNIT_ASSERT( misc::check_size( t, 4 ));
-
-                CPPUNIT_ASSERT( t.insert( v5 ));
-                CPPUNIT_ASSERT( t.check_consistency() );
-                CPPUNIT_ASSERT( t.contains( v1.nKey ));
-                CPPUNIT_ASSERT( t.contains( v1 ));
-                CPPUNIT_ASSERT( t.contains( v2.nKey ));
-                CPPUNIT_ASSERT( t.contains( v2 ));
-                CPPUNIT_ASSERT( t.contains( v3.nKey ));
-                CPPUNIT_ASSERT( t.contains( v3 ));
-                CPPUNIT_ASSERT( t.contains( v4.nKey ));
-                CPPUNIT_ASSERT( t.contains( v4 ));
-                CPPUNIT_ASSERT( t.contains( v5.nKey ));
-                CPPUNIT_ASSERT( t.contains( v5 ));
-                CPPUNIT_ASSERT( !t.empty() );
-                CPPUNIT_ASSERT( misc::check_size( t, 5 ));
-
-                //unlink/erase
-                ++v1.stat.nWaitingDispCount;
-                CPPUNIT_ASSERT( t.unlink(v1));
-                CPPUNIT_ASSERT( t.check_consistency() );
-                CPPUNIT_ASSERT( !t.contains( v1.nKey ));
-                CPPUNIT_ASSERT( !t.contains( v1 ));
-                CPPUNIT_ASSERT( !t.unlink(v1));
-                CPPUNIT_ASSERT( t.contains( v2.nKey ));
-                CPPUNIT_ASSERT( t.contains( v2 ));
-                CPPUNIT_ASSERT( t.contains( v3.nKey ));
-                CPPUNIT_ASSERT( t.contains( v3 ));
-                CPPUNIT_ASSERT( t.contains( v4.nKey ));
-                CPPUNIT_ASSERT( t.contains( v4 ));
-                CPPUNIT_ASSERT( t.contains( v5.nKey ));
-                CPPUNIT_ASSERT( t.contains( v5 ));
-                CPPUNIT_ASSERT( !t.empty() );
-                CPPUNIT_ASSERT( misc::check_size( t, 4 ));
-
-                ++v2.stat.nWaitingDispCount;
-                CPPUNIT_ASSERT( t.erase( v2.nKey ));
-                CPPUNIT_ASSERT( t.check_consistency() );
-                CPPUNIT_ASSERT( !t.contains( v1.nKey ));
-                CPPUNIT_ASSERT( !t.contains( v1 ));
-                CPPUNIT_ASSERT( !t.contains( v2.nKey ));
-                CPPUNIT_ASSERT( !t.contains( v2 ));
-                CPPUNIT_ASSERT( !t.erase(v2));
-                CPPUNIT_ASSERT( t.contains( v3.nKey ));
-                CPPUNIT_ASSERT( t.contains( v3 ));
-                CPPUNIT_ASSERT( t.contains( v4.nKey ));
-                CPPUNIT_ASSERT( t.contains( v4 ));
-                CPPUNIT_ASSERT( t.contains( v5.nKey ));
-                CPPUNIT_ASSERT( t.contains( v5 ));
-                CPPUNIT_ASSERT( !t.empty() );
-                CPPUNIT_ASSERT( misc::check_size( t, 3 ));
-
-                ++v3.stat.nWaitingDispCount;
-                CPPUNIT_ASSERT( t.erase_with( v3.nKey, less<value_type>() ));
-                CPPUNIT_ASSERT( t.check_consistency() );
-                CPPUNIT_ASSERT( !t.contains( v1.nKey ));
-                CPPUNIT_ASSERT( !t.contains( v1 ));
-                CPPUNIT_ASSERT( !t.contains( v2.nKey ));
-                CPPUNIT_ASSERT( !t.contains( v2 ));
-                CPPUNIT_ASSERT( !t.contains( v3.nKey ));
-                CPPUNIT_ASSERT( !t.contains( v3 ));
-                CPPUNIT_ASSERT( !t.erase_with(v3, less<value_type>() ));
-                CPPUNIT_ASSERT( t.contains( v4.nKey ));
-                CPPUNIT_ASSERT( t.contains( v4 ));
-                CPPUNIT_ASSERT( t.contains( v5.nKey ));
-                CPPUNIT_ASSERT( t.contains( v5 ));
-                CPPUNIT_ASSERT( !t.empty() );
-                CPPUNIT_ASSERT( misc::check_size( t, 2 ));
-
-                ++v4.stat.nWaitingDispCount;
-                CPPUNIT_ASSERT( v4.stat.nEraseFuncCall == 0 );
-                CPPUNIT_ASSERT( t.erase( v4.nKey, erase_functor() ));
-                CPPUNIT_ASSERT( t.check_consistency() );
-                CPPUNIT_ASSERT( v4.stat.nEraseFuncCall == 1 );
-                CPPUNIT_ASSERT( !t.contains( v1.nKey ));
-                CPPUNIT_ASSERT( !t.contains( v1 ));
-                CPPUNIT_ASSERT( !t.contains( v2.nKey ));
-                CPPUNIT_ASSERT( !t.contains( v2 ));
-                CPPUNIT_ASSERT( !t.contains( v3.nKey ));
-                CPPUNIT_ASSERT( !t.contains( v3 ));
-                CPPUNIT_ASSERT( !t.contains( v4.nKey ));
-                CPPUNIT_ASSERT( !t.contains( v4 ));
-                CPPUNIT_ASSERT( !t.erase( v4.nKey, erase_functor() ));
-                CPPUNIT_ASSERT( v4.stat.nEraseFuncCall == 1 );
-                CPPUNIT_ASSERT( t.contains( v5.nKey ));
-                CPPUNIT_ASSERT( t.contains( v5 ));
-                CPPUNIT_ASSERT( !t.empty() );
-                CPPUNIT_ASSERT( misc::check_size( t, 1 ));
-
-                ++v5.stat.nWaitingDispCount;
-                CPPUNIT_ASSERT( t.erase_with( v5.nKey, less<value_type>(), erase_functor() ));
-                CPPUNIT_ASSERT( t.check_consistency() );
-                CPPUNIT_ASSERT( v5.stat.nEraseFuncCall == 1 );
-                CPPUNIT_ASSERT( !t.contains( v1.nKey ));
-                CPPUNIT_ASSERT( !t.contains( v1 ));
-                CPPUNIT_ASSERT( !t.contains( v2.nKey ));
-                CPPUNIT_ASSERT( !t.contains( v2 ));
-                CPPUNIT_ASSERT( !t.contains( v3.nKey ));
-                CPPUNIT_ASSERT( !t.contains( v3 ));
-                CPPUNIT_ASSERT( !t.erase_with(v5, less<value_type>(), erase_functor() ));
-                CPPUNIT_ASSERT( !t.contains( v4.nKey ));
-                CPPUNIT_ASSERT( !t.contains( v4 ));
-                CPPUNIT_ASSERT( !t.contains( v5.nKey ));
-                CPPUNIT_ASSERT( !t.contains( v5 ));
-                CPPUNIT_ASSERT( t.empty() );
-                CPPUNIT_ASSERT( misc::check_size( t, 0 ));
-
-                tree_type::gc::force_dispose();
-
-                // contains
-                CPPUNIT_ASSERT( t.insert( v1 ));
-                CPPUNIT_ASSERT( t.insert( v2 ));
-                CPPUNIT_ASSERT( t.insert( v3 ));
-                CPPUNIT_ASSERT( t.insert( v4 ));
-                CPPUNIT_ASSERT( t.insert( v5 ));
-                CPPUNIT_ASSERT( t.check_consistency() );
-                CPPUNIT_ASSERT( !t.empty() );
-                CPPUNIT_ASSERT( misc::check_size( t, 5 ));
-
-                CPPUNIT_ASSERT( t.contains( 10 ));
-                CPPUNIT_ASSERT( !t.contains( 11 ));
-                CPPUNIT_ASSERT( t.contains( v1 ));
-                CPPUNIT_ASSERT( t.contains( v2.nKey ));
-                CPPUNIT_ASSERT( t.contains( v3 ));
-                CPPUNIT_ASSERT( t.contains( v4.nKey ));
-                CPPUNIT_ASSERT( t.contains( v5.nKey ));
-
-                // contains
-                CPPUNIT_ASSERT( t.contains( 10, less<value_type>() ));
-                CPPUNIT_ASSERT( !t.contains( wrapped_int(11), wrapped_less<value_type>() ));
-                CPPUNIT_ASSERT( t.contains( v1, less<value_type>() ));
-                CPPUNIT_ASSERT( t.contains( wrapped_int(v2.nKey), wrapped_less<value_type>() ));
-                CPPUNIT_ASSERT( t.contains( v3, less<value_type>() ));
-                CPPUNIT_ASSERT( t.contains( v4.nKey, less<value_type>() ));
-                CPPUNIT_ASSERT( t.contains( v5.nKey, less<value_type>() ));
-
-                // find<Func>
-                CPPUNIT_ASSERT( v1.stat.nFindFuncCall == 0 );
-                CPPUNIT_ASSERT( v1.stat.nFindConstFuncCall == 0 );
-                CPPUNIT_ASSERT( t.find( 10, find_functor() ));
-                CPPUNIT_ASSERT( v1.stat.nFindFuncCall == 0 );
-                CPPUNIT_ASSERT( v1.stat.nFindConstFuncCall == 1 );
-
-                CPPUNIT_ASSERT( !t.find( 11, find_functor() ));
-
-                CPPUNIT_ASSERT( t.find( v1, find_functor() ));
-                CPPUNIT_ASSERT( v1.stat.nFindFuncCall == 1 );
-                CPPUNIT_ASSERT( v1.stat.nFindConstFuncCall == 1 );
-
-                CPPUNIT_ASSERT( v2.stat.nFindFuncCall == 0 );
-                CPPUNIT_ASSERT( v2.stat.nFindConstFuncCall == 0 );
-                CPPUNIT_ASSERT( t.find( v2.nKey, find_functor() ));
-                CPPUNIT_ASSERT( v2.stat.nFindFuncCall == 1 );
-                CPPUNIT_ASSERT( v2.stat.nFindConstFuncCall == 0 );
-
-                CPPUNIT_ASSERT( v3.stat.nFindFuncCall == 0 );
-                CPPUNIT_ASSERT( v3.stat.nFindConstFuncCall == 0 );
-                CPPUNIT_ASSERT( t.find( v3, find_functor() ));
-                CPPUNIT_ASSERT( v3.stat.nFindFuncCall == 1 );
-                CPPUNIT_ASSERT( v3.stat.nFindConstFuncCall == 0 );
-
-                CPPUNIT_ASSERT( v4.stat.nFindFuncCall == 0 );
-                CPPUNIT_ASSERT( v4.stat.nFindConstFuncCall == 0 );
-                CPPUNIT_ASSERT( t.find( (value_type const&) v4, find_functor() ));
-                CPPUNIT_ASSERT( v4.stat.nFindFuncCall == 0 );
-                CPPUNIT_ASSERT( v4.stat.nFindConstFuncCall == 1 );
-
-                CPPUNIT_ASSERT( v5.stat.nFindFuncCall == 0 );
-                CPPUNIT_ASSERT( v5.stat.nFindConstFuncCall == 0 );
-                CPPUNIT_ASSERT( t.find( v5.nKey, find_functor() ));
-                CPPUNIT_ASSERT( v5.stat.nFindFuncCall == 1 );
-                CPPUNIT_ASSERT( v5.stat.nFindConstFuncCall == 0 );
-
-                // find_with<Func>
-                CPPUNIT_ASSERT( v1.stat.nFindFuncCall == 1 );
-                CPPUNIT_ASSERT( v1.stat.nFindConstFuncCall == 1 );
-                CPPUNIT_ASSERT( t.find_with( 10, less<value_type>(), find_functor() ));
-                CPPUNIT_ASSERT( v1.stat.nFindFuncCall == 1 );
-                CPPUNIT_ASSERT( v1.stat.nFindConstFuncCall == 2 );
-
-                CPPUNIT_ASSERT( !t.find_with( 11, less<value_type>(), find_functor() ));
-
-                CPPUNIT_ASSERT( t.find_with( v1, less<value_type>(), find_functor() ));
-                CPPUNIT_ASSERT( v1.stat.nFindFuncCall == 2 );
-                CPPUNIT_ASSERT( v1.stat.nFindConstFuncCall == 2 );
-
-                CPPUNIT_ASSERT( v2.stat.nFindFuncCall == 1 );
-                CPPUNIT_ASSERT( v2.stat.nFindConstFuncCall == 0 );
-                CPPUNIT_ASSERT( t.find_with( v2.nKey, less<value_type>(), find_functor() ));
-                CPPUNIT_ASSERT( v2.stat.nFindFuncCall == 2 );
-                CPPUNIT_ASSERT( v2.stat.nFindConstFuncCall == 0 );
-
-                CPPUNIT_ASSERT( v3.stat.nFindFuncCall == 1 );
-                CPPUNIT_ASSERT( v3.stat.nFindConstFuncCall == 0 );
-                CPPUNIT_ASSERT( t.find_with( wrapped_int(v3.nKey), wrapped_less<value_type>(), find_functor() ));
-                CPPUNIT_ASSERT( v3.stat.nFindFuncCall == 1 );
-                CPPUNIT_ASSERT( v3.stat.nFindConstFuncCall == 1 );
-
-                CPPUNIT_ASSERT( v4.stat.nFindFuncCall == 0 );
-                CPPUNIT_ASSERT( v4.stat.nFindConstFuncCall == 1 );
-                CPPUNIT_ASSERT( t.find_with( (value_type const&) v4, less<value_type>(), find_functor() ));
-                CPPUNIT_ASSERT( v4.stat.nFindFuncCall == 0 );
-                CPPUNIT_ASSERT( v4.stat.nFindConstFuncCall == 2 );
-
-                CPPUNIT_ASSERT( v5.stat.nFindFuncCall == 1 );
-                CPPUNIT_ASSERT( v5.stat.nFindConstFuncCall == 0 );
-                CPPUNIT_ASSERT( t.find_with( v5.nKey, less<value_type>(), find_functor() ));
-                CPPUNIT_ASSERT( v5.stat.nFindFuncCall == 2 );
-                CPPUNIT_ASSERT( v5.stat.nFindConstFuncCall == 0 );
-
-                CPPUNIT_ASSERT( t.check_consistency() );
-                t.clear();
-                CPPUNIT_ASSERT( t.check_consistency() );
-                CPPUNIT_ASSERT( t.empty() );
-                CPPUNIT_ASSERT( misc::check_size( t, 0 ));
-
-                tree_type::gc::force_dispose();
-                CPPUNIT_CHECK_EX( v1.stat.nWaitingDispCount + 1 == v1.stat.nDisposeCount,
-                    "v1.stat.nWaitingDispCount=" << v1.stat.nWaitingDispCount << ", v1.stat.nDisposeCount=" << v1.stat.nDisposeCount );
-                CPPUNIT_CHECK_EX( v2.stat.nWaitingDispCount + 1 == v2.stat.nDisposeCount,
-                    "v2.stat.nWaitingDispCount=" << v2.stat.nWaitingDispCount << ", v2.stat.nDisposeCount=" << v2.stat.nDisposeCount );
-                CPPUNIT_CHECK_EX( v3.stat.nWaitingDispCount + 1 == v3.stat.nDisposeCount,
-                    "v3.stat.nWaitingDispCount=" << v3.stat.nWaitingDispCount << ", v3.stat.nDisposeCount=" << v3.stat.nDisposeCount );
-                CPPUNIT_CHECK_EX( v4.stat.nWaitingDispCount + 1 == v4.stat.nDisposeCount,
-                    "v4.stat.nWaitingDispCount=" << v4.stat.nWaitingDispCount << ", v4.stat.nDisposeCount=" << v4.stat.nDisposeCount );
-                CPPUNIT_CHECK_EX( v5.stat.nWaitingDispCount + 1 == v5.stat.nDisposeCount,
-                    "v5.stat.nWaitingDispCount=" << v5.stat.nWaitingDispCount << ", v5.stat.nDisposeCount=" << v5.stat.nDisposeCount );
-            }
-
-            {
-                data_array< value_type> arr;
-                value_type * pFirst = arr.begin();
-                value_type * pLast  = arr.end();
-
-                for ( value_type * p = pFirst; p != pLast; ++p ) {
-                    CPPUNIT_ASSERT( t.insert( *p ) );
-                    CPPUNIT_ASSERT( !t.insert( *p ));
-                }
-                CPPUNIT_ASSERT( !t.empty() );
-                CPPUNIT_ASSERT( misc::check_size( t, c_nItemCount ));
-                CPPUNIT_ASSERT( t.check_consistency() );
-
-                for ( int n = 0; n < (int) c_nItemCount; ++n ) {
-                    CPPUNIT_ASSERT_MSG( t.contains( n ), n );
-                }
-                for ( value_type * p = pFirst; p != pLast; ++p ) {
-                    CPPUNIT_ASSERT( t.contains( *p ));
-                    CPPUNIT_ASSERT( t.contains( p->nKey ));
-                    CPPUNIT_ASSERT( t.unlink( *p ) );
-                    CPPUNIT_ASSERT( !t.unlink( *p ) );
-                    CPPUNIT_ASSERT( !t.contains( p->nKey ));
-                }
-
-                tree_type::gc::force_dispose();
-            }
-        }
-
-        template <class Tree, class PrintStat>
-        void test()
-        {
-            typedef Tree tree_type;
-            typedef typename tree_type::key_type     key_type;
-            typedef typename tree_type::value_type   value_type;
-
-            tree_type t;
-            test_common(t);
-
-            {
-                value_type v1( 10, 100 );
-                value_type v2( 20, 200 );
-                value_type v3( 30, 300 );
-                value_type v4( 25, 250 );
-                value_type v5( -50, -500 );
-
-                // extract/extract_min/extract_max
-                CPPUNIT_ASSERT( t.insert( v1 ));
-                CPPUNIT_ASSERT( t.insert( v2 ));
-                CPPUNIT_ASSERT( t.insert( v3 ));
-                CPPUNIT_ASSERT( t.insert( v4 ));
-                CPPUNIT_ASSERT( t.insert( v5 ));
-                CPPUNIT_ASSERT( t.check_consistency() );
-                CPPUNIT_ASSERT( !t.empty() );
-                CPPUNIT_ASSERT( misc::check_size( t, 5 ));
-
-                {
-                    typename tree_type::guarded_ptr gp;
-
-                    gp = t.get( v2.nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == v2.nKey );
-                    gp = t.extract( v2.nKey );
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_ASSERT( t.check_consistency() );
-                    CPPUNIT_ASSERT( !t.empty() );
-                    CPPUNIT_ASSERT( misc::check_size( t, 4 ));
-                    CPPUNIT_ASSERT( gp->nKey == v2.nKey );
-                    gp = t.extract( v2.nKey );
-                    CPPUNIT_ASSERT( !gp );
-                    gp = t.get( v2.nKey );
-                    CPPUNIT_CHECK( !gp );
-                    CPPUNIT_ASSERT( t.check_consistency() );
-                    CPPUNIT_ASSERT( !t.empty() );
-                    CPPUNIT_ASSERT( misc::check_size( t, 4 ));
-
-                    gp = t.extract_min();
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_ASSERT( t.check_consistency() );
-                    CPPUNIT_ASSERT( !t.empty() );
-                    CPPUNIT_ASSERT( misc::check_size( t, 3 ));
-                    CPPUNIT_ASSERT( gp->nKey == v5.nKey );
-
-                    gp = t.extract_min();
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( t.check_consistency() );
-                    CPPUNIT_ASSERT( !t.empty() );
-                    CPPUNIT_ASSERT( misc::check_size( t, 2 ));
-                    CPPUNIT_ASSERT( gp->nKey == v1.nKey );
-
-                    gp = t.extract_min();
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( t.check_consistency() );
-                    CPPUNIT_ASSERT( !t.empty() );
-                    CPPUNIT_ASSERT( misc::check_size( t, 1 ));
-                    CPPUNIT_ASSERT( gp->nKey == v4.nKey );
-
-                    gp = t.extract_min();
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( t.check_consistency() );
-                    CPPUNIT_ASSERT( t.empty() );
-                    CPPUNIT_ASSERT( misc::check_size( t, 0 ));
-                    CPPUNIT_ASSERT( gp->nKey == v3.nKey );
-
-                    gp = t.extract_min();
-                    CPPUNIT_ASSERT( !gp );
-                    CPPUNIT_ASSERT( !t.extract_max());
-                    CPPUNIT_ASSERT( !t.extract( v1.nKey ));
-                }
-
-                tree_type::gc::force_dispose();
-
-                {
-                    typename tree_type::guarded_ptr gp;
-
-                    CPPUNIT_ASSERT( t.insert( v1 ));
-                    CPPUNIT_ASSERT( t.insert( v2 ));
-                    CPPUNIT_ASSERT( t.insert( v3 ));
-                    CPPUNIT_ASSERT( t.insert( v4 ));
-                    CPPUNIT_ASSERT( t.insert( v5 ));
-                    CPPUNIT_ASSERT( t.check_consistency() );
-                    CPPUNIT_ASSERT( !t.empty() );
-                    CPPUNIT_ASSERT( misc::check_size( t, 5 ));
-
-                    gp = t.get_with( wrapped_int( v4.nKey ), wrapped_less<value_type>());
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == v4.nKey );
-                    gp = t.extract_with( wrapped_int( v4.nKey ), wrapped_less<value_type>());
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( t.check_consistency() );
-                    CPPUNIT_ASSERT( !t.empty() );
-                    CPPUNIT_ASSERT( misc::check_size( t, 4 ));
-                    CPPUNIT_ASSERT( gp->nKey == v4.nKey );
-
-                    gp = t.extract_with( v4.nKey, less<value_type>());
-                    CPPUNIT_ASSERT( !gp );
-                    CPPUNIT_ASSERT( t.check_consistency() );
-                    CPPUNIT_ASSERT( !t.get_with( v4.nKey, less<value_type>() ) );
-
-                    gp = t.extract_max();
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( t.check_consistency() );
-                    CPPUNIT_ASSERT( !t.empty() );
-                    CPPUNIT_ASSERT( misc::check_size( t, 3 ));
-                    CPPUNIT_ASSERT( gp->nKey == v3.nKey );
-
-                    gp = t.extract_max();
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( t.check_consistency() );
-                    CPPUNIT_ASSERT( !t.empty() );
-                    CPPUNIT_ASSERT( misc::check_size( t, 2 ));
-                    CPPUNIT_ASSERT( gp->nKey == v2.nKey );
-
-                    gp = t.extract_max();
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( t.check_consistency() );
-                    CPPUNIT_ASSERT( !t.empty() );
-                    CPPUNIT_ASSERT( misc::check_size( t, 1 ));
-                    CPPUNIT_ASSERT( gp->nKey == v1.nKey );
-
-                    gp = t.extract_max();
-                    CPPUNIT_ASSERT( gp );
-                    CPPUNIT_ASSERT( t.check_consistency() );
-                    CPPUNIT_ASSERT( t.empty() );
-                    CPPUNIT_ASSERT( misc::check_size( t, 0 ));
-                    CPPUNIT_ASSERT( gp->nKey == v5.nKey );
-                }
-
-                tree_type::gc::force_dispose();
-            }
-
-            {
-                data_array< value_type> arr;
-                value_type * pFirst = arr.begin();
-                value_type * pLast  = arr.end();
-
-                for ( value_type * p = pFirst; p != pLast; ++p ) {
-                    CPPUNIT_ASSERT( t.update( *p, update_functor()).second );
-                }
-                for ( int n = 0; n < (int) c_nItemCount; ++n ) {
-                    typename tree_type::guarded_ptr gp( t.extract_min() );
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == n );
-                }
-
-                for ( value_type * p = pFirst; p != pLast; ++p ) {
-                    CPPUNIT_ASSERT( t.insert( *p ) );
-                }
-                for ( int n = (int) c_nItemCount - 1; n >= 0; --n ) {
-                    typename tree_type::guarded_ptr gp( t.extract_max());
-                    CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_CHECK( gp->nKey == n );
-                }
-
-                tree_type::gc::force_dispose();
-            }
-
-            PrintStat()( t );
-        }
-
-        template <class Tree, class PrintStat>
-        void test_rcu()
-        {
-            typedef Tree tree_type;
-            typedef typename tree_type::key_type     key_type;
-            typedef typename tree_type::value_type   value_type;
-
-            tree_type t;
-            test_common(t);
-
-            // extract/get
-            {
-                value_type v1( 10, 100 );
-                value_type v2( 20, 200 );
-                value_type v3( 30, 300 );
-                value_type v4( 25, 250 );
-                value_type v5( -50, -500 );
-
-                // extract/extract_min/extract_max
-                CPPUNIT_ASSERT( t.insert( v1 ));
-                CPPUNIT_ASSERT( t.insert( v2 ));
-                CPPUNIT_ASSERT( t.insert( v3 ));
-                CPPUNIT_ASSERT( t.insert( v4 ));
-                CPPUNIT_ASSERT( t.insert( v5 ));
-                CPPUNIT_ASSERT( t.check_consistency() );
-                CPPUNIT_ASSERT( !t.empty() );
-                CPPUNIT_ASSERT( misc::check_size( t, 5 ));
-
-                typename tree_type::exempt_ptr  ep;
-                typename tree_type::value_type * pVal;
-                {
-                    typename tree_type::rcu_lock l;
-                    pVal = t.get( v1.nKey );
-                    CPPUNIT_ASSERT( pVal != nullptr );
-                    CPPUNIT_CHECK( pVal == &v1 );
-                }
-                ep = t.extract( v1.nKey );
-                CPPUNIT_ASSERT( !ep.empty());
-                CPPUNIT_CHECK( ep->nKey == v1.nKey );
-                {
-                    typename tree_type::rcu_lock l;
-                    CPPUNIT_CHECK( t.get( v1.nKey ) == nullptr );
-                }
-                ep.release();
-                ep = t.extract( v1.nKey );
-                CPPUNIT_ASSERT( ep.empty());
-
-                ep = t.extract_min();
-                CPPUNIT_ASSERT( !ep.empty() );
-                CPPUNIT_CHECK( ep->nKey == v5.nKey );
-                {
-                    typename tree_type::rcu_lock l;
-                    CPPUNIT_CHECK( t.get( v5.nKey ) == nullptr );
-                }
-
-                ep = t.extract( v5.nKey );
-                CPPUNIT_ASSERT( ep.empty() );
-
-                ep = t.extract_max();
-                CPPUNIT_ASSERT( !ep.empty());
-                CPPUNIT_CHECK( ep->nKey == v3.nKey );
-                {
-                    typename tree_type::rcu_lock l;
-                    CPPUNIT_CHECK( t.get( v3.nKey ) == nullptr );
-                }
-                ep.release();
-
-                {
-                    typename tree_type::rcu_lock l;
-                    pVal = t.get_with( wrapped_int(v2.nKey), wrapped_less<value_type>() );
-                    CPPUNIT_ASSERT( pVal != nullptr );
-                    CPPUNIT_CHECK( pVal == &v2 );
-                }
-                ep = t.extract_with( wrapped_int( v2.nKey ), wrapped_less<value_type>() );
-                CPPUNIT_ASSERT( !ep.empty() );
-                CPPUNIT_CHECK( ep->nKey == v2.nKey );
-                {
-                    typename tree_type::rcu_lock l;
-                    CPPUNIT_CHECK( t.get_with( wrapped_int( v2.nKey ), wrapped_less<value_type>() ) == nullptr );
-                }
-                //ep.release();
-                ep = t.extract_with( wrapped_int( v2.nKey ), wrapped_less<value_type>() );
-                CPPUNIT_CHECK( ep.empty());
-
-                ep = t.extract( v4.nKey );
-                CPPUNIT_ASSERT( ep );
-                CPPUNIT_CHECK( ep->nKey == v4.nKey );
-                ep.release();
-
-                tree_type::gc::force_dispose();
-
-                CPPUNIT_CHECK( t.empty());
-                CPPUNIT_ASSERT( misc::check_size( t, 0 ));
-
-                {
-                    typename tree_type::rcu_lock l;
-                    CPPUNIT_CHECK( t.get( v1.nKey ) == nullptr );
-                    CPPUNIT_CHECK( t.get( v2.nKey ) == nullptr );
-                    CPPUNIT_CHECK( t.get( v3.nKey ) == nullptr );
-                    CPPUNIT_CHECK( t.get( v4.nKey ) == nullptr );
-                    CPPUNIT_CHECK( t.get( v5.nKey ) == nullptr );
-                }
-
-                CPPUNIT_CHECK( !t.extract(v1.nKey));
-                CPPUNIT_CHECK( !t.extract(v2.nKey));
-                CPPUNIT_CHECK( !t.extract(v3.nKey));
-                CPPUNIT_CHECK( !t.extract(v4.nKey));
-                CPPUNIT_CHECK( !t.extract(v5.nKey));
-
-                tree_type::gc::force_dispose();
-            }
-
-            PrintStat()( t );
-        }
-
-        void EllenBinTree_hp_base_less();
-        void EllenBinTree_hp_base_cmp();
-        void EllenBinTree_hp_base_cmpless();
-        void EllenBinTree_hp_base_less_ic();
-        void EllenBinTree_hp_base_cmp_ic();
-        void EllenBinTree_hp_base_less_stat();
-        void EllenBinTree_hp_base_cmp_ic_stat();
-        void EllenBinTree_hp_base_cmp_ic_stat_yield();
-        void EllenBinTree_hp_base_less_pool();
-        void EllenBinTree_hp_base_less_pool_ic_stat();
-
-        void EllenBinTree_hp_member_less();
-        void EllenBinTree_hp_member_cmp();
-        void EllenBinTree_hp_member_cmpless();
-        void EllenBinTree_hp_member_less_ic();
-        void EllenBinTree_hp_member_cmp_ic();
-        void EllenBinTree_hp_member_less_stat();
-        void EllenBinTree_hp_member_cmp_ic_stat();
-        void EllenBinTree_hp_member_cmp_ic_stat_yield();
-        void EllenBinTree_hp_member_less_pool();
-        void EllenBinTree_hp_member_less_pool_ic_stat();
-
-        void EllenBinTree_dhp_base_less();
-        void EllenBinTree_dhp_base_cmp();
-        void EllenBinTree_dhp_base_cmpless();
-        void EllenBinTree_dhp_base_less_ic();
-        void EllenBinTree_dhp_base_cmp_ic();
-        void EllenBinTree_dhp_base_less_stat();
-        void EllenBinTree_dhp_base_cmp_ic_stat();
-        void EllenBinTree_dhp_base_cmp_ic_stat_yield();
-        void EllenBinTree_dhp_base_less_pool();
-        void EllenBinTree_dhp_base_less_pool_ic_stat();
-
-        void EllenBinTree_dhp_member_less();
-        void EllenBinTree_dhp_member_cmp();
-        void EllenBinTree_dhp_member_cmpless();
-        void EllenBinTree_dhp_member_less_ic();
-        void EllenBinTree_dhp_member_cmp_ic();
-        void EllenBinTree_dhp_member_less_stat();
-        void EllenBinTree_dhp_member_cmp_ic_stat();
-        void EllenBinTree_dhp_member_cmp_ic_stat_yield();
-        void EllenBinTree_dhp_member_less_pool();
-        void EllenBinTree_dhp_member_less_pool_ic_stat();
-
-        void EllenBinTree_rcu_gpi_base_less();
-        void EllenBinTree_rcu_gpi_base_cmp();
-        void EllenBinTree_rcu_gpi_base_cmpless();
-        void EllenBinTree_rcu_gpi_base_less_ic();
-        void EllenBinTree_rcu_gpi_base_cmp_ic();
-        void EllenBinTree_rcu_gpi_base_less_stat();
-        void EllenBinTree_rcu_gpi_base_cmp_ic_stat();
-        void EllenBinTree_rcu_gpi_base_cmp_ic_stat_yield();
-        void EllenBinTree_rcu_gpi_base_less_pool();
-        void EllenBinTree_rcu_gpi_base_less_pool_ic_stat();
-
-        void EllenBinTree_rcu_gpi_member_less();
-        void EllenBinTree_rcu_gpi_member_cmp();
-        void EllenBinTree_rcu_gpi_member_cmpless();
-        void EllenBinTree_rcu_gpi_member_less_ic();
-        void EllenBinTree_rcu_gpi_member_cmp_ic();
-        void EllenBinTree_rcu_gpi_member_less_stat();
-        void EllenBinTree_rcu_gpi_member_cmp_ic_stat();
-        void EllenBinTree_rcu_gpi_member_cmp_ic_stat_yield();
-        void EllenBinTree_rcu_gpi_member_less_pool();
-        void EllenBinTree_rcu_gpi_member_less_pool_ic_stat();
-
-        void EllenBinTree_rcu_gpb_base_less();
-        void EllenBinTree_rcu_gpb_base_cmp();
-        void EllenBinTree_rcu_gpb_base_cmpless();
-        void EllenBinTree_rcu_gpb_base_less_ic();
-        void EllenBinTree_rcu_gpb_base_cmp_ic();
-        void EllenBinTree_rcu_gpb_base_less_stat();
-        void EllenBinTree_rcu_gpb_base_cmp_ic_stat();
-        void EllenBinTree_rcu_gpb_base_cmp_ic_stat_yield();
-        void EllenBinTree_rcu_gpb_base_less_pool();
-        void EllenBinTree_rcu_gpb_base_less_pool_ic_stat();
-
-        void EllenBinTree_rcu_gpb_member_less();
-        void EllenBinTree_rcu_gpb_member_cmp();
-        void EllenBinTree_rcu_gpb_member_cmpless();
-        void EllenBinTree_rcu_gpb_member_less_ic();
-        void EllenBinTree_rcu_gpb_member_cmp_ic();
-        void EllenBinTree_rcu_gpb_member_less_stat();
-        void EllenBinTree_rcu_gpb_member_cmp_ic_stat();
-        void EllenBinTree_rcu_gpb_member_cmp_ic_stat_yield();
-        void EllenBinTree_rcu_gpb_member_less_pool();
-        void EllenBinTree_rcu_gpb_member_less_pool_ic_stat();
-
-        void EllenBinTree_rcu_gpt_base_less();
-        void EllenBinTree_rcu_gpt_base_cmp();
-        void EllenBinTree_rcu_gpt_base_cmpless();
-        void EllenBinTree_rcu_gpt_base_less_ic();
-        void EllenBinTree_rcu_gpt_base_cmp_ic();
-        void EllenBinTree_rcu_gpt_base_less_stat();
-        void EllenBinTree_rcu_gpt_base_cmp_ic_stat();
-        void EllenBinTree_rcu_gpt_base_cmp_ic_stat_yield();
-        void EllenBinTree_rcu_gpt_base_less_pool();
-        void EllenBinTree_rcu_gpt_base_less_pool_ic_stat();
-
-        void EllenBinTree_rcu_gpt_member_less();
-        void EllenBinTree_rcu_gpt_member_cmp();
-        void EllenBinTree_rcu_gpt_member_cmpless();
-        void EllenBinTree_rcu_gpt_member_less_ic();
-        void EllenBinTree_rcu_gpt_member_cmp_ic();
-        void EllenBinTree_rcu_gpt_member_less_stat();
-        void EllenBinTree_rcu_gpt_member_cmp_ic_stat();
-        void EllenBinTree_rcu_gpt_member_cmp_ic_stat_yield();
-        void EllenBinTree_rcu_gpt_member_less_pool();
-        void EllenBinTree_rcu_gpt_member_less_pool_ic_stat();
-
-        void EllenBinTree_rcu_shb_base_less();
-        void EllenBinTree_rcu_shb_base_cmp();
-        void EllenBinTree_rcu_shb_base_cmpless();
-        void EllenBinTree_rcu_shb_base_less_ic();
-        void EllenBinTree_rcu_shb_base_cmp_ic();
-        void EllenBinTree_rcu_shb_base_less_stat();
-        void EllenBinTree_rcu_shb_base_cmp_ic_stat();
-        void EllenBinTree_rcu_shb_base_cmp_ic_stat_yield();
-        void EllenBinTree_rcu_shb_base_less_pool();
-        void EllenBinTree_rcu_shb_base_less_pool_ic_stat();
-
-        void EllenBinTree_rcu_shb_member_less();
-        void EllenBinTree_rcu_shb_member_cmp();
-        void EllenBinTree_rcu_shb_member_cmpless();
-        void EllenBinTree_rcu_shb_member_less_ic();
-        void EllenBinTree_rcu_shb_member_cmp_ic();
-        void EllenBinTree_rcu_shb_member_less_stat();
-        void EllenBinTree_rcu_shb_member_cmp_ic_stat();
-        void EllenBinTree_rcu_shb_member_cmp_ic_stat_yield();
-        void EllenBinTree_rcu_shb_member_less_pool();
-        void EllenBinTree_rcu_shb_member_less_pool_ic_stat();
-
-        void EllenBinTree_rcu_sht_base_less();
-        void EllenBinTree_rcu_sht_base_cmp();
-        void EllenBinTree_rcu_sht_base_cmpless();
-        void EllenBinTree_rcu_sht_base_less_ic();
-        void EllenBinTree_rcu_sht_base_cmp_ic();
-        void EllenBinTree_rcu_sht_base_less_stat();
-        void EllenBinTree_rcu_sht_base_cmp_ic_stat();
-        void EllenBinTree_rcu_sht_base_cmp_ic_stat_yield();
-        void EllenBinTree_rcu_sht_base_less_pool();
-        void EllenBinTree_rcu_sht_base_less_pool_ic_stat();
-
-        void EllenBinTree_rcu_sht_member_less();
-        void EllenBinTree_rcu_sht_member_cmp();
-        void EllenBinTree_rcu_sht_member_cmpless();
-        void EllenBinTree_rcu_sht_member_less_ic();
-        void EllenBinTree_rcu_sht_member_cmp_ic();
-        void EllenBinTree_rcu_sht_member_less_stat();
-        void EllenBinTree_rcu_sht_member_cmp_ic_stat();
-        void EllenBinTree_rcu_sht_member_cmp_ic_stat_yield();
-        void EllenBinTree_rcu_sht_member_less_pool();
-        void EllenBinTree_rcu_sht_member_less_pool_ic_stat();
-
-        CPPUNIT_TEST_SUITE(IntrusiveBinTreeHdrTest)
-            CPPUNIT_TEST(EllenBinTree_hp_base_less)
-            CPPUNIT_TEST(EllenBinTree_hp_base_cmp)
-            CPPUNIT_TEST(EllenBinTree_hp_base_less_stat)
-            CPPUNIT_TEST(EllenBinTree_hp_base_cmpless)
-            CPPUNIT_TEST(EllenBinTree_hp_base_less_ic)
-            CPPUNIT_TEST(EllenBinTree_hp_base_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_hp_base_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_hp_base_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_hp_base_less_pool )
-            CPPUNIT_TEST(EllenBinTree_hp_base_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_hp_member_less)
-            CPPUNIT_TEST(EllenBinTree_hp_member_cmp)
-            CPPUNIT_TEST(EllenBinTree_hp_member_less_stat)
-            CPPUNIT_TEST(EllenBinTree_hp_member_cmpless)
-            CPPUNIT_TEST(EllenBinTree_hp_member_less_ic)
-            CPPUNIT_TEST(EllenBinTree_hp_member_cmp_ic)
-            CPPUNIT_TEST( EllenBinTree_hp_member_cmp_ic_stat )
-            CPPUNIT_TEST( EllenBinTree_hp_member_cmp_ic_stat_yield )
-            CPPUNIT_TEST(EllenBinTree_hp_member_less_pool)
-            CPPUNIT_TEST(EllenBinTree_hp_member_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_dhp_base_less)
-            CPPUNIT_TEST(EllenBinTree_dhp_base_cmp)
-            CPPUNIT_TEST(EllenBinTree_dhp_base_less_stat)
-            CPPUNIT_TEST(EllenBinTree_dhp_base_cmpless)
-            CPPUNIT_TEST(EllenBinTree_dhp_base_less_ic)
-            CPPUNIT_TEST(EllenBinTree_dhp_base_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_dhp_base_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_dhp_base_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_dhp_base_less_pool )
-            CPPUNIT_TEST(EllenBinTree_dhp_base_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_dhp_member_less)
-            CPPUNIT_TEST(EllenBinTree_dhp_member_cmp)
-            CPPUNIT_TEST(EllenBinTree_dhp_member_less_stat)
-            CPPUNIT_TEST(EllenBinTree_dhp_member_cmpless)
-            CPPUNIT_TEST(EllenBinTree_dhp_member_less_ic)
-            CPPUNIT_TEST(EllenBinTree_dhp_member_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_dhp_member_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_dhp_member_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_dhp_member_less_pool )
-            CPPUNIT_TEST(EllenBinTree_dhp_member_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_base_less)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_base_cmp)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_base_less_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_base_cmpless)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_base_less_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_base_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_base_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_rcu_gpi_base_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_rcu_gpi_base_less_pool )
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_base_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_member_less)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_member_cmp)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_member_less_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_member_cmpless)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_member_less_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_member_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_member_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_rcu_gpi_member_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_rcu_gpi_member_less_pool )
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_member_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_base_less)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_base_cmp)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_base_less_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_base_cmpless)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_base_less_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_base_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_base_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_rcu_gpb_base_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_rcu_gpb_base_less_pool )
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_base_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_member_less)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_member_cmp)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_member_less_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_member_cmpless)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_member_less_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_member_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_member_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_rcu_gpb_member_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_rcu_gpb_member_less_pool )
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_member_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_base_less)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_base_cmp)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_base_less_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_base_cmpless)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_base_less_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_base_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_base_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_rcu_gpt_base_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_rcu_gpt_base_less_pool )
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_base_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_member_less)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_member_cmp)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_member_less_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_member_cmpless)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_member_less_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_member_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_member_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_rcu_gpt_member_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_rcu_gpt_member_less_pool )
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_member_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_base_less)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_base_cmp)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_base_less_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_base_cmpless)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_base_less_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_base_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_base_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_rcu_shb_base_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_rcu_shb_base_less_pool )
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_base_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_member_less)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_member_cmp)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_member_less_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_member_cmpless)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_member_less_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_member_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_member_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_rcu_shb_member_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_rcu_shb_member_less_pool )
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_member_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_base_less)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_base_cmp)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_base_less_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_base_cmpless)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_base_less_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_base_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_base_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_rcu_sht_base_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_rcu_sht_base_less_pool )
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_base_less_pool_ic_stat)
-
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_member_less)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_member_cmp)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_member_less_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_member_cmpless)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_member_less_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_member_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_member_cmp_ic_stat)
-            CPPUNIT_TEST( EllenBinTree_rcu_sht_member_cmp_ic_stat_yield )
-            CPPUNIT_TEST( EllenBinTree_rcu_sht_member_less_pool )
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_member_less_pool_ic_stat)
-
-        CPPUNIT_TEST_SUITE_END()
-    };
-} // namespace tree
-
-#endif // #ifndef CDSTEST_HDR_INTRUSIVE_BINTREE_H
diff --git a/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_dhp.cpp b/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_dhp.cpp
deleted file mode 100644 (file)
index b98542e..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_intrusive_bintree.h"
-#include <cds/intrusive/ellen_bintree_dhp.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_dhp.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-    namespace ci = cds::intrusive;
-    namespace co = cds::opt;
-    namespace {
-        typedef ci::ellen_bintree::node<cds::gc::DHP>                       leaf_node;
-        typedef IntrusiveBinTreeHdrTest::base_hook_value< leaf_node >       base_value;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-
-        typedef ci::ellen_bintree::internal_node< IntrusiveBinTreeHdrTest::key_type, leaf_node > internal_node;
-        typedef ci::ellen_bintree::update_desc< leaf_node, internal_node >   update_desc;
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_base_less()
-    {
-        struct tree_traits : public ci::ellen_bintree::traits
-        {
-            typedef ci::ellen_bintree::base_hook< co::gc< cds::gc::DHP >> hook;
-            typedef IntrusiveBinTreeHdrTest::key_extractor< base_value > key_extractor;
-            typedef IntrusiveBinTreeHdrTest::less< base_value > less;
-            typedef IntrusiveBinTreeHdrTest::disposer< base_value > disposer;
-        };
-        typedef ci::EllenBinTree< cds::gc::DHP, key_type, base_value, tree_traits > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_base_less_stat()
-    {
-        typedef ci::EllenBinTree< cds::gc::DHP, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< cds::gc::DHP > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_base_cmp()
-    {
-        typedef ci::EllenBinTree< cds::gc::DHP, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< cds::gc::DHP > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_base_cmpless()
-    {
-        typedef ci::EllenBinTree< cds::gc::DHP, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< cds::gc::DHP > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_base_less_ic()
-    {
-        typedef ci::EllenBinTree< cds::gc::DHP, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< cds::gc::DHP > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_base_cmp_ic()
-    {
-        typedef ci::EllenBinTree< cds::gc::DHP, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< cds::gc::DHP > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_base_cmp_ic_stat()
-    {
-        typedef ci::EllenBinTree< cds::gc::DHP, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< cds::gc::DHP > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_base_cmp_ic_stat_yield()
-    {
-        typedef ci::EllenBinTree< cds::gc::DHP, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< cds::gc::DHP > > >
-                , ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                , co::compare< compare< base_value > >
-                , ci::opt::disposer< disposer< base_value > >
-                , co::item_counter< cds::atomicity::item_counter >
-                , co::stat< ci::ellen_bintree::stat<> >
-                , co::back_off< cds::backoff::yield >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_base_less_pool()
-    {
-        typedef ci::EllenBinTree< cds::gc::DHP, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< cds::gc::DHP > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_dhp::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_dhp::update_desc_pool_accessor > >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_base_less_pool_ic_stat()
-    {
-        typedef ci::EllenBinTree< cds::gc::DHP, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< cds::gc::DHP > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_dhp::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_dhp::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-
-} //namespace tree
diff --git a/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_dhp_member.cpp b/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_dhp_member.cpp
deleted file mode 100644 (file)
index ac13412..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_intrusive_bintree.h"
-#include <cds/intrusive/ellen_bintree_dhp.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_dhp.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-    namespace ci = cds::intrusive;
-    namespace co = cds::opt;
-    namespace {
-        typedef ci::ellen_bintree::node<cds::gc::DHP>                        leaf_node;
-        typedef IntrusiveBinTreeHdrTest::member_hook_value< leaf_node >     member_value;
-
-        typedef ci::opt::hook< ci::ellen_bintree::member_hook< offsetof(member_value, hook), co::gc< cds::gc::DHP > > > member_hook;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-
-        typedef ci::ellen_bintree::internal_node< IntrusiveBinTreeHdrTest::key_type, leaf_node > internal_node;
-        typedef ci::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_less()
-    {
-        struct tree_traits : public ci::ellen_bintree::traits
-        {
-            typedef ci::ellen_bintree::member_hook< offsetof( member_value, hook ), co::gc< cds::gc::DHP >> hook;
-            typedef IntrusiveBinTreeHdrTest::key_extractor< member_value > key_extractor;
-            typedef IntrusiveBinTreeHdrTest::less< member_value > less;
-            typedef IntrusiveBinTreeHdrTest::disposer< member_value > disposer;
-        };
-        typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value, tree_traits > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_less_stat()
-    {
-        typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_cmp()
-    {
-        typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_cmpless()
-    {
-        typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_less_ic()
-    {
-        typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_cmp_ic()
-    {
-        typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_cmp_ic_stat()
-    {
-        typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_cmp_ic_stat_yield()
-    {
-        typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-                ,co::back_off< cds::backoff::yield >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_less_pool()
-    {
-        typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_dhp::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_dhp::update_desc_pool_accessor > >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_less_pool_ic_stat()
-    {
-        typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_dhp::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_dhp::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-
-} //namespace tree
diff --git a/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_hp.cpp b/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_hp.cpp
deleted file mode 100644 (file)
index bd06aa6..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_intrusive_bintree.h"
-#include <cds/intrusive/ellen_bintree_hp.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_hp.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-    namespace ci = cds::intrusive;
-    namespace co = cds::opt;
-    namespace {
-        typedef ci::ellen_bintree::node<cds::gc::HP>                        leaf_node;
-        typedef IntrusiveBinTreeHdrTest::base_hook_value< leaf_node >       base_value;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-
-        typedef ci::ellen_bintree::internal_node< IntrusiveBinTreeHdrTest::key_type, leaf_node > internal_node;
-        typedef ci::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_base_less()
-    {
-        struct tree_traits : public ci::ellen_bintree::traits
-        {
-            typedef ci::ellen_bintree::base_hook< co::gc< cds::gc::HP >> hook;
-            typedef IntrusiveBinTreeHdrTest::key_extractor< base_value > key_extractor;
-            typedef IntrusiveBinTreeHdrTest::less< base_value > less;
-            typedef IntrusiveBinTreeHdrTest::disposer< base_value > disposer;
-        };
-        typedef ci::EllenBinTree< cds::gc::HP, key_type, base_value, tree_traits > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_base_less_stat()
-    {
-        typedef ci::EllenBinTree< cds::gc::HP, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< cds::gc::HP > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_base_cmp()
-    {
-        typedef ci::EllenBinTree< cds::gc::HP, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< cds::gc::HP > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_base_cmpless()
-    {
-        typedef ci::EllenBinTree< cds::gc::HP, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< cds::gc::HP > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_base_less_ic()
-    {
-        typedef ci::EllenBinTree< cds::gc::HP, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< cds::gc::HP > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_base_cmp_ic()
-    {
-        typedef ci::EllenBinTree< cds::gc::HP, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< cds::gc::HP > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_base_cmp_ic_stat()
-    {
-        typedef ci::EllenBinTree< cds::gc::HP, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< cds::gc::HP > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_base_cmp_ic_stat_yield()
-    {
-        typedef ci::EllenBinTree< cds::gc::HP, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< cds::gc::HP > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-                , co::back_off< cds::backoff::yield >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_base_less_pool()
-    {
-        typedef ci::EllenBinTree< cds::gc::HP, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< cds::gc::HP > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_hp::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_hp::update_desc_pool_accessor > >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_base_less_pool_ic_stat()
-    {
-        typedef ci::EllenBinTree< cds::gc::HP, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< cds::gc::HP > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_hp::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_hp::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-
-} //namespace tree
diff --git a/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_hp_member.cpp b/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_hp_member.cpp
deleted file mode 100644 (file)
index 1400c85..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_intrusive_bintree.h"
-#include <cds/intrusive/ellen_bintree_hp.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_hp.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-    namespace ci = cds::intrusive;
-    namespace co = cds::opt;
-    namespace {
-        typedef ci::ellen_bintree::node<cds::gc::HP>                        leaf_node;
-        typedef IntrusiveBinTreeHdrTest::member_hook_value< leaf_node >     member_value;
-
-        typedef ci::opt::hook< ci::ellen_bintree::member_hook< offsetof(member_value, hook), co::gc< cds::gc::HP > > > member_hook;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-
-        typedef ci::ellen_bintree::internal_node< IntrusiveBinTreeHdrTest::key_type, leaf_node > internal_node;
-        typedef ci::ellen_bintree::update_desc< leaf_node, internal_node >   update_desc;
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_less()
-    {
-        struct tree_traits : public ci::ellen_bintree::traits
-        {
-            typedef ci::ellen_bintree::member_hook< offsetof( member_value, hook ), co::gc< cds::gc::HP >> hook;
-            typedef IntrusiveBinTreeHdrTest::key_extractor< member_value > key_extractor;
-            typedef IntrusiveBinTreeHdrTest::less< member_value > less;
-            typedef IntrusiveBinTreeHdrTest::disposer< member_value > disposer;
-        };
-        typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_less_stat()
-    {
-        typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_cmp()
-    {
-        typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_cmpless()
-    {
-        typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_less_ic()
-    {
-        typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_cmp_ic()
-    {
-        typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_cmp_ic_stat()
-    {
-        typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_cmp_ic_stat_yield()
-    {
-        typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-                , co::back_off< cds::backoff::yield >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_less_pool()
-    {
-        typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_hp::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_hp::update_desc_pool_accessor > >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_less_pool_ic_stat()
-    {
-        typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_hp::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_hp::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test<tree_type, print_stat>();
-    }
-
-
-} //namespace tree
diff --git a/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_pool_dhp.h b/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_pool_dhp.h
deleted file mode 100644 (file)
index 6b9a826..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_INTRUSIVE_ELLEN_BINTREE_POOL_DHP_H
-#define CDSTEST_HDR_INTRUSIVE_ELLEN_BINTREE_POOL_DHP_H
-
-#include "tree/hdr_intrusive_bintree.h"
-#include <cds/intrusive/ellen_bintree_dhp.h>
-
-#include <cds/memory/vyukov_queue_pool.h>
-#include <cds/memory/pool_allocator.h>
-
-namespace tree {
-
-    namespace ellen_bintree_dhp {
-        typedef cds::intrusive::ellen_bintree::node_types<cds::gc::DHP, IntrusiveBinTreeHdrTest::key_type>   node_types;
-        typedef node_types::leaf_node_type                                  leaf_node;
-        typedef IntrusiveBinTreeHdrTest::base_hook_value< leaf_node >       base_value;
-        typedef node_types::internal_node_type                              internal_node;
-        typedef node_types::update_desc_type                                update_desc;
-
-
-        // Internal node pool based on Vyukov's queue
-        struct internal_node_pool_traits : public cds::memory::vyukov_queue_pool_traits
-        {
-            typedef cds::opt::v::dynamic_buffer< cds::any_type > buffer;
-        };
-        typedef cds::memory::lazy_vyukov_queue_pool< internal_node, internal_node_pool_traits > internal_node_pool_type;
-        extern internal_node_pool_type s_InternalNodePool;
-
-        struct internal_node_pool_accessor {
-            typedef internal_node_pool_type::value_type     value_type;
-
-            internal_node_pool_type& operator()() const
-            {
-                return s_InternalNodePool;
-            }
-        };
-
-        // Update descriptor pool based on Vyukov's queue
-        struct update_desc_pool_traits : public cds::memory::vyukov_queue_pool_traits
-        {
-            typedef cds::opt::v::static_buffer< cds::any_type, 16 > buffer;
-        };
-        typedef cds::memory::vyukov_queue_pool< update_desc, update_desc_pool_traits > update_desc_pool_type;
-        extern update_desc_pool_type s_UpdateDescPool;
-
-        struct update_desc_pool_accessor {
-            typedef update_desc_pool_type::value_type     value_type;
-
-            update_desc_pool_type& operator()() const
-            {
-                return s_UpdateDescPool;
-            }
-        };
-
-    } // namespace ellen_bintree_dhp
-
-} // namespace tree
-
-#endif // #ifndef CDSTEST_HDR_INTRUSIVE_ELLEN_BINTREE_POOL_DHP_H
diff --git a/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_pool_hp.h b/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_pool_hp.h
deleted file mode 100644 (file)
index 0c87a69..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_INTRUSIVE_ELLEN_BINTREE_POOL_HP_H
-#define CDSTEST_HDR_INTRUSIVE_ELLEN_BINTREE_POOL_HP_H
-
-#include "tree/hdr_intrusive_bintree.h"
-#include <cds/intrusive/ellen_bintree_hp.h>
-
-#include <cds/memory/vyukov_queue_pool.h>
-#include <cds/memory/pool_allocator.h>
-
-namespace tree {
-
-    namespace ellen_bintree_hp {
-        typedef cds::intrusive::ellen_bintree::node_types<cds::gc::HP, IntrusiveBinTreeHdrTest::key_type>   node_types;
-        typedef node_types::leaf_node_type                                  leaf_node;
-        typedef IntrusiveBinTreeHdrTest::base_hook_value< leaf_node >       base_value;
-        typedef node_types::internal_node_type                              internal_node;
-        typedef node_types::update_desc_type                                update_desc;
-
-        // Internal node pool based on Vyukov's queue
-        struct internal_node_pool_traits : public cds::memory::vyukov_queue_pool_traits
-        {
-            typedef cds::opt::v::dynamic_buffer< cds::any_type > buffer;
-        };
-        typedef cds::memory::lazy_vyukov_queue_pool< internal_node, internal_node_pool_traits > internal_node_pool_type;
-        extern internal_node_pool_type s_InternalNodePool;
-
-        struct internal_node_pool_accessor {
-            typedef internal_node_pool_type::value_type     value_type;
-
-            internal_node_pool_type& operator()() const
-            {
-                return s_InternalNodePool;
-            }
-        };
-
-        // Update descriptor pool based on Vyukov's queue
-        struct update_desc_pool_traits : public cds::memory::vyukov_queue_pool_traits
-        {
-            typedef cds::opt::v::static_buffer< cds::any_type, 16 > buffer;
-        };
-        typedef cds::memory::vyukov_queue_pool< update_desc, update_desc_pool_traits > update_desc_pool_type;
-        extern update_desc_pool_type s_UpdateDescPool;
-
-        struct update_desc_pool_accessor {
-            typedef update_desc_pool_type::value_type     value_type;
-
-            update_desc_pool_type& operator()() const
-            {
-                return s_UpdateDescPool;
-            }
-        };
-
-    } // namespace ellen_bintree_hp
-
-} // namespace tree
-
-#endif // #ifndef CDSTEST_HDR_INTRUSIVE_ELLEN_BINTREE_POOL_HP_H
diff --git a/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_pool_rcu.h b/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_pool_rcu.h
deleted file mode 100644 (file)
index d819f23..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSTEST_HDR_INTRUSIVE_ELLEN_BINTREE_POOL_RCU_H
-#define CDSTEST_HDR_INTRUSIVE_ELLEN_BINTREE_POOL_RCU_H
-
-#include "tree/hdr_intrusive_bintree.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/intrusive/ellen_bintree_rcu.h>
-
-#include <cds/memory/vyukov_queue_pool.h>
-#include <cds/memory/pool_allocator.h>
-
-namespace tree {
-
-    namespace ellen_bintree_rcu {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
-
-        typedef cds::intrusive::ellen_bintree::node_types<rcu_type, IntrusiveBinTreeHdrTest::key_type>   node_types;
-        typedef node_types::leaf_node_type                                  leaf_node;
-        typedef IntrusiveBinTreeHdrTest::base_hook_value< leaf_node >       base_value;
-        typedef node_types::internal_node_type                              internal_node;
-        typedef node_types::update_desc_type                                update_desc;
-
-
-        // Internal node pool based on Vyukov's queue
-        struct internal_node_pool_traits : public cds::memory::vyukov_queue_pool_traits
-        {
-            typedef cds::opt::v::dynamic_buffer< cds::any_type > buffer;
-        };
-        typedef cds::memory::lazy_vyukov_queue_pool< internal_node, internal_node_pool_traits > internal_node_pool_type;
-        extern internal_node_pool_type s_InternalNodePool;
-
-        struct internal_node_pool_accessor {
-            typedef internal_node_pool_type::value_type     value_type;
-
-            internal_node_pool_type& operator()() const
-            {
-                return s_InternalNodePool;
-            }
-        };
-
-        // Update descriptor pool based on Vyukov's queue
-        struct update_desc_pool_traits : public cds::memory::vyukov_queue_pool_traits
-        {
-            typedef cds::opt::v::static_buffer< cds::any_type, 16 > buffer;
-        };
-        typedef cds::memory::vyukov_queue_pool< update_desc, update_desc_pool_traits > update_desc_pool_type;
-        extern update_desc_pool_type s_UpdateDescPool;
-
-        struct update_desc_pool_accessor {
-            typedef update_desc_pool_type::value_type     value_type;
-
-            update_desc_pool_type& operator()() const
-            {
-                return s_UpdateDescPool;
-            }
-        };
-
-    } // namespace ellen_bintree_rcu
-
-} // namespace tree
-
-#endif // #ifndef CDSTEST_HDR_INTRUSIVE_ELLEN_BINTREE_POOL_RCU_H
diff --git a/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpb.cpp b/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpb.cpp
deleted file mode 100644 (file)
index f29b13c..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_intrusive_bintree.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/intrusive/ellen_bintree_rcu.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-    namespace ci = cds::intrusive;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_type;
-
-        typedef ci::ellen_bintree::node<rcu_type>                           leaf_node;
-        typedef IntrusiveBinTreeHdrTest::base_hook_value< leaf_node >       base_value;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-
-        typedef ci::ellen_bintree::internal_node< IntrusiveBinTreeHdrTest::key_type, leaf_node > internal_node;
-        typedef ci::ellen_bintree::update_desc< leaf_node, internal_node >   update_desc;
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_base_less()
-    {
-        struct tree_traits : public ci::ellen_bintree::traits
-        {
-            typedef ci::ellen_bintree::base_hook< co::gc< rcu_type >> hook;
-            typedef IntrusiveBinTreeHdrTest::key_extractor< base_value > key_extractor;
-            typedef IntrusiveBinTreeHdrTest::less< base_value > less;
-            typedef IntrusiveBinTreeHdrTest::disposer< base_value > disposer;
-        };
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value, tree_traits > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_base_less_stat()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_base_cmp()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_base_cmpless()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_base_less_ic()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_base_cmp_ic()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_base_cmp_ic_stat()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_base_cmp_ic_stat_yield()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-                , co::back_off< cds::backoff::yield >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_base_less_pool()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_base_less_pool_ic_stat()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-
-} //namespace tree
diff --git a/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpb_member.cpp b/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpb_member.cpp
deleted file mode 100644 (file)
index 8509288..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_intrusive_bintree.h"
-#include <cds/urcu/general_buffered.h>
-#include <cds/intrusive/ellen_bintree_rcu.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-    namespace ci = cds::intrusive;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_type;
-
-        typedef ci::ellen_bintree::node<rcu_type>                           leaf_node;
-        typedef IntrusiveBinTreeHdrTest::member_hook_value< leaf_node >     member_value;
-
-        typedef ci::opt::hook< ci::ellen_bintree::member_hook< offsetof(member_value, hook), co::gc< rcu_type > > > member_hook;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-
-        typedef ci::ellen_bintree::internal_node< IntrusiveBinTreeHdrTest::key_type, leaf_node > internal_node;
-        typedef ci::ellen_bintree::update_desc< leaf_node, internal_node >   update_desc;
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_member_less()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_member_less_stat()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_member_cmp()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_member_cmpless()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_member_less_ic()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_member_cmp_ic()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_member_cmp_ic_stat()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_member_cmp_ic_stat_yield()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-                , co::back_off< cds::backoff::yield >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_member_less_pool()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_member_less_pool_ic_stat()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-
-} //namespace tree
diff --git a/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpi.cpp b/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpi.cpp
deleted file mode 100644 (file)
index 033e5fb..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_intrusive_bintree.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/intrusive/ellen_bintree_rcu.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-    namespace ci = cds::intrusive;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
-
-        typedef ci::ellen_bintree::node<rcu_type>                           leaf_node;
-        typedef IntrusiveBinTreeHdrTest::base_hook_value< leaf_node >       base_value;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-
-        typedef ci::ellen_bintree::internal_node< IntrusiveBinTreeHdrTest::key_type, leaf_node > internal_node;
-        typedef ci::ellen_bintree::update_desc< leaf_node, internal_node >   update_desc;
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_base_less()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_base_less_stat()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_base_cmp()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_base_cmpless()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_base_less_ic()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_base_cmp_ic()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_base_cmp_ic_stat()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_base_cmp_ic_stat_yield()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-                , co::back_off< cds::backoff::yield >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_base_less_pool()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_base_less_pool_ic_stat()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-
-} //namespace tree
diff --git a/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpi_member.cpp b/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpi_member.cpp
deleted file mode 100644 (file)
index 8bfe577..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_intrusive_bintree.h"
-#include <cds/urcu/general_instant.h>
-#include <cds/intrusive/ellen_bintree_rcu.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-    namespace ci = cds::intrusive;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
-
-        typedef ci::ellen_bintree::node<rcu_type>                           leaf_node;
-        typedef IntrusiveBinTreeHdrTest::member_hook_value< leaf_node >     member_value;
-
-        typedef ci::opt::hook< ci::ellen_bintree::member_hook< offsetof(member_value, hook), co::gc< rcu_type > > > member_hook;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-
-        typedef ci::ellen_bintree::internal_node< IntrusiveBinTreeHdrTest::key_type, leaf_node > internal_node;
-        typedef ci::ellen_bintree::update_desc< leaf_node, internal_node >   update_desc;
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_member_less()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_member_less_stat()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_member_cmp()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_member_cmpless()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_member_less_ic()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_member_cmp_ic()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_member_cmp_ic_stat()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_member_cmp_ic_stat_yield()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-                , co::back_off< cds::backoff::yield >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_member_less_pool()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_member_less_pool_ic_stat()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-
-} //namespace tree
diff --git a/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpt.cpp b/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpt.cpp
deleted file mode 100644 (file)
index 7ffd834..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_intrusive_bintree.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/intrusive/ellen_bintree_rcu.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-    namespace ci = cds::intrusive;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_type;
-
-        typedef ci::ellen_bintree::node<rcu_type>                           leaf_node;
-        typedef IntrusiveBinTreeHdrTest::base_hook_value< leaf_node >       base_value;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-
-        typedef ci::ellen_bintree::internal_node< IntrusiveBinTreeHdrTest::key_type, leaf_node > internal_node;
-        typedef ci::ellen_bintree::update_desc< leaf_node, internal_node >   update_desc;
-}
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_base_less()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_base_less_stat()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_base_cmp()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_base_cmpless()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_base_less_ic()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_base_cmp_ic()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_base_cmp_ic_stat()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_base_cmp_ic_stat_yield()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-                , co::back_off< cds::backoff::yield >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_base_less_pool()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_base_less_pool_ic_stat()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-
-} //namespace tree
diff --git a/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpt_member.cpp b/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpt_member.cpp
deleted file mode 100644 (file)
index fa7fafd..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_intrusive_bintree.h"
-#include <cds/urcu/general_threaded.h>
-#include <cds/intrusive/ellen_bintree_rcu.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-    namespace ci = cds::intrusive;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_type;
-
-        typedef ci::ellen_bintree::node<rcu_type>                           leaf_node;
-        typedef IntrusiveBinTreeHdrTest::member_hook_value< leaf_node >     member_value;
-
-        typedef ci::opt::hook< ci::ellen_bintree::member_hook< offsetof(member_value, hook), co::gc< rcu_type > > > member_hook;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-
-        typedef ci::ellen_bintree::internal_node< IntrusiveBinTreeHdrTest::key_type, leaf_node > internal_node;
-        typedef ci::ellen_bintree::update_desc< leaf_node, internal_node >   update_desc;
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_member_less()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_member_less_stat()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_member_cmp()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_member_cmpless()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_member_less_ic()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_member_cmp_ic()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_member_cmp_ic_stat()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_member_cmp_ic_stat_yield()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-                , co::back_off< cds::backoff::yield >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_member_less_pool()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_member_less_pool_ic_stat()
-    {
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-    }
-
-
-} //namespace tree
diff --git a/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_shb.cpp b/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_shb.cpp
deleted file mode 100644 (file)
index 3c65862..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_intrusive_bintree.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/intrusive/ellen_bintree_rcu.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace ci = cds::intrusive;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_type;
-
-        typedef ci::ellen_bintree::node<rcu_type>                           leaf_node;
-        typedef IntrusiveBinTreeHdrTest::base_hook_value< leaf_node >       base_value;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-
-        typedef ci::ellen_bintree::internal_node< IntrusiveBinTreeHdrTest::key_type, leaf_node > internal_node;
-        typedef ci::ellen_bintree::update_desc< leaf_node, internal_node >   update_desc;
-    }
-#endif
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_base_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_base_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_base_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_base_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_base_less_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_base_cmp_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_base_cmp_ic_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_base_cmp_ic_stat_yield()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-                ,co::back_off< cds::backoff::yield >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_base_less_pool()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_base_less_pool_ic_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-
-} //namespace tree
diff --git a/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_shb_member.cpp b/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_shb_member.cpp
deleted file mode 100644 (file)
index fd6cd5b..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_intrusive_bintree.h"
-#include <cds/urcu/signal_buffered.h>
-#include <cds/intrusive/ellen_bintree_rcu.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace ci = cds::intrusive;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_type;
-
-        typedef ci::ellen_bintree::node<rcu_type>                           leaf_node;
-        typedef IntrusiveBinTreeHdrTest::member_hook_value< leaf_node >     member_value;
-
-        typedef ci::opt::hook< ci::ellen_bintree::member_hook< offsetof(member_value, hook), co::gc< rcu_type > > > member_hook;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-
-        typedef ci::ellen_bintree::internal_node< IntrusiveBinTreeHdrTest::key_type, leaf_node > internal_node;
-        typedef ci::ellen_bintree::update_desc< leaf_node, internal_node >   update_desc;
-    }
-#endif
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_member_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_member_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_member_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_member_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_member_less_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_member_cmp_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_member_cmp_ic_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_member_cmp_ic_stat_yield()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-                ,co::back_off< cds::backoff::yield >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_member_less_pool()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_member_less_pool_ic_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-} //namespace tree
diff --git a/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_sht.cpp b/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_sht.cpp
deleted file mode 100644 (file)
index 2c5416b..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_intrusive_bintree.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/intrusive/ellen_bintree_rcu.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace ci = cds::intrusive;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_type;
-
-        typedef ci::ellen_bintree::node<rcu_type>                           leaf_node;
-        typedef IntrusiveBinTreeHdrTest::base_hook_value< leaf_node >       base_value;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-
-        typedef ci::ellen_bintree::internal_node< IntrusiveBinTreeHdrTest::key_type, leaf_node > internal_node;
-        typedef ci::ellen_bintree::update_desc< leaf_node, internal_node >   update_desc;
-    }
-#endif
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_base_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_base_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_base_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_base_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_base_less_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_base_cmp_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_base_cmp_ic_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_base_cmp_ic_stat_yield()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::compare< compare< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-                ,co::back_off< cds::backoff::yield >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_base_less_pool()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_base_less_pool_ic_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
-            ci::ellen_bintree::make_traits<
-                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
-                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
-                ,co::less< less< base_value > >
-                ,ci::opt::disposer< disposer< base_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-} //namespace tree
diff --git a/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_sht_member.cpp b/tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_sht_member.cpp
deleted file mode 100644 (file)
index 7a1c378..0000000
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_intrusive_bintree.h"
-#include <cds/urcu/signal_threaded.h>
-#include <cds/intrusive/ellen_bintree_rcu.h>
-
-#include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
-#include "unit/print_ellenbintree_stat.h"
-
-namespace tree {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    namespace ci = cds::intrusive;
-    namespace co = cds::opt;
-    namespace {
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_type;
-
-        typedef ci::ellen_bintree::node<rcu_type>                           leaf_node;
-        typedef IntrusiveBinTreeHdrTest::member_hook_value< leaf_node >     member_value;
-
-        typedef ci::opt::hook< ci::ellen_bintree::member_hook< offsetof(member_value, hook), co::gc< rcu_type > > > member_hook;
-
-        struct print_stat {
-            template <typename Tree>
-            void operator()( Tree const& t)
-            {
-                std::cout << t.statistics();
-            }
-        };
-
-        typedef ci::ellen_bintree::internal_node< IntrusiveBinTreeHdrTest::key_type, leaf_node > internal_node;
-        typedef ci::ellen_bintree::update_desc< leaf_node, internal_node >   update_desc;
-    }
-#endif
-
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_less()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_less_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_cmp()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_cmpless()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_less_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_cmp_ic()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_cmp_ic_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_cmp_ic_stat_yield()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::compare< compare< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-                ,co::back_off< cds::backoff::yield >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_less_pool()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_less_pool_ic_stat()
-    {
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
-            ci::ellen_bintree::make_traits<
-                member_hook
-                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
-                ,co::less< less< member_value > >
-                ,ci::opt::disposer< disposer< member_value > >
-                ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
-                ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< ci::ellen_bintree::stat<> >
-            >::type
-        > tree_type;
-
-        test_rcu<tree_type, print_stat>();
-#endif
-    }
-
-} //namespace tree
diff --git a/tests/test-hdr/tree/hdr_tree_reg.cpp b/tests/test-hdr/tree/hdr_tree_reg.cpp
deleted file mode 100644 (file)
index dcf9428..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "tree/hdr_intrusive_bintree.h"
-#include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
-#include "tree/hdr_intrusive_ellen_bintree_pool_hp.h"
-#include "tree/hdr_intrusive_ellen_bintree_pool_dhp.h"
-
-#include "tree/hdr_ellenbintree_set.h"
-#include "tree/hdr_ellenbintree_map.h"
-#include "tree/hdr_bronson_avltree_map.h"
-
-namespace tree {
-    namespace ellen_bintree_rcu {
-        internal_node_pool_type s_InternalNodePool( 1024 * 8 );
-        update_desc_pool_type   s_UpdateDescPool;
-    }
-    namespace ellen_bintree_hp {
-        internal_node_pool_type s_InternalNodePool( 1024 * 8 );
-        update_desc_pool_type   s_UpdateDescPool;
-    }
-    namespace ellen_bintree_dhp {
-        internal_node_pool_type s_InternalNodePool( 1024 * 8 );
-        update_desc_pool_type   s_UpdateDescPool;
-    }
-}
-
-
-CPPUNIT_TEST_SUITE_REGISTRATION_(tree::IntrusiveBinTreeHdrTest, s_IntrusiveBinTreeHdrTest);
-CPPUNIT_TEST_SUITE_REGISTRATION_(tree::EllenBinTreeSetHdrTest, s_EllenBinTreeSetHdrTest);
-CPPUNIT_TEST_SUITE_REGISTRATION_(tree::EllenBinTreeMapHdrTest, s_EllenBinTreeMapHdrTest);
-CPPUNIT_TEST_SUITE_REGISTRATION_( tree::BronsonAVLTreeHdrTest, s_BronsonAVLTreeHdrTest );
diff --git a/tests/unit/CMakeLists.txt b/tests/unit/CMakeLists.txt
deleted file mode 100644 (file)
index 1d3063c..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-set(PACKAGE_NAME cdsu-misc)
-
-include_directories(${CMAKE_CURRENT_SOURCE_DIR})
-
-set(CDSUNIT_MISC_SOURCES
-    alloc/hoard_threadtest.cpp
-    alloc/larson.cpp
-    alloc/linux_scale.cpp
-    alloc/michael_allocator.cpp
-    alloc/random.cpp
-    lock/spinlock.cpp)
-
-add_executable(${PACKAGE_NAME} ${CDSUNIT_MAP_SOURCES} $<TARGET_OBJECTS:${TEST_COMMON}>)
-target_link_libraries(${PACKAGE_NAME} ${CDS_SHARED_LIBRARY} ${Boost_THREAD_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
-add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
-
-add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/map2)
-add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/pqueue)
-add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/queue)
-add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/set2)
-add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/stack)
\ No newline at end of file
diff --git a/tests/unit/_template.cpp b/tests/unit/_template.cpp
deleted file mode 100644 (file)
index 538c035..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include <vector>
-#include <algorithm>
-
-#include "cppunit/cppunit_proxy.h"
-
-#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
-using namespace std;
-#endif
-
-//
-// TestCase class
-//
-class Test : public CPPUNIT_NS::TestCase
-{
-  CPPUNIT_TEST_SUITE(Test);
-  CPPUNIT_TEST(test);
-  CPPUNIT_TEST_SUITE_END();
-
-protected:
-  void test();
-};
-
-CPPUNIT_TEST_SUITE_REGISTRATION(Test);
-
-//
-// tests implementation
-//
-void Test::test()
-{
-  CPPUNIT_ASSERT(true);
-}
diff --git a/tests/unit/alloc/hoard_threadtest.cpp b/tests/unit/alloc/hoard_threadtest.cpp
deleted file mode 100644 (file)
index 7b87bb4..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-// Hoard threadtest allocator test
-
-#include "alloc/michael_allocator.h"
-
-#include <cds/os/timer.h>
-#include <cds/os/topology.h>
-
-#include "cppunit/thread.h"
-
-namespace memory {
-
-    static size_t s_nPassCount = 1000;
-    static size_t s_nBlockCount = 10000;
-    static size_t s_nMinBlockSize = 16;
-    static size_t s_nMaxBlockSize = 1024;
-    static size_t s_nMaxThreadCount = 32;
-
-    static size_t s_nPassPerThread;
-
-    static size_t s_nCurBlockSize;
-
-#    define TEST_ALLOC(X, CLASS)            void X() { test< CLASS >( false )    ; }
-#    define TEST_ALLOC_STAT(X, CLASS)       void X() { test< CLASS >( true )    ; }
-
-    /*
-        In Threadtest, each thread performs s_nPassCount iterations of allocating s_nBlockCount
-        s_nCurBlockSize-byte blocks and then freeing them in order. The benchmarks capture
-        allocator latency and scalability under regular private allocation patterns.
-    */
-    class Hoard_ThreadTest: public CppUnitMini::TestCase
-    {
-        template <class ALLOC>
-        class Thread: public CppUnitMini::TestThread
-        {
-            ALLOC&      m_Alloc;
-            typedef typename ALLOC::value_type  value_type;
-            value_type **     m_arr;
-
-            virtual Thread *    clone()
-            {
-                return new Thread( *this );
-            }
-        public:
-
-        public:
-            Thread( CppUnitMini::ThreadPool& pool, ALLOC& a )
-                : CppUnitMini::TestThread( pool )
-                , m_Alloc( a )
-            {}
-            Thread( Thread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Alloc( src.m_Alloc )
-            {}
-
-            Hoard_ThreadTest&  getTest()
-            {
-                return reinterpret_cast<Hoard_ThreadTest&>( m_Pool.m_Test );
-            }
-
-            virtual void init()
-            {
-                cds::threading::Manager::attachThread();
-                m_arr = new value_type *[s_nBlockCount];
-            }
-            virtual void fini()
-            {
-                delete [] m_arr;
-                cds::threading::Manager::detachThread();
-            }
-
-            virtual void test()
-            {
-                size_t nSize = s_nCurBlockSize / sizeof(value_type);
-                for ( size_t nPass = 0; nPass < s_nPassPerThread; ++nPass ) {
-                    value_type ** pCell = m_arr;
-                    for ( size_t i = 0; i < s_nBlockCount; ++i, ++pCell ) {
-                        *pCell = m_Alloc.allocate( nSize, nullptr );
-                        CPPUNIT_ASSERT( *pCell != nullptr );
-
-                        if ( nSize < 32 )
-                            memset( *pCell, 0, nSize );
-                        else {
-                            memset( *pCell, 0, 16 );
-                            memset( ((char *)(*pCell)) + nSize * sizeof(value_type) - 16, 0, 16 );
-                        }
-
-                        CPPUNIT_ASSERT( (reinterpret_cast<uintptr_t>(*pCell) & (ALLOC::alignment - 1)) == 0 );
-                    }
-                    pCell = m_arr;
-                    for ( size_t i = 0; i < s_nBlockCount; ++i, ++pCell ) {
-                        m_Alloc.deallocate( *pCell, 1 );
-                    }
-                }
-            }
-        };
-
-        template <class ALLOC>
-        void test( size_t nThreadCount )
-        {
-            ALLOC alloc;
-            cds::OS::Timer    timer;
-
-            CPPUNIT_MSG( "Thread count=" << nThreadCount );
-            s_nPassPerThread = s_nPassCount / nThreadCount;
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new Thread<ALLOC>( pool, alloc ), nThreadCount );
-            pool.run();
-            CPPUNIT_MSG( "  Duration=" << pool.avgDuration() );
-        }
-
-        template <class ALLOC>
-        void test( bool bStat)
-        {
-            s_nCurBlockSize = s_nMinBlockSize;
-            while ( s_nCurBlockSize <= s_nMaxBlockSize ) {
-                CPPUNIT_MSG( "Block size=" << s_nCurBlockSize << ", block count=" << s_nBlockCount << ", pass count=" << s_nPassCount << " per thread" );
-                for ( size_t nThreadCount = 1; nThreadCount <= s_nMaxThreadCount; nThreadCount *= 2 ) {
-                    summary_stat stBegin;
-                    if ( bStat )
-                        ALLOC::stat(stBegin);
-
-                    test<ALLOC>( nThreadCount );
-
-                    summary_stat    stEnd;
-                    if ( bStat ) {
-                        ALLOC::stat( stEnd );
-
-                        std::cout << "\nStatistics:\n"
-                            << stEnd;
-                        stEnd -= stBegin;
-                        std::cout << "\nDelta statistics:\n"
-                            << stEnd;
-                    }
-                }
-                s_nCurBlockSize *= 2;
-            }
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg )
-        {
-            s_nPassCount = cfg.getULong( "PassCount", 1000 );
-            s_nBlockCount = cfg.getULong( "BlockCount", 10000 );
-            s_nMinBlockSize = cfg.getULong( "MinBlockSize", 16 );
-            s_nMaxBlockSize = cfg.getULong( "MaxBlockSize", 1024 );
-            s_nMaxThreadCount = cfg.getUInt( "MaxThreadCount", 32 );
-            if ( s_nMaxThreadCount == 0 )
-                s_nMaxThreadCount = cds::OS::topology::processor_count() * 2;
-        }
-
-        typedef MichaelAlignHeap_Stat<int, 64>      t_MichaelAlignHeap_Stat;
-        typedef MichaelAlignHeap_NoStat<int,64>     t_MichaelAlignHeap_NoStat;
-        typedef system_aligned_allocator<int, 64>   t_system_aligned_allocator;
-
-        TEST_ALLOC_STAT( michael_heap_stat,      MichaelHeap_Stat<int> )
-        TEST_ALLOC( michael_heap_nostat,    MichaelHeap_NoStat<int> )
-        TEST_ALLOC( std_alloc,              std_allocator<int> )
-
-        TEST_ALLOC_STAT( michael_alignheap_stat,     t_MichaelAlignHeap_Stat )
-        TEST_ALLOC( michael_alignheap_nostat,   t_MichaelAlignHeap_NoStat )
-        TEST_ALLOC( system_aligned_alloc,       t_system_aligned_allocator )
-
-        CPPUNIT_TEST_SUITE( Hoard_ThreadTest )
-            CPPUNIT_TEST( std_alloc )
-            CPPUNIT_TEST( michael_heap_stat )
-            CPPUNIT_TEST( michael_heap_nostat )
-
-            CPPUNIT_TEST( system_aligned_alloc )
-            CPPUNIT_TEST( michael_alignheap_stat )
-            CPPUNIT_TEST( michael_alignheap_nostat )
-
-        CPPUNIT_TEST_SUITE_END();
-    };
-
-}   // namespace memory
-CPPUNIT_TEST_SUITE_REGISTRATION( memory::Hoard_ThreadTest );
diff --git a/tests/unit/alloc/larson.cpp b/tests/unit/alloc/larson.cpp
deleted file mode 100644 (file)
index cbd142b..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-// Larson allocator test
-
-#include "alloc/michael_allocator.h"
-#include "alloc/random_gen.h"
-
-#include <cds/os/timer.h>
-#include <cds/os/topology.h>
-
-#include "cppunit/thread.h"
-
-namespace memory {
-
-    static size_t s_nMaxThreadCount = 32;
-    static unsigned int s_nMinBlockSize = 8;
-    static unsigned int s_nMaxBlockSize = 1024;
-    static size_t s_nBlocksPerThread = 1000;
-    static size_t s_nPassCount = 100000;
-
-    static size_t s_nPassPerThread;
-
-
-#    define TEST_ALLOC(X, CLASS)    void X() { test< CLASS >(false)    ; }
-#    define TEST_ALLOC_STAT(X, CLASS)    void X() { test< CLASS >(true)    ; }
-
-    /*
-        In this test, initially one thread allocates and frees random
-        sized blocks (s_nMinBlockSize to s_nMaxBlockSize bytes) in random order, then an
-        equal number of blocks (s_nBlocksPerThread) is handed over to each of the
-        remaining threads. In the parallel phase, each thread randomly selects a block and
-        frees it, then allocates a new random-sized block in its place.
-        The benchmark measures the duration of s_nPassCount free/malloc pairs
-        during the parallel phase. Larson captures the robustness of malloc\92s latency
-        and scalability under irregular allocation patterns with respect to block-size
-        and order of deallocation over a long period of time.
-    */
-    class Larson: public CppUnitMini::TestCase
-    {
-        typedef char ** thread_data;
-
-        thread_data *   m_aThreadData;
-
-
-        template <class ALLOC>
-        class Thread: public CppUnitMini::TestThread
-        {
-            ALLOC&      m_Alloc;
-            typedef typename ALLOC::value_type value_type;
-
-            virtual Thread *    clone()
-            {
-                return new Thread( *this );
-            }
-
-            randomGen<size_t>   m_rndGen;
-        public:
-            thread_data     m_arr;
-
-        public:
-            Thread( CppUnitMini::ThreadPool& pool, ALLOC& a )
-                : CppUnitMini::TestThread( pool )
-                , m_Alloc( a )
-            {}
-            Thread( Thread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Alloc( src.m_Alloc )
-            {}
-
-            Larson&  getTest()
-            {
-                return reinterpret_cast<Larson&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                for ( size_t nPass = 0; nPass < s_nPassPerThread; ++nPass ) {
-                    size_t nItem = m_rndGen( size_t(1), s_nBlocksPerThread ) - 1;
-                    m_Alloc.deallocate( reinterpret_cast<value_type *>(m_arr[nItem]), 1 );
-                    m_arr[nItem] = reinterpret_cast<char *>(m_Alloc.allocate( m_rndGen( s_nMinBlockSize, s_nMaxBlockSize ), nullptr ));
-                    CPPUNIT_ASSERT( (reinterpret_cast<uintptr_t>(m_arr[nItem]) & (ALLOC::alignment - 1)) == 0 );
-                }
-            }
-        };
-
-        template <class ALLOC>
-        void test( size_t nThreadCount )
-        {
-            ALLOC alloc;
-
-            CPPUNIT_MSG( "Thread count=" << nThreadCount );
-            CPPUNIT_MSG("Initialize data..." );
-
-            randomGen<unsigned int> rndGen;
-
-            s_nPassPerThread = s_nPassCount / nThreadCount;
-
-            size_t nThread;
-            m_aThreadData = new thread_data[ nThreadCount ];
-            for ( nThread = 0; nThread < nThreadCount; ++nThread ) {
-                thread_data thData
-                    = m_aThreadData[nThread]
-                    = new char *[ s_nBlocksPerThread ];
-                    for ( size_t i = 0; i < s_nBlocksPerThread; ++i ) {
-                        thData[i] = reinterpret_cast<char *>(alloc.allocate( rndGen( s_nMinBlockSize, s_nMaxBlockSize ), nullptr ));
-                        CPPUNIT_ASSERT( (reinterpret_cast<uintptr_t>(thData[i]) & (ALLOC::alignment - 1)) == 0 );
-                    }
-            }
-            CPPUNIT_MSG("Initializatin done" );
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new Thread<ALLOC>( pool, alloc ), nThreadCount );
-            nThread = 0;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it )
-                static_cast<Thread<ALLOC> *>(*it)->m_arr = m_aThreadData[nThread++];
-
-            cds::OS::Timer    timer;
-            pool.run();
-            CPPUNIT_MSG( "  Duration=" << pool.avgDuration() );
-
-            for ( nThread = 0; nThread < nThreadCount; ++nThread ) {
-                thread_data thData = m_aThreadData[nThread];
-                for ( size_t i = 0; i < s_nBlocksPerThread; ++i ) {
-                    alloc.deallocate( reinterpret_cast<typename ALLOC::value_type *>(thData[i]), 1 );
-                }
-                delete [] thData;
-            }
-            delete [] m_aThreadData;
-        }
-
-        template <class ALLOC>
-        void test( bool bStat )
-        {
-            CPPUNIT_MSG( "Block size=" << s_nMinBlockSize << "-" << s_nMaxBlockSize
-                << ", block count per thread=" << s_nBlocksPerThread << ", pass count=" << s_nPassCount );
-
-            for ( size_t nThreadCount = 2; nThreadCount <= s_nMaxThreadCount; nThreadCount *= 2 ) {
-                summary_stat stBegin;
-                if ( bStat )
-                    ALLOC::stat(stBegin);
-
-                test<ALLOC>( nThreadCount );
-
-                summary_stat    stEnd;
-                if ( bStat ) {
-                    ALLOC::stat( stEnd );
-
-                    std::cout << "\nStatistics:\n"
-                        << stEnd;
-                    stEnd -= stBegin;
-                    std::cout << "\nDelta statistics:\n"
-                        << stEnd;
-                }
-            }
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg )
-        {
-            s_nPassCount = cfg.getULong( "PassCount", 100000 );
-            s_nMinBlockSize = cfg.getUInt( "MinBlockSize", 8 );
-            s_nMaxBlockSize = cfg.getUInt( "MaxBlockSize", 1024 );
-            s_nBlocksPerThread = cfg.getUInt( "BlocksPerThread", 10000 );
-            s_nMaxThreadCount = cfg.getUInt( "MaxThreadCount", 32 );
-            if ( s_nMaxThreadCount == 0 )
-                s_nMaxThreadCount = cds::OS::topology::processor_count() * 2;
-            if ( s_nMaxThreadCount < 2 )
-                s_nMaxThreadCount = 2;
-            if ( s_nPassCount < s_nBlocksPerThread )
-                s_nBlocksPerThread = s_nPassCount;
-        }
-
-        typedef MichaelAlignHeap_Stat<int, 64>      t_MichaelAlignHeap_Stat;
-        typedef MichaelAlignHeap_NoStat<int,64>     t_MichaelAlignHeap_NoStat;
-        typedef system_aligned_allocator<int, 64>   t_system_aligned_allocator;
-
-        TEST_ALLOC_STAT( michael_heap_stat,      MichaelHeap_Stat<int> )
-        TEST_ALLOC( michael_heap_nostat,    MichaelHeap_NoStat<int> )
-        TEST_ALLOC( std_alloc,              std_allocator<int> )
-
-        TEST_ALLOC_STAT( michael_alignheap_stat,     t_MichaelAlignHeap_Stat )
-        TEST_ALLOC( michael_alignheap_nostat,   t_MichaelAlignHeap_NoStat )
-        TEST_ALLOC( system_aligned_alloc,       t_system_aligned_allocator )
-
-        CPPUNIT_TEST_SUITE( Larson )
-            CPPUNIT_TEST( michael_heap_stat )
-            CPPUNIT_TEST( michael_heap_nostat )
-            CPPUNIT_TEST( std_alloc )
-
-            CPPUNIT_TEST( system_aligned_alloc )
-            CPPUNIT_TEST( michael_alignheap_stat )
-            CPPUNIT_TEST( michael_alignheap_nostat )
-
-        CPPUNIT_TEST_SUITE_END();
-    };
-
-}   // namespace memory
-CPPUNIT_TEST_SUITE_REGISTRATION( memory::Larson );
diff --git a/tests/unit/alloc/linux_scale.cpp b/tests/unit/alloc/linux_scale.cpp
deleted file mode 100644 (file)
index b534a5d..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-// Linux scalability allocator test
-
-#include "alloc/michael_allocator.h"
-
-#include <cds/os/timer.h>
-#include <cds/os/topology.h>
-
-#include "cppunit/thread.h"
-
-namespace memory {
-
-    static size_t s_nPassCount = 10000000;
-    static size_t s_nMaxBlockSize = 64 * 1024 - 16;
-    static size_t s_nMaxThreadCount = 64;
-
-    static size_t s_nPassPerThread;
-
-#    define TEST_ALLOC(X, CLASS)    void X() { test< CLASS >(false)     ; }
-#    define TEST_ALLOC_STAT(X, CLASS)    void X() { test< CLASS >(true) ; }
-
-    class Linux_Scale: public CppUnitMini::TestCase
-    {
-        template <class ALLOC>
-        class Thread: public CppUnitMini::TestThread
-        {
-            ALLOC&      m_Alloc;
-            size_t      m_nSize;
-
-            virtual Thread *    clone()
-            {
-                return new Thread( *this );
-            }
-        public:
-
-        public:
-            Thread( CppUnitMini::ThreadPool& pool, ALLOC& a, size_t nSize )
-                : CppUnitMini::TestThread( pool )
-                , m_Alloc( a )
-                , m_nSize( nSize )
-            {}
-            Thread( Thread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Alloc( src.m_Alloc )
-                , m_nSize( src.m_nSize )
-            {}
-
-            Linux_Scale&  getTest()
-            {
-                return reinterpret_cast<Linux_Scale&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                for ( size_t i = 0; i < s_nPassPerThread; ++i ) {
-                    typename ALLOC::value_type * p = m_Alloc.allocate( m_nSize / sizeof( typename ALLOC::value_type ), nullptr );
-                    CPPUNIT_ASSERT( p != nullptr );
-                    if ( m_nSize < 32 )
-                        memset( p, 0, m_nSize );
-                    else {
-                        memset( p, 0, 16 );
-                        memset( ((char *)p) + m_nSize * sizeof(*p) - 16, 0, 16 );
-                    }
-                    CPPUNIT_ASSERT( (reinterpret_cast<uintptr_t>(p) & (ALLOC::alignment - 1)) == 0 );
-                    m_Alloc.deallocate( p, 1 );
-                }
-            }
-        };
-
-        template <class ALLOC>
-        void test( size_t nThreadCount, size_t nSize )
-        {
-            cds::OS::Timer    timer;
-
-            ALLOC alloc;
-
-            CPPUNIT_MSG( "   Block size=" << nSize );
-            s_nPassPerThread = s_nPassCount / nThreadCount;
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new Thread<ALLOC>( pool, alloc, nSize ), nThreadCount );
-            pool.run();
-            CPPUNIT_MSG( "      Duration=" << pool.avgDuration() );
-        }
-
-        template <class ALLOC>
-        void test( size_t nThreadCount )
-        {
-            CPPUNIT_MSG( "Thread count=" << nThreadCount );
-            for ( size_t sz = 1; sz < s_nMaxBlockSize; sz *= 2 ) {
-                test<ALLOC>( nThreadCount, sz );
-            }
-        }
-
-        template <class ALLOC>
-        void test( bool bStat )
-        {
-            for ( size_t nThreadCount = 1; nThreadCount <= s_nMaxThreadCount; nThreadCount *= 2 ) {
-                summary_stat stBegin;
-                if ( bStat )
-                    ALLOC::stat(stBegin);
-
-                test<ALLOC>( nThreadCount );
-
-                summary_stat    stEnd;
-                if ( bStat ) {
-                    ALLOC::stat( stEnd );
-
-                    std::cout << "\nStatistics:\n"
-                        << stEnd;
-                    stEnd -= stBegin;
-                    std::cout << "\nDelta statistics:\n"
-                        << stEnd;
-                }
-            }
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg )
-        {
-            s_nPassCount = cfg.getULong( "PassCount", 10000000 );
-            s_nMaxBlockSize = cfg.getULong( "MaxBlockSize", 64 * 1024 - 16 );
-            s_nMaxThreadCount = cfg.getUInt( "MaxThreadCount", 64 );
-            if ( s_nMaxThreadCount == 0 )
-                s_nMaxThreadCount = cds::OS::topology::processor_count() * 2;
-        }
-
-        typedef MichaelAlignHeap_Stat<char, 64>      t_MichaelAlignHeap_Stat;
-        typedef MichaelAlignHeap_NoStat<char,64>     t_MichaelAlignHeap_NoStat;
-        typedef system_aligned_allocator<char, 64>   t_system_aligned_allocator;
-
-        TEST_ALLOC_STAT( michael_heap_stat,      MichaelHeap_Stat<char> )
-        TEST_ALLOC( michael_heap_nostat,    MichaelHeap_NoStat<char> )
-        TEST_ALLOC( std_alloc,              std_allocator<char> )
-
-        TEST_ALLOC_STAT( michael_alignheap_stat,     t_MichaelAlignHeap_Stat )
-        TEST_ALLOC( michael_alignheap_nostat,   t_MichaelAlignHeap_NoStat )
-        TEST_ALLOC( system_aligned_alloc,       t_system_aligned_allocator )
-
-        CPPUNIT_TEST_SUITE( Linux_Scale )
-            CPPUNIT_TEST( michael_heap_nostat )
-            CPPUNIT_TEST( michael_heap_stat )
-            CPPUNIT_TEST( std_alloc )
-
-            CPPUNIT_TEST( system_aligned_alloc )
-            CPPUNIT_TEST( michael_alignheap_stat )
-            CPPUNIT_TEST( michael_alignheap_nostat )
-        CPPUNIT_TEST_SUITE_END();
-    };
-
-}   // namespace memory
-CPPUNIT_TEST_SUITE_REGISTRATION( memory::Linux_Scale );
diff --git a/tests/unit/alloc/michael_allocator.cpp b/tests/unit/alloc/michael_allocator.cpp
deleted file mode 100644 (file)
index 2ea04f2..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "alloc/michael_allocator.h"
-
-namespace memory {
-    t_MichaelHeap_NoStat  s_MichaelHeap_NoStat;
-    t_MichaelHeap_Stat    s_MichaelHeap_Stat;
-}
diff --git a/tests/unit/alloc/michael_allocator.h b/tests/unit/alloc/michael_allocator.h
deleted file mode 100644 (file)
index fe5dcb7..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include <cds/memory/michael/allocator.h>
-#include <iostream>
-
-namespace memory {
-    namespace ma = cds::memory::michael;
-
-    typedef ma::Heap<
-        ma::opt::procheap_stat<ma::procheap_empty_stat>,
-        ma::opt::os_allocated_stat<ma::os_allocated_empty>,
-        ma::opt::check_bounds<ma::debug_bound_checking>
-    >      t_MichaelHeap_NoStat;
-
-    typedef ma::Heap<
-        ma::opt::procheap_stat<ma::procheap_atomic_stat >,
-        ma::opt::os_allocated_stat<ma::os_allocated_atomic >,
-        ma::opt::check_bounds<ma::debug_bound_checking>
-    >  t_MichaelHeap_Stat;
-
-    typedef ma::summary_stat            summary_stat;
-
-    extern t_MichaelHeap_NoStat  s_MichaelHeap_NoStat;
-    extern t_MichaelHeap_Stat    s_MichaelHeap_Stat;
-
-    template <typename T>
-    class MichaelHeap_NoStat
-    {
-    public:
-        typedef T value_type;
-        typedef T * pointer;
-
-        enum {
-            alignment = 1
-        };
-
-
-        pointer allocate( size_t nSize, const void * /*pHint*/ )
-        {
-            return reinterpret_cast<pointer>( s_MichaelHeap_NoStat.alloc( sizeof(T) * nSize ) );
-        }
-
-        void deallocate( pointer p, size_t /*nCount*/ )
-        {
-            s_MichaelHeap_NoStat.free( p );
-        }
-
-        static void stat(summary_stat& s)
-        {
-            s_MichaelHeap_NoStat.summaryStat(s);
-        }
-    };
-
-    template <typename T>
-    class std_allocator: public std::allocator<T>
-    {
-    public:
-        enum {
-            alignment = 1
-        };
-
-        static void stat(summary_stat& /*s*/)
-        {}
-    };
-
-    template <typename T>
-    class MichaelHeap_Stat
-    {
-    public:
-        typedef T value_type;
-        typedef T * pointer;
-
-        enum {
-            alignment = 1
-        };
-
-        pointer allocate( size_t nSize, const void * /*pHint*/ )
-        {
-            return reinterpret_cast<pointer>( s_MichaelHeap_Stat.alloc( sizeof(T) * nSize ) );
-        }
-
-        void deallocate( pointer p, size_t /*nCount*/ )
-        {
-            s_MichaelHeap_Stat.free( p );
-        }
-
-        static void stat(summary_stat& s)
-        {
-            s_MichaelHeap_Stat.summaryStat(s);
-        }
-    };
-
-    template <typename T, size_t ALIGN>
-    class MichaelAlignHeap_NoStat
-    {
-    public:
-        typedef T value_type;
-        typedef T * pointer;
-
-        enum {
-            alignment = ALIGN
-        };
-
-        pointer allocate( size_t nSize, const void * /*pHint*/ )
-        {
-            return reinterpret_cast<pointer>( s_MichaelHeap_NoStat.alloc_aligned( sizeof(T) * nSize, ALIGN ) );
-        }
-
-        void deallocate( pointer p, size_t /*nCount*/ )
-        {
-            s_MichaelHeap_NoStat.free_aligned( p );
-        }
-
-        static void stat(summary_stat& s)
-        {
-            s_MichaelHeap_NoStat.summaryStat(s);
-        }
-    };
-
-    template <typename T, size_t ALIGN>
-    class MichaelAlignHeap_Stat {
-    public:
-        typedef T value_type;
-        typedef T * pointer;
-
-        enum {
-            alignment = ALIGN
-        };
-
-        pointer allocate( size_t nSize, const void * /*pHint*/ )
-        {
-            return reinterpret_cast<pointer>( s_MichaelHeap_Stat.alloc_aligned( sizeof(T) * nSize, ALIGN ) );
-        }
-
-        void deallocate( pointer p, size_t /*nCount*/ )
-        {
-            s_MichaelHeap_Stat.free_aligned( p );
-        }
-
-        static void stat(summary_stat& s)
-        {
-            s_MichaelHeap_Stat.summaryStat(s);
-        }
-    };
-
-    template <typename T, size_t ALIGN>
-    class system_aligned_allocator
-    {
-    public:
-        typedef T value_type;
-        typedef T * pointer;
-
-        enum {
-            alignment = ALIGN
-        };
-
-        pointer allocate( size_t nSize, const void * /*pHint*/ )
-        {
-            return reinterpret_cast<pointer>( cds::OS::aligned_malloc( sizeof(T) * nSize, ALIGN ) );
-        }
-
-        void deallocate( pointer p, size_t /*nCount*/ )
-        {
-            cds::OS::aligned_free( p );
-        }
-
-        static void stat(summary_stat& /*s*/)
-        {}
-    };
-
-    static inline std::ostream& operator <<(std::ostream& os, const summary_stat& s)
-    {
-        os  << "\t         alloc from active: " << s.nAllocFromActive << "\n"
-            << "\t        alloc from partial: " << s.nAllocFromPartial << "\n"
-            << "\t            alloc from new: " << s.nAllocFromNew << "\n"
-            << "\t           free call count: " << s.nFreeCount << "\n"
-            << "\t      superblock allocated: " << s.nPageAllocCount << "\n"
-            << "\t    superblock deallocated: " << s.nPageDeallocCount << "\n"
-            << "\t superblock desc allocated: " << s.nDescAllocCount << "\n"
-            << "\t      superblock full desc: " << s.nDescFull << "\n"
-            << "\t     total allocated bytes: " << s.nBytesAllocated << "\n"
-            << "\t   total deallocated bytes: " << s.nBytesDeallocated << "\n"
-            << "\tOS-allocated large blocks\n"
-            << "\t          alloc call count: " << s.nSysAllocCount << "\n"
-            << "\t           free call count: " << s.nSysFreeCount << "\n"
-            << "\t     total allocated bytes: " << s.nSysBytesAllocated << "\n"
-            << "\t   total deallocated bytes: " << s.nSysBytesDeallocated << "\n"
-            << "\tCAS contention indicators\n"
-            << "\t updating active field of active block: " << s.nActiveDescCASFailureCount << "\n"
-            << "\t updating anchor field of active block: " << s.nActiveAnchorCASFailureCount << "\n"
-            << "\tupdating active field of partial block: " << s.nPartialDescCASFailureCount << "\n"
-            << "\tupdating anchor field of partial block: " << s.nPartialAnchorCASFailureCount
-            << std::endl;
-
-        return os;
-    }
-}
diff --git a/tests/unit/alloc/random.cpp b/tests/unit/alloc/random.cpp
deleted file mode 100644 (file)
index 9edc05a..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-// Random allocator test
-
-#include "alloc/michael_allocator.h"
-#include "alloc/random_gen.h"
-
-#include <cds/os/timer.h>
-#include <cds/os/topology.h>
-
-#include "cppunit/thread.h"
-
-namespace memory {
-
-    static size_t s_nMaxThreadCount = 32;
-    static unsigned int s_nMinBlockSize = 8;
-    static unsigned int s_nMaxBlockSize = 1024;
-    //static size_t s_nBlocksPerThread = 1000;
-    static size_t s_nPassCount = 100000;
-    static size_t s_nDataSize = 1000;
-
-    static size_t s_nPassPerThread;
-
-    struct Item {
-        cds::sync::spin m_access;
-        char *          m_pszBlock;
-
-        Item()
-            : m_access( false )
-            , m_pszBlock( nullptr )
-        {}
-
-        Item& operator =(Item const& i)
-        {
-            m_pszBlock = i.m_pszBlock;
-            return *this;
-        }
-    };
-    typedef std::vector<Item>   item_array;
-
-#    define TEST_ALLOC(X, CLASS)        void X() { test< CLASS >(false); }
-#    define TEST_ALLOC_STAT(X, CLASS)   void X() { test< CLASS >(true) ; }
-
-    class Random_Alloc: public CppUnitMini::TestCase
-    {
-        item_array  m_Data;
-
-        template <class ALLOC>
-        class Thread: public CppUnitMini::TestThread
-        {
-            ALLOC&      m_Alloc;
-            typedef typename ALLOC::value_type value_type;
-
-            randomGen<size_t>   m_rndGen;
-
-            virtual Thread *    clone()
-            {
-                return new Thread( *this );
-            }
-
-        public:
-            Thread( CppUnitMini::ThreadPool& pool, ALLOC& a )
-                : CppUnitMini::TestThread( pool )
-                , m_Alloc( a )
-            {}
-            Thread( Thread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Alloc( src.m_Alloc )
-            {}
-
-            Random_Alloc&  getTest()
-            {
-                return reinterpret_cast<Random_Alloc&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                item_array& arr = getTest().m_Data;
-                for ( size_t nPass = 0; nPass < s_nPassPerThread; ) {
-                    size_t nIdx = m_rndGen( size_t(0), s_nDataSize - 1 );
-                    Item & item = arr.at(nIdx);
-                    if ( item.m_access.try_lock() ) {
-                        if ( item.m_pszBlock ) {
-                            m_Alloc.deallocate( item.m_pszBlock, 1 );
-                            item.m_pszBlock = nullptr;
-                        }
-                        else {
-                            size_t nSize;
-                            item.m_pszBlock = m_Alloc.allocate( nSize = m_rndGen( s_nMinBlockSize, s_nMaxBlockSize ), nullptr );
-
-                            if ( nSize < 32 )
-                                memset( item.m_pszBlock, 0, nSize );
-                            else {
-                                memset( item.m_pszBlock, 0, 16 );
-                                memset( ((char *) item.m_pszBlock) + nSize * sizeof(*item.m_pszBlock) - 16, 0, 16 );
-                            }
-                        }
-                        item.m_access.unlock();
-
-                        ++nPass;
-                    }
-                }
-            }
-        };
-
-        template <class ALLOC>
-        void test( size_t nThreadCount )
-        {
-            ALLOC alloc;
-
-            CPPUNIT_MSG( "Thread count=" << nThreadCount );
-            s_nPassPerThread = s_nPassCount / nThreadCount;
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new Thread<ALLOC>( pool, alloc ), nThreadCount );
-
-            cds::OS::Timer    timer;
-            pool.run();
-            CPPUNIT_MSG( "  Duration=" << pool.avgDuration() );
-
-            for ( size_t i = 0; i < m_Data.size(); ++i ) {
-                if ( m_Data[i].m_pszBlock ) {
-                    alloc.deallocate( m_Data[i].m_pszBlock, 1 );
-                    m_Data[i].m_pszBlock = nullptr;
-                }
-            }
-        }
-
-        template <class ALLOC>
-        void test( bool bStat )
-        {
-            CPPUNIT_MSG( "Block size=" << s_nMinBlockSize << "-" << s_nMaxBlockSize
-                << ", pass count=" << s_nPassCount << ", data size=" << s_nDataSize );
-
-            m_Data.resize( s_nDataSize );
-
-            for ( size_t nThreadCount = 2; nThreadCount <= s_nMaxThreadCount; nThreadCount *= 2 ) {
-                summary_stat    stBegin;
-                if ( bStat )
-                    ALLOC::stat( stBegin );
-
-                test<ALLOC>( nThreadCount );
-
-                summary_stat    stEnd;
-                if ( bStat ) {
-                    ALLOC::stat( stEnd );
-
-                    std::cout << "\nStatistics:\n"
-                        << stEnd;
-                    stEnd -= stBegin;
-                    std::cout << "\nDelta statistics:\n"
-                        << stEnd;
-                }
-            }
-
-            m_Data.resize(0);
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg )
-        {
-            s_nDataSize = cfg.getULong( "DataSize", 1000 );
-            s_nPassCount = cfg.getULong( "PassCount", 100000 );
-            s_nMinBlockSize = cfg.getUInt( "MinBlockSize", 8 );
-            s_nMaxBlockSize = cfg.getUInt( "MaxBlockSize", 1024 );
-            s_nMaxThreadCount = cfg.getUInt( "MaxThreadCount", 32 );
-            if ( s_nMaxThreadCount == 0 )
-                s_nMaxThreadCount = cds::OS::topology::processor_count() * 2;
-            if ( s_nMaxThreadCount < 2 )
-                s_nMaxThreadCount = 2;
-        }
-
-        typedef MichaelAlignHeap_Stat<char, 32>     t_MichaelAlignHeap_Stat;
-        typedef MichaelAlignHeap_NoStat<char,32>    t_MichaelAlignHeap_NoStat;
-        typedef system_aligned_allocator<char, 32>  t_system_aligned_allocator;
-
-        TEST_ALLOC_STAT( michael_heap_stat, MichaelHeap_Stat<char> )
-        TEST_ALLOC( michael_heap_nostat,    MichaelHeap_NoStat<char> )
-        TEST_ALLOC( std_alloc,              std_allocator<char> )
-
-        TEST_ALLOC_STAT( michael_alignheap_stat,t_MichaelAlignHeap_Stat )
-        TEST_ALLOC( michael_alignheap_nostat,   t_MichaelAlignHeap_NoStat )
-        TEST_ALLOC( system_aligned_alloc,       t_system_aligned_allocator )
-
-        CPPUNIT_TEST_SUITE( Random_Alloc )
-            CPPUNIT_TEST( michael_heap_stat )
-            CPPUNIT_TEST( michael_heap_nostat )
-            CPPUNIT_TEST( std_alloc )
-
-            CPPUNIT_TEST( system_aligned_alloc )
-            CPPUNIT_TEST( michael_alignheap_stat )
-            CPPUNIT_TEST( michael_alignheap_nostat )
-
-        CPPUNIT_TEST_SUITE_END();
-    };
-
-}   // namespace memory
-CPPUNIT_TEST_SUITE_REGISTRATION( memory::Random_Alloc );
diff --git a/tests/unit/alloc/random_gen.h b/tests/unit/alloc/random_gen.h
deleted file mode 100644 (file)
index d764537..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-// Random number geerator
-
-#ifndef CPPUNIT_MEMORY_RANDOM_GEN_H
-#define CPPUNIT_MEMORY_RANDOM_GEN_H
-
-
-#include <boost/random/mersenne_twister.hpp>
-#include <boost/random/uniform_int.hpp>
-#include <boost/random/variate_generator.hpp>
-
-namespace memory {
-    template <typename T>
-    class randomGen
-    {
-        boost::mt19937   m_rndGen;
-    public:
-        typedef T   random_type;
-
-        randomGen()
-        {}
-
-        random_type gen( random_type nMin, random_type nMax )
-        {
-            boost::uniform_int<random_type> dist(nMin, nMax);
-            return boost::variate_generator<boost::mt19937&, boost::uniform_int<random_type> >(m_rndGen, dist)();
-        }
-
-        /*
-        random_type operator()()
-        {
-            return gen( s_nMinBlockSize, s_nMaxBlockSize );
-        }
-        */
-
-        random_type operator()( random_type nMin, random_type nMax )
-        {
-            return gen( nMin, nMax );
-        }
-    };
-}   // namespace memory
-
-#endif // CPPUNIT_MEMORY_RANDOM_GEN_H
diff --git a/tests/unit/ellen_bintree_update_desc_pool.cpp b/tests/unit/ellen_bintree_update_desc_pool.cpp
deleted file mode 100644 (file)
index a8db922..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "ellen_bintree_update_desc_pool.h"
-
-namespace ellen_bintree_pool {
-    update_desc_pool_type s_UpdateDescPool;
-
-    bounded_update_desc_pool_type s_BoundedUpdateDescPool;
-
-    cds::atomicity::event_counter   internal_node_counter::m_nAlloc;
-    cds::atomicity::event_counter   internal_node_counter::m_nFree;
-}
diff --git a/tests/unit/ellen_bintree_update_desc_pool.h b/tests/unit/ellen_bintree_update_desc_pool.h
deleted file mode 100644 (file)
index bd199c9..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_ELLEN_BINTREE_UPDATE_DESC_POOL_H
-#define CDSUNIT_ELLEN_BINTREE_UPDATE_DESC_POOL_H
-
-#include <cds/urcu/general_instant.h>
-#include <cds/container/details/ellen_bintree_base.h>
-#include <cds/memory/vyukov_queue_pool.h>
-#include <cds/memory/pool_allocator.h>
-
-namespace ellen_bintree_pool {
-    typedef cds::container::ellen_bintree::node_types< cds::urcu::gc< cds::urcu::general_instant<> >, int > node_types; // fake
-    typedef node_types::leaf_node_type     leaf_node;
-    typedef node_types::internal_node_type internal_node;
-    typedef node_types::update_desc_type   update_desc;
-
-    // Update descriptor pool based on Vyukov's queue
-    struct update_desc_pool_traits : public cds::memory::vyukov_queue_pool_traits
-    {
-        typedef cds::opt::v::static_buffer< cds::any_type, 4096 > buffer;
-    };
-
-    typedef cds::memory::vyukov_queue_pool< update_desc, update_desc_pool_traits > update_desc_pool_type;
-    extern update_desc_pool_type s_UpdateDescPool;
-
-    struct update_desc_pool_accessor {
-        typedef update_desc_pool_type::value_type     value_type;
-
-        update_desc_pool_type& operator()() const
-        {
-            return s_UpdateDescPool;
-        }
-    };
-
-    // Update descriptor pool based on bounded Vyukov's queue
-    struct bounded_update_desc_pool_traits : public cds::memory::vyukov_queue_pool_traits
-    {
-        typedef cds::opt::v::static_buffer< cds::any_type, 4096 > buffer;
-    };
-    typedef cds::memory::bounded_vyukov_queue_pool< update_desc, bounded_update_desc_pool_traits > bounded_update_desc_pool_type;
-    extern bounded_update_desc_pool_type s_BoundedUpdateDescPool;
-
-    struct bounded_update_desc_pool_accessor {
-        typedef bounded_update_desc_pool_type::value_type     value_type;
-
-        bounded_update_desc_pool_type& operator()() const
-        {
-            return s_BoundedUpdateDescPool;
-        }
-    };
-
-
-    // Internal node allocator
-    struct internal_node_counter
-    {
-        static cds::atomicity::event_counter   m_nAlloc;
-        static cds::atomicity::event_counter   m_nFree;
-
-        static void onAlloc()
-        {
-            ++m_nAlloc;
-        }
-        static void onFree()
-        {
-            ++m_nFree;
-        }
-
-        static void reset()
-        {
-            m_nAlloc.reset();
-            m_nFree.reset();
-        }
-    };
-
-    template <typename T, typename Alloc = CDS_DEFAULT_ALLOCATOR>
-    class internal_node_allocator
-        : public Alloc::template rebind< T >::other
-        , internal_node_counter
-    {
-        typedef typename Alloc::template rebind< T >::other  base_class;
-    public:
-        template <typename Other>
-        struct rebind {
-            typedef internal_node_allocator< Other, Alloc > other;
-        };
-
-        T * allocate( size_t n, void const * pHint = nullptr )
-        {
-            internal_node_counter::onAlloc();
-            T * p = base_class::allocate( n, pHint );
-            return p;
-        }
-
-        void deallocate( T * p, size_t n )
-        {
-            internal_node_counter::onFree();
-            return base_class::deallocate( p, n );
-        }
-    };
-
-} // namespace ellen_bintree_pool
-
-#endif // #ifndef CDSUNIT_ELLEN_BINTREE_UPDATE_DESC_POOL_H
diff --git a/tests/unit/lock/nolock.h b/tests/unit/lock/nolock.h
deleted file mode 100644 (file)
index 896d067..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_LOCK_NOLOCK_H
-#define CDSUNIT_LOCK_NOLOCK_H
-
-namespace lock {
-    // Win32 critical section
-    class NoLock {
-    public:
-        void lock()     {}
-        void unlock()   {}
-        bool try_lock()  { return true; }
-    };
-}
-
-#endif // #ifndef CDSUNIT_LOCK_NOLOCK_H
diff --git a/tests/unit/lock/spinlock.cpp b/tests/unit/lock/spinlock.cpp
deleted file mode 100644 (file)
index a2e6cfa..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/thread.h"
-
-#include <cds/lock/spinlock.h>
-
-// Multi-threaded stack test for push operation
-namespace lock {
-
-#define TEST_CASE( N, L )   void N() { test<L>(); }
-
-    namespace {
-        static size_t s_nThreadCount = 8;
-        static size_t s_nLoopCount = 1000000    ;     // loop count per thread
-
-        static size_t   s_nSharedInt;
-    }
-
-    class Spinlock_MT: public CppUnitMini::TestCase
-    {
-        template <class LOCK>
-        class Thread: public CppUnitMini::TestThread
-        {
-            virtual TestThread *    clone()
-            {
-                return new Thread( *this );
-            }
-        public:
-            LOCK&               m_Lock;
-            double              m_fTime;
-
-        public:
-            Thread( CppUnitMini::ThreadPool& pool, LOCK& l )
-                : CppUnitMini::TestThread( pool )
-                , m_Lock( l )
-            {}
-            Thread( Thread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Lock( src.m_Lock )
-            {}
-
-            Spinlock_MT&  getTest()
-            {
-                return reinterpret_cast<Spinlock_MT&>( m_Pool.m_Test );
-            }
-
-            virtual void init()
-            {}
-            virtual void fini()
-            {}
-
-            virtual void test()
-            {
-                m_fTime = m_Timer.duration();
-
-                for ( size_t i  = 0; i < s_nLoopCount; ++i ) {
-                    m_Lock.lock();
-                    ++s_nSharedInt;
-                    m_Lock.unlock();
-                }
-
-                m_fTime = m_Timer.duration() - m_fTime;
-            }
-        };
-
-    protected:
-        void setUpParams( const CppUnitMini::TestCfg& cfg ) {
-            s_nThreadCount = cfg.getULong("ThreadCount", 8 );
-            s_nLoopCount = cfg.getULong("LoopCount", 1000000 );
-        }
-
-        template <class LOCK>
-        void test()
-        {
-            LOCK    testLock;
-
-            for ( size_t nThreadCount = 1; nThreadCount <= s_nThreadCount; nThreadCount *= 2 ) {
-                s_nSharedInt = 0;
-
-                CppUnitMini::ThreadPool pool( *this );
-                pool.add( new Thread<LOCK>( pool, testLock ), nThreadCount );
-
-                CPPUNIT_MSG( "   Lock test, thread count=" << nThreadCount
-                    << " loop per thread=" << s_nLoopCount
-                    << "...");
-                cds::OS::Timer      timer;
-                pool.run();
-                CPPUNIT_MSG( "     Duration=" << timer.duration() );
-
-                CPPUNIT_ASSERT_EX( s_nSharedInt == nThreadCount * s_nLoopCount,
-                    "Expected=" << nThreadCount * s_nLoopCount
-                    << " real=" << s_nSharedInt );
-            }
-        }
-
-        typedef cds::sync::spin_lock<cds::backoff::exponential<cds::backoff::hint, cds::backoff::yield> > Spinlock_exp;
-
-        typedef cds::sync::reentrant_spin_lock<unsigned int, cds::backoff::exponential<cds::backoff::hint, cds::backoff::yield> > reentrantSpin_exp;
-        typedef cds::sync::reentrant_spin_lock<unsigned int, cds::backoff::yield> reentrantSpin_yield;
-        typedef cds::sync::reentrant_spin_lock<unsigned int, cds::backoff::hint> reentrantSpin_hint;
-        typedef cds::sync::reentrant_spin_lock<unsigned int, cds::backoff::empty> reentrantSpin_empty;
-
-        TEST_CASE(spinLock_exp,         Spinlock_exp );
-        TEST_CASE(spinLock_yield,       cds::sync::spin_lock<cds::backoff::yield> );
-        TEST_CASE(spinLock_hint,        cds::sync::spin_lock<cds::backoff::hint> );
-        TEST_CASE(spinLock_empty,       cds::sync::spin_lock<cds::backoff::empty> );
-        TEST_CASE( spinLock_yield_lock, cds::lock::Spinlock<cds::backoff::yield> );
-        TEST_CASE( spinLock_hint_lock, cds::lock::Spinlock<cds::backoff::hint> );
-        TEST_CASE( spinLock_empty_lock, cds::lock::Spinlock<cds::backoff::empty> );
-
-        TEST_CASE( reentrantSpinLock32, cds::sync::reentrant_spin32 );
-        TEST_CASE( reentrantSpinLock64, cds::sync::reentrant_spin64 );
-        TEST_CASE( reentrantSpinLock32_lock, cds::lock::ReentrantSpin32 );
-        TEST_CASE( reentrantSpinLock64_lock, cds::lock::ReentrantSpin64 );
-
-        TEST_CASE(reentrantSpinlock_exp,        reentrantSpin_exp );
-        TEST_CASE(reentrantSpinlock_yield,      reentrantSpin_yield );
-        TEST_CASE(reentrantSpinlock_hint,       reentrantSpin_hint );
-        TEST_CASE(reentrantSpinlock_empty,      reentrantSpin_empty );
-
-    protected:
-        CPPUNIT_TEST_SUITE(Spinlock_MT)
-            CPPUNIT_TEST(spinLock_exp);
-            CPPUNIT_TEST(spinLock_yield);
-            CPPUNIT_TEST(spinLock_hint);
-            CPPUNIT_TEST(spinLock_empty);
-
-            CPPUNIT_TEST(reentrantSpinLock32);
-            CPPUNIT_TEST(reentrantSpinLock64);
-
-            CPPUNIT_TEST(reentrantSpinlock_exp)
-            CPPUNIT_TEST(reentrantSpinlock_yield)
-            CPPUNIT_TEST(reentrantSpinlock_hint)
-            CPPUNIT_TEST(reentrantSpinlock_empty)
-        CPPUNIT_TEST_SUITE_END();
-    };
-
-} // namespace lock
-
-CPPUNIT_TEST_SUITE_REGISTRATION(lock::Spinlock_MT);
diff --git a/tests/unit/lock/win32_lock.h b/tests/unit/lock/win32_lock.h
deleted file mode 100644 (file)
index db57d32..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_LOCK_WIN32_LOCK_H
-#define CDSUNIT_LOCK_WIN32_LOCK_H
-
-#if defined(_WIN32) || defined(_WIN64)
-#define NOMINMAX
-#include <windows.h>
-
-#define UNIT_LOCK_WIN_CS
-
-namespace lock {
-    namespace win {
-        // Win32 critical section
-        class CS {
-            CRITICAL_SECTION    m_cs;
-
-        public:
-            CS()    { ::InitializeCriticalSection( &m_cs ) ; }
-            ~CS()   { ::DeleteCriticalSection( &m_cs ) ; }
-
-            void lock()     { ::EnterCriticalSection( &m_cs ) ; }
-            void unlock()   { ::LeaveCriticalSection( &m_cs)  ; }
-            bool try_lock()  { return ::TryEnterCriticalSection( &m_cs ) != 0 ; }
-        };
-
-        class Mutex {
-            HANDLE  m_hMutex;
-        public:
-
-            Mutex()     { m_hMutex = ::CreateMutex( nullptr, false, nullptr ); }
-            ~Mutex()    { ::CloseHandle( m_hMutex ) ; }
-
-            void lock()     { ::WaitForSingleObject( m_hMutex, INFINITE ); }
-            void unlock()   { ::ReleaseMutex( m_hMutex ); }
-            bool try_lock()  { return ::WaitForSingleObject( m_hMutex, 0) == WAIT_OBJECT_0; }
-        };
-
-    } // namespace win
-}   // namespace lock
-
-#endif  // defined(_WIN32) || defined(_WIN64)
-#endif  // #ifndef CDSUNIT_LOCK_WIN32_LOCK_H
diff --git a/tests/unit/map2/CMakeLists.txt b/tests/unit/map2/CMakeLists.txt
deleted file mode 100644 (file)
index 1a55ab8..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-set(PACKAGE_NAME cdsu-map)
-
-set(CDSUNIT_MAP_SOURCES
-    map_find_int.cpp
-    map_find_int_bronsonavltree.cpp
-    map_find_int_cuckoo.cpp
-    map_find_int_ellentree.cpp
-    map_find_int_michael.cpp
-    map_find_int_feldmanhashmap.cpp
-    map_find_int_skip.cpp
-    map_find_int_split.cpp
-    map_find_int_striped.cpp
-    map_find_int_std.cpp
-    map_find_string.cpp
-    map_find_string_bronsonavltree.cpp
-    map_find_string_cuckoo.cpp
-    map_find_string_ellentree.cpp
-    map_find_string_michael.cpp
-    map_find_string_feldmanhashmap.cpp
-    map_find_string_skip.cpp
-    map_find_string_split.cpp
-    map_find_string_striped.cpp
-    map_find_string_std.cpp
-    map_insfind_int.cpp
-    map_insfind_int_bronsonavltree.cpp
-    map_insfind_int_cuckoo.cpp
-    map_insfind_int_ellentree.cpp
-    map_insfind_int_feldmanhashmap.cpp
-    map_insfind_int_michael.cpp
-    map_insfind_int_skip.cpp
-    map_insfind_int_split.cpp
-    map_insfind_int_striped.cpp
-    map_insfind_int_std.cpp
-    map_insdel_func.cpp
-    map_insdel_func_bronsonavltree.cpp
-    map_insdel_func_cuckoo.cpp
-    map_insdel_func_ellentree.cpp
-    map_insdel_func_michael.cpp
-    map_insdel_func_feldmanhashmap.cpp
-    map_insdel_func_skip.cpp
-    map_insdel_func_split.cpp
-    map_insdel_func_striped.cpp
-    map_insdel_int.cpp
-    map_insdel_int_bronsonavltree.cpp
-    map_insdel_int_cuckoo.cpp
-    map_insdel_int_ellentree.cpp
-    map_insdel_int_michael.cpp
-    map_insdel_int_feldmanhashmap.cpp
-    map_insdel_int_skip.cpp
-    map_insdel_int_split.cpp
-    map_insdel_int_striped.cpp
-    map_insdel_int_std.cpp
-    map_insdel_item_int.cpp
-    map_insdel_item_int_bronsonavltree.cpp
-    map_insdel_item_int_cuckoo.cpp
-    map_insdel_item_int_ellentree.cpp
-    map_insdel_item_int_michael.cpp
-    map_insdel_item_int_feldmanhashmap.cpp
-    map_insdel_item_int_skip.cpp
-    map_insdel_item_int_split.cpp
-    map_insdel_item_int_striped.cpp
-    map_insdel_item_string.cpp
-    map_insdel_item_string_bronsonavltree.cpp
-    map_insdel_item_string_cuckoo.cpp
-    map_insdel_item_string_ellentree.cpp
-    map_insdel_item_string_michael.cpp
-    map_insdel_item_string_feldmanhashmap.cpp
-    map_insdel_item_string_skip.cpp
-    map_insdel_item_string_split.cpp
-    map_insdel_item_string_striped.cpp
-    map_insdel_string.cpp
-    map_insdel_string_bronsonavltree.cpp
-    map_insdel_string_cuckoo.cpp
-    map_insdel_string_ellentree.cpp
-    map_insdel_string_michael.cpp
-    map_insdel_string_feldmanhashmap.cpp
-    map_insdel_string_skip.cpp
-    map_insdel_string_split.cpp
-    map_insdel_string_striped.cpp
-    map_insdel_string_std.cpp
-    map_insdelfind.cpp
-    map_insdelfind_bronsonavltree.cpp
-    map_insdelfind_cuckoo.cpp
-    map_insdelfind_ellentree.cpp
-    map_insdelfind_michael.cpp
-    map_insdelfind_feldmanhashmap.cpp
-    map_insdelfind_skip.cpp
-    map_insdelfind_split.cpp
-    map_insdelfind_striped.cpp
-    map_insdelfind_std.cpp
-    map_delodd.cpp
-    map_delodd_bronsonavltree.cpp
-    map_delodd_cuckoo.cpp
-    map_delodd_ellentree.cpp
-    map_delodd_michael.cpp
-    map_delodd_feldmanhashmap.cpp
-    map_delodd_split.cpp
-    map_delodd_skip.cpp
-)
-
-add_executable(${PACKAGE_NAME} ${CDSUNIT_MAP_SOURCES} $<TARGET_OBJECTS:${TEST_COMMON}>)
-target_link_libraries(${PACKAGE_NAME} ${CDS_SHARED_LIBRARY} ${Boost_THREAD_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
-add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/tests/unit/map2/map_defs.h b/tests/unit/map2/map_defs.h
deleted file mode 100644 (file)
index f53b7a9..0000000
+++ /dev/null
@@ -1,997 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#define CDSUNIT_DECLARE_StdMap \
-    TEST_CASE(tag_StdMap, StdMap_Spin) \
-    TEST_CASE(tag_StdMap, StdHashMap_Spin) \
-    TEST_CASE(tag_StdMap, StdMap_Mutex) \
-    TEST_CASE(tag_StdMap, StdHashMap_Mutex)
-
-#define CDSUNIT_TEST_StdMap \
-    CPPUNIT_TEST(StdMap_Spin) \
-    CPPUNIT_TEST(StdHashMap_Spin) \
-    CPPUNIT_TEST(StdMap_Mutex) \
-    CPPUNIT_TEST(StdHashMap_Mutex) \
-
-#define CDSUNIT_DECLARE_StdMap_NoLock \
-    TEST_CASE(tag_StdMap, StdMap_NoLock) \
-    TEST_CASE(tag_StdMap, StdHashMap_NoLock) \
-
-#define CDSUNIT_TEST_StdMap_NoLock \
-    CPPUNIT_TEST(StdMap_NoLock) \
-    CPPUNIT_TEST(StdHashMap_NoLock) \
-
-
-// **************************************************************************************
-// MichaelMap
-
-#undef CDSUNIT_DECLARE_MichaelMap_RCU_signal
-#undef CDSUNIT_TEST_MichaelMap_RCU_signal
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-#   define CDSUNIT_DECLARE_MichaelMap_RCU_signal \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_RCU_SHB_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_RCU_SHB_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_RCU_SHT_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_RCU_SHT_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_Lazy_RCU_SHB_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_Lazy_RCU_SHT_less_michaelAlloc)
-
-#   define CDSUNIT_TEST_MichaelMap_RCU_signal \
-    CPPUNIT_TEST(MichaelMap_RCU_SHB_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelMap_RCU_SHB_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelMap_RCU_SHT_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelMap_RCU_SHT_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelMap_Lazy_RCU_SHB_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelMap_Lazy_RCU_SHT_less_michaelAlloc)
-
-#else
-#   define CDSUNIT_DECLARE_MichaelMap_RCU_signal
-#   define CDSUNIT_TEST_MichaelMap_RCU_signal
-#endif
-
-#undef CDSUNIT_DECLARE_MichaelMap
-#define CDSUNIT_DECLARE_MichaelMap  \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_HP_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_HP_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_DHP_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_DHP_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_RCU_GPI_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_RCU_GPI_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_RCU_GPB_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_RCU_GPB_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_RCU_GPT_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_RCU_GPT_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_Lazy_HP_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_Lazy_HP_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_Lazy_DHP_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_Lazy_DHP_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_Lazy_RCU_GPI_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_Lazy_RCU_GPB_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_Lazy_RCU_GPT_less_michaelAlloc)\
-    CDSUNIT_DECLARE_MichaelMap_RCU_signal
-
-#undef  CDSUNIT_TEST_MichaelMap
-#define CDSUNIT_TEST_MichaelMap  \
-    CPPUNIT_TEST(MichaelMap_HP_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelMap_HP_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelMap_DHP_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelMap_DHP_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelMap_RCU_GPI_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelMap_RCU_GPI_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelMap_RCU_GPB_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelMap_RCU_GPB_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelMap_RCU_GPT_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelMap_RCU_GPT_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelMap_Lazy_HP_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelMap_Lazy_HP_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelMap_Lazy_DHP_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelMap_Lazy_DHP_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelMap_Lazy_RCU_GPI_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelMap_Lazy_RCU_GPB_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelMap_Lazy_RCU_GPT_less_michaelAlloc)\
-    CDSUNIT_TEST_MichaelMap_RCU_signal
-
-#undef  CDSUNIT_DECLARE_MichaelMap_nogc
-#define CDSUNIT_DECLARE_MichaelMap_nogc  \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_NOGC_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_NOGC_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_Lazy_NOGC_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_Lazy_NOGC_unord_stdAlloc) \
-    TEST_CASE(tag_MichaelHashMap, MichaelMap_Lazy_NOGC_less_michaelAlloc)
-
-#undef  CDSUNIT_TEST_MichaelMap_nogc
-#define CDSUNIT_TEST_MichaelMap_nogc  \
-    CPPUNIT_TEST(MichaelMap_NOGC_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelMap_NOGC_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelMap_Lazy_NOGC_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelMap_Lazy_NOGC_unord_stdAlloc) \
-    CPPUNIT_TEST(MichaelMap_Lazy_NOGC_less_michaelAlloc) \
-
-
-// **************************************************************************************
-// SplitListMap
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-#   define CDSUNIT_DECLARE_SplitList_RCU_signal  \
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_SHB_dyn_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_SHB_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_SHB_st_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_SHB_dyn_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_SHB_st_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_SHB_st_less_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_SHT_dyn_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_SHT_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_SHT_st_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_SHT_dyn_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_SHT_st_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_SHT_st_less_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_SHB_dyn_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_SHB_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_SHB_st_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_SHB_dyn_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_SHB_st_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_SHB_st_less_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_SHT_dyn_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_SHT_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_SHT_st_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_SHT_dyn_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_SHT_st_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_SHT_st_less_stat)
-
-#   define CDSUNIT_TEST_SplitList_RCU_signal \
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHB_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHB_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHB_st_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHB_dyn_less)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHB_st_less)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHB_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHT_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHT_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHT_st_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHT_dyn_less)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHT_st_less)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHT_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHB_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHB_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHB_st_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHB_dyn_less)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHB_st_less)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHB_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHT_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHT_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHT_st_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHT_dyn_less)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHT_st_less)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHT_st_less_stat)
-
-#else
-#   define CDSUNIT_DECLARE_SplitList_RCU_signal
-#   define CDSUNIT_TEST_SplitList_RCU_signal
-#endif
-
-#define CDSUNIT_DECLARE_SplitList \
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_HP_dyn_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_HP_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_HP_st_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_HP_dyn_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_HP_st_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_HP_st_less_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_DHP_dyn_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_DHP_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_DHP_st_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_DHP_dyn_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_DHP_st_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_DHP_st_less_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_GPI_dyn_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_GPI_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_GPI_st_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_GPI_dyn_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_GPI_st_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_GPI_st_less_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_GPB_dyn_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_GPB_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_GPB_st_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_GPB_dyn_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_GPB_st_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_GPB_st_less_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_GPT_dyn_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_GPT_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_GPT_st_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_GPT_dyn_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_GPT_st_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_RCU_GPT_st_less_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_HP_dyn_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_HP_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_HP_st_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_HP_dyn_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_HP_st_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_HP_st_less_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_DHP_dyn_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_DHP_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_DHP_st_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_DHP_dyn_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_DHP_st_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_DHP_st_less_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_GPI_dyn_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_GPI_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_GPI_st_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_GPI_dyn_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_GPI_st_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_GPI_st_less_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_GPB_dyn_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_GPB_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_GPB_st_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_GPB_dyn_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_GPB_st_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_GPB_st_less_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_GPT_dyn_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_GPT_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_GPT_st_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_GPT_dyn_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_GPT_st_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_RCU_GPT_st_less_stat)\
-    CDSUNIT_DECLARE_SplitList_RCU_signal
-
-#define CDSUNIT_TEST_SplitList  \
-    CPPUNIT_TEST(SplitList_Michael_HP_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_HP_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Michael_HP_st_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_HP_dyn_less)\
-    CPPUNIT_TEST(SplitList_Michael_HP_st_less)\
-    CPPUNIT_TEST(SplitList_Michael_HP_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Michael_DHP_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_DHP_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Michael_DHP_st_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_DHP_dyn_less)\
-    CPPUNIT_TEST(SplitList_Michael_DHP_st_less)\
-    CPPUNIT_TEST(SplitList_Michael_DHP_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPI_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPI_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPI_st_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPI_dyn_less)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPI_st_less)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPI_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPB_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPB_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPB_st_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPB_dyn_less)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPB_st_less)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPB_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPT_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPT_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPT_st_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPT_dyn_less)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPT_st_less)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPT_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_HP_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_HP_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_HP_st_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_HP_dyn_less)\
-    CPPUNIT_TEST(SplitList_Lazy_HP_st_less)\
-    CPPUNIT_TEST(SplitList_Lazy_HP_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_DHP_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_DHP_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_DHP_st_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_DHP_dyn_less)\
-    CPPUNIT_TEST(SplitList_Lazy_DHP_st_less)\
-    CPPUNIT_TEST(SplitList_Lazy_DHP_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPI_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPI_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPI_st_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPI_dyn_less)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPI_st_less)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPI_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPB_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPB_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPB_st_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPB_dyn_less)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPB_st_less)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPB_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPT_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPT_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPT_st_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPT_dyn_less)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPT_st_less)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPT_st_less_stat)\
-    CDSUNIT_TEST_SplitList_RCU_signal
-
-#define CDSUNIT_DECLARE_SplitList_nogc  \
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_NOGC_dyn_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_NOGC_st_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_NOGC_dyn_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Michael_NOGC_st_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_NOGC_dyn_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_NOGC_st_cmp)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_NOGC_dyn_less)\
-    TEST_CASE(tag_SplitListMap, SplitList_Lazy_NOGC_st_less)
-
-#define CDSUNIT_TEST_SplitList_nogc  \
-    CPPUNIT_TEST(SplitList_Michael_NOGC_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_NOGC_st_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_NOGC_dyn_less)\
-    CPPUNIT_TEST(SplitList_Michael_NOGC_st_less)\
-    CPPUNIT_TEST(SplitList_Lazy_NOGC_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_NOGC_st_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_NOGC_dyn_less)\
-    CPPUNIT_TEST(SplitList_Lazy_NOGC_st_less)
-
-
-// **************************************************************************************
-// SkipListMap
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-#   define CDSUNIT_DECLARE_SkipListMap_RCU_signal \
-    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_shb_less_pascal)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_shb_cmp_pascal_stat)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_shb_less_xorshift)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_shb_cmp_xorshift_stat)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_sht_less_pascal)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_sht_cmp_pascal_stat)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_sht_less_xorshift)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_sht_cmp_xorshift_stat)
-
-#   define CDSUNIT_TEST_SkipListMap_RCU_signal \
-    CPPUNIT_TEST(SkipListMap_rcu_shb_less_pascal)\
-    CPPUNIT_TEST(SkipListMap_rcu_shb_cmp_pascal_stat)\
-    CPPUNIT_TEST(SkipListMap_rcu_shb_less_xorshift)\
-    CPPUNIT_TEST(SkipListMap_rcu_shb_cmp_xorshift_stat)\
-    CPPUNIT_TEST(SkipListMap_rcu_sht_less_pascal)\
-    CPPUNIT_TEST(SkipListMap_rcu_sht_cmp_pascal_stat)\
-    CPPUNIT_TEST(SkipListMap_rcu_sht_less_xorshift)\
-    CPPUNIT_TEST(SkipListMap_rcu_sht_cmp_xorshift_stat)
-
-#else
-#   define CDSUNIT_DECLARE_SkipListMap_RCU_signal
-#   define CDSUNIT_TEST_SkipListMap_RCU_signal
-#endif
-
-#define CDSUNIT_DECLARE_SkipListMap \
-    TEST_CASE(tag_SkipListMap, SkipListMap_hp_less_pascal)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_hp_cmp_pascal_stat)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_hp_less_xorshift)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_hp_cmp_xorshift_stat)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_dhp_less_pascal)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_dhp_cmp_pascal_stat)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_dhp_less_xorshift)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_dhp_cmp_xorshift_stat)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpi_less_pascal)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpi_cmp_pascal_stat)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpi_less_xorshift)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpi_cmp_xorshift_stat)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpb_less_pascal)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpb_cmp_pascal_stat)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpb_less_xorshift)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpb_cmp_xorshift_stat)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpt_less_pascal)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpt_cmp_pascal_stat)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpt_less_xorshift)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpt_cmp_xorshift_stat)\
-    CDSUNIT_DECLARE_SkipListMap_RCU_signal
-
-#define CDSUNIT_TEST_SkipListMap \
-    CPPUNIT_TEST(SkipListMap_hp_less_pascal)\
-    CPPUNIT_TEST(SkipListMap_hp_cmp_pascal_stat)\
-    CPPUNIT_TEST(SkipListMap_hp_less_xorshift)\
-    CPPUNIT_TEST(SkipListMap_hp_cmp_xorshift_stat)\
-    CPPUNIT_TEST(SkipListMap_dhp_less_pascal)\
-    CPPUNIT_TEST(SkipListMap_dhp_cmp_pascal_stat)\
-    CPPUNIT_TEST(SkipListMap_dhp_less_xorshift)\
-    CPPUNIT_TEST(SkipListMap_dhp_cmp_xorshift_stat)\
-    CPPUNIT_TEST(SkipListMap_rcu_gpi_less_pascal)\
-    CPPUNIT_TEST(SkipListMap_rcu_gpi_cmp_pascal_stat)\
-    CPPUNIT_TEST(SkipListMap_rcu_gpi_less_xorshift)\
-    CPPUNIT_TEST(SkipListMap_rcu_gpi_cmp_xorshift_stat)\
-    CPPUNIT_TEST(SkipListMap_rcu_gpb_less_pascal)\
-    CPPUNIT_TEST(SkipListMap_rcu_gpb_cmp_pascal_stat)\
-    CPPUNIT_TEST(SkipListMap_rcu_gpb_less_xorshift)\
-    CPPUNIT_TEST(SkipListMap_rcu_gpb_cmp_xorshift_stat)\
-    CPPUNIT_TEST(SkipListMap_rcu_gpt_less_pascal)\
-    CPPUNIT_TEST(SkipListMap_rcu_gpt_cmp_pascal_stat)\
-    CPPUNIT_TEST(SkipListMap_rcu_gpt_less_xorshift)\
-    CPPUNIT_TEST(SkipListMap_rcu_gpt_cmp_xorshift_stat)\
-    CDSUNIT_TEST_SkipListMap_RCU_signal
-
-#define CDSUNIT_DECLARE_SkipListMap_nogc \
-    TEST_CASE(tag_SkipListMap, SkipListMap_nogc_less_pascal)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_nogc_cmp_pascal_stat)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_nogc_less_xorshift)\
-    TEST_CASE(tag_SkipListMap, SkipListMap_nogc_cmp_xorshift_stat)
-
-#define CDSUNIT_TEST_SkipListMap_nogc \
-    CPPUNIT_TEST(SkipListMap_nogc_less_pascal)\
-    CPPUNIT_TEST(SkipListMap_nogc_cmp_pascal_stat)\
-    CPPUNIT_TEST(SkipListMap_nogc_less_xorshift)\
-    CPPUNIT_TEST(SkipListMap_nogc_cmp_xorshift_stat)
-
-
-// **************************************************************************************
-// EllenBinTreeMap
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-#   define CDSUNIT_DECLARE_EllenBinTreeMap_RCU_signal \
-    TEST_CASE(tag_EllenBinTreeMap, EllenBinTreeMap_rcu_shb)\
-    TEST_CASE(tag_EllenBinTreeMap, EllenBinTreeMap_rcu_shb_stat)\
-    TEST_CASE(tag_EllenBinTreeMap, EllenBinTreeMap_rcu_sht)\
-    TEST_CASE(tag_EllenBinTreeMap, EllenBinTreeMap_rcu_sht_stat)
-
-#   define CDSUNIT_TEST_EllenBinTreeMap_RCU_signal \
-    CPPUNIT_TEST(EllenBinTreeMap_rcu_shb)\
-    CPPUNIT_TEST(EllenBinTreeMap_rcu_shb_stat)\
-    CPPUNIT_TEST(EllenBinTreeMap_rcu_sht)\
-    CPPUNIT_TEST(EllenBinTreeMap_rcu_sht_stat)
-#else
-#   define CDSUNIT_DECLARE_EllenBinTreeMap_RCU_signal
-#   define CDSUNIT_TEST_EllenBinTreeMap_RCU_signal
-#endif
-
-#define CDSUNIT_DECLARE_EllenBinTreeMap \
-    TEST_CASE(tag_EllenBinTreeMap, EllenBinTreeMap_hp)\
-    TEST_CASE(tag_EllenBinTreeMap, EllenBinTreeMap_hp_yield)\
-    TEST_CASE(tag_EllenBinTreeMap, EllenBinTreeMap_hp_stat)\
-    TEST_CASE(tag_EllenBinTreeMap, EllenBinTreeMap_dhp)\
-    TEST_CASE(tag_EllenBinTreeMap, EllenBinTreeMap_dhp_yield)\
-    TEST_CASE(tag_EllenBinTreeMap, EllenBinTreeMap_dhp_stat)\
-    TEST_CASE(tag_EllenBinTreeMap, EllenBinTreeMap_rcu_gpi)\
-    TEST_CASE(tag_EllenBinTreeMap, EllenBinTreeMap_rcu_gpi_stat)\
-    TEST_CASE(tag_EllenBinTreeMap, EllenBinTreeMap_rcu_gpb)\
-    TEST_CASE(tag_EllenBinTreeMap, EllenBinTreeMap_rcu_gpb_yield)\
-    TEST_CASE(tag_EllenBinTreeMap, EllenBinTreeMap_rcu_gpb_stat)\
-    TEST_CASE(tag_EllenBinTreeMap, EllenBinTreeMap_rcu_gpt)\
-    TEST_CASE(tag_EllenBinTreeMap, EllenBinTreeMap_rcu_gpt_stat)\
-    CDSUNIT_DECLARE_EllenBinTreeMap_RCU_signal
-
-#define CDSUNIT_TEST_EllenBinTreeMap \
-    CPPUNIT_TEST(EllenBinTreeMap_hp)\
-    CPPUNIT_TEST(EllenBinTreeMap_hp_yield)\
-    CPPUNIT_TEST(EllenBinTreeMap_hp_stat)\
-    CPPUNIT_TEST(EllenBinTreeMap_dhp)\
-    CPPUNIT_TEST(EllenBinTreeMap_dhp_yield)\
-    CPPUNIT_TEST(EllenBinTreeMap_dhp_stat)\
-    CPPUNIT_TEST(EllenBinTreeMap_rcu_gpi)\
-    CPPUNIT_TEST(EllenBinTreeMap_rcu_gpi_stat)\
-    CPPUNIT_TEST(EllenBinTreeMap_rcu_gpb)\
-    CPPUNIT_TEST(EllenBinTreeMap_rcu_gpb_yield)\
-    CPPUNIT_TEST(EllenBinTreeMap_rcu_gpb_stat)\
-    CPPUNIT_TEST(EllenBinTreeMap_rcu_gpt)\
-    CPPUNIT_TEST(EllenBinTreeMap_rcu_gpt_stat)\
-    CDSUNIT_TEST_EllenBinTreeMap_RCU_signal
-
-
-// **************************************************************************************
-// BronsonAVLTreeMap
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-#   define CDSUNIT_DECLARE_BronsonAVLTreeMap_RCU_signal \
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_shb_less) \
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_sht_less) \
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_shb_cmp_stat) \
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_sht_cmp_stat) \
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_shb_less_pool_simple) \
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_sht_less_pool_simple) \
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_shb_less_pool_simple_stat) \
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_sht_less_pool_simple_stat) \
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_shb_less_pool_lazy) \
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_sht_less_pool_lazy) \
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_shb_less_pool_lazy_stat) \
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_sht_less_pool_lazy_stat) \
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_shb_less_pool_bounded) \
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_sht_less_pool_bounded) \
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_shb_less_pool_bounded_stat) \
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_sht_less_pool_bounded_stat) \
-
-#   define CDSUNIT_TEST_BronsonAVLTreeMap_RCU_signal \
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_shb_less) \
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_sht_less) \
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_shb_cmp_stat) \
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_sht_cmp_stat) \
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_shb_less_pool_simple) \
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_shb_less_pool_simple_stat) \
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_sht_less_pool_simple) \
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_sht_less_pool_simple_stat) \
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_shb_less_pool_lazy) \
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_shb_less_pool_lazy_stat) \
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_sht_less_pool_lazy) \
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_sht_less_pool_lazy_stat) \
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_shb_less_pool_bounded) \
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_shb_less_pool_bounded_stat) \
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_sht_less_pool_bounded) \
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_sht_less_pool_bounded_stat) \
-
-#else
-#   define CDSUNIT_DECLARE_BronsonAVLTreeMap_RCU_signal
-#   define CDSUNIT_TEST_BronsonAVLTreeMap_RCU_signal
-#endif
-
-#define CDSUNIT_DECLARE_BronsonAVLTreeMap \
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpi_less)\
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpb_less)\
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpt_less)\
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpi_cmp_stat)\
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpb_cmp_stat)\
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpt_cmp_stat)\
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpi_less_pool_simple)\
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpb_less_pool_simple)\
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpt_less_pool_simple)\
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpi_less_pool_simple_stat)\
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpb_less_pool_simple_stat)\
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpt_less_pool_simple_stat)\
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpi_less_pool_lazy)\
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpb_less_pool_lazy)\
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpt_less_pool_lazy)\
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpi_less_pool_lazy_stat)\
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpb_less_pool_lazy_stat)\
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpt_less_pool_lazy_stat)\
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpi_less_pool_bounded)\
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpb_less_pool_bounded)\
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpt_less_pool_bounded)\
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpi_less_pool_bounded_stat)\
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpb_less_pool_bounded_stat)\
-    TEST_CASE(tag_BronsonAVLTreeMap, BronsonAVLTreeMap_rcu_gpt_less_pool_bounded_stat)\
-    CDSUNIT_DECLARE_BronsonAVLTreeMap_RCU_signal
-
-#define CDSUNIT_TEST_BronsonAVLTreeMap \
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpi_less)\
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpi_cmp_stat)\
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpb_less)\
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpb_cmp_stat)\
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpt_less)\
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpt_cmp_stat)\
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpi_less_pool_simple)\
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpi_less_pool_simple_stat)\
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpb_less_pool_simple)\
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpb_less_pool_simple_stat)\
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpt_less_pool_simple)\
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpt_less_pool_simple_stat)\
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpi_less_pool_lazy)\
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpi_less_pool_lazy_stat)\
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpb_less_pool_lazy)\
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpb_less_pool_lazy_stat)\
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpt_less_pool_lazy)\
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpt_less_pool_lazy_stat)\
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpi_less_pool_bounded)\
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpi_less_pool_bounded_stat)\
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpb_less_pool_bounded)\
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpb_less_pool_bounded_stat)\
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpt_less_pool_bounded)\
-    CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpt_less_pool_bounded_stat)\
-    CDSUNIT_TEST_BronsonAVLTreeMap_RCU_signal
-
-
-// **************************************************************************************
-// StripedMap
-
-#define CDSUNIT_DECLARE_StripedMap_common \
-    TEST_CASE(tag_StripedMap, StripedMap_list) \
-    TEST_CASE(tag_StripedMap, StripedMap_map) \
-    TEST_CASE(tag_StripedMap, StripedMap_hashmap) \
-    TEST_CASE(tag_StripedMap, StripedMap_boost_unordered_map)
-
-#define CDSUNIT_TEST_StripedMap_common \
-    CPPUNIT_TEST(StripedMap_list) \
-    CPPUNIT_TEST(StripedMap_map) \
-    CPPUNIT_TEST(StripedMap_hashmap) \
-    CPPUNIT_TEST(StripedMap_boost_unordered_map)
-
-#if BOOST_VERSION >= 104800
-#   define CDSUNIT_DECLARE_StripedMap_boost_container \
-        TEST_CASE(tag_StripedMap, StripedMap_boost_list) \
-        TEST_CASE(tag_StripedMap, StripedMap_slist) \
-        TEST_CASE(tag_StripedMap, StripedMap_boost_map)
-
-#   define CDSUNIT_TEST_StripedMap_boost_container \
-        CPPUNIT_TEST(StripedMap_boost_list) \
-        CPPUNIT_TEST(StripedMap_slist) \
-        CPPUNIT_TEST(StripedMap_boost_map)
-#else
-#   define CDSUNIT_DECLARE_StripedMap_boost_container
-#   define CDSUNIT_TEST_StripedMap_boost_container
-#endif
-
-#if BOOST_VERSION >= 104800 && defined(CDS_UNIT_MAP_TYPES_ENABLE_BOOST_FLAT_CONTAINERS)
-#   define CDSUNIT_DECLARE_StripedMap_boost_flat_container \
-        TEST_CASE(tag_StripedMap, StripedMap_boost_flat_map)
-
-#   define CDSUNIT_TEST_StripedMap_boost_flat_container \
-        CPPUNIT_TEST(StripedMap_boost_flat_map)
-#else
-#   define CDSUNIT_DECLARE_StripedMap_boost_flat_container
-#   define CDSUNIT_TEST_StripedMap_boost_flat_container
-#endif
-
-#define CDSUNIT_DECLARE_StripedMap \
-    CDSUNIT_DECLARE_StripedMap_common \
-    CDSUNIT_DECLARE_StripedMap_boost_container \
-    CDSUNIT_DECLARE_StripedMap_boost_flat_container
-
-#define CDSUNIT_TEST_StripedMap \
-    CDSUNIT_TEST_StripedMap_common \
-    CDSUNIT_TEST_StripedMap_boost_container \
-    CDSUNIT_TEST_StripedMap_boost_flat_container
-
-
-// **************************************************************************************
-// RefinableMap
-
-#define CDSUNIT_DECLARE_RefinableMap_common \
-    TEST_CASE(tag_StripedMap, RefinableMap_list) \
-    TEST_CASE(tag_StripedMap, RefinableMap_map) \
-    TEST_CASE(tag_StripedMap, RefinableMap_hashmap) \
-    TEST_CASE(tag_StripedMap, RefinableMap_boost_unordered_map)
-
-#define CDSUNIT_TEST_RefinableMap_common \
-    CPPUNIT_TEST(RefinableMap_list) \
-    CPPUNIT_TEST(RefinableMap_map) \
-    CPPUNIT_TEST(RefinableMap_hashmap) \
-    CPPUNIT_TEST(RefinableMap_boost_unordered_map)
-
-#if BOOST_VERSION >= 104800
-#   define CDSUNIT_DECLARE_RefinableMap_boost_container \
-        TEST_CASE(tag_StripedMap, RefinableMap_boost_list) \
-        TEST_CASE(tag_StripedMap, RefinableMap_slist) \
-        TEST_CASE(tag_StripedMap, RefinableMap_boost_map)
-
-#   define CDSUNIT_TEST_RefinableMap_boost_container \
-        CPPUNIT_TEST(RefinableMap_boost_list) \
-        CPPUNIT_TEST(RefinableMap_slist) \
-        CPPUNIT_TEST(RefinableMap_boost_map)
-#else
-#   define CDSUNIT_DECLARE_RefinableMap_boost_container
-#   define CDSUNIT_TEST_RefinableMap_boost_container
-#endif
-
-#if BOOST_VERSION >= 104800 && defined(CDS_UNIT_MAP_TYPES_ENABLE_BOOST_FLAT_CONTAINERS)
-#   define CDSUNIT_DECLARE_RefinableMap_boost_flat_container \
-        TEST_CASE(tag_StripedMap, RefinableMap_boost_flat_map)
-
-#   define CDSUNIT_TEST_RefinableMap_boost_flat_container \
-        CPPUNIT_TEST(RefinableMap_boost_flat_map)
-#else
-#   define CDSUNIT_DECLARE_RefinableMap_boost_flat_container
-#   define CDSUNIT_TEST_RefinableMap_boost_flat_container
-#endif
-
-#define CDSUNIT_DECLARE_RefinableMap \
-    CDSUNIT_DECLARE_RefinableMap_common \
-    CDSUNIT_DECLARE_RefinableMap_boost_container \
-    CDSUNIT_DECLARE_RefinableMap_boost_flat_container
-
-#define CDSUNIT_TEST_RefinableMap \
-    CDSUNIT_TEST_RefinableMap_common \
-    CDSUNIT_TEST_RefinableMap_boost_container \
-    CDSUNIT_TEST_RefinableMap_boost_flat_container
-
-
-// **************************************************************************************
-// CuckooMap
-
-#define CDSUNIT_DECLARE_CuckooMap \
-    TEST_CASE(tag_CuckooMap, CuckooStripedMap_list_unord)\
-    TEST_CASE(tag_CuckooMap, CuckooStripedMap_list_ord)\
-    TEST_CASE(tag_CuckooMap, CuckooStripedMap_vector_unord)\
-    TEST_CASE(tag_CuckooMap, CuckooStripedMap_vector_ord)\
-    TEST_CASE(tag_CuckooMap, CuckooStripedMap_list_unord_stat)\
-    TEST_CASE(tag_CuckooMap, CuckooStripedMap_list_ord_stat)\
-    TEST_CASE(tag_CuckooMap, CuckooStripedMap_vector_unord_stat)\
-    TEST_CASE(tag_CuckooMap, CuckooStripedMap_vector_ord_stat)\
-    TEST_CASE(tag_CuckooMap, CuckooRefinableMap_list_unord)\
-    TEST_CASE(tag_CuckooMap, CuckooRefinableMap_list_ord)\
-    TEST_CASE(tag_CuckooMap, CuckooRefinableMap_vector_unord)\
-    TEST_CASE(tag_CuckooMap, CuckooRefinableMap_vector_ord) \
-    TEST_CASE(tag_CuckooMap, CuckooRefinableMap_list_unord_stat)\
-    TEST_CASE(tag_CuckooMap, CuckooRefinableMap_list_ord_stat)\
-    TEST_CASE(tag_CuckooMap, CuckooRefinableMap_vector_unord_stat)\
-    TEST_CASE(tag_CuckooMap, CuckooRefinableMap_vector_ord_stat) \
-    TEST_CASE(tag_CuckooMap, CuckooStripedMap_list_unord_storehash)\
-    TEST_CASE(tag_CuckooMap, CuckooStripedMap_list_ord_storehash)\
-    TEST_CASE(tag_CuckooMap, CuckooStripedMap_vector_unord_storehash)\
-    TEST_CASE(tag_CuckooMap, CuckooStripedMap_vector_ord_storehash)\
-    TEST_CASE(tag_CuckooMap, CuckooRefinableMap_list_unord_storehash)\
-    TEST_CASE(tag_CuckooMap, CuckooRefinableMap_list_ord_storehash)\
-    TEST_CASE(tag_CuckooMap, CuckooRefinableMap_vector_unord_storehash)\
-    TEST_CASE(tag_CuckooMap, CuckooRefinableMap_vector_ord_storehash)
-
-#define CDSUNIT_TEST_CuckooMap \
-    CPPUNIT_TEST(CuckooStripedMap_list_unord)\
-    CPPUNIT_TEST(CuckooStripedMap_list_unord_stat)\
-    CPPUNIT_TEST(CuckooStripedMap_list_unord_storehash)\
-    CPPUNIT_TEST(CuckooStripedMap_list_ord)\
-    CPPUNIT_TEST(CuckooStripedMap_list_ord_stat)\
-    CPPUNIT_TEST(CuckooStripedMap_list_ord_storehash)\
-    CPPUNIT_TEST(CuckooStripedMap_vector_unord)\
-    CPPUNIT_TEST(CuckooStripedMap_vector_unord_stat)\
-    CPPUNIT_TEST(CuckooStripedMap_vector_unord_storehash)\
-    CPPUNIT_TEST(CuckooStripedMap_vector_ord)\
-    CPPUNIT_TEST(CuckooStripedMap_vector_ord_stat)\
-    CPPUNIT_TEST(CuckooStripedMap_vector_ord_storehash)\
-    CPPUNIT_TEST(CuckooRefinableMap_list_unord)\
-    CPPUNIT_TEST(CuckooRefinableMap_list_unord_stat)\
-    CPPUNIT_TEST(CuckooRefinableMap_list_unord_storehash)\
-    CPPUNIT_TEST(CuckooRefinableMap_list_ord)\
-    CPPUNIT_TEST(CuckooRefinableMap_list_ord_stat)\
-    CPPUNIT_TEST(CuckooRefinableMap_list_ord_storehash)\
-    CPPUNIT_TEST(CuckooRefinableMap_vector_unord)\
-    CPPUNIT_TEST(CuckooRefinableMap_vector_unord_stat)\
-    CPPUNIT_TEST(CuckooRefinableMap_vector_unord_storehash)\
-    CPPUNIT_TEST(CuckooRefinableMap_vector_ord)\
-    CPPUNIT_TEST(CuckooRefinableMap_vector_ord_stat)\
-    CPPUNIT_TEST(CuckooRefinableMap_vector_ord_storehash)
-
-
-// **************************************************************************************
-// FeldmanHashMap
-
-
-// fixed-sized key - no hash function is necessary
-
-#undef CDSUNIT_DECLARE_FeldmanHashMap_fixed
-#undef CDSUNIT_DECLARE_FeldmanHashMap_fixed_RCU_Signal
-#undef CDSUNIT_TEST_FeldmanHashMap_fixed
-#undef CDSUNIT_TEST_FeldmanHashMap_fixed_RCU_Signal
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-#   define CDSUNIT_DECLARE_FeldmanHashMap_fixed_RCU_Signal \
-        TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_shb_fixed) \
-        TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_shb_fixed_stat) \
-        TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_sht_fixed) \
-        TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_sht_fixed_stat) \
-
-#   define CDSUNIT_TEST_FeldmanHashMap_fixed_RCU_Signal \
-        CPPUNIT_TEST(FeldmanHashMap_rcu_shb_fixed) \
-        CPPUNIT_TEST(FeldmanHashMap_rcu_shb_fixed_stat) \
-        CPPUNIT_TEST(FeldmanHashMap_rcu_sht_fixed) \
-        CPPUNIT_TEST(FeldmanHashMap_rcu_sht_fixed_stat) \
-
-#else
-#   define CDSUNIT_DECLARE_FeldmanHashMap_fixed_RCU_Signal
-#   define CDSUNIT_TEST_FeldmanHashMap_fixed_RCU_Signal
-#endif
-
-
-#define CDSUNIT_DECLARE_FeldmanHashMap_fixed \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_hp_fixed) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_hp_fixed_stat) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_dhp_fixed) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_dhp_fixed_stat) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpi_fixed) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpi_fixed_stat) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpb_fixed) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpb_fixed_stat) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpt_fixed) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpt_fixed_stat) \
-    CDSUNIT_DECLARE_FeldmanHashMap_fixed_RCU_Signal
-
-#define CDSUNIT_TEST_FeldmanHashMap_fixed \
-    CPPUNIT_TEST(FeldmanHashMap_hp_fixed) \
-    CPPUNIT_TEST(FeldmanHashMap_hp_fixed_stat) \
-    CPPUNIT_TEST(FeldmanHashMap_dhp_fixed) \
-    CPPUNIT_TEST(FeldmanHashMap_dhp_fixed_stat) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpi_fixed) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpi_fixed_stat) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpb_fixed) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpb_fixed_stat) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpt_fixed) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpt_fixed_stat) \
-    CDSUNIT_TEST_FeldmanHashMap_fixed_RCU_Signal
-
-// std::hash
-
-#undef CDSUNIT_DECLARE_FeldmanHashMap_stdhash
-#undef CDSUNIT_DECLARE_FeldmanHashMap_stdhash_RCU_Signal
-#undef CDSUNIT_TEST_FeldmanHashMap_stdhash
-#undef CDSUNIT_TEST_FeldmanHashMap_stdhash_RCU_Signal
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-#   define CDSUNIT_DECLARE_FeldmanHashMap_stdhash_RCU_Signal \
-        TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_shb_stdhash) \
-        TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_shb_stdhash_stat) \
-        TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_sht_stdhash) \
-        TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_sht_stdhash_stat) \
-
-#   define CDSUNIT_TEST_FeldmanHashMap_stdhash_RCU_Signal \
-        CPPUNIT_TEST(FeldmanHashMap_rcu_shb_stdhash) \
-        CPPUNIT_TEST(FeldmanHashMap_rcu_shb_stdhash_stat) \
-        CPPUNIT_TEST(FeldmanHashMap_rcu_sht_stdhash) \
-        CPPUNIT_TEST(FeldmanHashMap_rcu_sht_stdhash_stat) \
-
-#else
-#   define CDSUNIT_DECLARE_FeldmanHashMap_stdhash_RCU_Signal
-#   define CDSUNIT_TEST_FeldmanHashMap_stdhash_RCU_Signal
-#endif
-
-
-#define CDSUNIT_DECLARE_FeldmanHashMap_stdhash \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_hp_stdhash) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_hp_stdhash_stat) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_dhp_stdhash) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_dhp_stdhash_stat) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpi_stdhash) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpi_stdhash_stat) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpb_stdhash) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpb_stdhash_stat) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpt_stdhash) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpt_stdhash_stat) \
-    CDSUNIT_DECLARE_FeldmanHashMap_stdhash_RCU_Signal
-
-#define CDSUNIT_TEST_FeldmanHashMap_stdhash \
-    CPPUNIT_TEST(FeldmanHashMap_hp_stdhash) \
-    CPPUNIT_TEST(FeldmanHashMap_hp_stdhash_stat) \
-    CPPUNIT_TEST(FeldmanHashMap_dhp_stdhash) \
-    CPPUNIT_TEST(FeldmanHashMap_dhp_stdhash_stat) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpi_stdhash) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpi_stdhash_stat) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpb_stdhash) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpb_stdhash_stat) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpt_stdhash) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpt_stdhash_stat) \
-    CDSUNIT_TEST_FeldmanHashMap_stdhash_RCU_Signal
-
-// CityHash - only for 64bit
-
-#undef CDSUNIT_DECLARE_FeldmanHashMap_city128_RCU_Signal
-#undef CDSUNIT_TEST_FeldmanHashMap_city128_RCU_Signal
-
-#if CDS_BUILD_BITS == 64
-
-#undef CDSUNIT_DECLARE_FeldmanHashMap_city64
-#undef CDSUNIT_DECLARE_FeldmanHashMap_city64_RCU_Signal
-#undef CDSUNIT_TEST_FeldmanHashMap_city64
-#undef CDSUNIT_TEST_FeldmanHashMap_city64_RCU_Signal
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-#   define CDSUNIT_DECLARE_FeldmanHashMap_city64_RCU_Signal \
-        TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_shb_city64) \
-        TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_shb_city64_stat) \
-        TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_sht_city64) \
-        TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_sht_city64_stat) \
-
-#   define CDSUNIT_TEST_FeldmanHashMap_city64_RCU_Signal \
-        CPPUNIT_TEST(FeldmanHashMap_rcu_shb_city64) \
-        CPPUNIT_TEST(FeldmanHashMap_rcu_shb_city64_stat) \
-        CPPUNIT_TEST(FeldmanHashMap_rcu_sht_city64) \
-        CPPUNIT_TEST(FeldmanHashMap_rcu_sht_city64_stat) \
-
-#else
-#   define CDSUNIT_DECLARE_FeldmanHashMap_city64_RCU_Signal
-#   define CDSUNIT_TEST_FeldmanHashMap_city64_RCU_Signal
-#endif
-
-
-#define CDSUNIT_DECLARE_FeldmanHashMap_city64 \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_hp_city64) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_hp_city64_stat) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_dhp_city64) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_dhp_city64_stat) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpi_city64) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpi_city64_stat) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpb_city64) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpb_city64_stat) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpt_city64) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpt_city64_stat) \
-    CDSUNIT_DECLARE_FeldmanHashMap_city64_RCU_Signal
-
-#define CDSUNIT_TEST_FeldmanHashMap_city64 \
-    CPPUNIT_TEST(FeldmanHashMap_hp_city64) \
-    CPPUNIT_TEST(FeldmanHashMap_hp_city64_stat) \
-    CPPUNIT_TEST(FeldmanHashMap_dhp_city64) \
-    CPPUNIT_TEST(FeldmanHashMap_dhp_city64_stat) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpi_city64) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpi_city64_stat) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpb_city64) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpb_city64_stat) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpt_city64) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpt_city64_stat) \
-    CDSUNIT_TEST_FeldmanHashMap_city64_RCU_Signal
-
-#undef CDSUNIT_DECLARE_FeldmanHashMap_city128
-#undef CDSUNIT_DECLARE_FeldmanHashMap_city128_RCU_Signal
-#undef CDSUNIT_TEST_FeldmanHashMap_city128
-#undef CDSUNIT_TEST_FeldmanHashMap_city128_RCU_Signal
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-#   define CDSUNIT_DECLARE_FeldmanHashMap_city128_RCU_Signal \
-        TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_shb_city128) \
-        TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_shb_city128_stat) \
-        TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_sht_city128) \
-        TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_sht_city128_stat) \
-
-#   define CDSUNIT_TEST_FeldmanHashMap_city128_RCU_Signal \
-        CPPUNIT_TEST(FeldmanHashMap_rcu_shb_city128) \
-        CPPUNIT_TEST(FeldmanHashMap_rcu_shb_city128_stat) \
-        CPPUNIT_TEST(FeldmanHashMap_rcu_sht_city128) \
-        CPPUNIT_TEST(FeldmanHashMap_rcu_sht_city128_stat) \
-
-#else
-#   define CDSUNIT_DECLARE_FeldmanHashMap_city128_RCU_Signal
-#   define CDSUNIT_TEST_FeldmanHashMap_city128_RCU_Signal
-#endif
-
-
-#define CDSUNIT_DECLARE_FeldmanHashMap_city128 \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_hp_city128) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_hp_city128_stat) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_dhp_city128) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_dhp_city128_stat) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpi_city128) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpi_city128_stat) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpb_city128) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpb_city128_stat) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpt_city128) \
-    TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpt_city128_stat) \
-    CDSUNIT_DECLARE_FeldmanHashMap_city128_RCU_Signal
-
-#define CDSUNIT_TEST_FeldmanHashMap_city128 \
-    CPPUNIT_TEST(FeldmanHashMap_hp_city128) \
-    CPPUNIT_TEST(FeldmanHashMap_hp_city128_stat) \
-    CPPUNIT_TEST(FeldmanHashMap_dhp_city128) \
-    CPPUNIT_TEST(FeldmanHashMap_dhp_city128_stat) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpi_city128) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpi_city128_stat) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpb_city128) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpb_city128_stat) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpt_city128) \
-    CPPUNIT_TEST(FeldmanHashMap_rcu_gpt_city128_stat) \
-    CDSUNIT_TEST_FeldmanHashMap_city128_RCU_Signal
-
-#define CDSUNIT_DECLARE_FeldmanHashMap_city \
-    CDSUNIT_DECLARE_FeldmanHashMap_city64 \
-    CDSUNIT_DECLARE_FeldmanHashMap_city128
-
-#define CDSUNIT_TEST_FeldmanHashMap_city \
-    CDSUNIT_TEST_FeldmanHashMap_city64 \
-    CDSUNIT_TEST_FeldmanHashMap_city128
-
-#else // 32bit
-#   define CDSUNIT_DECLARE_FeldmanHashMap_city
-#   define CDSUNIT_TEST_FeldmanHashMap_city
-#endif // #if CDS_BUILD_BITS == 64
-
-#undef CDSUNIT_DECLARE_FeldmanHashMap
-#undef CDSUNIT_TEST_FeldmanHashMap
-
-#define CDSUNIT_DECLARE_FeldmanHashMap \
-    CDSUNIT_DECLARE_FeldmanHashMap_fixed \
-    CDSUNIT_DECLARE_FeldmanHashMap_stdhash \
-    CDSUNIT_DECLARE_FeldmanHashMap_city \
-
-#define CDSUNIT_TEST_FeldmanHashMap \
-    CDSUNIT_TEST_FeldmanHashMap_fixed \
-    CDSUNIT_TEST_FeldmanHashMap_stdhash \
-    CDSUNIT_TEST_FeldmanHashMap_city
-
diff --git a/tests/unit/map2/map_delodd.cpp b/tests/unit/map2/map_delodd.cpp
deleted file mode 100644 (file)
index 790cb95..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_delodd.h"
-
-namespace map2 {
-    CPPUNIT_TEST_SUITE_REGISTRATION( Map_DelOdd );
-
-    void Map_DelOdd::setUpParams( const CppUnitMini::TestCfg& cfg ) {
-        c_nMapSize = cfg.getSizeT("MapSize", c_nMapSize );
-        c_nInsThreadCount = cfg.getSizeT("InsThreadCount", c_nInsThreadCount );
-        c_nDelThreadCount = cfg.getSizeT("DelThreadCount", c_nDelThreadCount );
-        c_nExtractThreadCount = cfg.getSizeT("ExtractThreadCount", c_nExtractThreadCount );
-        c_nMaxLoadFactor = cfg.getSizeT("MaxLoadFactor", c_nMaxLoadFactor );
-        c_bPrintGCState = cfg.getBool("PrintGCStateFlag", true );
-
-        c_nCuckooInitialSize = cfg.getSizeT("CuckooInitialSize", c_nCuckooInitialSize );
-        c_nCuckooProbesetSize = cfg.getSizeT("CuckooProbesetSize", c_nCuckooProbesetSize );
-        c_nCuckooProbesetThreshold = cfg.getSizeT("CuckooProbesetThreshold", c_nCuckooProbesetThreshold );
-
-        c_nFeldmanMap_HeadBits = cfg.getSizeT("FeldmanMapHeadBits", c_nFeldmanMap_HeadBits);
-        c_nFeldmanMap_ArrayBits = cfg.getSizeT("FeldmanMapArrayBits", c_nFeldmanMap_ArrayBits);
-
-        if ( c_nInsThreadCount == 0 )
-            c_nInsThreadCount = cds::OS::topology::processor_count();
-        if ( c_nDelThreadCount == 0 && c_nExtractThreadCount == 0 ) {
-            c_nExtractThreadCount = cds::OS::topology::processor_count() / 2;
-            c_nDelThreadCount = cds::OS::topology::processor_count() - c_nExtractThreadCount;
-        }
-
-        m_arrInsert.resize( c_nMapSize );
-        m_arrRemove.resize( c_nMapSize );
-        for ( size_t i = 0; i < c_nMapSize; ++i ) {
-            m_arrInsert[i] = i;
-            m_arrRemove[i] = i;
-        }
-        shuffle( m_arrInsert.begin(), m_arrInsert.end());
-        shuffle( m_arrRemove.begin(), m_arrRemove.end());
-    }
-
-    void Map_DelOdd::endTestCase()
-    {
-        m_arrInsert.resize(0);
-        m_arrRemove.resize(0);
-    }
-
-} // namespace map2
diff --git a/tests/unit/map2/map_delodd.h b/tests/unit/map2/map_delodd.h
deleted file mode 100644 (file)
index 97bf884..0000000
+++ /dev/null
@@ -1,829 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/thread.h"
-#include "map2/map_type.h"
-#include <cds/os/topology.h>
-
-namespace map2 {
-
-#   define TEST_CASE(TAG, X)  void X();
-
-    namespace {
-        struct key_thread
-        {
-            uint32_t  nKey;
-            uint16_t  nThread;
-            uint16_t  pad_;
-
-            key_thread( size_t key, size_t threadNo )
-                : nKey( static_cast<uint32_t>(key))
-                , nThread( static_cast<uint16_t>(threadNo))
-                , pad_(0)
-            {}
-
-            key_thread()
-            {}
-        };
-    }
-
-    template <>
-    struct cmp<key_thread> {
-        int operator ()(key_thread const& k1, key_thread const& k2) const
-        {
-            if ( k1.nKey < k2.nKey )
-                return -1;
-            if ( k1.nKey > k2.nKey )
-                return 1;
-            if ( k1.nThread < k2.nThread )
-                return -1;
-            if ( k1.nThread > k2.nThread )
-                return 1;
-            return 0;
-        }
-        int operator ()(key_thread const& k1, size_t k2) const
-        {
-            if ( k1.nKey < k2 )
-                return -1;
-            if ( k1.nKey > k2 )
-                return 1;
-            return 0;
-        }
-        int operator ()(size_t k1, key_thread const& k2) const
-        {
-            if ( k1 < k2.nKey )
-                return -1;
-            if ( k1 > k2.nKey )
-                return 1;
-            return 0;
-        }
-    };
-
-} // namespace map2
-
-namespace std {
-    template <>
-    struct less<map2::key_thread>
-    {
-        bool operator()(map2::key_thread const& k1, map2::key_thread const& k2) const
-        {
-            if ( k1.nKey <= k2.nKey )
-                return k1.nKey < k2.nKey || k1.nThread < k2.nThread;
-            return false;
-        }
-    };
-
-    template <>
-    struct hash<map2::key_thread>
-    {
-        typedef size_t              result_type;
-        typedef map2::key_thread    argument_type;
-
-        size_t operator()( map2::key_thread const& k ) const
-        {
-            return std::hash<size_t>()(k.nKey);
-        }
-        size_t operator()( size_t k ) const
-        {
-            return std::hash<size_t>()(k);
-        }
-    };
-} // namespace std
-
-namespace boost {
-    inline size_t hash_value( map2::key_thread const& k )
-    {
-        return std::hash<size_t>()( k.nKey );
-    }
-
-    template <>
-    struct hash<map2::key_thread>
-    {
-        typedef size_t              result_type;
-        typedef map2::key_thread    argument_type;
-
-        size_t operator()(map2::key_thread const& k) const
-        {
-            return boost::hash<size_t>()( k.nKey );
-        }
-        size_t operator()(size_t k) const
-        {
-            return boost::hash<size_t>()( k );
-        }
-    };
-} // namespace boost
-
-namespace map2 {
-
-    class Map_DelOdd: public CppUnitMini::TestCase
-    {
-    public:
-        size_t  c_nInsThreadCount = 4;      // insert thread count
-        size_t  c_nDelThreadCount = 4;      // delete thread count
-        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_nFeldmanMap_HeadBits = 10;
-        size_t c_nFeldmanMap_ArrayBits = 4;
-
-        bool    c_bPrintGCState = true;
-
-        size_t  c_nLoadFactor;  // current load factor
-
-    private:
-        std::vector<size_t>     m_arrInsert;
-        std::vector<size_t>     m_arrRemove;
-
-    protected:
-        typedef key_thread  key_type;
-        typedef size_t      value_type;
-        typedef std::pair<key_type const, value_type> pair_type;
-
-        atomics::atomic<size_t>      m_nInsThreadCount;
-
-        // Inserts keys from [0..N)
-        template <class Map>
-        class InsertThread: public CppUnitMini::TestThread
-        {
-            Map&     m_Map;
-
-            virtual InsertThread *    clone()
-            {
-                return new InsertThread( *this );
-            }
-
-            struct ensure_func
-            {
-                template <typename Q>
-                void operator()( bool /*bNew*/, Q const& )
-                {}
-                template <typename Q, typename V>
-                void operator()( bool /*bNew*/, Q const&, V& )
-                {}
-
-                // FeldmanHashMap
-                template <typename Q>
-                void operator()( Q&, Q*)
-                {}
-            };
-        public:
-            size_t  m_nInsertSuccess;
-            size_t  m_nInsertFailed;
-
-        public:
-            InsertThread( CppUnitMini::ThreadPool& pool, Map& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Map( rMap )
-            {}
-            InsertThread( InsertThread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Map( src.m_Map )
-            {}
-
-            Map_DelOdd&  getTest()
-            {
-                return reinterpret_cast<Map_DelOdd&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                Map& rMap = m_Map;
-
-                m_nInsertSuccess =
-                    m_nInsertFailed = 0;
-
-                std::vector<size_t>& arrData = getTest().m_arrInsert;
-                for ( size_t i = 0; i < arrData.size(); ++i ) {
-                    if ( rMap.insert( key_type( arrData[i], m_nThreadNo )))
-                        ++m_nInsertSuccess;
-                    else
-                        ++m_nInsertFailed;
-                }
-
-                ensure_func f;
-                for ( size_t i = arrData.size() - 1; i > 0; --i ) {
-                    if ( arrData[i] & 1 ) {
-                        rMap.update( key_type( arrData[i], m_nThreadNo ), f );
-                    }
-                }
-
-                getTest().m_nInsThreadCount.fetch_sub( 1, atomics::memory_order_acquire );
-            }
-        };
-
-        struct key_equal {
-            bool operator()( key_type const& k1, key_type const& k2 ) const
-            {
-                return k1.nKey == k2.nKey;
-            }
-            bool operator()( size_t k1, key_type const& k2 ) const
-            {
-                return k1 == k2.nKey;
-            }
-            bool operator()( key_type const& k1, size_t k2 ) const
-            {
-                return k1.nKey == k2;
-            }
-        };
-
-        struct key_less {
-            bool operator()( key_type const& k1, key_type const& k2 ) const
-            {
-                return k1.nKey < k2.nKey;
-            }
-            bool operator()( size_t k1, key_type const& k2 ) const
-            {
-                return k1 < k2.nKey;
-            }
-            bool operator()( key_type const& k1, size_t k2 ) const
-            {
-                return k1.nKey < k2;
-            }
-
-            typedef key_equal equal_to;
-        };
-
-        // Deletes odd keys from [0..N)
-        template <class Map>
-        class DeleteThread: public CppUnitMini::TestThread
-        {
-            Map&     m_Map;
-
-            virtual DeleteThread *    clone()
-            {
-                return new DeleteThread( *this );
-            }
-        public:
-            size_t  m_nDeleteSuccess;
-            size_t  m_nDeleteFailed;
-
-        public:
-            DeleteThread( CppUnitMini::ThreadPool& pool, Map& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Map( rMap )
-            {}
-            DeleteThread( DeleteThread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Map( src.m_Map )
-            {}
-
-            Map_DelOdd&  getTest()
-            {
-                return reinterpret_cast<Map_DelOdd&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            template <typename MapType, bool>
-            struct eraser {
-                static bool erase(MapType& map, size_t key, size_t /*insThread*/)
-                {
-                    return map.erase_with(key, key_less());
-                }
-            };
-
-            template <typename MapType>
-            struct eraser<MapType, true>
-            {
-                static bool erase(MapType& map, size_t key, size_t insThread)
-                {
-                    return map.erase(key_type(key, insThread));
-                }
-            };
-
-            virtual void test()
-            {
-                Map& rMap = m_Map;
-
-                m_nDeleteSuccess =
-                    m_nDeleteFailed = 0;
-
-                size_t const nInsThreadCount = getTest().c_nInsThreadCount;
-
-                for ( size_t pass = 0; pass < 2; pass++ ) {
-                    std::vector<size_t>& arrData = getTest().m_arrRemove;
-                    if ( m_nThreadNo & 1 ) {
-                        for ( size_t k = 0; k < nInsThreadCount; ++k ) {
-                            for ( size_t i = 0; i < arrData.size(); ++i ) {
-                                if ( arrData[i] & 1 ) {
-                                    if ( Map::c_bEraseExactKey ) {
-                                        for (size_t key = 0; key < nInsThreadCount; ++key) {
-                                            if ( eraser<Map, Map::c_bEraseExactKey>::erase( rMap, arrData[i], key ))
-                                                ++m_nDeleteSuccess;
-                                            else
-                                                ++m_nDeleteFailed;
-                                        }
-                                    }
-                                    else {
-                                        if ( eraser<Map, Map::c_bEraseExactKey>::erase(rMap, arrData[i], 0))
-                                            ++m_nDeleteSuccess;
-                                        else
-                                            ++m_nDeleteFailed;
-                                    }
-                                }
-                            }
-                            if ( getTest().m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
-                                break;
-                        }
-                    }
-                    else {
-                        for ( size_t k = 0; k < nInsThreadCount; ++k ) {
-                            for ( size_t i = arrData.size() - 1; i > 0; --i ) {
-                                if ( arrData[i] & 1 ) {
-                                    if ( Map::c_bEraseExactKey ) {
-                                        for (size_t key = 0; key < nInsThreadCount; ++key) {
-                                            if (eraser<Map, Map::c_bEraseExactKey>::erase(rMap, arrData[i], key))
-                                                ++m_nDeleteSuccess;
-                                            else
-                                                ++m_nDeleteFailed;
-                                        }
-                                    }
-                                    else {
-                                        if (eraser<Map, Map::c_bEraseExactKey>::erase(rMap, arrData[i], 0))
-                                            ++m_nDeleteSuccess;
-                                        else
-                                            ++m_nDeleteFailed;
-                                    }
-                                }
-                            }
-                            if ( getTest().m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
-                                break;
-                        }
-                    }
-                }
-            }
-        };
-
-        // Deletes odd keys from [0..N)
-        template <class GC, class Map >
-        class ExtractThread: public CppUnitMini::TestThread
-        {
-            Map&     m_Map;
-
-            virtual ExtractThread *    clone()
-            {
-                return new ExtractThread( *this );
-            }
-        public:
-            size_t  m_nDeleteSuccess;
-            size_t  m_nDeleteFailed;
-
-        public:
-            ExtractThread( CppUnitMini::ThreadPool& pool, Map& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Map( rMap )
-            {}
-            ExtractThread( ExtractThread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Map( src.m_Map )
-            {}
-
-            Map_DelOdd&  getTest()
-            {
-                return reinterpret_cast<Map_DelOdd&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            template <typename MapType, bool>
-            struct extractor {
-                static typename Map::guarded_ptr extract(MapType& map, size_t key, size_t /*insThread*/)
-                {
-                    return map.extract_with(key, key_less());
-                }
-            };
-
-            template <typename MapType>
-            struct extractor<MapType, true>
-            {
-                static typename Map::guarded_ptr extract(MapType& map, size_t key, size_t insThread)
-                {
-                    return map.extract(key_type(key, insThread));
-                }
-            };
-
-            virtual void test()
-            {
-                Map& rMap = m_Map;
-
-                m_nDeleteSuccess =
-                    m_nDeleteFailed = 0;
-
-                typename Map::guarded_ptr gp;
-                size_t const nInsThreadCount = getTest().c_nInsThreadCount;
-
-                for ( size_t pass = 0; pass < 2; ++pass ) {
-                    std::vector<size_t>& arrData = getTest().m_arrRemove;
-                    if ( m_nThreadNo & 1 ) {
-                        for ( size_t k = 0; k < nInsThreadCount; ++k ) {
-                            for ( size_t i = 0; i < arrData.size(); ++i ) {
-                                if ( arrData[i] & 1 ) {
-                                    gp = extractor< Map, Map::c_bEraseExactKey >::extract( rMap, arrData[i], k );
-                                    if ( gp )
-                                        ++m_nDeleteSuccess;
-                                    else
-                                        ++m_nDeleteFailed;
-                                    gp.release();
-                                }
-                            }
-                            if ( getTest().m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
-                                break;
-                        }
-                    }
-                    else {
-                        for ( size_t k = 0; k < nInsThreadCount; ++k ) {
-                            for ( size_t i = arrData.size() - 1; i > 0; --i ) {
-                                if ( arrData[i] & 1 ) {
-                                    gp = extractor< Map, Map::c_bEraseExactKey >::extract( rMap, arrData[i], k);
-                                    if ( gp )
-                                        ++m_nDeleteSuccess;
-                                    else
-                                        ++m_nDeleteFailed;
-                                    gp.release();
-                                }
-                            }
-                            if ( getTest().m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
-                                break;
-                        }
-                    }
-                }
-            }
-        };
-
-        template <class RCU, class Map >
-        class ExtractThread< cds::urcu::gc<RCU>, Map > : public CppUnitMini::TestThread
-        {
-            Map&     m_Map;
-
-            virtual ExtractThread *    clone()
-            {
-                return new ExtractThread( *this );
-            }
-        public:
-            size_t  m_nDeleteSuccess;
-            size_t  m_nDeleteFailed;
-
-        public:
-            ExtractThread( CppUnitMini::ThreadPool& pool, Map& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Map( rMap )
-            {}
-            ExtractThread( ExtractThread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Map( src.m_Map )
-            {}
-
-            Map_DelOdd&  getTest()
-            {
-                return reinterpret_cast<Map_DelOdd&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            template <typename MapType, bool>
-            struct extractor {
-                static typename Map::exempt_ptr extract( MapType& map, size_t key, size_t /*insThread*/ )
-                {
-                    return map.extract_with( key, key_less());
-                }
-            };
-
-            template <typename MapType>
-            struct extractor<MapType, true>
-            {
-                static typename Map::exempt_ptr extract(MapType& map, size_t key, size_t insThread)
-                {
-                    return map.extract( key_type(key, insThread));
-                }
-            };
-
-            virtual void test()
-            {
-                Map& rMap = m_Map;
-
-                m_nDeleteSuccess =
-                    m_nDeleteFailed = 0;
-
-                typename Map::exempt_ptr xp;
-                size_t const nInsThreadCount = getTest().c_nInsThreadCount;
-
-                std::vector<size_t>& arrData = getTest().m_arrRemove;
-                if ( m_nThreadNo & 1 ) {
-                    for ( size_t k = 0; k < nInsThreadCount; ++k ) {
-                        for ( size_t i = 0; i < arrData.size(); ++i ) {
-                            if ( arrData[i] & 1 ) {
-                                if ( Map::c_bExtractLockExternal ) {
-                                    {
-                                        typename Map::rcu_lock l;
-                                        xp = extractor<Map, Map::c_bEraseExactKey>::extract( rMap, arrData[i], k );
-                                        if ( xp )
-                                            ++m_nDeleteSuccess;
-                                        else
-                                            ++m_nDeleteFailed;
-                                    }
-                                }
-                                else {
-                                    xp = extractor<Map, Map::c_bEraseExactKey>::extract( rMap, arrData[i], k);
-                                    if ( xp )
-                                        ++m_nDeleteSuccess;
-                                    else
-                                        ++m_nDeleteFailed;
-                                }
-                                xp.release();
-                            }
-                        }
-                        if ( getTest().m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
-                            break;
-                    }
-                }
-                else {
-                    for ( size_t k = 0; k < nInsThreadCount; ++k ) {
-                        for ( size_t i = arrData.size() - 1; i > 0; --i ) {
-                            if ( arrData[i] & 1 ) {
-                                if ( Map::c_bExtractLockExternal ) {
-                                    {
-                                        typename Map::rcu_lock l;
-                                        xp = extractor<Map, Map::c_bEraseExactKey>::extract(rMap, arrData[i], k);
-                                        if ( xp )
-                                            ++m_nDeleteSuccess;
-                                        else
-                                            ++m_nDeleteFailed;
-                                    }
-                                }
-                                else {
-                                    xp = extractor<Map, Map::c_bEraseExactKey>::extract(rMap, arrData[i], k);
-                                    if ( xp )
-                                        ++m_nDeleteSuccess;
-                                    else
-                                        ++m_nDeleteFailed;
-                                }
-                                xp.release();
-                            }
-                        }
-                        if ( getTest().m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
-                            break;
-                    }
-                }
-            }
-        };
-
-    protected:
-        template <class Map>
-        void do_test()
-        {
-            Map  testMap( *this );
-            do_test_with( testMap );
-        }
-
-        template <class Map>
-        void do_test_extract()
-        {
-            Map  testMap( *this );
-            do_test_extract_with( testMap );
-        }
-
-        template <class Map>
-        void do_test_with( Map& testMap )
-        {
-            typedef InsertThread<Map> insert_thread;
-            typedef DeleteThread<Map> delete_thread;
-
-            m_nInsThreadCount.store( c_nInsThreadCount, atomics::memory_order_release );
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new insert_thread( pool, testMap ), c_nInsThreadCount );
-            pool.add( new delete_thread( pool, testMap ), c_nDelThreadCount ? c_nDelThreadCount : cds::OS::topology::processor_count());
-            pool.run();
-            CPPUNIT_MSG( "   Duration=" << pool.avgDuration());
-
-            size_t nInsertSuccess = 0;
-            size_t nInsertFailed = 0;
-            size_t nDeleteSuccess = 0;
-            size_t nDeleteFailed = 0;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                insert_thread * pThread = dynamic_cast<insert_thread *>( *it );
-                if ( pThread ) {
-                    nInsertSuccess += pThread->m_nInsertSuccess;
-                    nInsertFailed += pThread->m_nInsertFailed;
-                }
-                else {
-                    delete_thread * p = static_cast<delete_thread *>( *it );
-                    nDeleteSuccess += p->m_nDeleteSuccess;
-                    nDeleteFailed += p->m_nDeleteFailed;
-                }
-            }
-
-            CPPUNIT_MSG( "  Totals (success/failed): \n\t"
-                << "      Insert=" << nInsertSuccess << '/' << nInsertFailed << "\n\t"
-                << "      Delete=" << nDeleteSuccess << '/' << nDeleteFailed << "\n\t"
-                );
-            CPPUNIT_CHECK( nInsertSuccess == c_nMapSize * c_nInsThreadCount );
-            CPPUNIT_CHECK( nInsertFailed == 0 );
-
-            analyze( testMap );
-        }
-
-        template <class Map>
-        void do_test_extract_with( Map& testMap )
-        {
-            typedef InsertThread<Map> insert_thread;
-            typedef DeleteThread<Map> delete_thread;
-            typedef ExtractThread< typename Map::gc, Map > extract_thread;
-
-            m_nInsThreadCount.store( c_nInsThreadCount, atomics::memory_order_release );
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new insert_thread( pool, testMap ), c_nInsThreadCount );
-            if ( c_nDelThreadCount )
-                pool.add( new delete_thread( pool, testMap ), c_nDelThreadCount );
-            if ( c_nExtractThreadCount )
-                pool.add( new extract_thread( pool, testMap ), c_nExtractThreadCount );
-            pool.run();
-            CPPUNIT_MSG( "   Duration=" << pool.avgDuration());
-
-            size_t nInsertSuccess = 0;
-            size_t nInsertFailed = 0;
-            size_t nDeleteSuccess = 0;
-            size_t nDeleteFailed = 0;
-            size_t nExtractSuccess = 0;
-            size_t nExtractFailed = 0;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                insert_thread * pThread = dynamic_cast<insert_thread *>( *it );
-                if ( pThread ) {
-                    nInsertSuccess += pThread->m_nInsertSuccess;
-                    nInsertFailed += pThread->m_nInsertFailed;
-                }
-                else {
-                    delete_thread * p = dynamic_cast<delete_thread *>( *it );
-                    if ( p ) {
-                        nDeleteSuccess += p->m_nDeleteSuccess;
-                        nDeleteFailed += p->m_nDeleteFailed;
-                    }
-                    else {
-                        extract_thread * pExtract = dynamic_cast<extract_thread *>( *it );
-                        assert( pExtract );
-                        nExtractSuccess += pExtract->m_nDeleteSuccess;
-                        nExtractFailed += pExtract->m_nDeleteFailed;
-                    }
-                }
-            }
-
-            CPPUNIT_MSG( "  Totals (success/failed): \n\t"
-                << "      Insert=" << nInsertSuccess << '/' << nInsertFailed << "\n\t"
-                << "      Delete=" << nDeleteSuccess << '/' << nDeleteFailed << "\n\t"
-                << "      Extract=" << nExtractSuccess << '/' << nExtractFailed << "\n\t"
-                );
-            CPPUNIT_CHECK( nInsertSuccess == c_nMapSize * c_nInsThreadCount );
-            CPPUNIT_CHECK( nInsertFailed == 0 );
-
-            analyze( testMap );
-        }
-
-        template <class Map>
-        void analyze( Map& testMap )
-        {
-            cds::OS::Timer    timer;
-
-            // All even keys must be in the map
-            {
-                size_t nErrorCount = 0;
-                CPPUNIT_MSG( "  Check even keys..." );
-                for ( size_t n = 0; n < c_nMapSize; n +=2 ) {
-                    for ( size_t i = 0; i < c_nInsThreadCount; ++i ) {
-                        if ( !testMap.contains( key_type(n, i))) {
-                            if ( ++nErrorCount < 10 ) {
-                                CPPUNIT_MSG( "key " << n << "-" << i << " is not found!");
-                            }
-                        }
-                    }
-                }
-                CPPUNIT_CHECK_EX( nErrorCount == 0, "Totals: " << nErrorCount << " keys is not found");
-            }
-
-            print_stat(testMap);
-
-            check_before_cleanup( testMap );
-
-            CPPUNIT_MSG( "  Clear map (single-threaded)..." );
-            timer.reset();
-            testMap.clear();
-            CPPUNIT_MSG( "   Duration=" << timer.duration());
-            CPPUNIT_CHECK_EX( testMap.empty(), ((long long) testMap.size()));
-
-            additional_check( testMap );
-            print_stat( testMap );
-
-            additional_cleanup( testMap );
-        }
-
-        template <class Map>
-        void run_test()
-        {
-            static_assert( Map::c_bExtractSupported, "Map class must support extract() method" );
-
-            CPPUNIT_MSG( "Thread count: insert=" << c_nInsThreadCount
-                << ", delete=" << c_nDelThreadCount
-                << ", extract=" << c_nExtractThreadCount
-                << "; set size=" << c_nMapSize
-                );
-            if ( Map::c_bLoadFactorDepended ) {
-                for ( c_nLoadFactor = 1; c_nLoadFactor <= c_nMaxLoadFactor; c_nLoadFactor *= 2 ) {
-                    CPPUNIT_MSG( "Load factor=" << c_nLoadFactor );
-                    do_test_extract<Map>();
-                    if ( c_bPrintGCState )
-                        print_gc_state();
-                }
-            }
-            else
-                do_test_extract<Map>();
-        }
-
-        template <class Map>
-        void run_test_no_extract()
-        {
-            static_assert( !Map::c_bExtractSupported, "Map class must not support extract() method" );
-
-            CPPUNIT_MSG( "Insert thread count=" << c_nInsThreadCount
-                << " delete thread count=" << c_nDelThreadCount
-                << " set size=" << c_nMapSize
-                );
-            if ( Map::c_bLoadFactorDepended ) {
-                for ( c_nLoadFactor = 1; c_nLoadFactor <= c_nMaxLoadFactor; c_nLoadFactor *= 2 ) {
-                    CPPUNIT_MSG( "Load factor=" << c_nLoadFactor );
-                    do_test<Map>();
-                    if ( c_bPrintGCState )
-                        print_gc_state();
-                }
-            }
-            else
-                do_test<Map>();
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg );
-        virtual void endTestCase();
-
-#   include "map2/map_defs.h"
-        CDSUNIT_DECLARE_MichaelMap
-        CDSUNIT_DECLARE_SplitList
-        CDSUNIT_DECLARE_SkipListMap
-        CDSUNIT_DECLARE_EllenBinTreeMap
-        CDSUNIT_DECLARE_BronsonAVLTreeMap
-        CDSUNIT_DECLARE_FeldmanHashMap_fixed
-        //CDSUNIT_DECLARE_FeldmanHashMap_city
-        CDSUNIT_DECLARE_CuckooMap
-
-        CPPUNIT_TEST_SUITE(Map_DelOdd)
-            CDSUNIT_TEST_MichaelMap
-            CDSUNIT_TEST_SplitList
-            CDSUNIT_TEST_SkipListMap
-            CDSUNIT_TEST_EllenBinTreeMap
-            CDSUNIT_TEST_BronsonAVLTreeMap
-            CDSUNIT_TEST_FeldmanHashMap_fixed
-            //CDSUNIT_TEST_FeldmanHashMap_city
-            CDSUNIT_TEST_CuckooMap
-        CPPUNIT_TEST_SUITE_END();
-
-        // Not implemented yet
-        ////CDSUNIT_DECLARE_StripedMap
-        ////CDSUNIT_DECLARE_RefinableMap
-        ////CDSUNIT_DECLARE_StdMap
-    };
-} // namespace map2
diff --git a/tests/unit/map2/map_delodd_bronsonavltree.cpp b/tests/unit/map2/map_delodd_bronsonavltree.cpp
deleted file mode 100644 (file)
index 1a05c86..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_delodd.h"
-#include "map2/map_type_bronson_avltree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_DelOdd::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_BronsonAVLTreeMap
-} // namespace map2
diff --git a/tests/unit/map2/map_delodd_cuckoo.cpp b/tests/unit/map2/map_delodd_cuckoo.cpp
deleted file mode 100644 (file)
index e57d5fc..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_delodd.h"
-#include "map2/map_type_cuckoo.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_DelOdd::X() { run_test_no_extract<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_CuckooMap
-} // namespace map2
diff --git a/tests/unit/map2/map_delodd_ellentree.cpp b/tests/unit/map2/map_delodd_ellentree.cpp
deleted file mode 100644 (file)
index f41fa34..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_delodd.h"
-#include "map2/map_type_ellen_bintree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_DelOdd::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_EllenBinTreeMap
-} // namespace map2
diff --git a/tests/unit/map2/map_delodd_feldmanhashmap.cpp b/tests/unit/map2/map_delodd_feldmanhashmap.cpp
deleted file mode 100644 (file)
index 6998374..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_delodd.h"
-#include "map2/map_type_feldman_hashmap.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_DelOdd::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_FeldmanHashMap_fixed
-    //CDSUNIT_DECLARE_FeldmanHashMap_city
-} // namespace map2
diff --git a/tests/unit/map2/map_delodd_michael.cpp b/tests/unit/map2/map_delodd_michael.cpp
deleted file mode 100644 (file)
index af67401..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_delodd.h"
-#include "map2/map_type_michael.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_DelOdd::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_MichaelMap
-} // namespace map2
diff --git a/tests/unit/map2/map_delodd_skip.cpp b/tests/unit/map2/map_delodd_skip.cpp
deleted file mode 100644 (file)
index 21f904d..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_delodd.h"
-#include "map2/map_type_skip_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_DelOdd::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_SkipListMap
-} // namespace map2
diff --git a/tests/unit/map2/map_delodd_split.cpp b/tests/unit/map2/map_delodd_split.cpp
deleted file mode 100644 (file)
index 992cd3d..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_delodd.h"
-#include "map2/map_type_split_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_DelOdd::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_SplitList
-} // namespace map2
diff --git a/tests/unit/map2/map_find_int.cpp b/tests/unit/map2/map_find_int.cpp
deleted file mode 100644 (file)
index 85a89c9..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_find_int.h"
-
-// find int test in map<int> in mutithreaded mode
-namespace map2 {
-    CPPUNIT_TEST_SUITE_REGISTRATION( Map_find_int );
-
-    void Map_find_int::generateSequence()
-    {
-        size_t nPercent = c_nPercentExists;
-
-        if ( nPercent > 100 )
-            nPercent = 100;
-        else if ( nPercent < 1 )
-            nPercent = 1;
-
-        m_nRealMapSize = 0;
-
-        m_Arr.resize( c_nMapSize );
-        for ( size_t i = 0; i < c_nMapSize; ++i ) {
-            m_Arr[i].nKey = i * 13;
-            m_Arr[i].bExists = CppUnitMini::Rand( 100 ) <= nPercent;
-            if ( m_Arr[i].bExists )
-                ++m_nRealMapSize;
-        }
-        shuffle( m_Arr.begin(), m_Arr.end() );
-    }
-
-    void Map_find_int::setUpParams( const CppUnitMini::TestCfg& cfg )
-    {
-        c_nThreadCount = cfg.getSizeT("ThreadCount", c_nThreadCount );
-        c_nMapSize = cfg.getSizeT("MapSize", c_nMapSize);
-        c_nPercentExists = cfg.getSizeT("PercentExists", c_nPercentExists);
-        c_nPassCount = cfg.getSizeT("PassCount", c_nPassCount);
-        c_nMaxLoadFactor = cfg.getSizeT("MaxLoadFactor", c_nMaxLoadFactor);
-        c_bPrintGCState = cfg.getBool("PrintGCStateFlag", c_bPrintGCState );
-
-        c_nCuckooInitialSize = cfg.getSizeT("CuckooInitialSize", c_nCuckooInitialSize);
-        c_nCuckooProbesetSize = cfg.getSizeT("CuckooProbesetSize", c_nCuckooProbesetSize);
-        c_nCuckooProbesetThreshold = cfg.getSizeT("CuckooProbesetThreshold", c_nCuckooProbesetThreshold);
-
-        c_nFeldmanMap_HeadBits = cfg.getSizeT("FeldmanMapHeadBits", c_nFeldmanMap_HeadBits);
-        c_nFeldmanMap_ArrayBits = cfg.getSizeT("FeldmanMapArrayBits", c_nFeldmanMap_ArrayBits);
-
-        if ( c_nThreadCount == 0 )
-            c_nThreadCount = std::thread::hardware_concurrency();
-
-        CPPUNIT_MSG( "Generating test data...");
-        cds::OS::Timer    timer;
-        generateSequence();
-        CPPUNIT_MSG( "   Duration=" << timer.duration() );
-        CPPUNIT_MSG( "Map size=" << m_nRealMapSize << " find key loop=" << m_Arr.size() << " (" << c_nPercentExists << "% success)" );
-        CPPUNIT_MSG( "Thread count=" << c_nThreadCount << " Pass count=" << c_nPassCount );
-    }
-} // namespace map
diff --git a/tests/unit/map2/map_find_int.h b/tests/unit/map2/map_find_int.h
deleted file mode 100644 (file)
index 0d2887b..0000000
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-// defines concurrent access to map::nonconcurrent_iterator::Sequence::TValue::nAccess field
-
-#include "map2/map_type.h"
-#include "cppunit/thread.h"
-
-#include <vector>
-
-// find int test in map<int> in mutithreaded mode
-namespace map2 {
-
-#define TEST_CASE(TAG, X)  void X();
-
-    class Map_find_int: public CppUnitMini::TestCase
-    {
-    public:
-        size_t c_nThreadCount = 8;     // thread count
-        size_t c_nMapSize = 10000000;  // map size (count of searching item)
-        size_t c_nPercentExists = 50;  // percent of existing keys in searching sequence
-        size_t c_nPassCount = 2;
-        size_t c_nMaxLoadFactor = 8;   // maximum load factor
-        bool   c_bPrintGCState = true;
-
-        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 (o - use default)
-
-        size_t c_nFeldmanMap_HeadBits = 10;
-        size_t c_nFeldmanMap_ArrayBits = 4;
-
-        size_t  c_nLoadFactor;  // current load factor
-
-    private:
-        typedef size_t   key_type;
-        struct value_type {
-            key_type    nKey    ;   // key
-            bool        bExists ;   // true - key in map, false - key not in map
-        };
-
-        typedef std::vector<value_type> ValueVector;
-        ValueVector             m_Arr;
-        size_t                  m_nRealMapSize;
-
-        void generateSequence();
-
-        template <typename Iterator, typename Map>
-        static bool check_result( Iterator const& it, Map const& map )
-        {
-            return it != map.end();
-        }
-        template <typename Map>
-        static bool check_result( bool b, Map const& )
-        {
-            return b;
-        }
-
-        template <class Map>
-        class TestThread: public CppUnitMini::TestThread
-        {
-            Map&     m_Map;
-
-            virtual TestThread *    clone()
-            {
-                return new TestThread( *this );
-            }
-        public:
-            struct Stat {
-                size_t      nSuccess;
-                size_t      nFailed;
-
-                Stat()
-                    : nSuccess(0)
-                    , nFailed(0)
-                {}
-            };
-
-            Stat    m_KeyExists;
-            Stat    m_KeyNotExists;
-
-        public:
-            TestThread( CppUnitMini::ThreadPool& pool, Map& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Map( rMap )
-            {}
-            TestThread( TestThread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Map( src.m_Map )
-            {}
-
-            Map_find_int&  getTest()
-            {
-                return reinterpret_cast<Map_find_int&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                ValueVector& arr = getTest().m_Arr;
-                size_t const nPassCount = getTest().c_nPassCount;
-
-                Map& rMap = m_Map;
-                for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                    if ( m_nThreadNo & 1 ) {
-                        ValueVector::const_iterator itEnd = arr.end();
-                        for ( ValueVector::const_iterator it = arr.begin(); it != itEnd; ++it ) {
-                            auto bFound = rMap.contains( it->nKey );
-                            if ( it->bExists ) {
-                                if ( check_result( bFound, rMap ))
-                                    ++m_KeyExists.nSuccess;
-                                else {
-                                    //rMap.find( it->nKey );
-                                    ++m_KeyExists.nFailed;
-                                }
-                            }
-                            else {
-                                if ( check_result( bFound, rMap )) {
-                                    //rMap.find( it->nKey );
-                                    ++m_KeyNotExists.nFailed;
-                                }
-                                else
-                                    ++m_KeyNotExists.nSuccess;
-                            }
-                        }
-                    }
-                    else {
-                        ValueVector::const_reverse_iterator itEnd = arr.rend();
-                        for ( ValueVector::const_reverse_iterator it = arr.rbegin(); it != itEnd; ++it ) {
-                            auto bFound = rMap.contains( it->nKey );
-                            if ( it->bExists ) {
-                                if ( check_result( bFound, rMap ))
-                                    ++m_KeyExists.nSuccess;
-                                else {
-                                    //rMap.find( it->nKey );
-                                    ++m_KeyExists.nFailed;
-                                }
-                            }
-                            else {
-                                if ( check_result( bFound, rMap )) {
-                                    //rMap.find( it->nKey );
-                                    ++m_KeyNotExists.nFailed;
-                                }
-                                else
-                                    ++m_KeyNotExists.nSuccess;
-                            }
-                        }
-                    }
-                }
-            }
-        };
-
-    protected:
-
-        template <class Map>
-        void find_int_test( Map& testMap )
-        {
-            typedef TestThread<Map>     Thread;
-            cds::OS::Timer    timer;
-
-            // Fill the map
-            CPPUNIT_MSG( "  Fill map with " << m_Arr.size() << " items...");
-            timer.reset();
-            for ( size_t i = 0; i < m_Arr.size(); ++i ) {
-                if ( m_Arr[i].bExists ) {
-                    CPPUNIT_ASSERT( check_result( testMap.insert( m_Arr[i].nKey, m_Arr[i] ), testMap ));
-                }
-            }
-            CPPUNIT_MSG( "   Duration=" << timer.duration() );
-
-            CPPUNIT_MSG( "  Searching...");
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new Thread( pool, testMap ), c_nThreadCount );
-            pool.run();
-            CPPUNIT_MSG( "   Duration=" << pool.avgDuration() );
-
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                Thread * pThread = static_cast<Thread *>( *it );
-                CPPUNIT_CHECK( pThread->m_KeyExists.nFailed == 0 );
-                CPPUNIT_CHECK( pThread->m_KeyExists.nSuccess == m_nRealMapSize * c_nPassCount );
-                CPPUNIT_CHECK( pThread->m_KeyNotExists.nFailed == 0 );
-                CPPUNIT_CHECK( pThread->m_KeyNotExists.nSuccess == (m_Arr.size() - m_nRealMapSize) * c_nPassCount );
-            }
-
-            check_before_cleanup( testMap );
-
-            testMap.clear();
-            additional_check( testMap );
-            print_stat( testMap );
-            additional_cleanup( testMap );
-        }
-
-        template <class Map>
-        void run_test()
-        {
-            if ( Map::c_bLoadFactorDepended ) {
-                for ( c_nLoadFactor = 1; c_nLoadFactor <= c_nMaxLoadFactor; c_nLoadFactor *= 2 ) {
-                    CPPUNIT_MSG( "Load factor=" << c_nLoadFactor );
-                    Map  testMap( *this );
-                    find_int_test( testMap );
-                    if ( c_bPrintGCState )
-                        print_gc_state();
-                }
-            }
-            else {
-                Map testMap( *this );
-                find_int_test( testMap );
-                if ( c_bPrintGCState )
-                    print_gc_state();
-            }
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg );
-
-    public:
-        Map_find_int()
-            : c_nLoadFactor(2)
-        {}
-
-#   include "map2/map_defs.h"
-        CDSUNIT_DECLARE_MichaelMap
-        CDSUNIT_DECLARE_MichaelMap_nogc
-        CDSUNIT_DECLARE_SplitList
-        CDSUNIT_DECLARE_SplitList_nogc
-        CDSUNIT_DECLARE_SkipListMap
-        CDSUNIT_DECLARE_SkipListMap_nogc
-        CDSUNIT_DECLARE_EllenBinTreeMap
-        CDSUNIT_DECLARE_BronsonAVLTreeMap
-        CDSUNIT_DECLARE_FeldmanHashMap
-        CDSUNIT_DECLARE_StripedMap
-        CDSUNIT_DECLARE_RefinableMap
-        CDSUNIT_DECLARE_CuckooMap
-        CDSUNIT_DECLARE_StdMap
-        CDSUNIT_DECLARE_StdMap_NoLock
-
-        CPPUNIT_TEST_SUITE(Map_find_int)
-            CDSUNIT_TEST_MichaelMap
-            CDSUNIT_TEST_MichaelMap_nogc
-            CDSUNIT_TEST_SplitList
-            CDSUNIT_TEST_SplitList_nogc
-            CDSUNIT_TEST_SkipListMap
-            CDSUNIT_TEST_SkipListMap_nogc
-            CDSUNIT_TEST_EllenBinTreeMap
-            CDSUNIT_TEST_BronsonAVLTreeMap
-            CDSUNIT_TEST_FeldmanHashMap
-            CDSUNIT_TEST_CuckooMap
-            CDSUNIT_TEST_StripedMap
-            CDSUNIT_TEST_RefinableMap
-            CDSUNIT_TEST_StdMap
-            CDSUNIT_TEST_StdMap_NoLock
-        CPPUNIT_TEST_SUITE_END();
-    };
-} // namespace map
diff --git a/tests/unit/map2/map_find_int_bronsonavltree.cpp b/tests/unit/map2/map_find_int_bronsonavltree.cpp
deleted file mode 100644 (file)
index bb9a72b..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_find_int.h"
-#include "map2/map_type_bronson_avltree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_find_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_BronsonAVLTreeMap
-} // namespace map2
diff --git a/tests/unit/map2/map_find_int_cuckoo.cpp b/tests/unit/map2/map_find_int_cuckoo.cpp
deleted file mode 100644 (file)
index 2e18368..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_find_int.h"
-#include "map2/map_type_cuckoo.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_find_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_CuckooMap
-} // namespace map2
diff --git a/tests/unit/map2/map_find_int_ellentree.cpp b/tests/unit/map2/map_find_int_ellentree.cpp
deleted file mode 100644 (file)
index 1ac5e10..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_find_int.h"
-#include "map2/map_type_ellen_bintree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_find_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_EllenBinTreeMap
-} // namespace map2
diff --git a/tests/unit/map2/map_find_int_feldmanhashmap.cpp b/tests/unit/map2/map_find_int_feldmanhashmap.cpp
deleted file mode 100644 (file)
index 2bd135c..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_find_int.h"
-#include "map2/map_type_feldman_hashmap.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_find_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_FeldmanHashMap
-} // namespace map2
diff --git a/tests/unit/map2/map_find_int_michael.cpp b/tests/unit/map2/map_find_int_michael.cpp
deleted file mode 100644 (file)
index 0db3407..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_find_int.h"
-#include "map2/map_type_michael.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_find_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_MichaelMap
-    CDSUNIT_DECLARE_MichaelMap_nogc
-} // namespace map2
diff --git a/tests/unit/map2/map_find_int_skip.cpp b/tests/unit/map2/map_find_int_skip.cpp
deleted file mode 100644 (file)
index 09e6d2c..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_find_int.h"
-#include "map2/map_type_skip_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_find_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_SkipListMap
-    CDSUNIT_DECLARE_SkipListMap_nogc
-} // namespace map2
diff --git a/tests/unit/map2/map_find_int_split.cpp b/tests/unit/map2/map_find_int_split.cpp
deleted file mode 100644 (file)
index 425714b..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_find_int.h"
-#include "map2/map_type_split_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_find_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_SplitList
-    CDSUNIT_DECLARE_SplitList_nogc
-} // namespace map2
diff --git a/tests/unit/map2/map_find_int_std.cpp b/tests/unit/map2/map_find_int_std.cpp
deleted file mode 100644 (file)
index 466d333..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_find_int.h"
-#include "map2/map_type_std.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_find_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_StdMap
-    CDSUNIT_DECLARE_StdMap_NoLock
-} // namespace map2
diff --git a/tests/unit/map2/map_find_int_striped.cpp b/tests/unit/map2/map_find_int_striped.cpp
deleted file mode 100644 (file)
index 8d47ca8..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_find_int.h"
-#include "map2/map_type_striped.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_find_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_StripedMap
-    CDSUNIT_DECLARE_RefinableMap
-} // namespace map2
diff --git a/tests/unit/map2/map_find_string.cpp b/tests/unit/map2/map_find_string.cpp
deleted file mode 100644 (file)
index ad77d93..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_find_string.h"
-
-namespace map2 {
-    CPPUNIT_TEST_SUITE_REGISTRATION( Map_find_string );
-
-    void Map_find_string::generateSequence()
-    {
-        size_t nPercent = c_nPercentExists;
-
-        if ( nPercent > 100 )
-            nPercent = 100;
-        else if ( nPercent < 1 )
-            nPercent = 1;
-
-        std::vector<std::string> const& arrString = CppUnitMini::TestCase::getTestStrings();
-        size_t nSize = arrString.size();
-        if ( nSize > c_nMapSize )
-            nSize = c_nMapSize;
-        m_Arr.reserve( nSize );
-
-        nSize = 0;
-        for ( size_t i = 0; i < nSize && i < arrString.size(); ++i ) {
-            bool bExists = CppUnitMini::Rand( 100 ) <= nPercent;
-            m_Arr.push_back( { &arrString.at(i), bExists } );
-            if ( bExists )
-                ++nSize;
-        }
-        c_nMapSize = nSize;
-    }
-
-    void Map_find_string::setUpParams( const CppUnitMini::TestCfg& cfg )
-    {
-        c_nThreadCount = cfg.getSizeT("ThreadCount", c_nThreadCount );
-        c_nMapSize = cfg.getSizeT("MapSize", c_nMapSize);
-        c_nPercentExists = cfg.getSizeT("PercentExists", c_nPercentExists);
-        c_nPassCount = cfg.getSizeT("PassCount", c_nPassCount);
-        c_nMaxLoadFactor = cfg.getSizeT("MaxLoadFactor", c_nMaxLoadFactor);
-        c_bPrintGCState = cfg.getBool("PrintGCStateFlag", c_bPrintGCState );
-
-        c_nCuckooInitialSize = cfg.getSizeT("CuckooInitialSize", c_nCuckooInitialSize);
-        c_nCuckooProbesetSize = cfg.getSizeT("CuckooProbesetSize", c_nCuckooProbesetSize);
-        c_nCuckooProbesetThreshold = cfg.getSizeT("CuckooProbesetThreshold", c_nCuckooProbesetThreshold);
-
-        c_nFeldmanMap_HeadBits = cfg.getSizeT("FeldmanMapHeadBits", c_nFeldmanMap_HeadBits);
-        c_nFeldmanMap_ArrayBits = cfg.getSizeT("FeldmanMapArrayBits", c_nFeldmanMap_ArrayBits);
-
-        if ( c_nThreadCount == 0 )
-            c_nThreadCount = std::thread::hardware_concurrency();
-
-        CPPUNIT_MSG( "Generating test data...\n");
-        cds::OS::Timer    timer;
-        generateSequence();
-        CPPUNIT_MSG( "   Duration=" << timer.duration() << "\n" );
-
-    }
-} // namespace map2
diff --git a/tests/unit/map2/map_find_string.h b/tests/unit/map2/map_find_string.h
deleted file mode 100644 (file)
index e182ff6..0000000
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_type.h"
-#include "cppunit/thread.h"
-
-#include <vector>
-
-namespace map2 {
-
-#define TEST_CASE(TAG, X)  void X();
-
-    class Map_find_string: public CppUnitMini::TestCase
-    {
-    public:
-        size_t c_nThreadCount = 8;     // thread count
-        size_t c_nMapSize = 10000000;  // map size (count of searching item)
-        size_t c_nPercentExists = 50;  // percent of existing keys in searching sequence
-        size_t c_nPassCount = 2;
-        size_t c_nMaxLoadFactor = 8;   // maximum load factor
-        bool   c_bPrintGCState = true;
-
-        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 (o - use default)
-
-        size_t c_nFeldmanMap_HeadBits = 10;
-        size_t c_nFeldmanMap_ArrayBits = 4;
-
-        size_t  c_nLoadFactor;  // current load factor
-
-    private:
-        typedef std::string  key_type;
-        struct value_type {
-            std::string const * pKey;
-            bool        bExists ;   // true - key in map, false - key not in map
-        };
-
-        typedef std::vector<value_type> ValueVector;
-        ValueVector             m_Arr;
-
-        template <typename Iterator, typename Map>
-        static bool check_result( Iterator const& it, Map const& map )
-        {
-            return it != map.end();
-        }
-        template <typename Map>
-        static bool check_result( bool b, Map const& )
-        {
-            return b;
-        }
-
-        template <class Map>
-        class TestThread: public CppUnitMini::TestThread
-        {
-            Map&     m_Map;
-
-            virtual TestThread *    clone()
-            {
-                return new TestThread( *this );
-            }
-        public:
-            struct Stat {
-                size_t      nSuccess;
-                size_t      nFailed;
-
-                Stat()
-                    : nSuccess(0)
-                    , nFailed(0)
-                {}
-            };
-
-            Stat    m_KeyExists;
-            Stat    m_KeyNotExists;
-
-        public:
-            TestThread( CppUnitMini::ThreadPool& pool, Map& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Map( rMap )
-            {}
-            TestThread( TestThread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Map( src.m_Map )
-            {}
-
-            Map_find_string&  getTest()
-            {
-                return reinterpret_cast<Map_find_string&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                ValueVector& arr = getTest().m_Arr;
-                size_t const nPassCount = getTest().c_nPassCount;
-
-                Map& rMap = m_Map;
-                for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                    if ( m_nThreadNo & 1 ) {
-                        ValueVector::const_iterator itEnd = arr.end();
-                        for ( ValueVector::const_iterator it = arr.begin(); it != itEnd; ++it ) {
-                            auto bFound = rMap.contains( *(it->pKey) );
-                            if ( it->bExists ) {
-                                if ( check_result(bFound, rMap))
-                                    ++m_KeyExists.nSuccess;
-                                else
-                                    ++m_KeyExists.nFailed;
-                            }
-                            else {
-                                if ( check_result(bFound, rMap))
-                                    ++m_KeyNotExists.nFailed;
-                                else
-                                    ++m_KeyNotExists.nSuccess;
-                            }
-                        }
-                    }
-                    else {
-                        ValueVector::const_reverse_iterator itEnd = arr.rend();
-                        for ( ValueVector::const_reverse_iterator it = arr.rbegin(); it != itEnd; ++it ) {
-                            auto bFound = rMap.contains( *(it->pKey) );
-                            if ( it->bExists ) {
-                                if ( check_result(bFound, rMap))
-                                    ++m_KeyExists.nSuccess;
-                                else
-                                    ++m_KeyExists.nFailed;
-                            }
-                            else {
-                                if ( check_result( bFound, rMap ))
-                                    ++m_KeyNotExists.nFailed;
-                                else
-                                    ++m_KeyNotExists.nSuccess;
-                            }
-                        }
-                    }
-                }
-            }
-        };
-
-    public:
-        Map_find_string()
-            : c_nLoadFactor( 2 )
-        {}
-
-    protected:
-
-        void generateSequence();
-
-        template <class Map>
-        void find_string_test( Map& testMap )
-        {
-            typedef TestThread<Map>     Thread;
-            cds::OS::Timer    timer;
-
-            CPPUNIT_MSG( "Map size=" << c_nMapSize << " find key loop=" << m_Arr.size() << " (" << c_nPercentExists << "% success)" );
-            CPPUNIT_MSG( "Thread count=" << c_nThreadCount << " Pass count=" << c_nPassCount );
-
-            // Fill the map
-            CPPUNIT_MSG( "  Fill map...");
-            timer.reset();
-            for ( size_t i = 0; i < m_Arr.size(); ++i ) {
-                // All keys in arrData are unique, insert() must be successful
-                if ( m_Arr[i].bExists )
-                    CPPUNIT_ASSERT( check_result( testMap.insert( *(m_Arr[i].pKey), m_Arr[i] ), testMap ));
-            }
-            CPPUNIT_MSG( "   Duration=" << timer.duration() );
-
-            CPPUNIT_MSG( "  Searching...");
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new Thread( pool, testMap ), c_nThreadCount );
-            pool.run();
-            CPPUNIT_MSG( "   Duration=" << pool.avgDuration() );
-
-            // Postcondition: the number of success searching == the number of map item
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                Thread * pThread = static_cast<Thread *>( *it );
-                CPPUNIT_CHECK( pThread->m_KeyExists.nSuccess == c_nMapSize * c_nPassCount );
-                CPPUNIT_CHECK( pThread->m_KeyExists.nFailed == 0 );
-                CPPUNIT_CHECK( pThread->m_KeyNotExists.nSuccess == (m_Arr.size() - c_nMapSize) * c_nPassCount );
-                CPPUNIT_CHECK( pThread->m_KeyNotExists.nFailed == 0 );
-            }
-
-            check_before_cleanup( testMap );
-
-            testMap.clear();
-            additional_check( testMap );
-            print_stat( testMap );
-            additional_cleanup( testMap );
-        }
-
-        template <class Map>
-        void run_test()
-        {
-            if ( Map::c_bLoadFactorDepended ) {
-                for ( c_nLoadFactor = 1; c_nLoadFactor <= c_nMaxLoadFactor; c_nLoadFactor *= 2 ) {
-                    CPPUNIT_MSG( "Load factor=" << c_nLoadFactor );
-                    Map testMap( *this );
-                    find_string_test( testMap );
-                    if ( c_bPrintGCState )
-                        print_gc_state();
-                }
-            }
-            else {
-                Map testMap( *this );
-                find_string_test( testMap );
-                if ( c_bPrintGCState )
-                    print_gc_state();
-            }
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg );
-
-#   include "map2/map_defs.h"
-        CDSUNIT_DECLARE_MichaelMap
-        CDSUNIT_DECLARE_MichaelMap_nogc
-        CDSUNIT_DECLARE_SplitList
-        CDSUNIT_DECLARE_SplitList_nogc
-        CDSUNIT_DECLARE_SkipListMap
-        CDSUNIT_DECLARE_SkipListMap_nogc
-        CDSUNIT_DECLARE_EllenBinTreeMap
-        CDSUNIT_DECLARE_BronsonAVLTreeMap
-        CDSUNIT_DECLARE_FeldmanHashMap_city
-        CDSUNIT_DECLARE_StripedMap
-        CDSUNIT_DECLARE_RefinableMap
-        CDSUNIT_DECLARE_CuckooMap
-        CDSUNIT_DECLARE_StdMap
-        CDSUNIT_DECLARE_StdMap_NoLock
-
-        CPPUNIT_TEST_SUITE(Map_find_string)
-            CDSUNIT_TEST_MichaelMap
-            CDSUNIT_TEST_MichaelMap_nogc
-            CDSUNIT_TEST_SplitList
-            CDSUNIT_TEST_SplitList_nogc
-            CDSUNIT_TEST_SkipListMap
-            CDSUNIT_TEST_SkipListMap_nogc
-            CDSUNIT_TEST_EllenBinTreeMap
-            CDSUNIT_TEST_BronsonAVLTreeMap
-            CDSUNIT_TEST_FeldmanHashMap_city
-            CDSUNIT_TEST_CuckooMap
-            CDSUNIT_TEST_StripedMap
-            CDSUNIT_TEST_RefinableMap
-            CDSUNIT_TEST_StdMap
-            CDSUNIT_TEST_StdMap_NoLock
-        CPPUNIT_TEST_SUITE_END();
-    };
-} // namespace map2
diff --git a/tests/unit/map2/map_find_string_bronsonavltree.cpp b/tests/unit/map2/map_find_string_bronsonavltree.cpp
deleted file mode 100644 (file)
index aa668e0..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_find_string.h"
-#include "map2/map_type_bronson_avltree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_find_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_BronsonAVLTreeMap
-} // namespace map2
diff --git a/tests/unit/map2/map_find_string_cuckoo.cpp b/tests/unit/map2/map_find_string_cuckoo.cpp
deleted file mode 100644 (file)
index e13deca..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_find_string.h"
-#include "map2/map_type_cuckoo.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_find_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_CuckooMap
-} // namespace map2
diff --git a/tests/unit/map2/map_find_string_ellentree.cpp b/tests/unit/map2/map_find_string_ellentree.cpp
deleted file mode 100644 (file)
index f6ece45..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_find_string.h"
-#include "map2/map_type_ellen_bintree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_find_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_EllenBinTreeMap
-} // namespace map2
diff --git a/tests/unit/map2/map_find_string_feldmanhashmap.cpp b/tests/unit/map2/map_find_string_feldmanhashmap.cpp
deleted file mode 100644 (file)
index 25056ff..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_find_string.h"
-#include "map2/map_type_feldman_hashmap.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_find_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_FeldmanHashMap_city
-} // namespace map2
diff --git a/tests/unit/map2/map_find_string_michael.cpp b/tests/unit/map2/map_find_string_michael.cpp
deleted file mode 100644 (file)
index 50d3bdf..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_find_string.h"
-#include "map2/map_type_michael.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_find_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_MichaelMap
-    CDSUNIT_DECLARE_MichaelMap_nogc
-} // namespace map2
diff --git a/tests/unit/map2/map_find_string_skip.cpp b/tests/unit/map2/map_find_string_skip.cpp
deleted file mode 100644 (file)
index dc2ee6c..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_find_string.h"
-#include "map2/map_type_skip_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_find_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_SkipListMap
-    CDSUNIT_DECLARE_SkipListMap_nogc
-} // namespace map2
diff --git a/tests/unit/map2/map_find_string_split.cpp b/tests/unit/map2/map_find_string_split.cpp
deleted file mode 100644 (file)
index 1a29d84..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_find_string.h"
-#include "map2/map_type_split_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_find_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_SplitList
-    CDSUNIT_DECLARE_SplitList_nogc
-} // namespace map2
diff --git a/tests/unit/map2/map_find_string_std.cpp b/tests/unit/map2/map_find_string_std.cpp
deleted file mode 100644 (file)
index c90db99..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_find_string.h"
-#include "map2/map_type_std.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_find_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_StdMap
-    CDSUNIT_DECLARE_StdMap_NoLock
-} // namespace map2
diff --git a/tests/unit/map2/map_find_string_striped.cpp b/tests/unit/map2/map_find_string_striped.cpp
deleted file mode 100644 (file)
index 07c09f2..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_find_string.h"
-#include "map2/map_type_striped.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_find_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_StripedMap
-    CDSUNIT_DECLARE_RefinableMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_func.cpp b/tests/unit/map2/map_insdel_func.cpp
deleted file mode 100644 (file)
index 5d62776..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_func.h"
-
-namespace map2 {
-    CPPUNIT_TEST_SUITE_REGISTRATION( Map_InsDel_func );
-
-    void Map_InsDel_func::setUpParams( const CppUnitMini::TestCfg& cfg )
-    {
-        c_nInsertThreadCount = cfg.getULong("InsertThreadCount", static_cast<unsigned long>(c_nInsertThreadCount));
-        c_nDeleteThreadCount = cfg.getULong("DeleteThreadCount", static_cast<unsigned long>(c_nDeleteThreadCount));
-        c_nUpdateThreadCount = cfg.getULong("UpdateThreadCount", static_cast<unsigned long>(c_nUpdateThreadCount));
-        c_nThreadPassCount = cfg.getULong("ThreadPassCount", static_cast<unsigned long>(c_nThreadPassCount));
-        c_nMapSize = cfg.getULong("MapSize", static_cast<unsigned long>(c_nMapSize));
-        c_nMaxLoadFactor = cfg.getULong("MaxLoadFactor", static_cast<unsigned long>(c_nMaxLoadFactor));
-        c_bPrintGCState = cfg.getBool("PrintGCStateFlag", true );
-
-        c_nCuckooInitialSize = cfg.getULong("CuckooInitialSize", static_cast<unsigned long>(c_nCuckooInitialSize) );
-        c_nCuckooProbesetSize = cfg.getULong("CuckooProbesetSize", static_cast<unsigned long>(c_nCuckooProbesetSize) );
-        c_nCuckooProbesetThreshold = cfg.getULong("CuckooProbesetThreshold", static_cast<unsigned long>(c_nCuckooProbesetThreshold) );
-
-        c_nFeldmanMap_HeadBits = cfg.getULong("FeldmanMapHeadBits", static_cast<unsigned long>(c_nFeldmanMap_HeadBits) );
-        c_nFeldmanMap_ArrayBits = cfg.getULong("FeldmanMapArrayBits", static_cast<unsigned long>(c_nFeldmanMap_ArrayBits) );
-
-    }
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_func.h b/tests/unit/map2/map_insdel_func.h
deleted file mode 100644 (file)
index 450d4e7..0000000
+++ /dev/null
@@ -1,607 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include <functional>
-#include <mutex>    //unique_lock
-#include "map2/map_type.h"
-#include "cppunit/thread.h"
-
-#include <cds/sync/spinlock.h>
-#include <vector>
-
-namespace map2 {
-
-#define TEST_CASE(TAG, X)  void X();
-
-    class Map_InsDel_func: public CppUnitMini::TestCase
-    {
-    public:
-        size_t c_nMapSize = 1000000;      // map size
-        size_t c_nInsertThreadCount = 4;  // count of insertion thread
-        size_t c_nDeleteThreadCount = 4;  // count of deletion thread
-        size_t c_nUpdateThreadCount = 4;  // count of updating thread
-        size_t c_nThreadPassCount   = 4;  // pass count for each thread
-        size_t c_nMaxLoadFactor = 8;      // maximum load factor
-        bool   c_bPrintGCState = true;
-
-        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 (o - use default)
-
-        size_t c_nFeldmanMap_HeadBits = 10;
-        size_t c_nFeldmanMap_ArrayBits = 4;
-
-        size_t  c_nLoadFactor;  // current load factor
-
-    private:
-        typedef size_t  key_type;
-        struct value_type {
-            size_t      nKey;
-            size_t      nData;
-            size_t      nUpdateCall;
-            atomics::atomic<bool>   bInitialized;
-            cds::OS::ThreadId       threadId;   // inserter thread id
-
-            typedef cds::sync::spin_lock< cds::backoff::pause > lock_type;
-            mutable lock_type   m_access;
-
-            value_type()
-                : nKey(0)
-                , nData(0)
-                , nUpdateCall(0)
-                , bInitialized( false )
-                , threadId( cds::OS::get_current_thread_id())
-            {}
-
-            value_type( value_type const& s )
-                : nKey(s.nKey)
-                , nData(s.nData)
-                , nUpdateCall( s.nUpdateCall )
-                , bInitialized( s.bInitialized.load(atomics::memory_order_relaxed))
-                , threadId( cds::OS::get_current_thread_id())
-            {}
-
-            // boost::container::flat_map requires operator =
-            value_type& operator=( value_type const& v )
-            {
-                nKey = v.nKey;
-                nData = v.nData;
-                nUpdateCall = v.nUpdateCall;
-                bInitialized.store(v.bInitialized.load(atomics::memory_order_relaxed), atomics::memory_order_relaxed);
-
-                return *this;
-            }
-        };
-
-        typedef std::vector<key_type>   key_array;
-        key_array                       m_arrValues;
-
-        template <class Map>
-        class Inserter: public CppUnitMini::TestThread
-        {
-            Map&     m_Map;
-
-            virtual Inserter *    clone()
-            {
-                return new Inserter( *this );
-            }
-
-            struct insert_functor {
-                size_t nTestFunctorRef;
-
-                insert_functor()
-                    : nTestFunctorRef(0)
-                {}
-
-                template <typename Pair>
-                void operator()( Pair& val )
-                {
-                    operator()( val.first, val.second );
-                }
-
-                template <typename Key, typename Val >
-                void operator()( Key const& key, Val& v )
-                {
-                    std::unique_lock< typename value_type::lock_type> ac( v.m_access );
-
-                    v.nKey  = key;
-                    v.nData = key * 8;
-
-                    ++nTestFunctorRef;
-                    v.bInitialized.store( true, atomics::memory_order_relaxed);
-                }
-            };
-
-        public:
-            size_t  m_nInsertSuccess;
-            size_t  m_nInsertFailed;
-
-            size_t  m_nTestFunctorRef;
-
-        public:
-            Inserter( CppUnitMini::ThreadPool& pool, Map& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Map( rMap )
-            {}
-            Inserter( Inserter& src )
-                : CppUnitMini::TestThread( src )
-                , m_Map( src.m_Map )
-            {}
-
-            Map_InsDel_func&  getTest()
-            {
-                return reinterpret_cast<Map_InsDel_func&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                Map& rMap = m_Map;
-
-                m_nInsertSuccess =
-                    m_nInsertFailed =
-                    m_nTestFunctorRef = 0;
-
-                // func is passed by reference
-                insert_functor  func;
-                key_array const& arr = getTest().m_arrValues;
-                size_t const nPassCount = getTest().c_nThreadPassCount;
-
-                if ( m_nThreadNo & 1 ) {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( key_array::const_iterator it = arr.begin(), itEnd = arr.end(); it != itEnd; ++it ) {
-                            if ( rMap.insert_with( *it, std::ref(func)))
-                                ++m_nInsertSuccess;
-                            else
-                                ++m_nInsertFailed;
-                        }
-                    }
-                }
-                else {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( key_array::const_reverse_iterator it = arr.rbegin(), itEnd = arr.rend(); it != itEnd; ++it ) {
-                            if ( rMap.insert_with( *it, std::ref(func)))
-                                ++m_nInsertSuccess;
-                            else
-                                ++m_nInsertFailed;
-                        }
-                    }
-                }
-
-                m_nTestFunctorRef = func.nTestFunctorRef;
-            }
-        };
-
-        template <class Map>
-        class Updater: public CppUnitMini::TestThread
-        {
-            Map&     m_Map;
-
-            virtual Updater *    clone()
-            {
-                return new Updater( *this );
-            }
-
-            struct update_functor {
-                size_t  nCreated;
-                size_t  nModified;
-
-                update_functor()
-                    : nCreated(0)
-                    , nModified(0)
-                {}
-
-                template <typename Key, typename Val>
-                void operator()( bool /*bNew*/, Key const& key, Val& v )
-                {
-                    std::unique_lock<typename value_type::lock_type> ac( v.m_access );
-                    if ( !v.bInitialized.load( atomics::memory_order_acquire )) {
-                        ++nCreated;
-                        v.nKey = key;
-                        v.nData = key * 8;
-                        v.bInitialized.store( true, atomics::memory_order_relaxed);
-                    }
-                    else {
-                        ++v.nUpdateCall;
-                        ++nModified;
-                    }
-                }
-
-                template <typename Pair>
-                void operator()( bool bNew, Pair& val )
-                {
-                    operator()( bNew, val.first, val.second );
-                }
-
-                // For FeldmanHashMap
-                template <typename Val>
-                void operator()( Val& cur, Val * old )
-                {
-                    if ( old ) {
-                        // If a key exists, FeldmanHashMap creates a new node too
-                        // We should manually copy important values from old to cur
-                        std::unique_lock<typename value_type::lock_type> ac( cur.second.m_access );
-                        cur.second.nKey = cur.first;
-                        cur.second.nData = cur.first * 8;
-                        cur.second.bInitialized.store( true, atomics::memory_order_release );
-                    }
-                    operator()( old == nullptr, cur.first, cur.second );
-                }
-
-            private:
-                update_functor(const update_functor& ) = delete;
-            };
-
-        public:
-            size_t  m_nUpdateFailed;
-            size_t  m_nUpdateCreated;
-            size_t  m_nUpdateExisted;
-            size_t  m_nFunctorCreated;
-            size_t  m_nFunctorModified;
-
-        public:
-            Updater( CppUnitMini::ThreadPool& pool, Map& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Map( rMap )
-            {}
-            Updater( Updater& src )
-                : CppUnitMini::TestThread( src )
-                , m_Map( src.m_Map )
-            {}
-
-            Map_InsDel_func&  getTest()
-            {
-                return reinterpret_cast<Map_InsDel_func&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                Map& rMap = m_Map;
-
-                m_nUpdateCreated =
-                    m_nUpdateExisted =
-                    m_nUpdateFailed = 0;
-
-                update_functor func;
-
-                key_array const& arr = getTest().m_arrValues;
-                size_t const nPassCount = getTest().c_nThreadPassCount;
-
-                if ( m_nThreadNo & 1 ) {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( key_array::const_iterator it = arr.begin(), itEnd = arr.end(); it != itEnd; ++it ) {
-                            std::pair<bool, bool> ret = rMap.update( *it, std::ref( func ));
-                            if ( ret.first  ) {
-                                if ( ret.second )
-                                    ++m_nUpdateCreated;
-                                else
-                                    ++m_nUpdateExisted;
-                            }
-                            else
-                                ++m_nUpdateFailed;
-                        }
-                    }
-                }
-                else {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( key_array::const_reverse_iterator it = arr.rbegin(), itEnd = arr.rend(); it != itEnd; ++it ) {
-                            std::pair<bool, bool> ret = rMap.update( *it, std::ref( func ));
-                            if ( ret.first  ) {
-                                if ( ret.second )
-                                    ++m_nUpdateCreated;
-                                else
-                                    ++m_nUpdateExisted;
-                            }
-                            else
-                                ++m_nUpdateFailed;
-                        }
-                    }
-                }
-
-                m_nFunctorCreated = func.nCreated;
-                m_nFunctorModified = func.nModified;
-            }
-        };
-
-        template <class Map>
-        class Deleter: public CppUnitMini::TestThread
-        {
-            Map&     m_Map;
-            typedef typename Map::mapped_type value_type;
-
-            virtual Deleter *    clone()
-            {
-                return new Deleter( *this );
-            }
-
-            struct value_container
-            {
-                size_t      nKeyExpected;
-
-                size_t      nSuccessItem;
-                size_t      nFailedItem;
-
-                value_container()
-                    : nSuccessItem(0)
-                    , nFailedItem(0)
-                {}
-            };
-
-            struct erase_functor {
-                value_container     m_cnt;
-
-                template <typename Key, typename Val>
-                void operator()( Key const& /*key*/, Val& v )
-                {
-                    while ( true ) {
-                        if ( v.bInitialized.load( atomics::memory_order_relaxed )) {
-                            std::unique_lock< typename value_type::lock_type> ac( v.m_access );
-
-                            if ( m_cnt.nKeyExpected == v.nKey && m_cnt.nKeyExpected * 8 == v.nData )
-                                ++m_cnt.nSuccessItem;
-                            else
-                                ++m_cnt.nFailedItem;
-                            v.nData++;
-                            v.nKey = 0;
-                            break;
-                        }
-                        else
-                            cds::backoff::yield()();
-                    }
-                }
-
-                template <typename Pair>
-                void operator ()( Pair& item )
-                {
-                    operator()( item.first, item.second );
-                }
-            };
-
-        public:
-            size_t  m_nDeleteSuccess;
-            size_t  m_nDeleteFailed;
-
-            size_t  m_nValueSuccess;
-            size_t  m_nValueFailed;
-
-        public:
-            Deleter( CppUnitMini::ThreadPool& pool, Map& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Map( rMap )
-            {}
-            Deleter( Deleter& src )
-                : CppUnitMini::TestThread( src )
-                , m_Map( src.m_Map )
-            {}
-
-            Map_InsDel_func&  getTest()
-            {
-                return reinterpret_cast<Map_InsDel_func&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                Map& rMap = m_Map;
-
-                m_nDeleteSuccess =
-                    m_nDeleteFailed = 0;
-
-                erase_functor   func;
-                key_array const& arr = getTest().m_arrValues;
-                size_t const nPassCount = getTest().c_nThreadPassCount;
-
-                if ( m_nThreadNo & 1 ) {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( key_array::const_iterator it = arr.begin(), itEnd = arr.end(); it != itEnd; ++it ) {
-                            func.m_cnt.nKeyExpected = *it;
-                            if ( rMap.erase( *it, std::ref(func)))
-                                ++m_nDeleteSuccess;
-                            else
-                                ++m_nDeleteFailed;
-                        }
-                    }
-                }
-                else {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( key_array::const_reverse_iterator it = arr.rbegin(), itEnd = arr.rend(); it != itEnd; ++it ) {
-                            func.m_cnt.nKeyExpected = *it;
-                            if ( rMap.erase( *it, std::ref(func)))
-                                ++m_nDeleteSuccess;
-                            else
-                                ++m_nDeleteFailed;
-                        }
-                    }
-                }
-
-                m_nValueSuccess = func.m_cnt.nSuccessItem;
-                m_nValueFailed = func.m_cnt.nFailedItem;
-            }
-        };
-
-    protected:
-
-        template <class Map>
-        void do_test( Map& testMap )
-        {
-            typedef Inserter<Map>       InserterThread;
-            typedef Deleter<Map>        DeleterThread;
-            typedef Updater<Map>        UpdaterThread;
-            cds::OS::Timer    timer;
-
-            m_arrValues.clear();
-            m_arrValues.reserve( c_nMapSize );
-            for ( size_t i = 0; i < c_nMapSize; ++i )
-                m_arrValues.push_back( i );
-            shuffle( m_arrValues.begin(), m_arrValues.end());
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new InserterThread( pool, testMap ), c_nInsertThreadCount );
-            pool.add( new DeleterThread( pool, testMap ), c_nDeleteThreadCount );
-            pool.add( new UpdaterThread( pool, testMap ), c_nUpdateThreadCount );
-            pool.run();
-            CPPUNIT_MSG( "   Duration=" << pool.avgDuration());
-
-            size_t nInsertSuccess = 0;
-            size_t nInsertFailed = 0;
-            size_t nDeleteSuccess = 0;
-            size_t nDeleteFailed = 0;
-            size_t nDelValueSuccess = 0;
-            size_t nDelValueFailed = 0;
-            size_t nUpdateFailed = 0;
-            size_t nUpdateCreated = 0;
-            size_t nUpdateModified = 0;
-            size_t nEnsFuncCreated = 0;
-            size_t nEnsFuncModified = 0;
-            size_t nInsFuncCalled = 0;
-
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                InserterThread * pThread = dynamic_cast<InserterThread *>( *it );
-                if ( pThread ) {
-                    nInsertSuccess += pThread->m_nInsertSuccess;
-                    nInsertFailed += pThread->m_nInsertFailed;
-                    nInsFuncCalled += pThread->m_nTestFunctorRef;
-                }
-                else {
-                    DeleterThread * p = dynamic_cast<DeleterThread *>( *it );
-                    if ( p ) {
-                        nDeleteSuccess += p->m_nDeleteSuccess;
-                        nDeleteFailed += p->m_nDeleteFailed;
-                        nDelValueSuccess += p->m_nValueSuccess;
-                        nDelValueFailed += p->m_nValueFailed;
-                    }
-                    else {
-                        UpdaterThread * pEns = static_cast<UpdaterThread *>( *it );
-                        nUpdateCreated += pEns->m_nUpdateCreated;
-                        nUpdateModified += pEns->m_nUpdateExisted;
-                        nUpdateFailed += pEns->m_nUpdateFailed;
-                        nEnsFuncCreated += pEns->m_nFunctorCreated;
-                        nEnsFuncModified += pEns->m_nFunctorModified;
-                    }
-                }
-            }
-
-            CPPUNIT_MSG( "    Totals: Ins succ=" << nInsertSuccess
-                << " Del succ=" << nDeleteSuccess << "\n"
-                << "          : Ins fail=" << nInsertFailed
-                << " Del fail=" << nDeleteFailed << "\n"
-                << "          : Update succ=" << (nUpdateCreated + nUpdateModified) << " fail=" << nUpdateFailed
-                << " create=" << nUpdateCreated << " modify=" << nUpdateModified << "\n"
-                << "          : update functor: create=" << nEnsFuncCreated << " modify=" << nEnsFuncModified << "\n"
-                << "          Map size=" << testMap.size()
-                );
-
-            CPPUNIT_CHECK_EX( nDelValueFailed == 0, "Functor del failed=" << nDelValueFailed );
-            CPPUNIT_CHECK_EX( nDelValueSuccess == nDeleteSuccess,  "Delete success=" << nDeleteSuccess << " functor=" << nDelValueSuccess );
-
-            CPPUNIT_CHECK( nUpdateFailed == 0 );
-            CPPUNIT_CHECK( nUpdateCreated + nUpdateModified == nEnsFuncCreated + nEnsFuncModified );
-
-            // nInsFuncCalled is call count of insert functor
-            CPPUNIT_CHECK_EX( nInsFuncCalled == nInsertSuccess, "nInsertSuccess=" << nInsertSuccess << " functor nInsFuncCalled=" << nInsFuncCalled );
-
-            check_before_cleanup( testMap );
-
-            CPPUNIT_MSG( "  Clear map (single-threaded)..." );
-            timer.reset();
-            for ( size_t nItem = 0; nItem < c_nMapSize; ++nItem ) {
-                testMap.erase( nItem );
-            }
-            CPPUNIT_MSG( "   Duration=" << timer.duration());
-            CPPUNIT_CHECK( testMap.empty());
-
-            additional_check( testMap );
-            print_stat( testMap );
-            additional_cleanup( testMap );
-        }
-
-        template <class Map>
-        void run_test()
-        {
-            CPPUNIT_MSG( "Thread count: insert=" << c_nInsertThreadCount
-                << " delete=" << c_nDeleteThreadCount
-                << " update=" << c_nUpdateThreadCount
-                << " pass count=" << c_nThreadPassCount
-                << " map size=" << c_nMapSize
-                );
-
-            if ( Map::c_bLoadFactorDepended ) {
-                for ( c_nLoadFactor = 1; c_nLoadFactor <= c_nMaxLoadFactor; c_nLoadFactor *= 2 ) {
-                    CPPUNIT_MSG( "Load factor=" << c_nLoadFactor );
-                    Map  testMap( *this );
-                    do_test( testMap );
-                    if ( c_bPrintGCState )
-                        print_gc_state();
-                }
-            }
-            else {
-                Map testMap( *this );
-                do_test( testMap );
-                if ( c_bPrintGCState )
-                    print_gc_state();
-            }
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg );
-
-#   include "map2/map_defs.h"
-        CDSUNIT_DECLARE_MichaelMap
-        CDSUNIT_DECLARE_SplitList
-        CDSUNIT_DECLARE_SkipListMap
-        CDSUNIT_DECLARE_EllenBinTreeMap
-        CDSUNIT_DECLARE_BronsonAVLTreeMap
-        CDSUNIT_DECLARE_FeldmanHashMap_fixed
-        CDSUNIT_DECLARE_FeldmanHashMap_city
-        CDSUNIT_DECLARE_StripedMap
-        CDSUNIT_DECLARE_RefinableMap
-        CDSUNIT_DECLARE_CuckooMap
-
-        CPPUNIT_TEST_SUITE(Map_InsDel_func)
-            CDSUNIT_TEST_MichaelMap
-            CDSUNIT_TEST_SplitList
-            CDSUNIT_TEST_SkipListMap
-            CDSUNIT_TEST_EllenBinTreeMap
-            CDSUNIT_TEST_BronsonAVLTreeMap
-            CDSUNIT_TEST_FeldmanHashMap_fixed
-            CDSUNIT_TEST_FeldmanHashMap_city
-            CDSUNIT_TEST_CuckooMap
-            CDSUNIT_TEST_StripedMap
-            CDSUNIT_TEST_RefinableMap
-        CPPUNIT_TEST_SUITE_END();
-
-    };
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_func_bronsonavltree.cpp b/tests/unit/map2/map_insdel_func_bronsonavltree.cpp
deleted file mode 100644 (file)
index c265f68..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_func.h"
-#include "map2/map_type_bronson_avltree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_func::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_BronsonAVLTreeMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_func_cuckoo.cpp b/tests/unit/map2/map_insdel_func_cuckoo.cpp
deleted file mode 100644 (file)
index 39c6b79..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_func.h"
-#include "map2/map_type_cuckoo.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_func::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_CuckooMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_func_ellentree.cpp b/tests/unit/map2/map_insdel_func_ellentree.cpp
deleted file mode 100644 (file)
index 5870645..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_func.h"
-#include "map2/map_type_ellen_bintree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_func::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_EllenBinTreeMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_func_feldmanhashmap.cpp b/tests/unit/map2/map_insdel_func_feldmanhashmap.cpp
deleted file mode 100644 (file)
index de4fa3f..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_func.h"
-#include "map2/map_type_feldman_hashmap.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_func::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_FeldmanHashMap_fixed
-    CDSUNIT_DECLARE_FeldmanHashMap_city
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_func_michael.cpp b/tests/unit/map2/map_insdel_func_michael.cpp
deleted file mode 100644 (file)
index c6d6a3c..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_func.h"
-#include "map2/map_type_michael.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_func::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_MichaelMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_func_skip.cpp b/tests/unit/map2/map_insdel_func_skip.cpp
deleted file mode 100644 (file)
index 83af276..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_func.h"
-#include "map2/map_type_skip_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_func::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_SkipListMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_func_split.cpp b/tests/unit/map2/map_insdel_func_split.cpp
deleted file mode 100644 (file)
index b361d96..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_func.h"
-#include "map2/map_type_split_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_func::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_SplitList
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_func_striped.cpp b/tests/unit/map2/map_insdel_func_striped.cpp
deleted file mode 100644 (file)
index f72bbfb..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_func.h"
-#include "map2/map_type_striped.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_func::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_StripedMap
-    CDSUNIT_DECLARE_RefinableMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_int.cpp b/tests/unit/map2/map_insdel_int.cpp
deleted file mode 100644 (file)
index 5b94229..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_int.h"
-#include <cds/os/topology.h>
-
-namespace map2 {
-    CPPUNIT_TEST_SUITE_REGISTRATION( Map_InsDel_int );
-
-
-    void Map_InsDel_int::setUpParams( const CppUnitMini::TestCfg& cfg ) {
-        c_nInsertThreadCount = cfg.getSizeT("InsertThreadCount", c_nInsertThreadCount );
-        c_nDeleteThreadCount = cfg.getSizeT("DeleteThreadCount", c_nDeleteThreadCount );
-        c_nThreadPassCount = cfg.getSizeT("ThreadPassCount", c_nThreadPassCount );
-        c_nMapSize = cfg.getSizeT("MapSize", c_nMapSize );
-        c_nMaxLoadFactor = cfg.getSizeT("MaxLoadFactor", c_nMaxLoadFactor );
-
-        c_nCuckooInitialSize = cfg.getULong("CuckooInitialSize", static_cast<unsigned long>(c_nCuckooInitialSize) );
-        c_nCuckooProbesetSize = cfg.getULong("CuckooProbesetSize", static_cast<unsigned long>(c_nCuckooProbesetSize) );
-        c_nCuckooProbesetThreshold = cfg.getULong("CuckooProbesetThreshold", static_cast<unsigned long>(c_nCuckooProbesetThreshold) );
-
-        c_nFeldmanMap_HeadBits = cfg.getULong("FeldmanMapHeadBits", static_cast<unsigned long>(c_nFeldmanMap_HeadBits) );
-        c_nFeldmanMap_ArrayBits = cfg.getULong("FeldmanMapArrayBits", static_cast<unsigned long>(c_nFeldmanMap_ArrayBits) );
-
-        c_bPrintGCState = cfg.getBool("PrintGCStateFlag", c_bPrintGCState );
-
-        if ( c_nInsertThreadCount == 0 )
-            c_nInsertThreadCount = cds::OS::topology::processor_count();
-        if ( c_nDeleteThreadCount == 0 )
-            c_nDeleteThreadCount = cds::OS::topology::processor_count();
-
-        m_arrValues.clear();
-        m_arrValues.reserve( c_nMapSize );
-        for ( size_t i = 0; i < c_nMapSize; ++i )
-            m_arrValues.push_back( i );
-        shuffle( m_arrValues.begin(), m_arrValues.end() );
-    }
-
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_int.h b/tests/unit/map2/map_insdel_int.h
deleted file mode 100644 (file)
index c8f8c1b..0000000
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_type.h"
-#include "cppunit/thread.h"
-
-#include <vector>
-
-namespace map2 {
-
-#   define TEST_CASE(TAG, X)  void X();
-
-    class Map_InsDel_int: public CppUnitMini::TestCase
-    {
-    public:
-        size_t c_nMapSize = 1000000;      // map size
-        size_t c_nInsertThreadCount = 4;  // count of insertion thread
-        size_t c_nDeleteThreadCount = 4;  // count of deletion thread
-        size_t c_nThreadPassCount = 4;    // pass count for each thread
-        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 (o - use default)
-
-        size_t c_nFeldmanMap_HeadBits = 10;
-        size_t c_nFeldmanMap_ArrayBits = 4;
-
-        bool   c_bPrintGCState = true;
-
-        size_t  c_nLoadFactor;  // current load factor
-
-    private:
-        typedef size_t  key_type;
-        typedef size_t  value_type;
-
-        typedef std::vector<key_type>   key_array;
-        key_array                       m_arrValues;
-
-        template <class Map>
-        class Inserter: public CppUnitMini::TestThread
-        {
-            Map&     m_Map;
-
-            virtual Inserter *    clone()
-            {
-                return new Inserter( *this );
-            }
-        public:
-            size_t  m_nInsertSuccess;
-            size_t  m_nInsertFailed;
-
-        public:
-            Inserter( CppUnitMini::ThreadPool& pool, Map& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Map( rMap )
-            {}
-            Inserter( Inserter& src )
-                : CppUnitMini::TestThread( src )
-                , m_Map( src.m_Map )
-            {}
-
-            Map_InsDel_int&  getTest()
-            {
-                return reinterpret_cast<Map_InsDel_int&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                Map& rMap = m_Map;
-
-                m_nInsertSuccess =
-                    m_nInsertFailed = 0;
-                key_array const& arr = getTest().m_arrValues;
-
-                size_t const nPassCount = getTest().c_nThreadPassCount;
-
-                if ( m_nThreadNo & 1 ) {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( key_array::const_iterator it = arr.begin(), itEnd = arr.end(); it != itEnd; ++it ) {
-                            if ( rMap.insert( *it, *it * 8 ) )
-                                ++m_nInsertSuccess;
-                            else
-                                ++m_nInsertFailed;
-                        }
-                    }
-                }
-                else {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( key_array::const_reverse_iterator it = arr.rbegin(), itEnd = arr.rend(); it != itEnd; ++it ) {
-                            if ( rMap.insert( *it, *it * 8 ) )
-                                ++m_nInsertSuccess;
-                            else
-                                ++m_nInsertFailed;
-                        }
-                    }
-                }
-            }
-        };
-
-        template <class Map>
-        class Deleter: public CppUnitMini::TestThread
-        {
-            Map&     m_Map;
-
-            virtual Deleter *    clone()
-            {
-                return new Deleter( *this );
-            }
-        public:
-            size_t  m_nDeleteSuccess;
-            size_t  m_nDeleteFailed;
-
-        public:
-            Deleter( CppUnitMini::ThreadPool& pool, Map& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Map( rMap )
-            {}
-            Deleter( Deleter& src )
-                : CppUnitMini::TestThread( src )
-                , m_Map( src.m_Map )
-            {}
-
-            Map_InsDel_int&  getTest()
-            {
-                return reinterpret_cast<Map_InsDel_int&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                Map& rMap = m_Map;
-
-                m_nDeleteSuccess =
-                    m_nDeleteFailed = 0;
-                key_array const& arr = getTest().m_arrValues;
-
-                size_t const nPassCount = getTest().c_nThreadPassCount;
-
-                if ( m_nThreadNo & 1 ) {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( key_array::const_iterator it = arr.begin(), itEnd = arr.end(); it != itEnd; ++it ) {
-                            if ( rMap.erase( *it ) )
-                                ++m_nDeleteSuccess;
-                            else
-                                ++m_nDeleteFailed;
-                        }
-                    }
-                }
-                else {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( key_array::const_reverse_iterator it = arr.rbegin(), itEnd = arr.rend(); it != itEnd; ++it ) {
-                            if ( rMap.erase( *it ) )
-                                ++m_nDeleteSuccess;
-                            else
-                                ++m_nDeleteFailed;
-                        }
-                    }
-                }
-            }
-        };
-
-    protected:
-        template <class Map>
-        void do_test( Map& testMap )
-        {
-            typedef Inserter<Map>       InserterThread;
-            typedef Deleter<Map>        DeleterThread;
-            cds::OS::Timer    timer;
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new InserterThread( pool, testMap ), c_nInsertThreadCount );
-            pool.add( new DeleterThread( pool, testMap ), c_nDeleteThreadCount );
-            pool.run();
-            CPPUNIT_MSG( "   Duration=" << pool.avgDuration() );
-
-            size_t nInsertSuccess = 0;
-            size_t nInsertFailed = 0;
-            size_t nDeleteSuccess = 0;
-            size_t nDeleteFailed = 0;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                InserterThread * pThread = dynamic_cast<InserterThread *>( *it );
-                if ( pThread ) {
-                    nInsertSuccess += pThread->m_nInsertSuccess;
-                    nInsertFailed += pThread->m_nInsertFailed;
-                }
-                else {
-                    DeleterThread * p = static_cast<DeleterThread *>( *it );
-                    nDeleteSuccess += p->m_nDeleteSuccess;
-                    nDeleteFailed += p->m_nDeleteFailed;
-                }
-            }
-
-            CPPUNIT_MSG( "    Totals: Ins succ=" << nInsertSuccess
-                << " Del succ=" << nDeleteSuccess << "\n"
-                << "          : Ins fail=" << nInsertFailed
-                << " Del fail=" << nDeleteFailed
-                << " Map size=" << testMap.size()
-                );
-
-            check_before_cleanup( testMap );
-
-            CPPUNIT_MSG( "  Clear map (single-threaded)..." );
-            timer.reset();
-            for ( size_t nItem = 0; nItem < c_nMapSize; ++nItem ) {
-                testMap.erase( nItem );
-            }
-            CPPUNIT_MSG( "   Duration=" << timer.duration() );
-            CPPUNIT_CHECK( testMap.empty());
-            CPPUNIT_CHECK_EX( testMap.size() == 0, "size() == " << testMap.size() );
-
-            additional_check( testMap );
-            print_stat( testMap );
-            additional_cleanup( testMap );
-        }
-
-        template <class Map>
-        void run_test()
-        {
-            CPPUNIT_MSG( "Thread count: insert=" << c_nInsertThreadCount
-                << " delete=" << c_nDeleteThreadCount
-                << " pass count=" << c_nThreadPassCount
-                << " map size=" << c_nMapSize
-                );
-
-            if ( Map::c_bLoadFactorDepended ) {
-                for ( c_nLoadFactor = 1; c_nLoadFactor <= c_nMaxLoadFactor; c_nLoadFactor *= 2 ) {
-                    CPPUNIT_MSG( "Load factor=" << c_nLoadFactor );
-                    Map  testMap( *this );
-                    do_test( testMap );
-                    if ( c_bPrintGCState )
-                        print_gc_state();
-                }
-            }
-            else {
-                Map testMap( *this );
-                do_test( testMap );
-                if ( c_bPrintGCState )
-                    print_gc_state();
-            }
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg );
-
-#   include "map2/map_defs.h"
-        CDSUNIT_DECLARE_MichaelMap
-        CDSUNIT_DECLARE_SplitList
-        CDSUNIT_DECLARE_SkipListMap
-        CDSUNIT_DECLARE_EllenBinTreeMap
-        CDSUNIT_DECLARE_BronsonAVLTreeMap
-        CDSUNIT_DECLARE_FeldmanHashMap_fixed
-        CDSUNIT_DECLARE_FeldmanHashMap_city
-        CDSUNIT_DECLARE_StripedMap
-        CDSUNIT_DECLARE_RefinableMap
-        CDSUNIT_DECLARE_CuckooMap
-        CDSUNIT_DECLARE_StdMap
-
-        CPPUNIT_TEST_SUITE(Map_InsDel_int)
-            CDSUNIT_TEST_MichaelMap
-            CDSUNIT_TEST_SplitList
-            CDSUNIT_TEST_SkipListMap
-            CDSUNIT_TEST_EllenBinTreeMap
-            CDSUNIT_TEST_BronsonAVLTreeMap
-            CDSUNIT_TEST_FeldmanHashMap_fixed
-            CDSUNIT_TEST_FeldmanHashMap_city
-            CDSUNIT_TEST_CuckooMap
-            CDSUNIT_TEST_StripedMap
-            CDSUNIT_TEST_RefinableMap
-            CDSUNIT_TEST_StdMap
-        CPPUNIT_TEST_SUITE_END();
-    };
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_int_bronsonavltree.cpp b/tests/unit/map2/map_insdel_int_bronsonavltree.cpp
deleted file mode 100644 (file)
index f2e7e22..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_int.h"
-#include "map2/map_type_bronson_avltree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_BronsonAVLTreeMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_int_cuckoo.cpp b/tests/unit/map2/map_insdel_int_cuckoo.cpp
deleted file mode 100644 (file)
index 742a74d..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_int.h"
-#include "map2/map_type_cuckoo.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_CuckooMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_int_ellentree.cpp b/tests/unit/map2/map_insdel_int_ellentree.cpp
deleted file mode 100644 (file)
index 1eb5ead..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_int.h"
-#include "map2/map_type_ellen_bintree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_EllenBinTreeMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_int_feldmanhashmap.cpp b/tests/unit/map2/map_insdel_int_feldmanhashmap.cpp
deleted file mode 100644 (file)
index 89f586c..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_int.h"
-#include "map2/map_type_feldman_hashmap.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_FeldmanHashMap_fixed
-    CDSUNIT_DECLARE_FeldmanHashMap_city
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_int_michael.cpp b/tests/unit/map2/map_insdel_int_michael.cpp
deleted file mode 100644 (file)
index 028d70c..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_int.h"
-#include "map2/map_type_michael.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_MichaelMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_int_skip.cpp b/tests/unit/map2/map_insdel_int_skip.cpp
deleted file mode 100644 (file)
index b311d5a..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_int.h"
-#include "map2/map_type_skip_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_SkipListMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_int_split.cpp b/tests/unit/map2/map_insdel_int_split.cpp
deleted file mode 100644 (file)
index 2000e49..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_int.h"
-#include "map2/map_type_split_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_SplitList
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_int_std.cpp b/tests/unit/map2/map_insdel_int_std.cpp
deleted file mode 100644 (file)
index e65fd91..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_int.h"
-#include "map2/map_type_std.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_StdMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_int_striped.cpp b/tests/unit/map2/map_insdel_int_striped.cpp
deleted file mode 100644 (file)
index ced2188..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_int.h"
-#include "map2/map_type_striped.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_StripedMap
-    CDSUNIT_DECLARE_RefinableMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_item_int.cpp b/tests/unit/map2/map_insdel_item_int.cpp
deleted file mode 100644 (file)
index a472463..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_item_int.h"
-
-namespace map2 {
-    CPPUNIT_TEST_SUITE_REGISTRATION( Map_InsDel_Item_int );
-
-    void Map_InsDel_Item_int::setUpParams( const CppUnitMini::TestCfg& cfg )
-    {
-        c_nThreadCount = cfg.getSizeT("ThreadCount", c_nThreadCount );
-        c_nMapSize = cfg.getSizeT("MapSize", c_nMapSize );
-        c_nGoalItem = cfg.getSizeT("GoalItem", c_nMapSize / 2 );
-        c_nAttemptCount = cfg.getSizeT("AttemptCount", c_nAttemptCount );
-        c_nMaxLoadFactor = cfg.getSizeT("MaxLoadFactor", c_nMaxLoadFactor );
-        c_bPrintGCState = cfg.getBool("PrintGCStateFlag", true );
-
-        c_nCuckooInitialSize = cfg.getSizeT("CuckooInitialSize", c_nCuckooInitialSize);
-        c_nCuckooProbesetSize = cfg.getSizeT("CuckooProbesetSize", c_nCuckooProbesetSize);
-        c_nCuckooProbesetThreshold = cfg.getSizeT("CuckooProbesetThreshold", c_nCuckooProbesetThreshold);
-
-        c_nFeldmanMap_HeadBits = cfg.getSizeT("FeldmanMapHeadBits", c_nFeldmanMap_HeadBits);
-        c_nFeldmanMap_ArrayBits = cfg.getSizeT("FeldmanMapArrayBits", c_nFeldmanMap_ArrayBits);
-
-        if ( c_nThreadCount == 0 )
-            c_nThreadCount = std::thread::hardware_concurrency() * 2;
-    }
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_item_int.h b/tests/unit/map2/map_insdel_item_int.h
deleted file mode 100644 (file)
index 34214c9..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_type.h"
-#include "cppunit/thread.h"
-
-#include <vector>
-
-namespace map2 {
-
-#define TEST_CASE(TAG, X)  void X();
-
-    class Map_InsDel_Item_int: public CppUnitMini::TestCase
-    {
-    public:
-        size_t  c_nMapSize = 1000000;       // map size
-        size_t  c_nThreadCount = 4;         // thread count
-        size_t  c_nAttemptCount = 100000;   // count of SUCCESS insert/delete for each thread
-        size_t  c_nMaxLoadFactor = 8;       // maximum load factor
-        bool    c_bPrintGCState = true;
-
-        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 (o - use default)
-
-        size_t c_nFeldmanMap_HeadBits = 10;
-        size_t c_nFeldmanMap_ArrayBits = 4;
-
-        size_t  c_nGoalItem;
-        size_t  c_nLoadFactor = 2;  // current load factor
-
-    private:
-        typedef size_t  key_type;
-        typedef size_t  value_type;
-
-        template <class Map>
-        class Inserter: public CppUnitMini::TestThread
-        {
-            Map&     m_Map;
-
-            virtual Inserter *    clone()
-            {
-                return new Inserter( *this );
-            }
-
-            struct update_func
-            {
-                void operator()( bool bNew, std::pair<key_type const, value_type>& item )
-                {
-                    if ( bNew )
-                        item.second = item.first;
-                }
-                // for boost::container::flat_map
-                void operator()( bool bNew, std::pair<key_type, value_type>& item )
-                {
-                    if ( bNew )
-                        item.second = item.first;
-                }
-
-                // for BronsonAVLTreeMap
-                void operator()( bool bNew, key_type key, value_type& val )
-                {
-                    if ( bNew )
-                        val = key;
-                }
-
-                // for FeldmanHashMap
-                void operator()( std::pair<key_type const, value_type>& item, std::pair<key_type const, value_type> * pOld )
-                {
-                    if ( !pOld )
-                        item.second = item.first;
-                }
-            };
-
-        public:
-            size_t  m_nInsertSuccess;
-            size_t  m_nInsertFailed;
-
-        public:
-            Inserter( CppUnitMini::ThreadPool& pool, Map& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Map( rMap )
-            {}
-            Inserter( Inserter& src )
-                : CppUnitMini::TestThread( src )
-                , m_Map( src.m_Map )
-            {}
-
-            Map_InsDel_Item_int&  getTest()
-            {
-                return reinterpret_cast<Map_InsDel_Item_int&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                Map& rMap = m_Map;
-
-                m_nInsertSuccess =
-                    m_nInsertFailed = 0;
-
-                size_t nGoalItem = getTest().c_nGoalItem;
-                size_t const nAttemptCount = getTest().c_nAttemptCount;
-
-                for ( size_t nAttempt = 0; nAttempt < nAttemptCount; ) {
-                    if ( nAttempt % 2  == 0 ) {
-                        if ( rMap.insert( nGoalItem, nGoalItem )) {
-                            ++m_nInsertSuccess;
-                            ++nAttempt;
-                        }
-                        else
-                            ++m_nInsertFailed;
-                    }
-                    else {
-                        std::pair<bool, bool> updateResult = rMap.update( nGoalItem, update_func(), true );
-                        if ( updateResult.second ) {
-                            ++m_nInsertSuccess;
-                            ++nAttempt;
-                        }
-                        else
-                            ++m_nInsertFailed;
-                    }
-                }
-            }
-        };
-
-        template <class Map>
-        class Deleter: public CppUnitMini::TestThread
-        {
-            Map&     m_Map;
-
-            virtual Deleter *    clone()
-            {
-                return new Deleter( *this );
-            }
-        public:
-            size_t  m_nDeleteSuccess;
-            size_t  m_nDeleteFailed;
-
-        public:
-            Deleter( CppUnitMini::ThreadPool& pool, Map& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Map( rMap )
-            {}
-            Deleter( Deleter& src )
-                : CppUnitMini::TestThread( src )
-                , m_Map( src.m_Map )
-            {}
-
-            Map_InsDel_Item_int&  getTest()
-            {
-                return reinterpret_cast<Map_InsDel_Item_int&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                Map& rMap = m_Map;
-
-                m_nDeleteSuccess =
-                    m_nDeleteFailed = 0;
-
-                size_t nGoalItem = getTest().c_nGoalItem;
-                size_t const nAttemptCount = getTest().c_nAttemptCount;
-                for ( size_t nAttempt = 0; nAttempt < nAttemptCount; ) {
-                    if ( rMap.erase( nGoalItem )) {
-                        ++m_nDeleteSuccess;
-                        ++nAttempt;
-                    }
-                    else
-                        ++m_nDeleteFailed;
-                }
-            }
-        };
-
-    protected:
-
-        template <class Map>
-        void do_test( Map& testMap )
-        {
-            typedef Inserter<Map>       InserterThread;
-            typedef Deleter<Map>        DeleterThread;
-            cds::OS::Timer    timer;
-
-            // Fill the map
-            CPPUNIT_MSG( "  Fill map (" << c_nMapSize << " items)...");
-            timer.reset();
-            {
-                std::vector<key_type>   v;
-                v.reserve( c_nMapSize );
-                for ( size_t i = 0; i < c_nMapSize; ++i )
-                    v.push_back( i );
-                shuffle( v.begin(), v.end() );
-                for ( size_t i = 0; i < v.size(); ++i ) {
-                    CPPUNIT_ASSERT( testMap.insert( v[i], v[i] ));
-                }
-            }
-            CPPUNIT_MSG( "   Duration=" << timer.duration() );
-
-            CPPUNIT_MSG( "  Insert/delete the key " << c_nGoalItem << " (" << c_nAttemptCount << " successful times)...");
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new InserterThread( pool, testMap ), (c_nThreadCount + 1) / 2 );
-            pool.add( new DeleterThread( pool, testMap ), (c_nThreadCount + 1) / 2 );
-            pool.run();
-            CPPUNIT_MSG( "   Duration=" << pool.avgDuration() );
-
-            size_t nInsertSuccess = 0;
-            size_t nInsertFailed = 0;
-            size_t nDeleteSuccess = 0;
-            size_t nDeleteFailed = 0;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                InserterThread * pThread = dynamic_cast<InserterThread *>( *it );
-                if ( pThread ) {
-                    CPPUNIT_CHECK( pThread->m_nInsertSuccess == c_nAttemptCount );
-                    nInsertSuccess += pThread->m_nInsertSuccess;
-                    nInsertFailed += pThread->m_nInsertFailed;
-                }
-                else {
-                    DeleterThread * p = static_cast<DeleterThread *>( *it );
-                    CPPUNIT_CHECK( p->m_nDeleteSuccess == c_nAttemptCount );
-                    nDeleteSuccess += p->m_nDeleteSuccess;
-                    nDeleteFailed += p->m_nDeleteFailed;
-                }
-            }
-            CPPUNIT_CHECK( nInsertSuccess == nDeleteSuccess );
-            size_t nGoalItem = c_nGoalItem;
-            CPPUNIT_CHECK( testMap.contains( nGoalItem ));
-
-
-            CPPUNIT_MSG( "    Totals: Ins fail=" << nInsertFailed << " Del fail=" << nDeleteFailed );
-
-            // Check if the map contains all items
-            CPPUNIT_MSG( "    Check if the map contains all items" );
-            timer.reset();
-            for ( size_t i = 0; i < c_nMapSize; ++i ) {
-                CPPUNIT_CHECK_EX( testMap.contains( i ), "key " << i );
-            }
-            CPPUNIT_MSG( "    Duration=" << timer.duration() );
-
-            check_before_cleanup( testMap );
-
-            testMap.clear();
-            additional_check( testMap );
-            print_stat( testMap );
-            additional_cleanup( testMap );
-        }
-
-        template <class Map>
-        void run_test()
-        {
-            if ( Map::c_bLoadFactorDepended ) {
-                for ( c_nLoadFactor = 1; c_nLoadFactor <= c_nMaxLoadFactor; c_nLoadFactor *= 2 ) {
-                    CPPUNIT_MSG( "Load factor=" << c_nLoadFactor );
-                    Map testMap( *this );
-                    do_test( testMap );
-                    if ( c_bPrintGCState )
-                        print_gc_state();
-                }
-            }
-            else {
-                Map testMap( *this );
-                do_test<Map>( testMap );
-                if ( c_bPrintGCState )
-                    print_gc_state();
-            }
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg );
-
-#   include "map2/map_defs.h"
-        CDSUNIT_DECLARE_MichaelMap
-        CDSUNIT_DECLARE_SplitList
-        CDSUNIT_DECLARE_SkipListMap
-        CDSUNIT_DECLARE_EllenBinTreeMap
-        CDSUNIT_DECLARE_BronsonAVLTreeMap
-        CDSUNIT_DECLARE_FeldmanHashMap_fixed
-        CDSUNIT_DECLARE_FeldmanHashMap_city
-        CDSUNIT_DECLARE_StripedMap
-        CDSUNIT_DECLARE_RefinableMap
-        CDSUNIT_DECLARE_CuckooMap
-        // CDSUNIT_DECLARE_StdMap // very slow!!
-
-        CPPUNIT_TEST_SUITE(Map_InsDel_Item_int)
-            CDSUNIT_TEST_MichaelMap
-            CDSUNIT_TEST_SplitList
-            CDSUNIT_TEST_SkipListMap
-            CDSUNIT_TEST_EllenBinTreeMap
-            CDSUNIT_TEST_BronsonAVLTreeMap
-            CDSUNIT_TEST_FeldmanHashMap_fixed
-            CDSUNIT_TEST_FeldmanHashMap_city
-            //CDSUNIT_TEST_CuckooMap
-            //CDSUNIT_TEST_StripedMap
-            //CDSUNIT_TEST_RefinableMap
-            // CDSUNIT_TEST_StdMap // very slow!!
-        CPPUNIT_TEST_SUITE_END();
-    };
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_item_int_bronsonavltree.cpp b/tests/unit/map2/map_insdel_item_int_bronsonavltree.cpp
deleted file mode 100644 (file)
index c0483f7..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_item_int.h"
-#include "map2/map_type_bronson_avltree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_Item_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_BronsonAVLTreeMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_item_int_cuckoo.cpp b/tests/unit/map2/map_insdel_item_int_cuckoo.cpp
deleted file mode 100644 (file)
index f145d39..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_item_int.h"
-#include "map2/map_type_cuckoo.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_Item_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_CuckooMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_item_int_ellentree.cpp b/tests/unit/map2/map_insdel_item_int_ellentree.cpp
deleted file mode 100644 (file)
index 5098a3e..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_item_int.h"
-#include "map2/map_type_ellen_bintree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_Item_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_EllenBinTreeMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_item_int_feldmanhashmap.cpp b/tests/unit/map2/map_insdel_item_int_feldmanhashmap.cpp
deleted file mode 100644 (file)
index 2e01a79..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_item_int.h"
-#include "map2/map_type_feldman_hashmap.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_Item_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_FeldmanHashMap_fixed
-    CDSUNIT_DECLARE_FeldmanHashMap_city
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_item_int_michael.cpp b/tests/unit/map2/map_insdel_item_int_michael.cpp
deleted file mode 100644 (file)
index 4f8e27c..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_item_int.h"
-#include "map2/map_type_michael.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_Item_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_MichaelMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_item_int_skip.cpp b/tests/unit/map2/map_insdel_item_int_skip.cpp
deleted file mode 100644 (file)
index 3a2cb13..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_item_int.h"
-#include "map2/map_type_skip_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_Item_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_SkipListMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_item_int_split.cpp b/tests/unit/map2/map_insdel_item_int_split.cpp
deleted file mode 100644 (file)
index 3861927..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_item_int.h"
-#include "map2/map_type_split_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_Item_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_SplitList
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_item_int_striped.cpp b/tests/unit/map2/map_insdel_item_int_striped.cpp
deleted file mode 100644 (file)
index 5d2d5e3..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_item_int.h"
-#include "map2/map_type_striped.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_Item_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_StripedMap
-    CDSUNIT_DECLARE_RefinableMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_item_string.cpp b/tests/unit/map2/map_insdel_item_string.cpp
deleted file mode 100644 (file)
index 7569352..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_item_string.h"
-
-namespace map2 {
-    CPPUNIT_TEST_SUITE_REGISTRATION( Map_InsDel_Item_string );
-
-    void Map_InsDel_Item_string::setUpParams( const CppUnitMini::TestCfg& cfg )
-    {
-        c_nThreadCount = cfg.getSizeT("ThreadCount", c_nThreadCount );
-        c_nMapSize = cfg.getSizeT("MapSize", c_nMapSize );
-        c_nGoalItem = cfg.getSizeT("GoalItem", c_nMapSize / 2 );
-        c_nAttemptCount = cfg.getSizeT("AttemptCount", c_nAttemptCount );
-        c_nMaxLoadFactor = cfg.getSizeT("MaxLoadFactor", c_nMaxLoadFactor );
-        c_bPrintGCState = cfg.getBool("PrintGCStateFlag", true );
-
-        c_nCuckooInitialSize = cfg.getSizeT("CuckooInitialSize", c_nCuckooInitialSize);
-        c_nCuckooProbesetSize = cfg.getSizeT("CuckooProbesetSize", c_nCuckooProbesetSize);
-        c_nCuckooProbesetThreshold = cfg.getSizeT("CuckooProbesetThreshold", c_nCuckooProbesetThreshold);
-
-        c_nFeldmanMap_HeadBits = cfg.getSizeT("FeldmanMapHeadBits", c_nFeldmanMap_HeadBits);
-        c_nFeldmanMap_ArrayBits = cfg.getSizeT("FeldmanMapArrayBits", c_nFeldmanMap_ArrayBits);
-
-        if ( c_nThreadCount == 0 )
-            c_nThreadCount = std::thread::hardware_concurrency() * 2;
-    }
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_item_string.h b/tests/unit/map2/map_insdel_item_string.h
deleted file mode 100644 (file)
index 1461f4a..0000000
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_type.h"
-#include "cppunit/thread.h"
-
-#include <vector>
-
-namespace map2 {
-
-#define TEST_CASE(TAG, X)  void X();
-
-    class Map_InsDel_Item_string: public CppUnitMini::TestCase
-    {
-    public:
-        size_t  c_nMapSize = 1000000;       // map size
-        size_t  c_nThreadCount = 4;         // thread count
-        size_t  c_nAttemptCount = 100000;   // count of SUCCESS insert/delete for each thread
-        size_t  c_nMaxLoadFactor = 8;       // maximum load factor
-        bool    c_bPrintGCState = true;
-
-        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 (o - use default)
-
-        size_t c_nFeldmanMap_HeadBits = 10;
-        size_t c_nFeldmanMap_ArrayBits = 4;
-
-        size_t  c_nGoalItem;
-        size_t  c_nLoadFactor = 2;  // current load factor
-
-    private:
-        typedef std::string  key_type;
-        typedef size_t  value_type;
-
-        const std::vector<std::string> *  m_parrString;
-
-        template <class Map>
-        class Inserter: public CppUnitMini::TestThread
-        {
-            Map&     m_Map;
-
-            virtual Inserter *    clone()
-            {
-                return new Inserter( *this );
-            }
-        public:
-            size_t  m_nInsertSuccess;
-            size_t  m_nInsertFailed;
-
-        public:
-            Inserter( CppUnitMini::ThreadPool& pool, Map& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Map( rMap )
-            {}
-            Inserter( Inserter& src )
-                : CppUnitMini::TestThread( src )
-                , m_Map( src.m_Map )
-            {}
-
-            Map_InsDel_Item_string&  getTest()
-            {
-                return reinterpret_cast<Map_InsDel_Item_string&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                Map& rMap = m_Map;
-
-                m_nInsertSuccess =
-                    m_nInsertFailed = 0;
-
-                size_t nGoalItem = getTest().c_nGoalItem;
-                std::string strGoal = (*getTest().m_parrString)[nGoalItem];
-                size_t const nAttemptCount = getTest().c_nAttemptCount;
-
-                for ( size_t nAttempt = 0; nAttempt < nAttemptCount; ) {
-                    if ( rMap.insert( strGoal, nGoalItem )) {
-                        ++m_nInsertSuccess;
-                        ++nAttempt;
-                    }
-                    else
-                        ++m_nInsertFailed;
-                }
-            }
-        };
-
-        template <class Map>
-        class Deleter: public CppUnitMini::TestThread
-        {
-            Map&     m_Map;
-
-            struct erase_cleaner {
-                void operator ()(std::pair<typename Map::key_type const, typename Map::mapped_type>& val )
-                {
-                    val.second = 0;
-                }
-                // for boost::container::flat_map
-                void operator ()(std::pair< typename std::remove_const< typename Map::key_type >::type, typename Map::mapped_type>& val )
-                {
-                    val.second = 0;
-                }
-                // for BronsonAVLTreeMap
-                void operator()( typename Map::key_type const& /*key*/, typename Map::mapped_type& val )
-                {
-                    val = 0;
-                }
-            };
-
-            virtual Deleter *    clone()
-            {
-                return new Deleter( *this );
-            }
-        public:
-            size_t  m_nDeleteSuccess;
-            size_t  m_nDeleteFailed;
-
-        public:
-            Deleter( CppUnitMini::ThreadPool& pool, Map& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Map( rMap )
-            {}
-            Deleter( Deleter& src )
-                : CppUnitMini::TestThread( src )
-                , m_Map( src.m_Map )
-            {}
-
-            Map_InsDel_Item_string&  getTest()
-            {
-                return reinterpret_cast<Map_InsDel_Item_string&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                Map& rMap = m_Map;
-
-                m_nDeleteSuccess =
-                    m_nDeleteFailed = 0;
-
-                size_t nGoalItem = getTest().c_nGoalItem;
-                std::string strGoal = (*getTest().m_parrString)[nGoalItem];
-                size_t const nAttemptCount = getTest().c_nAttemptCount;
-
-                for ( size_t nAttempt = 0; nAttempt < nAttemptCount; ) {
-                    if ( rMap.erase( strGoal, erase_cleaner() )) {
-                        ++m_nDeleteSuccess;
-                        ++nAttempt;
-                    }
-                    else
-                        ++m_nDeleteFailed;
-                }
-            }
-        };
-
-    protected:
-
-        template <class Map>
-        void do_test( Map& testMap )
-        {
-            typedef Inserter<Map>       InserterThread;
-            typedef Deleter<Map>        DeleterThread;
-            cds::OS::Timer    timer;
-
-            // Fill the map
-            CPPUNIT_MSG( "  Fill map (" << c_nMapSize << " items)...");
-            timer.reset();
-            for ( size_t i = 0; i < c_nMapSize; ++i ) {
-                CPPUNIT_ASSERT_EX( testMap.insert( (*m_parrString)[i], i ), i );
-            }
-            CPPUNIT_MSG( "   Duration=" << timer.duration() );
-
-            CPPUNIT_MSG( "  Insert/delete the key " << c_nGoalItem << " (" << c_nAttemptCount << " successful times)...");
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new InserterThread( pool, testMap ), (c_nThreadCount + 1) / 2 );
-            pool.add( new DeleterThread( pool, testMap ), (c_nThreadCount + 1) / 2 );
-            pool.run();
-            CPPUNIT_MSG( "   Duration=" << pool.avgDuration() );
-
-            size_t nInsertSuccess = 0;
-            size_t nInsertFailed = 0;
-            size_t nDeleteSuccess = 0;
-            size_t nDeleteFailed = 0;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                InserterThread * pThread = dynamic_cast<InserterThread *>( *it );
-                if ( pThread ) {
-                    CPPUNIT_CHECK( pThread->m_nInsertSuccess == c_nAttemptCount );
-                    nInsertSuccess += pThread->m_nInsertSuccess;
-                    nInsertFailed += pThread->m_nInsertFailed;
-                }
-                else {
-                    DeleterThread * p = static_cast<DeleterThread *>( *it );
-                    CPPUNIT_CHECK( p->m_nDeleteSuccess == c_nAttemptCount );
-                    nDeleteSuccess += p->m_nDeleteSuccess;
-                    nDeleteFailed += p->m_nDeleteFailed;
-                }
-            }
-            CPPUNIT_CHECK_EX( nInsertSuccess == nDeleteSuccess, "nInsertSuccess=" << nInsertSuccess << ", nDeleteSuccess=" << nDeleteSuccess );
-            CPPUNIT_MSG( "    Totals: Ins fail=" << nInsertFailed << " Del fail=" << nDeleteFailed );
-
-            // Check if the map contains all items
-            CPPUNIT_MSG( "    Check if the map contains all items" );
-            timer.reset();
-            for ( size_t i = 0; i < c_nMapSize; ++i ) {
-                CPPUNIT_CHECK_EX( testMap.contains( (*m_parrString)[i] ), "Key \"" << (*m_parrString)[i] << "\" not found" );
-            }
-            CPPUNIT_MSG( "    Duration=" << timer.duration() );
-
-            check_before_cleanup( testMap );
-
-            testMap.clear();
-            additional_check( testMap );
-            print_stat( testMap );
-            additional_cleanup( testMap );
-        }
-
-        template <class Map>
-        void run_test()
-        {
-            m_parrString = &CppUnitMini::TestCase::getTestStrings();
-            if ( c_nMapSize > m_parrString->size() )
-                c_nMapSize = m_parrString->size();
-            if ( c_nGoalItem > m_parrString->size() )
-                c_nGoalItem = m_parrString->size() / 2;
-
-            CPPUNIT_MSG( "Thread count= " << c_nThreadCount
-                << " pass count=" << c_nAttemptCount
-                << " map size=" << c_nMapSize
-                );
-
-            if ( Map::c_bLoadFactorDepended ) {
-                for ( c_nLoadFactor = 1; c_nLoadFactor <= c_nMaxLoadFactor; c_nLoadFactor *= 2 ) {
-                    CPPUNIT_MSG( "Load factor=" << c_nLoadFactor );
-                    Map  testMap( *this );
-                    do_test( testMap );
-                    if ( c_bPrintGCState )
-                        print_gc_state();
-                }
-            }
-            else {
-                Map testMap( *this );
-                do_test( testMap );
-                if ( c_bPrintGCState )
-                    print_gc_state();
-            }
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg );
-
-#   include "map2/map_defs.h"
-        CDSUNIT_DECLARE_MichaelMap
-        CDSUNIT_DECLARE_SplitList
-        CDSUNIT_DECLARE_SkipListMap
-        CDSUNIT_DECLARE_EllenBinTreeMap
-        CDSUNIT_DECLARE_BronsonAVLTreeMap
-        CDSUNIT_DECLARE_FeldmanHashMap_city
-        CDSUNIT_DECLARE_StripedMap
-        CDSUNIT_DECLARE_RefinableMap
-        CDSUNIT_DECLARE_CuckooMap
-        // CDSUNIT_DECLARE_StdMap // very slow!!
-
-        CPPUNIT_TEST_SUITE(Map_InsDel_Item_string)
-            CDSUNIT_TEST_MichaelMap
-            CDSUNIT_TEST_SplitList
-            CDSUNIT_TEST_SkipListMap
-            CDSUNIT_TEST_EllenBinTreeMap
-            CDSUNIT_TEST_BronsonAVLTreeMap
-            CDSUNIT_TEST_FeldmanHashMap_city
-            CDSUNIT_TEST_CuckooMap
-            CDSUNIT_TEST_StripedMap
-            CDSUNIT_TEST_RefinableMap
-            // CDSUNIT_TEST_StdMap // very slow!!
-        CPPUNIT_TEST_SUITE_END();
-
-    };
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_item_string_bronsonavltree.cpp b/tests/unit/map2/map_insdel_item_string_bronsonavltree.cpp
deleted file mode 100644 (file)
index 81e0cad..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_item_string.h"
-#include "map2/map_type_bronson_avltree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_Item_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_BronsonAVLTreeMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_item_string_cuckoo.cpp b/tests/unit/map2/map_insdel_item_string_cuckoo.cpp
deleted file mode 100644 (file)
index 4ffcd53..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_item_string.h"
-#include "map2/map_type_cuckoo.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_Item_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_CuckooMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_item_string_ellentree.cpp b/tests/unit/map2/map_insdel_item_string_ellentree.cpp
deleted file mode 100644 (file)
index 596fb8d..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_item_string.h"
-#include "map2/map_type_ellen_bintree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_Item_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_EllenBinTreeMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_item_string_feldmanhashmap.cpp b/tests/unit/map2/map_insdel_item_string_feldmanhashmap.cpp
deleted file mode 100644 (file)
index 33a15aa..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_item_string.h"
-#include "map2/map_type_feldman_hashmap.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_Item_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_FeldmanHashMap_city
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_item_string_michael.cpp b/tests/unit/map2/map_insdel_item_string_michael.cpp
deleted file mode 100644 (file)
index e9122c8..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_item_string.h"
-#include "map2/map_type_michael.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_Item_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_MichaelMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_item_string_skip.cpp b/tests/unit/map2/map_insdel_item_string_skip.cpp
deleted file mode 100644 (file)
index 3101730..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_item_string.h"
-#include "map2/map_type_skip_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_Item_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_SkipListMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_item_string_split.cpp b/tests/unit/map2/map_insdel_item_string_split.cpp
deleted file mode 100644 (file)
index 7f37753..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_item_string.h"
-#include "map2/map_type_split_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_Item_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_SplitList
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_item_string_striped.cpp b/tests/unit/map2/map_insdel_item_string_striped.cpp
deleted file mode 100644 (file)
index 9a53232..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_item_string.h"
-#include "map2/map_type_striped.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_Item_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_StripedMap
-    CDSUNIT_DECLARE_RefinableMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_string.cpp b/tests/unit/map2/map_insdel_string.cpp
deleted file mode 100644 (file)
index 338bc95..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_string.h"
-
-namespace map2 {
-    CPPUNIT_TEST_SUITE_REGISTRATION( Map_InsDel_string );
-
-    void Map_InsDel_string::setUpParams( const CppUnitMini::TestCfg& cfg )
-    {
-        c_nInsertThreadCount = cfg.getSizeT("InsertThreadCount", c_nInsertThreadCount );
-        c_nDeleteThreadCount = cfg.getSizeT("DeleteThreadCount", c_nDeleteThreadCount );
-        c_nThreadPassCount = cfg.getSizeT("ThreadPassCount", c_nThreadPassCount );
-        c_nMapSize = cfg.getSizeT("MapSize", c_nMapSize );
-        c_nMaxLoadFactor = cfg.getSizeT("MaxLoadFactor", c_nMaxLoadFactor );
-        c_bPrintGCState = cfg.getBool("PrintGCStateFlag", c_bPrintGCState );
-
-        c_nCuckooInitialSize = cfg.getSizeT("CuckooInitialSize", c_nCuckooInitialSize);
-        c_nCuckooProbesetSize = cfg.getSizeT("CuckooProbesetSize", c_nCuckooProbesetSize);
-        c_nCuckooProbesetThreshold = cfg.getSizeT("CuckooProbesetThreshold", c_nCuckooProbesetThreshold);
-
-        c_nFeldmanMap_HeadBits = cfg.getSizeT("FeldmanMapHeadBits", c_nFeldmanMap_HeadBits);
-        c_nFeldmanMap_ArrayBits = cfg.getSizeT("FeldmanMapArrayBits", c_nFeldmanMap_ArrayBits);
-
-        if ( c_nInsertThreadCount == 0 )
-            c_nInsertThreadCount = std::thread::hardware_concurrency();
-        if ( c_nDeleteThreadCount == 0 )
-            c_nDeleteThreadCount = std::thread::hardware_concurrency();
-    }
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_string.h b/tests/unit/map2/map_insdel_string.h
deleted file mode 100644 (file)
index 8b2e1b3..0000000
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_type.h"
-#include "cppunit/thread.h"
-
-#include <vector>
-
-namespace map2 {
-
-#define TEST_CASE(TAG, X)  void X();
-
-    class Map_InsDel_string: public CppUnitMini::TestCase
-    {
-    public:
-        size_t  c_nMapSize = 1000000;      // map size
-        size_t  c_nInsertThreadCount = 4;  // count of insertion thread
-        size_t  c_nDeleteThreadCount = 4;  // count of deletion thread
-        size_t  c_nThreadPassCount = 4;    // pass count for each thread
-        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 (o - use default)
-
-        size_t c_nFeldmanMap_HeadBits = 10;
-        size_t c_nFeldmanMap_ArrayBits = 4;
-
-        bool    c_bPrintGCState = true;
-
-        size_t  c_nLoadFactor;  // current load factor
-
-    private:
-        typedef std::string key_type;
-        typedef size_t      value_type;
-
-        const std::vector<std::string> *  m_parrString;
-
-        template <class Map>
-        class Inserter: public CppUnitMini::TestThread
-        {
-            Map&     m_Map;
-
-            virtual Inserter *    clone()
-            {
-                return new Inserter( *this );
-            }
-        public:
-            size_t  m_nInsertSuccess;
-            size_t  m_nInsertFailed;
-
-        public:
-            Inserter( CppUnitMini::ThreadPool& pool, Map& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Map( rMap )
-            {}
-            Inserter( Inserter& src )
-                : CppUnitMini::TestThread( src )
-                , m_Map( src.m_Map )
-            {}
-
-            Map_InsDel_string&  getTest()
-            {
-                return reinterpret_cast<Map_InsDel_string&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                Map& rMap = m_Map;
-
-                m_nInsertSuccess =
-                    m_nInsertFailed = 0;
-
-                const std::vector<std::string>& arrString = *getTest().m_parrString;
-                size_t nArrSize = arrString.size();
-                size_t const nMapSize = getTest().c_nMapSize;
-                size_t const nPassCount = getTest().c_nThreadPassCount;
-
-                if ( m_nThreadNo & 1 ) {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( size_t nItem = 0; nItem < nMapSize; ++nItem ) {
-                            if ( rMap.insert( arrString[nItem % nArrSize], nItem * 8 ) )
-                                ++m_nInsertSuccess;
-                            else
-                                ++m_nInsertFailed;
-                        }
-                    }
-                }
-                else {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( size_t nItem = nMapSize; nItem > 0; --nItem ) {
-                            if ( rMap.insert( arrString[nItem % nArrSize], nItem * 8 ) )
-                                ++m_nInsertSuccess;
-                            else
-                                ++m_nInsertFailed;
-                        }
-                    }
-                }
-            }
-        };
-
-        template <class Map>
-        class Deleter: public CppUnitMini::TestThread
-        {
-            Map&     m_Map;
-
-            virtual Deleter *    clone()
-            {
-                return new Deleter( *this );
-            }
-        public:
-            size_t  m_nDeleteSuccess;
-            size_t  m_nDeleteFailed;
-
-        public:
-            Deleter( CppUnitMini::ThreadPool& pool, Map& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Map( rMap )
-            {}
-            Deleter( Deleter& src )
-                : CppUnitMini::TestThread( src )
-                , m_Map( src.m_Map )
-            {}
-
-            Map_InsDel_string&  getTest()
-            {
-                return reinterpret_cast<Map_InsDel_string&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                Map& rMap = m_Map;
-
-                m_nDeleteSuccess =
-                    m_nDeleteFailed = 0;
-
-                const std::vector<std::string>& arrString = *getTest().m_parrString;
-                size_t nArrSize = arrString.size();
-                size_t const nMapSize = getTest().c_nMapSize;
-                size_t const nPassCount = getTest().c_nThreadPassCount;
-
-                if ( m_nThreadNo & 1 ) {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( size_t nItem = 0; nItem < nMapSize; ++nItem ) {
-                            if ( rMap.erase( arrString[nItem % nArrSize] ) )
-                                ++m_nDeleteSuccess;
-                            else
-                                ++m_nDeleteFailed;
-                        }
-                    }
-                }
-                else {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( size_t nItem = nMapSize; nItem > 0; --nItem ) {
-                            if ( rMap.erase( arrString[nItem % nArrSize] ) )
-                                ++m_nDeleteSuccess;
-                            else
-                                ++m_nDeleteFailed;
-                        }
-                    }
-                }
-            }
-        };
-
-    protected:
-
-        template <class Map>
-        void do_test( Map& testMap )
-        {
-            typedef Inserter<Map>       InserterThread;
-            typedef Deleter<Map>        DeleterThread;
-            cds::OS::Timer    timer;
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new InserterThread( pool, testMap ), c_nInsertThreadCount );
-            pool.add( new DeleterThread( pool, testMap ), c_nDeleteThreadCount );
-            pool.run();
-            CPPUNIT_MSG( "   Duration=" << pool.avgDuration() );
-
-            size_t nInsertSuccess = 0;
-            size_t nInsertFailed = 0;
-            size_t nDeleteSuccess = 0;
-            size_t nDeleteFailed = 0;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                InserterThread * pThread = dynamic_cast<InserterThread *>( *it );
-                if ( pThread ) {
-                    nInsertSuccess += pThread->m_nInsertSuccess;
-                    nInsertFailed += pThread->m_nInsertFailed;
-                }
-                else {
-                    DeleterThread * p = static_cast<DeleterThread *>( *it );
-                    nDeleteSuccess += p->m_nDeleteSuccess;
-                    nDeleteFailed += p->m_nDeleteFailed;
-                }
-            }
-
-            CPPUNIT_MSG( "    Totals: Ins succ=" << nInsertSuccess
-                << " Del succ=" << nDeleteSuccess << "\n"
-                      << "          : Ins fail=" << nInsertFailed
-                << " Del fail=" << nDeleteFailed
-                << " Map size=" << testMap.size()
-                );
-
-            check_before_cleanup( testMap );
-
-            CPPUNIT_MSG( "  Clear map (single-threaded)..." );
-            timer.reset();
-            for ( size_t i = 0; i < m_parrString->size(); ++i )
-                testMap.erase( (*m_parrString)[i] );
-            CPPUNIT_MSG( "   Duration=" << timer.duration() );
-            CPPUNIT_CHECK( testMap.empty() );
-            CPPUNIT_CHECK_EX( testMap.size() == 0, "size() == " << testMap.size() );
-
-            additional_check( testMap );
-            print_stat( testMap );
-            additional_cleanup( testMap );
-        }
-
-        template <class Map>
-        void run_test()
-        {
-            m_parrString = &CppUnitMini::TestCase::getTestStrings();
-
-            CPPUNIT_MSG( "Thread count: insert=" << c_nInsertThreadCount
-                << " delete=" << c_nDeleteThreadCount
-                << " pass count=" << c_nThreadPassCount
-                << " map size=" << c_nMapSize
-                );
-
-            if ( Map::c_bLoadFactorDepended ) {
-                for ( c_nLoadFactor = 1; c_nLoadFactor <= c_nMaxLoadFactor; c_nLoadFactor *= 2 ) {
-                    CPPUNIT_MSG( "Load factor=" << c_nLoadFactor );
-                    Map  testMap( *this );
-                    do_test( testMap );
-                    if ( c_bPrintGCState )
-                        print_gc_state();
-                }
-            }
-            else {
-                Map testMap( *this );
-                do_test( testMap );
-                if ( c_bPrintGCState )
-                    print_gc_state();
-            }
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg );
-
-#   include "map2/map_defs.h"
-        CDSUNIT_DECLARE_MichaelMap
-        CDSUNIT_DECLARE_SplitList
-        CDSUNIT_DECLARE_SkipListMap
-        CDSUNIT_DECLARE_EllenBinTreeMap
-        CDSUNIT_DECLARE_BronsonAVLTreeMap
-        CDSUNIT_DECLARE_FeldmanHashMap_city
-        CDSUNIT_DECLARE_StripedMap
-        CDSUNIT_DECLARE_RefinableMap
-        CDSUNIT_DECLARE_CuckooMap
-        CDSUNIT_DECLARE_StdMap
-
-        CPPUNIT_TEST_SUITE(Map_InsDel_string)
-            CDSUNIT_TEST_MichaelMap
-            CDSUNIT_TEST_SplitList
-            CDSUNIT_TEST_SkipListMap
-            CDSUNIT_TEST_EllenBinTreeMap
-            CDSUNIT_TEST_BronsonAVLTreeMap
-            CDSUNIT_TEST_FeldmanHashMap_city
-            CDSUNIT_TEST_CuckooMap
-            CDSUNIT_TEST_StripedMap
-            CDSUNIT_TEST_RefinableMap
-            CDSUNIT_TEST_StdMap
-        CPPUNIT_TEST_SUITE_END();
-    };
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_string_bronsonavltree.cpp b/tests/unit/map2/map_insdel_string_bronsonavltree.cpp
deleted file mode 100644 (file)
index ed90eac..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_string.h"
-#include "map2/map_type_bronson_avltree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_BronsonAVLTreeMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_string_cuckoo.cpp b/tests/unit/map2/map_insdel_string_cuckoo.cpp
deleted file mode 100644 (file)
index 5e6d724..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_string.h"
-#include "map2/map_type_cuckoo.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_CuckooMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_string_ellentree.cpp b/tests/unit/map2/map_insdel_string_ellentree.cpp
deleted file mode 100644 (file)
index 956f44c..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_string.h"
-#include "map2/map_type_ellen_bintree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_EllenBinTreeMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_string_feldmanhashmap.cpp b/tests/unit/map2/map_insdel_string_feldmanhashmap.cpp
deleted file mode 100644 (file)
index 6b0cca4..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_string.h"
-#include "map2/map_type_feldman_hashmap.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_FeldmanHashMap_city
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_string_michael.cpp b/tests/unit/map2/map_insdel_string_michael.cpp
deleted file mode 100644 (file)
index 1f1e0c5..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_string.h"
-#include "map2/map_type_michael.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_MichaelMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_string_skip.cpp b/tests/unit/map2/map_insdel_string_skip.cpp
deleted file mode 100644 (file)
index 3f2affc..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_string.h"
-#include "map2/map_type_skip_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_SkipListMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_string_split.cpp b/tests/unit/map2/map_insdel_string_split.cpp
deleted file mode 100644 (file)
index d1ea077..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_string.h"
-#include "map2/map_type_split_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_SplitList
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_string_std.cpp b/tests/unit/map2/map_insdel_string_std.cpp
deleted file mode 100644 (file)
index 16f01dd..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_string.h"
-#include "map2/map_type_std.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_StdMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdel_string_striped.cpp b/tests/unit/map2/map_insdel_string_striped.cpp
deleted file mode 100644 (file)
index f58c2a8..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdel_string.h"
-#include "map2/map_type_striped.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDel_string::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_StripedMap
-    CDSUNIT_DECLARE_RefinableMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdelfind.cpp b/tests/unit/map2/map_insdelfind.cpp
deleted file mode 100644 (file)
index 031855f..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdelfind.h"
-#include <cds/os/topology.h>
-
-namespace map2 {
-    CPPUNIT_TEST_SUITE_REGISTRATION( Map_InsDelFind );
-
-    void Map_InsDelFind::setUpParams( const CppUnitMini::TestCfg& cfg )
-    {
-        c_nMapSize = cfg.getSizeT("InitialMapSize", c_nMapSize );
-        c_nThreadCount = cfg.getSizeT("ThreadCount", c_nThreadCount );
-        c_nMaxLoadFactor = cfg.getSizeT("MaxLoadFactor", c_nMaxLoadFactor );
-        c_nInsertPercentage = cfg.getUInt("InsertPercentage", c_nInsertPercentage );
-        c_nDeletePercentage = cfg.getUInt("DeletePercentage", c_nDeletePercentage );
-        c_nDuration = cfg.getUInt("Duration", c_nDuration );
-        c_bPrintGCState = cfg.getBool("PrintGCStateFlag", c_bPrintGCState );
-
-        c_nCuckooInitialSize = cfg.getSizeT("CuckooInitialSize", c_nCuckooInitialSize);
-        c_nCuckooProbesetSize = cfg.getSizeT("CuckooProbesetSize", c_nCuckooProbesetSize);
-        c_nCuckooProbesetThreshold = cfg.getSizeT("CuckooProbesetThreshold", c_nCuckooProbesetThreshold);
-
-        c_nFeldmanMap_HeadBits = cfg.getSizeT("FeldmanMapHeadBits", c_nFeldmanMap_HeadBits);
-        c_nFeldmanMap_ArrayBits = cfg.getSizeT("FeldmanMapArrayBits", c_nFeldmanMap_ArrayBits);
-
-        if ( c_nThreadCount == 0 )
-            c_nThreadCount = std::thread::hardware_concurrency() * 2;
-
-        CPPUNIT_ASSERT( c_nInsertPercentage + c_nDeletePercentage <= 100 );
-
-        actions * pFirst = m_arrShuffle;
-        actions * pLast = m_arrShuffle + c_nInsertPercentage;
-        std::fill( pFirst, pLast, do_insert );
-        pFirst = pLast;
-        pLast += c_nDeletePercentage;
-        std::fill( pFirst, pLast, do_delete );
-        pFirst = pLast;
-        pLast = m_arrShuffle + sizeof(m_arrShuffle)/sizeof(m_arrShuffle[0]);
-        std::fill( pFirst, pLast, do_find );
-        shuffle( m_arrShuffle, pLast );
-    }
-} // namespace map2
diff --git a/tests/unit/map2/map_insdelfind.h b/tests/unit/map2/map_insdelfind.h
deleted file mode 100644 (file)
index f6ac4b0..0000000
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_type.h"
-#include "cppunit/thread.h"
-#include <vector>
-
-namespace map2 {
-
-#define TEST_CASE(TAG, X)  void X();
-
-    class Map_InsDelFind: public CppUnitMini::TestCase
-    {
-    public:
-        size_t  c_nMapSize = 500000;          // initial map size
-        size_t  c_nThreadCount = 8;      // thread count
-        size_t  c_nMaxLoadFactor = 8;    // maximum load factor
-        unsigned int c_nInsertPercentage = 5;
-        unsigned int c_nDeletePercentage = 5;
-        unsigned int c_nDuration = 30;    // test duration, seconds
-        bool    c_bPrintGCState = true;
-
-        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 (o - use default)
-
-        size_t c_nFeldmanMap_HeadBits = 10;
-        size_t c_nFeldmanMap_ArrayBits = 4;
-
-        size_t  c_nLoadFactor = 2;  // current load factor
-
-    public:
-        enum actions
-        {
-            do_find,
-            do_insert,
-            do_delete
-        };
-        static const unsigned int c_nShuffleSize = 100;
-        actions m_arrShuffle[c_nShuffleSize];
-
-    protected:
-        typedef size_t  key_type;
-        typedef size_t  value_type;
-
-        template <class Map>
-        class WorkThread: public CppUnitMini::TestThread
-        {
-            Map&     m_Map;
-
-            virtual WorkThread *    clone()
-            {
-                return new WorkThread( *this );
-            }
-        public:
-            size_t  m_nInsertSuccess;
-            size_t  m_nInsertFailed;
-            size_t  m_nDeleteSuccess;
-            size_t  m_nDeleteFailed;
-            size_t  m_nFindSuccess;
-            size_t  m_nFindFailed;
-
-        public:
-            WorkThread( CppUnitMini::ThreadPool& pool, Map& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Map( rMap )
-            {}
-            WorkThread( WorkThread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Map( src.m_Map )
-            {}
-
-            Map_InsDelFind&  getTest()
-            {
-                return reinterpret_cast<Map_InsDelFind&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            typedef std::pair< key_type const, value_type > map_value_type;
-
-            struct update_functor {
-                template <typename Q>
-                void operator()( bool /*bNew*/, map_value_type& /*cur*/, Q const& /*val*/ )
-                {}
-
-                // FeldmanHashMap
-                void operator()( map_value_type& /*cur*/, map_value_type * /*old*/)
-                {}
-
-                // MichaelMap
-                void operator()( bool /*bNew*/, map_value_type& /*cur*/ )
-                {}
-
-                // BronsonAVLTreeMap
-                void operator()( bool /*bNew*/, key_type /*key*/, value_type& /*val*/ )
-                {}
-            };
-
-            virtual void test()
-            {
-                Map& rMap = m_Map;
-
-                m_nInsertSuccess =
-                    m_nInsertFailed =
-                    m_nDeleteSuccess =
-                    m_nDeleteFailed =
-                    m_nFindSuccess =
-                    m_nFindFailed = 0;
-
-                actions * pAct = getTest().m_arrShuffle;
-                unsigned int i = 0;
-                size_t const nNormalize = size_t(-1) / (getTest().c_nMapSize * 2);
-
-                size_t nRand = 0;
-                while ( !time_elapsed() ) {
-                    nRand = cds::bitop::RandXorShift(nRand);
-                    size_t n = nRand / nNormalize;
-                    switch ( pAct[i] ) {
-                    case do_find:
-                        if ( rMap.contains( n ))
-                            ++m_nFindSuccess;
-                        else
-                            ++m_nFindFailed;
-                        break;
-                    case do_insert:
-                        if ( n % 2 ) {
-                            if ( rMap.insert( n, n ))
-                                ++m_nInsertSuccess;
-                            else
-                                ++m_nInsertFailed;
-                        }
-                        else {
-                            if ( rMap.update(n, update_functor(), true ).first )
-                                ++m_nInsertSuccess;
-                            else
-                                ++m_nInsertFailed;
-                        }
-                        break;
-                    case do_delete:
-                        if ( rMap.erase( n ))
-                            ++m_nDeleteSuccess;
-                        else
-                            ++m_nDeleteFailed;
-                        break;
-                    }
-
-                    if ( ++i >= c_nShuffleSize )
-                        i = 0;
-                }
-            }
-        };
-
-    protected:
-        template <class Map>
-        void do_test( Map& testMap )
-        {
-            typedef WorkThread<Map> work_thread;
-            cds::OS::Timer    timer;
-
-            // fill map - only odd number
-            {
-                std::vector<size_t> arr;
-                arr.reserve( c_nMapSize );
-                for ( size_t i = 0; i < c_nMapSize; ++i )
-                    arr.push_back( i * 2 + 1);
-                shuffle( arr.begin(), arr.end() );
-                for ( size_t i = 0; i < c_nMapSize; ++i )
-                    testMap.insert( arr[i], arr[i] );
-            }
-            CPPUNIT_MSG( "   Insert " << c_nMapSize << " items time (single-threaded)=" << timer.duration() );
-
-            timer.reset();
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new work_thread( pool, testMap ), c_nThreadCount );
-            pool.run( c_nDuration );
-            //CPPUNIT_MSG( "   Duration=" << pool.avgDuration() );
-
-            size_t nInsertSuccess = 0;
-            size_t nInsertFailed = 0;
-            size_t nDeleteSuccess = 0;
-            size_t nDeleteFailed = 0;
-            size_t nFindSuccess = 0;
-            size_t nFindFailed = 0;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                work_thread * pThread = static_cast<work_thread *>( *it );
-                assert( pThread != nullptr );
-                nInsertSuccess += pThread->m_nInsertSuccess;
-                nInsertFailed += pThread->m_nInsertFailed;
-                nDeleteSuccess += pThread->m_nDeleteSuccess;
-                nDeleteFailed += pThread->m_nDeleteFailed;
-                nFindSuccess += pThread->m_nFindSuccess;
-                nFindFailed += pThread->m_nFindFailed;
-            }
-
-            size_t nTotalOps = nInsertSuccess + nInsertFailed + nDeleteSuccess + nDeleteFailed + nFindSuccess + nFindFailed;
-
-            CPPUNIT_MSG( "  Totals (success/failed): \n\t"
-                      << "      Insert=" << nInsertSuccess << '/' << nInsertFailed << "\n\t"
-                      << "      Delete=" << nDeleteSuccess << '/' << nDeleteFailed << "\n\t"
-                      << "        Find=" << nFindSuccess   << '/' << nFindFailed   << "\n\t"
-                      << "       Speed=" << (nFindSuccess + nFindFailed) / c_nDuration << " find/sec\n\t"
-                      << "             " << (nInsertSuccess + nDeleteSuccess) / c_nDuration << " modify/sec\n\t"
-                      << "   Total ops=" << nTotalOps << "\n\t"
-                      << "       speed=" << nTotalOps / c_nDuration << " ops/sec\n\t"
-                      << "      Map size=" << testMap.size()
-                );
-
-
-            check_before_cleanup( testMap );
-
-            CPPUNIT_MSG( "  Clear map (single-threaded)..." );
-            timer.reset();
-            testMap.clear();
-            CPPUNIT_MSG( "   Duration=" << timer.duration() );
-            CPPUNIT_CHECK_EX( testMap.empty(), "size=" << ((long long) testMap.size()) );
-
-            additional_check( testMap );
-            print_stat( testMap );
-            additional_cleanup( testMap );
-        }
-
-        template <class Map>
-        void run_test()
-        {
-            CPPUNIT_MSG( "Thread count=" << c_nThreadCount
-                << " initial map size=" << c_nMapSize
-                << " insert=" << c_nInsertPercentage << '%'
-                << " delete=" << c_nDeletePercentage << '%'
-                << " duration=" << c_nDuration << "s"
-                );
-
-            if ( Map::c_bLoadFactorDepended ) {
-                for ( c_nLoadFactor = 1; c_nLoadFactor <= c_nMaxLoadFactor; c_nLoadFactor *= 2 ) {
-                    CPPUNIT_MSG( "Load factor=" << c_nLoadFactor );
-                    Map  testMap( *this );
-                    do_test( testMap );
-                    if ( c_bPrintGCState )
-                        print_gc_state();
-                }
-            }
-            else {
-                Map testMap( *this );
-                do_test( testMap );
-                if ( c_bPrintGCState )
-                    print_gc_state();
-            }
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg );
-
-#   include "map2/map_defs.h"
-        CDSUNIT_DECLARE_MichaelMap
-        CDSUNIT_DECLARE_SplitList
-        CDSUNIT_DECLARE_SkipListMap
-        CDSUNIT_DECLARE_EllenBinTreeMap
-        CDSUNIT_DECLARE_BronsonAVLTreeMap
-        CDSUNIT_DECLARE_FeldmanHashMap_fixed
-        CDSUNIT_DECLARE_FeldmanHashMap_city
-        CDSUNIT_DECLARE_StripedMap
-        CDSUNIT_DECLARE_RefinableMap
-        CDSUNIT_DECLARE_CuckooMap
-        CDSUNIT_DECLARE_StdMap
-
-        CPPUNIT_TEST_SUITE(Map_InsDelFind)
-            CDSUNIT_TEST_MichaelMap
-            CDSUNIT_TEST_SplitList
-            CDSUNIT_TEST_SkipListMap
-            CDSUNIT_TEST_EllenBinTreeMap
-            CDSUNIT_TEST_BronsonAVLTreeMap
-            CDSUNIT_TEST_FeldmanHashMap_fixed
-            CDSUNIT_TEST_FeldmanHashMap_city
-            CDSUNIT_TEST_CuckooMap
-            CDSUNIT_TEST_StripedMap
-            CDSUNIT_TEST_RefinableMap
-            CDSUNIT_TEST_StdMap
-        CPPUNIT_TEST_SUITE_END();
-    };
-} // namespace map2
diff --git a/tests/unit/map2/map_insdelfind_bronsonavltree.cpp b/tests/unit/map2/map_insdelfind_bronsonavltree.cpp
deleted file mode 100644 (file)
index 2529f11..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdelfind.h"
-#include "map2/map_type_bronson_avltree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDelFind::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_BronsonAVLTreeMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdelfind_cuckoo.cpp b/tests/unit/map2/map_insdelfind_cuckoo.cpp
deleted file mode 100644 (file)
index d9ba1cb..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdelfind.h"
-#include "map2/map_type_cuckoo.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDelFind::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_CuckooMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdelfind_ellentree.cpp b/tests/unit/map2/map_insdelfind_ellentree.cpp
deleted file mode 100644 (file)
index 39c33f0..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdelfind.h"
-#include "map2/map_type_ellen_bintree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDelFind::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_EllenBinTreeMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdelfind_feldmanhashmap.cpp b/tests/unit/map2/map_insdelfind_feldmanhashmap.cpp
deleted file mode 100644 (file)
index 8d0ad78..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdelfind.h"
-#include "map2/map_type_feldman_hashmap.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDelFind::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_FeldmanHashMap_fixed
-    CDSUNIT_DECLARE_FeldmanHashMap_city
-} // namespace map2
diff --git a/tests/unit/map2/map_insdelfind_michael.cpp b/tests/unit/map2/map_insdelfind_michael.cpp
deleted file mode 100644 (file)
index b941322..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdelfind.h"
-#include "map2/map_type_michael.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDelFind::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_MichaelMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdelfind_skip.cpp b/tests/unit/map2/map_insdelfind_skip.cpp
deleted file mode 100644 (file)
index b32f968..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdelfind.h"
-#include "map2/map_type_skip_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDelFind::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_SkipListMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdelfind_split.cpp b/tests/unit/map2/map_insdelfind_split.cpp
deleted file mode 100644 (file)
index 4d1be29..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdelfind.h"
-#include "map2/map_type_split_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDelFind::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_SplitList
-} // namespace map2
diff --git a/tests/unit/map2/map_insdelfind_std.cpp b/tests/unit/map2/map_insdelfind_std.cpp
deleted file mode 100644 (file)
index 75ed281..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdelfind.h"
-#include "map2/map_type_std.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDelFind::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_StdMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insdelfind_striped.cpp b/tests/unit/map2/map_insdelfind_striped.cpp
deleted file mode 100644 (file)
index 648f1c1..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insdelfind.h"
-#include "map2/map_type_striped.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsDelFind::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_StripedMap
-    CDSUNIT_DECLARE_RefinableMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insfind_int.cpp b/tests/unit/map2/map_insfind_int.cpp
deleted file mode 100644 (file)
index 78fec9a..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insfind_int.h"
-
-namespace map2 {
-    CPPUNIT_TEST_SUITE_REGISTRATION( Map_InsFind_int );
-
-    void Map_InsFind_int::setUpParams( const CppUnitMini::TestCfg& cfg )
-    {
-        c_nThreadCount = cfg.getSizeT("ThreadCount", c_nThreadCount );
-        c_nMapSize = cfg.getSizeT("MapSize", c_nMapSize);
-        c_nMaxLoadFactor = cfg.getSizeT("MaxLoadFactor", c_nMaxLoadFactor);
-        c_bPrintGCState = cfg.getBool("PrintGCStateFlag", c_bPrintGCState );
-
-        c_nCuckooInitialSize = cfg.getSizeT("CuckooInitialSize", c_nCuckooInitialSize);
-        c_nCuckooProbesetSize = cfg.getSizeT("CuckooProbesetSize", c_nCuckooProbesetSize);
-        c_nCuckooProbesetThreshold = cfg.getSizeT("CuckooProbesetThreshold", c_nCuckooProbesetThreshold);
-
-        c_nFeldmanMap_HeadBits = cfg.getSizeT("FeldmanMapHeadBits", c_nFeldmanMap_HeadBits);
-        c_nFeldmanMap_ArrayBits = cfg.getSizeT("FeldmanMapArrayBits", c_nFeldmanMap_ArrayBits);
-
-        if ( c_nThreadCount == 0 )
-            c_nThreadCount = std::thread::hardware_concurrency();
-    }
-} // namespace map2
diff --git a/tests/unit/map2/map_insfind_int.h b/tests/unit/map2/map_insfind_int.h
deleted file mode 100644 (file)
index e40ec78..0000000
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_type.h"
-#include "cppunit/thread.h"
-
-#include <cds/os/topology.h>
-#include <vector>
-
-namespace map2 {
-
-#define TEST_CASE(TAG, X)  void X();
-
-    class Map_InsFind_int: public CppUnitMini::TestCase
-    {
-    public:
-        size_t c_nThreadCount = 8;     // thread count
-        size_t c_nMapSize = 5000;      // map size (count of searching item)
-        size_t c_nMaxLoadFactor = 8;   // maximum load factor
-        bool   c_bPrintGCState = true;
-
-        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 (o - use default)
-
-        size_t c_nFeldmanMap_HeadBits = 10;
-        size_t c_nFeldmanMap_ArrayBits = 4;
-
-        size_t  c_nLoadFactor = 2;  // current load factor
-
-    private:
-        typedef size_t  key_type;
-        typedef size_t  value_type;
-
-        template <typename Iterator, typename Map>
-        static bool check_result( Iterator const& it, Map const& map )
-        {
-            return it != map.end();
-        }
-        template <typename Map>
-        static bool check_result( bool b, Map const& )
-        {
-            return b;
-        }
-
-        template <class Map>
-        class Inserter: public CppUnitMini::TestThread
-        {
-            Map&     m_Map;
-            std::vector<size_t> m_arrVal;
-
-            virtual Inserter *    clone()
-            {
-                return new Inserter( *this );
-            }
-
-            void make_array()
-            {
-                size_t const nThreadCount = getTest().c_nThreadCount;
-                size_t const nSize = getTest().c_nMapSize / nThreadCount + 1;
-                m_arrVal.resize( nSize );
-                size_t nItem = m_nThreadNo;
-                for ( size_t i = 0; i < nSize; nItem += nThreadCount, ++i )
-                    m_arrVal[i] = nItem;
-                shuffle( m_arrVal.begin(), m_arrVal.end() );
-            }
-        public:
-            size_t  m_nInsertSuccess;
-            size_t  m_nInsertFailed;
-            size_t  m_nFindSuccess;
-            size_t  m_nFindFail;
-
-        public:
-            Inserter( CppUnitMini::ThreadPool& pool, Map& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Map( rMap )
-            {}
-            Inserter( Inserter& src )
-                : CppUnitMini::TestThread( src )
-                , m_Map( src.m_Map )
-            {}
-
-            Map_InsFind_int&  getTest()
-            {
-                return reinterpret_cast<Map_InsFind_int&>( m_Pool.m_Test );
-            }
-
-            virtual void init()
-            {
-                cds::threading::Manager::attachThread();
-                make_array();
-            }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                Map& rMap = m_Map;
-
-                m_nInsertSuccess =
-                    m_nInsertFailed =
-                    m_nFindSuccess =
-                    m_nFindFail = 0;
-
-                size_t const nArrSize = m_arrVal.size();
-                for ( size_t i = 0; i < nArrSize; ++i ) {
-                    size_t const nItem = m_arrVal[i];
-                    if ( check_result( rMap.insert( nItem, nItem * 8 ), rMap ))
-                        ++m_nInsertSuccess;
-                    else
-                        ++m_nInsertFailed;
-
-                    for ( size_t k = 0; k <= i; ++k ) {
-                        if ( check_result( rMap.contains( m_arrVal[k] ), rMap ))
-                            ++m_nFindSuccess;
-                        else
-                            ++m_nFindFail;
-                    }
-                }
-            }
-        };
-
-    protected:
-
-        template <class Map>
-        void do_test( Map& testMap )
-        {
-            typedef Inserter<Map>       InserterThread;
-            cds::OS::Timer    timer;
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new InserterThread( pool, testMap ), c_nThreadCount );
-            pool.run();
-            CPPUNIT_MSG( "   Duration=" << pool.avgDuration() );
-
-            size_t nInsertSuccess = 0;
-            size_t nInsertFailed = 0;
-            size_t nFindSuccess = 0;
-            size_t nFindFailed = 0;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                InserterThread * pThread = static_cast<InserterThread *>( *it );
-
-                nInsertSuccess += pThread->m_nInsertSuccess;
-                nInsertFailed += pThread->m_nInsertFailed;
-                nFindSuccess += pThread->m_nFindSuccess;
-                nFindFailed += pThread->m_nFindFail;
-            }
-
-            CPPUNIT_MSG( "    Totals: Ins succ=" << nInsertSuccess << " fail=" << nInsertFailed << "\n"
-                      << "           Find succ=" << nFindSuccess << " fail=" << nFindFailed
-            );
-
-            CPPUNIT_CHECK( nInsertFailed == 0 );
-            CPPUNIT_CHECK( nFindFailed == 0 );
-
-            check_before_cleanup( testMap );
-
-            testMap.clear();
-            additional_check( testMap );
-            print_stat( testMap );
-            additional_cleanup( testMap );
-        }
-
-        template <class Map>
-        void run_test()
-        {
-            static_assert( (!std::is_same< typename Map::item_counter, cds::atomicity::empty_item_counter >::value),
-                "Empty item counter is not suitable for this test");
-
-            CPPUNIT_MSG( "Thread count: " << c_nThreadCount
-                << " map size=" << c_nMapSize
-                );
-
-            if ( Map::c_bLoadFactorDepended ) {
-                for ( c_nLoadFactor = 1; c_nLoadFactor <= c_nMaxLoadFactor; c_nLoadFactor *= 2 ) {
-                    CPPUNIT_MSG( "Load factor=" << c_nLoadFactor );
-                    Map  testMap( *this );
-                    do_test( testMap );
-                    if ( c_bPrintGCState )
-                        print_gc_state();
-                }
-            }
-            else {
-                Map testMap( *this );
-                do_test( testMap );
-                if ( c_bPrintGCState )
-                    print_gc_state();
-            }
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg );
-
-#   include "map2/map_defs.h"
-        CDSUNIT_DECLARE_MichaelMap
-        CDSUNIT_DECLARE_MichaelMap_nogc
-        CDSUNIT_DECLARE_SplitList
-        CDSUNIT_DECLARE_SplitList_nogc
-        CDSUNIT_DECLARE_SkipListMap
-        CDSUNIT_DECLARE_SkipListMap_nogc
-        CDSUNIT_DECLARE_EllenBinTreeMap
-        CDSUNIT_DECLARE_BronsonAVLTreeMap
-        CDSUNIT_DECLARE_FeldmanHashMap_fixed
-        CDSUNIT_DECLARE_FeldmanHashMap_city
-        CDSUNIT_DECLARE_StripedMap
-        CDSUNIT_DECLARE_RefinableMap
-        CDSUNIT_DECLARE_CuckooMap
-        CDSUNIT_DECLARE_StdMap
-
-        CPPUNIT_TEST_SUITE(Map_InsFind_int)
-            CDSUNIT_TEST_MichaelMap
-            CDSUNIT_TEST_MichaelMap_nogc
-            CDSUNIT_TEST_SplitList
-            CDSUNIT_TEST_SplitList_nogc
-            CDSUNIT_TEST_SkipListMap
-            CDSUNIT_TEST_SkipListMap_nogc
-            CDSUNIT_TEST_EllenBinTreeMap
-            CDSUNIT_TEST_BronsonAVLTreeMap
-            CDSUNIT_TEST_FeldmanHashMap_fixed
-            CDSUNIT_TEST_FeldmanHashMap_city
-            CDSUNIT_TEST_CuckooMap
-            CDSUNIT_TEST_StripedMap
-            CDSUNIT_TEST_RefinableMap
-            CDSUNIT_TEST_StdMap
-        CPPUNIT_TEST_SUITE_END();
-    };
-} // namespace map2
diff --git a/tests/unit/map2/map_insfind_int_bronsonavltree.cpp b/tests/unit/map2/map_insfind_int_bronsonavltree.cpp
deleted file mode 100644 (file)
index 6c5e1d5..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insfind_int.h"
-#include "map2/map_type_bronson_avltree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsFind_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_BronsonAVLTreeMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insfind_int_cuckoo.cpp b/tests/unit/map2/map_insfind_int_cuckoo.cpp
deleted file mode 100644 (file)
index 0e02da4..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insfind_int.h"
-#include "map2/map_type_cuckoo.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsFind_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_CuckooMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insfind_int_ellentree.cpp b/tests/unit/map2/map_insfind_int_ellentree.cpp
deleted file mode 100644 (file)
index c99a76a..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insfind_int.h"
-#include "map2/map_type_ellen_bintree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsFind_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_EllenBinTreeMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insfind_int_feldmanhashmap.cpp b/tests/unit/map2/map_insfind_int_feldmanhashmap.cpp
deleted file mode 100644 (file)
index 52a0a7f..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insfind_int.h"
-#include "map2/map_type_feldman_hashmap.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsFind_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_FeldmanHashMap_fixed
-    CDSUNIT_DECLARE_FeldmanHashMap_city
-} // namespace map2
diff --git a/tests/unit/map2/map_insfind_int_michael.cpp b/tests/unit/map2/map_insfind_int_michael.cpp
deleted file mode 100644 (file)
index b6650bc..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insfind_int.h"
-#include "map2/map_type_michael.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsFind_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_MichaelMap
-    CDSUNIT_DECLARE_MichaelMap_nogc
-} // namespace map2
diff --git a/tests/unit/map2/map_insfind_int_skip.cpp b/tests/unit/map2/map_insfind_int_skip.cpp
deleted file mode 100644 (file)
index f0efa13..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insfind_int.h"
-#include "map2/map_type_skip_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsFind_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_SkipListMap
-    CDSUNIT_DECLARE_SkipListMap_nogc
-} // namespace map2
diff --git a/tests/unit/map2/map_insfind_int_split.cpp b/tests/unit/map2/map_insfind_int_split.cpp
deleted file mode 100644 (file)
index 3d5513e..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insfind_int.h"
-#include "map2/map_type_split_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsFind_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_SplitList
-    CDSUNIT_DECLARE_SplitList_nogc
-} // namespace map2
diff --git a/tests/unit/map2/map_insfind_int_std.cpp b/tests/unit/map2/map_insfind_int_std.cpp
deleted file mode 100644 (file)
index 4e7f9a5..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insfind_int.h"
-#include "map2/map_type_std.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsFind_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_StdMap
-} // namespace map2
diff --git a/tests/unit/map2/map_insfind_int_striped.cpp b/tests/unit/map2/map_insfind_int_striped.cpp
deleted file mode 100644 (file)
index 6351a81..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "map2/map_insfind_int.h"
-#include "map2/map_type_striped.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Map_InsFind_int::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
-#include "map2/map_defs.h"
-
-namespace map2 {
-    CDSUNIT_DECLARE_StripedMap
-    CDSUNIT_DECLARE_RefinableMap
-} // namespace map2
diff --git a/tests/unit/map2/map_type.h b/tests/unit/map2/map_type.h
deleted file mode 100644 (file)
index 51b5306..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_MAP_TYPE_H
-#define CDSUNIT_MAP_TYPE_H
-
-#include <cds/urcu/general_instant.h>
-#include <cds/urcu/general_buffered.h>
-#include <cds/urcu/general_threaded.h>
-#include <cds/urcu/signal_buffered.h>
-#include <cds/urcu/signal_threaded.h>
-
-#include <cds/sync/spinlock.h>
-#include <cds/opt/hash.h>
-#include <boost/functional/hash/hash.hpp>
-
-#include "cppunit/cppunit_mini.h"
-
-namespace map2 {
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-
-    typedef cds::urcu::gc< cds::urcu::general_instant<> >   rcu_gpi;
-    typedef cds::urcu::gc< cds::urcu::general_buffered<> >  rcu_gpb;
-    typedef cds::urcu::gc< cds::urcu::general_threaded<> >  rcu_gpt;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    typedef cds::urcu::gc< cds::urcu::signal_buffered<> >  rcu_shb;
-    typedef cds::urcu::gc< cds::urcu::signal_threaded<> >  rcu_sht;
-#endif
-
-    template <typename Key>
-    struct cmp {
-        int operator ()(Key const& k1, Key const& k2) const
-        {
-            if ( std::less<Key>( k1, k2 ) )
-                return -1;
-            return std::less<Key>( k2, k1 ) ? 1 : 0;
-        }
-    };
-
-#define CDSUNIT_INT_COMPARE(t)  template <> struct cmp<t> { int operator()( t k1, t k2 ){ return (int)(k1 - k2); } }
-    CDSUNIT_INT_COMPARE(char);
-    CDSUNIT_INT_COMPARE(unsigned char);
-    CDSUNIT_INT_COMPARE(int);
-    CDSUNIT_INT_COMPARE(unsigned int);
-    CDSUNIT_INT_COMPARE(long);
-    CDSUNIT_INT_COMPARE(unsigned long);
-    CDSUNIT_INT_COMPARE(long long);
-    CDSUNIT_INT_COMPARE(unsigned long long);
-#undef CDSUNIT_INT_COMPARE
-
-    template <>
-    struct cmp<std::string>
-    {
-        int operator()(std::string const& s1, std::string const& s2)
-        {
-            return s1.compare( s2 );
-        }
-        int operator()(std::string const& s1, char const * s2)
-        {
-            return s1.compare( s2 );
-        }
-        int operator()(char const * s1, std::string const& s2)
-        {
-            return -s2.compare( s1 );
-        }
-    };
-
-    // forward
-    template <typename ImplSelector, typename Key, typename Value>
-    struct map_type;
-
-    template <typename Key, typename Value>
-    struct map_type_base
-    {
-        typedef co::v::hash<Key>    key_hash;
-        typedef std::less<Key>      less;
-        typedef cmp<Key>            compare;
-
-        struct equal_to {
-            bool operator()( Key const& k1, Key const& k2 ) const
-            {
-                return compare()( k1, k2 ) == 0;
-            }
-        };
-
-        struct hash: public key_hash
-        {
-            size_t operator()( Key const& k ) const
-            {
-                return key_hash::operator()( k );
-            }
-            template <typename Q>
-            size_t operator()( Q const& k ) const
-            {
-                return key_hash::operator()( k );
-            }
-        };
-
-        struct hash2: public key_hash
-        {
-            size_t operator()( Key const& k ) const
-            {
-                size_t seed = ~key_hash::operator ()( k );
-                boost::hash_combine( seed, k );
-                return seed;
-            }
-            template <typename Q>
-            size_t operator()( Q const& k ) const
-            {
-                size_t seed = ~key_hash::operator()( k );
-                boost::hash_combine( seed, k );
-                return seed;
-            }
-        };
-    };
-
-    template <typename Map>
-    static inline void print_stat( Map const& /*m*/ )
-    {}
-
-    template <typename Map>
-    static inline void check_before_cleanup( Map& /*m*/ )
-    {}
-
-    template <typename Map>
-    static inline void additional_cleanup( Map& /*m*/ )
-    {}
-
-    template <typename Map>
-    static inline void additional_check( Map& /*m*/ )
-    {}
-
-}   // namespace map2
-
-#endif // ifndef CDSUNIT_MAP_TYPE_H
diff --git a/tests/unit/map2/map_type_bronson_avltree.h b/tests/unit/map2/map_type_bronson_avltree.h
deleted file mode 100644 (file)
index 867cb46..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_MAP_TYPE_BRONSON_AVLTREE_H
-#define CDSUNIT_MAP_TYPE_BRONSON_AVLTREE_H
-
-#include "map2/map_type.h"
-
-#include <cds/memory/vyukov_queue_pool.h>
-#include <cds/sync/pool_monitor.h>
-#include <cds/container/bronson_avltree_map_rcu.h>
-
-#include "print_bronsonavltree_stat.h"
-#include "print_sync_monitor_stat.h"
-
-namespace map2 {
-
-    template <class GC, typename Key, typename T, typename Traits = cc::bronson_avltree::traits >
-    class BronsonAVLTreeMap : public cc::BronsonAVLTreeMap< GC, Key, T, Traits >
-    {
-        typedef cc::BronsonAVLTreeMap< GC, Key, T, Traits > base_class;
-    public:
-        template <typename Config>
-        BronsonAVLTreeMap( Config const& /*cfg*/)
-            : base_class()
-        {}
-
-        // 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;
-
-    template <typename Key, typename Value>
-    struct map_type< tag_BronsonAVLTreeMap, Key, Value >: public map_type_base< Key, Value >
-    {
-        typedef map_type_base< Key, Value > base_class;
-        typedef typename base_class::compare    compare;
-        typedef typename base_class::less       less;
-
-        typedef cds::memory::vyukov_queue_pool< std::mutex > BronsonAVLTreeMap_simple_pool;
-        typedef cds::memory::lazy_vyukov_queue_pool< std::mutex > BronsonAVLTreeMap_lazy_pool;
-        typedef cds::memory::bounded_vyukov_queue_pool< std::mutex > BronsonAVLTreeMap_bounded_pool;
-
-        struct BronsonAVLTreeMap_less: public
-            cc::bronson_avltree::make_traits<
-                co::less< less >
-                ,cc::bronson_avltree::relaxed_insert< false >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_gpi_less;
-        typedef BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_gpb_less;
-        typedef BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_gpt_less;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_shb_less;
-        typedef BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_sht_less;
-#endif
-        struct BronsonAVLTreeMap_cmp_stat: public
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,cc::bronson_avltree::relaxed_insert< false >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::bronson_avltree::stat<>>
-            >::type
-        {};
-        typedef BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_gpi_cmp_stat;
-        typedef BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_gpb_cmp_stat;
-        typedef BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_gpt_cmp_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_shb_cmp_stat;
-        typedef BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_sht_cmp_stat;
-#endif
-
-        struct BronsonAVLTreeMap_less_pool_simple: public BronsonAVLTreeMap_less
-        {
-            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_simple_pool> sync_monitor;
-        };
-        typedef BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_gpi_less_pool_simple;
-        typedef BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_gpb_less_pool_simple;
-        typedef BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_gpt_less_pool_simple;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_shb_less_pool_simple;
-        typedef BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_sht_less_pool_simple;
-#endif
-        struct BronsonAVLTreeMap_less_pool_simple_stat : public BronsonAVLTreeMap_less
-        {
-            typedef cc::bronson_avltree::stat<> stat;
-            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_simple_pool, cds::opt::none, true > sync_monitor;
-        };
-        typedef BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_gpi_less_pool_simple_stat;
-        typedef BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_gpb_less_pool_simple_stat;
-        typedef BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_gpt_less_pool_simple_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_shb_less_pool_simple_stat;
-        typedef BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_sht_less_pool_simple_stat;
-#endif
-        struct BronsonAVLTreeMap_less_pool_lazy: public BronsonAVLTreeMap_less
-        {
-            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_lazy_pool> sync_monitor;
-            static CDS_CONSTEXPR bool const relaxed_insert = false; // relaxed insert can lead to test assert triggering
-        };
-        typedef BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_gpi_less_pool_lazy;
-        typedef BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_gpb_less_pool_lazy;
-        typedef BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_gpt_less_pool_lazy;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_shb_less_pool_lazy;
-        typedef BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_sht_less_pool_lazy;
-#endif
-        struct BronsonAVLTreeMap_less_pool_lazy_stat : public BronsonAVLTreeMap_less
-        {
-            typedef cc::bronson_avltree::stat<> stat;
-            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_lazy_pool, cds::opt::none, true > sync_monitor;
-            static CDS_CONSTEXPR bool const relaxed_insert = false; // relaxed insert can lead to test assert triggering
-        };
-        typedef BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_gpi_less_pool_lazy_stat;
-        typedef BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_gpb_less_pool_lazy_stat;
-        typedef BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_gpt_less_pool_lazy_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_shb_less_pool_lazy_stat;
-        typedef BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_sht_less_pool_lazy_stat;
-#endif
-        struct BronsonAVLTreeMap_less_pool_bounded: public BronsonAVLTreeMap_less
-        {
-            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_bounded_pool> sync_monitor;
-            static CDS_CONSTEXPR bool const relaxed_insert = false; // relaxed insert can lead to test assert triggering
-        };
-        typedef BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_gpi_less_pool_bounded;
-        typedef BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_gpb_less_pool_bounded;
-        typedef BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_gpt_less_pool_bounded;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_shb_less_pool_bounded;
-        typedef BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_sht_less_pool_bounded;
-#endif
-        struct BronsonAVLTreeMap_less_pool_bounded_stat : public BronsonAVLTreeMap_less
-        {
-            typedef cc::bronson_avltree::stat<> stat;
-            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_bounded_pool, cds::opt::none, true > sync_monitor;
-            static CDS_CONSTEXPR bool const relaxed_insert = false; // relaxed insert can lead to test assert triggering
-        };
-        typedef BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_gpi_less_pool_bounded_stat;
-        typedef BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_gpb_less_pool_bounded_stat;
-        typedef BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_gpt_less_pool_bounded_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_shb_less_pool_bounded_stat;
-        typedef BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_sht_less_pool_bounded_stat;
-#endif
-    };
-
-    template <typename GC, typename Key, typename T, typename Traits>
-    static inline void print_stat( BronsonAVLTreeMap<GC, Key, T, Traits> const& m )
-    {
-        CPPUNIT_MSG( m.statistics() );
-        CPPUNIT_MSG( m.monitor().statistics() );
-    }
-
-    template <typename GC, typename Key, typename T, typename Traits>
-    static inline void check_before_cleanup( BronsonAVLTreeMap<GC, Key, T, Traits>& m )
-    {
-        CPPUNIT_MSG( "  Check internal consistency (single-threaded)..." );
-        bool bOk = m.check_consistency([]( size_t nLevel, size_t hLeft, size_t hRight )
-            {
-                CPPUNIT_MSG( "Tree violation on level=" << nLevel << ": hLeft=" << hLeft << ", hRight=" << hRight )
-            });
-        CPPUNIT_CHECK_CURRENT_EX( bOk, "check_consistency failed");
-    }
-
-}   // namespace map2
-
-#endif // ifndef CDSUNIT_MAP_TYPE_BRONSON_AVLTREE_H
diff --git a/tests/unit/map2/map_type_cuckoo.h b/tests/unit/map2/map_type_cuckoo.h
deleted file mode 100644 (file)
index ece659d..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_MAP_TYPE_CUCKOO_H
-#define CDSUNIT_MAP_TYPE_CUCKOO_H
-
-#include "map2/map_type.h"
-#include <cds/container/cuckoo_map.h>
-#include "print_cuckoo_stat.h"
-
-namespace map2 {
-
-    template <typename K, typename V, typename Traits>
-    class CuckooMap: public cc::CuckooMap< K, V, Traits >
-    {
-    public:
-        typedef cc::CuckooMap< K, V, Traits > base_class;
-
-    public:
-        template <typename Config>
-        CuckooMap( Config const& cfg )
-            : base_class(
-
-                cfg.c_nCuckooInitialSize,
-                static_cast<unsigned int>( cfg.c_nCuckooProbesetSize ),
-                static_cast<unsigned int>( cfg.c_nCuckooProbesetThreshold )
-            )
-        {}
-
-        template <typename Q, typename Pred>
-        bool erase_with( Q const& key, Pred /*pred*/ )
-        {
-            return base_class::erase_with( key, typename std::conditional< base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
-        }
-
-        // 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;
-
-    template <typename Key, typename Value>
-    struct map_type< tag_CuckooMap, Key, Value >: public map_type_base< Key, Value >
-    {
-        typedef map_type_base< Key, Value > base_class;
-        typedef typename base_class::compare    compare;
-        typedef typename base_class::less       less;
-        typedef typename base_class::equal_to   equal_to;
-        typedef typename base_class::key_hash   key_hash;
-        typedef typename base_class::hash       hash;
-        typedef typename base_class::hash2      hash2;
-
-        template <typename Traits>
-        struct traits_CuckooStripedMap: public Traits
-        {
-            typedef cc::cuckoo::striping<> mutex_policy;
-        };
-        template <typename Traits>
-        struct traits_CuckooRefinableMap : public Traits
-        {
-            typedef cc::cuckoo::refinable<> mutex_policy;
-        };
-
-        struct traits_CuckooMap_list_unord :
-            public cc::cuckoo::make_traits <
-                cc::cuckoo::probeset_type< cc::cuckoo::list >
-                , co::equal_to< equal_to >
-                , co::hash< std::tuple< hash, hash2 > >
-            > ::type
-        {};
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_unord>> CuckooStripedMap_list_unord;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_unord>> CuckooRefinableMap_list_unord;
-
-        struct traits_CuckooMap_list_unord_stat : public traits_CuckooMap_list_unord
-        {
-            typedef cc::cuckoo::stat stat;
-        };
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_unord_stat>> CuckooStripedMap_list_unord_stat;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_unord_stat>> CuckooRefinableMap_list_unord_stat;
-
-        struct traits_CuckooMap_list_unord_storehash : public traits_CuckooMap_list_unord
-        {
-            static CDS_CONSTEXPR const bool store_hash = true;
-        };
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_unord_storehash>> CuckooStripedMap_list_unord_storehash;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_unord_storehash>> CuckooRefinableMap_list_unord_storehash;
-
-        struct traits_CuckooMap_list_ord :
-            public cc::cuckoo::make_traits <
-                cc::cuckoo::probeset_type< cc::cuckoo::list >
-                , co::compare< compare >
-                , co::hash< std::tuple< hash, hash2 > >
-            >::type
-        {};
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_ord>> CuckooStripedMap_list_ord;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_ord>> CuckooRefinableMap_list_ord;
-
-        struct traits_CuckooMap_list_ord_stat : public traits_CuckooMap_list_ord
-        {
-            typedef cc::cuckoo::stat stat;
-        };
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_ord_stat>> CuckooStripedMap_list_ord_stat;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_ord_stat>> CuckooRefinableMap_list_ord_stat;
-
-        struct traits_CuckooMap_list_ord_storehash : public traits_CuckooMap_list_ord
-        {
-            static CDS_CONSTEXPR const bool store_hash = true;
-        };
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_ord_storehash>> CuckooStripedMap_list_ord_storehash;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_ord_storehash>> CuckooRefinableMap_list_ord_storehash;
-
-        struct traits_CuckooMap_vector_unord :
-            public cc::cuckoo::make_traits <
-                cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                , co::equal_to< equal_to >
-                , co::hash< std::tuple< hash, hash2 > >
-            >::type
-        {};
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_unord>> CuckooStripedMap_vector_unord;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_unord>> CuckooRefinableMap_vector_unord;
-
-        struct traits_CuckooMap_vector_unord_stat : public traits_CuckooMap_vector_unord
-        {
-            typedef cc::cuckoo::stat stat;
-        };
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_unord_stat>> CuckooStripedMap_vector_unord_stat;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_unord_stat>> CuckooRefinableMap_vector_unord_stat;
-
-        struct traits_CuckooMap_vector_unord_storehash : public traits_CuckooMap_vector_unord
-        {
-            static CDS_CONSTEXPR const bool store_hash = true;
-        };
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_unord_storehash>> CuckooStripedMap_vector_unord_storehash;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_unord_storehash>> CuckooRefinableMap_vector_unord_storehash;
-
-        struct traits_CuckooMap_vector_ord :
-            public cc::cuckoo::make_traits <
-                cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                , co::compare< compare >
-                , co::hash< std::tuple< hash, hash2 > >
-            >::type
-        {};
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_ord>> CuckooStripedMap_vector_ord;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_ord>> CuckooRefinableMap_vector_ord;
-
-        struct traits_CuckooMap_vector_ord_stat : public traits_CuckooMap_vector_ord
-        {
-            typedef cc::cuckoo::stat stat;
-        };
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_ord_stat>> CuckooStripedMap_vector_ord_stat;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_ord_stat>> CuckooRefinableMap_vector_ord_stat;
-
-        struct traits_CuckooMap_vector_ord_storehash : public traits_CuckooMap_vector_ord
-        {
-            static CDS_CONSTEXPR const bool store_hash = true;
-        };
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_ord_storehash>> CuckooStripedMap_vector_ord_storehash;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_ord_storehash>> CuckooRefinableMap_vector_ord_storehash;
-
-    };
-
-    template <typename K, typename T, typename Traits >
-    static inline void print_stat( cc::CuckooMap< K, T, Traits > const& m )
-    {
-        CPPUNIT_MSG( m.statistics() << m.mutex_policy_statistics() );
-    }
-
-    template <typename K, typename V, typename Traits>
-    static inline void print_stat( CuckooMap< K, V, Traits > const& m )
-    {
-        typedef CuckooMap< K, V, Traits > map_type;
-        print_stat( static_cast<typename map_type::base_class const&>(m) );
-    }
-
-}   // namespace map2
-
-#endif // ifndef CDSUNIT_MAP_TYPE_CUCKOO_H
diff --git a/tests/unit/map2/map_type_ellen_bintree.h b/tests/unit/map2/map_type_ellen_bintree.h
deleted file mode 100644 (file)
index b061124..0000000
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_MAP_TYPE_ELLEN_BINTREE_H
-#define CDSUNIT_MAP_TYPE_ELLEN_BINTREE_H
-
-#include "map2/map_type.h"
-
-#include <cds/container/ellen_bintree_map_rcu.h>
-#include <cds/container/ellen_bintree_map_hp.h>
-#include <cds/container/ellen_bintree_map_dhp.h>
-
-#include "ellen_bintree_update_desc_pool.h"
-#include "print_ellenbintree_stat.h"
-
-namespace map2 {
-
-    template <class GC, typename Key, typename T, typename Traits = cc::ellen_bintree::traits >
-    class EllenBinTreeMap : public cc::EllenBinTreeMap< GC, Key, T, Traits >
-    {
-        typedef cc::EllenBinTreeMap< GC, Key, T, Traits > base_class;
-    public:
-        template <typename Config>
-        EllenBinTreeMap( Config const& /*cfg*/)
-            : base_class()
-        {}
-
-        // 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;
-
-    template <typename Key, typename Value>
-    struct map_type< tag_EllenBinTreeMap, Key, Value >: public map_type_base< Key, Value >
-    {
-        typedef map_type_base< Key, Value > base_class;
-        typedef typename base_class::compare    compare;
-        typedef typename base_class::less       less;
-
-        struct ellen_bintree_props {
-            struct hp_gc {
-                typedef cc::ellen_bintree::map_node<cds::gc::HP, Key, Value>        leaf_node;
-                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
-                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
-            };
-            struct dhp_gc {
-                typedef cc::ellen_bintree::map_node<cds::gc::DHP, Key, Value>       leaf_node;
-                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
-                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
-            };
-            struct gpi {
-                typedef cc::ellen_bintree::map_node<rcu_gpi, Key, Value>            leaf_node;
-                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
-                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
-            };
-            struct gpb {
-                typedef cc::ellen_bintree::map_node<rcu_gpb, Key, Value>            leaf_node;
-                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
-                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
-            };
-            struct gpt {
-                typedef cc::ellen_bintree::map_node<rcu_gpt, Key, Value>            leaf_node;
-                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
-                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
-            };
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-            struct shb {
-                typedef cc::ellen_bintree::map_node<rcu_shb, Key, Value>            leaf_node;
-                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
-                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
-            };
-            struct sht {
-                typedef cc::ellen_bintree::map_node<rcu_sht, Key, Value>            leaf_node;
-                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
-                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
-            };
-#endif
-        };
-
-        struct traits_EllenBinTreeMap: public cc::ellen_bintree::make_set_traits<
-                co::less< less >
-                ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        struct traits_EllenBinTreeMap_hp : traits_EllenBinTreeMap {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_hp >EllenBinTreeMap_hp;
-
-        struct traits_EllenBinTreeMap_dhp : traits_EllenBinTreeMap {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeMap< cds::gc::DHP, Key, Value, traits_EllenBinTreeMap_dhp >EllenBinTreeMap_dhp;
-
-        struct traits_EllenBinTreeMap_gpi : traits_EllenBinTreeMap {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeMap< rcu_gpi, Key, Value, traits_EllenBinTreeMap_gpi >EllenBinTreeMap_rcu_gpi;
-
-        struct traits_EllenBinTreeMap_gpb : traits_EllenBinTreeMap {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_gpb >EllenBinTreeMap_rcu_gpb;
-
-        struct traits_EllenBinTreeMap_gpt : traits_EllenBinTreeMap {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeMap< rcu_gpt, Key, Value, traits_EllenBinTreeMap_gpt >EllenBinTreeMap_rcu_gpt;
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits_EllenBinTreeMap_shb : traits_EllenBinTreeMap {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeMap< rcu_shb, Key, Value, traits_EllenBinTreeMap_shb >EllenBinTreeMap_rcu_shb;
-
-        struct traits_EllenBinTreeMap_sht : traits_EllenBinTreeMap {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeMap< rcu_sht, Key, Value, traits_EllenBinTreeMap_sht >EllenBinTreeMap_rcu_sht;
-#endif
-
-        struct traits_EllenBinTreeMap_yield : public traits_EllenBinTreeMap
-        {
-            typedef cds::backoff::yield back_off;
-        };
-        struct traits_EllenBinTreeMap_hp_yield : traits_EllenBinTreeMap_yield {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_hp_yield >EllenBinTreeMap_hp_yield;
-
-        struct traits_EllenBinTreeMap_dhp_yield : traits_EllenBinTreeMap_yield {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeMap< cds::gc::DHP, Key, Value, traits_EllenBinTreeMap_dhp_yield >EllenBinTreeMap_dhp_yield;
-
-        struct traits_EllenBinTreeMap_gpb_yield : traits_EllenBinTreeMap_yield {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_gpb_yield >EllenBinTreeMap_rcu_gpb_yield;
-
-
-        struct traits_EllenBinTreeMap_stat: public cc::ellen_bintree::make_set_traits<
-                co::less< less >
-                ,cc::ellen_bintree::update_desc_allocator<
-                    cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
-                >
-                ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-
-        struct traits_EllenBinTreeMap_stat_hp : public traits_EllenBinTreeMap_stat
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_stat_hp > EllenBinTreeMap_hp_stat;
-
-        struct traits_EllenBinTreeMap_stat_dhp : public traits_EllenBinTreeMap_stat
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_stat_dhp > EllenBinTreeMap_dhp_stat;
-
-        struct traits_EllenBinTreeMap_stat_gpi : public traits_EllenBinTreeMap_stat
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeMap< rcu_gpi, Key, Value, traits_EllenBinTreeMap_stat_gpi > EllenBinTreeMap_rcu_gpi_stat;
-
-        struct traits_EllenBinTreeMap_stat_gpb : public traits_EllenBinTreeMap_stat
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_stat_gpb > EllenBinTreeMap_rcu_gpb_stat;
-
-        struct traits_EllenBinTreeMap_stat_gpt : public traits_EllenBinTreeMap_stat
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeMap< rcu_gpt, Key, Value, traits_EllenBinTreeMap_stat_gpt > EllenBinTreeMap_rcu_gpt_stat;
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits_EllenBinTreeMap_stat_shb : public traits_EllenBinTreeMap_stat
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeMap< rcu_shb, Key, Value, traits_EllenBinTreeMap_stat_shb > EllenBinTreeMap_rcu_shb_stat;
-
-        struct traits_EllenBinTreeMap_stat_sht : public traits_EllenBinTreeMap_stat
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeMap< rcu_sht, Key, Value, traits_EllenBinTreeMap_stat_sht > EllenBinTreeMap_rcu_sht_stat;
-#endif
-    };
-
-    template <typename GC, typename Key, typename T, typename Traits>
-    static inline void print_stat( EllenBinTreeMap<GC, Key, T, Traits> const& s )
-    {
-        CPPUNIT_MSG( s.statistics() );
-    }
-    template <typename GC, typename Key, typename T, typename Traits>
-    static inline void additional_cleanup( EllenBinTreeMap<GC, Key, T, Traits>& /*s*/ )
-    {
-        ellen_bintree_pool::internal_node_counter::reset();
-    }
-    namespace ellen_bintree_check {
-        static inline void check_stat( cds::intrusive::ellen_bintree::empty_stat const& /*s*/ )
-        {
-            // This check is not valid for thread-based RCU
-            /*
-            CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get(),
-                "m_nAlloc=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
-                << ", m_nFree=" << ellen_bintree_pool::internal_node_counter::m_nFree.get()
-                );
-            */
-        }
-
-        static inline void check_stat( cds::intrusive::ellen_bintree::stat<> const& stat )
-        {
-            CPPUNIT_CHECK_CURRENT_EX( stat.m_nInternalNodeCreated == stat.m_nInternalNodeDeleted,
-                "m_nInternalNodeCreated=" << stat.m_nInternalNodeCreated
-                << " m_nInternalNodeDeleted=" << stat.m_nInternalNodeDeleted );
-            CPPUNIT_CHECK_CURRENT_EX( stat.m_nUpdateDescCreated == stat.m_nUpdateDescDeleted,
-                "m_nUpdateDescCreated=" << stat.m_nUpdateDescCreated
-                << " m_nUpdateDescDeleted=" << stat.m_nUpdateDescDeleted );
-            CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == stat.m_nInternalNodeCreated,
-                "allocated=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
-                << "m_nInternalNodeCreated=" << stat.m_nInternalNodeCreated );
-        }
-    }   // namespace ellen_bintree_check
-    template <typename GC, typename Key, typename T, typename Traits>
-    static inline void additional_check( EllenBinTreeMap<GC, Key, T, Traits>& s )
-    {
-        GC::force_dispose();
-        ellen_bintree_check::check_stat( s.statistics() );
-    }
-
-    template <typename GC, typename Key, typename T, typename Traits>
-    static inline void check_before_cleanup( EllenBinTreeMap<GC, Key, T, Traits>& m )
-    {
-        CPPUNIT_MSG( "  Check internal consistency (single-threaded)..." );
-        CPPUNIT_CHECK_CURRENT( m.check_consistency() );
-    }
-}   // namespace map2
-
-#endif // ifndef CDSUNIT_MAP_TYPE_ELLEN_BINTREE_H
diff --git a/tests/unit/map2/map_type_feldman_hashmap.h b/tests/unit/map2/map_type_feldman_hashmap.h
deleted file mode 100644 (file)
index 7d5a820..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_MAP_TYPE_FELDMAN_HASHMAP_H
-#define CDSUNIT_MAP_TYPE_FELDMAN_HASHMAP_H
-
-#include "map2/map_type.h"
-
-#include <cds/container/feldman_hashmap_hp.h>
-#include <cds/container/feldman_hashmap_dhp.h>
-#include <cds/container/feldman_hashmap_rcu.h>
-
-#include "print_feldman_hashset_stat.h"
-#include "hashing/hash_func.h"
-
-namespace map2 {
-
-    template <class GC, typename Key, typename T, typename Traits = cc::feldman_hashmap::traits>
-    class FeldmanHashMap : public cc::FeldmanHashMap< GC, Key, T, Traits >
-    {
-        typedef cc::FeldmanHashMap< GC, Key, T, Traits > base_class;
-    public:
-        template <typename Config>
-        FeldmanHashMap( Config const& cfg)
-            : base_class( cfg.c_nFeldmanMap_HeadBits, cfg.c_nFeldmanMap_ArrayBits )
-        {}
-
-        // 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_FeldmanHashMap;
-
-    template <typename Key, typename Value>
-    struct map_type< tag_FeldmanHashMap, Key, Value >: public map_type_base< Key, Value >
-    {
-        typedef map_type_base< Key, Value > base_class;
-        typedef typename base_class::compare    compare;
-        typedef typename base_class::less       less;
-
-        struct traits_FeldmanHashMap_stdhash : public cc::feldman_hashmap::traits
-        {
-            typedef std::hash< Key > hash;
-        };
-
-        typedef FeldmanHashMap< cds::gc::HP,  Key, Value, traits_FeldmanHashMap_stdhash >    FeldmanHashMap_hp_stdhash;
-        typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_stdhash >    FeldmanHashMap_dhp_stdhash;
-        typedef FeldmanHashMap< rcu_gpi, Key, Value, traits_FeldmanHashMap_stdhash >    FeldmanHashMap_rcu_gpi_stdhash;
-        typedef FeldmanHashMap< rcu_gpb, Key, Value, traits_FeldmanHashMap_stdhash >    FeldmanHashMap_rcu_gpb_stdhash;
-        typedef FeldmanHashMap< rcu_gpt, Key, Value, traits_FeldmanHashMap_stdhash >    FeldmanHashMap_rcu_gpt_stdhash;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_stdhash >    FeldmanHashMap_rcu_shb_stdhash;
-        typedef FeldmanHashMap< rcu_sht, Key, Value, traits_FeldmanHashMap_stdhash >    FeldmanHashMap_rcu_sht_stdhash;
-#endif
-
-        struct traits_FeldmanHashMap_stdhash_stat: traits_FeldmanHashMap_stdhash
-        {
-            typedef cc::feldman_hashmap::stat<> stat;
-        };
-
-        typedef FeldmanHashMap< cds::gc::HP,  Key, Value, traits_FeldmanHashMap_stdhash_stat >    FeldmanHashMap_hp_stdhash_stat;
-        typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_stdhash_stat >    FeldmanHashMap_dhp_stdhash_stat;
-        typedef FeldmanHashMap< rcu_gpi, Key, Value, traits_FeldmanHashMap_stdhash_stat >    FeldmanHashMap_rcu_gpi_stdhash_stat;
-        typedef FeldmanHashMap< rcu_gpb, Key, Value, traits_FeldmanHashMap_stdhash_stat >    FeldmanHashMap_rcu_gpb_stdhash_stat;
-        typedef FeldmanHashMap< rcu_gpt, Key, Value, traits_FeldmanHashMap_stdhash_stat >    FeldmanHashMap_rcu_gpt_stdhash_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_stdhash_stat >    FeldmanHashMap_rcu_shb_stdhash_stat;
-        typedef FeldmanHashMap< rcu_sht, Key, Value, traits_FeldmanHashMap_stdhash_stat >    FeldmanHashMap_rcu_sht_stdhash_stat;
-#endif
-
-        // CityHash
-#if CDS_BUILD_BITS == 64
-        struct traits_FeldmanHashMap_city64 : public cc::feldman_hashmap::traits
-        {
-            typedef ::hashing::city64 hash;
-            typedef ::hashing::city64::less less;
-        };
-        typedef FeldmanHashMap< cds::gc::HP,  Key, Value, traits_FeldmanHashMap_city64 >    FeldmanHashMap_hp_city64;
-        typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_city64 >    FeldmanHashMap_dhp_city64;
-        typedef FeldmanHashMap< rcu_gpi, Key, Value, traits_FeldmanHashMap_city64 >    FeldmanHashMap_rcu_gpi_city64;
-        typedef FeldmanHashMap< rcu_gpb, Key, Value, traits_FeldmanHashMap_city64 >    FeldmanHashMap_rcu_gpb_city64;
-        typedef FeldmanHashMap< rcu_gpt, Key, Value, traits_FeldmanHashMap_city64 >    FeldmanHashMap_rcu_gpt_city64;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_city64 >    FeldmanHashMap_rcu_shb_city64;
-        typedef FeldmanHashMap< rcu_sht, Key, Value, traits_FeldmanHashMap_city64 >    FeldmanHashMap_rcu_sht_city64;
-#endif
-
-        struct traits_FeldmanHashMap_city64_stat : public traits_FeldmanHashMap_city64
-        {
-            typedef cc::feldman_hashmap::stat<> stat;
-        };
-        typedef FeldmanHashMap< cds::gc::HP,  Key, Value, traits_FeldmanHashMap_city64_stat >    FeldmanHashMap_hp_city64_stat;
-        typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_city64_stat >    FeldmanHashMap_dhp_city64_stat;
-        typedef FeldmanHashMap< rcu_gpi, Key, Value, traits_FeldmanHashMap_city64_stat >    FeldmanHashMap_rcu_gpi_city64_stat;
-        typedef FeldmanHashMap< rcu_gpb, Key, Value, traits_FeldmanHashMap_city64_stat >    FeldmanHashMap_rcu_gpb_city64_stat;
-        typedef FeldmanHashMap< rcu_gpt, Key, Value, traits_FeldmanHashMap_city64_stat >    FeldmanHashMap_rcu_gpt_city64_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_city64_stat >    FeldmanHashMap_rcu_shb_city64_stat;
-        typedef FeldmanHashMap< rcu_sht, Key, Value, traits_FeldmanHashMap_city64_stat >    FeldmanHashMap_rcu_sht_city64_stat;
-#endif
-
-        struct traits_FeldmanHashMap_city128 : public cc::feldman_hashmap::traits
-        {
-            typedef ::hashing::city128 hash;
-            typedef ::hashing::city128::less less;
-        };
-        typedef FeldmanHashMap< cds::gc::HP,  Key, Value, traits_FeldmanHashMap_city128 >    FeldmanHashMap_hp_city128;
-        typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_city128 >    FeldmanHashMap_dhp_city128;
-        typedef FeldmanHashMap< rcu_gpi, Key, Value, traits_FeldmanHashMap_city128 >    FeldmanHashMap_rcu_gpi_city128;
-        typedef FeldmanHashMap< rcu_gpb, Key, Value, traits_FeldmanHashMap_city128 >    FeldmanHashMap_rcu_gpb_city128;
-        typedef FeldmanHashMap< rcu_gpt, Key, Value, traits_FeldmanHashMap_city128 >    FeldmanHashMap_rcu_gpt_city128;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_city128 >    FeldmanHashMap_rcu_shb_city128;
-        typedef FeldmanHashMap< rcu_sht, Key, Value, traits_FeldmanHashMap_city128 >    FeldmanHashMap_rcu_sht_city128;
-#endif
-
-        struct traits_FeldmanHashMap_city128_stat : public traits_FeldmanHashMap_city128
-        {
-            typedef cc::feldman_hashmap::stat<> stat;
-        };
-        typedef FeldmanHashMap< cds::gc::HP,  Key, Value, traits_FeldmanHashMap_city128_stat >    FeldmanHashMap_hp_city128_stat;
-        typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_city128_stat >    FeldmanHashMap_dhp_city128_stat;
-        typedef FeldmanHashMap< rcu_gpi, Key, Value, traits_FeldmanHashMap_city128_stat >    FeldmanHashMap_rcu_gpi_city128_stat;
-        typedef FeldmanHashMap< rcu_gpb, Key, Value, traits_FeldmanHashMap_city128_stat >    FeldmanHashMap_rcu_gpb_city128_stat;
-        typedef FeldmanHashMap< rcu_gpt, Key, Value, traits_FeldmanHashMap_city128_stat >    FeldmanHashMap_rcu_gpt_city128_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_city128_stat >    FeldmanHashMap_rcu_shb_city128_stat;
-        typedef FeldmanHashMap< rcu_sht, Key, Value, traits_FeldmanHashMap_city128_stat >    FeldmanHashMap_rcu_sht_city128_stat;
-#endif
-#endif // CDS_BUILD_BITS == 64
-
-
-        // for fixed-sized keys - no hash functor required
-        typedef FeldmanHashMap< cds::gc::HP, Key, Value >    FeldmanHashMap_hp_fixed;
-        typedef FeldmanHashMap< cds::gc::DHP, Key, Value >   FeldmanHashMap_dhp_fixed;
-        typedef FeldmanHashMap< rcu_gpi, Key, Value >    FeldmanHashMap_rcu_gpi_fixed;
-        typedef FeldmanHashMap< rcu_gpb, Key, Value >    FeldmanHashMap_rcu_gpb_fixed;
-        typedef FeldmanHashMap< rcu_gpt, Key, Value >    FeldmanHashMap_rcu_gpt_fixed;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef FeldmanHashMap< rcu_shb, Key, Value >    FeldmanHashMap_rcu_shb_fixed;
-        typedef FeldmanHashMap< rcu_sht, Key, Value >    FeldmanHashMap_rcu_sht_fixed;
-#endif
-
-        struct traits_FeldmanHashMap_stat : public cc::feldman_hashmap::traits
-        {
-            typedef cc::feldman_hashmap::stat<> stat;
-        };
-        typedef FeldmanHashMap< cds::gc::HP, Key, Value, traits_FeldmanHashMap_stat >    FeldmanHashMap_hp_fixed_stat;
-        typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_stat >   FeldmanHashMap_dhp_fixed_stat;
-        typedef FeldmanHashMap< rcu_gpi, Key, Value, traits_FeldmanHashMap_stat >    FeldmanHashMap_rcu_gpi_fixed_stat;
-        typedef FeldmanHashMap< rcu_gpb, Key, Value, traits_FeldmanHashMap_stat >    FeldmanHashMap_rcu_gpb_fixed_stat;
-        typedef FeldmanHashMap< rcu_gpt, Key, Value, traits_FeldmanHashMap_stat >    FeldmanHashMap_rcu_gpt_fixed_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_stat >    FeldmanHashMap_rcu_shb_fixed_stat;
-        typedef FeldmanHashMap< rcu_sht, Key, Value, traits_FeldmanHashMap_stat >    FeldmanHashMap_rcu_sht_fixed_stat;
-#endif
-
-    };
-
-    template <typename GC, typename K, typename T, typename Traits >
-    static inline void print_stat( FeldmanHashMap< GC, K, T, Traits > const& m )
-    {
-        CPPUNIT_MSG( m.statistics() );
-
-        std::vector< cds::intrusive::feldman_hashset::level_statistics > level_stat;
-        m.get_level_statistics( level_stat );
-        CPPUNIT_MSG( level_stat );
-    }
-
-}   // namespace map2
-
-#endif // #ifndef CDSUNIT_MAP_TYPE_FELDMAN_HASHMAP_H
diff --git a/tests/unit/map2/map_type_lazy_list.h b/tests/unit/map2/map_type_lazy_list.h
deleted file mode 100644 (file)
index 6ca2f46..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_MAP_TYPE_LAZY_LIST_H
-#define CDSUNIT_MAP_TYPE_LAZY_LIST_H
-
-#include "map2/map_type.h"
-
-#include <cds/container/lazy_kvlist_hp.h>
-#include <cds/container/lazy_kvlist_dhp.h>
-#include <cds/container/lazy_kvlist_rcu.h>
-#include <cds/container/lazy_kvlist_nogc.h>
-
-#include "michael_alloc.h"
-
-namespace map2 {
-
-    template <typename Key, typename Value>
-    struct lazy_list_type
-    {
-        typedef typename map_type_base<Key, Value>::compare compare;
-        typedef typename map_type_base<Key, Value>::less    less;
-        typedef typename map_type_base<Key, Value>::equal_to equal_to;
-
-        struct traits_LazyList_cmp_stdAlloc:
-            public cc::lazy_list::make_traits<
-                co::compare< compare >
-            >::type
-        {};
-        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_HP_cmp_stdAlloc;
-        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_DHP_cmp_stdAlloc;
-        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_NOGC_cmp_stdAlloc;
-        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPI_cmp_stdAlloc;
-        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPB_cmp_stdAlloc;
-        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPT_cmp_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHB_cmp_stdAlloc;
-        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHT_cmp_stdAlloc;
-#endif
-
-        struct traits_LazyList_unord_stdAlloc :
-            public cc::lazy_list::make_traits<
-                co::equal_to< equal_to >
-                ,co::sort< false >
-            >::type
-        {};
-        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_unord_stdAlloc > LazyList_NOGC_unord_stdAlloc;
-
-        struct traits_LazyList_cmp_stdAlloc_seqcst :
-            public cc::lazy_list::make_traits<
-                co::compare< compare >
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        {};
-        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_HP_cmp_stdAlloc_seqcst;
-        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_DHP_cmp_stdAlloc_seqcst;
-        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_NOGC_cmp_stdAlloc_seqcst;
-        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPI_cmp_stdAlloc_seqcst;
-        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPB_cmp_stdAlloc_seqcst;
-        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPT_cmp_stdAlloc_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHB_cmp_stdAlloc_seqcst;
-        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHT_cmp_stdAlloc_seqcst;
-#endif
-
-        struct traits_LazyList_cmp_michaelAlloc :
-            public cc::lazy_list::make_traits<
-                co::compare< compare >,
-                co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        {};
-        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_HP_cmp_michaelAlloc;
-        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_DHP_cmp_michaelAlloc;
-        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_NOGC_cmp_michaelAlloc;
-        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPI_cmp_michaelAlloc;
-        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPB_cmp_michaelAlloc;
-        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPT_cmp_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHB_cmp_michaelAlloc;
-        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHT_cmp_michaelAlloc;
-#endif
-        struct traits_LazyList_less_stdAlloc :
-            public cc::lazy_list::make_traits<
-                co::less< less >
-            >::type
-        {};
-        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_stdAlloc > LazyList_HP_less_stdAlloc;
-        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_stdAlloc > LazyList_DHP_less_stdAlloc;
-        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_stdAlloc > LazyList_NOGC_less_stdAlloc;
-        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPI_less_stdAlloc;
-        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPB_less_stdAlloc;
-        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPT_less_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_SHB_less_stdAlloc;
-        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_SHT_less_stdAlloc;
-#endif
-
-        struct traits_LazyList_less_stdAlloc_seqcst :
-            public cc::lazy_list::make_traits<
-                co::less< less >
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        {};
-        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_HP_less_stdAlloc_seqcst;
-        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_DHP_less_stdAlloc_seqcst;
-        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_NOGC_less_stdAlloc_seqcst;
-        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPI_less_stdAlloc_seqcst;
-        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPB_less_stdAlloc_seqcst;
-        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPT_less_stdAlloc_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHB_less_stdAlloc_seqcst;
-        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHT_less_stdAlloc_seqcst;
-#endif
-
-        struct traits_LazyList_less_michaelAlloc :
-            public cc::lazy_list::make_traits<
-                co::less< less >,
-                co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        {};
-        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_HP_less_michaelAlloc;
-        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_DHP_less_michaelAlloc;
-        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_NOGC_less_michaelAlloc;
-        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPI_less_michaelAlloc;
-        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPB_less_michaelAlloc;
-        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPT_less_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHB_less_michaelAlloc;
-        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHT_less_michaelAlloc;
-#endif
-    };
-
-}   // namespace map2
-
-#endif // ifndef CDSUNIT_MAP_TYPE_LAZY_LIST_H
diff --git a/tests/unit/map2/map_type_michael.h b/tests/unit/map2/map_type_michael.h
deleted file mode 100644 (file)
index c47b6d6..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_MAP_TYPE_MICHAEL_H
-#define CDSUNIT_MAP_TYPE_MICHAEL_H
-
-#include "map2/map_type_michael_list.h"
-#include "map2/map_type_lazy_list.h"
-
-#include <cds/container/michael_map.h>
-#include <cds/container/michael_map_rcu.h>
-#include <cds/container/michael_map_nogc.h>
-
-namespace map2 {
-
-    template <class GC, typename List, typename Traits = cc::michael_map::traits>
-    class MichaelHashMap : public cc::MichaelHashMap< GC, List, Traits >
-    {
-        typedef cc::MichaelHashMap< GC, List, Traits > base_class;
-    public:
-        template <typename Config>
-        MichaelHashMap( Config const& cfg)
-            : base_class( cfg.c_nMapSize, cfg.c_nLoadFactor )
-        {}
-
-        // 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;
-
-    template <typename Key, typename Value>
-    struct map_type< tag_MichaelHashMap, Key, Value >: public map_type_base< Key, Value >
-    {
-        typedef map_type_base< Key, Value > base_class;
-        typedef typename base_class::compare    compare;
-        typedef typename base_class::less       less;
-        typedef typename base_class::equal_to   equal_to;
-        typedef typename base_class::key_hash   key_hash;
-        typedef typename base_class::hash       hash;
-
-
-        // ***************************************************************************
-        // MichaelHashMap based on MichaelKVList
-        typedef michael_list_type< Key, Value > ml;
-
-        struct traits_MichaelMap_hash :
-            public cc::michael_map::make_traits<
-                co::hash< hash >
-            >::type
-        {};
-        typedef MichaelHashMap< cds::gc::HP,  typename ml::MichaelList_HP_cmp_stdAlloc,  traits_MichaelMap_hash > MichaelMap_HP_cmp_stdAlloc;
-        typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_DHP_cmp_stdAlloc;
-        typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_NOGC_cmp_stdAlloc;
-        typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPI_cmp_stdAlloc;
-        typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPB_cmp_stdAlloc;
-        typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPT_cmp_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHB_cmp_stdAlloc;
-        typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHT_cmp_stdAlloc;
-#endif
-
-        typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_HP_less_stdAlloc;
-        typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_DHP_less_stdAlloc;
-        typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_NOGC_less_stdAlloc;
-        typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPI_less_stdAlloc;
-        typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPB_less_stdAlloc;
-        typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPT_less_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHB_less_stdAlloc;
-        typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHT_less_stdAlloc;
-#endif
-
-        typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_HP_cmp_stdAlloc_seqcst;
-        typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_DHP_cmp_stdAlloc_seqcst;
-        typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_NOGC_cmp_stdAlloc_seqcst;
-        typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPI_cmp_stdAlloc_seqcst;
-        typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPB_cmp_stdAlloc_seqcst;
-        typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPT_cmp_stdAlloc_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHB_cmp_stdAlloc_seqcst;
-        typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHT_cmp_stdAlloc_seqcst;
-#endif
-
-        typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_HP_less_stdAlloc_seqcst;
-        typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_DHP_less_stdAlloc_seqcst;
-        typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_NOGC_less_stdAlloc_seqcst;
-        typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPI_less_stdAlloc_seqcst;
-        typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPB_less_stdAlloc_seqcst;
-        typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPT_less_stdAlloc_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHB_less_stdAlloc_seqcst;
-        typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHT_less_stdAlloc_seqcst;
-#endif
-
-        struct traits_MichaelSet_michaelAlloc :
-            public traits_MichaelMap_hash
-        {
-            typedef memory::MichaelAllocator<int> allocator;
-        };
-        typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_HP_cmp_michaelAlloc;
-        typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_DHP_cmp_michaelAlloc;
-        typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_NOGC_cmp_michaelAlloc;
-        typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPI_cmp_michaelAlloc;
-        typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPB_cmp_michaelAlloc;
-        typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPT_cmp_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHB_cmp_michaelAlloc;
-        typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHT_cmp_michaelAlloc;
-#endif
-        typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_HP_less_michaelAlloc;
-        typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_DHP_less_michaelAlloc;
-        typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_NOGC_less_michaelAlloc;
-        typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPI_less_michaelAlloc;
-        typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPB_less_michaelAlloc;
-        typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPT_less_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHB_less_michaelAlloc;
-        typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHT_less_michaelAlloc;
-#endif
-
-
-        // ***************************************************************************
-        // MichaelHashMap based on LazyKVList
-        typedef lazy_list_type< Key, Value > ll;
-
-        typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_HP_cmp_stdAlloc;
-        typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_cmp_stdAlloc;
-        typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_cmp_stdAlloc;
-        typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc;
-        typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc;
-        typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc;
-        typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc;
-#endif
-
-        typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_unord_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_unord_stdAlloc;
-
-        typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_HP_less_stdAlloc;
-        typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_less_stdAlloc;
-        typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_less_stdAlloc;
-        typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_less_stdAlloc;
-        typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_less_stdAlloc;
-        typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_less_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_less_stdAlloc;
-        typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_less_stdAlloc;
-#endif
-
-        typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_HP_cmp_stdAlloc_seqcst;
-        typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_cmp_stdAlloc_seqcst;
-        typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_cmp_stdAlloc_seqcst;
-        typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc_seqcst;
-        typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc_seqcst;
-        typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc_seqcst;
-        typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc_seqcst;
-#endif
-
-        typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_HP_less_stdAlloc_seqcst;
-        typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_less_stdAlloc_seqcst;
-        typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_less_stdAlloc_seqcst;
-        typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_less_stdAlloc_seqcst;
-        typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_less_stdAlloc_seqcst;
-        typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_less_stdAlloc_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_less_stdAlloc_seqcst;
-        typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_less_stdAlloc_seqcst;
-#endif
-
-        typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_HP_cmp_michaelAlloc;
-        typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_DHP_cmp_michaelAlloc;
-        typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_NOGC_cmp_michaelAlloc;
-        typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPI_cmp_michaelAlloc;
-        typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPB_cmp_michaelAlloc;
-        typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPT_cmp_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHB_cmp_michaelAlloc;
-        typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHT_cmp_michaelAlloc;
-#endif
-        typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_HP_less_michaelAlloc;
-        typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_DHP_less_michaelAlloc;
-        typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_NOGC_less_michaelAlloc;
-        typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPI_less_michaelAlloc;
-        typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPB_less_michaelAlloc;
-        typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPT_less_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHB_less_michaelAlloc;
-        typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHT_less_michaelAlloc;
-#endif
-
-    };
-}   // namespace map2
-
-#endif // ifndef CDSUNIT_MAP_TYPE_MICHAEL_H
diff --git a/tests/unit/map2/map_type_michael_list.h b/tests/unit/map2/map_type_michael_list.h
deleted file mode 100644 (file)
index 6887f39..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_MAP_TYPE_MICHAEL_LIST_H
-#define CDSUNIT_MAP_TYPE_MICHAEL_LIST_H
-
-#include "map2/map_type.h"
-
-#include <cds/container/michael_kvlist_hp.h>
-#include <cds/container/michael_kvlist_dhp.h>
-#include <cds/container/michael_kvlist_rcu.h>
-#include <cds/container/michael_kvlist_nogc.h>
-
-#include "michael_alloc.h"
-
-namespace map2 {
-
-    template <typename Key, typename Value>
-    struct michael_list_type
-    {
-        typedef typename map_type_base<Key, Value>::compare compare;
-        typedef typename map_type_base<Key, Value>::less    less;
-
-        struct traits_MichaelList_cmp_stdAlloc :
-            public cc::michael_list::make_traits<
-                co::compare< compare >
-            >::type
-        {};
-        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_HP_cmp_stdAlloc;
-        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_DHP_cmp_stdAlloc;
-        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_NOGC_cmp_stdAlloc;
-        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPI_cmp_stdAlloc;
-        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPB_cmp_stdAlloc;
-        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPT_cmp_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHB_cmp_stdAlloc;
-        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHT_cmp_stdAlloc;
-#endif
-
-        struct traits_MichaelList_cmp_stdAlloc_seqcst :
-            public cc::michael_list::make_traits<
-                co::compare< compare >
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        {};
-        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_HP_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_DHP_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_NOGC_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPI_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPB_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPT_cmp_stdAlloc_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHB_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHT_cmp_stdAlloc_seqcst;
-#endif
-
-        struct traits_MichaelList_cmp_michaelAlloc :
-            public cc::michael_list::make_traits<
-                co::compare< compare >,
-                co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        {};
-        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_HP_cmp_michaelAlloc;
-        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_DHP_cmp_michaelAlloc;
-        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_NOGC_cmp_michaelAlloc;
-        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPI_cmp_michaelAlloc;
-        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPB_cmp_michaelAlloc;
-        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPT_cmp_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHB_cmp_michaelAlloc;
-        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHT_cmp_michaelAlloc;
-#endif
-
-        struct traits_MichaelList_less_stdAlloc :
-            public cc::michael_list::make_traits<
-                co::less< less >
-            >::type
-        {};
-        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_HP_less_stdAlloc;
-        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_DHP_less_stdAlloc;
-        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_NOGC_less_stdAlloc;
-        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPI_less_stdAlloc;
-        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPB_less_stdAlloc;
-        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPT_less_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHB_less_stdAlloc;
-        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHT_less_stdAlloc;
-#endif
-
-        struct traits_MichaelList_less_stdAlloc_seqcst :
-            public cc::michael_list::make_traits<
-                co::less< less >
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        {};
-        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_HP_less_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_DHP_less_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_NOGC_less_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPI_less_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPB_less_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPT_less_stdAlloc_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHB_less_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHT_less_stdAlloc_seqcst;
-#endif
-
-        struct traits_MichaelList_less_michaelAlloc :
-            public cc::michael_list::make_traits<
-                co::less< less >,
-                co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        {};
-        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_HP_less_michaelAlloc;
-        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_DHP_less_michaelAlloc;
-        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_NOGC_less_michaelAlloc;
-        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPI_less_michaelAlloc;
-        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPB_less_michaelAlloc;
-        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPT_less_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHB_less_michaelAlloc;
-        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHT_less_michaelAlloc;
-#endif
-    };
-
-}   // namespace map2
-
-#endif // ifndef CDSUNIT_MAP_TYPE_MICHAEL_LIST_H
diff --git a/tests/unit/map2/map_type_skip_list.h b/tests/unit/map2/map_type_skip_list.h
deleted file mode 100644 (file)
index aa4d02b..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_MAP_TYPE_SKIP_LIST_H
-#define CDSUNIT_MAP_TYPE_SKIP_LIST_H
-
-#include "map2/map_type.h"
-
-#include <cds/container/skip_list_map_hp.h>
-#include <cds/container/skip_list_map_dhp.h>
-#include <cds/container/skip_list_map_rcu.h>
-#include <cds/container/skip_list_map_nogc.h>
-
-#include "print_skip_list_stat.h"
-
-namespace map2 {
-
-    template <class GC, typename Key, typename T, typename Traits = cc::skip_list::traits >
-    class SkipListMap : public cc::SkipListMap< GC, Key, T, Traits >
-    {
-        typedef cc::SkipListMap< GC, Key, T, Traits > base_class;
-    public:
-        template <typename Config>
-        SkipListMap( Config const& /*cfg*/)
-            : base_class()
-        {}
-
-        // 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;
-
-    template <typename Key, typename Value>
-    struct map_type< tag_SkipListMap, Key, Value >: public map_type_base< Key, Value >
-    {
-        typedef map_type_base< Key, Value > base_class;
-        typedef typename base_class::compare    compare;
-        typedef typename base_class::less       less;
-
-        class traits_SkipListMap_less_pascal: public cc::skip_list::make_traits <
-                co::less< less >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_hp_less_pascal;
-        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_dhp_less_pascal;
-        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_nogc_less_pascal;
-        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpi_less_pascal;
-        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpb_less_pascal;
-        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpt_less_pascal;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_shb_less_pascal;
-        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_sht_less_pascal;
-#endif
-
-        class traits_SkipListMap_less_pascal_seqcst: public cc::skip_list::make_traits <
-                co::less< less >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_hp_less_pascal_seqcst;
-        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_dhp_less_pascal_seqcst;
-        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_nogc_less_pascal_seqcst;
-        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpi_less_pascal_seqcst;
-        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpb_less_pascal_seqcst;
-        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpt_less_pascal_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_shb_less_pascal_seqcst;
-        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_sht_less_pascal_seqcst;
-#endif
-
-        class traits_SkipListMap_less_pascal_stat: public cc::skip_list::make_traits <
-                co::less< less >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_hp_less_pascal_stat;
-        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_dhp_less_pascal_stat;
-        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_nogc_less_pascal_stat;
-        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpi_less_pascal_stat;
-        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpb_less_pascal_stat;
-        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpt_less_pascal_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_shb_less_pascal_stat;
-        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_sht_less_pascal_stat;
-#endif
-
-        class traits_SkipListMap_cmp_pascal: public cc::skip_list::make_traits <
-                co::compare< compare >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_hp_cmp_pascal;
-        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_dhp_cmp_pascal;
-        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_nogc_cmp_pascal;
-        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpi_cmp_pascal;
-        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpb_cmp_pascal;
-        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpt_cmp_pascal;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_shb_cmp_pascal;
-        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_sht_cmp_pascal;
-#endif
-
-        class traits_SkipListMap_cmp_pascal_stat: public cc::skip_list::make_traits <
-                co::compare< compare >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_hp_cmp_pascal_stat;
-        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_dhp_cmp_pascal_stat;
-        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_nogc_cmp_pascal_stat;
-        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpi_cmp_pascal_stat;
-        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpb_cmp_pascal_stat;
-        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpt_cmp_pascal_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_shb_cmp_pascal_stat;
-        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_sht_cmp_pascal_stat;
-#endif
-
-        class traits_SkipListMap_less_xorshift: public cc::skip_list::make_traits <
-                co::less< less >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_hp_less_xorshift;
-        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_dhp_less_xorshift;
-        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_nogc_less_xorshift;
-        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpi_less_xorshift;
-        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpb_less_xorshift;
-        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpt_less_xorshift;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_shb_less_xorshift;
-        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_sht_less_xorshift;
-#endif
-
-        class traits_SkipListMap_less_xorshift_stat: public cc::skip_list::make_traits <
-                co::less< less >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_hp_less_xorshift_stat;
-        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_dhp_less_xorshift_stat;
-        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_nogc_less_xorshift_stat;
-        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpi_less_xorshift_stat;
-        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpb_less_xorshift_stat;
-        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpt_less_xorshift_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_shb_less_xorshift_stat;
-        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_sht_less_xorshift_stat;
-#endif
-
-        class traits_SkipListMap_cmp_xorshift: public cc::skip_list::make_traits <
-                co::compare< compare >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_hp_cmp_xorshift;
-        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_dhp_cmp_xorshift;
-        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_nogc_cmp_xorshift;
-        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpi_cmp_xorshift;
-        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpb_cmp_xorshift;
-        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpt_cmp_xorshift;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_shb_cmp_xorshift;
-        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_sht_cmp_xorshift;
-#endif
-
-        class traits_SkipListMap_cmp_xorshift_stat: public cc::skip_list::make_traits <
-                co::compare< compare >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_hp_cmp_xorshift_stat;
-        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_dhp_cmp_xorshift_stat;
-        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_nogc_cmp_xorshift_stat;
-        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpi_cmp_xorshift_stat;
-        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpb_cmp_xorshift_stat;
-        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpt_cmp_xorshift_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_shb_cmp_xorshift_stat;
-        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_sht_cmp_xorshift_stat;
-#endif
-
-    };
-
-    template <typename GC, typename K, typename T, typename Traits >
-    static inline void print_stat( SkipListMap< GC, K, T, Traits > const& m )
-    {
-        CPPUNIT_MSG( m.statistics() );
-    }
-
-}   // namespace map2
-
-#endif // ifndef CDSUNIT_MAP_TYPE_SKIP_LIST_H
diff --git a/tests/unit/map2/map_type_split_list.h b/tests/unit/map2/map_type_split_list.h
deleted file mode 100644 (file)
index 958972b..0000000
+++ /dev/null
@@ -1,573 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_MAP_TYPE_SPLIT_LIST_H
-#define CDSUNIT_MAP_TYPE_SPLIT_LIST_H
-
-#include "map2/map_type.h"
-
-#include <cds/container/michael_kvlist_hp.h>
-#include <cds/container/michael_kvlist_dhp.h>
-#include <cds/container/michael_kvlist_rcu.h>
-#include <cds/container/michael_kvlist_nogc.h>
-
-#include <cds/container/lazy_kvlist_hp.h>
-#include <cds/container/lazy_kvlist_dhp.h>
-#include <cds/container/lazy_kvlist_rcu.h>
-#include <cds/container/lazy_kvlist_nogc.h>
-
-#include <cds/container/split_list_map.h>
-#include <cds/container/split_list_map_rcu.h>
-#include <cds/container/split_list_map_nogc.h>
-
-#include "print_split_list_stat.h"
-
-namespace map2 {
-
-    template <class GC, typename Key, typename T, typename Traits = cc::split_list::traits >
-    class SplitListMap : public cc::SplitListMap< GC, Key, T, Traits >
-    {
-        typedef cc::SplitListMap< GC, Key, T, Traits > base_class;
-    public:
-        template <typename Config>
-        SplitListMap( Config const& cfg)
-            : base_class( cfg.c_nMapSize, cfg.c_nLoadFactor )
-        {}
-
-        // 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 <typename Key, typename T, typename Traits >
-    class SplitListMap< cds::gc::nogc, Key, T, Traits> : public cc::SplitListMap< cds::gc::nogc, Key, T, Traits >
-    {
-        typedef cc::SplitListMap< cds::gc::nogc, Key, T, Traits > base_class;
-    public:
-        template <typename Config>
-        SplitListMap( Config const& cfg)
-            : base_class( cfg.c_nMapSize, cfg.c_nLoadFactor )
-        {}
-
-        template <typename K>
-        bool insert( K const& key )
-        {
-            return base_class::insert( key ) != base_class::end();
-        }
-
-        template <typename K, typename V>
-        bool insert( K const& key, V const& val )
-        {
-            return base_class::insert( key, val ) != base_class::end();
-        }
-
-        template <typename K, typename Func>
-        bool insert_with( K const& key, Func func )
-        {
-            return base_class::insert_with( key, func ) != base_class::end();
-        }
-
-        template <typename K>
-        bool find( K const& key )
-        {
-            return base_class::find( key ) != base_class::end();
-        }
-
-        void clear()
-        {}
-
-        // for testing
-        static CDS_CONSTEXPR bool const c_bExtractSupported = true;
-        static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
-    };
-
-    struct tag_SplitListMap;
-
-    template <typename Key, typename Value>
-    struct map_type< tag_SplitListMap, Key, Value >: public map_type_base< Key, Value >
-    {
-        typedef map_type_base< Key, Value > base_class;
-        typedef typename base_class::compare    compare;
-        typedef typename base_class::less       less;
-        typedef typename base_class::equal_to   equal_to;
-        typedef typename base_class::key_hash   key_hash;
-        typedef typename base_class::hash       hash;
-
-
-        // ***************************************************************************
-        // SplitListMap based on MichaelList
-        struct traits_SplitList_Michael_dyn_cmp: public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::compare< compare >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_HP_dyn_cmp;
-        typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_DHP_dyn_cmp;
-        typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_NOGC_dyn_cmp;
-        typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPI_dyn_cmp;
-        typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPB_dyn_cmp;
-        typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPT_dyn_cmp;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHB_dyn_cmp;
-        typedef SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHT_dyn_cmp;
-#endif
-
-        struct traits_SplitList_Michael_dyn_cmp_stat : public traits_SplitList_Michael_dyn_cmp
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-        typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_HP_dyn_cmp_stat;
-        typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_DHP_dyn_cmp_stat;
-        typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_cmp_stat> SplitList_Michael_NOGC_dyn_cmp_stat;
-        typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPI_dyn_cmp_stat;
-        typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPB_dyn_cmp_stat;
-        typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPT_dyn_cmp_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHB_dyn_cmp_stat;
-        typedef SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHT_dyn_cmp_stat;
-#endif
-
-        struct traits_SplitList_Michael_dyn_cmp_seqcst: public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,co::hash< hash >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::compare< compare >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_HP_dyn_cmp_seqcst;
-        typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_DHP_dyn_cmp_seqcst;
-        typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst> SplitList_Michael_NOGC_dyn_cmp_seqcst;
-        typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
-        typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
-        typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
-        typedef SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
-#endif
-
-        struct traits_SplitList_Michael_st_cmp: public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::compare< compare >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_HP_st_cmp;
-        typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_DHP_st_cmp;
-        typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_cmp> SplitList_Michael_NOGC_st_cmp;
-        typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPI_st_cmp;
-        typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPB_st_cmp;
-        typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPT_st_cmp;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHB_st_cmp;
-        typedef SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHT_st_cmp;
-#endif
-
-        struct traits_SplitList_Michael_st_cmp_seqcst: public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::compare< compare >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_HP_st_cmp_seqcst;
-        typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_DHP_st_cmp_seqcst;
-        typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_NOGC_st_cmp_seqcst;
-        typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_GPI_st_cmp_seqcst;
-        typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_GPB_st_cmp_seqcst;
-        typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_GPT_st_cmp_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_SHB_st_cmp_seqcst;
-        typedef SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_SHT_st_cmp_seqcst;
-#endif
-
-        //HP + less
-        struct traits_SplitList_Michael_dyn_less: public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::less< less >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_HP_dyn_less;
-        typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_DHP_dyn_less;
-        typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_less> SplitList_Michael_NOGC_dyn_less;
-        typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPI_dyn_less;
-        typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPB_dyn_less;
-        typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPT_dyn_less;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHB_dyn_less;
-        typedef SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHT_dyn_less;
-#endif
-
-
-        struct traits_SplitList_Michael_dyn_less_seqcst: public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,co::hash< hash >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::less< less >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_HP_dyn_less_seqcst;
-        typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_DHP_dyn_less_seqcst;
-        typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_less_seqcst> SplitList_Michael_NOGC_dyn_less_seqcst;
-        typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPI_dyn_less_seqcst;
-        typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPB_dyn_less_seqcst;
-        typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPT_dyn_less_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHB_dyn_less_seqcst;
-        typedef SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHT_dyn_less_seqcst;
-#endif
-
-        struct traits_SplitList_Michael_st_less: public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::less< less >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_HP_st_less;
-        typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_DHP_st_less;
-        typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_less> SplitList_Michael_NOGC_st_less;
-        typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPI_st_less;
-        typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPB_st_less;
-        typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPT_st_less;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHB_st_less;
-        typedef SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHT_st_less;
-#endif
-
-        struct traits_SplitList_Michael_st_less_stat : traits_SplitList_Michael_st_less
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-        typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_HP_st_less_stat;
-        typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_DHP_st_less_stat;
-        typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_less_stat> SplitList_Michael_NOGC_st_less_stat;
-        typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPI_st_less_stat;
-        typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPB_st_less_stat;
-        typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPT_st_less_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHB_st_less_stat;
-        typedef SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHT_st_less_stat;
-#endif
-
-
-        class traits_SplitList_Michael_st_less_seqcst: public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::less< less >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_HP_st_less_seqcst;
-        typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_DHP_st_less_seqcst;
-        typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_less_seqcst> SplitList_Michael_NOGC_st_less_seqcst;
-        typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPI_st_less_seqcst;
-        typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPB_st_less_seqcst;
-        typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPT_st_less_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHB_st_less_seqcst;
-        typedef SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHT_st_less_seqcst;
-#endif
-
-
-        // ***************************************************************************
-        // SplitListMap based on LazyKVList
-
-        struct SplitList_Lazy_dyn_cmp :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::compare< compare >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_HP_dyn_cmp;
-        typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_DHP_dyn_cmp;
-        typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_cmp> SplitList_Lazy_NOGC_dyn_cmp;
-        typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPI_dyn_cmp;
-        typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPB_dyn_cmp;
-        typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPT_dyn_cmp;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp;
-        typedef SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp;
-#endif
-
-        struct SplitList_Lazy_dyn_cmp_stat : public SplitList_Lazy_dyn_cmp
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-        typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_HP_dyn_cmp_stat;
-        typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_DHP_dyn_cmp_stat;
-        typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_cmp_stat> SplitList_Lazy_NOGC_dyn_cmp_stat;
-        typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPI_dyn_cmp_stat;
-        typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPB_dyn_cmp_stat;
-        typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPT_dyn_cmp_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_SHB_dyn_cmp_stat;
-        typedef SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_SHT_dyn_cmp_stat;
-#endif
-
-        struct SplitList_Lazy_dyn_cmp_seqcst :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,co::hash< hash >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::compare< compare >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_HP_dyn_cmp_seqcst;
-        typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_DHP_dyn_cmp_seqcst;
-        typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_cmp_seqcst> SplitList_Lazy_NOGC_dyn_cmp_seqcst;
-        typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
-        typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
-        typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
-        typedef SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
-#endif
-
-        struct SplitList_Lazy_st_cmp :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::compare< compare >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_HP_st_cmp;
-        typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_DHP_st_cmp;
-        typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_cmp> SplitList_Lazy_NOGC_st_cmp;
-        typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPI_st_cmp;
-        typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPB_st_cmp;
-        typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPT_st_cmp;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHB_st_cmp;
-        typedef SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHT_st_cmp;
-#endif
-
-
-        struct SplitList_Lazy_st_cmp_seqcst :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::compare< compare >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_HP_st_cmp_seqcst;
-        typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_DHP_st_cmp_seqcst;
-        typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_NOGC_st_cmp_seqcst;
-        typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_GPI_st_cmp_seqcst;
-        typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_GPB_st_cmp_seqcst;
-        typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_GPT_st_cmp_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_SHB_st_cmp_seqcst;
-        typedef SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_SHT_st_cmp_seqcst;
-#endif
-
-
-        struct SplitList_Lazy_dyn_less :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::less< less >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_HP_dyn_less;
-        typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_DHP_dyn_less;
-        typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_less> SplitList_Lazy_NOGC_dyn_less;
-        typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPI_dyn_less;
-        typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPB_dyn_less;
-        typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPT_dyn_less;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHB_dyn_less;
-        typedef SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHT_dyn_less;
-#endif
-
-        struct SplitList_Lazy_dyn_less_seqcst:
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,co::hash< hash >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::less< less >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_HP_dyn_less_seqcst;
-        typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_DHP_dyn_less_seqcst;
-        typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_less_seqcst> SplitList_Lazy_NOGC_dyn_less_seqcst;
-        typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPI_dyn_less_seqcst;
-        typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPB_dyn_less_seqcst;
-        typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPT_dyn_less_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHB_dyn_less_seqcst;
-        typedef SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHT_dyn_less_seqcst;
-#endif
-
-        struct SplitList_Lazy_st_less :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::less< less >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_HP_st_less;
-        typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_DHP_st_less;
-        typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_less> SplitList_Lazy_NOGC_st_less;
-        typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPI_st_less;
-        typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPB_st_less;
-        typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPT_st_less;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHB_st_less;
-        typedef SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHT_st_less;
-#endif
-
-        struct SplitList_Lazy_st_less_stat : public SplitList_Lazy_st_less
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-        typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_HP_st_less_stat;
-        typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_DHP_st_less_stat;
-        typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_less_stat> SplitList_Lazy_NOGC_st_less_stat;
-        typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPI_st_less_stat;
-        typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPB_st_less_stat;
-        typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPT_st_less_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHB_st_less_stat;
-        typedef SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHT_st_less_stat;
-#endif
-
-        struct SplitList_Lazy_st_less_seqcst :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::less< less >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_HP_st_less_seqcst;
-        typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_DHP_st_less_seqcst;
-        typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_less_seqcst> SplitList_Lazy_NOGC_st_less_seqcst;
-        typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPI_st_less_seqcst;
-        typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPB_st_less_seqcst;
-        typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPT_st_less_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHB_st_less_seqcst;
-        typedef SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHT_st_less_seqcst;
-#endif
-    };
-
-    template <typename GC, typename K, typename T, typename Traits >
-    static inline void print_stat( SplitListMap< GC, K, T, Traits > const& m )
-    {
-        CPPUNIT_MSG( m.statistics() );
-    }
-
-}   // namespace map2
-
-#endif // ifndef CDSUNIT_MAP_TYPE_SPLIT_LIST_H
diff --git a/tests/unit/map2/map_type_std.h b/tests/unit/map2/map_type_std.h
deleted file mode 100644 (file)
index 6a794b2..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_MAP_TYPE_STD_H
-#define CDSUNIT_MAP_TYPE_STD_H
-
-#include "map2/map_type.h"
-
-#include "map2/std_map.h"
-#include "map2/std_hash_map.h"
-
-#include "lock/nolock.h"
-
-namespace map2 {
-
-    struct tag_StdMap;
-
-    template <typename Key, typename Value>
-    struct map_type< tag_StdMap, Key, Value >: public map_type_base< Key, Value >
-    {
-        typedef map_type_base< Key, Value > base_class;
-        typedef typename base_class::compare    compare;
-        typedef typename base_class::less       less;
-
-        typedef StdMap< Key, Value, cds::sync::spin >   StdMap_Spin;
-        typedef StdMap< Key, Value, std::mutex >        StdMap_Mutex;
-        typedef StdMap< Key, Value, lock::NoLock>       StdMap_NoLock;
-
-        typedef StdHashMap< Key, Value, cds::sync::spin > StdHashMap_Spin;
-        typedef StdHashMap< Key, Value, std::mutex >      StdHashMap_Mutex;
-        typedef StdHashMap< Key, Value, lock::NoLock >    StdHashMap_NoLock;
-    };
-}   // namespace map2
-
-#endif // ifndef CDSUNIT_MAP_TYPE_STD_H
diff --git a/tests/unit/map2/map_type_striped.h b/tests/unit/map2/map_type_striped.h
deleted file mode 100644 (file)
index ccdde5d..0000000
+++ /dev/null
@@ -1,284 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_MAP_TYPE_MICHAEL_H
-#define CDSUNIT_MAP_TYPE_MICHAEL_H
-
-#include "map2/map_type.h"
-#include <cds/container/striped_map/std_list.h>
-#include <cds/container/striped_map/std_map.h>
-#include <cds/container/striped_map/std_hash_map.h>
-
-#include <boost/version.hpp>
-#if BOOST_VERSION >= 104800
-#   include <cds/container/striped_map/boost_list.h>
-#   include <cds/container/striped_map/boost_slist.h>
-#   include <cds/container/striped_map/boost_map.h>
-#   include <cds/container/striped_map/boost_flat_map.h>
-#endif
-#include <cds/container/striped_map/boost_unordered_map.h>
-#include <cds/container/striped_map.h>
-
-namespace map2 {
-
-    struct tag_StripedMap;
-
-    template <typename Key, typename Value>
-    struct map_type< tag_StripedMap, Key, Value >: public map_type_base< Key, Value >
-    {
-        typedef map_type_base< Key, Value > base_class;
-        typedef typename base_class::compare    compare;
-        typedef typename base_class::less       less;
-        typedef typename base_class::equal_to   equal_to;
-        typedef typename base_class::key_hash   key_hash;
-        typedef typename base_class::hash       hash;
-        typedef typename base_class::hash2      hash2;
-
-        // for sequential containers
-        template <class BucketEntry, typename... Options>
-        class StripedHashMap_seq:
-            public cc::StripedMap< BucketEntry,
-                co::mutex_policy< cc::striped_set::striping<> >
-                ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-                , Options...
-            >
-        {
-            typedef cc::StripedMap< BucketEntry,
-                co::mutex_policy< cc::striped_set::striping<> >
-                ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-                , Options...
-            > base_class;
-            typedef typename base_class::resizing_policy resizing_policy_t;
-
-            resizing_policy_t   m_placeHolder;
-        public:
-            template <class Config>
-            StripedHashMap_seq( Config const& cfg )
-                : base_class( cfg.c_nMapSize / cfg.c_nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( cfg.c_nLoadFactor )) )
-            {}
-
-            // for testing
-            static CDS_CONSTEXPR bool const c_bExtractSupported = false;
-            static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
-        };
-
-        // for non-sequential ordered containers
-        template <class BucketEntry, typename... Options>
-        class StripedHashMap_ord:
-            public cc::StripedMap< BucketEntry,
-                co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-                ,co::mutex_policy< cc::striped_set::striping<> >
-                , Options...
-            >
-        {
-            typedef cc::StripedMap< BucketEntry,
-               co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-                ,co::mutex_policy< cc::striped_set::striping<> >
-                , Options...
-            > base_class;
-            typedef typename base_class::resizing_policy resizing_policy_t;
-
-            resizing_policy_t   m_placeHolder;
-        public:
-            template <class Config>
-            StripedHashMap_ord( Config const& cfg )
-                : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( cfg.c_nMaxLoadFactor * 1024 )) )
-            {}
-
-            // for testing
-            static CDS_CONSTEXPR bool const c_bExtractSupported = false;
-            static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false;
-        };
-
-
-        typedef StripedHashMap_seq<
-            std::list< std::pair< Key const, Value > >
-            , co::hash< hash2 >
-            , co::less< less >
-        > StripedMap_list;
-
-#   if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
-        typedef StripedHashMap_ord<
-            stdext::hash_map< Key, Value, stdext::hash_compare<Key, less > >
-            , co::hash< hash2 >
-        > StripedMap_hashmap;
-#   else
-        typedef StripedHashMap_ord<
-            std::unordered_map< Key, Value, hash, equal_to >
-            , co::hash< hash2 >
-        > StripedMap_hashmap;
-#   endif
-
-        typedef StripedHashMap_ord<
-            std::map< Key, Value, less >
-            , co::hash< hash2 >
-        > StripedMap_map;
-
-        typedef StripedHashMap_ord<
-            boost::unordered_map< Key, Value, hash, equal_to >
-            , co::hash< hash2 >
-        > StripedMap_boost_unordered_map;
-
-#   if BOOST_VERSION >= 104800
-        typedef StripedHashMap_seq<
-            boost::container::slist< std::pair< Key const, Value > >
-            , co::hash< hash2 >
-            , co::less< less >
-        > StripedMap_slist;
-
-        typedef StripedHashMap_seq<
-            boost::container::list< std::pair< Key const, Value > >
-            , co::hash< hash2 >
-            , co::less< less >
-        > StripedMap_boost_list;
-
-        typedef StripedHashMap_ord<
-            boost::container::map< Key, Value, less >
-            , co::hash< hash2 >
-        > StripedMap_boost_map;
-
-        typedef StripedHashMap_ord<
-            boost::container::flat_map< Key, Value, less >
-            , co::hash< hash2 >
-        > StripedMap_boost_flat_map;
-#   endif  // BOOST_VERSION >= 104800
-
-
-        // ***************************************************************************
-        // RefinableHashMap
-
-        // for sequential containers
-        template <class BucketEntry, typename... Options>
-        class RefinableHashMap_seq:
-            public cc::StripedMap< BucketEntry,
-                co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , Options...
-            >
-        {
-            typedef cc::StripedMap< BucketEntry,
-               co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , Options...
-            > base_class;
-            typedef typename base_class::resizing_policy resizing_policy_t;
-
-            resizing_policy_t   m_placeHolder;
-        public:
-            template <class Config>
-            RefinableHashMap_seq( Config const& cfg )
-                : base_class( cfg.c_nMapSize / cfg.c_nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( cfg.c_nLoadFactor )))
-            {}
-
-            // for testing
-            static CDS_CONSTEXPR bool const c_bExtractSupported = false;
-            static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
-        };
-
-        // for non-sequential ordered containers
-        template <class BucketEntry, typename... Options>
-        class RefinableHashMap_ord:
-            public cc::StripedMap< BucketEntry,
-                co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , Options...
-            >
-        {
-            typedef cc::StripedMap< BucketEntry,
-               co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , Options...
-            > base_class;
-            typedef typename base_class::resizing_policy resizing_policy_t;
-
-            resizing_policy_t   m_placeHolder;
-        public:
-            template <class Config>
-            RefinableHashMap_ord( Config const& cfg )
-                : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( cfg.c_nMaxLoadFactor * 1024 )) )
-            {}
-
-            // for testing
-            static CDS_CONSTEXPR bool const c_bExtractSupported = false;
-            static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false;
-        };
-
-
-        typedef RefinableHashMap_seq<
-            std::list< std::pair< Key const, Value > >
-            , co::hash< hash2 >
-            , co::less< less >
-        > RefinableMap_list;
-
-#   if BOOST_VERSION >= 104800
-        typedef RefinableHashMap_seq<
-            boost::container::slist< std::pair< Key const, Value > >
-            , co::hash< hash2 >
-            , co::less< less >
-        > RefinableMap_slist;
-#   endif
-
-        typedef RefinableHashMap_ord<
-            std::map< Key, Value, less >
-            , co::hash< hash2 >
-        > RefinableMap_map;
-
-        typedef RefinableHashMap_ord<
-            std::unordered_map< Key, Value, hash, equal_to >
-            , co::hash< hash2 >
-        > RefinableMap_hashmap;
-
-        typedef RefinableHashMap_ord<
-            boost::unordered_map< Key, Value, hash, equal_to >
-            , co::hash< hash2 >
-        > RefinableMap_boost_unordered_map;
-
-#   if BOOST_VERSION >= 104800
-        typedef RefinableHashMap_seq<
-            boost::container::list< std::pair< Key const, Value > >
-            , co::hash< hash2 >
-            , co::less< less >
-        > RefinableMap_boost_list;
-
-        typedef RefinableHashMap_ord<
-            boost::container::map< Key, Value, less >
-            , co::hash< hash2 >
-        > RefinableMap_boost_map;
-
-        typedef RefinableHashMap_ord<
-            boost::container::flat_map< Key, Value, less >
-            , co::hash< hash2 >
-        > RefinableMap_boost_flat_map;
-#   endif // #if BOOST_VERSION >= 104800
-
-    };
-}   // namespace map2
-
-#endif // ifndef CDSUNIT_MAP_TYPE_MICHAEL_H
diff --git a/tests/unit/map2/std_hash_map.h b/tests/unit/map2/std_hash_map.h
deleted file mode 100644 (file)
index 837b0e4..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_STD_HASH_MAP_GCC_H
-#define CDSUNIT_STD_HASH_MAP_GCC_H
-
-#include <mutex>    //unique_lock
-#include <unordered_map>
-
-namespace map2 {
-
-    template <typename Key, typename Value, typename Lock,
-        class Alloc = typename CDS_DEFAULT_ALLOCATOR::template rebind<std::pair<Key const, Value> >::other
-    >
-    class StdHashMap
-        : public std::unordered_map<
-            Key, Value
-            , std::hash<Key>
-            , std::equal_to<Key>
-            , Alloc
-        >
-    {
-    public:
-        Lock m_lock;
-        typedef std::unique_lock<Lock> scoped_lock;
-        typedef std::unordered_map<
-            Key, Value
-            , std::hash<Key>
-            , std::equal_to<Key>
-            , Alloc
-        >   base_class;
-    public:
-        typedef typename base_class::mapped_type value_type;
-        typedef size_t      item_counter;
-
-        StdHashMap()
-        {}
-
-        template <class Config>
-        StdHashMap( Config const& )
-        {}
-
-        bool contains( const Key& key )
-        {
-            scoped_lock al( m_lock );
-            return base_class::find( key ) != base_class::end();
-        }
-
-        bool insert( const Key& key, const Value& val )
-        {
-            scoped_lock al( m_lock );
-            return base_class::insert( typename base_class::value_type(key, val)).second;
-        }
-
-        template <typename T, typename Func>
-        bool insert( const Key& key, const T& val, Func func )
-        {
-            scoped_lock al( m_lock );
-            std::pair<typename base_class::iterator, bool> pRet = base_class::insert( typename base_class::value_type(key, Value() ));
-            if ( pRet.second ) {
-                func( pRet.first->second, val );
-                return true;
-            }
-            return false;
-        }
-
-        template <typename T, typename Func>
-        std::pair<bool, bool> update( const T& key, Func func, bool /*bAllowInsert*/ = true )
-        {
-            scoped_lock al( m_lock );
-            std::pair<typename base_class::iterator, bool> pRet = base_class::insert( typename base_class::value_type( key, Value() ));
-            if ( pRet.second ) {
-                func( true, *pRet.first );
-                return std::make_pair( true, true );
-            }
-            else {
-                func( false, *pRet.first );
-                return std::make_pair( true, false );
-            }
-        }
-
-        bool erase( const Key& key )
-        {
-            scoped_lock al( m_lock );
-            return base_class::erase( key ) != 0;
-        }
-
-        template <typename T, typename Func>
-        bool erase( const T& key, Func func )
-        {
-            scoped_lock al( m_lock );
-            typename base_class::iterator it = base_class::find( key );
-            if ( it != base_class::end() ) {
-                func( *it );
-                return base_class::erase( key ) != 0;
-            }
-            return false;
-        }
-
-        std::ostream& dump( std::ostream& stm ) { return stm; }
-
-
-        // 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
-
-#endif  // #ifndef CDSUNIT_STD_HASH_MAP_GCC_H
diff --git a/tests/unit/map2/std_map.h b/tests/unit/map2/std_map.h
deleted file mode 100644 (file)
index 7963537..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_STD_MAP_GCC_H
-#define CDSUNIT_STD_MAP_GCC_H
-
-#include <map>
-#include <mutex>    //unique_lock
-
-namespace map2 {
-
-    template <typename Key, typename Value, typename Lock,
-        class Alloc = typename CDS_DEFAULT_ALLOCATOR::template rebind<std::pair<Key const, Value> >::other
-    >
-    class StdMap: public std::map<Key, Value, std::less<Key>, Alloc>
-    {
-        Lock m_lock;
-        typedef std::unique_lock<Lock> scoped_lock;
-        typedef std::map<Key, Value, std::less<Key>, Alloc> base_class;
-    public:
-        typedef typename base_class::mapped_type value_type;
-        typedef typename base_class::value_type  pair_type;
-        typedef size_t      item_counter;
-
-        StdMap()
-        {}
-
-        template <class Config>
-        StdMap( Config const& )
-        {}
-
-        bool contains( const Key& key )
-        {
-            scoped_lock al( m_lock );
-            return base_class::find( key ) != base_class::end();
-        }
-
-        bool insert( const Key& key, const Value& val )
-        {
-            scoped_lock al( m_lock );
-            return base_class::insert( typename base_class::value_type(key, val)).second;
-        }
-
-        template <typename T, typename Func>
-        bool insert( const Key& key, const T& val, Func func )
-        {
-            scoped_lock al( m_lock );
-            std::pair<typename base_class::iterator, bool> pRet = base_class::insert( typename base_class::value_type(key, Value() ));
-            if ( pRet.second ) {
-                func( pRet.first->second, val );
-                return true;
-            }
-            return false;
-        }
-
-        template <typename T, typename Func>
-        std::pair<bool, bool> update( const T& key, Func func, bool /*bAllowInsert*/ = true )
-        {
-            scoped_lock al( m_lock );
-            std::pair<typename base_class::iterator, bool> pRet = base_class::insert( typename base_class::value_type(key, Value() ));
-            if ( pRet.second ) {
-                func( true, *pRet.first );
-                return std::make_pair( true, true );
-            }
-            else {
-                func( false, *pRet.first );
-                return std::make_pair( true, false );
-            }
-        }
-
-        bool erase( const Key& key )
-        {
-            scoped_lock al( m_lock );
-            return base_class::erase( key ) != 0;
-        }
-
-        template <typename T, typename Func>
-        bool erase( const T& key, Func func )
-        {
-            scoped_lock al( m_lock );
-            typename base_class::iterator it = base_class::find( key );
-            if ( it != base_class::end() ) {
-                func( (*it) );
-                base_class::erase( it );
-                return true;
-            }
-            return false;
-        }
-
-        std::ostream& dump( std::ostream& stm ) { return stm; }
-
-
-        // 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
-
-#endif  // #ifndef CDSUNIT_STD_MAP_GCC_H
diff --git a/tests/unit/michael_alloc.cpp b/tests/unit/michael_alloc.cpp
deleted file mode 100644 (file)
index ec6e3aa..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "michael_alloc.h"
-
-namespace memory {
-    michael_heap s_MichaelHeap;
-}
diff --git a/tests/unit/michael_alloc.h b/tests/unit/michael_alloc.h
deleted file mode 100644 (file)
index ddaed85..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_MICHAEL_ALLOC_H
-#define CDSUNIT_MICHAEL_ALLOC_H
-
-#include <cds/memory/michael/allocator.h>
-#include <memory>
-
-namespace memory {
-
-    typedef cds::memory::michael::Heap<
-        cds::memory::michael::opt::check_bounds< cds::memory::michael::debug_bound_checking >
-    >    michael_heap;
-    extern michael_heap s_MichaelHeap;
-
-    template <class T>
-    class MichaelAllocator
-    {
-        typedef std::allocator<T>               std_allocator;
-    public:
-        // Declare typedefs from std::allocator
-        typedef typename std_allocator::const_pointer   const_pointer;
-        typedef typename std_allocator::pointer         pointer;
-        typedef typename std_allocator::const_reference const_reference;
-        typedef typename std_allocator::reference       reference;
-        typedef typename std_allocator::difference_type difference_type;
-        typedef typename std_allocator::size_type       size_type;
-        typedef typename std_allocator::value_type      value_type;
-
-        // Allocation function
-        pointer allocate( size_type _Count, const void* /*_Hint*/ = nullptr )
-        {
-            return reinterpret_cast<pointer>( s_MichaelHeap.alloc( sizeof(T) * _Count ));
-        }
-
-        // Deallocation function
-        void deallocate( pointer _Ptr, size_type /*_Count*/ )
-        {
-            s_MichaelHeap.free( _Ptr );
-        }
-
-        pointer address( reference r ) const
-        {
-            return &r;
-        }
-        const_pointer address( const_reference r ) const
-        {
-            return &r;
-        }
-        void construct( pointer p, const T& val )
-        {
-            return new( p ) T( val );
-        }
-        void destroy( pointer p )
-        {
-            p->T::~T();
-        }
-
-        // Rebinding allocator to other type
-        template <class Other>
-        struct rebind {
-            typedef MichaelAllocator<Other> other;
-        };
-    };
-}   // namespace memory
-
-#endif // #ifndef CDSUNIT_MICHAEL_ALLOC_H
diff --git a/tests/unit/nonconcurrent_iterator_sequence.h b/tests/unit/nonconcurrent_iterator_sequence.h
deleted file mode 100644 (file)
index 3da6358..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_NONCONCURRENT_ITERATOR_SEQUENCE_H
-#define CDSUNIT_NONCONCURRENT_ITERATOR_SEQUENCE_H
-
-#include <cds/details/bounded_array.h>
-#include <cds/atomic.h>
-#include <algorithm>    // std::sort
-
-namespace map { namespace nonconcurrent_iterator {
-
-    class Sequence
-    {
-    public:
-        typedef int        TKey;
-        struct TValue {
-            TKey        keyControl    ;    // Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã³Ã¥Ã²Ã±Ã¿ Ã¤Ã«Ã¿ ÃªÃ®Ã­Ã²Ã°Ã®Ã«Ã¿, Ã·Ã²Ã® Ã¤Ã Ã­Ã­Ã»Ã¥ Ã®Ã²Ã­Ã®Ã±Ã¿Ã²Ã±Ã¿ Ãª ÃªÃ«Ã¾Ã·Ã³
-            int            nShuffle    ;    // Ã±Ã«Ã³Ã·Ã Ã©Ã­Ã®Ã¥ Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥, Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã³Ã¥Ã¬Ã®Ã¥ Ã¤Ã«Ã¿ Ã±Ã®Ã°Ã²Ã¨Ã°Ã®Ã¢ÃªÃ¨
-            TValue *    pOrigItem    ;    // Ã³ÃªÃ Ã§Ã Ã²Ã¥Ã«Ã¼ Ã­Ã  Ã½Ã«Ã¥Ã¬Ã¥Ã­Ã² Ã¢ Ã¬Ã Ã±Ã±Ã¨Ã¢Ã¥; Ã²Ã Ãª ÃªÃ Ãª Ã±Ã¯Ã¨Ã±Ã®Ãª ÃµÃ°Ã Ã­Ã¨Ã² ÃªÃ®Ã¯Ã¨Ã¨,
-                                        // Ã²Ã® Ã± Ã¯Ã®Ã¬Ã®Ã¹Ã¼Ã¾ Ã½Ã²Ã®Ã£Ã® Ã¯Ã®Ã«Ã¿ Ã®Ã°Ã£Ã Ã­Ã¨Ã§Ã³Ã¥Ã²Ã±Ã¿ Ã¤Ã®Ã±Ã²Ã³Ã¯ Ãª Ã¨Ã±ÃµÃ®Ã¤Ã­Ã®Ã¬Ã³ Ã½Ã«Ã¥Ã¬Ã¥Ã­Ã²Ã³
-
-            cds::atomics::item_counter<cds::membar_release>   nAccess        ;    // Ã±Ã·Ã¥Ã²Ã·Ã¨Ãª Ã¤Ã®Ã±Ã²Ã³Ã¯Ã  Ã¯Ã°Ã¨ Ã®Ã¡ÃµÃ®Ã¤Ã¥ Ã±Ã¯Ã¨Ã±ÃªÃ  Ã¯Ã® Ã¨Ã²Ã¥Ã°Ã Ã²Ã®Ã°Ã Ã¬
-                                                // (Atomic, Ã²Ã Ãª ÃªÃ Ãª Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã¥Ã­ Ã¯Ã Ã°Ã Ã«Ã«Ã¥Ã¼Ã­Ã»Ã© Ã¤Ã®Ã±Ã²Ã³Ã¯)
-
-            TValue()
-            {
-                ++nConstructCount;
-            }
-            TValue( const TValue& v )
-            {
-                memcpy( this, &v, sizeof(*this) );
-                ++nConstructCount;
-            }
-            ~TValue()
-            {
-                ++nDestructCount;
-            }
-        };
-
-        struct Data {
-            TKey    key;
-            TValue    value;
-        };
-
-    protected:
-        static size_t nConstructCount;
-        static size_t nDestructCount;
-
-    public:
-        typedef cds::details::BoundedArray<Data>        TDataArray;
-        typedef TDataArray::const_iterator              const_iterator;
-
-        TDataArray                                        arrData;
-
-        const_iterator begin() const    { return arrData.begin(); }
-        const_iterator end() const      { return arrData.end(); }
-
-    public:
-        Sequence( size_t nSize )
-            : arrData( nSize )
-        {}
-
-        static unsigned int Rand( unsigned int nMax )
-        {
-            double rnd = double( rand() ) / double( RAND_MAX );
-            unsigned int n = (unsigned int) (rnd * nMax);
-            return n < nMax ? n : (n-1);
-        }
-
-        void generateSequence()
-        {
-            // ÃƒÃ¥Ã­Ã¥Ã°Ã¨Ã°Ã³Ã¥Ã¬ Ã²Ã¥Ã±Ã²Ã®Ã¢Ã»Ã© Ã¬Ã Ã±Ã±Ã¨Ã¢ Ã¤Ã Ã­Ã­Ã»Ãµ. ÃŒÃ Ã±Ã±Ã¨Ã¢ Ã¤Ã®Ã«Ã¦Ã¥Ã­ Ã¡Ã»Ã²Ã¼ Ã¯Ã¥Ã°Ã¥Ã¬Ã¥Ã¸Ã Ã­ Ã±Ã«Ã³Ã·Ã Ã©Ã­Ã»Ã¬ Ã®Ã¡Ã°Ã Ã§Ã®Ã¬, Ã¯Ã®Ã½Ã²Ã®Ã¬Ã³
-            // Ã¢ ÃªÃ Ã·Ã¥Ã±Ã²Ã¢Ã¥ Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¿ Ã¯Ã®Ã«Ã¿ value.nShuffle Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã³Ã¥Ã¬ Ã±Ã«Ã³Ã·Ã Ã©Ã­Ã®Ã¥, Ã¨ Ã±Ã®Ã°Ã²Ã¨Ã°Ã³Ã¥Ã¬ Ã¬Ã Ã±Ã±Ã¨Ã¢
-            // Ã¯Ã® Ã½Ã²Ã®Ã¬Ã³ Ã±Ã«Ã³Ã·Ã Ã©Ã­Ã®Ã¬Ã³ Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¾
-
-            size_t nMax = arrData.capacity();
-            for ( size_t i = 0; i < nMax; ++i ) {
-                arrData[i].key = (unsigned int) i;
-                arrData[i].value.keyControl = (unsigned int) i;
-                arrData[i].value.nShuffle = Rand( (unsigned int) nMax );
-                arrData[i].value.pOrigItem = &(arrData[i].value);
-                arrData[i].value.nAccess.reset( cds::membar_relaxed::order );
-            }
-        }
-
-        void restoreLinks()
-        {
-            size_t nMax = arrData.capacity();
-            for ( size_t i = 0; i < nMax; ++i )
-                arrData[i].value.pOrigItem = &(arrData[i].value);
-        }
-
-        static bool sortValue( const Data& p1, const Data&p2 )
-        {
-            return p1.value.nShuffle < p2.value.nShuffle;
-        }
-
-        void makeRandomSortedSequence()
-        {
-            std::sort( arrData.begin(), arrData.end(), sortValue );
-            restoreLinks();
-        }
-
-        static bool sortAsc( const Data& p1, const Data&p2 )
-        {
-            return p1.key < p2.key;
-        }
-
-        void makeAscSortedSequence()
-        {
-            // Ã‘îðòèðóåò Ã¬Ã Ã±Ã±Ã¨Ã¢ Ã¢ Ã¯Ã®Ã°Ã¿Ã¤ÃªÃ¥ Ã¢Ã®Ã§Ã°Ã Ã±Ã²Ã Ã­Ã¨Ã¿ ÃªÃ«Ã¾Ã·Ã¥Ã©
-            std::sort( arrData.begin(), arrData.end(), sortAsc );
-            restoreLinks();
-        }
-
-        static bool sortDesc( const Data& p1, const Data&p2 )
-        {
-            return p2.key < p1.key;
-        }
-
-        void makeDescSortedSequence()
-        {
-            // Ã‘îðòèðóåò Ã¬Ã Ã±Ã±Ã¨Ã¢ Ã¢ Ã¯Ã®Ã°Ã¿Ã¤ÃªÃ¥ Ã³Ã¡Ã»Ã¢Ã Ã­Ã¨Ã¿ ÃªÃ«Ã¾Ã·Ã¥Ã©
-            std::sort( arrData.begin(), arrData.end(), sortDesc );
-            restoreLinks();
-        }
-
-        void clearAccess()
-        {
-            size_t nMax = arrData.capacity();
-            for ( size_t i = 0; i < nMax; ++i )
-                arrData[i].value.nAccess.reset( cds::membar_relaxed::order );
-        }
-    };
-
-} } // namespace map::nonconcurrent_iterator
-
-#endif    // #ifndef CDSUNIT_NONCONCURRENT_ITERATOR_SEQUENCE_H
diff --git a/tests/unit/pqueue/CMakeLists.txt b/tests/unit/pqueue/CMakeLists.txt
deleted file mode 100644 (file)
index ae2a6d8..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-set(PACKAGE_NAME cdsu-pqueue)
-
-set(CDSUNIT_PQUEUE_SOURCES
-    pop.cpp
-    push.cpp
-    push_pop.cpp)
-
-add_executable(${PACKAGE_NAME} ${CDSUNIT_PQUEUE_SOURCES} $<TARGET_OBJECTS:${TEST_COMMON}>)
-target_link_libraries(${PACKAGE_NAME} ${CDS_SHARED_LIBRARY} ${Boost_THREAD_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
-add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/tests/unit/pqueue/ellen_bintree_pqueue.h b/tests/unit/pqueue/ellen_bintree_pqueue.h
deleted file mode 100644 (file)
index f86fa1b..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_STD_ELLEN_BINTREE_PQUEUE_H
-#define CDSUNIT_STD_ELLEN_BINTREE_PQUEUE_H
-
-#include <cds/container/ellen_bintree_set_hp.h>
-#include <cds/container/ellen_bintree_set_dhp.h>
-#include <cds/urcu/general_instant.h>
-#include <cds/urcu/general_buffered.h>
-#include <cds/urcu/general_threaded.h>
-#include <cds/urcu/signal_buffered.h>
-#include <cds/urcu/signal_threaded.h>
-#include <cds/container/ellen_bintree_set_rcu.h>
-
-namespace pqueue {
-
-    template <typename GC>
-    struct EllenBinTreePQueue_pop_max
-    {
-        template <typename T, typename Tree>
-        bool operator()( T& dest, Tree& container ) const
-        {
-            typename Tree::guarded_ptr gp( container.extract_max());
-            if ( gp )
-                dest = *gp;
-            return !gp.empty();
-        }
-    };
-
-    template <typename RCU>
-    struct EllenBinTreePQueue_pop_max< cds::urcu::gc<RCU> >
-    {
-        template <typename T, typename Tree>
-        bool operator()( T& dest, Tree& container ) const
-        {
-            typename Tree::exempt_ptr ep( container.extract_max());
-            if ( ep )
-                dest = *ep;
-            return !ep.empty();
-        }
-    };
-
-    template <typename GC>
-    struct EllenBinTreePQueue_pop_min
-    {
-        template <typename T, typename Tree>
-        bool operator()( T& dest, Tree& container ) const
-        {
-            typename Tree::guarded_ptr gp( container.extract_min());
-            if ( gp )
-                dest = *gp;
-            return !gp.empty();
-        }
-    };
-
-    template <typename RCU>
-    struct EllenBinTreePQueue_pop_min< cds::urcu::gc<RCU> >
-    {
-        template <typename T, typename Tree>
-        bool operator()( T& dest, Tree& container ) const
-        {
-            typename Tree::exempt_ptr ep( container.extract_min());
-            if ( ep )
-                dest = *ep;
-            return !ep.empty();
-        }
-    };
-
-    template <typename GC, typename Key, typename T, typename Traits, bool Max=true>
-    class EllenBinTreePQueue: protected cds::container::EllenBinTreeSet< GC, Key, T, Traits >
-    {
-        typedef cds::container::EllenBinTreeSet< GC, Key, T, Traits > base_class;
-        typedef T value_type;
-        template <typename GC2> friend struct EllenBinTreePQueue_pop_max;
-        template <typename GC2> friend struct EllenBinTreePQueue_pop_min;
-
-    public:
-        bool push( value_type const& val )
-        {
-            return base_class::insert( val );
-        }
-
-        bool pop( value_type& dest )
-        {
-            return Max ? EllenBinTreePQueue_pop_max< typename base_class::gc >()( dest, *this )
-                       : EllenBinTreePQueue_pop_min< typename base_class::gc >()( dest, *this );
-        }
-
-        void clear()
-        {
-            base_class::clear();
-        }
-
-        bool empty() const
-        {
-            return base_class::empty();
-        }
-
-        size_t size() const
-        {
-            return base_class::size();
-        }
-
-        typename base_class::stat const& statistics() const
-        {
-            return base_class::statistics();
-        }
-    };
-
-} // namespace pqueue
-
-
-#endif // #ifndef CDSUNIT_STD_ELLEN_BINTREE_PQUEUE_H
diff --git a/tests/unit/pqueue/pop.cpp b/tests/unit/pqueue/pop.cpp
deleted file mode 100644 (file)
index 1ff6a77..0000000
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/thread.h"
-#include "pqueue/pqueue_item.h"
-#include "pqueue/pqueue_type.h"
-
-#include <vector>
-#include <memory>
-
-namespace pqueue {
-
-#define TEST_CASE( Q ) void Q() { test< Types<pqueue::SimpleValue>::Q >(); }
-#define TEST_BOUNDED( Q ) void Q() { test_bounded< Types<pqueue::SimpleValue>::Q >(); }
-
-    namespace {
-        static size_t s_nThreadCount = 8;
-        static size_t s_nQueueSize = 2000000;
-    }
-} // namespace pqueue
-
-namespace pqueue {
-
-    class PQueue_Pop: public CppUnitMini::TestCase
-    {
-
-        template <class PQueue>
-        class Pusher: public CppUnitMini::TestThread
-        {
-            virtual TestThread *    clone()
-            {
-                return new Pusher( *this );
-            }
-        public:
-            PQueue&             m_Queue;
-            size_t              m_nPushError;
-
-            typedef std::vector<size_t> array_type;
-            array_type          m_arr;
-
-        public:
-            Pusher( CppUnitMini::ThreadPool& pool, PQueue& q )
-                : CppUnitMini::TestThread( pool )
-                , m_Queue( q )
-            {}
-            Pusher( Pusher& src )
-                : CppUnitMini::TestThread( src )
-                , m_Queue( src.m_Queue )
-            {}
-
-            PQueue_Pop&  getTest()
-            {
-                return static_cast<PQueue_Pop&>( m_Pool.m_Test );
-            }
-
-            virtual void init()
-            {
-                cds::threading::Manager::attachThread();
-            }
-            virtual void fini()
-            {
-                cds::threading::Manager::detachThread();
-            }
-
-            virtual void test()
-            {
-                m_nPushError = 0;
-
-                for ( array_type::const_iterator it = m_arr.begin(); it != m_arr.end(); ++it ) {
-                    if ( !m_Queue.push( SimpleValue( *it ) ))
-                        ++m_nPushError;
-                }
-            }
-
-            void prepare( size_t nStart, size_t nEnd )
-            {
-                m_arr.reserve( nEnd - nStart );
-                for ( size_t i = nStart; i < nEnd; ++i )
-                    m_arr.push_back( i );
-                shuffle( m_arr.begin(), m_arr.end() );
-            }
-        };
-
-        template <class PQueue>
-        class Popper: public CppUnitMini::TestThread
-        {
-            virtual TestThread *    clone()
-            {
-                return new Popper( *this );
-            }
-        public:
-            PQueue&             m_Queue;
-            size_t              m_nPopError;
-            size_t              m_nPopErrorEq;
-            size_t              m_nPopSuccess;
-            size_t              m_nPopFailed;
-
-        public:
-            Popper( CppUnitMini::ThreadPool& pool, PQueue& q )
-                : CppUnitMini::TestThread( pool )
-                , m_Queue( q )
-            {}
-            Popper( Popper& src )
-                : CppUnitMini::TestThread( src )
-                , m_Queue( src.m_Queue )
-            {}
-
-            PQueue_Pop&  getTest()
-            {
-                return static_cast<PQueue_Pop&>( m_Pool.m_Test );
-            }
-
-            virtual void init()
-            {
-                cds::threading::Manager::attachThread();
-            }
-            virtual void fini()
-            {
-                cds::threading::Manager::detachThread();
-            }
-
-            virtual void test()
-            {
-                m_nPopError = 0;
-                m_nPopErrorEq = 0;
-                m_nPopSuccess = 0;
-                m_nPopFailed = 0;
-
-                size_t nPrevKey;
-                SimpleValue val;
-                if ( m_Queue.pop( val )) {
-                    ++m_nPopSuccess;
-                    nPrevKey = val.key;
-
-                    while ( !m_Queue.empty() ) {
-                        if ( m_Queue.pop( val )) {
-                            ++m_nPopSuccess;
-                            if ( val.key > nPrevKey )
-                                ++m_nPopError;
-                            else if ( val.key == nPrevKey )
-                                ++m_nPopErrorEq;
-                            nPrevKey = val.key;
-                        }
-                        else
-                            ++m_nPopFailed;
-                    }
-                }
-                else
-                    ++m_nPopFailed;
-            }
-        };
-
-    protected:
-        template <class PQueue>
-        void test()
-        {
-            PQueue testQueue;
-            test_with( testQueue );
-        }
-
-        template <class PQueue>
-        void test_bounded()
-        {
-            std::unique_ptr<PQueue> pq( new PQueue(s_nQueueSize) );
-            test_with( *pq.get() );
-        }
-
-        template <class PQueue>
-        void test_with( PQueue& testQueue )
-        {
-            size_t const nThreadItemCount = s_nQueueSize / s_nThreadCount;
-
-            // push
-            {
-                CppUnitMini::ThreadPool pool( *this );
-                pool.add( new Pusher<PQueue>( pool, testQueue ), s_nThreadCount );
-
-                size_t nStart = 0;
-                for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                    Pusher<PQueue> * pThread = static_cast<Pusher<PQueue> *>(*it);
-                    pThread->prepare( nStart, nStart + nThreadItemCount );
-                    nStart += nThreadItemCount;
-                }
-
-                CPPUNIT_MSG( "   Push, thread count=" << s_nThreadCount << ", item count=" << nThreadItemCount * s_nThreadCount << " ..." );
-                pool.run();
-                CPPUNIT_MSG( "     Duration=" << pool.avgDuration() );
-            }
-
-            // pop
-            {
-                CppUnitMini::ThreadPool pool( *this );
-                pool.add( new Popper<PQueue>( pool, testQueue ), s_nThreadCount );
-
-                CPPUNIT_MSG( "   Pop, thread count=" << s_nThreadCount << ", item count=" << nThreadItemCount * s_nThreadCount << " ..." );
-                pool.run();
-                CPPUNIT_MSG( "     Duration=" << pool.avgDuration() );
-
-                // Analyze result
-                size_t nTotalPopped = 0;
-                size_t nTotalError = 0;
-                size_t nTotalErrorEq = 0;
-                size_t nTotalFailed = 0;
-                for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                    Popper<PQueue> * pThread = static_cast<Popper<PQueue> *>(*it);
-
-                    nTotalPopped += pThread->m_nPopSuccess;
-                    nTotalError += pThread->m_nPopError;
-                    nTotalErrorEq += pThread->m_nPopErrorEq;
-                    nTotalFailed += pThread->m_nPopFailed;
-                }
-
-                CPPUNIT_MSG( "   Total: popped=" << nTotalPopped << ", empty pop=" << nTotalFailed
-                             << "\n  Errors: pop equal=" << nTotalErrorEq << ", priority violation=" << nTotalError
-                             );
-                CPPUNIT_CHECK( nTotalPopped == nThreadItemCount * s_nThreadCount );
-                CPPUNIT_CHECK( nTotalError == 0 );
-                CPPUNIT_CHECK( nTotalErrorEq == 0 );
-            }
-
-            CPPUNIT_MSG( testQueue.statistics() );
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg ) {
-            s_nThreadCount = cfg.getULong("ThreadCount", (unsigned long) s_nThreadCount );
-            s_nQueueSize = cfg.getULong("QueueSize", (unsigned long) s_nQueueSize );
-        }
-
-    protected:
-#include "pqueue/pqueue_defs.h"
-        CDSUNIT_DECLARE_MSPriorityQueue
-        CDSUNIT_DECLARE_EllenBinTree
-        CDSUNIT_DECLARE_SkipList
-        CDSUNIT_DECLARE_FCPriorityQueue
-        CDSUNIT_DECLARE_StdPQueue
-
-        CPPUNIT_TEST_SUITE_(PQueue_Pop, "PQueue_Push")
-            CDSUNIT_TEST_MSPriorityQueue
-            CDSUNIT_TEST_EllenBinTree
-            CDSUNIT_TEST_SkipList
-            CDSUNIT_TEST_FCPriorityQueue
-            CDUNIT_TEST_StdPQueue
-        CPPUNIT_TEST_SUITE_END();
-    };
-
-} // namespace queue
-
-CPPUNIT_TEST_SUITE_REGISTRATION(pqueue::PQueue_Pop);
diff --git a/tests/unit/pqueue/pqueue_defs.h b/tests/unit/pqueue/pqueue_defs.h
deleted file mode 100644 (file)
index 26c3f58..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_PQUEUE_PQUEUE_DEFS_H
-#define CDSUNIT_PQUEUE_PQUEUE_DEFS_H
-
-// MSPriorityQueue
-#define CDSUNIT_DECLARE_MSPriorityQueue \
-    TEST_BOUNDED(MSPriorityQueue_static_less)   \
-    TEST_BOUNDED(MSPriorityQueue_static_less_stat) \
-    TEST_BOUNDED(MSPriorityQueue_static_cmp)    \
-    TEST_BOUNDED(MSPriorityQueue_static_mutex)  \
-    TEST_BOUNDED(MSPriorityQueue_dyn_less)      \
-    TEST_BOUNDED(MSPriorityQueue_dyn_less_stat) \
-    TEST_BOUNDED(MSPriorityQueue_dyn_cmp)       \
-    TEST_BOUNDED(MSPriorityQueue_dyn_mutex)
-#define CDSUNIT_TEST_MSPriorityQueue    \
-    CPPUNIT_TEST(MSPriorityQueue_static_less)   \
-    CPPUNIT_TEST(MSPriorityQueue_static_less_stat) \
-    CPPUNIT_TEST(MSPriorityQueue_static_cmp)    \
-    CPPUNIT_TEST(MSPriorityQueue_static_mutex)  \
-    CPPUNIT_TEST(MSPriorityQueue_dyn_less)      \
-    CPPUNIT_TEST(MSPriorityQueue_dyn_less_stat) \
-    CPPUNIT_TEST(MSPriorityQueue_dyn_cmp)       \
-    CPPUNIT_TEST(MSPriorityQueue_dyn_mutex)
-
-
-// EllenBinTree
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-#   define CDSUNIT_DECLARE_EllenBinTree_RCU_signal  \
-        TEST_CASE(EllenBinTree_RCU_shb_max) \
-        TEST_CASE(EllenBinTree_RCU_shb_max_stat) \
-        TEST_CASE(EllenBinTree_RCU_shb_min) \
-        TEST_CASE(EllenBinTree_RCU_shb_min_stat) \
-        TEST_CASE(EllenBinTree_RCU_sht_max) \
-        TEST_CASE(EllenBinTree_RCU_sht_max_stat) \
-        TEST_CASE(EllenBinTree_RCU_sht_min) \
-        TEST_CASE(EllenBinTree_RCU_sht_min_stat)
-#   define CDSUNIT_TEST_EllenBinTree_RCU_signal \
-        CPPUNIT_TEST(EllenBinTree_RCU_shb_max)  \
-        CPPUNIT_TEST(EllenBinTree_RCU_shb_max_stat)  \
-        CPPUNIT_TEST(EllenBinTree_RCU_shb_min)  \
-        CPPUNIT_TEST(EllenBinTree_RCU_shb_min_stat)  \
-        CPPUNIT_TEST(EllenBinTree_RCU_sht_max)  \
-        CPPUNIT_TEST(EllenBinTree_RCU_sht_max_stat)  \
-        CPPUNIT_TEST(EllenBinTree_RCU_sht_min) \
-        CPPUNIT_TEST(EllenBinTree_RCU_sht_min_stat)
-#else
-#   define CDSUNIT_DECLARE_EllenBinTree_RCU_signal
-#   define CDSUNIT_TEST_EllenBinTree_RCU_signal
-#endif
-
-#define CDSUNIT_DECLARE_EllenBinTree    \
-    TEST_CASE(EllenBinTree_HP_max)          \
-    TEST_CASE(EllenBinTree_HP_max_stat)     \
-    TEST_CASE(EllenBinTree_HP_min)          \
-    TEST_CASE(EllenBinTree_HP_min_stat)     \
-    TEST_CASE(EllenBinTree_DHP_max)         \
-    TEST_CASE(EllenBinTree_DHP_max_stat)    \
-    TEST_CASE(EllenBinTree_DHP_min)         \
-    TEST_CASE(EllenBinTree_DHP_min_stat)    \
-    TEST_CASE(EllenBinTree_RCU_gpi_max)     \
-    TEST_CASE(EllenBinTree_RCU_gpi_max_stat)     \
-    TEST_CASE(EllenBinTree_RCU_gpi_min)     \
-    TEST_CASE(EllenBinTree_RCU_gpi_min_stat)     \
-    TEST_CASE(EllenBinTree_RCU_gpb_max)     \
-    TEST_CASE(EllenBinTree_RCU_gpb_max_stat)     \
-    TEST_CASE(EllenBinTree_RCU_gpb_min)     \
-    TEST_CASE(EllenBinTree_RCU_gpb_min_stat)     \
-    TEST_CASE(EllenBinTree_RCU_gpt_max)     \
-    TEST_CASE(EllenBinTree_RCU_gpt_max_stat)     \
-    TEST_CASE(EllenBinTree_RCU_gpt_min)     \
-    TEST_CASE(EllenBinTree_RCU_gpt_min_stat)     \
-    CDSUNIT_DECLARE_EllenBinTree_RCU_signal
-#define CDSUNIT_TEST_EllenBinTree       \
-    CPPUNIT_TEST(EllenBinTree_HP_max)       \
-    CPPUNIT_TEST(EllenBinTree_HP_max_stat)  \
-    CPPUNIT_TEST(EllenBinTree_HP_min)       \
-    CPPUNIT_TEST(EllenBinTree_HP_min_stat)  \
-    CPPUNIT_TEST(EllenBinTree_DHP_max)      \
-    CPPUNIT_TEST(EllenBinTree_DHP_max_stat) \
-    CPPUNIT_TEST(EllenBinTree_DHP_min)      \
-    CPPUNIT_TEST(EllenBinTree_DHP_min_stat) \
-    /*CPPUNIT_TEST(EllenBinTree_RCU_gpi_max)*/  \
-    /*CPPUNIT_TEST(EllenBinTree_RCU_gpi_max_stat)*/  \
-    /*CPPUNIT_TEST(EllenBinTree_RCU_gpi_min)*/  \
-    /*CPPUNIT_TEST(EllenBinTree_RCU_gpi_min_stat)*/  \
-    CPPUNIT_TEST(EllenBinTree_RCU_gpb_max)  \
-    CPPUNIT_TEST(EllenBinTree_RCU_gpb_max_stat)  \
-    CPPUNIT_TEST(EllenBinTree_RCU_gpb_min)  \
-    CPPUNIT_TEST(EllenBinTree_RCU_gpb_min_stat)  \
-    CPPUNIT_TEST(EllenBinTree_RCU_gpt_max)  \
-    CPPUNIT_TEST(EllenBinTree_RCU_gpt_max_stat)  \
-    CPPUNIT_TEST(EllenBinTree_RCU_gpt_min)  \
-    CPPUNIT_TEST(EllenBinTree_RCU_gpt_min_stat)  \
-    CDSUNIT_TEST_EllenBinTree_RCU_signal
-
-
-// SkipList
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-#   define CDSUNIT_DECLARE_SkipList_RCU_signal  \
-    TEST_CASE(SkipList_RCU_shb_max) \
-    TEST_CASE(SkipList_RCU_shb_min) \
-    TEST_CASE(SkipList_RCU_sht_max) \
-    TEST_CASE(SkipList_RCU_sht_min)
-#   define CDSUNIT_TEST_SkipList_RCU_signal \
-    CPPUNIT_TEST(SkipList_RCU_shb_max)  \
-    CPPUNIT_TEST(SkipList_RCU_shb_min)  \
-    CPPUNIT_TEST(SkipList_RCU_sht_max)  \
-    CPPUNIT_TEST(SkipList_RCU_sht_min)
-#else
-#   define CDSUNIT_DECLARE_SkipList_RCU_signal
-#   define CDSUNIT_TEST_SkipList_RCU_signal
-#endif
-
-#define CDSUNIT_DECLARE_SkipList    \
-    TEST_CASE(SkipList_HP_max)          \
-    TEST_CASE(SkipList_HP_max_stat)     \
-    TEST_CASE(SkipList_HP_min)          \
-    TEST_CASE(SkipList_HP_min_stat)     \
-    TEST_CASE(SkipList_DHP_max)         \
-    TEST_CASE(SkipList_DHP_max_stat)    \
-    TEST_CASE(SkipList_DHP_min)         \
-    TEST_CASE(SkipList_DHP_min_stat)    \
-    TEST_CASE(SkipList_RCU_gpi_max)     \
-    TEST_CASE(SkipList_RCU_gpi_min)     \
-    TEST_CASE(SkipList_RCU_gpb_max)     \
-    TEST_CASE(SkipList_RCU_gpb_min)     \
-    TEST_CASE(SkipList_RCU_gpt_max)     \
-    TEST_CASE(SkipList_RCU_gpt_min)     \
-    CDSUNIT_DECLARE_SkipList_RCU_signal
-#define CDSUNIT_TEST_SkipList       \
-    CPPUNIT_TEST(SkipList_HP_max)       \
-    CPPUNIT_TEST(SkipList_HP_max_stat)  \
-    CPPUNIT_TEST(SkipList_HP_min)       \
-    CPPUNIT_TEST(SkipList_HP_min_stat)  \
-    CPPUNIT_TEST(SkipList_DHP_max)      \
-    CPPUNIT_TEST(SkipList_DHP_max_stat) \
-    CPPUNIT_TEST(SkipList_DHP_min)      \
-    CPPUNIT_TEST(SkipList_DHP_min_stat) \
-    CPPUNIT_TEST(SkipList_RCU_gpi_max)  \
-    CPPUNIT_TEST(SkipList_RCU_gpi_min)  \
-    CPPUNIT_TEST(SkipList_RCU_gpb_max)  \
-    CPPUNIT_TEST(SkipList_RCU_gpb_min)  \
-    CPPUNIT_TEST(SkipList_RCU_gpt_max)  \
-    CPPUNIT_TEST(SkipList_RCU_gpt_min)  \
-    CDSUNIT_TEST_SkipList_RCU_signal
-
-// FCPriorityQueue
-#define CDSUNIT_DECLARE_FCPriorityQueue \
-    TEST_CASE(FCPQueue_vector)          \
-    TEST_CASE(FCPQueue_vector_stat)     \
-    TEST_CASE(FCPQueue_deque)           \
-    TEST_CASE(FCPQueue_deque_stat)      \
-    TEST_CASE(FCPQueue_boost_deque)          \
-    TEST_CASE(FCPQueue_boost_deque_stat)     \
-    TEST_CASE(FCPQueue_boost_stable_vector)  \
-    TEST_CASE(FCPQueue_boost_stable_vector_stat)
-
-#define CDSUNIT_TEST_FCPriorityQueue \
-    CPPUNIT_TEST(FCPQueue_vector)          \
-    CPPUNIT_TEST(FCPQueue_vector_stat)     \
-    CPPUNIT_TEST(FCPQueue_deque)           \
-    CPPUNIT_TEST(FCPQueue_deque_stat)      \
-    CPPUNIT_TEST(FCPQueue_boost_deque)          \
-    CPPUNIT_TEST(FCPQueue_boost_deque_stat)     \
-    CPPUNIT_TEST(FCPQueue_boost_stable_vector)  \
-    CPPUNIT_TEST(FCPQueue_boost_stable_vector_stat)
-
-// Std::priority_queue
-#define CDSUNIT_DECLARE_StdPQueue       \
-    TEST_CASE(StdPQueue_vector_spin)    \
-    TEST_CASE(StdPQueue_vector_mutex)   \
-    TEST_CASE(StdPQueue_deque_spin)     \
-    TEST_CASE(StdPQueue_deque_mutex)
-#define CDUNIT_TEST_StdPQueue           \
-    CPPUNIT_TEST(StdPQueue_vector_spin) \
-    CPPUNIT_TEST(StdPQueue_vector_mutex)\
-    CPPUNIT_TEST(StdPQueue_deque_spin)  \
-    CPPUNIT_TEST(StdPQueue_deque_mutex)
-
-
-#endif // #ifndef CDSUNIT_PQUEUE_PQUEUE_DEFS_H
diff --git a/tests/unit/pqueue/pqueue_item.h b/tests/unit/pqueue/pqueue_item.h
deleted file mode 100644 (file)
index 9032593..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_PQUEUE_ITEM_H
-#define CDSUNIT_PQUEUE_ITEM_H
-
-namespace pqueue {
-    struct SimpleValue {
-        size_t      key;
-
-        typedef size_t  key_type;
-
-        struct key_extractor {
-            void operator()( key_type& k, SimpleValue const& s ) const
-            {
-                k = s.key;
-            }
-        };
-
-        SimpleValue(): key(0) {}
-        SimpleValue( size_t n ): key(n) {}
-    };
-}
-
-namespace std {
-    template <>
-    struct less<pqueue::SimpleValue>
-    {
-        bool operator()( pqueue::SimpleValue const& k1, pqueue::SimpleValue const& k2 ) const
-        {
-            return k1.key < k2.key;
-        }
-
-        bool operator()( pqueue::SimpleValue const& k1, size_t k2 ) const
-        {
-            return k1.key < k2;
-        }
-
-        bool operator()( size_t k1, pqueue::SimpleValue const& k2 ) const
-        {
-            return k1 < k2.key;
-        }
-
-        bool operator()( size_t k1, size_t k2 ) const
-        {
-            return k1 < k2;
-        }
-    };
-
-    template <>
-    struct greater<pqueue::SimpleValue>
-    {
-        bool operator()( pqueue::SimpleValue const& k1, pqueue::SimpleValue const& k2 ) const
-        {
-            return k1.key > k2.key;
-        }
-
-        bool operator()( pqueue::SimpleValue const& k1, size_t k2 ) const
-        {
-            return k1.key > k2;
-        }
-
-        bool operator()( size_t k1, pqueue::SimpleValue const& k2 ) const
-        {
-            return k1 > k2.key;
-        }
-
-        bool operator()( size_t k1, size_t k2 ) const
-        {
-            return k1 > k2;
-        }
-    };
-
-} // namespace std
-
-#endif // #ifndef CDSUNIT_PQUEUE_ITEM_H
diff --git a/tests/unit/pqueue/pqueue_type.h b/tests/unit/pqueue/pqueue_type.h
deleted file mode 100644 (file)
index 9e5c607..0000000
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_PQUEUE_TYPES_H
-#define CDSUNIT_PQUEUE_TYPES_H
-
-#include <cds/container/mspriority_queue.h>
-#include <cds/container/fcpriority_queue.h>
-
-#include "pqueue/std_pqueue.h"
-#include "pqueue/ellen_bintree_pqueue.h"
-#include "pqueue/skiplist_pqueue.h"
-
-#include <vector>
-#include <deque>
-#include <boost/container/stable_vector.hpp>
-#include <boost/container/deque.hpp>
-#include <cds/sync/spinlock.h>
-
-#include "print_ellenbintree_stat.h"
-#include "print_skip_list_stat.h"
-#include "print_mspriorityqueue_stat.h"
-
-namespace pqueue {
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-
-    template <typename Value>
-    struct Types
-    {
-        static size_t const c_nBoundedCapacity = 1024 * 1024 * 16;
-
-        typedef std::less<Value>    less;
-
-        struct cmp {
-            int operator()( Value const& v1, Value const& v2 ) const
-            {
-                return less()( v1, v2 ) ? -1 : less()( v2, v1 ) ? 1 : 0;
-            }
-        };
-
-        typedef cds::urcu::gc< cds::urcu::general_instant<> >   rcu_gpi;
-        typedef cds::urcu::gc< cds::urcu::general_buffered<> >  rcu_gpb;
-        typedef cds::urcu::gc< cds::urcu::general_threaded<> >  rcu_gpt;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cds::urcu::gc< cds::urcu::signal_buffered<> >  rcu_shb;
-        typedef cds::urcu::gc< cds::urcu::signal_threaded<> >  rcu_sht;
-#endif
-
-
-        // MSPriorityQueue
-        struct traits_MSPriorityQueue_static_less : public
-            cc::mspriority_queue::make_traits <
-                co::buffer < co::v::static_buffer< char, c_nBoundedCapacity > >
-            > ::type
-        {};
-        typedef cc::MSPriorityQueue< Value, traits_MSPriorityQueue_static_less > MSPriorityQueue_static_less;
-
-        struct traits_MSPriorityQueue_static_less_stat : public cc::mspriority_queue::traits
-        {
-            typedef co::v::static_buffer< char, c_nBoundedCapacity > buffer;
-            typedef cc::mspriority_queue::stat<> stat;
-        };
-        typedef cc::MSPriorityQueue< Value, traits_MSPriorityQueue_static_less_stat > MSPriorityQueue_static_less_stat;
-
-        struct traits_MSPriorityQueue_static_cmp : public
-            cc::mspriority_queue::make_traits <
-                co::buffer< co::v::static_buffer< char, c_nBoundedCapacity > >
-                , co::compare < cmp >
-            > ::type
-        {};
-        typedef cc::MSPriorityQueue< Value, traits_MSPriorityQueue_static_cmp > MSPriorityQueue_static_cmp;
-
-        struct traits_MSPriorityQueue_static_mutex : public
-            cc::mspriority_queue::make_traits<
-                co::buffer< co::v::static_buffer< char, c_nBoundedCapacity > >
-                , co::lock_type<std::mutex>
-            >::type
-        {};
-        typedef cc::MSPriorityQueue< Value, traits_MSPriorityQueue_static_mutex > MSPriorityQueue_static_mutex;
-
-        struct traits_MSPriorityQueue_dyn_less : public
-            cc::mspriority_queue::make_traits<
-                co::buffer< co::v::dynamic_buffer< char > >
-            >::type
-        {};
-        typedef cc::MSPriorityQueue< Value, traits_MSPriorityQueue_dyn_less > MSPriorityQueue_dyn_less;
-
-        struct traits_MSPriorityQueue_dyn_less_stat : public
-            cc::mspriority_queue::make_traits <
-                co::buffer< co::v::dynamic_buffer< char > >
-                , co::stat < cc::mspriority_queue::stat<> >
-            > ::type
-        {};
-        typedef cc::MSPriorityQueue< Value, traits_MSPriorityQueue_dyn_less_stat > MSPriorityQueue_dyn_less_stat;
-
-        struct traits_MSPriorityQueue_dyn_cmp : public
-            cc::mspriority_queue::make_traits <
-                co::buffer< co::v::dynamic_buffer< char > >
-                , co::compare < cmp >
-            > ::type
-        {};
-        typedef cc::MSPriorityQueue< Value, traits_MSPriorityQueue_dyn_cmp > MSPriorityQueue_dyn_cmp;
-
-        struct traits_MSPriorityQueue_dyn_mutex : public
-            cc::mspriority_queue::make_traits <
-                co::buffer< co::v::dynamic_buffer< char > >
-                , co::lock_type < std::mutex >
-            > ::type
-        {};
-        typedef cc::MSPriorityQueue< Value, traits_MSPriorityQueue_dyn_mutex > MSPriorityQueue_dyn_mutex;
-
-
-        // Priority queue based on EllenBinTreeSet
-        struct traits_EllenBinTree_max :
-            public cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< typename Value::key_extractor >
-                ,cc::opt::less< std::less<Value> >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        {};
-        typedef EllenBinTreePQueue< cds::gc::HP, typename Value::key_type, Value, traits_EllenBinTree_max > EllenBinTree_HP_max;
-        typedef EllenBinTreePQueue< cds::gc::DHP, typename Value::key_type, Value, traits_EllenBinTree_max > EllenBinTree_DHP_max;
-        typedef EllenBinTreePQueue< rcu_gpi, typename Value::key_type, Value, traits_EllenBinTree_max > EllenBinTree_RCU_gpi_max;
-        typedef EllenBinTreePQueue< rcu_gpb, typename Value::key_type, Value, traits_EllenBinTree_max > EllenBinTree_RCU_gpb_max;
-        typedef EllenBinTreePQueue< rcu_gpt, typename Value::key_type, Value, traits_EllenBinTree_max > EllenBinTree_RCU_gpt_max;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef EllenBinTreePQueue< rcu_shb, typename Value::key_type, Value, traits_EllenBinTree_max > EllenBinTree_RCU_shb_max;
-        typedef EllenBinTreePQueue< rcu_sht, typename Value::key_type, Value, traits_EllenBinTree_max > EllenBinTree_RCU_sht_max;
-#endif
-
-        struct traits_EllenBinTree_max_stat :
-            public cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< typename Value::key_extractor >
-                ,cc::opt::less< std::less<Value> >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        {};
-        typedef EllenBinTreePQueue< cds::gc::HP, typename Value::key_type, Value, traits_EllenBinTree_max_stat > EllenBinTree_HP_max_stat;
-        typedef EllenBinTreePQueue< cds::gc::DHP, typename Value::key_type, Value, traits_EllenBinTree_max_stat > EllenBinTree_DHP_max_stat;
-        typedef EllenBinTreePQueue< rcu_gpi, typename Value::key_type, Value, traits_EllenBinTree_max_stat > EllenBinTree_RCU_gpi_max_stat;
-        typedef EllenBinTreePQueue< rcu_gpb, typename Value::key_type, Value, traits_EllenBinTree_max_stat > EllenBinTree_RCU_gpb_max_stat;
-        typedef EllenBinTreePQueue< rcu_gpt, typename Value::key_type, Value, traits_EllenBinTree_max_stat > EllenBinTree_RCU_gpt_max_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef EllenBinTreePQueue< rcu_shb, typename Value::key_type, Value, traits_EllenBinTree_max_stat > EllenBinTree_RCU_shb_max_stat;
-        typedef EllenBinTreePQueue< rcu_sht, typename Value::key_type, Value, traits_EllenBinTree_max_stat > EllenBinTree_RCU_sht_max_stat;
-#endif
-
-        struct traits_EllenBinTree_min :
-            public cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< typename Value::key_extractor >
-                ,cc::opt::less< std::greater<Value> >
-            >::type
-        {};
-        typedef EllenBinTreePQueue< cds::gc::HP, typename Value::key_type, Value, traits_EllenBinTree_min, false > EllenBinTree_HP_min;
-        typedef EllenBinTreePQueue< cds::gc::DHP, typename Value::key_type, Value, traits_EllenBinTree_min, false > EllenBinTree_DHP_min;
-        typedef EllenBinTreePQueue< rcu_gpi, typename Value::key_type, Value, traits_EllenBinTree_min, false > EllenBinTree_RCU_gpi_min;
-        typedef EllenBinTreePQueue< rcu_gpb, typename Value::key_type, Value, traits_EllenBinTree_min, false > EllenBinTree_RCU_gpb_min;
-        typedef EllenBinTreePQueue< rcu_gpt, typename Value::key_type, Value, traits_EllenBinTree_min, false > EllenBinTree_RCU_gpt_min;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef EllenBinTreePQueue< rcu_shb, typename Value::key_type, Value, traits_EllenBinTree_min, false > EllenBinTree_RCU_shb_min;
-        typedef EllenBinTreePQueue< rcu_sht, typename Value::key_type, Value, traits_EllenBinTree_min, false > EllenBinTree_RCU_sht_min;
-#endif
-
-        struct traits_EllenBinTree_min_stat :
-            public cc::ellen_bintree::make_set_traits<
-                cc::ellen_bintree::key_extractor< typename Value::key_extractor >
-                ,cc::opt::less< std::greater<Value> >
-                ,co::stat< cc::ellen_bintree::stat<> >
-            >::type
-        {};
-        typedef EllenBinTreePQueue< cds::gc::HP, typename Value::key_type, Value, traits_EllenBinTree_min_stat, false > EllenBinTree_HP_min_stat;
-        typedef EllenBinTreePQueue< cds::gc::DHP, typename Value::key_type, Value, traits_EllenBinTree_min_stat, false > EllenBinTree_DHP_min_stat;
-        typedef EllenBinTreePQueue< rcu_gpi, typename Value::key_type, Value, traits_EllenBinTree_min_stat, false > EllenBinTree_RCU_gpi_min_stat;
-        typedef EllenBinTreePQueue< rcu_gpb, typename Value::key_type, Value, traits_EllenBinTree_min_stat, false > EllenBinTree_RCU_gpb_min_stat;
-        typedef EllenBinTreePQueue< rcu_gpt, typename Value::key_type, Value, traits_EllenBinTree_min_stat, false > EllenBinTree_RCU_gpt_min_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef EllenBinTreePQueue< rcu_shb, typename Value::key_type, Value, traits_EllenBinTree_min_stat, false > EllenBinTree_RCU_shb_min_stat;
-        typedef EllenBinTreePQueue< rcu_sht, typename Value::key_type, Value, traits_EllenBinTree_min_stat, false > EllenBinTree_RCU_sht_min_stat;
-#endif
-
-        // Priority queue based on SkipListSet
-        struct traits_SkipList_max :
-            public cc::skip_list::make_traits <
-            cc::opt::less < std::less<Value> >
-            > ::type
-        {};
-        typedef SkipListPQueue< cds::gc::HP, Value, traits_SkipList_max > SkipList_HP_max;
-        typedef SkipListPQueue< cds::gc::DHP, Value, traits_SkipList_max > SkipList_DHP_max;
-        typedef SkipListPQueue< rcu_gpi, Value, traits_SkipList_max > SkipList_RCU_gpi_max;
-        typedef SkipListPQueue< rcu_gpb, Value, traits_SkipList_max > SkipList_RCU_gpb_max;
-        typedef SkipListPQueue< rcu_gpt, Value, traits_SkipList_max > SkipList_RCU_gpt_max;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SkipListPQueue< rcu_shb, Value, traits_SkipList_max > SkipList_RCU_shb_max;
-        typedef SkipListPQueue< rcu_sht, Value, traits_SkipList_max > SkipList_RCU_sht_max;
-#endif
-
-        struct traits_SkipList_max_stat :
-            public cc::skip_list::make_traits<
-                cc::opt::less< std::less<Value> >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        {};
-        typedef SkipListPQueue< cds::gc::HP, Value, traits_SkipList_max_stat > SkipList_HP_max_stat;
-        typedef SkipListPQueue< cds::gc::DHP, Value, traits_SkipList_max_stat > SkipList_DHP_max_stat;
-        typedef SkipListPQueue< rcu_gpi, Value, traits_SkipList_max_stat > SkipList_RCU_gpi_max_stat;
-        typedef SkipListPQueue< rcu_gpb, Value, traits_SkipList_max_stat > SkipList_RCU_gpb_max_stat;
-        typedef SkipListPQueue< rcu_gpt, Value, traits_SkipList_max_stat > SkipList_RCU_gpt_max_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SkipListPQueue< rcu_shb, Value, traits_SkipList_max_stat > SkipList_RCU_shb_max_stat;
-        typedef SkipListPQueue< rcu_sht, Value, traits_SkipList_max_stat > SkipList_RCU_sht_max_stat;
-#endif
-
-        struct traits_SkipList_min :
-            public cc::skip_list::make_traits<
-                cc::opt::less< std::greater<Value> >
-            >::type
-        {};
-        typedef SkipListPQueue< cds::gc::HP, Value, traits_SkipList_min, false > SkipList_HP_min;
-        typedef SkipListPQueue< cds::gc::DHP, Value, traits_SkipList_min, false > SkipList_DHP_min;
-        typedef SkipListPQueue< rcu_gpi, Value, traits_SkipList_min, false > SkipList_RCU_gpi_min;
-        typedef SkipListPQueue< rcu_gpb, Value, traits_SkipList_min, false > SkipList_RCU_gpb_min;
-        typedef SkipListPQueue< rcu_gpt, Value, traits_SkipList_min, false > SkipList_RCU_gpt_min;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SkipListPQueue< rcu_shb, Value, traits_SkipList_min, false > SkipList_RCU_shb_min;
-        typedef SkipListPQueue< rcu_sht, Value, traits_SkipList_min, false > SkipList_RCU_sht_min;
-#endif
-
-        struct traits_SkipList_min_stat :
-            public cc::skip_list::make_traits<
-                cc::opt::less< std::greater<Value> >
-                ,co::stat< cc::skip_list::stat<> >
-            >::type
-        {};
-        typedef SkipListPQueue< cds::gc::HP, Value, traits_SkipList_min_stat, false > SkipList_HP_min_stat;
-        typedef SkipListPQueue< cds::gc::DHP, Value, traits_SkipList_min_stat, false > SkipList_DHP_min_stat;
-        typedef SkipListPQueue< rcu_gpi, Value, traits_SkipList_min_stat, false > SkipList_RCU_gpi_min_stat;
-        typedef SkipListPQueue< rcu_gpb, Value, traits_SkipList_min_stat, false > SkipList_RCU_gpb_min_stat;
-        typedef SkipListPQueue< rcu_gpt, Value, traits_SkipList_min_stat, false > SkipList_RCU_gpt_min_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SkipListPQueue< rcu_shb, Value, traits_SkipList_min_stat, false > SkipList_RCU_shb_min_stat;
-        typedef SkipListPQueue< rcu_sht, Value, traits_SkipList_min_stat, false > SkipList_RCU_sht_min_stat;
-#endif
-
-
-        // FCPriorityQueue
-        struct traits_FCPQueue_stat : public
-            cds::container::fcpqueue::make_traits <
-            cds::opt::stat < cds::container::fcpqueue::stat<> >
-            > ::type
-        {};
-
-        typedef cds::container::FCPriorityQueue< Value >    FCPQueue_vector;
-        typedef cds::container::FCPriorityQueue< Value
-            ,std::priority_queue<Value>
-            ,traits_FCPQueue_stat
-        >    FCPQueue_vector_stat;
-
-        typedef cds::container::FCPriorityQueue< Value
-            ,std::priority_queue<Value, std::deque<Value> >
-        > FCPQueue_deque;
-        typedef cds::container::FCPriorityQueue< Value
-            ,std::priority_queue<Value, std::deque<Value> >
-            ,traits_FCPQueue_stat
-        > FCPQueue_deque_stat;
-
-        typedef cds::container::FCPriorityQueue< Value
-            ,std::priority_queue<Value, boost::container::deque<Value> >
-        > FCPQueue_boost_deque;
-        typedef cds::container::FCPriorityQueue< Value
-            ,std::priority_queue<Value, boost::container::deque<Value> >
-            ,traits_FCPQueue_stat
-        > FCPQueue_boost_deque_stat;
-
-        typedef cds::container::FCPriorityQueue< Value
-            ,std::priority_queue<Value, boost::container::stable_vector<Value> >
-        > FCPQueue_boost_stable_vector;
-        typedef cds::container::FCPriorityQueue< Value
-            ,std::priority_queue<Value, boost::container::stable_vector<Value> >
-            ,traits_FCPQueue_stat
-        > FCPQueue_boost_stable_vector_stat;
-
-        /// Standard priority_queue
-        typedef StdPQueue< Value, std::vector<Value>, cds::sync::spin> StdPQueue_vector_spin;
-        typedef StdPQueue< Value, std::vector<Value>, std::mutex >  StdPQueue_vector_mutex;
-        typedef StdPQueue< Value, std::deque<Value>, cds::sync::spin> StdPQueue_deque_spin;
-        typedef StdPQueue< Value, std::deque<Value>,  std::mutex >  StdPQueue_deque_mutex;
-    };
-
-
-    template <typename Stat>
-    static inline void check_statistics( Stat const& /*s*/ )
-    {}
-
-    static inline void check_statistics( cds::container::ellen_bintree::stat<> const& s )
-    {
-        CPPUNIT_CHECK_CURRENT( s.m_nInternalNodeCreated.get() == s.m_nInternalNodeDeleted.get() );
-        CPPUNIT_CHECK_CURRENT( s.m_nUpdateDescCreated.get() == s.m_nUpdateDescDeleted.get() );
-    }
-}   // namespace pqueue
-
-namespace std {
-
-    static inline std::ostream& operator <<( std::ostream& o, cds::container::fcpqueue::empty_stat const& )
-    {
-        return o;
-    }
-
-    static inline std::ostream& operator <<( std::ostream& o, cds::container::fcpqueue::stat<> const& s )
-    {
-        return o << "\tStatistics:\n"
-            << "\t              Push: " << s.m_nPush.get()         << "\n"
-            << "\t         Push move: " << s.m_nPushMove.get()     << "\n"
-            << "\t               Pop: " << s.m_nPop.get()          << "\n"
-            << "\t        Failed pop: " << s.m_nFailedPop.get()    << "\n"
-            << "\tFlat combining statistics:\n"
-            << "\t        Combining factor: " << s.combining_factor()         << "\n"
-            << "\t         Operation count: " << s.m_nOperationCount.get()    << "\n"
-            << "\t      Combine call count: " << s.m_nCombiningCount.get()    << "\n"
-            << "\t        Compact pub-list: " << s.m_nCompactPublicationList.get() << "\n"
-            << "\t   Deactivate pub-record: " << s.m_nDeactivatePubRecord.get()    << "\n"
-            << "\t     Activate pub-record: " << s.m_nActivatePubRecord.get() << "\n"
-            << "\t       Create pub-record: " << s.m_nPubRecordCreated.get()  << "\n"
-            << "\t       Delete pub-record: " << s.m_nPubRecordDeteted.get()  << "\n"
-            << "\t      Acquire pub-record: " << s.m_nAcquirePubRecCount.get()<< "\n"
-            << "\t      Release pub-record: " << s.m_nReleasePubRecCount.get()<< "\n";
-    }
-
-} // namespace std
-
-#endif // #ifndef CDSUNIT_PQUEUE_TYPES_H
diff --git a/tests/unit/pqueue/push.cpp b/tests/unit/pqueue/push.cpp
deleted file mode 100644 (file)
index 6305b09..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/thread.h"
-#include "pqueue/pqueue_item.h"
-#include "pqueue/pqueue_type.h"
-
-#include <vector>
-#include <memory>
-
-namespace pqueue {
-
-#define TEST_CASE( Q ) void Q() { test< Types<pqueue::SimpleValue>::Q >(); }
-#define TEST_BOUNDED( Q ) void Q() { test_bounded< Types<pqueue::SimpleValue>::Q >(); }
-
-    namespace {
-        static size_t s_nThreadCount = 8;
-        static size_t s_nQueueSize = 2000000;
-    }
-} // namespace pqueue
-
-namespace pqueue {
-
-    class PQueue_Push: public CppUnitMini::TestCase
-    {
-        template <class PQueue>
-        class Pusher: public CppUnitMini::TestThread
-        {
-            virtual TestThread *    clone()
-            {
-                return new Pusher( *this );
-            }
-        public:
-            PQueue&             m_Queue;
-            size_t              m_nPushError;
-
-            typedef std::vector<size_t> array_type;
-            array_type          m_arr;
-
-        public:
-            Pusher( CppUnitMini::ThreadPool& pool, PQueue& q )
-                : CppUnitMini::TestThread( pool )
-                , m_Queue( q )
-            {}
-            Pusher( Pusher& src )
-                : CppUnitMini::TestThread( src )
-                , m_Queue( src.m_Queue )
-            {}
-
-            PQueue_Push&  getTest()
-            {
-                return static_cast<PQueue_Push&>( m_Pool.m_Test );
-            }
-
-            virtual void init()
-            {
-                cds::threading::Manager::attachThread();
-            }
-            virtual void fini()
-            {
-                cds::threading::Manager::detachThread();
-            }
-
-            virtual void test()
-            {
-                m_nPushError = 0;
-
-                for ( array_type::const_iterator it = m_arr.begin(); it != m_arr.end(); ++it ) {
-                    if ( !m_Queue.push( SimpleValue( *it ) ))
-                        ++m_nPushError;
-                }
-            }
-
-            void prepare( size_t nStart, size_t nEnd )
-            {
-                m_arr.reserve( nEnd - nStart );
-                for ( size_t i = nStart; i < nEnd; ++i )
-                    m_arr.push_back( i );
-                shuffle( m_arr.begin(), m_arr.end() );
-            }
-        };
-
-    protected:
-        template <class PQueue>
-        void analyze( CppUnitMini::ThreadPool& pool, PQueue& testQueue  )
-        {
-            size_t nThreadItems = s_nQueueSize / s_nThreadCount;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                Pusher<PQueue> * pThread = static_cast<Pusher<PQueue> *>(*it);
-                CPPUNIT_CHECK_EX( pThread->m_nPushError == 0, "Thread push error count=" << pThread->m_nPushError );
-            }
-            CPPUNIT_MSG( "     Duration=" << pool.avgDuration() );
-            CPPUNIT_ASSERT( !testQueue.empty() );
-
-            typedef std::vector<size_t> vector_type;
-            vector_type arr;
-            arr.reserve( s_nQueueSize );
-
-            cds::OS::Timer      timer;
-            CPPUNIT_MSG( "   Pop (single-threaded)..." );
-            size_t nPopped = 0;
-            SimpleValue val;
-            while ( testQueue.pop( val )) {
-                nPopped++;
-                arr.push_back( val.key );
-            }
-            CPPUNIT_MSG( "     Duration=" << timer.duration() );
-
-            CPPUNIT_CHECK( arr.size() == nThreadItems * s_nThreadCount );
-            vector_type::const_iterator it = arr.begin();
-            size_t nPrev = *it;
-            ++it;
-            size_t nErrCount = 0;
-            for ( vector_type::const_iterator itEnd = arr.end(); it != itEnd; ++it ) {
-                if ( nPrev - 1 != *it ) {
-                    if ( ++nErrCount < 10 ) {
-                        CPPUNIT_CHECK_EX( nPrev - 1 == *it, "Expected=" << nPrev - 1 << ", current=" << *it );
-                    }
-                }
-                nPrev = *it;
-            }
-
-            CPPUNIT_CHECK_EX( nErrCount == 0, "Error count=" << nErrCount );
-        }
-
-        template <class PQueue>
-        void test()
-        {
-            PQueue testQueue;
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new Pusher<PQueue>( pool, testQueue ), s_nThreadCount );
-
-            size_t nStart = 0;
-            size_t nThreadItemCount = s_nQueueSize / s_nThreadCount;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                Pusher<PQueue> * pThread = static_cast<Pusher<PQueue> *>(*it);
-                pThread->prepare( nStart, nStart + nThreadItemCount );
-                nStart += nThreadItemCount;
-            }
-
-            CPPUNIT_MSG( "   Push test, thread count=" << s_nThreadCount << ", item count=" << nThreadItemCount * s_nThreadCount << " ..." );
-            pool.run();
-
-            analyze( pool, testQueue );
-
-            CPPUNIT_MSG( testQueue.statistics() );
-        }
-
-        template <class PQueue>
-        void test_bounded()
-        {
-            size_t nStart = 0;
-            size_t nThreadItemCount = s_nQueueSize / s_nThreadCount;
-
-            std::unique_ptr<PQueue> pq( new PQueue(s_nQueueSize) );
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new Pusher<PQueue>( pool, *pq ), s_nThreadCount );
-
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                Pusher<PQueue> * pThread = static_cast<Pusher<PQueue> *>(*it);
-                pThread->prepare( nStart, nStart + nThreadItemCount );
-                nStart += nThreadItemCount;
-            }
-
-            CPPUNIT_MSG( "   Push test, thread count=" << s_nThreadCount << ", item count=" << nThreadItemCount * s_nThreadCount << " ..." );
-            pool.run();
-
-            analyze( pool, *pq );
-
-            CPPUNIT_MSG( pq->statistics() );
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg ) {
-            s_nThreadCount = cfg.getULong("ThreadCount", (unsigned long) s_nThreadCount );
-            s_nQueueSize = cfg.getULong("QueueSize", (unsigned long) s_nQueueSize );
-        }
-
-    protected:
-#include "pqueue/pqueue_defs.h"
-        CDSUNIT_DECLARE_MSPriorityQueue
-        CDSUNIT_DECLARE_EllenBinTree
-        CDSUNIT_DECLARE_SkipList
-        CDSUNIT_DECLARE_FCPriorityQueue
-        CDSUNIT_DECLARE_StdPQueue
-
-        CPPUNIT_TEST_SUITE(PQueue_Push)
-            CDSUNIT_TEST_MSPriorityQueue
-            CDSUNIT_TEST_EllenBinTree
-            CDSUNIT_TEST_SkipList
-            CDSUNIT_TEST_FCPriorityQueue
-            CDUNIT_TEST_StdPQueue
-        CPPUNIT_TEST_SUITE_END();
-    };
-
-} // namespace queue
-
-CPPUNIT_TEST_SUITE_REGISTRATION(pqueue::PQueue_Push);
diff --git a/tests/unit/pqueue/push_pop.cpp b/tests/unit/pqueue/push_pop.cpp
deleted file mode 100644 (file)
index 10625e3..0000000
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/thread.h"
-#include "pqueue/pqueue_item.h"
-#include "pqueue/pqueue_type.h"
-
-#include <vector>
-#include <memory>
-
-namespace pqueue {
-
-#define TEST_CASE( Q ) void Q() { test< Types<pqueue::SimpleValue>::Q >(); }
-#define TEST_BOUNDED( Q ) void Q() { test_bounded< Types<pqueue::SimpleValue>::Q >(); }
-
-    namespace {
-        static size_t s_nPushThreadCount = 4;
-        static size_t s_nPopThreadCount = 4;
-        static size_t s_nQueueSize = 2000000;
-    }
-} // namespace pqueue
-
-namespace pqueue {
-
-    class PQueue_PushPop: public CppUnitMini::TestCase
-    {
-
-        template <class PQueue>
-        class Pusher: public CppUnitMini::TestThread
-        {
-            virtual TestThread *    clone()
-            {
-                return new Pusher( *this );
-            }
-        public:
-            PQueue&             m_Queue;
-            size_t              m_nPushError;
-
-            typedef std::vector<size_t> array_type;
-            array_type          m_arr;
-
-        public:
-            Pusher( CppUnitMini::ThreadPool& pool, PQueue& q )
-                : CppUnitMini::TestThread( pool )
-                , m_Queue( q )
-            {}
-            Pusher( Pusher& src )
-                : CppUnitMini::TestThread( src )
-                , m_Queue( src.m_Queue )
-            {}
-
-            PQueue_PushPop&  getTest()
-            {
-                return static_cast<PQueue_PushPop&>( m_Pool.m_Test );
-            }
-
-            virtual void init()
-            {
-                cds::threading::Manager::attachThread();
-            }
-            virtual void fini()
-            {
-                cds::threading::Manager::detachThread();
-            }
-
-            virtual void test()
-            {
-                m_nPushError = 0;
-
-                for ( array_type::const_iterator it = m_arr.begin(); it != m_arr.end(); ++it ) {
-                    if ( !m_Queue.push( SimpleValue( *it ) ))
-                        ++m_nPushError;
-                }
-
-                getTest().end_pusher();
-            }
-
-            void prepare( size_t nStart, size_t nEnd )
-            {
-                m_arr.reserve( nEnd - nStart );
-                for ( size_t i = nStart; i < nEnd; ++i )
-                    m_arr.push_back( i );
-                shuffle( m_arr.begin(), m_arr.end() );
-            }
-        };
-
-        template <class PQueue>
-        class Popper: public CppUnitMini::TestThread
-        {
-            virtual TestThread *    clone()
-            {
-                return new Popper( *this );
-            }
-        public:
-            PQueue&             m_Queue;
-            size_t              m_nPopSuccess;
-            size_t              m_nPopFailed;
-
-            typedef std::vector<size_t> array_type;
-            array_type          m_arr;
-
-        public:
-            Popper( CppUnitMini::ThreadPool& pool, PQueue& q )
-                : CppUnitMini::TestThread( pool )
-                , m_Queue( q )
-            {}
-            Popper( Popper& src )
-                : CppUnitMini::TestThread( src )
-                , m_Queue( src.m_Queue )
-            {}
-
-            PQueue_PushPop&  getTest()
-            {
-                return static_cast<PQueue_PushPop&>( m_Pool.m_Test );
-            }
-
-            virtual void init()
-            {
-                cds::threading::Manager::attachThread();
-            }
-            virtual void fini()
-            {
-                cds::threading::Manager::detachThread();
-            }
-
-            virtual void test()
-            {
-                m_nPopSuccess = 0;
-                m_nPopFailed = 0;
-
-                SimpleValue val;
-                while ( getTest().pushing() || !m_Queue.empty() ) {
-                    if ( m_Queue.pop( val ))
-                        ++m_nPopSuccess;
-                    else
-                        ++m_nPopFailed;
-                }
-            }
-        };
-
-        atomics::atomic<size_t>  m_nPusherCount;
-        void end_pusher()
-        {
-            m_nPusherCount.fetch_sub( 1, atomics::memory_order_relaxed );
-        }
-        bool pushing() const
-        {
-            return m_nPusherCount.load( atomics::memory_order_relaxed ) != 0;
-        }
-
-    protected:
-        template <class PQueue>
-        void test()
-        {
-            PQueue testQueue;
-            test_with( testQueue );
-        }
-
-        template <class PQueue>
-        void test_bounded()
-        {
-            std::unique_ptr<PQueue> pq( new PQueue(s_nQueueSize) );
-            test_with( *pq.get() );
-        }
-
-        template <class PQueue>
-        void test_with( PQueue& testQueue )
-        {
-            size_t const nThreadItemCount = s_nQueueSize / s_nPushThreadCount;
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new Pusher<PQueue>( pool, testQueue ), s_nPushThreadCount );
-
-            size_t nStart = 0;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                Pusher<PQueue> * pThread = static_cast<Pusher<PQueue> *>(*it);
-                pThread->prepare( nStart, nStart + nThreadItemCount );
-                nStart += nThreadItemCount;
-            }
-
-            pool.add( new Popper<PQueue>( pool, testQueue ), s_nPopThreadCount );
-
-            m_nPusherCount.store( s_nPushThreadCount, atomics::memory_order_release );
-            CPPUNIT_MSG( "   push thread count=" << s_nPushThreadCount << " pop thread count=" << s_nPopThreadCount
-                << ", item count=" << nThreadItemCount * s_nPushThreadCount << " ..." );
-            pool.run();
-            CPPUNIT_MSG( "     Duration=" << pool.avgDuration() );
-
-            // Analyze result
-            size_t nTotalPopped = 0;
-            size_t nPushFailed = 0;
-            size_t nPopFailed = 0;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                Popper<PQueue> * pPopper = dynamic_cast<Popper<PQueue> *>(*it);
-                if ( pPopper ) {
-                    nTotalPopped += pPopper->m_nPopSuccess;
-                    nPopFailed += pPopper->m_nPopFailed;
-                }
-                else {
-                    Pusher<PQueue> * pPusher = dynamic_cast<Pusher<PQueue> *>(*it);
-                    assert( pPusher );
-                    nPushFailed += pPusher->m_nPushError;
-                }
-            }
-
-            CPPUNIT_MSG( "   Total: popped=" << nTotalPopped << ", empty pop=" << nPopFailed << ", push error=" << nPushFailed );
-            CPPUNIT_CHECK( nTotalPopped == nThreadItemCount * s_nPushThreadCount );
-            CPPUNIT_CHECK( nPushFailed == 0 );
-
-            check_statistics( testQueue.statistics() );
-            CPPUNIT_MSG( testQueue.statistics() );
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg ) {
-            s_nPushThreadCount = cfg.getULong("PushThreadCount", (unsigned long) s_nPushThreadCount );
-            s_nPopThreadCount = cfg.getULong("PopThreadCount", (unsigned long) s_nPopThreadCount );
-            s_nQueueSize = cfg.getULong("QueueSize", (unsigned long) s_nQueueSize );
-        }
-
-    protected:
-#include "pqueue/pqueue_defs.h"
-        CDSUNIT_DECLARE_MSPriorityQueue
-        CDSUNIT_DECLARE_EllenBinTree
-        CDSUNIT_DECLARE_SkipList
-        CDSUNIT_DECLARE_FCPriorityQueue
-        CDSUNIT_DECLARE_StdPQueue
-
-        CPPUNIT_TEST_SUITE(PQueue_PushPop)
-            CDSUNIT_TEST_MSPriorityQueue
-            CDSUNIT_TEST_EllenBinTree
-            CDSUNIT_TEST_SkipList
-            CDSUNIT_TEST_FCPriorityQueue
-            CDUNIT_TEST_StdPQueue
-        CPPUNIT_TEST_SUITE_END();
-    };
-
-} // namespace queue
-
-CPPUNIT_TEST_SUITE_REGISTRATION(pqueue::PQueue_PushPop);
diff --git a/tests/unit/pqueue/skiplist_pqueue.h b/tests/unit/pqueue/skiplist_pqueue.h
deleted file mode 100644 (file)
index 93ee15c..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_SKIPLIST_PQUEUE_H
-#define CDSUNIT_SKIPLIST_PQUEUE_H
-
-#include <cds/container/skip_list_set_hp.h>
-#include <cds/container/skip_list_set_dhp.h>
-#include <cds/urcu/general_instant.h>
-#include <cds/urcu/general_buffered.h>
-#include <cds/urcu/general_threaded.h>
-#include <cds/urcu/signal_buffered.h>
-#include <cds/urcu/signal_threaded.h>
-#include <cds/container/skip_list_set_rcu.h>
-
-namespace pqueue {
-
-    template <typename GC>
-    struct SkipListPQueue_pop_max
-    {
-        template <typename T, typename Set>
-        bool operator()( T& dest, Set& container ) const
-        {
-            typename Set::guarded_ptr gp( container.extract_max());
-            if ( gp )
-                dest = *gp;
-            return !gp.empty();
-        }
-    };
-
-    template <typename RCU>
-    struct SkipListPQueue_pop_max< cds::urcu::gc<RCU> >
-    {
-        template <typename T, typename Set>
-        bool operator()( T& dest, Set& container ) const
-        {
-            typename Set::exempt_ptr ep( container.extract_max());
-            if ( ep )
-                dest = *ep;
-            return !ep.empty();
-        }
-    };
-
-    template <typename GC>
-    struct SkipListPQueue_pop_min
-    {
-        template <typename T, typename Set>
-        bool operator()( T& dest, Set& container ) const
-        {
-            typename Set::guarded_ptr gp( container.extract_min());
-            if ( gp )
-                dest = *gp;
-            return !gp.empty();
-        }
-    };
-
-    template <typename RCU>
-    struct SkipListPQueue_pop_min< cds::urcu::gc<RCU> >
-    {
-        template <typename T, typename Set>
-        bool operator()( T& dest, Set& container ) const
-        {
-            typename Set::exempt_ptr ep( container.extract_min());
-            if ( ep )
-                dest = *ep;
-            return !ep.empty();
-        }
-    };
-
-    template <typename GC, typename T, typename Traits, bool Max=true>
-    class SkipListPQueue: protected cds::container::SkipListSet< GC, T, Traits >
-    {
-        typedef cds::container::SkipListSet< GC, T, Traits > base_class;
-        typedef T value_type;
-        template <typename GC2> friend struct SkipListPQueue_pop_max;
-        template <typename GC2> friend struct SkipListPQueue_pop_min;
-
-    public:
-        bool push( value_type const& val )
-        {
-            return base_class::insert( val );
-        }
-
-        bool pop( value_type& dest )
-        {
-            return Max ? SkipListPQueue_pop_max< typename base_class::gc >()( dest, *this )
-                       : SkipListPQueue_pop_min< typename base_class::gc >()( dest, *this );
-        }
-
-        void clear()
-        {
-            base_class::clear();
-        }
-
-        bool empty() const
-        {
-            return base_class::empty();
-        }
-
-        size_t size() const
-        {
-            return base_class::size();
-        }
-
-        typename base_class::stat const& statistics() const
-        {
-            return base_class::statistics();
-        }
-    };
-
-} // namespace pqueue
-
-#endif // #ifndef CDSUNIT_SKIPLIST_PQUEUE_H
diff --git a/tests/unit/pqueue/std_pqueue.h b/tests/unit/pqueue/std_pqueue.h
deleted file mode 100644 (file)
index 9fe1981..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_STD_PQUEUE_H
-#define CDSUNIT_STD_PQUEUE_H
-
-#include <queue>
-#include <mutex>    //unique_lock
-
-namespace pqueue {
-
-    struct dummy_stat {};
-
-    template <typename T, typename Container, typename Lock, typename Less=std::less<typename Container::value_type> >
-    class StdPQueue
-    {
-        typedef T value_type;
-        typedef std::priority_queue<value_type, Container, Less> pqueue_type;
-
-        pqueue_type     m_PQueue;
-        mutable Lock    m_Lock;
-
-        typedef std::unique_lock<Lock> scoped_lock;
-
-    public:
-        bool push( value_type const& val )
-        {
-            scoped_lock l( m_Lock );
-            m_PQueue.push( val );
-            return true;
-        }
-
-        bool pop( value_type& dest )
-        {
-            scoped_lock l( m_Lock );
-            if ( !m_PQueue.empty() ) {
-                dest = m_PQueue.top();
-                m_PQueue.pop();
-                return true;
-            }
-            return false;
-        }
-
-        template <typename Q, typename MoveFunc>
-        bool pop_with( Q& dest, MoveFunc f )
-        {
-            scoped_lock l( m_Lock );
-            if ( !m_PQueue.empty() ) {
-                f( dest, m_PQueue.top());
-                m_PQueue.pop();
-                return true;
-            }
-            return false;
-        }
-
-        void clear()
-        {
-            scoped_lock l( m_Lock );
-            while ( !m_PQueue.empty() )
-                m_PQueue.pop();
-        }
-
-        template <typename Func>
-        void clear_with( Func f )
-        {
-            scoped_lock l( m_Lock );
-            while ( !m_PQueue.empty() ) {
-                f( m_PQueue.top() );
-                m_PQueue.pop();
-            }
-        }
-
-        bool empty() const
-        {
-            return m_PQueue.empty();
-        }
-
-        size_t size() const
-        {
-            return m_PQueue.size();
-        }
-
-        dummy_stat statistics() const
-        {
-            return dummy_stat();
-        }
-    };
-
-} // namespace pqueue
-
-namespace std {
-    static inline ostream& operator <<( ostream& o, pqueue::dummy_stat )
-    {
-        return o;
-    }
-}
-
-#endif // #ifndef CDSUNIT_STD_PQUEUE_H
diff --git a/tests/unit/print_bronsonavltree_stat.h b/tests/unit/print_bronsonavltree_stat.h
deleted file mode 100644 (file)
index a34c592..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_PRINT_BRONSONAVLTREE_STAT_H
-#define CDSUNIT_PRINT_BRONSONAVLTREE_STAT_H
-
-#include <ostream>
-
-namespace std {
-
-    static inline ostream& operator <<( ostream& o, cds::container::bronson_avltree::empty_stat const& /*s*/ )
-    {
-        return o;
-    }
-
-    static inline ostream& operator <<(ostream& o, cds::container::bronson_avltree::stat<> const& s)
-    {
-        return o << "\nBronsonAVLTree statistics [cds::container::bronson_avltree::stat]:\n"
-            << "\t\t             m_nFindSuccess: " << s.m_nFindSuccess.get()         << "\n"
-            << "\t\t              m_nFindFailed: " << s.m_nFindFailed.get()          << "\n"
-            << "\t\t               m_nFindRetry: " << s.m_nFindRetry.get()           << "\n"
-            << "\t\t       m_nFindWaitShrinking: " << s.m_nFindWaitShrinking.get()   << "\n"
-            << "\t\t           m_nInsertSuccess: " << s.m_nInsertSuccess.get()       << "\n"
-            << "\t\t            m_nInsertFailed: " << s.m_nInsertFailed.get()        << "\n"
-            << "\t\t     m_nRelaxedInsertFailed: " << s.m_nRelaxedInsertFailed.get() << "\n"
-            << "\t\t             m_nInsertRetry: " << s.m_nInsertRetry.get()         << "\n"
-            << "\t\t     m_nUpdateWaitShrinking: " << s.m_nUpdateWaitShrinking.get() << "\n"
-            << "\t\t             m_nUpdateRetry: " << s.m_nUpdateRetry.get()         << "\n"
-            << "\t\t m_nUpdateRootWaitShrinking: " << s.m_nUpdateRootWaitShrinking.get() << "\n"
-            << "\t\t           m_nUpdateSuccess: " << s.m_nUpdateSuccess.get()       << "\n"
-            << "\t\t          m_nUpdateUnlinked: " << s.m_nUpdateUnlinked.get()      << "\n"
-            << "\t\t           m_nRemoveSuccess: " << s.m_nRemoveSuccess.get()       << "\n"
-            << "\t\t            m_nRemoveFailed: " << s.m_nRemoveFailed.get()        << "\n"
-            << "\t\t             m_nRemoveRetry: " << s.m_nRemoveRetry.get()         << "\n"
-            << "\t\t          m_nExtractSuccess: " << s.m_nExtractSuccess.get()      << "\n"
-            << "\t\t           m_nExtractFailed: " << s.m_nExtractFailed.get()       << "\n"
-            << "\t\t     m_nRemoveWaitShrinking: " << s.m_nRemoveWaitShrinking.get() << "\n"
-            << "\t\t m_nRemoveRootWaitShrinking: " << s.m_nRemoveRootWaitShrinking.get() << "\n"
-            << "\t\t         m_nMakeRoutingNode: " << s.m_nMakeRoutingNode.get()     << "\n"
-            << "\t\t           m_nDisposedValue: " << s.m_nDisposedValue.get()       << "\n"
-            << "\t\t            m_nDisposedNode: " << s.m_nDisposedNode.get()        << "\n"
-            << "\t\t          m_nExtractedValue: " << s.m_nExtractedValue.get()      << "\n"
-            << "\t\t           m_nRightRotation: " << s.m_nRightRotation.get()       << "\n"
-            << "\t\t            m_nLeftRotation: " << s.m_nLeftRotation.get()        << "\n"
-            << "\t\t       m_nLeftRightRotation: " << s.m_nLeftRightRotation.get()   << "\n"
-            << "\t\t       m_nRightLeftRotation: " << s.m_nRightLeftRotation.get()   << "\n"
-            << "\t\t      m_nInsertRebalanceReq: " << s.m_nInsertRebalanceReq.get()  << "\n"
-            << "\t\t      m_nRemoveRebalanceReq: " << s.m_nRemoveRebalanceReq.get()  << "\n"
-            << "\t\tm_nRotateAfterRightRotation: " << s.m_nRotateAfterRightRotation.get() << "\n"
-            << "\t\tm_nRemoveAfterRightRotation: " << s.m_nRemoveAfterRightRotation.get() << "\n"
-            << "\t\tm_nDamageAfterRightRotation: " << s.m_nDamageAfterRightRotation.get() << "\n"
-            << "\t\t m_nRotateAfterLeftRotation: " << s.m_nRotateAfterLeftRotation.get() << "\n"
-            << "\t\t m_nRemoveAfterLeftRotation: " << s.m_nRemoveAfterLeftRotation.get() << "\n"
-            << "\t\t m_nDamageAfterLeftRotation: " << s.m_nDamageAfterLeftRotation.get() << "\n"
-            << "\t\t   m_nRotateAfterRLRotation: " << s.m_nRotateAfterRLRotation.get() << "\n"
-            << "\t\t   m_nRemoveAfterRLRotation: " << s.m_nRemoveAfterRLRotation.get() << "\n"
-            << "\t\t   m_nRotateAfterLRRotation: " << s.m_nRotateAfterLRRotation.get() << "\n"
-            << "\t\t   m_nRemoveAfterLRRotation: " << s.m_nRemoveAfterLRRotation.get() << "\n";
-    }
-} //namespace std
-
-#endif // #ifndef CDSUNIT_PRINT_ELLENBINTREE_STAT_H
diff --git a/tests/unit/print_cuckoo_stat.h b/tests/unit/print_cuckoo_stat.h
deleted file mode 100644 (file)
index 246599a..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_PRINT_CUCKOO_STAT_H
-#define CDSUNIT_PRINT_CUCKOO_STAT_H
-
-#include <cds/intrusive/cuckoo_set.h>
-#include <ostream>
-
-namespace std {
-
-    static inline ostream& operator <<( ostream& o, cds::intrusive::cuckoo::striping_stat const& s )
-    {
-        return o << "\tStriping statistis [cds::intrusive::cuckoo::striping_stat]:\n"
-            << "\t\t    m_nCellLockCount: " << s.m_nCellLockCount.get()     << "\n"
-            << "\t\t m_nCellTryLockCount: " << s.m_nCellTryLockCount.get()  << "\n"
-            << "\t\t    m_nFullLockCount: " << s.m_nFullLockCount.get()     << "\n"
-            << "\t\t  m_nResizeLockCount: " << s.m_nResizeLockCount.get()   << "\n"
-            << "\t\t      m_nResizeCount: " << s.m_nResizeCount.get()       << "\n"
-;
-    }
-    static inline ostream& operator <<( ostream& o, cds::intrusive::cuckoo::empty_striping_stat const& /*s*/ )
-    {
-        return o;
-    }
-
-    static inline ostream& operator <<( ostream& o, cds::intrusive::cuckoo::refinable_stat const& s )
-    {
-        return o << "\tRefinable statistics [cds::intrusive::cuckoo::refinable_stat]:\n"
-            << "\t\t          m_nCellLockCount: " << s.m_nCellLockCount.get()           << "\n"
-            << "\t\t   m_nCellLockWaitResizing: " << s.m_nCellLockWaitResizing.get()    << "\n"
-            << "\t\t   m_nCellLockArrayChanged: " << s.m_nCellLockArrayChanged.get()    << "\n"
-            << "\t\t         m_nCellLockFailed: " << s.m_nCellLockFailed.get()          << "\n"
-            << "\t\t    m_nSecondCellLockCount: " << s.m_nSecondCellLockCount.get()     << "\n"
-            << "\t\t   m_nSecondCellLockFailed: " << s.m_nSecondCellLockFailed.get()    << "\n"
-            << "\t\t          m_nFullLockCount: " << s.m_nFullLockCount.get()           << "\n"
-            << "\t\t           m_nFullLockIter: " << s.m_nFullLockIter.get()            << "\n"
-            << "\t\t        m_nResizeLockCount: " << s.m_nResizeLockCount.get()         << "\n"
-            << "\t\t         m_nResizeLockIter: " << s.m_nResizeLockIter.get()          << "\n"
-            << "\t\t m_nResizeLockArrayChanged: " << s.m_nResizeLockArrayChanged.get()  << "\n"
-            << "\t\t            m_nResizeCount: " << s.m_nResizeCount.get()             << "\n"
-;
-    }
-    static inline ostream& operator <<( ostream& o, cds::intrusive::cuckoo::empty_refinable_stat const& /*s*/ )
-    {
-        return o;
-    }
-
-    static inline ostream& operator <<( ostream& o, cds::intrusive::cuckoo::stat const& s )
-    {
-        return o << "\tCuckoo stat [cds::intrusive::cuckoo::stat]:\n"
-            << "\t\t           m_nRelocateCallCount: " << s.m_nRelocateCallCount.get()              << "\n"
-            << "\t\t          m_nRelocateRoundCount: " << s.m_nRelocateRoundCount.get()             << "\n"
-            << "\t\t          m_nFalseRelocateCount: " << s.m_nFalseRelocateCount.get()             << "\n"
-            << "\t\t        m_nSuccessRelocateCount: " << s.m_nSuccessRelocateCount.get()           << "\n"
-            << "\t\t m_nRelocateAboveThresholdCount: " << s.m_nRelocateAboveThresholdCount.get()    << "\n"
-            << "\t\t         m_nFailedRelocateCount: " << s.m_nFailedRelocateCount.get()            << "\n"
-            << "\t\t             m_nResizeCallCount: " << s.m_nResizeCallCount.get()                << "\n"
-            << "\t\t            m_nFalseResizeCount: " << s.m_nFalseResizeCount.get()               << "\n"
-            << "\t\t       m_nResizeSuccessNodeMove: " << s.m_nResizeSuccessNodeMove.get()          << "\n"
-            << "\t\t          m_nResizeRelocateCall: " << s.m_nResizeRelocateCall.get()             << "\n"
-            << "\t\t               m_nInsertSuccess: " << s.m_nInsertSuccess.get()                  << "\n"
-            << "\t\t                m_nInsertFailed: " << s.m_nInsertFailed.get()                   << "\n"
-            << "\t\t           m_nInsertResizeCount: " << s.m_nInsertResizeCount.get()              << "\n"
-            << "\t\t         m_nInsertRelocateCount: " << s.m_nInsertRelocateCount.get()            << "\n"
-            << "\t\t         m_nInsertRelocateFault: " << s.m_nInsertRelocateFault.get()            << "\n"
-            << "\t\t            m_nUpdateExistCount: " << s.m_nUpdateExistCount.get()               << "\n"
-            << "\t\t          m_nUpdateSuccessCount: " << s.m_nUpdateSuccessCount.get()             << "\n"
-            << "\t\t           m_nUpdateResizeCount: " << s.m_nUpdateResizeCount.get()              << "\n"
-            << "\t\t         m_nUpdateRelocateCount: " << s.m_nUpdateRelocateCount.get()            << "\n"
-            << "\t\t         m_nUpdateRelocateFault: " << s.m_nUpdateRelocateFault.get()            << "\n"
-            << "\t\t               m_nUnlinkSuccess: " << s.m_nUnlinkSuccess.get()                  << "\n"
-            << "\t\t                m_nUnlinkFailed: " << s.m_nUnlinkFailed.get()                   << "\n"
-            << "\t\t                m_nEraseSuccess: " << s.m_nEraseSuccess.get()                   << "\n"
-            << "\t\t                 m_nEraseFailed: " << s.m_nEraseFailed.get()                    << "\n"
-            << "\t\t                 m_nFindSuccess: " << s.m_nFindSuccess.get()                    << "\n"
-            << "\t\t                  m_nFindFailed: " << s.m_nFindFailed.get()                     << "\n"
-            << "\t\t             m_nFindWithSuccess: " << s.m_nFindWithSuccess.get()                << "\n"
-            << "\t\t              m_nFindWithFailed: " << s.m_nFindWithFailed.get()                 << "\n"
-;
-    }
-
-    static inline ostream& operator <<( ostream& o, cds::intrusive::cuckoo::empty_stat const& /*s*/ )
-    {
-        return o;
-    }
-
-} // namespace std
-
-#endif // #ifndef CDSUNIT_PRINT_CUCKOO_STAT_H
diff --git a/tests/unit/print_ellenbintree_stat.h b/tests/unit/print_ellenbintree_stat.h
deleted file mode 100644 (file)
index 76cece5..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_PRINT_ELLENBINTREE_STAT_H
-#define CDSUNIT_PRINT_ELLENBINTREE_STAT_H
-
-#include "ellen_bintree_update_desc_pool.h"
-#include <ostream>
-
-namespace std {
-    static inline ostream& operator <<( ostream& o, cds::intrusive::ellen_bintree::empty_stat const& /*s*/ )
-    {
-        return o;
-    }
-
-    static inline ostream& operator <<( ostream& o, cds::intrusive::ellen_bintree::stat<> const& s )
-    {
-        return o << "\nEllenBinTree statistics [cds::intrusive::ellen_bintree::stat]:\n"
-            << "\t\t   Internal node allocated: " << ellen_bintree_pool::internal_node_counter::m_nAlloc.get() << "\n"
-            << "\t\t       Internal node freed: " << ellen_bintree_pool::internal_node_counter::m_nFree.get() << "\n"
-            << "\t\t    m_nInternalNodeCreated: " << s.m_nInternalNodeCreated.get()   << "\n"
-            << "\t\t    m_nInternalNodeDeleted: " << s.m_nInternalNodeDeleted.get()   << "\n"
-            << "\t\t      m_nUpdateDescCreated: " << s.m_nUpdateDescCreated.get()     << "\n"
-            << "\t\t      m_nUpdateDescDeleted: " << s.m_nUpdateDescDeleted.get()     << "\n"
-            << "\t\t          m_nInsertSuccess: " << s.m_nInsertSuccess.get()         << "\n"
-            << "\t\t           m_nInsertFailed: " << s.m_nInsertFailed.get()          << "\n"
-            << "\t\t          m_nInsertRetries: " << s.m_nInsertRetries.get()         << "\n"
-            << "\t\t            m_nEnsureExist: " << s.m_nEnsureExist.get()           << "\n"
-            << "\t\t              m_nEnsureNew: " << s.m_nEnsureNew.get()             << "\n"
-            << "\t\t          m_nEnsureRetries: " << s.m_nEnsureRetries.get()         << "\n"
-            << "\t\t           m_nEraseSuccess: " << s.m_nEraseSuccess.get()          << "\n"
-            << "\t\t            m_nEraseFailed: " << s.m_nEraseFailed.get()           << "\n"
-            << "\t\t           m_nEraseRetries: " << s.m_nEraseRetries.get()          << "\n"
-            << "\t\t            m_nFindSuccess: " << s.m_nFindSuccess.get()           << "\n"
-            << "\t\t             m_nFindFailed: " << s.m_nFindFailed.get()            << "\n"
-            << "\t\t      m_nExtractMinSuccess: " << s.m_nExtractMinSuccess.get()     << "\n"
-            << "\t\t       m_nExtractMinFailed: " << s.m_nExtractMinFailed.get()      << "\n"
-            << "\t\t      m_nExtractMinRetries: " << s.m_nExtractMinRetries.get()     << "\n"
-            << "\t\t      m_nExtractMaxSuccess: " << s.m_nExtractMaxSuccess.get()     << "\n"
-            << "\t\t       m_nExtractMaxFailed: " << s.m_nExtractMaxFailed.get()      << "\n"
-            << "\t\t      m_nExtractMaxRetries: " << s.m_nExtractMaxRetries.get()     << "\n"
-            << "\t\t            m_nSearchRetry: " << s.m_nSearchRetry.get()           << "\n"
-            << "\t\t             m_nHelpInsert: " << s.m_nHelpInsert.get()            << "\n"
-            << "\t\t             m_nHelpDelete: " << s.m_nHelpDelete.get()            << "\n"
-            << "\t\t               m_nHelpMark: " << s.m_nHelpMark.get()              << "\n"
-            << "\t\t       m_nHelpGuardSuccess: " << s.m_nHelpGuardSuccess.get()      << "\n"
-            << "\t\t        m_nHelpGuardFailed: " << s.m_nHelpGuardFailed.get()       << "\n";
-    }
-}
-
-#endif // #ifndef CDSUNIT_PRINT_ELLENBINTREE_STAT_H
diff --git a/tests/unit/print_feldman_hashset_stat.h b/tests/unit/print_feldman_hashset_stat.h
deleted file mode 100644 (file)
index 8007dc5..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_PRINT_FELDMAN_HASHSET_STAT_H
-#define CDSUNIT_PRINT_FELDMAN_HASHSET_STAT_H
-
-#include <ostream>
-#include <iomanip>
-#include <cds/intrusive/details/feldman_hashset_base.h>
-
-namespace std {
-
-    static inline ostream& operator <<( ostream& o, cds::intrusive::feldman_hashset::stat<> const& s )
-    {
-        return
-        o << "Stat [cds::intrusive::feldman_hashset::stat]\n"
-            << "\t\t          m_nInsertSuccess: " << s.m_nInsertSuccess.get()           << "\n"
-            << "\t\t           m_nInsertFailed: " << s.m_nInsertFailed.get()            << "\n"
-            << "\t\t            m_nInsertRetry: " << s.m_nInsertRetry.get()             << "\n"
-            << "\t\t              m_nUpdateNew: " << s.m_nUpdateNew.get()               << "\n"
-            << "\t\t         m_nUpdateExisting: " << s.m_nUpdateExisting.get()          << "\n"
-            << "\t\t           m_nUpdateFailed: " << s.m_nUpdateFailed.get()            << "\n"
-            << "\t\t            m_nUpdateRetry: " << s.m_nUpdateRetry.get()             << "\n"
-            << "\t\t           m_nEraseSuccess: " << s.m_nEraseSuccess.get()            << "\n"
-            << "\t\t            m_nEraseFailed: " << s.m_nEraseFailed.get()             << "\n"
-            << "\t\t             m_nEraseRetry: " << s.m_nEraseRetry.get()              << "\n"
-            << "\t\t            m_nFindSuccess: " << s.m_nFindSuccess.get()             << "\n"
-            << "\t\t             m_nFindFailed: " << s.m_nFindFailed.get()              << "\n"
-            << "\t\t      m_nExpandNodeSuccess: " << s.m_nExpandNodeSuccess.get()       << "\n"
-            << "\t\t       m_nExpandNodeFailed: " << s.m_nExpandNodeFailed.get()        << "\n"
-            << "\t\t            m_nSlotChanged: " << s.m_nSlotChanged.get()             << "\n"
-            << "\t\t         m_nSlotConverting: " << s.m_nSlotConverting.get()          << "\n"
-            << "\t\t         m_nArrayNodeCount: " << s.m_nArrayNodeCount.get()          << "\n"
-            << "\t\t                 m_nHeight: " << s.m_nHeight.get()                  << "\n";
-    }
-
-    static inline ostream& operator <<( ostream& o, cds::intrusive::feldman_hashset::empty_stat const& /*s*/ )
-    {
-        return o;
-    }
-
-    static inline ostream& operator<<( ostream& o, std::vector< cds::intrusive::feldman_hashset::level_statistics > const& level_stat )
-    {
-        o << "Level statistics, height=" << level_stat.size() << "\n";
-        size_t i = 0;
-        o << "  i   node_count capacity    data_cell   array_cell   empty_cell\n";
-        for ( auto it = level_stat.begin(); it != level_stat.end(); ++it, ++i ) {
-            o << std::setw( 3 ) << i << std::setw( 0 ) << " "
-              << std::setw( 12 ) << it->array_node_count << std::setw( 0 ) << " "
-              << std::setw( 8 ) << it->node_capacity << std::setw( 0 ) << " "
-              << std::setw( 12 ) << it->data_cell_count << std::setw( 0 ) << " "
-              << std::setw( 12 ) << it->array_cell_count << std::setw( 0 ) << " "
-              << std::setw( 12 ) << it->empty_cell_count << std::setw( 0 )
-              << "\n";
-        }
-        return o;
-    }
-
-} // namespace std
-
-#endif // #ifndef CDSUNIT_PRINT_FELDMAN_HASHSET_STAT_H
diff --git a/tests/unit/print_mspriorityqueue_stat.h b/tests/unit/print_mspriorityqueue_stat.h
deleted file mode 100644 (file)
index 37393d0..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_PRINT_MSPRIORITYQUEUE_STAT_H
-#define CDSUNIT_PRINT_MSPRIORITYQUEUE_STAT_H
-
-#include <cds/container/mspriority_queue.h>
-
-namespace std {
-    static inline ostream& operator <<( ostream& o, cds::container::mspriority_queue::empty_stat const& /*s*/ )
-    {
-        return o;
-    }
-
-    static inline ostream& operator <<( ostream& o, cds::container::mspriority_queue::stat<> const& s )
-    {
-        return o << "\nMSPriorityQueue statistis [cds::container::mspriority_queue::stat]:\n"
-            << "\t\t            Success push count: " << s.m_nPushCount.get() << "\n"
-            << "\t\t             Success pop count: " << s.m_nPopCount.get() << "\n"
-            << "\t\tFailed push count (full queue): " << s.m_nPushFailCount.get() << "\n"
-            << "\t\tFailed pop count (empty queue): " << s.m_nPopFailCount.get() << "\n"
-            << "\t\t          Heapify swap on push: " << s.m_nPushHeapifySwapCount.get() << "\n"
-            << "\t\t           Heapify swap on pop: " << s.m_nPopHeapifySwapCount.get() << "\n";
-    }
-}
-
-#endif // #ifndef CDSUNIT_PRINT_MSPRIORITYQUEUE_STAT_H
diff --git a/tests/unit/print_segmentedqueue_stat.h b/tests/unit/print_segmentedqueue_stat.h
deleted file mode 100644 (file)
index ab9737b..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_PRINT_SEGMENTEDQUEUE_STAT_H
-#define CDSUNIT_PRINT_SEGMENTEDQUEUE_STAT_H
-
-#include <ostream>
-
-namespace std {
-    static inline std::ostream& operator <<( std::ostream& o, cds::intrusive::segmented_queue::stat<> const& s )
-    {
-        return o << "\tStatistics:\n"
-            << "\t                    Push: " << s.m_nPush.get()           << "\n"
-            << "\t          Push populated: " << s.m_nPushPopulated.get()  << "\n"
-            << "\tPush failed (contention): " << s.m_nPushContended.get()  << "\n"
-            << "\t                     Pop: " << s.m_nPop.get()            << "\n"
-            << "\t               Pop empty: " << s.m_nPopEmpty.get()       << "\n"
-            << "\t Pop failed (contention): " << s.m_nPopContended.get()      << "\n"
-            << "\t Segment create requests: " << s.m_nCreateSegmentReq.get()  << "\n"
-            << "\t Segment delete requests: " << s.m_nDeleteSegmentReq.get()  << "\n"
-            << "\t         Segment created: " << s.m_nSegmentCreated.get()    << "\n"
-            << "\t         Segment deleted: " << s.m_nSegmentDeleted.get()    << "\n";
-    }
-
-    static inline ostream& operator <<( ostream& o, cds::intrusive::segmented_queue::empty_stat const& /*s*/ )
-    {
-        return o;
-    }
-
-} // namespace std
-
-#endif // #ifndef CDSUNIT_PRINT_SEGMENTEDQUEUE_STAT_H
diff --git a/tests/unit/print_skip_list_stat.h b/tests/unit/print_skip_list_stat.h
deleted file mode 100644 (file)
index 03bff5d..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_PRINT_SKIP_LIST_STAT_H
-#define CDSUNIT_PRINT_SKIP_LIST_STAT_H
-
-#include <cds/intrusive/details/skip_list_base.h>
-#include <ostream>
-
-namespace std {
-
-    static inline ostream& operator <<( ostream& o, cds::intrusive::skip_list::stat<> const& s )
-    {
-        o << "Skip-list stat [cds::intrusive::skip_list::stat]\n"
-            << "\t\t node height (add/delete):\n";
-
-        for ( unsigned int i = 0; i < 9; ++i )
-            o << "\t\t\t[ " << (i + 1) << "]: " << s.m_nNodeHeightAdd[i].get() << '/' << s.m_nNodeHeightDel[i].get() << "\n";
-        for ( unsigned int i = 9; i < sizeof(s.m_nNodeHeightAdd) / sizeof(s.m_nNodeHeightAdd[0] ); ++i )
-            o << "\t\t\t[" << (i + 1) << "]: " << s.m_nNodeHeightAdd[i].get() << '/' << s.m_nNodeHeightDel[i].get() << "\n";
-
-        return o
-            << "\t\t          m_nInsertSuccess: " << s.m_nInsertSuccess.get()           << "\n"
-            << "\t\t           m_nInsertFailed: " << s.m_nInsertFailed.get()            << "\n"
-            << "\t\t          m_nInsertRetries: " << s.m_nInsertRetries.get()           << "\n"
-            << "\t\t            m_nUpdateExist: " << s.m_nUpdateExist.get()             << "\n"
-            << "\t\t              m_nUpdateNew: " << s.m_nUpdateNew.get()               << "\n"
-            << "\t\t          m_nUnlinkSuccess: " << s.m_nUnlinkSuccess.get()           << "\n"
-            << "\t\t           m_nUnlinkFailed: " << s.m_nUnlinkFailed.get()            << "\n"
-            << "\t\t         m_nExtractSuccess: " << s.m_nExtractSuccess.get()          << "\n"
-            << "\t\t          m_nExtractFailed: " << s.m_nExtractFailed.get()           << "\n"
-            << "\t\t         m_nExtractRetries: " << s.m_nExtractRetries.get()          << "\n"
-            << "\t\t      m_nExtractMinSuccess: " << s.m_nExtractMinSuccess.get()       << "\n"
-            << "\t\t       m_nExtractMinFailed: " << s.m_nExtractMinFailed.get()        << "\n"
-            << "\t\t      m_nExtractMinRetries: " << s.m_nExtractMinRetries.get()       << "\n"
-            << "\t\t      m_nExtractMaxSuccess: " << s.m_nExtractMaxSuccess.get()       << "\n"
-            << "\t\t       m_nExtractMaxFailed: " << s.m_nExtractMaxFailed.get()        << "\n"
-            << "\t\t      m_nExtractMaxRetries: " << s.m_nExtractMaxRetries.get()       << "\n"
-            << "\t\t           m_nEraseSuccess: " << s.m_nEraseSuccess.get()            << "\n"
-            << "\t\t            m_nEraseFailed: " << s.m_nEraseFailed.get()             << "\n"
-            << "\t\t             m_nEraseRetry: " << s.m_nEraseRetry.get()              << "\n"
-            << "\t\t        m_nFindFastSuccess: " << s.m_nFindFastSuccess.get()         << "\n"
-            << "\t\t         m_nFindFastFailed: " << s.m_nFindFastFailed.get()          << "\n"
-            << "\t\t        m_nFindSlowSuccess: " << s.m_nFindSlowSuccess.get()         << "\n"
-            << "\t\t         m_nFindSlowFailed: " << s.m_nFindSlowFailed.get()          << "\n"
-            << "\t\t    m_nRenewInsertPosition: " << s.m_nRenewInsertPosition.get()     << "\n"
-            << "\t\t m_nLogicDeleteWhileInsert: " << s.m_nLogicDeleteWhileInsert.get()  << "\n"
-            << "\t\t    m_nNotFoundWhileInsert: " << s.m_nNotFoundWhileInsert.get()     << "\n"
-            << "\t\t              m_nFastErase: " << s.m_nFastErase.get()               << "\n"
-            << "\t\t              m_nSlowErase: " << s.m_nSlowErase.get()               << "\n"
-            << "\t\t            m_nFastExtract: " << s.m_nFastExtract.get()             << "\n"
-            << "\t\t            m_nSlowExtract: " << s.m_nSlowExtract.get()             << "\n"
-            << "\t\t         m_nEraseWhileFind: " << s.m_nEraseWhileFind.get()          << "\n"
-            << "\t\t       m_nExtractWhileFind: " << s.m_nExtractWhileFind.get()        << "\n";
-    }
-
-    static inline ostream& operator <<( ostream& o, cds::intrusive::skip_list::empty_stat const& /*s*/ )
-    {
-        return o;
-    }
-
-} // namespace std
-
-#endif // #ifndef CDSUNIT_PRINT_SKIP_LIST_STAT_H
diff --git a/tests/unit/print_split_list_stat.h b/tests/unit/print_split_list_stat.h
deleted file mode 100644 (file)
index bcf1183..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_PRINT_SPLIT_LIST_STAT_H
-#define CDSUNIT_PRINT_SPLIT_LIST_STAT_H
-
-#include <cds/intrusive/details/split_list_base.h>
-#include <ostream>
-
-namespace std {
-
-    static inline ostream& operator <<( ostream& o, cds::intrusive::split_list::stat<> const& s )
-    {
-        return
-        o << "Split-list stat [cds::intrusive::split_list::stat]\n"
-            << "\t\t          m_nInsertSuccess: " << s.m_nInsertSuccess.get()           << "\n"
-            << "\t\t           m_nInsertFailed: " << s.m_nInsertFailed.get()            << "\n"
-            << "\t\t            m_nEnsureExist: " << s.m_nEnsureExist.get()             << "\n"
-            << "\t\t              m_nEnsureNew: " << s.m_nEnsureNew.get()               << "\n"
-            << "\t\t           m_nEraseSuccess: " << s.m_nEraseSuccess.get()            << "\n"
-            << "\t\t            m_nEraseFailed: " << s.m_nEraseFailed.get()             << "\n"
-            << "\t\t         m_nExtractSuccess: " << s.m_nExtractSuccess.get()          << "\n"
-            << "\t\t          m_nExtractFailed: " << s.m_nExtractFailed.get()           << "\n"
-            << "\t\t            m_nFindSuccess: " << s.m_nFindSuccess.get()             << "\n"
-            << "\t\t      m_nHeadNodeAllocated: " << s.m_nHeadNodeAllocated.get()       << "\n"
-            << "\t\t          m_nHeadNodeFreed: " << s.m_nHeadNodeFreed.get()           << "\n"
-            << "\t\t            m_nBucketCount: " << s.m_nBucketCount.get()             << "\n"
-            << "\t\t    m_nInitBucketRecursive: " << s.m_nInitBucketRecursive.get()     << "\n"
-            << "\t\t   m_nInitBucketContention: " << s.m_nInitBucketContention.get()    << "\n"
-            << "\t\t     m_nBusyWaitBucketInit: " << s.m_nBusyWaitBucketInit.get()      << "\n";
-    }
-
-    static inline ostream& operator <<( ostream& o, cds::intrusive::split_list::empty_stat const& /*s*/ )
-    {
-        return o;
-    }
-
-} // namespace std
-
-#endif // #ifndef CDSUNIT_PRINT_SKIP_LIST_STAT_H
diff --git a/tests/unit/print_sync_monitor_stat.h b/tests/unit/print_sync_monitor_stat.h
deleted file mode 100644 (file)
index d1c1561..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#if defined(CDSLIB_SYNC_INJECTING_MONITOR_H) && !defined(CDSUNIT_PRINT_INJECTING_MONITOR_STAT_H)
-#define CDSUNIT_PRINT_INJECTING_MONITOR_STAT_H
-
-namespace std {
-    static inline ostream& operator <<( ostream& o, cds::sync::injecting_monitor_traits::empty_stat const& /*s*/ )
-    {
-        return o;
-    }
-}
-#endif
-
-#if defined(CDSLIB_SYNC_POOL_MONITOR_H) && !defined(CDSUNIT_PRINT_POOL_MONITOR_STAT_H)
-#define CDSUNIT_PRINT_POOL_MONITOR_STAT_H
-
-namespace std {
-    static inline ostream& operator <<( ostream& o, cds::sync::pool_monitor_traits::empty_stat const& /*s*/ )
-    {
-        return o;
-    }
-
-    static inline ostream& operator <<( ostream& o, cds::sync::pool_monitor_traits::stat<> const& s )
-    {
-        return o << "cds::sync::pool_monitor statistics:\n"
-            << "\t\t        m_nLockCount: " << s.m_nLockCount.get()        << "\n"
-            << "\t\t      m_nUnlockCount: " << s.m_nUnlockCount.get()      << "\n"
-            << "\t\t        m_nMaxLocked: " << s.m_nMaxLocked.get()        << "\n"
-            << "\t\t   m_nLockContention: " << s.m_nLockContention.get()   << "\n"
-            << "\t\t m_nUnlockContention: " << s.m_nUnlockContention.get() << "\n"
-            << "\t\t   m_nLockAllocation: " << s.m_nLockAllocation.get()   << "\n"
-            << "\t\t m_nLockDeallocation: " << s.m_nLockDeallocation.get() << "\n"
-            << "\t\t     m_nMaxAllocated: " << s.m_nMaxAllocated.get()     << "\n";
-    }
-}
-#endif
diff --git a/tests/unit/queue/CMakeLists.txt b/tests/unit/queue/CMakeLists.txt
deleted file mode 100644 (file)
index f41f29c..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-set(PACKAGE_NAME cdsu-queue)
-
-set(CDSUNIT_QUEUE_SOURCES
-    bounded_queue_fulness.cpp
-    queue_pop.cpp
-    queue_push.cpp
-    queue_random.cpp
-    queue_reader_writer.cpp
-    intrusive_queue_reader_writer.cpp)
-
-add_executable(${PACKAGE_NAME} ${CDSUNIT_QUEUE_SOURCES} $<TARGET_OBJECTS:${TEST_COMMON}>)
-target_link_libraries(${PACKAGE_NAME} ${CDS_SHARED_LIBRARY} ${Boost_THREAD_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
-add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/tests/unit/queue/bounded_queue_fulness.cpp b/tests/unit/queue/bounded_queue_fulness.cpp
deleted file mode 100644 (file)
index 61bce40..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/thread.h"
-#include "queue/queue_type.h"
-#include "queue/queue_defs.h"
-
-
-/*
-    Bounded queue test.
-    The test checks the behaviour of bounded queue when it is almost full.
-    Many algorithms says the queue is full when it is not, and vice versa.
-*/
-namespace queue {
-
-#define TEST_BOUNDED( Q, V )    void Q() { test< Types<V>::Q >(); }
-
-    namespace ns_BoundedQueue_Fullness {
-        static size_t s_nThreadCount = 8;
-        static size_t s_nQueueSize = 1024;
-        static size_t s_nPassCount = 1000000;
-    }
-    using namespace ns_BoundedQueue_Fullness;
-
-    class BoundedQueue_Fullness: public CppUnitMini::TestCase
-    {
-        template <class Queue>
-        class Thread: public CppUnitMini::TestThread
-        {
-            virtual TestThread *    clone()
-            {
-                return new Thread( *this );
-            }
-        public:
-            Queue&              m_Queue;
-            double              m_fTime;
-            size_t              m_nPushError;
-            size_t              m_nPopError;
-
-        public:
-            Thread( CppUnitMini::ThreadPool& pool, Queue& q )
-                : CppUnitMini::TestThread( pool )
-                , m_Queue( q )
-            {}
-            Thread( Thread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Queue( src.m_Queue )
-            {}
-
-            BoundedQueue_Fullness&  getTest()
-            {
-                return reinterpret_cast<BoundedQueue_Fullness&>( m_Pool.m_Test );
-            }
-
-            virtual void init()
-            {
-                cds::threading::Manager::attachThread();
-            }
-            virtual void fini()
-            {
-                cds::threading::Manager::detachThread();
-            }
-
-            virtual void test()
-            {
-                m_fTime = m_Timer.duration();
-
-                m_nPushError = 0;
-                m_nPopError = 0;
-                for ( size_t i = 0; i < s_nPassCount; ++i ) {
-                    if ( !m_Queue.push( i ))
-                        ++m_nPushError;
-                    size_t item;
-                    if ( !m_Queue.pop( item ))
-                        ++m_nPopError;
-                }
-                m_fTime = m_Timer.duration() - m_fTime;
-            }
-        };
-
-    protected:
-        template <class Queue>
-        void analyze( CppUnitMini::ThreadPool& pool, Queue& testQueue  )
-        {
-            double fTime = 0;
-            size_t nPushError = 0;
-            size_t nPopError = 0;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                Thread<Queue> * pThread = reinterpret_cast<Thread<Queue> *>(*it);
-                fTime += pThread->m_fTime;
-                nPushError += pThread->m_nPushError;
-                nPopError  += pThread->m_nPopError;
-            }
-            CPPUNIT_MSG( "     Duration=" << (fTime / s_nThreadCount) );
-            CPPUNIT_MSG( "     Errors: push=" << nPushError << ", pop=" << nPopError );
-            CPPUNIT_CHECK( !testQueue.empty());
-            CPPUNIT_CHECK( nPushError == 0 );
-            CPPUNIT_CHECK( nPopError == 0 );
-        }
-
-        template <class Queue>
-        void test()
-        {
-            Queue testQueue( s_nQueueSize );
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new Thread<Queue>( pool, testQueue ), s_nThreadCount );
-
-            size_t nSize = testQueue.capacity() - s_nThreadCount;
-            for ( size_t i = 0; i < nSize; ++i )
-                testQueue.push( i );
-
-            CPPUNIT_MSG( "   Thread count=" << s_nThreadCount << ", push/pop pairs=" << s_nPassCount
-
-                         << ", queue capacity=" << testQueue.capacity() << " ...");
-            pool.run();
-
-            analyze( pool, testQueue );
-
-            CPPUNIT_MSG( testQueue.statistics() );
-        }
-        void setUpParams( const CppUnitMini::TestCfg& cfg ) {
-            s_nThreadCount = cfg.getULong("ThreadCount", 8 );
-            s_nQueueSize = cfg.getULong("QueueSize", 1024 );
-            s_nPassCount = cfg.getULong( "PassCount", 1000000 );
-        }
-
-    protected:
-        CDSUNIT_DECLARE_TsigasCycleQueue( size_t )
-        CDSUNIT_DECLARE_VyukovMPMCCycleQueue( size_t )
-
-        CPPUNIT_TEST_SUITE( BoundedQueue_Fullness )
-            CDSUNIT_TEST_TsigasCycleQueue
-            CDSUNIT_TEST_VyukovMPMCCycleQueue
-        CPPUNIT_TEST_SUITE_END();
-    };
-
-} // namespace queue
-
-CPPUNIT_TEST_SUITE_REGISTRATION(queue::BoundedQueue_Fullness );
diff --git a/tests/unit/queue/intrusive_queue_defs.h b/tests/unit/queue/intrusive_queue_defs.h
deleted file mode 100644 (file)
index 4a5dca6..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_INTRUSIVE_QUEUE_DEFS_H
-#define CDSUNIT_INTRUSIVE_QUEUE_DEFS_H
-
-// MSQueue
-#define CDSUNIT_DECLARE_MSQueue \
-    TEST_CASE(MSQueue_HP,               cds::intrusive::msqueue::node< cds::gc::HP > ) \
-    TEST_CASE(MSQueue_HP_ic,            cds::intrusive::msqueue::node< cds::gc::HP > ) \
-    TEST_CASE(MSQueue_HP_stat,          cds::intrusive::msqueue::node< cds::gc::HP > ) \
-    TEST_CASE(MSQueue_HP_seqcst,        cds::intrusive::msqueue::node< cds::gc::HP > ) \
-    TEST_CASE(MSQueue_DHP,              cds::intrusive::msqueue::node< cds::gc::DHP > ) \
-    TEST_CASE(MSQueue_DHP_ic,           cds::intrusive::msqueue::node< cds::gc::DHP > ) \
-    TEST_CASE(MSQueue_DHP_stat,         cds::intrusive::msqueue::node< cds::gc::DHP > ) \
-    TEST_CASE(MSQueue_DHP_seqcst,       cds::intrusive::msqueue::node< cds::gc::DHP > )
-
-#define CDSUNIT_TEST_MSQueue \
-    CPPUNIT_TEST(MSQueue_HP) \
-    CPPUNIT_TEST(MSQueue_HP_ic) \
-    CPPUNIT_TEST(MSQueue_HP_stat) \
-    CPPUNIT_TEST(MSQueue_HP_seqcst) \
-    CPPUNIT_TEST(MSQueue_DHP) \
-    CPPUNIT_TEST(MSQueue_DHP_ic) \
-    CPPUNIT_TEST(MSQueue_DHP_stat) \
-    CPPUNIT_TEST(MSQueue_DHP_seqcst)
-
-// MoirQueue
-#define CDSUNIT_DECLARE_MoirQueue \
-    TEST_CASE(MoirQueue_HP,               cds::intrusive::msqueue::node< cds::gc::HP > ) \
-    TEST_CASE(MoirQueue_HP_ic,            cds::intrusive::msqueue::node< cds::gc::HP > ) \
-    TEST_CASE(MoirQueue_HP_stat,          cds::intrusive::msqueue::node< cds::gc::HP > ) \
-    TEST_CASE(MoirQueue_HP_seqcst,        cds::intrusive::msqueue::node< cds::gc::HP > ) \
-    TEST_CASE(MoirQueue_DHP,              cds::intrusive::msqueue::node< cds::gc::DHP > ) \
-    TEST_CASE(MoirQueue_DHP_ic,           cds::intrusive::msqueue::node< cds::gc::DHP > ) \
-    TEST_CASE(MoirQueue_DHP_stat,         cds::intrusive::msqueue::node< cds::gc::DHP > ) \
-    TEST_CASE(MoirQueue_DHP_seqcst,       cds::intrusive::msqueue::node< cds::gc::DHP > )
-
-#define CDSUNIT_TEST_MoirQueue \
-    CPPUNIT_TEST(MoirQueue_HP) \
-    CPPUNIT_TEST(MoirQueue_HP_ic) \
-    CPPUNIT_TEST(MoirQueue_HP_stat) \
-    CPPUNIT_TEST(MoirQueue_HP_seqcst) \
-    CPPUNIT_TEST(MoirQueue_DHP) \
-    CPPUNIT_TEST(MoirQueue_DHP_ic) \
-    CPPUNIT_TEST(MoirQueue_DHP_stat) \
-    CPPUNIT_TEST(MoirQueue_DHP_seqcst)
-
-
-// OptimisticQueue
-#define CDSUNIT_DECLARE_OptimisticQueue \
-    TEST_CASE(OptimisticQueue_HP,               cds::intrusive::optimistic_queue::node< cds::gc::HP > ) \
-    TEST_CASE(OptimisticQueue_HP_ic,            cds::intrusive::optimistic_queue::node< cds::gc::HP > ) \
-    TEST_CASE(OptimisticQueue_HP_stat,          cds::intrusive::optimistic_queue::node< cds::gc::HP > ) \
-    TEST_CASE(OptimisticQueue_HP_seqcst,        cds::intrusive::optimistic_queue::node< cds::gc::HP > ) \
-    TEST_CASE(OptimisticQueue_DHP,              cds::intrusive::optimistic_queue::node< cds::gc::DHP > ) \
-    TEST_CASE(OptimisticQueue_DHP_ic,           cds::intrusive::optimistic_queue::node< cds::gc::DHP > ) \
-    TEST_CASE(OptimisticQueue_DHP_stat,         cds::intrusive::optimistic_queue::node< cds::gc::DHP > ) \
-    TEST_CASE(OptimisticQueue_DHP_seqcst,       cds::intrusive::optimistic_queue::node< cds::gc::DHP > )
-
-#define CDSUNIT_TEST_OptimisticQueue \
-    CPPUNIT_TEST(OptimisticQueue_HP) \
-    CPPUNIT_TEST(OptimisticQueue_HP_ic) \
-    CPPUNIT_TEST(OptimisticQueue_HP_stat) \
-    CPPUNIT_TEST(OptimisticQueue_HP_seqcst) \
-    CPPUNIT_TEST(OptimisticQueue_DHP) \
-    CPPUNIT_TEST(OptimisticQueue_DHP_ic) \
-    CPPUNIT_TEST(OptimisticQueue_DHP_stat) \
-    CPPUNIT_TEST(OptimisticQueue_DHP_seqcst)
-
-
-// BasketQueue
-#define CDSUNIT_DECLARE_BasketQueue \
-    TEST_CASE(BasketQueue_HP,               cds::intrusive::basket_queue::node< cds::gc::HP > ) \
-    TEST_CASE(BasketQueue_HP_ic,            cds::intrusive::basket_queue::node< cds::gc::HP > ) \
-    TEST_CASE(BasketQueue_HP_stat,          cds::intrusive::basket_queue::node< cds::gc::HP > ) \
-    TEST_CASE(BasketQueue_HP_seqcst,        cds::intrusive::basket_queue::node< cds::gc::HP > ) \
-    TEST_CASE(BasketQueue_DHP,              cds::intrusive::basket_queue::node< cds::gc::DHP > ) \
-    TEST_CASE(BasketQueue_DHP_ic,           cds::intrusive::basket_queue::node< cds::gc::DHP > ) \
-    TEST_CASE(BasketQueue_DHP_stat,         cds::intrusive::basket_queue::node< cds::gc::DHP > ) \
-    TEST_CASE(BasketQueue_DHP_seqcst,       cds::intrusive::basket_queue::node< cds::gc::DHP > )
-
-#define CDSUNIT_TEST_BasketQueue \
-    CPPUNIT_TEST(BasketQueue_HP) \
-    CPPUNIT_TEST(BasketQueue_HP_ic) \
-    CPPUNIT_TEST(BasketQueue_HP_stat) \
-    CPPUNIT_TEST(BasketQueue_HP_seqcst) \
-    CPPUNIT_TEST(BasketQueue_DHP) \
-    CPPUNIT_TEST(BasketQueue_DHP_ic) \
-    CPPUNIT_TEST(BasketQueue_DHP_stat) \
-    CPPUNIT_TEST(BasketQueue_DHP_seqcst)
-
-// TsigasCycleQueue
-#define CDSUNIT_DECLARE_TsigasCycleQueue \
-    TEST_BOUNDED(TsigasCycleQueue_dyn) \
-    TEST_BOUNDED(TsigasCycleQueue_dyn_ic)
-
-#define CDSUNIT_TEST_TsigasCycleQueue \
-    CPPUNIT_TEST(TsigasCycleQueue_dyn) \
-    CPPUNIT_TEST(TsigasCycleQueue_dyn_ic)
-
-
-// VyukovMPMCCycleQueue
-#define CDSUNIT_DECLARE_VyukovMPMCCycleQueue \
-    TEST_BOUNDED(VyukovMPMCCycleQueue_dyn) \
-    TEST_BOUNDED(VyukovMPMCCycleQueue_dyn_ic)
-
-#define CDSUNIT_TEST_VyukovMPMCCycleQueue \
-    CPPUNIT_TEST(VyukovMPMCCycleQueue_dyn) \
-    CPPUNIT_TEST(VyukovMPMCCycleQueue_dyn_ic)
-
-
-// FCQueue
-#define CDSUNIT_DECLARE_FCQueue \
-    TEST_FCQUEUE(FCQueue_list_delay2, boost::intrusive::list_base_hook<> ) \
-    TEST_FCQUEUE(FCQueue_list_delay2_elimination, boost::intrusive::list_base_hook<> ) \
-    TEST_FCQUEUE(FCQueue_list_delay2_elimination_stat, boost::intrusive::list_base_hook<> ) \
-    TEST_FCQUEUE(FCQueue_list_expbackoff_elimination, boost::intrusive::list_base_hook<> ) \
-    TEST_FCQUEUE(FCQueue_list_expbackoff_elimination_stat, boost::intrusive::list_base_hook<> )
-
-#define CDSUNIT_TEST_FCQueue \
-    CPPUNIT_TEST(FCQueue_list_delay2) \
-    CPPUNIT_TEST(FCQueue_list_delay2_elimination) \
-    CPPUNIT_TEST(FCQueue_list_delay2_elimination_stat) \
-    CPPUNIT_TEST(FCQueue_list_expbackoff_elimination) \
-    CPPUNIT_TEST(FCQueue_list_expbackoff_elimination_stat)
-
-// SegmentedQueue
-#define CDSUNIT_DECLARE_SegmentedQueue \
-    TEST_SEGMENTED( SegmentedQueue_HP_spin ) \
-    TEST_SEGMENTED( SegmentedQueue_HP_spin_padding ) \
-    TEST_SEGMENTED( SegmentedQueue_HP_spin_stat ) \
-    TEST_SEGMENTED( SegmentedQueue_HP_mutex ) \
-    TEST_SEGMENTED( SegmentedQueue_HP_mutex_padding ) \
-    TEST_SEGMENTED( SegmentedQueue_HP_mutex_stat ) \
-    TEST_SEGMENTED( SegmentedQueue_DHP_spin ) \
-    TEST_SEGMENTED( SegmentedQueue_DHP_spin_padding ) \
-    TEST_SEGMENTED( SegmentedQueue_DHP_spin_stat ) \
-    TEST_SEGMENTED( SegmentedQueue_DHP_mutex ) \
-    TEST_SEGMENTED( SegmentedQueue_DHP_mutex_padding ) \
-    TEST_SEGMENTED( SegmentedQueue_DHP_mutex_stat )
-
-#define CDSUNIT_TEST_SegmentedQueue \
-    CPPUNIT_TEST( SegmentedQueue_HP_spin ) \
-    CPPUNIT_TEST( SegmentedQueue_HP_spin_padding ) \
-    CPPUNIT_TEST( SegmentedQueue_HP_spin_stat ) \
-    CPPUNIT_TEST( SegmentedQueue_HP_mutex ) \
-    CPPUNIT_TEST( SegmentedQueue_HP_mutex_padding ) \
-    CPPUNIT_TEST( SegmentedQueue_HP_mutex_stat ) \
-    CPPUNIT_TEST( SegmentedQueue_DHP_spin ) \
-    CPPUNIT_TEST( SegmentedQueue_DHP_spin_padding ) \
-    CPPUNIT_TEST( SegmentedQueue_DHP_spin_stat ) \
-    CPPUNIT_TEST( SegmentedQueue_DHP_mutex ) \
-    CPPUNIT_TEST( SegmentedQueue_DHP_mutex_padding ) \
-    CPPUNIT_TEST( SegmentedQueue_DHP_mutex_stat )
-
-
-// BoostSList
-#define CDSUNIT_DECLARE_BoostSList \
-    TEST_BOOST( BoostSList_mutex, boost::intrusive::slist_base_hook<> ) \
-    TEST_BOOST( BoostSList_spin, boost::intrusive::slist_base_hook<> )
-
-#define CDSUNIT_TEST_BoostSList \
-    CPPUNIT_TEST( BoostSList_mutex ) \
-    CPPUNIT_TEST( BoostSList_spin )
-
-#endif // #ifndef CDSUNIT_INTRUSIVE_QUEUE_DEFS_H
diff --git a/tests/unit/queue/intrusive_queue_reader_writer.cpp b/tests/unit/queue/intrusive_queue_reader_writer.cpp
deleted file mode 100644 (file)
index fb9217c..0000000
+++ /dev/null
@@ -1,492 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/thread.h"
-#include "queue/intrusive_queue_type.h"
-#include "queue/intrusive_queue_defs.h"
-#include <vector>
-#include <algorithm>
-
-// Multi-threaded random queue test
-namespace queue {
-
-#define TEST_CASE( Q, HOOK )    void Q() { test< Types< Value<HOOK> >::Q >(); }
-#define TEST_BOUNDED( Q )       void Q() { test_bounded< Types< Value<> >::Q >(); }
-#define TEST_FCQUEUE( Q, HOOK ) void Q() { test_fcqueue< Types< Value<HOOK> >::Q >(); }
-#define TEST_SEGMENTED( Q )     void Q() { test_segmented< Types< Value<> >::Q >(); }
-#define TEST_BOOST( Q, HOOK )   void Q() { test_boost< Types< Value<HOOK> >::Q >(); }
-
-    namespace {
-        static size_t s_nReaderThreadCount = 4;
-        static size_t s_nWriterThreadCount = 4;
-        static size_t s_nQueueSize = 4000000;
-        static unsigned int s_nFCPassCount = 8;
-        static unsigned int s_nFCCompactFactor = 64;
-
-        struct empty {};
-
-        template <typename Base = empty >
-        struct Value: public Base
-        {
-            size_t      nNo;
-            size_t      nWriterNo;
-            size_t      nConsumer;
-        };
-    }
-
-    class IntrusiveQueue_ReaderWriter: public CppUnitMini::TestCase
-    {
-        template <class Queue>
-        class Producer: public CppUnitMini::TestThread
-        {
-            virtual TestThread *    clone()
-            {
-                return new Producer( *this );
-            }
-        public:
-            Queue&              m_Queue;
-            double              m_fTime;
-            size_t              m_nPushFailed;
-
-            // Interval in m_arrValue
-            typename Queue::value_type *       m_pStart;
-            typename Queue::value_type *       m_pEnd;
-
-        public:
-            Producer( CppUnitMini::ThreadPool& pool, Queue& q )
-                : CppUnitMini::TestThread( pool )
-                , m_Queue( q )
-            {}
-            Producer( Producer& src )
-                : CppUnitMini::TestThread( src )
-                , m_Queue( src.m_Queue )
-            {}
-
-            IntrusiveQueue_ReaderWriter&  getTest()
-            {
-                return static_cast<IntrusiveQueue_ReaderWriter&>( m_Pool.m_Test );
-            }
-
-            virtual void init()
-            {
-                cds::threading::Manager::attachThread();
-            }
-            virtual void fini()
-            {
-                cds::threading::Manager::detachThread();
-            }
-
-            virtual void test()
-            {
-                m_nPushFailed = 0;
-
-                m_fTime = m_Timer.duration();
-
-                size_t i = 0;
-                for ( typename Queue::value_type * p = m_pStart; p < m_pEnd; ) {
-                    p->nNo = i;
-                    p->nWriterNo = m_nThreadNo;
-                    CDS_TSAN_ANNOTATE_HAPPENS_BEFORE( &p->nWriterNo );
-                    if ( m_Queue.push( *p )) {
-                        ++p;
-                        ++i;
-                    }
-                    else
-                        ++m_nPushFailed;
-                }
-
-                m_fTime = m_Timer.duration() - m_fTime;
-                getTest().m_nProducerCount.fetch_sub( 1, atomics::memory_order_release );
-            }
-        };
-
-        template <class Queue>
-        class Consumer: public CppUnitMini::TestThread
-        {
-            virtual TestThread *    clone()
-            {
-                return new Consumer( *this );
-            }
-        public:
-            Queue&              m_Queue;
-            double              m_fTime;
-            size_t              m_nPopEmpty;
-            size_t              m_nPopped;
-            size_t              m_nBadWriter;
-
-            typedef std::vector<size_t> TPoppedData;
-            typedef std::vector<size_t>::iterator       data_iterator;
-            typedef std::vector<size_t>::const_iterator const_data_iterator;
-
-            std::vector<TPoppedData>        m_WriterData;
-
-        private:
-            void initPoppedData()
-            {
-                const size_t nWriterCount = s_nWriterThreadCount;
-                const size_t nWriterPushCount = getTest().m_nThreadPushCount;
-                m_WriterData.resize( nWriterCount );
-                for ( size_t i = 0; i < nWriterCount; ++i )
-                    m_WriterData[i].reserve( nWriterPushCount );
-            }
-
-        public:
-            Consumer( CppUnitMini::ThreadPool& pool, Queue& q )
-                : CppUnitMini::TestThread( pool )
-                , m_Queue( q )
-            {
-                initPoppedData();
-            }
-            Consumer( Consumer& src )
-                : CppUnitMini::TestThread( src )
-                , m_Queue( src.m_Queue )
-            {
-                initPoppedData();
-            }
-
-            IntrusiveQueue_ReaderWriter&  getTest()
-            {
-                return static_cast<IntrusiveQueue_ReaderWriter&>( m_Pool.m_Test );
-            }
-
-            virtual void init()
-            {
-                cds::threading::Manager::attachThread();
-            }
-            virtual void fini()
-            {
-                cds::threading::Manager::detachThread();
-            }
-
-            virtual void test()
-            {
-                m_nPopEmpty = 0;
-                m_nPopped = 0;
-                m_nBadWriter = 0;
-                const size_t nTotalWriters = s_nWriterThreadCount;
-
-                m_fTime = m_Timer.duration();
-
-                while ( true ) {
-                    typename Queue::value_type * p = m_Queue.pop();
-                    if ( p ) {
-                        p->nConsumer = m_nThreadNo;
-                        ++m_nPopped;
-                        CDS_TSAN_ANNOTATE_HAPPENS_AFTER( &p->nWriterNo );
-                        if ( p->nWriterNo < nTotalWriters )
-                            m_WriterData[ p->nWriterNo ].push_back( p->nNo );
-                        else
-                            ++m_nBadWriter;
-                    }
-                    else {
-                        ++m_nPopEmpty;
-                        if ( getTest().m_nProducerCount.load( atomics::memory_order_acquire ) == 0 && m_Queue.empty() )
-                            break;
-                    }
-                }
-
-                m_fTime = m_Timer.duration() - m_fTime;
-            }
-        };
-
-        template <typename T>
-        class value_array
-        {
-            T * m_pArr;
-        public:
-            value_array( size_t nSize )
-                : m_pArr( new T[nSize] )
-            {}
-
-            ~value_array()
-            {
-                delete [] m_pArr;
-            }
-
-            T * get() const { return m_pArr; }
-        };
-
-
-    protected:
-        size_t                  m_nThreadPushCount;
-        atomics::atomic<size_t>     m_nProducerCount;
-        static CDS_CONSTEXPR const size_t c_nBadConsumer = 0xbadc0ffe;
-
-    protected:
-        template <class Queue>
-        void analyze( CppUnitMini::ThreadPool& pool, Queue& testQueue, size_t /*nLeftOffset*/, size_t nRightOffset )
-        {
-            typedef Consumer<Queue> Reader;
-            typedef Producer<Queue> Writer;
-            typedef typename Reader::const_data_iterator    ReaderIterator;
-
-            size_t nPostTestPops = 0;
-            while ( testQueue.pop() )
-                ++nPostTestPops;
-
-            double fTimeWriter = 0;
-            double fTimeReader = 0;
-            size_t nTotalPops = 0;
-            size_t nPopFalse = 0;
-            size_t nPoppedItems = 0;
-            size_t nPushFailed = 0;
-
-            std::vector< Reader * > arrReaders;
-
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                Reader * pReader = dynamic_cast<Reader *>( *it );
-                if ( pReader ) {
-                    fTimeReader += pReader->m_fTime;
-                    nTotalPops += pReader->m_nPopped;
-                    nPopFalse += pReader->m_nPopEmpty;
-                    arrReaders.push_back( pReader );
-                    CPPUNIT_CHECK_EX( pReader->m_nBadWriter == 0, "reader " << pReader->m_nThreadNo << " bad writer event count=" << pReader->m_nBadWriter );
-
-                    size_t nPopped = 0;
-                    for ( size_t n = 0; n < s_nWriterThreadCount; ++n )
-                        nPopped += pReader->m_WriterData[n].size();
-
-                    CPPUNIT_MSG( "    Reader " << pReader->m_nThreadNo - s_nWriterThreadCount << " popped count=" << nPopped );
-                    nPoppedItems += nPopped;
-                }
-                else {
-                    Writer * pWriter = dynamic_cast<Writer *>( *it );
-                    CPPUNIT_ASSERT( pWriter != nullptr );
-                    fTimeWriter += pWriter->m_fTime;
-                    nPushFailed += pWriter->m_nPushFailed;
-                    if ( !boost::is_base_of<cds::bounded_container, Queue>::value ) {
-                        CPPUNIT_CHECK_EX( pWriter->m_nPushFailed == 0,
-                            "writer " << pWriter->m_nThreadNo << " push failed count=" << pWriter->m_nPushFailed );
-                    }
-                }
-            }
-            CPPUNIT_CHECK_EX( nTotalPops == nPoppedItems, "nTotalPops=" << nTotalPops << ", nPoppedItems=" << nPoppedItems );
-
-            CPPUNIT_MSG( "    Readers: duration=" << fTimeReader / s_nReaderThreadCount << ", success pop=" << nTotalPops << ", failed pops=" << nPopFalse );
-            CPPUNIT_MSG( "    Writers: duration=" << fTimeWriter / s_nWriterThreadCount << ", failed push=" << nPushFailed );
-
-            size_t nQueueSize = m_nThreadPushCount * s_nWriterThreadCount;
-            CPPUNIT_CHECK_EX( nTotalPops + nPostTestPops == nQueueSize, "popped=" << nTotalPops + nPostTestPops << " must be " << nQueueSize );
-            CPPUNIT_CHECK( testQueue.empty() );
-
-            // Test that all items have been popped
-            // Test FIFO order
-            CPPUNIT_MSG( "   Test consistency of popped sequence..." );
-            size_t nErrors = 0;
-            for ( size_t nWriter = 0; nWriter < s_nWriterThreadCount; ++nWriter ) {
-                std::vector<size_t> arrData;
-                arrData.reserve( m_nThreadPushCount );
-                nErrors = 0;
-                for ( size_t nReader = 0; nReader < arrReaders.size(); ++nReader ) {
-                    ReaderIterator it = arrReaders[nReader]->m_WriterData[nWriter].begin();
-                    ReaderIterator itEnd = arrReaders[nReader]->m_WriterData[nWriter].end();
-                    if ( it != itEnd ) {
-                        ReaderIterator itPrev = it;
-                        for ( ++it; it != itEnd; ++it ) {
-                            CPPUNIT_CHECK_EX( *itPrev < *it + nRightOffset,
-                                "Reader " << nReader << ", Writer " << nWriter << ": prev=" << *itPrev << ", cur=" << *it );
-                            if ( ++nErrors > 10 )
-                                return;
-                            itPrev = it;
-                        }
-                    }
-
-                    for ( it = arrReaders[nReader]->m_WriterData[nWriter].begin(); it != itEnd; ++it )
-                        arrData.push_back( *it );
-                }
-                std::sort( arrData.begin(), arrData.end() );
-                nErrors = 0;
-                for ( size_t i=1; i < arrData.size(); ++i ) {
-                    if ( arrData[i-1] + 1 != arrData[i] ) {
-                        CPPUNIT_CHECK_EX( arrData[i-1] + 1 == arrData[i], "Writer " << nWriter << ": [" << (i-1) << "]=" << arrData[i-1] << ", [" << i << "]=" << arrData[i] );
-                        if ( ++nErrors > 10 )
-                            return;
-                    }
-                }
-
-                CPPUNIT_CHECK_EX( arrData[0] == 0, "Writer " << nWriter << "[0] != 0" );
-                CPPUNIT_CHECK_EX( arrData[arrData.size() - 1] == m_nThreadPushCount - 1, "Writer " << nWriter << "[last] != " << m_nThreadPushCount - 1 );
-            }
-        }
-
-        template <class Queue>
-        void test_with( Queue& testQueue, value_array<typename Queue::value_type>& arrValue, size_t nLeftOffset, size_t nRightOffset )
-        {
-            m_nThreadPushCount = s_nQueueSize / s_nWriterThreadCount;
-            CPPUNIT_MSG( "    reader count=" << s_nReaderThreadCount << " writer count=" << s_nWriterThreadCount
-                << " item count=" << m_nThreadPushCount * s_nWriterThreadCount << "..." );
-
-            typename Queue::value_type * pValStart = arrValue.get();
-            typename Queue::value_type * pValEnd = pValStart + s_nQueueSize;
-
-            CppUnitMini::ThreadPool pool( *this );
-
-            m_nProducerCount.store( s_nWriterThreadCount, atomics::memory_order_release );
-
-            // Writers must be first
-            pool.add( new Producer<Queue>( pool, testQueue ), s_nWriterThreadCount );
-            {
-                for ( typename Queue::value_type * it = pValStart; it != pValEnd; ++it ) {
-                    it->nNo = 0;
-                    it->nWriterNo = 0;
-                    it->nConsumer = c_nBadConsumer;
-                }
-
-                typename Queue::value_type * pStart = pValStart;
-                for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                    static_cast<Producer<Queue>* >( *it )->m_pStart = pStart;
-                    pStart += m_nThreadPushCount;
-                    static_cast<Producer<Queue>* >( *it )->m_pEnd = pStart;
-                }
-            }
-            pool.add( new Consumer<Queue>( pool, testQueue ), s_nReaderThreadCount );
-
-            pool.run();
-
-            // Check that all values have been dequeued
-            {
-                size_t nBadConsumerCount = 0;
-                size_t nQueueSize = m_nThreadPushCount * s_nWriterThreadCount;
-                typename Queue::value_type * pEnd = pValStart + nQueueSize;
-                for ( typename Queue::value_type * it = pValStart; it != pEnd; ++it  ) {
-                    if ( it->nConsumer == c_nBadConsumer )
-                        ++nBadConsumerCount;
-                }
-                CPPUNIT_CHECK_EX( nBadConsumerCount == 0, "nBadConsumerCount=" << nBadConsumerCount );
-            }
-
-            analyze( pool, testQueue, nLeftOffset, nRightOffset );
-            CPPUNIT_MSG( testQueue.statistics() );
-        }
-
-        template <typename Queue>
-        void test()
-        {
-            value_array<typename Queue::value_type> arrValue( s_nQueueSize );
-            {
-                {
-                    Queue q;
-                    test_with( q, arrValue, 0, 0 );
-                }
-                Queue::gc::force_dispose();
-            }
-        }
-
-        template <typename Queue>
-        void test_boost()
-        {
-            value_array<typename Queue::value_type> arrValue( s_nQueueSize );
-            {
-                Queue q;
-                test_with(q, arrValue, 0, 0);
-            }
-        }
-
-        template <typename Queue>
-        void test_bounded()
-        {
-            value_array<typename Queue::value_type> arrValue( s_nQueueSize );
-            Queue q;
-            test_with(q, arrValue, 0, 0);
-        }
-
-        template <typename Queue>
-        void test_fcqueue()
-        {
-            value_array<typename Queue::value_type> arrValue( s_nQueueSize );
-            CPPUNIT_MSG( "Combining pass count: " << s_nFCPassCount << ", compact factor: " << s_nFCCompactFactor );
-            Queue q( s_nFCCompactFactor, s_nFCPassCount );
-            test_with(q, arrValue, 0, 0);
-        }
-
-        template <typename Queue>
-        void test_segmented()
-        {
-            value_array<typename Queue::value_type> arrValue( s_nQueueSize );
-            for ( size_t nSegmentSize = 4; nSegmentSize <= 256; nSegmentSize *= 4 ) {
-                CPPUNIT_MSG( "Segment size: " << nSegmentSize );
-                {
-                    Queue q( nSegmentSize );
-                    test_with( q, arrValue, nSegmentSize * 2, nSegmentSize );
-                }
-                Queue::gc::force_dispose();
-            }
-        }
-
-        template <typename Queue>
-        void test_spqueue()
-        {
-            value_array<typename Queue::value_type> arrValue( s_nQueueSize );
-            for ( size_t nArraySize = 2; nArraySize <= 64; nArraySize *= 2 ) {
-                CPPUNIT_MSG( "Array size: " << nArraySize );
-                {
-                    Queue q( nArraySize );
-                    test_with( q, arrValue, 0, 0 );
-                }
-                Queue::gc::force_dispose();
-            }
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg ) {
-            s_nReaderThreadCount = cfg.getULong("ReaderCount", 4 );
-            s_nWriterThreadCount = cfg.getULong("WriterCount", 4 );
-            s_nQueueSize = cfg.getULong("QueueSize", 10000000 );
-            s_nFCPassCount = cfg.getUInt("FCPassCount", 8);
-            s_nFCCompactFactor = cfg.getUInt("FCCompactFactor", 64);
-        }
-
-    protected:
-        CDSUNIT_DECLARE_MSQueue
-        CDSUNIT_DECLARE_MoirQueue
-        CDSUNIT_DECLARE_OptimisticQueue
-        CDSUNIT_DECLARE_BasketQueue
-        CDSUNIT_DECLARE_FCQueue
-        CDSUNIT_DECLARE_SegmentedQueue
-        CDSUNIT_DECLARE_TsigasCycleQueue
-        CDSUNIT_DECLARE_VyukovMPMCCycleQueue
-        CDSUNIT_DECLARE_BoostSList
-
-
-        CPPUNIT_TEST_SUITE(IntrusiveQueue_ReaderWriter)
-            CDSUNIT_TEST_MSQueue
-            CDSUNIT_TEST_MoirQueue
-            CDSUNIT_TEST_OptimisticQueue
-            CDSUNIT_TEST_BasketQueue
-            CDSUNIT_TEST_FCQueue
-            CDSUNIT_TEST_SegmentedQueue
-            CDSUNIT_TEST_TsigasCycleQueue
-            CDSUNIT_TEST_VyukovMPMCCycleQueue
-            CDSUNIT_TEST_BoostSList
-        CPPUNIT_TEST_SUITE_END();
-    };
-
-} // namespace queue
-
-CPPUNIT_TEST_SUITE_REGISTRATION(queue::IntrusiveQueue_ReaderWriter);
diff --git a/tests/unit/queue/intrusive_queue_type.h b/tests/unit/queue/intrusive_queue_type.h
deleted file mode 100644 (file)
index 4bf1a92..0000000
+++ /dev/null
@@ -1,620 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_INTRUSIVE_QUEUE_TYPES_H
-#define CDSUNIT_INTRUSIVE_QUEUE_TYPES_H
-
-#include <cds/intrusive/msqueue.h>
-#include <cds/intrusive/moir_queue.h>
-#include <cds/intrusive/optimistic_queue.h>
-#include <cds/intrusive/tsigas_cycle_queue.h>
-#include <cds/intrusive/vyukov_mpmc_cycle_queue.h>
-#include <cds/intrusive/basket_queue.h>
-#include <cds/intrusive/fcqueue.h>
-#include <cds/intrusive/segmented_queue.h>
-
-#include <cds/gc/hp.h>
-#include <cds/gc/dhp.h>
-
-#include <boost/intrusive/slist.hpp>
-
-#include "print_segmentedqueue_stat.h"
-
-namespace queue {
-
-    namespace details {
-        struct empty_stat {};
-
-        template <typename T, typename Lock=std::mutex>
-        class BoostSList
-        {
-            typedef boost::intrusive::slist< T, boost::intrusive::cache_last<true> >    slist_type;
-            typedef Lock lock_type;
-            typedef std::lock_guard<lock_type> lock_guard;
-
-            slist_type  m_List;
-            mutable lock_type m_Lock;
-        public:
-            typedef T value_type;
-
-        public:
-            bool push( value_type& v )
-            {
-                lock_guard l( m_Lock );
-                m_List.push_back( v );
-                return true;
-            }
-
-            bool enqueue( value_type& v )
-            {
-                return push( v );
-            }
-
-            value_type * pop()
-            {
-                lock_guard l( m_Lock );
-                if ( m_List.empty() )
-                    return nullptr;
-                value_type& v = m_List.front();
-                m_List.pop_front();
-                return &v;
-            }
-            value_type * deque()
-            {
-                return pop();
-            }
-
-            bool empty() const
-            {
-                lock_guard l( m_Lock );
-                return m_List.empty();
-            }
-
-            size_t size() const
-            {
-                lock_guard l( m_Lock );
-                return m_List.size();
-            }
-
-            empty_stat statistics() const
-            {
-                return empty_stat();
-            }
-        };
-    }
-
-    template <typename T>
-    struct Types {
-
-        // MSQueue, MoirQueue
-        struct traits_MSQueue_HP : public cds::intrusive::msqueue::traits
-        {
-            typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::HP > > hook;
-        };
-        typedef cds::intrusive::MSQueue< cds::gc::HP, T, traits_MSQueue_HP > MSQueue_HP;
-        typedef cds::intrusive::MoirQueue< cds::gc::HP, T, traits_MSQueue_HP > MoirQueue_HP;
-
-        struct traits_MSQueue_HP_seqcst : public cds::intrusive::msqueue::traits
-        {
-            typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::HP > > hook;
-            typedef cds::opt::v::sequential_consistent memory_model;
-        };
-        typedef cds::intrusive::MSQueue< cds::gc::HP, T, traits_MSQueue_HP_seqcst > MSQueue_HP_seqcst;
-        typedef cds::intrusive::MoirQueue< cds::gc::HP, T, traits_MSQueue_HP_seqcst > MoirQueue_HP_seqcst;
-
-        struct traits_MSQueue_DHP : public cds::intrusive::msqueue::traits
-        {
-            typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::DHP > > hook;
-        };
-        typedef cds::intrusive::MSQueue< cds::gc::DHP, T, traits_MSQueue_DHP > MSQueue_DHP;
-        typedef cds::intrusive::MoirQueue< cds::gc::DHP, T, traits_MSQueue_DHP > MoirQueue_DHP;
-
-        struct traits_MSQueue_DHP_seqcst : public cds::intrusive::msqueue::traits
-        {
-            typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::DHP > > hook;
-            typedef cds::opt::v::sequential_consistent memory_model;
-        };
-        typedef cds::intrusive::MSQueue< cds::gc::DHP, T, traits_MSQueue_DHP_seqcst > MSQueue_DHP_seqcst;
-        typedef cds::intrusive::MoirQueue< cds::gc::DHP, T, traits_MSQueue_DHP_seqcst > MoirQueue_DHP_seqcst;
-
-        // MSQueue + item counter
-        struct traits_MSQueue_HP_ic : public cds::intrusive::msqueue::traits
-        {
-            typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::HP > > hook;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-        typedef cds::intrusive::MSQueue< cds::gc::HP, T, traits_MSQueue_HP_ic > MSQueue_HP_ic;
-        typedef cds::intrusive::MoirQueue< cds::gc::HP, T, traits_MSQueue_HP_ic > MoirQueue_HP_ic;
-
-        struct traits_MSQueue_DHP_ic : public cds::intrusive::msqueue::traits
-        {
-            typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::DHP > > hook;
-            typedef cds::atomicity::item_counter item_counter;
-        };
-        typedef cds::intrusive::MSQueue< cds::gc::DHP, T, traits_MSQueue_DHP_ic > MSQueue_DHP_ic;
-        typedef cds::intrusive::MoirQueue< cds::gc::DHP, T, traits_MSQueue_DHP_ic > MoirQueue_DHP_ic;
-
-        // MSQueue + stat
-        struct traits_MSQueue_HP_stat : public cds::intrusive::msqueue::traits
-        {
-            typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::HP > > hook;
-            typedef cds::intrusive::msqueue::stat<> stat;
-        };
-        typedef cds::intrusive::MSQueue< cds::gc::HP, T, traits_MSQueue_HP_stat > MSQueue_HP_stat;
-        typedef cds::intrusive::MoirQueue< cds::gc::HP, T, traits_MSQueue_HP_stat > MoirQueue_HP_stat;
-
-        struct traits_MSQueue_DHP_stat : public cds::intrusive::msqueue::traits
-        {
-            typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::DHP > > hook;
-            typedef cds::intrusive::msqueue::stat<> stat;
-        };
-        typedef cds::intrusive::MSQueue< cds::gc::DHP, T, traits_MSQueue_DHP_stat > MSQueue_DHP_stat;
-        typedef cds::intrusive::MoirQueue< cds::gc::DHP, T, traits_MSQueue_DHP_stat > MoirQueue_DHP_stat;
-
-
-        // OptimisticQueue
-        struct traits_OptimisticQueue_HP : public cds::intrusive::optimistic_queue::traits
-        {
-            typedef cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::HP > > hook;
-        };
-        typedef cds::intrusive::OptimisticQueue< cds::gc::HP, T, traits_OptimisticQueue_HP > OptimisticQueue_HP;
-
-        struct traits_OptimisticQueue_HP_seqcst : public
-            cds::intrusive::optimistic_queue::make_traits <
-                cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
-                , cds::opt::memory_model< cds::opt::v::sequential_consistent >
-            >::type
-        {};
-        typedef cds::intrusive::OptimisticQueue< cds::gc::HP, T, traits_OptimisticQueue_HP_seqcst > OptimisticQueue_HP_seqcst;
-
-        struct traits_OptimisticQueue_DHP : public cds::intrusive::optimistic_queue::traits
-        {
-            typedef cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::DHP > > hook;
-        };
-        typedef cds::intrusive::OptimisticQueue< cds::gc::DHP, T, traits_OptimisticQueue_DHP > OptimisticQueue_DHP;
-
-        struct traits_OptimisticQueue_DHP_seqcst: public
-            cds::intrusive::optimistic_queue::make_traits <
-                cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
-                , cds::opt::memory_model< cds::opt::v::sequential_consistent >
-            >::type
-        {};
-        typedef cds::intrusive::OptimisticQueue< cds::gc::DHP, T, traits_OptimisticQueue_DHP_seqcst > OptimisticQueue_DHP_seqcst;
-
-        // OptimisticQueue + item counter
-        struct traits_OptimisticQueue_HP_ic: public
-            cds::intrusive::optimistic_queue::make_traits <
-                cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
-                , cds::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef cds::intrusive::OptimisticQueue< cds::gc::HP, T, traits_OptimisticQueue_HP_ic > OptimisticQueue_HP_ic;
-
-        struct traits_OptimisticQueue_DHP_ic: public
-            cds::intrusive::optimistic_queue::make_traits <
-                cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
-                , cds::opt::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef cds::intrusive::OptimisticQueue< cds::gc::DHP, T, traits_OptimisticQueue_DHP_ic > OptimisticQueue_DHP_ic;
-
-        // OptimisticQueue + stat
-        struct traits_OptimisticQueue_HP_stat: public
-            cds::intrusive::optimistic_queue::make_traits <
-                cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
-                , cds::opt::stat< cds::intrusive::optimistic_queue::stat<> >
-            >::type
-        {};
-        typedef cds::intrusive::OptimisticQueue< cds::gc::HP, T, traits_OptimisticQueue_HP_stat > OptimisticQueue_HP_stat;
-
-        struct traits_OptimisticQueue_DHP_stat: public
-            cds::intrusive::optimistic_queue::make_traits <
-                cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
-                , cds::opt::stat< cds::intrusive::optimistic_queue::stat<> >
-            >::type
-        {};
-        typedef cds::intrusive::OptimisticQueue< cds::gc::DHP, T, traits_OptimisticQueue_DHP_stat > OptimisticQueue_DHP_stat;
-
-        // TsigasCycleQueue
-        class TsigasCycleQueue_dyn
-            : public cds::intrusive::TsigasCycleQueue< T,
-                typename cds::intrusive::tsigas_queue::make_traits<
-                    cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
-                >::type
-            >
-        {
-            typedef cds::intrusive::TsigasCycleQueue< T,
-                typename cds::intrusive::tsigas_queue::make_traits<
-                    cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
-                >::type
-            > base_class;
-        public:
-            TsigasCycleQueue_dyn()
-                : base_class( 1024 * 64 )
-            {}
-
-            TsigasCycleQueue_dyn( size_t nCapacity )
-                : base_class( nCapacity )
-            {}
-
-            cds::opt::none statistics() const
-            {
-                return cds::opt::none();
-            }
-        };
-
-        class TsigasCycleQueue_dyn_ic
-            : public cds::intrusive::TsigasCycleQueue< T,
-                typename cds::intrusive::tsigas_queue::make_traits<
-                    cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
-                    ,cds::opt::item_counter< cds::atomicity::item_counter >
-                >::type
-            >
-        {
-            typedef cds::intrusive::TsigasCycleQueue< T,
-                typename cds::intrusive::tsigas_queue::make_traits<
-                    cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
-                    ,cds::opt::item_counter< cds::atomicity::item_counter >
-                >::type
-            > base_class;
-        public:
-            TsigasCycleQueue_dyn_ic()
-                : base_class( 1024 * 64 )
-            {}
-            TsigasCycleQueue_dyn_ic( size_t nCapacity )
-                : base_class( nCapacity )
-            {}
-
-            cds::opt::none statistics() const
-            {
-                return cds::opt::none();
-            }
-        };
-
-        // VyukovMPMCCycleQueue
-        struct traits_VyukovMPMCCycleQueue_dyn : public cds::intrusive::vyukov_queue::traits
-        {
-            typedef cds::opt::v::dynamic_buffer< int > buffer;
-        };
-        class VyukovMPMCCycleQueue_dyn
-            : public cds::intrusive::VyukovMPMCCycleQueue< T, traits_VyukovMPMCCycleQueue_dyn >
-        {
-            typedef cds::intrusive::VyukovMPMCCycleQueue< T, traits_VyukovMPMCCycleQueue_dyn > base_class;
-        public:
-            VyukovMPMCCycleQueue_dyn()
-                : base_class( 1024 * 64 )
-            {}
-            VyukovMPMCCycleQueue_dyn( size_t nCapacity )
-                : base_class( nCapacity )
-            {}
-
-            cds::opt::none statistics() const
-            {
-                return cds::opt::none();
-            }
-        };
-
-        struct traits_VyukovMPMCCycleQueue_dyn_ic : public traits_VyukovMPMCCycleQueue_dyn
-        {
-            typedef cds::atomicity::item_counter item_counter;
-        };
-        class VyukovMPMCCycleQueue_dyn_ic
-            : public cds::intrusive::VyukovMPMCCycleQueue< T, traits_VyukovMPMCCycleQueue_dyn_ic >
-        {
-            typedef cds::intrusive::VyukovMPMCCycleQueue< T, traits_VyukovMPMCCycleQueue_dyn_ic > base_class;
-        public:
-            VyukovMPMCCycleQueue_dyn_ic()
-                : base_class( 1024 * 64 )
-            {}
-            VyukovMPMCCycleQueue_dyn_ic( size_t nCapacity )
-                : base_class( nCapacity )
-            {}
-
-            cds::opt::none statistics() const
-            {
-                return cds::opt::none();
-            }
-        };
-
-        // BasketQueue
-        struct traits_BasketQueue_HP : public
-            cds::intrusive::basket_queue::make_traits <
-                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
-            > ::type
-        {};
-        typedef cds::intrusive::BasketQueue< cds::gc::HP, T, traits_BasketQueue_HP > BasketQueue_HP;
-
-        struct traits_BasketQueue_HP_seqcst: public
-            cds::intrusive::basket_queue::make_traits <
-                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
-                , cds::opt::memory_model< cds::opt::v::sequential_consistent >
-            > ::type
-        {};
-        typedef cds::intrusive::BasketQueue<cds::gc::HP, T, traits_BasketQueue_HP_seqcst > BasketQueue_HP_seqcst;
-
-        struct traits_BasketQueue_DHP : public
-            cds::intrusive::basket_queue::make_traits <
-                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
-            > ::type
-        {};
-        typedef cds::intrusive::BasketQueue< cds::gc::DHP, T, traits_BasketQueue_DHP > BasketQueue_DHP;
-
-        struct traits_BasketQueue_DHP_seqcst: public
-            cds::intrusive::basket_queue::make_traits <
-                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
-                , cds::opt::memory_model< cds::opt::v::sequential_consistent >
-            > ::type
-        {};
-        typedef cds::intrusive::BasketQueue< cds::gc::DHP, T, traits_BasketQueue_DHP_seqcst > BasketQueue_DHP_seqcst;
-
-        // BasketQueue + item counter
-        struct traits_BasketQueue_HP_ic : public
-            cds::intrusive::basket_queue::make_traits <
-                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
-                ,cds::opt::item_counter< cds::atomicity::item_counter >
-            > ::type
-        {};
-        typedef cds::intrusive::BasketQueue< cds::gc::HP, T, traits_BasketQueue_HP_ic > BasketQueue_HP_ic;
-
-        struct traits_BasketQueue_DHP_ic : public
-            cds::intrusive::basket_queue::make_traits <
-                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
-                ,cds::opt::item_counter< cds::atomicity::item_counter >
-            > ::type
-        {};
-        typedef cds::intrusive::BasketQueue< cds::gc::DHP, T, traits_BasketQueue_DHP_ic > BasketQueue_DHP_ic;
-
-        // BasketQueue + stat
-        struct traits_BasketQueue_HP_stat : public
-            cds::intrusive::basket_queue::make_traits <
-                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
-                , cds::opt::stat< cds::intrusive::basket_queue::stat<> >
-            > ::type
-        {};
-        typedef cds::intrusive::BasketQueue< cds::gc::HP, T, traits_BasketQueue_HP_stat > BasketQueue_HP_stat;
-
-        struct traits_BasketQueue_DHP_stat : public
-            cds::intrusive::basket_queue::make_traits <
-                cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
-                , cds::opt::stat< cds::intrusive::basket_queue::stat<> >
-            > ::type
-        {};
-        typedef cds::intrusive::BasketQueue< cds::gc::DHP, T, traits_BasketQueue_DHP_stat > BasketQueue_DHP_stat;
-
-        // FCQueue
-        class traits_FCQueue_delay2:
-            public cds::intrusive::fcqueue::make_traits<
-                cds::opt::back_off< cds::backoff::delay_of<2> >
-            >::type
-        {};
-        class traits_FCQueue_delay2_elimination:
-            public cds::intrusive::fcqueue::make_traits<
-                cds::opt::back_off< cds::backoff::delay_of<2> >
-                ,cds::opt::enable_elimination< true >
-            >::type
-        {};
-        class traits_FCQueue_delay2_elimination_stat:
-            public cds::intrusive::fcqueue::make_traits<
-                cds::opt::back_off< cds::backoff::delay_of<2> >
-                ,cds::opt::stat< cds::intrusive::fcqueue::stat<> >
-                ,cds::opt::enable_elimination< true >
-            >::type
-        {};
-        class traits_FCQueue_expbackoff_elimination:
-            public cds::intrusive::fcqueue::make_traits<
-                cds::opt::enable_elimination< true >
-                ,cds::opt::elimination_backoff< cds::backoff::Default >
-            >::type
-        {};
-        class traits_FCQueue_expbackoff_elimination_stat:
-            public cds::intrusive::fcqueue::make_traits<
-                cds::opt::enable_elimination< true >
-                ,cds::opt::stat< cds::intrusive::fcqueue::stat<> >
-                ,cds::opt::elimination_backoff< cds::backoff::Default >
-            >::type
-        {};
-
-        typedef cds::intrusive::FCQueue< T, boost::intrusive::list<T>, traits_FCQueue_delay2 > FCQueue_list_delay2;
-        typedef cds::intrusive::FCQueue< T, boost::intrusive::list<T>, traits_FCQueue_delay2_elimination > FCQueue_list_delay2_elimination;
-        typedef cds::intrusive::FCQueue< T, boost::intrusive::list<T>, traits_FCQueue_delay2_elimination_stat > FCQueue_list_delay2_elimination_stat;
-        typedef cds::intrusive::FCQueue< T, boost::intrusive::list<T>, traits_FCQueue_expbackoff_elimination > FCQueue_list_expbackoff_elimination;
-        typedef cds::intrusive::FCQueue< T, boost::intrusive::list<T>, traits_FCQueue_expbackoff_elimination_stat > FCQueue_list_expbackoff_elimination_stat;
-
-        // SegmentedQueue
-        class traits_SegmentedQueue_spin_stat:
-            public cds::intrusive::segmented_queue::make_traits<
-                cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
-            >::type
-        {};
-        class traits_SegmentedQueue_spin_padding :
-            public cds::intrusive::segmented_queue::make_traits<
-            cds::opt::padding< cds::opt::cache_line_padding >
-            >::type
-        {};
-        class traits_SegmentedQueue_mutex_stat :
-            public cds::intrusive::segmented_queue::make_traits<
-                cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
-                ,cds::opt::lock_type< std::mutex >
-            >::type
-        {};
-        class traits_SegmentedQueue_mutex:
-            public cds::intrusive::segmented_queue::make_traits<
-                cds::opt::lock_type< std::mutex >
-            >::type
-        {};
-        class traits_SegmentedQueue_mutex_padding:
-            public cds::intrusive::segmented_queue::make_traits<
-                cds::opt::lock_type< std::mutex >
-                ,cds::opt::padding< cds::opt::cache_line_padding >
-            >::type
-        {};
-
-        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, T >  SegmentedQueue_HP_spin;
-        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, T, traits_SegmentedQueue_spin_padding >  SegmentedQueue_HP_spin_padding;
-        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, T, traits_SegmentedQueue_spin_stat >  SegmentedQueue_HP_spin_stat;
-        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, T, traits_SegmentedQueue_mutex >  SegmentedQueue_HP_mutex;
-        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, T, traits_SegmentedQueue_mutex_padding >  SegmentedQueue_HP_mutex_padding;
-        typedef cds::intrusive::SegmentedQueue< cds::gc::HP, T, traits_SegmentedQueue_mutex_stat >  SegmentedQueue_HP_mutex_stat;
-
-        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, T >  SegmentedQueue_DHP_spin;
-        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, T, traits_SegmentedQueue_spin_padding >  SegmentedQueue_DHP_spin_padding;
-        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, T, traits_SegmentedQueue_spin_stat >  SegmentedQueue_DHP_spin_stat;
-        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, T, traits_SegmentedQueue_mutex >  SegmentedQueue_DHP_mutex;
-        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, T, traits_SegmentedQueue_mutex_padding >  SegmentedQueue_DHP_mutex_padding;
-        typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, T, traits_SegmentedQueue_mutex_stat >  SegmentedQueue_DHP_mutex_stat;
-
-        // Boost SList
-        typedef details::BoostSList< T, std::mutex >      BoostSList_mutex;
-        typedef details::BoostSList< T, cds::sync::spin > BoostSList_spin;
-    };
-}
-
-
-// *********************************************
-// Queue statistics
-namespace std {
-    /*
-    // cds::intrusive::queue_stat
-    template <typename Counter>
-    static inline std::ostream& operator <<(std::ostream& o, cds::intrusive::queue_stat<Counter> const& s)
-    {
-        return o
-            << "\tStatistics:\n"
-            << "\t\t     Enqueue count: " << s.m_EnqueueCount.get() << "\n"
-            << "\t\t      Enqueue race: " << s.m_EnqueueRace.get() << "\n"
-            << "\t\t     Dequeue count: " << s.m_DequeueCount.get() << "\n"
-            << "\t\t      Dequeue race: " << s.m_DequeueRace.get() << "\n"
-            << "\t\tAdvance tail error: " << s.m_AdvanceTailError.get() << "\n"
-            << "\t\t          Bad tail: " << s.m_BadTail.get() << "\n";
-    }
-    static inline std::ostream& operator <<(std::ostream& o, cds::intrusive::queue_dummy_stat const& s)
-    {
-        return o;
-    }
-    */
-
-
-    template <typename Counter>
-    static inline std::ostream& operator <<(std::ostream& o, cds::intrusive::basket_queue::stat<Counter> const& s)
-    {
-        return o
-            << "\tStatistics:\n"
-            << "\t\t      Enqueue count: " << s.m_EnqueueCount.get() << "\n"
-            << "\t\t       Enqueue race: " << s.m_EnqueueRace.get() << "\n"
-            << "\t\t      Dequeue count: " << s.m_DequeueCount.get() << "\n"
-            << "\t\t       Dequeue race: " << s.m_DequeueRace.get() << "\n"
-            << "\t\t Advance tail error: " << s.m_AdvanceTailError.get() << "\n"
-            << "\t\t           Bad tail: " << s.m_BadTail.get() << "\n"
-            << "\t\tAdd basket attempts: " << s.m_TryAddBasket.get() << "\n"
-            << "\t\t Add basket success: " << s.m_AddBasketCount.get() << "\n";
-    }
-    static inline std::ostream& operator <<(std::ostream& o, cds::intrusive::basket_queue::empty_stat const& /*s*/)
-    {
-        return o;
-    }
-
-    template <typename Counter>
-    static inline std::ostream& operator <<( std::ostream& o, cds::intrusive::msqueue::stat<Counter> const& s )
-    {
-        return o
-            << "\tStatistics:\n"
-            << "\t\t     Enqueue count: " << s.m_EnqueueCount.get() << "\n"
-            << "\t\t      Enqueue race: " << s.m_EnqueueRace.get()  << "\n"
-            << "\t\t     Dequeue count: " << s.m_DequeueCount.get() << "\n"
-            << "\t\t      Dequeue race: " << s.m_DequeueRace.get()  << "\n"
-            << "\t\tAdvance tail error: " << s.m_AdvanceTailError.get() << "\n"
-            << "\t\t          Bad tail: " << s.m_BadTail.get() << "\n";
-    }
-
-    static inline std::ostream& operator <<( std::ostream& o, cds::intrusive::msqueue::empty_stat const& /*s*/ )
-    {
-        return o;
-    }
-
-    static inline std::ostream& operator <<( std::ostream& o, cds::opt::none )
-    {
-        return o;
-    }
-
-    // cds::intrusive::optimistic_queue::stat
-    template <typename Counter>
-    static inline std::ostream& operator <<( std::ostream& o, cds::intrusive::optimistic_queue::stat<Counter> const& s )
-    {
-        return o
-            << "\tStatistics:\n"
-            << "\t\t     Enqueue count: " << s.m_EnqueueCount.get() << "\n"
-            << "\t\t      Enqueue race: " << s.m_EnqueueRace.get() << "\n"
-            << "\t\t     Dequeue count: " << s.m_DequeueCount.get() << "\n"
-            << "\t\t      Dequeue race: " << s.m_DequeueRace.get() << "\n"
-            << "\t\tAdvance tail error: " << s.m_AdvanceTailError.get() << "\n"
-            << "\t\t          Bad tail: " << s.m_BadTail.get() << "\n"
-            << "\t\t     fix list call: " << s.m_FixListCount.get() << "\n";
-    }
-
-    static inline std::ostream& operator <<( std::ostream& o, cds::intrusive::optimistic_queue::empty_stat const& /*s*/ )
-    {
-        return o;
-    }
-
-    // cds::intrusive::fcqueue::stat
-    template <typename Counter>
-    static inline std::ostream& operator <<( std::ostream& o, cds::intrusive::fcqueue::stat<Counter> const& s )
-    {
-            return o << "\tStatistics:\n"
-                << "\t                    Push: " << s.m_nEnqueue.get()           << "\n"
-                << "\t                     Pop: " << s.m_nDequeue.get()           << "\n"
-                << "\t               FailedPop: " << s.m_nFailedDeq.get()         << "\n"
-                << "\t  Collided push/pop pair: " << s.m_nCollided.get()          << "\n"
-                << "\tFlat combining statistics:\n"
-                << "\t        Combining factor: " << s.combining_factor()         << "\n"
-                << "\t         Operation count: " << s.m_nOperationCount.get()    << "\n"
-                << "\t      Combine call count: " << s.m_nCombiningCount.get()    << "\n"
-                << "\t        Compact pub-list: " << s.m_nCompactPublicationList.get() << "\n"
-                << "\t   Deactivate pub-record: " << s.m_nDeactivatePubRecord.get()    << "\n"
-                << "\t     Activate pub-record: " << s.m_nActivatePubRecord.get() << "\n"
-                << "\t       Create pub-record: " << s.m_nPubRecordCreated.get()  << "\n"
-                << "\t       Delete pub-record: " << s.m_nPubRecordDeteted.get()  << "\n"
-                << "\t      Acquire pub-record: " << s.m_nAcquirePubRecCount.get()<< "\n"
-                << "\t      Release pub-record: " << s.m_nReleasePubRecCount.get()<< "\n";
-    }
-
-    static inline std::ostream& operator <<( std::ostream& o, cds::intrusive::fcqueue::empty_stat const& /*s*/ )
-    {
-        return o;
-    }
-
-    static inline std::ostream& operator <<( std::ostream& o, queue::details::empty_stat const& /*s*/ )
-    {
-        return o;
-    }
-
-} // namespace std
-
-#endif // #ifndef CDSUNIT_INTRUSIVE_QUEUE_TYPES_H
diff --git a/tests/unit/queue/queue_defs.h b/tests/unit/queue/queue_defs.h
deleted file mode 100644 (file)
index 18739fb..0000000
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_QUEUE_DEFS_H
-#define CDSUNIT_QUEUE_DEFS_H
-
-// MoirQueue
-#define CDSUNIT_DECLARE_MoirQueue( ITEM_TYPE ) \
-    TEST_CASE( MoirQueue_HP, ITEM_TYPE ) \
-    TEST_CASE( MoirQueue_HP_michaelAlloc, ITEM_TYPE ) \
-    TEST_CASE( MoirQueue_HP_seqcst, ITEM_TYPE ) \
-    TEST_CASE( MoirQueue_HP_ic, ITEM_TYPE ) \
-    TEST_CASE( MoirQueue_HP_stat, ITEM_TYPE ) \
-    TEST_CASE( MoirQueue_DHP, ITEM_TYPE ) \
-    TEST_CASE( MoirQueue_DHP_michaelAlloc, ITEM_TYPE ) \
-    TEST_CASE( MoirQueue_DHP_seqcst, ITEM_TYPE ) \
-    TEST_CASE( MoirQueue_DHP_ic, ITEM_TYPE ) \
-    TEST_CASE( MoirQueue_DHP_stat, ITEM_TYPE )
-
-#define CDSUNIT_TEST_MoirQueue \
-    CPPUNIT_TEST(MoirQueue_HP) \
-    CPPUNIT_TEST(MoirQueue_HP_michaelAlloc) \
-    CPPUNIT_TEST(MoirQueue_HP_seqcst) \
-    CPPUNIT_TEST(MoirQueue_HP_ic) \
-    CPPUNIT_TEST(MoirQueue_HP_stat) \
-    CPPUNIT_TEST(MoirQueue_DHP) \
-    CPPUNIT_TEST(MoirQueue_DHP_michaelAlloc) \
-    CPPUNIT_TEST(MoirQueue_DHP_seqcst) \
-    CPPUNIT_TEST(MoirQueue_DHP_ic) \
-    CPPUNIT_TEST(MoirQueue_DHP_stat)
-
-// MSQueue
-#define CDSUNIT_DECLARE_MSQueue( ITEM_TYPE ) \
-    TEST_CASE( MSQueue_HP, ITEM_TYPE  ) \
-    TEST_CASE( MSQueue_HP_michaelAlloc, ITEM_TYPE  ) \
-    TEST_CASE( MSQueue_HP_seqcst, ITEM_TYPE  ) \
-    TEST_CASE( MSQueue_HP_ic, ITEM_TYPE  ) \
-    TEST_CASE( MSQueue_HP_stat, ITEM_TYPE  ) \
-    TEST_CASE( MSQueue_DHP, ITEM_TYPE ) \
-    TEST_CASE( MSQueue_DHP_michaelAlloc, ITEM_TYPE ) \
-    TEST_CASE( MSQueue_DHP_seqcst, ITEM_TYPE ) \
-    TEST_CASE( MSQueue_DHP_ic, ITEM_TYPE ) \
-    TEST_CASE( MSQueue_DHP_stat, ITEM_TYPE )
-
-#define CDSUNIT_TEST_MSQueue \
-    CPPUNIT_TEST(MSQueue_HP) \
-    CPPUNIT_TEST(MSQueue_HP_michaelAlloc) \
-    CPPUNIT_TEST(MSQueue_HP_seqcst) \
-    CPPUNIT_TEST(MSQueue_HP_ic) \
-    CPPUNIT_TEST(MSQueue_HP_stat) \
-    CPPUNIT_TEST(MSQueue_DHP) \
-    CPPUNIT_TEST(MSQueue_DHP_michaelAlloc) \
-    CPPUNIT_TEST(MSQueue_DHP_seqcst) \
-    CPPUNIT_TEST(MSQueue_DHP_ic) \
-    CPPUNIT_TEST(MSQueue_DHP_stat)
-
-
-// OptimisticQueue
-#define CDSUNIT_DECLARE_OptimisticQueue( ITEM_TYPE ) \
-    TEST_CASE(OptimisticQueue_HP, ITEM_TYPE ) \
-    TEST_CASE(OptimisticQueue_HP_michaelAlloc, ITEM_TYPE ) \
-    TEST_CASE(OptimisticQueue_HP_seqcst, ITEM_TYPE ) \
-    TEST_CASE(OptimisticQueue_HP_ic, ITEM_TYPE ) \
-    TEST_CASE(OptimisticQueue_HP_stat, ITEM_TYPE ) \
-    TEST_CASE(OptimisticQueue_DHP, ITEM_TYPE ) \
-    TEST_CASE(OptimisticQueue_DHP_michaelAlloc, ITEM_TYPE ) \
-    TEST_CASE(OptimisticQueue_DHP_seqcst, ITEM_TYPE ) \
-    TEST_CASE(OptimisticQueue_DHP_ic, ITEM_TYPE ) \
-    TEST_CASE(OptimisticQueue_DHP_stat, ITEM_TYPE )
-
-#define CDSUNIT_TEST_OptimisticQueue \
-    CPPUNIT_TEST(OptimisticQueue_HP) \
-    CPPUNIT_TEST(OptimisticQueue_HP_michaelAlloc) \
-    CPPUNIT_TEST(OptimisticQueue_HP_seqcst) \
-    CPPUNIT_TEST(OptimisticQueue_HP_ic) \
-    CPPUNIT_TEST(OptimisticQueue_HP_stat) \
-    CPPUNIT_TEST(OptimisticQueue_DHP) \
-    CPPUNIT_TEST(OptimisticQueue_DHP_michaelAlloc) \
-    CPPUNIT_TEST(OptimisticQueue_DHP_seqcst) \
-    CPPUNIT_TEST(OptimisticQueue_DHP_ic) \
-    CPPUNIT_TEST(OptimisticQueue_DHP_stat)
-
-
-// BasketQueue
-#define CDSUNIT_DECLARE_BasketQueue( ITEM_TYPE ) \
-    TEST_CASE( BasketQueue_HP, ITEM_TYPE  ) \
-    TEST_CASE( BasketQueue_HP_michaelAlloc, ITEM_TYPE ) \
-    TEST_CASE( BasketQueue_HP_seqcst, ITEM_TYPE  ) \
-    TEST_CASE( BasketQueue_HP_ic, ITEM_TYPE  ) \
-    TEST_CASE( BasketQueue_HP_stat, ITEM_TYPE  ) \
-    TEST_CASE( BasketQueue_DHP, ITEM_TYPE ) \
-    TEST_CASE( BasketQueue_DHP_michaelAlloc, ITEM_TYPE ) \
-    TEST_CASE( BasketQueue_DHP_seqcst, ITEM_TYPE ) \
-    TEST_CASE( BasketQueue_DHP_ic, ITEM_TYPE ) \
-    TEST_CASE( BasketQueue_DHP_stat, ITEM_TYPE )
-
-#define CDSUNIT_TEST_BasketQueue \
-    CPPUNIT_TEST(BasketQueue_HP) \
-    CPPUNIT_TEST(BasketQueue_HP_michaelAlloc) \
-    CPPUNIT_TEST(BasketQueue_HP_seqcst) \
-    CPPUNIT_TEST(BasketQueue_HP_ic) \
-    CPPUNIT_TEST(BasketQueue_HP_stat) \
-    CPPUNIT_TEST(BasketQueue_DHP) \
-    CPPUNIT_TEST(BasketQueue_DHP_michaelAlloc) \
-    CPPUNIT_TEST(BasketQueue_DHP_seqcst) \
-    CPPUNIT_TEST(BasketQueue_DHP_ic) \
-    CPPUNIT_TEST(BasketQueue_DHP_stat)
-
-
-// FCQueue
-#define CDSUNIT_DECLARE_FCQueue( ITEM_TYPE ) \
-    TEST_CASE( FCQueue_deque, ITEM_TYPE ) \
-    TEST_CASE( FCQueue_deque_elimination, ITEM_TYPE ) \
-    TEST_CASE( FCQueue_deque_elimination_stat, ITEM_TYPE ) \
-    TEST_CASE( FCQueue_list, ITEM_TYPE ) \
-    TEST_CASE( FCQueue_list_elimination, ITEM_TYPE ) \
-    TEST_CASE( FCQueue_list_elimination_stat, ITEM_TYPE )
-
-#define CDSUNIT_TEST_FCQueue \
-    CPPUNIT_TEST( FCQueue_deque) \
-    CPPUNIT_TEST( FCQueue_deque_elimination) \
-    CPPUNIT_TEST( FCQueue_deque_elimination_stat) \
-    CPPUNIT_TEST( FCQueue_list) \
-    CPPUNIT_TEST( FCQueue_list_elimination) \
-    CPPUNIT_TEST( FCQueue_list_elimination_stat)
-
-
-// FCDeque
-#define CDSUNIT_DECLARE_FCDeque( ITEM_TYPE ) \
-    TEST_CASE( FCDequeL_default, ITEM_TYPE ) \
-    TEST_CASE( FCDequeL_mutex, ITEM_TYPE ) \
-    TEST_CASE( FCDequeL_stat, ITEM_TYPE ) \
-    TEST_CASE( FCDequeL_elimination, ITEM_TYPE ) \
-    TEST_CASE( FCDequeL_elimination_stat, ITEM_TYPE ) \
-    TEST_CASE( FCDequeL_boost, ITEM_TYPE ) \
-    TEST_CASE( FCDequeL_boost_stat, ITEM_TYPE ) \
-    TEST_CASE( FCDequeL_boost_elimination, ITEM_TYPE ) \
-    TEST_CASE( FCDequeL_boost_elimination_stat, ITEM_TYPE ) \
-    TEST_CASE( FCDequeR_default, ITEM_TYPE ) \
-    TEST_CASE( FCDequeR_mutex, ITEM_TYPE ) \
-    TEST_CASE( FCDequeR_stat, ITEM_TYPE ) \
-    TEST_CASE( FCDequeR_elimination, ITEM_TYPE ) \
-    TEST_CASE( FCDequeR_elimination_stat, ITEM_TYPE ) \
-    TEST_CASE( FCDequeR_boost, ITEM_TYPE ) \
-    TEST_CASE( FCDequeR_boost_stat, ITEM_TYPE ) \
-    TEST_CASE( FCDequeR_boost_elimination, ITEM_TYPE ) \
-    TEST_CASE( FCDequeR_boost_elimination_stat, ITEM_TYPE )
-
-#define CDSUNIT_TEST_FCDeque \
-    CPPUNIT_TEST( FCDequeL_default ) \
-    CPPUNIT_TEST( FCDequeL_mutex ) \
-    CPPUNIT_TEST( FCDequeL_stat ) \
-    CPPUNIT_TEST( FCDequeL_elimination ) \
-    CPPUNIT_TEST( FCDequeL_elimination_stat ) \
-    CPPUNIT_TEST( FCDequeL_boost ) \
-    CPPUNIT_TEST( FCDequeL_boost_stat ) \
-    CPPUNIT_TEST( FCDequeL_boost_elimination ) \
-    CPPUNIT_TEST( FCDequeL_boost_elimination_stat ) \
-    CPPUNIT_TEST( FCDequeR_default ) \
-    CPPUNIT_TEST( FCDequeR_mutex ) \
-    CPPUNIT_TEST( FCDequeR_stat ) \
-    CPPUNIT_TEST( FCDequeR_elimination ) \
-    CPPUNIT_TEST( FCDequeR_elimination_stat ) \
-    CPPUNIT_TEST( FCDequeR_boost ) \
-    CPPUNIT_TEST( FCDequeR_boost_stat ) \
-    CPPUNIT_TEST( FCDequeR_boost_elimination ) \
-    CPPUNIT_TEST( FCDequeR_boost_elimination_stat )
-
-
-// RWQueue
-#define CDSUNIT_DECLARE_RWQueue( ITEM_TYPE ) \
-    TEST_CASE( RWQueue_Spin, ITEM_TYPE ) \
-    TEST_CASE( RWQueue_Spin_ic, ITEM_TYPE ) \
-    TEST_CASE( RWQueue_mutex, ITEM_TYPE )
-
-#define CDSUNIT_TEST_RWQueue \
-    CPPUNIT_TEST(RWQueue_Spin) \
-    CPPUNIT_TEST(RWQueue_Spin_ic) \
-    CPPUNIT_TEST(RWQueue_mutex)
-
-// TsigasCycleQueue
-#define CDSUNIT_DECLARE_TsigasCycleQueue( ITEM_TYPE ) \
-    TEST_BOUNDED(TsigasCycleQueue_dyn, ITEM_TYPE) \
-    TEST_BOUNDED(TsigasCycleQueue_dyn_michaelAlloc, ITEM_TYPE) \
-    TEST_BOUNDED(TsigasCycleQueue_dyn_ic, ITEM_TYPE)
-
-#define CDSUNIT_TEST_TsigasCycleQueue \
-    CPPUNIT_TEST(TsigasCycleQueue_dyn) \
-    CPPUNIT_TEST(TsigasCycleQueue_dyn_michaelAlloc) \
-    CPPUNIT_TEST(TsigasCycleQueue_dyn_ic)
-
-
-// VyukovMPMCCycleQueue
-#define CDSUNIT_DECLARE_VyukovMPMCCycleQueue( ITEM_TYPE ) \
-    TEST_BOUNDED(VyukovMPMCCycleQueue_dyn, ITEM_TYPE) \
-    TEST_BOUNDED(VyukovMPMCCycleQueue_dyn_michaelAlloc, ITEM_TYPE) \
-    TEST_BOUNDED(VyukovMPMCCycleQueue_dyn_ic, ITEM_TYPE) \
-
-
-#define CDSUNIT_TEST_VyukovMPMCCycleQueue \
-    CPPUNIT_TEST(VyukovMPMCCycleQueue_dyn) \
-    CPPUNIT_TEST(VyukovMPMCCycleQueue_dyn_michaelAlloc) \
-    CPPUNIT_TEST(VyukovMPMCCycleQueue_dyn_ic) \
-
-// SegmentedQueue
-#define CDSUNIT_DECLARE_SegmentedQueue( ITEM_TYPE ) \
-    TEST_SEGMENTED( SegmentedQueue_HP_spin, ITEM_TYPE ) \
-    TEST_SEGMENTED( SegmentedQueue_HP_spin_padding, ITEM_TYPE ) \
-    TEST_SEGMENTED( SegmentedQueue_HP_spin_stat, ITEM_TYPE ) \
-    TEST_SEGMENTED( SegmentedQueue_HP_mutex, ITEM_TYPE ) \
-    TEST_SEGMENTED( SegmentedQueue_HP_mutex_padding, ITEM_TYPE ) \
-    TEST_SEGMENTED( SegmentedQueue_HP_mutex_stat, ITEM_TYPE ) \
-    TEST_SEGMENTED( SegmentedQueue_DHP_spin, ITEM_TYPE ) \
-    TEST_SEGMENTED( SegmentedQueue_DHP_spin_padding, ITEM_TYPE ) \
-    TEST_SEGMENTED( SegmentedQueue_DHP_spin_stat, ITEM_TYPE ) \
-    TEST_SEGMENTED( SegmentedQueue_DHP_mutex, ITEM_TYPE ) \
-    TEST_SEGMENTED( SegmentedQueue_DHP_mutex_padding, ITEM_TYPE ) \
-    TEST_SEGMENTED( SegmentedQueue_DHP_mutex_stat, ITEM_TYPE )
-
-#define CDSUNIT_TEST_SegmentedQueue \
-    CPPUNIT_TEST( SegmentedQueue_HP_spin ) \
-    CPPUNIT_TEST( SegmentedQueue_HP_spin_padding ) \
-    CPPUNIT_TEST( SegmentedQueue_HP_spin_stat ) \
-    CPPUNIT_TEST( SegmentedQueue_HP_mutex ) \
-    CPPUNIT_TEST( SegmentedQueue_HP_mutex_padding ) \
-    CPPUNIT_TEST( SegmentedQueue_HP_mutex_stat ) \
-    CPPUNIT_TEST( SegmentedQueue_DHP_spin ) \
-    CPPUNIT_TEST( SegmentedQueue_DHP_spin_padding ) \
-    CPPUNIT_TEST( SegmentedQueue_DHP_spin_stat ) \
-    CPPUNIT_TEST( SegmentedQueue_DHP_mutex ) \
-    CPPUNIT_TEST( SegmentedQueue_DHP_mutex_padding ) \
-    CPPUNIT_TEST( SegmentedQueue_DHP_mutex_stat )
-
-// std::queue
-#define CDSUNIT_DECLARE_StdQueue( ITEM_TYPE ) \
-    TEST_CASE( StdQueue_deque_Spinlock, ITEM_TYPE ) \
-    TEST_CASE( StdQueue_list_Spinlock, ITEM_TYPE ) \
-    TEST_CASE( StdQueue_deque_BoostMutex, ITEM_TYPE ) \
-    TEST_CASE( StdQueue_list_BoostMutex, ITEM_TYPE )
-
-#define CDSUNIT_TEST_StdQueue \
-    CPPUNIT_TEST(StdQueue_deque_Spinlock) \
-    CPPUNIT_TEST(StdQueue_list_Spinlock) \
-    CPPUNIT_TEST(StdQueue_deque_BoostMutex) \
-    CPPUNIT_TEST(StdQueue_list_BoostMutex)
-
-
-#endif // #ifndef CDSUNIT_QUEUE_DEFS_H
diff --git a/tests/unit/queue/queue_pop.cpp b/tests/unit/queue/queue_pop.cpp
deleted file mode 100644 (file)
index bcb4e5f..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/thread.h"
-#include "queue/queue_type.h"
-#include "queue/queue_defs.h"
-
-// Multi-threaded queue test for pop operation
-namespace queue {
-
-#define TEST_CASE( Q, V )       void Q() { test< Types<V>::Q >(); }
-#define TEST_BOUNDED( Q, V )    void Q() { test_bounded< Types<V>::Q >(); }
-#define TEST_SEGMENTED( Q, V )  void Q() { test_segmented< Types<V>::Q >(); }
-
-    namespace ns_Queue_Pop {
-        static size_t s_nThreadCount = 8;
-        static size_t s_nQueueSize = 20000000 ;   // no more than 20 million records
-
-        struct SimpleValue {
-            size_t    nNo;
-
-            SimpleValue(): nNo(0) {}
-            SimpleValue( size_t n ): nNo(n) {}
-            size_t getNo() const { return  nNo; }
-        };
-    }
-    using namespace ns_Queue_Pop;
-
-    class Queue_Pop: public CppUnitMini::TestCase
-    {
-        template <class Queue>
-        class Thread: public CppUnitMini::TestThread
-        {
-            virtual TestThread *    clone()
-            {
-                return new Thread( *this );
-            }
-        public:
-            Queue&              m_Queue;
-            double              m_fTime;
-            long *              m_arr;
-            size_t              m_nPopCount;
-
-        public:
-            Thread( CppUnitMini::ThreadPool& pool, Queue& q )
-                : CppUnitMini::TestThread( pool )
-                , m_Queue( q )
-            {
-                m_arr = new long[s_nQueueSize];
-            }
-            Thread( Thread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Queue( src.m_Queue )
-            {
-                m_arr = new long[s_nQueueSize];
-            }
-            ~Thread()
-            {
-                delete [] m_arr;
-            }
-
-            Queue_Pop&  getTest()
-            {
-                return reinterpret_cast<Queue_Pop&>( m_Pool.m_Test );
-            }
-
-            virtual void init()
-            {
-                cds::threading::Manager::attachThread();
-                memset(m_arr, 0, sizeof(m_arr[0]) * s_nQueueSize );
-            }
-            virtual void fini()
-            {
-                cds::threading::Manager::detachThread();
-            }
-
-            virtual void test()
-            {
-                m_fTime = m_Timer.duration();
-
-                typedef typename Queue::value_type value_type;
-                value_type value = value_type();
-                size_t nPopCount = 0;
-                while ( m_Queue.pop( value ) ) {
-                    ++m_arr[ value.getNo() ];
-                    ++nPopCount;
-                }
-                m_nPopCount = nPopCount;
-
-                m_fTime = m_Timer.duration() - m_fTime;
-            }
-        };
-
-    protected:
-
-        template <class Queue>
-        void analyze( CppUnitMini::ThreadPool& pool, Queue& testQueue  )
-        {
-            size_t * arr = new size_t[ s_nQueueSize ];
-            memset(arr, 0, sizeof(arr[0]) * s_nQueueSize );
-
-            double fTime = 0;
-            size_t nTotalPops = 0;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                Thread<Queue> * pThread = reinterpret_cast<Thread<Queue> *>(*it);
-                for ( size_t i = 0; i < s_nQueueSize; ++i )
-                    arr[i] += pThread->m_arr[i];
-                nTotalPops += pThread->m_nPopCount;
-                fTime += pThread->m_fTime;
-            }
-            CPPUNIT_MSG( "     Duration=" << (fTime / s_nThreadCount) );
-            CPPUNIT_CHECK_EX( nTotalPops == s_nQueueSize, "Total pop=" << nTotalPops << ", queue size=" << s_nQueueSize);
-            CPPUNIT_CHECK( testQueue.empty() )
-
-            size_t nError = 0;
-            for ( size_t i = 0; i < s_nQueueSize; ++i ) {
-                if ( arr[i] != 1 ) {
-                    CPPUNIT_MSG( "   ERROR: Item " << i << " has not been popped" );
-                    CPPUNIT_ASSERT( ++nError <= 10 );
-                }
-            }
-
-            delete [] arr;
-        }
-
-        template <class Queue>
-        void test()
-        {
-            Queue testQueue;
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new Thread<Queue>( pool, testQueue ), s_nThreadCount );
-
-            CPPUNIT_MSG( "   Create queue size =" << s_nQueueSize << " ...");
-            cds::OS::Timer      timer;
-            for ( size_t i = 0; i < s_nQueueSize; ++i )
-                testQueue.push( i );
-            CPPUNIT_MSG( "     Duration=" << timer.duration() );
-
-            CPPUNIT_MSG( "   Pop test, thread count=" << s_nThreadCount << " ...");
-            pool.run();
-
-            analyze( pool, testQueue );
-
-            CPPUNIT_MSG( testQueue.statistics() );
-        }
-
-        template <class Queue>
-        void test_bounded()
-        {
-            Queue testQueue( s_nQueueSize );
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new Thread<Queue>( pool, testQueue ), s_nThreadCount );
-
-            CPPUNIT_MSG( "   Create queue size =" << s_nQueueSize << " ...");
-            cds::OS::Timer      timer;
-            for ( size_t i = 0; i < s_nQueueSize; ++i )
-                testQueue.push( i );
-            CPPUNIT_MSG( "     Duration=" << timer.duration() );
-
-            CPPUNIT_MSG( "   Pop test, thread count=" << s_nThreadCount << " ...");
-            pool.run();
-
-            analyze( pool, testQueue );
-
-            CPPUNIT_MSG( testQueue.statistics() );
-        }
-
-        template <class Queue>
-        void test_segmented()
-        {
-            for ( size_t nSegmentSize = 4; nSegmentSize <= 256; nSegmentSize *= 4 ) {
-                CPPUNIT_MSG( "Segment size: " << nSegmentSize );
-
-                Queue testQueue( nSegmentSize );
-                CppUnitMini::ThreadPool pool( *this );
-                pool.add( new Thread<Queue>( pool, testQueue ), s_nThreadCount );
-
-                CPPUNIT_MSG( "   Create queue size =" << s_nQueueSize << " ...");
-                cds::OS::Timer      timer;
-                for ( size_t i = 0; i < s_nQueueSize; ++i )
-                    testQueue.push( i );
-                CPPUNIT_MSG( "     Duration=" << timer.duration() );
-
-                CPPUNIT_MSG( "   Pop test, thread count=" << s_nThreadCount << " ...");
-                pool.run();
-
-                analyze( pool, testQueue );
-
-                CPPUNIT_MSG( testQueue.statistics() );
-            }
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg ) {
-            s_nThreadCount = cfg.getULong("ThreadCount", 8 );
-            s_nQueueSize = cfg.getULong("QueueSize", 20000000 );
-        }
-
-    protected:
-        CDSUNIT_DECLARE_MoirQueue( SimpleValue )
-        CDSUNIT_DECLARE_MSQueue( SimpleValue )
-        CDSUNIT_DECLARE_OptimisticQueue( SimpleValue )
-        CDSUNIT_DECLARE_BasketQueue( SimpleValue )
-        CDSUNIT_DECLARE_FCQueue( SimpleValue )
-        CDSUNIT_DECLARE_FCDeque( SimpleValue )
-        CDSUNIT_DECLARE_SegmentedQueue( SimpleValue )
-        CDSUNIT_DECLARE_RWQueue( SimpleValue )
-        CDSUNIT_DECLARE_TsigasCycleQueue( SimpleValue )
-        CDSUNIT_DECLARE_VyukovMPMCCycleQueue( SimpleValue )
-        CDSUNIT_DECLARE_StdQueue( SimpleValue )
-
-        CPPUNIT_TEST_SUITE(Queue_Pop)
-            CDSUNIT_TEST_MoirQueue
-            CDSUNIT_TEST_MSQueue
-            CDSUNIT_TEST_OptimisticQueue
-            CDSUNIT_TEST_BasketQueue
-            CDSUNIT_TEST_FCQueue
-            CDSUNIT_TEST_FCDeque
-            CDSUNIT_TEST_SegmentedQueue
-            CDSUNIT_TEST_RWQueue
-            CDSUNIT_TEST_TsigasCycleQueue
-            CDSUNIT_TEST_VyukovMPMCCycleQueue
-            CDSUNIT_TEST_StdQueue
-        CPPUNIT_TEST_SUITE_END();
-    };
-
-} // namespace queue
-
-CPPUNIT_TEST_SUITE_REGISTRATION(queue::Queue_Pop);
diff --git a/tests/unit/queue/queue_push.cpp b/tests/unit/queue/queue_push.cpp
deleted file mode 100644 (file)
index bce4848..0000000
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/thread.h"
-#include "queue/queue_type.h"
-#include "queue/queue_defs.h"
-
-
-// Multi-threaded queue test for push operation
-namespace queue {
-
-#define TEST_CASE( Q, V )       void Q() { test< Types<V>::Q >(); }
-#define TEST_BOUNDED( Q, V )    void Q() { test_bounded< Types<V>::Q >(); }
-#define TEST_SEGMENTED( Q, V )  void Q() { test_segmented< Types<V>::Q >(); }
-
-    namespace ns_Queue_Push {
-        static size_t s_nThreadCount = 8;
-        static size_t s_nQueueSize = 20000000 ;   // no more than 20 million records
-
-        struct SimpleValue {
-            size_t      nNo;
-
-            SimpleValue(): nNo(0) {}
-            SimpleValue( size_t n ): nNo(n) {}
-            size_t getNo() const { return  nNo; }
-        };
-    }
-    using namespace ns_Queue_Push;
-
-    class Queue_Push: public CppUnitMini::TestCase
-    {
-        template <class Queue>
-        class Thread: public CppUnitMini::TestThread
-        {
-            virtual TestThread *    clone()
-            {
-                return new Thread( *this );
-            }
-        public:
-            Queue&              m_Queue;
-            double              m_fTime;
-            size_t              m_nStartItem;
-            size_t              m_nEndItem;
-            size_t              m_nPushError;
-
-        public:
-            Thread( CppUnitMini::ThreadPool& pool, Queue& q )
-                : CppUnitMini::TestThread( pool )
-                , m_Queue( q )
-            {}
-            Thread( Thread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Queue( src.m_Queue )
-            {}
-
-            Queue_Push&  getTest()
-            {
-                return reinterpret_cast<Queue_Push&>( m_Pool.m_Test );
-            }
-
-            virtual void init()
-            {
-                cds::threading::Manager::attachThread();
-            }
-            virtual void fini()
-            {
-                cds::threading::Manager::detachThread();
-            }
-
-            virtual void test()
-            {
-                m_fTime = m_Timer.duration();
-
-                m_nPushError = 0;
-                for ( size_t nItem = m_nStartItem; nItem < m_nEndItem; ++nItem ) {
-                    if ( !m_Queue.push( nItem ))
-                        ++m_nPushError;
-                }
-
-                m_fTime = m_Timer.duration() - m_fTime;
-            }
-        };
-
-    protected:
-        template <class Queue>
-        void analyze( CppUnitMini::ThreadPool& pool, Queue& testQueue  )
-        {
-            size_t nThreadItems = s_nQueueSize / s_nThreadCount;
-            double fTime = 0;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                Thread<Queue> * pThread = reinterpret_cast<Thread<Queue> *>(*it);
-                fTime += pThread->m_fTime;
-                if ( pThread->m_nPushError != 0 )
-                    CPPUNIT_MSG("     ERROR: thread push error count=" << pThread->m_nPushError );
-            }
-            CPPUNIT_MSG( "     Duration=" << (fTime / s_nThreadCount) );
-            CPPUNIT_CHECK( !testQueue.empty() )
-
-            size_t * arr = new size_t[ s_nQueueSize ];
-            memset(arr, 0, sizeof(arr[0]) * s_nQueueSize );
-
-            cds::OS::Timer      timer;
-            CPPUNIT_MSG( "   Pop (single-threaded)..." );
-            size_t nPopped = 0;
-            SimpleValue val = SimpleValue();
-            while ( testQueue.pop( val )) {
-                nPopped++;
-                ++arr[ val.getNo() ];
-            }
-            CPPUNIT_MSG( "     Duration=" << timer.duration() );
-
-            size_t nTotalItems = nThreadItems * s_nThreadCount;
-            size_t nError = 0;
-            for ( size_t i = 0; i < nTotalItems; ++i ) {
-                if ( arr[i] != 1 ) {
-                    CPPUNIT_MSG( "   ERROR: Item " << i << " has not been pushed" );
-                    CPPUNIT_ASSERT( ++nError <= 10 );
-                }
-            }
-
-            delete [] arr;
-        }
-
-        template <class Queue>
-        void test()
-        {
-            Queue testQueue;
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new Thread<Queue>( pool, testQueue ), s_nThreadCount );
-
-            size_t nStart = 0;
-            size_t nThreadItemCount = s_nQueueSize / s_nThreadCount;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                Thread<Queue> * pThread = reinterpret_cast<Thread<Queue> *>(*it);
-                pThread->m_nStartItem = nStart;
-                nStart += nThreadItemCount;
-                pThread->m_nEndItem = nStart;
-            }
-
-            CPPUNIT_MSG( "   Push test, thread count=" << s_nThreadCount << " ...");
-            pool.run();
-
-            analyze( pool, testQueue );
-
-            CPPUNIT_MSG( testQueue.statistics() );
-        }
-
-        template <class Queue>
-        void test_bounded()
-        {
-            size_t nStart = 0;
-            size_t nThreadItemCount = s_nQueueSize / s_nThreadCount;
-
-            Queue testQueue( s_nQueueSize );
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new Thread<Queue>( pool, testQueue ), s_nThreadCount );
-
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                Thread<Queue> * pThread = reinterpret_cast<Thread<Queue> *>(*it);
-                pThread->m_nStartItem = nStart;
-                nStart += nThreadItemCount;
-                pThread->m_nEndItem = nStart;
-            }
-
-            CPPUNIT_MSG( "   Push test, thread count=" << s_nThreadCount << " ...");
-            pool.run();
-
-            analyze( pool, testQueue );
-
-            CPPUNIT_MSG( testQueue.statistics() );
-        }
-
-        template <class Queue>
-        void test_segmented()
-        {
-            CPPUNIT_MSG( "   Push test, thread count=" << s_nThreadCount << " ...");
-            for ( size_t nSegmentSize = 4; nSegmentSize <= 256; nSegmentSize *= 4 ) {
-                CPPUNIT_MSG( "Segment size: " << nSegmentSize );
-
-                Queue testQueue( nSegmentSize );
-
-                CppUnitMini::ThreadPool pool( *this );
-                pool.add( new Thread<Queue>( pool, testQueue ), s_nThreadCount );
-
-                size_t nStart = 0;
-                size_t nThreadItemCount = s_nQueueSize / s_nThreadCount;
-                for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                    Thread<Queue> * pThread = reinterpret_cast<Thread<Queue> *>(*it);
-                    pThread->m_nStartItem = nStart;
-                    nStart += nThreadItemCount;
-                    pThread->m_nEndItem = nStart;
-                }
-
-                pool.run();
-
-                analyze( pool, testQueue );
-
-                CPPUNIT_MSG( testQueue.statistics() );
-            }
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg ) {
-            s_nThreadCount = cfg.getULong("ThreadCount", 8 );
-            s_nQueueSize = cfg.getULong("QueueSize", 20000000 );
-        }
-
-    protected:
-        CDSUNIT_DECLARE_MoirQueue( SimpleValue )
-        CDSUNIT_DECLARE_MSQueue( SimpleValue )
-        CDSUNIT_DECLARE_OptimisticQueue( SimpleValue )
-        CDSUNIT_DECLARE_BasketQueue( SimpleValue )
-        CDSUNIT_DECLARE_FCQueue( SimpleValue )
-        CDSUNIT_DECLARE_FCDeque( SimpleValue )
-        CDSUNIT_DECLARE_SegmentedQueue( SimpleValue )
-        CDSUNIT_DECLARE_RWQueue( SimpleValue )
-        CDSUNIT_DECLARE_TsigasCycleQueue( SimpleValue )
-        CDSUNIT_DECLARE_VyukovMPMCCycleQueue( SimpleValue )
-        CDSUNIT_DECLARE_StdQueue( SimpleValue )
-
-        CPPUNIT_TEST_SUITE(Queue_Push)
-            CDSUNIT_TEST_MoirQueue
-            CDSUNIT_TEST_MSQueue
-            CDSUNIT_TEST_OptimisticQueue
-            CDSUNIT_TEST_BasketQueue
-            CDSUNIT_TEST_FCQueue
-            CDSUNIT_TEST_FCDeque
-            CDSUNIT_TEST_SegmentedQueue
-            CDSUNIT_TEST_RWQueue
-            CDSUNIT_TEST_TsigasCycleQueue
-            CDSUNIT_TEST_VyukovMPMCCycleQueue
-            CDSUNIT_TEST_StdQueue
-        CPPUNIT_TEST_SUITE_END();
-    };
-
-} // namespace queue
-
-CPPUNIT_TEST_SUITE_REGISTRATION(queue::Queue_Push);
diff --git a/tests/unit/queue/queue_random.cpp b/tests/unit/queue/queue_random.cpp
deleted file mode 100644 (file)
index ab78580..0000000
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/thread.h"
-#include "queue/queue_type.h"
-#include "queue/queue_defs.h"
-
-
-#include <vector>
-#include <boost/type_traits/is_base_of.hpp>
-
-// Multi-threaded queue test for random push/pop operation
-namespace queue {
-
-#define TEST_CASE( Q, V )       void Q() { test< Types<V>::Q >(); }
-#define TEST_BOUNDED( Q, V )    TEST_CASE( Q, V )
-#define TEST_SEGMENTED( Q, V )  void Q() { test_segmented< Types< V >::Q >(); }
-
-    namespace ns_Queue_Random {
-        static size_t s_nThreadCount = 16;
-        static size_t s_nQueueSize = 10000000;
-
-        struct SimpleValue {
-            size_t      nNo;
-            size_t      nThread;
-
-            SimpleValue() {}
-            SimpleValue( size_t n ): nNo(n) {}
-            size_t getNo() const { return  nNo; }
-        };
-    }
-
-    using namespace ns_Queue_Random;
-
-    class Queue_Random: public CppUnitMini::TestCase
-    {
-        typedef CppUnitMini::TestCase base_class;
-
-        template <class Queue>
-        class Thread: public CppUnitMini::TestThread
-        {
-            virtual TestThread *    clone()
-            {
-                return new Thread( *this );
-            }
-        public:
-            Queue&              m_Queue;
-            double              m_fTime;
-
-            size_t  m_nPushCount;
-            size_t  m_nPopCount;
-            size_t  m_nEmptyPop;
-
-            size_t  m_nUndefWriter;
-            size_t  m_nRepeatValue;
-            size_t  m_nPushError        ;    // push error count
-
-            std::vector<size_t> m_arrLastRead;
-            std::vector<size_t> m_arrPopCountPerThread;
-
-            size_t const m_nSpread;
-
-        public:
-            Thread( CppUnitMini::ThreadPool& pool, Queue& q, size_t nSpread = 0 )
-                : CppUnitMini::TestThread( pool )
-                , m_Queue( q )
-                , m_nSpread( nSpread )
-            {}
-            Thread( Thread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Queue( src.m_Queue )
-                , m_nSpread( src.m_nSpread )
-            {}
-
-            Queue_Random&  getTest()
-            {
-                return reinterpret_cast<Queue_Random&>( m_Pool.m_Test );
-            }
-
-            virtual void init()
-            {
-                cds::threading::Manager::attachThread();
-                m_nPushCount =
-                    m_nPopCount =
-                    m_nEmptyPop =
-                    m_nUndefWriter =
-                    m_nRepeatValue =
-                    m_nPushError = 0;
-
-                m_arrLastRead.resize( s_nThreadCount, 0 );
-                m_arrPopCountPerThread.resize( s_nThreadCount, 0 );
-            }
-            virtual void fini()
-            {
-                cds::threading::Manager::detachThread();
-            }
-
-            virtual void test()
-            {
-                size_t const nThreadCount = s_nThreadCount;
-                size_t const nTotalPush = getTest().m_nThreadPushCount;
-
-                SimpleValue node;
-
-                m_fTime = m_Timer.duration();
-
-                bool bNextPop = false;
-                while ( m_nPushCount < nTotalPush ) {
-                    if ( !bNextPop && (rand() & 3) != 3 ) {
-                        // push
-                        node.nThread = m_nThreadNo;
-                        node.nNo = ++m_nPushCount;
-                        if ( !m_Queue.push( node )) {
-                            ++m_nPushError;
-                            --m_nPushCount;
-                        }
-
-                    }
-                    else {
-                        // pop
-                        pop( nThreadCount );
-                        bNextPop = false;
-                    }
-                }
-
-                size_t nPopLoop = 0;
-                while ( !m_Queue.empty() && nPopLoop < 1000000 ) {
-                    if ( pop( nThreadCount ) )
-                        nPopLoop = 0;
-                    else
-                        ++nPopLoop;
-                }
-
-
-                m_fTime = m_Timer.duration() - m_fTime;
-            }
-
-            bool pop( size_t nThreadCount )
-            {
-                SimpleValue node;
-                node.nThread = -1;
-                node.nNo = -1;
-                if ( m_Queue.pop( node )) {
-                    ++m_nPopCount;
-                    if ( node.nThread < nThreadCount ) {
-                        m_arrPopCountPerThread[ node.nThread ] += 1;
-                        if ( m_nSpread ) {
-                            if ( m_arrLastRead[ node.nThread ] > node.nNo ) {
-                                if ( m_arrLastRead[ node.nThread ] - node.nNo > m_nSpread )
-                                    ++m_nRepeatValue;
-                            }
-                            else if ( m_arrLastRead[ node.nThread ] == node.nNo )
-                                ++m_nRepeatValue;
-                            m_arrLastRead[ node.nThread ] = node.nNo;
-                        }
-                        else {
-                            if ( m_arrLastRead[ node.nThread ] < node.nNo ) {
-                                m_arrLastRead[ node.nThread ] = node.nNo;
-                            }
-                            else
-                                ++m_nRepeatValue;
-                        }
-
-                        //if ( node.nNo < m_Test.m_nPushCount )
-                        //    m_Test.m_pRead[ node.nWriter ][ node.nNo ] = node.nNo;
-                    }
-                    else {
-                        ++m_nUndefWriter;
-                    }
-                }
-                else {
-                    ++m_nEmptyPop;
-                    return false;
-                }
-                return true;
-            }
-        };
-
-    protected:
-        size_t  m_nThreadPushCount;
-
-    protected:
-        template <class Queue>
-        void analyze( CppUnitMini::ThreadPool& pool, Queue& testQueue  )
-        {
-            CPPUNIT_CHECK( testQueue.empty() );
-
-            std::vector< size_t > arrPushCount;
-            arrPushCount.resize( s_nThreadCount, 0 );
-
-            size_t nPushTotal = 0;
-            size_t nPopTotal  = 0;
-            double fTime = 0;
-            size_t nPushError = 0;
-
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                Thread<Queue> * pThread = static_cast<Thread<Queue> *>( *it );
-                CPPUNIT_CHECK( pThread->m_nUndefWriter == 0 );
-                CPPUNIT_CHECK_EX( pThread->m_nRepeatValue == 0, "nRepeatValue=" << pThread->m_nRepeatValue );
-                if ( !boost::is_base_of<cds::bounded_container, Queue>::value ) {
-                    CPPUNIT_CHECK( pThread->m_nPushError == 0 );
-                }
-                else
-                    nPushError += pThread->m_nPushError;
-
-                arrPushCount[ pThread->m_nThreadNo ] += pThread->m_nPushCount;
-
-                nPushTotal += pThread->m_nPushCount;
-                nPopTotal += pThread->m_nPopCount;
-                fTime += pThread->m_fTime;
-            }
-
-            CPPUNIT_MSG( "     Duration=" << (fTime /= s_nThreadCount) );
-            if ( boost::is_base_of<cds::bounded_container, Queue>::value ) {
-                CPPUNIT_MSG( "         push error (when queue is full)=" << nPushError );
-            }
-
-            size_t nTotalItems = m_nThreadPushCount * s_nThreadCount;
-
-            CPPUNIT_CHECK_EX( nPushTotal == nTotalItems, "nPushTotal=" << nPushTotal << ", nTotalItems=" << nTotalItems );
-            CPPUNIT_CHECK_EX( nPopTotal == nTotalItems, "nPopTotal=" << nPopTotal << ", nTotalItems=" << nTotalItems );
-
-            for ( size_t i = 0; i < s_nThreadCount; ++i )
-                CPPUNIT_CHECK( arrPushCount[i] == m_nThreadPushCount );
-        }
-
-        template <class Queue>
-        void test()
-        {
-            CPPUNIT_MSG( "Random push/pop test\n    thread count=" << s_nThreadCount << ", push count=" << s_nQueueSize << " ..." );
-
-            m_nThreadPushCount = s_nQueueSize / s_nThreadCount;
-
-            Queue testQueue;
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new Thread<Queue>( pool, testQueue ), s_nThreadCount );
-
-            pool.run();
-
-            analyze( pool, testQueue );
-            CPPUNIT_MSG( testQueue.statistics() );
-        }
-
-        template <class Queue>
-        void test_segmented()
-        {
-            CPPUNIT_MSG( "Random push/pop test\n    thread count=" << s_nThreadCount << ", push count=" << s_nQueueSize << " ..." );
-
-            m_nThreadPushCount = s_nQueueSize / s_nThreadCount;
-
-            for ( size_t nSegmentSize = 4; nSegmentSize <= 256; nSegmentSize *= 4 ) {
-                CPPUNIT_MSG( "Segment size: " << nSegmentSize );
-
-                Queue testQueue( nSegmentSize );
-                CppUnitMini::ThreadPool pool( *this );
-                pool.add( new Thread<Queue>( pool, testQueue, nSegmentSize * 2 ), s_nThreadCount );
-
-                pool.run();
-
-                analyze( pool, testQueue );
-                CPPUNIT_MSG( testQueue.statistics() );
-            }
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg ) {
-            s_nThreadCount = cfg.getULong("ThreadCount", 8 );
-            s_nQueueSize = cfg.getULong("QueueSize", 20000000 );
-        }
-
-    protected:
-        CDSUNIT_DECLARE_MoirQueue( SimpleValue )
-        CDSUNIT_DECLARE_MSQueue( SimpleValue )
-        CDSUNIT_DECLARE_OptimisticQueue( SimpleValue )
-        CDSUNIT_DECLARE_BasketQueue( SimpleValue )
-        CDSUNIT_DECLARE_FCQueue( SimpleValue )
-        CDSUNIT_DECLARE_FCDeque( SimpleValue )
-        CDSUNIT_DECLARE_SegmentedQueue( SimpleValue )
-        CDSUNIT_DECLARE_RWQueue( SimpleValue )
-        CDSUNIT_DECLARE_TsigasCycleQueue( SimpleValue )
-        CDSUNIT_DECLARE_VyukovMPMCCycleQueue( SimpleValue )
-        CDSUNIT_DECLARE_StdQueue( SimpleValue )
-
-        CPPUNIT_TEST_SUITE(Queue_Random)
-            CDSUNIT_TEST_MoirQueue
-            CDSUNIT_TEST_MSQueue
-            CDSUNIT_TEST_OptimisticQueue
-            CDSUNIT_TEST_BasketQueue
-            CDSUNIT_TEST_FCQueue
-            CDSUNIT_TEST_FCDeque
-            CDSUNIT_TEST_SegmentedQueue
-            CDSUNIT_TEST_RWQueue
-            CDSUNIT_TEST_TsigasCycleQueue
-            CDSUNIT_TEST_VyukovMPMCCycleQueue
-            CDSUNIT_TEST_StdQueue
-        CPPUNIT_TEST_SUITE_END();
-    };
-
-} // namespace queue
-
-CPPUNIT_TEST_SUITE_REGISTRATION(queue::Queue_Random);
diff --git a/tests/unit/queue/queue_reader_writer.cpp b/tests/unit/queue/queue_reader_writer.cpp
deleted file mode 100644 (file)
index 742e0eb..0000000
+++ /dev/null
@@ -1,394 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/thread.h"
-#include "queue/queue_type.h"
-#include "queue/queue_defs.h"
-
-#include <vector>
-#include <algorithm>
-
-// Multi-threaded random queue test
-namespace queue {
-
-#define TEST_CASE( Q, V )       void Q() { test< Types<V>::Q >(); }
-#define TEST_BOUNDED( Q, V )    TEST_CASE( Q, V )
-#define TEST_SEGMENTED( Q, V )  void Q() { test_segmented< Types< V >::Q >(); }
-
-    namespace {
-        static size_t s_nReaderThreadCount = 4;
-        static size_t s_nWriterThreadCount = 4;
-        static size_t s_nQueueSize = 4000000;
-
-        struct Value {
-            size_t      nNo;
-            size_t      nWriterNo;
-        };
-    }
-
-    class Queue_ReaderWriter: public CppUnitMini::TestCase
-    {
-        template <class Queue>
-        class WriterThread: public CppUnitMini::TestThread
-        {
-            virtual TestThread *    clone()
-            {
-                return new WriterThread( *this );
-            }
-        public:
-            Queue&              m_Queue;
-            double              m_fTime;
-            size_t              m_nPushFailed;
-
-        public:
-            WriterThread( CppUnitMini::ThreadPool& pool, Queue& q )
-                : CppUnitMini::TestThread( pool )
-                , m_Queue( q )
-            {}
-            WriterThread( WriterThread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Queue( src.m_Queue )
-            {}
-
-            Queue_ReaderWriter&  getTest()
-            {
-                return reinterpret_cast<Queue_ReaderWriter&>( m_Pool.m_Test );
-            }
-
-            virtual void init()
-            {
-                cds::threading::Manager::attachThread();
-            }
-            virtual void fini()
-            {
-                cds::threading::Manager::detachThread();
-            }
-
-            virtual void test()
-            {
-                size_t nPushCount = getTest().m_nThreadPushCount;
-                Value v;
-                v.nWriterNo = m_nThreadNo;
-                v.nNo = 0;
-                m_nPushFailed = 0;
-
-                m_fTime = m_Timer.duration();
-
-                while ( v.nNo < nPushCount ) {
-                    if ( m_Queue.push( v ))
-                        ++v.nNo;
-                    else
-                        ++m_nPushFailed;
-                }
-
-                m_fTime = m_Timer.duration() - m_fTime;
-                getTest().m_nWriterDone.fetch_add( 1 );
-            }
-        };
-
-        template <class Queue>
-        class ReaderThread: public CppUnitMini::TestThread
-        {
-            virtual TestThread *    clone()
-            {
-                return new ReaderThread( *this );
-            }
-        public:
-            Queue&              m_Queue;
-            double              m_fTime;
-            size_t              m_nPopEmpty;
-            size_t              m_nPopped;
-            size_t              m_nBadWriter;
-
-            typedef std::vector<size_t> TPoppedData;
-            typedef std::vector<size_t>::iterator       data_iterator;
-            typedef std::vector<size_t>::const_iterator const_data_iterator;
-
-            std::vector<TPoppedData>        m_WriterData;
-
-        private:
-            void initPoppedData()
-            {
-                const size_t nWriterCount = s_nWriterThreadCount;
-                const size_t nWriterPushCount = getTest().m_nThreadPushCount;
-                m_WriterData.resize( nWriterCount );
-                for ( size_t i = 0; i < nWriterCount; ++i )
-                    m_WriterData[i].reserve( nWriterPushCount );
-            }
-
-        public:
-            ReaderThread( CppUnitMini::ThreadPool& pool, Queue& q )
-                : CppUnitMini::TestThread( pool )
-                , m_Queue( q )
-            {
-                initPoppedData();
-            }
-            ReaderThread( ReaderThread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Queue( src.m_Queue )
-            {
-                initPoppedData();
-            }
-
-            Queue_ReaderWriter&  getTest()
-            {
-                return reinterpret_cast<Queue_ReaderWriter&>( m_Pool.m_Test );
-            }
-
-            virtual void init()
-            {
-                cds::threading::Manager::attachThread();
-            }
-            virtual void fini()
-            {
-                cds::threading::Manager::detachThread();
-            }
-
-            virtual void test()
-            {
-                m_nPopEmpty = 0;
-                m_nPopped = 0;
-                m_nBadWriter = 0;
-                const size_t nTotalWriters = s_nWriterThreadCount;
-                Value v;
-
-                m_fTime = m_Timer.duration();
-
-                while ( true ) {
-                    if ( m_Queue.pop( v ) ) {
-                        ++m_nPopped;
-                        if ( /*v.nWriterNo >= 0 &&*/ v.nWriterNo < nTotalWriters )
-                            m_WriterData[ v.nWriterNo ].push_back( v.nNo );
-                        else
-                            ++m_nBadWriter;
-                    }
-                    else
-                        ++m_nPopEmpty;
-
-                    if ( m_Queue.empty() ) {
-                        if ( getTest().m_nWriterDone.load() >= nTotalWriters ) {
-                            if ( m_Queue.empty() )
-                                    break;
-                        }
-                    }
-                }
-
-                m_fTime = m_Timer.duration() - m_fTime;
-            }
-        };
-
-    protected:
-        size_t                  m_nThreadPushCount;
-        atomics::atomic<size_t>     m_nWriterDone;
-
-    protected:
-        template <class Queue>
-        void analyze( CppUnitMini::ThreadPool& pool, Queue& testQueue, size_t /*nLeftOffset*/ = 0, size_t nRightOffset = 0  )
-        {
-            typedef ReaderThread<Queue> Reader;
-            typedef WriterThread<Queue> Writer;
-            typedef typename Reader::const_data_iterator    ReaderIterator;
-
-            size_t nPostTestPops = 0;
-            {
-                Value v;
-                while ( testQueue.pop( v ))
-                    ++nPostTestPops;
-            }
-
-            double fTimeWriter = 0;
-            double fTimeReader = 0;
-            size_t nTotalPops = 0;
-            size_t nPopFalse = 0;
-            size_t nPoppedItems = 0;
-            size_t nPushFailed = 0;
-
-            std::vector< Reader * > arrReaders;
-
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                Reader * pReader = dynamic_cast<Reader *>( *it );
-                if ( pReader ) {
-                    fTimeReader += pReader->m_fTime;
-                    nTotalPops += pReader->m_nPopped;
-                    nPopFalse += pReader->m_nPopEmpty;
-                    arrReaders.push_back( pReader );
-                    CPPUNIT_CHECK_EX( pReader->m_nBadWriter == 0, "reader " << pReader->m_nThreadNo << " bad writer event count=" << pReader->m_nBadWriter );
-
-                    size_t nPopped = 0;
-                    for ( size_t n = 0; n < s_nWriterThreadCount; ++n )
-                        nPopped += pReader->m_WriterData[n].size();
-
-                    CPPUNIT_MSG( "    Reader " << pReader->m_nThreadNo - s_nWriterThreadCount << " popped count=" << nPopped );
-                    nPoppedItems += nPopped;
-                }
-                else {
-                    Writer * pWriter = dynamic_cast<Writer *>( *it );
-                    CPPUNIT_ASSERT( pWriter != nullptr );
-                    fTimeWriter += pWriter->m_fTime;
-                    nPushFailed += pWriter->m_nPushFailed;
-                    if ( !boost::is_base_of<cds::bounded_container, Queue>::value ) {
-                        CPPUNIT_CHECK_EX( pWriter->m_nPushFailed == 0,
-                            "writer " << pWriter->m_nThreadNo << " push failed count=" << pWriter->m_nPushFailed );
-                    }
-                }
-            }
-            CPPUNIT_CHECK_EX( nTotalPops == nPoppedItems, "nTotalPops=" << nTotalPops << ", nPoppedItems=" << nPoppedItems );
-
-            CPPUNIT_MSG( "    Readers: duration=" << fTimeReader / s_nReaderThreadCount << ", success pop=" << nTotalPops << ", failed pops=" << nPopFalse );
-            CPPUNIT_MSG( "    Writers: duration=" << fTimeWriter / s_nWriterThreadCount << ", failed push=" << nPushFailed );
-
-            size_t nQueueSize = m_nThreadPushCount * s_nWriterThreadCount;
-            CPPUNIT_CHECK_EX( nTotalPops + nPostTestPops == nQueueSize, "popped=" << nTotalPops + nPostTestPops << " must be " << nQueueSize );
-            CPPUNIT_CHECK( testQueue.empty() );
-
-            // Test that all items have been popped
-            CPPUNIT_MSG( "   Test consistency of popped sequence..." );
-            for ( size_t nWriter = 0; nWriter < s_nWriterThreadCount; ++nWriter ) {
-                std::vector<size_t> arrData;
-                arrData.reserve( m_nThreadPushCount );
-                size_t nErrors = 0;
-                for ( size_t nReader = 0; nReader < arrReaders.size(); ++nReader ) {
-                    ReaderIterator it = arrReaders[nReader]->m_WriterData[nWriter].begin();
-                    ReaderIterator itEnd = arrReaders[nReader]->m_WriterData[nWriter].end();
-                    if ( it != itEnd ) {
-                        ReaderIterator itPrev = it;
-                        for ( ++it; it != itEnd; ++it ) {
-                            CPPUNIT_CHECK_EX( *itPrev < *it + nRightOffset, "Reader " << nReader << ", Writer " << nWriter << ": prev=" << *itPrev << ", cur=" << *it );
-                            if ( ++nErrors > 10 )
-                                return;
-                            itPrev = it;
-                        }
-                    }
-
-                    for ( it = arrReaders[nReader]->m_WriterData[nWriter].begin(); it != itEnd; ++it )
-                        arrData.push_back( *it );
-                }
-
-                std::sort( arrData.begin(), arrData.end() );
-                nErrors = 0;
-                for ( size_t i=1; i < arrData.size(); ++i ) {
-                    if ( arrData[i-1] + 1 != arrData[i] ) {
-                        CPPUNIT_CHECK_EX( arrData[i-1] + 1 == arrData[i], "Writer " << nWriter << ": [" << (i-1) << "]=" << arrData[i-1] << ", [" << i << "]=" << arrData[i] );
-                        if ( ++nErrors > 10 )
-                            return;
-                    }
-                }
-
-                CPPUNIT_CHECK_EX( arrData[0] == 0, "Writer " << nWriter << "[0] != 0" );
-                CPPUNIT_CHECK_EX( arrData[arrData.size() - 1] == m_nThreadPushCount - 1, "Writer " << nWriter << "[last] != " << m_nThreadPushCount - 1 );
-            }
-        }
-
-        template <class Queue>
-        void test()
-        {
-            m_nThreadPushCount = s_nQueueSize / s_nWriterThreadCount;
-            CPPUNIT_MSG( "    reader count=" << s_nReaderThreadCount << " writer count=" << s_nWriterThreadCount
-                << " item count=" << m_nThreadPushCount * s_nWriterThreadCount << "..." );
-
-            Queue testQueue;
-            CppUnitMini::ThreadPool pool( *this );
-
-            m_nWriterDone.store( 0 );
-
-            // Writers must be first
-            pool.add( new WriterThread<Queue>( pool, testQueue ), s_nWriterThreadCount );
-            pool.add( new ReaderThread<Queue>( pool, testQueue ), s_nReaderThreadCount );
-
-            //CPPUNIT_MSG( "   Reader/Writer test, reader count=" << s_nReaderThreadCount << " writer count=" << s_nWriterThreadCount << "..." );
-            pool.run();
-
-            analyze( pool, testQueue );
-            CPPUNIT_MSG( testQueue.statistics() );
-        }
-
-        template <class Queue>
-        void test_segmented()
-        {
-            m_nThreadPushCount = s_nQueueSize / s_nWriterThreadCount;
-            CPPUNIT_MSG( "    reader count=" << s_nReaderThreadCount << " writer count=" << s_nWriterThreadCount
-                << " item count=" << m_nThreadPushCount * s_nWriterThreadCount << "..." );
-
-            for ( size_t nSegmentSize = 4; nSegmentSize <= 256; nSegmentSize *= 4 ) {
-                CPPUNIT_MSG( "Segment size: " << nSegmentSize );
-
-                Queue q( nSegmentSize );
-                CppUnitMini::ThreadPool pool( *this );
-
-                m_nWriterDone.store( 0 );
-
-                // Writers must be first
-                pool.add( new WriterThread<Queue>( pool, q ), s_nWriterThreadCount );
-                pool.add( new ReaderThread<Queue>( pool, q ), s_nReaderThreadCount );
-
-                pool.run();
-
-                analyze( pool, q, nSegmentSize * 2, nSegmentSize );
-                CPPUNIT_MSG( q.statistics() );
-            }
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg ) {
-            s_nReaderThreadCount = cfg.getULong("ReaderCount", 4 );
-            s_nWriterThreadCount = cfg.getULong("WriterCount", 4 );
-            s_nQueueSize = cfg.getULong("QueueSize", 10000000 );
-        }
-
-    protected:
-        CDSUNIT_DECLARE_MoirQueue( Value )
-        CDSUNIT_DECLARE_MSQueue( Value )
-        CDSUNIT_DECLARE_OptimisticQueue( Value )
-        CDSUNIT_DECLARE_BasketQueue( Value )
-        CDSUNIT_DECLARE_FCQueue( Value )
-        CDSUNIT_DECLARE_FCDeque( Value )
-        CDSUNIT_DECLARE_SegmentedQueue( Value )
-        CDSUNIT_DECLARE_RWQueue( Value )
-        CDSUNIT_DECLARE_TsigasCycleQueue( Value )
-        CDSUNIT_DECLARE_VyukovMPMCCycleQueue( Value )
-        CDSUNIT_DECLARE_StdQueue( Value )
-
-        CPPUNIT_TEST_SUITE(Queue_ReaderWriter)
-            CDSUNIT_TEST_MoirQueue
-            CDSUNIT_TEST_MSQueue
-            CDSUNIT_TEST_OptimisticQueue
-            CDSUNIT_TEST_BasketQueue
-            CDSUNIT_TEST_FCQueue
-            CDSUNIT_TEST_FCDeque
-            CDSUNIT_TEST_SegmentedQueue
-            CDSUNIT_TEST_RWQueue
-            CDSUNIT_TEST_TsigasCycleQueue
-            CDSUNIT_TEST_VyukovMPMCCycleQueue
-            CDSUNIT_TEST_StdQueue
-        CPPUNIT_TEST_SUITE_END();
-    };
-
-} // namespace queue
-
-CPPUNIT_TEST_SUITE_REGISTRATION(queue::Queue_ReaderWriter);
diff --git a/tests/unit/queue/queue_type.h b/tests/unit/queue/queue_type.h
deleted file mode 100644 (file)
index 337c609..0000000
+++ /dev/null
@@ -1,674 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_QUEUE_TYPES_H
-#define CDSUNIT_QUEUE_TYPES_H
-
-#include <cds/container/msqueue.h>
-#include <cds/container/moir_queue.h>
-#include <cds/container/rwqueue.h>
-#include <cds/container/optimistic_queue.h>
-#include <cds/container/tsigas_cycle_queue.h>
-#include <cds/container/vyukov_mpmc_cycle_queue.h>
-#include <cds/container/basket_queue.h>
-#include <cds/container/fcqueue.h>
-#include <cds/container/fcdeque.h>
-#include <cds/container/segmented_queue.h>
-
-#include <cds/gc/hp.h>
-#include <cds/gc/dhp.h>
-
-#include "queue/std_queue.h"
-#include "lock/win32_lock.h"
-#include "michael_alloc.h"
-#include "print_segmentedqueue_stat.h"
-
-#include <boost/container/deque.hpp>
-
-namespace queue {
-    namespace details {
-        template <typename T, typename Traits=cds::container::fcdeque::traits, class Deque=std::deque<T> >
-        class FCDequeL: public cds::container::FCDeque<T, Deque, Traits >
-        {
-            typedef cds::container::FCDeque<T, Deque, Traits > base_class;
-        public:
-            FCDequeL()
-            {}
-
-            FCDequeL(
-                unsigned int nCompactFactor     ///< Flat combining: publication list compacting factor
-                ,unsigned int nCombinePassCount ///< Flat combining: number of combining passes for combiner thread
-                )
-                : base_class( nCompactFactor, nCombinePassCount )
-            {}
-
-            bool push( T const& v )
-            {
-                return base_class::push_front( v );
-            }
-            bool enqueue( T const& v )
-            {
-                return push( v );
-            }
-
-            bool pop( T& v )
-            {
-                return base_class::pop_back( v );
-            }
-            bool deque( T& v )
-            {
-                return pop(v);
-            }
-        };
-
-        template <typename T, typename Traits=cds::container::fcdeque::traits, class Deque = std::deque<T> >
-        class FCDequeR: public cds::container::FCDeque<T, Deque, Traits >
-        {
-            typedef cds::container::FCDeque<T, Deque, Traits > base_class;
-        public:
-            FCDequeR()
-            {}
-
-            FCDequeR(
-                unsigned int nCompactFactor     ///< Flat combining: publication list compacting factor
-                ,unsigned int nCombinePassCount ///< Flat combining: number of combining passes for combiner thread
-                )
-                : base_class( nCompactFactor, nCombinePassCount )
-            {}
-
-            bool push( T const& v )
-            {
-                return base_class::push_back( v );
-            }
-            bool enqueue( T const& v )
-            {
-                return push( v );
-            }
-
-            bool pop( T& v )
-            {
-                return base_class::pop_front( v );
-            }
-            bool deque( T& v )
-            {
-                return pop(v);
-            }
-        };
-
-    } // namespace details
-
-    template <typename Value>
-    struct Types {
-
-        // MSQueue
-        typedef cds::container::MSQueue<cds::gc::HP,  Value > MSQueue_HP;
-        typedef cds::container::MSQueue<cds::gc::DHP, Value > MSQueue_DHP;
-        typedef cds::container::MoirQueue<cds::gc::HP, Value > MoirQueue_HP;
-        typedef cds::container::MoirQueue<cds::gc::DHP, Value > MoirQueue_DHP;
-
-        struct traits_MSQueue_michaelAlloc : public cds::container::msqueue::traits
-        {
-            typedef memory::MichaelAllocator<int>  allocator;
-        };
-        typedef cds::container::MSQueue<cds::gc::HP,  Value, traits_MSQueue_michaelAlloc > MSQueue_HP_michaelAlloc;
-        typedef cds::container::MSQueue<cds::gc::DHP, Value, traits_MSQueue_michaelAlloc > MSQueue_DHP_michaelAlloc;
-        typedef cds::container::MoirQueue<cds::gc::HP, Value, traits_MSQueue_michaelAlloc > MoirQueue_HP_michaelAlloc;
-        typedef cds::container::MoirQueue<cds::gc::DHP, Value, traits_MSQueue_michaelAlloc > MoirQueue_DHP_michaelAlloc;
-
-        struct traits_MSQueue_seqcst : public
-            cds::container::msqueue::make_traits <
-                cds::opt::memory_model < cds::opt::v::sequential_consistent >
-            > ::type
-        {};
-        typedef cds::container::MSQueue< cds::gc::HP,  Value, traits_MSQueue_seqcst > MSQueue_HP_seqcst;
-        typedef cds::container::MSQueue< cds::gc::DHP, Value, traits_MSQueue_seqcst > MSQueue_DHP_seqcst;
-        typedef cds::container::MoirQueue< cds::gc::HP, Value, traits_MSQueue_seqcst > MoirQueue_HP_seqcst;
-        typedef cds::container::MoirQueue< cds::gc::DHP, Value, traits_MSQueue_seqcst > MoirQueue_DHP_seqcst;
-
-        // MSQueue + item counter
-        struct traits_MSQueue_ic : public
-            cds::container::msqueue::make_traits <
-                cds::opt::item_counter < cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef cds::container::MSQueue< cds::gc::HP,  Value, traits_MSQueue_ic > MSQueue_HP_ic;
-        typedef cds::container::MSQueue< cds::gc::DHP, Value, traits_MSQueue_ic > MSQueue_DHP_ic;
-        typedef cds::container::MoirQueue< cds::gc::HP, Value, traits_MSQueue_ic > MoirQueue_HP_ic;
-        typedef cds::container::MoirQueue< cds::gc::DHP, Value, traits_MSQueue_ic > MoirQueue_DHP_ic;
-
-        // MSQueue + stat
-        struct traits_MSQueue_stat: public
-            cds::container::msqueue::make_traits <
-                cds::opt::stat< cds::container::msqueue::stat<> >
-            >::type
-        {};
-        typedef cds::container::MSQueue< cds::gc::HP,  Value, traits_MSQueue_stat > MSQueue_HP_stat;
-        typedef cds::container::MSQueue< cds::gc::DHP, Value, traits_MSQueue_stat > MSQueue_DHP_stat;
-        typedef cds::container::MoirQueue< cds::gc::HP, Value, traits_MSQueue_stat > MoirQueue_HP_stat;
-        typedef cds::container::MoirQueue< cds::gc::DHP, Value, traits_MSQueue_stat > MoirQueue_DHP_stat;
-
-
-        // OptimisticQueue
-        typedef cds::container::OptimisticQueue< cds::gc::HP, Value > OptimisticQueue_HP;
-        typedef cds::container::OptimisticQueue< cds::gc::DHP, Value > OptimisticQueue_DHP;
-
-        struct traits_OptimisticQueue_michaelAlloc : public cds::container::optimistic_queue::traits
-        {
-            typedef memory::MichaelAllocator<int> allocator;
-        };
-        typedef cds::container::OptimisticQueue< cds::gc::HP,  Value, traits_OptimisticQueue_michaelAlloc > OptimisticQueue_HP_michaelAlloc;
-        typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_michaelAlloc > OptimisticQueue_DHP_michaelAlloc;
-
-        struct traits_OptimisticQueue_seqcst : public cds::container::optimistic_queue::traits
-        {
-            typedef cds::opt::v::sequential_consistent memory_model;
-        };
-        typedef cds::container::OptimisticQueue< cds::gc::HP,  Value, traits_OptimisticQueue_seqcst > OptimisticQueue_HP_seqcst;
-        typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_seqcst > OptimisticQueue_DHP_seqcst;
-
-        struct traits_OptimisticQueue_ic : public cds::container::optimistic_queue::traits
-        {
-            typedef cds::atomicity::item_counter item_counter;
-        };
-        typedef cds::container::OptimisticQueue< cds::gc::HP,  Value, traits_OptimisticQueue_ic > OptimisticQueue_HP_ic;
-        typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_ic > OptimisticQueue_DHP_ic;
-
-        struct traits_OptimisticQueue_stat : public
-            cds::container::optimistic_queue::make_traits <
-                cds::opt::stat < cds::intrusive::optimistic_queue::stat<> >
-            > ::type
-        {};
-        typedef cds::container::OptimisticQueue< cds::gc::HP,  Value, traits_OptimisticQueue_stat > OptimisticQueue_HP_stat;
-        typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_stat > OptimisticQueue_DHP_stat;
-
-
-        // TsigasCycleQueue
-
-        class TsigasCycleQueue_dyn
-            : public cds::container::TsigasCycleQueue< Value,
-                typename cds::container::tsigas_queue::make_traits<
-                    cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
-                >::type
-            >
-        {
-            typedef cds::container::TsigasCycleQueue< Value,
-                typename cds::container::tsigas_queue::make_traits<
-                    cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
-                >::type
-            > base_class;
-        public:
-            TsigasCycleQueue_dyn()
-                : base_class( 1024 * 64 )
-            {}
-
-            TsigasCycleQueue_dyn( size_t nCapacity )
-                : base_class( nCapacity )
-            {}
-
-            cds::opt::none statistics() const
-            {
-                return cds::opt::none();
-            }
-        };
-
-        class TsigasCycleQueue_dyn_michaelAlloc
-            : public cds::container::TsigasCycleQueue< Value,
-                typename cds::container::tsigas_queue::make_traits<
-                    cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
-                    ,cds::opt::allocator< memory::MichaelAllocator<int> >
-                >::type
-            >
-        {
-            typedef cds::container::TsigasCycleQueue< Value,
-                typename cds::container::tsigas_queue::make_traits<
-                   cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
-                    , cds::opt::allocator< memory::MichaelAllocator<int> >
-                >::type
-            > base_class;
-        public:
-            TsigasCycleQueue_dyn_michaelAlloc()
-                : base_class( 1024 * 64 )
-            {}
-
-            TsigasCycleQueue_dyn_michaelAlloc( size_t nCapacity )
-                : base_class( nCapacity )
-            {}
-
-            cds::opt::none statistics() const
-            {
-                return cds::opt::none();
-            }
-        };
-
-        class TsigasCycleQueue_dyn_ic
-            : public cds::container::TsigasCycleQueue< Value,
-                typename cds::container::tsigas_queue::make_traits<
-                    cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
-                    ,cds::opt::item_counter< cds::atomicity::item_counter >
-                >::type
-            >
-        {
-            typedef cds::container::TsigasCycleQueue< Value,
-                typename cds::container::tsigas_queue::make_traits<
-                    cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
-                    ,cds::opt::item_counter< cds::atomicity::item_counter >
-                >::type
-            > base_class;
-        public:
-            TsigasCycleQueue_dyn_ic()
-                : base_class( 1024 * 64 )
-            {}
-            TsigasCycleQueue_dyn_ic( size_t nCapacity )
-                : base_class( nCapacity )
-            {}
-
-            cds::opt::none statistics() const
-            {
-                return cds::opt::none();
-            }
-        };
-
-        // VyukovMPMCCycleQueue
-        struct traits_VyukovMPMCCycleQueue_dyn : public cds::container::vyukov_queue::traits
-        {
-            typedef cds::opt::v::dynamic_buffer< int > buffer;
-        };
-        class VyukovMPMCCycleQueue_dyn
-            : public cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn >
-        {
-            typedef cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn > base_class;
-        public:
-            VyukovMPMCCycleQueue_dyn()
-                : base_class( 1024 * 64 )
-            {}
-            VyukovMPMCCycleQueue_dyn( size_t nCapacity )
-                : base_class( nCapacity )
-            {}
-
-            cds::opt::none statistics() const
-            {
-                return cds::opt::none();
-            }
-        };
-
-        struct traits_VyukovMPMCCycleQueue_dyn_michaelAlloc : public cds::container::vyukov_queue::traits
-        {
-            typedef cds::opt::v::dynamic_buffer< int, memory::MichaelAllocator<int> > buffer;
-        };
-        class VyukovMPMCCycleQueue_dyn_michaelAlloc
-            : public cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_michaelAlloc >
-        {
-            typedef cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_michaelAlloc > base_class;
-        public:
-            VyukovMPMCCycleQueue_dyn_michaelAlloc()
-                : base_class( 1024 * 64 )
-            {}
-            VyukovMPMCCycleQueue_dyn_michaelAlloc( size_t nCapacity )
-                : base_class( nCapacity )
-            {}
-
-            cds::opt::none statistics() const
-            {
-                return cds::opt::none();
-            }
-        };
-
-        struct traits_VyukovMPMCCycleQueue_dyn_ic : public traits_VyukovMPMCCycleQueue_dyn
-        {
-            typedef cds::atomicity::item_counter item_counter;
-        };
-        class VyukovMPMCCycleQueue_dyn_ic
-            : public cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_ic >
-        {
-            typedef cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_ic > base_class;
-        public:
-            VyukovMPMCCycleQueue_dyn_ic()
-                : base_class( 1024 * 64 )
-            {}
-            VyukovMPMCCycleQueue_dyn_ic( size_t nCapacity )
-                : base_class( nCapacity )
-            {}
-
-            cds::opt::none statistics() const
-            {
-                return cds::opt::none();
-            }
-        };
-
-
-        // BasketQueue
-
-        typedef cds::container::BasketQueue< cds::gc::HP , Value > BasketQueue_HP;
-        typedef cds::container::BasketQueue< cds::gc::DHP, Value > BasketQueue_DHP;
-
-        struct traits_BasketQueue_michaelAlloc : public cds::container::basket_queue::traits
-        {
-            typedef memory::MichaelAllocator<int> allocator;
-        };
-        typedef cds::container::BasketQueue< cds::gc::HP,  Value, traits_BasketQueue_michaelAlloc > BasketQueue_HP_michaelAlloc;
-        typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_michaelAlloc > BasketQueue_DHP_michaelAlloc;
-
-        struct traits_BasketQueue_seqcst : public cds::container::basket_queue::traits
-        {
-            typedef cds::opt::v::sequential_consistent mamory_model;
-        };
-        typedef cds::container::BasketQueue< cds::gc::HP,  Value, traits_BasketQueue_seqcst > BasketQueue_HP_seqcst;
-        typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_seqcst > BasketQueue_DHP_seqcst;
-
-        struct traits_BasketQueue_ic : public cds::container::basket_queue::traits
-        {
-            typedef cds::atomicity::item_counter item_counter;
-        };
-        typedef cds::container::BasketQueue< cds::gc::HP,  Value, traits_BasketQueue_ic >BasketQueue_HP_ic;
-        typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_ic >BasketQueue_DHP_ic;
-
-        struct traits_BasketQueue_stat : public cds::container::basket_queue::traits
-        {
-            typedef cds::container::basket_queue::stat<> stat;
-        };
-        typedef cds::container::BasketQueue< cds::gc::HP,  Value, traits_BasketQueue_stat > BasketQueue_HP_stat;
-        typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_stat > BasketQueue_DHP_stat;
-
-
-        // RWQueue
-        typedef cds::container::RWQueue< Value > RWQueue_Spin;
-
-        struct traits_RWQueue_Spin_ic : public cds::container::rwqueue::traits
-        {
-            typedef cds::atomicity::item_counter item_counter;
-        };
-        typedef cds::container::RWQueue< Value, traits_RWQueue_Spin_ic > RWQueue_Spin_ic;
-
-        struct traits_RWQueue_mutex : public
-            cds::container::rwqueue::make_traits<
-                cds::opt::lock_type< std::mutex >
-            >::type
-        {};
-        typedef cds::container::RWQueue< Value, traits_RWQueue_mutex > RWQueue_mutex;
-
-        // FCQueue
-        class traits_FCQueue_elimination:
-            public cds::container::fcqueue::make_traits<
-                cds::opt::enable_elimination< true >
-            >::type
-        {};
-        class traits_FCQueue_elimination_stat:
-            public cds::container::fcqueue::make_traits<
-                cds::opt::enable_elimination< true >
-                ,cds::opt::stat< cds::container::fcqueue::stat<> >
-            >::type
-        {};
-
-        typedef cds::container::FCQueue< Value > FCQueue_deque;
-        typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_elimination > FCQueue_deque_elimination;
-        typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_elimination_stat > FCQueue_deque_elimination_stat;
-
-        typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value> > > FCQueue_list;
-        typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value> >, traits_FCQueue_elimination > FCQueue_list_elimination;
-        typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value> >, traits_FCQueue_elimination_stat > FCQueue_list_elimination_stat;
-
-
-   // FCDeque
-        struct traits_FCDeque_stat:
-            public cds::container::fcdeque::make_traits<
-                cds::opt::stat< cds::container::fcdeque::stat<> >
-            >::type
-        {};
-        struct traits_FCDeque_elimination:
-            public cds::container::fcdeque::make_traits<
-                cds::opt::enable_elimination< true >
-            >::type
-        {};
-        struct traits_FCDeque_elimination_stat:
-            public cds::container::fcdeque::make_traits<
-                cds::opt::stat< cds::container::fcdeque::stat<> >,
-                cds::opt::enable_elimination< true >
-            >::type
-        {};
-        struct traits_FCDeque_mutex:
-            public cds::container::fcdeque::make_traits<
-                cds::opt::lock_type< std::mutex >
-            >::type
-        {};
-
-        typedef details::FCDequeL< Value > FCDequeL_default;
-        typedef details::FCDequeL< Value, traits_FCDeque_mutex > FCDequeL_mutex;
-        typedef details::FCDequeL< Value, traits_FCDeque_stat > FCDequeL_stat;
-        typedef details::FCDequeL< Value, traits_FCDeque_elimination > FCDequeL_elimination;
-        typedef details::FCDequeL< Value, traits_FCDeque_elimination_stat > FCDequeL_elimination_stat;
-
-        typedef details::FCDequeL< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeL_boost;
-        typedef details::FCDequeL< Value, traits_FCDeque_stat, boost::container::deque<Value> > FCDequeL_boost_stat;
-        typedef details::FCDequeL< Value, traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeL_boost_elimination;
-        typedef details::FCDequeL< Value, traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeL_boost_elimination_stat;
-
-        typedef details::FCDequeR< Value > FCDequeR_default;
-        typedef details::FCDequeR< Value, traits_FCDeque_mutex > FCDequeR_mutex;
-        typedef details::FCDequeR< Value, traits_FCDeque_stat > FCDequeR_stat;
-        typedef details::FCDequeR< Value, traits_FCDeque_elimination > FCDequeR_elimination;
-        typedef details::FCDequeR< Value, traits_FCDeque_elimination_stat > FCDequeR_elimination_stat;
-
-        typedef details::FCDequeR< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeR_boost;
-        typedef details::FCDequeR< Value, traits_FCDeque_stat, boost::container::deque<Value> > FCDequeR_boost_stat;
-        typedef details::FCDequeR< Value, traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeR_boost_elimination;
-        typedef details::FCDequeR< Value, traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeR_boost_elimination_stat;
-
-        typedef StdQueue_deque<Value>               StdQueue_deque_Spinlock;
-        typedef StdQueue_list<Value>                StdQueue_list_Spinlock;
-        typedef StdQueue_deque<Value, std::mutex>   StdQueue_deque_BoostMutex;
-        typedef StdQueue_list<Value, std::mutex>    StdQueue_list_BoostMutex;
-#ifdef UNIT_LOCK_WIN_CS
-        typedef StdQueue_deque<Value, lock::win::CS>    StdQueue_deque_WinCS;
-        typedef StdQueue_list<Value, lock::win::CS>     StdQueue_list_WinCS;
-        typedef StdQueue_deque<Value, lock::win::Mutex> StdQueue_deque_WinMutex;
-        typedef StdQueue_list<Value, lock::win::Mutex>  StdQueue_list_WinMutex;
-#endif
-
-        // SegmentedQueue
-        class traits_SegmentedQueue_spin_stat:
-            public cds::container::segmented_queue::make_traits<
-                cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
-            >::type
-        {};
-        class traits_SegmentedQueue_spin_padding:
-            public cds::container::segmented_queue::make_traits<
-                cds::opt::padding< cds::opt::cache_line_padding >
-            >::type
-        {};
-        class traits_SegmentedQueue_mutex_stat:
-            public cds::container::segmented_queue::make_traits<
-                cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
-                ,cds::opt::lock_type< std::mutex >
-            >::type
-        {};
-        class traits_SegmentedQueue_mutex:
-            public cds::container::segmented_queue::make_traits<
-                cds::opt::lock_type< std::mutex >
-            >::type
-        {};
-        class traits_SegmentedQueue_mutex_padding:
-            public cds::container::segmented_queue::make_traits<
-                cds::opt::lock_type< std::mutex >
-                , cds::opt::padding< cds::opt::cache_line_padding >
-            >::type
-        {};
-
-        typedef cds::container::SegmentedQueue< cds::gc::HP, Value >  SegmentedQueue_HP_spin;
-        typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_spin_padding >  SegmentedQueue_HP_spin_padding;
-        typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_spin_stat >  SegmentedQueue_HP_spin_stat;
-        typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_mutex >  SegmentedQueue_HP_mutex;
-        typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_mutex_padding >  SegmentedQueue_HP_mutex_padding;
-        typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_mutex_stat >  SegmentedQueue_HP_mutex_stat;
-
-        typedef cds::container::SegmentedQueue< cds::gc::DHP, Value >  SegmentedQueue_DHP_spin;
-        typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_spin_padding >  SegmentedQueue_DHP_spin_padding;
-        typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_spin_stat >  SegmentedQueue_DHP_spin_stat;
-        typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_mutex >  SegmentedQueue_DHP_mutex;
-        typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_mutex_padding >  SegmentedQueue_DHP_mutex_padding;
-        typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_mutex_stat >  SegmentedQueue_DHP_mutex_stat;
-    };
-}
-
-
-// *********************************************
-// Queue statistics
-namespace std {
-
-    template <typename Counter>
-    static inline std::ostream& operator <<(std::ostream& o, cds::container::basket_queue::stat<Counter> const& s)
-    {
-        return o
-            << "\tStatistics:\n"
-            << "\t\t      Enqueue count: " << s.m_EnqueueCount.get() << "\n"
-            << "\t\t       Enqueue race: " << s.m_EnqueueRace.get() << "\n"
-            << "\t\t      Dequeue count: " << s.m_DequeueCount.get() << "\n"
-            << "\t\t      Dequeue empty: " << s.m_EmptyDequeue.get() << "\n"
-            << "\t\t       Dequeue race: " << s.m_DequeueRace.get() << "\n"
-            << "\t\t Advance tail error: " << s.m_AdvanceTailError.get() << "\n"
-            << "\t\t           Bad tail: " << s.m_BadTail.get() << "\n"
-            << "\t\tAdd basket attempts: " << s.m_TryAddBasket.get() << "\n"
-            << "\t\t Add basket success: " << s.m_AddBasketCount.get() << "\n";
-    }
-    static inline std::ostream& operator <<(std::ostream& o, cds::container::basket_queue::empty_stat const& /*s*/)
-    {
-        return o;
-    }
-
-    template <typename Counter>
-    static inline std::ostream& operator <<( std::ostream& o, cds::container::msqueue::stat<Counter> const& s )
-    {
-        return o
-            << "\tStatistics:\n"
-            << "\t\t     Enqueue count: " << s.m_EnqueueCount.get() << "\n"
-            << "\t\t      Enqueue race: " << s.m_EnqueueRace.get()  << "\n"
-            << "\t\t     Dequeue count: " << s.m_DequeueCount.get() << "\n"
-            << "\t\t     Dequeue empty: " << s.m_EmptyDequeue.get() << "\n"
-            << "\t\t      Dequeue race: " << s.m_DequeueRace.get()  << "\n"
-            << "\t\tAdvance tail error: " << s.m_AdvanceTailError.get() << "\n"
-            << "\t\t          Bad tail: " << s.m_BadTail.get() << "\n";
-    }
-
-    static inline std::ostream& operator <<( std::ostream& o, cds::container::msqueue::empty_stat const& /*s*/ )
-    {
-        return o;
-    }
-
-    static inline std::ostream& operator <<( std::ostream& o, cds::opt::none )
-    {
-        return o;
-    }
-
-    // cds::intrusive::optimistic_queue::stat
-    template <typename Counter>
-    static inline std::ostream& operator <<( std::ostream& o, cds::intrusive::optimistic_queue::stat<Counter> const& s )
-    {
-        return o
-            << "\tStatistics:\n"
-            << "\t\t      Enqueue count: " << s.m_EnqueueCount.get() << "\n"
-            << "\t\t       Enqueue race: " << s.m_EnqueueRace.get() << "\n"
-            << "\t\t      Dequeue count: " << s.m_DequeueCount.get() << "\n"
-            << "\t\t      Dequeue empty: " << s.m_EmptyDequeue.get() << "\n"
-            << "\t\t       Dequeue race: " << s.m_DequeueRace.get() << "\n"
-            << "\t\t Advance tail error: " << s.m_AdvanceTailError.get() << "\n"
-            << "\t\t           Bad tail: " << s.m_BadTail.get() << "\n"
-            << "\t\t      fix list call: " << s.m_FixListCount.get() << "\n";
-    }
-
-    static inline std::ostream& operator <<( std::ostream& o, cds::intrusive::optimistic_queue::empty_stat const& /*s*/ )
-    {
-        return o;
-    }
-
-    // cds::container::fcqueue::stat
-    template <typename Counter>
-    static inline std::ostream& operator <<( std::ostream& o, cds::container::fcqueue::stat<Counter> const& s )
-    {
-            return o << "\tStatistics:\n"
-                << "\t                    Push: " << s.m_nEnqueue.get()           << "\n"
-                << "\t                PushMove: " << s.m_nEnqMove.get()           << "\n"
-                << "\t                     Pop: " << s.m_nDequeue.get()           << "\n"
-                << "\t               FailedPop: " << s.m_nFailedDeq.get()         << "\n"
-                << "\t  Collided push/pop pair: " << s.m_nCollided.get()          << "\n"
-                << "\tFlat combining statistics:\n"
-                << "\t        Combining factor: " << s.combining_factor()         << "\n"
-                << "\t         Operation count: " << s.m_nOperationCount.get()    << "\n"
-                << "\t      Combine call count: " << s.m_nCombiningCount.get()    << "\n"
-                << "\t        Compact pub-list: " << s.m_nCompactPublicationList.get() << "\n"
-                << "\t   Deactivate pub-record: " << s.m_nDeactivatePubRecord.get()    << "\n"
-                << "\t     Activate pub-record: " << s.m_nActivatePubRecord.get() << "\n"
-                << "\t       Create pub-record: " << s.m_nPubRecordCreated.get()  << "\n"
-                << "\t       Delete pub-record: " << s.m_nPubRecordDeteted.get()  << "\n"
-                << "\t      Acquire pub-record: " << s.m_nAcquirePubRecCount.get()<< "\n"
-                << "\t      Release pub-record: " << s.m_nReleasePubRecCount.get()<< "\n";
-    }
-
-    static inline std::ostream& operator <<( std::ostream& o, cds::container::fcqueue::empty_stat const& /*s*/ )
-    {
-        return o;
-    }
-
-    static inline std::ostream& operator <<( std::ostream& o, std::nullptr_t /*s*/ )
-    {
-        return o;
-    }
-
-    static inline ostream& operator <<( ostream& o, cds::container::fcdeque::empty_stat const& /*s*/ )
-    {
-        return o;
-    }
-
-    static inline ostream& operator <<( ostream& o, cds::container::fcdeque::stat<> const& s )
-    {
-        return o << "\tStatistics:\n"
-            << "\t              Push front: " << s.m_nPushFront.get()         << "\n"
-            << "\t         Push front move: " << s.m_nPushFrontMove.get()     << "\n"
-            << "\t               Push back: " << s.m_nPushBack.get()          << "\n"
-            << "\t          Push back move: " << s.m_nPushBackMove.get()      << "\n"
-            << "\t               Pop front: " << s.m_nPopFront.get()          << "\n"
-            << "\t        Failed pop front: " << s.m_nFailedPopFront.get()    << "\n"
-            << "\t                Pop back: " << s.m_nPopBack.get()           << "\n"
-            << "\t         Failed pop back: " << s.m_nFailedPopBack.get()     << "\n"
-            << "\t  Collided push/pop pair: " << s.m_nCollided.get()          << "\n"
-            << "\tFlat combining statistics:\n"
-            << "\t        Combining factor: " << s.combining_factor()         << "\n"
-            << "\t         Operation count: " << s.m_nOperationCount.get()    << "\n"
-            << "\t      Combine call count: " << s.m_nCombiningCount.get()    << "\n"
-            << "\t        Compact pub-list: " << s.m_nCompactPublicationList.get() << "\n"
-            << "\t   Deactivate pub-record: " << s.m_nDeactivatePubRecord.get()    << "\n"
-            << "\t     Activate pub-record: " << s.m_nActivatePubRecord.get() << "\n"
-            << "\t       Create pub-record: " << s.m_nPubRecordCreated.get()  << "\n"
-            << "\t       Delete pub-record: " << s.m_nPubRecordDeteted.get()  << "\n"
-            << "\t      Acquire pub-record: " << s.m_nAcquirePubRecCount.get()<< "\n"
-            << "\t      Release pub-record: " << s.m_nReleasePubRecCount.get()<< "\n";
-    }
-
-}
-
-#endif // #ifndef CDSUNIT_QUEUE_TYPES_H
diff --git a/tests/unit/queue/std_queue.h b/tests/unit/queue/std_queue.h
deleted file mode 100644 (file)
index d24916c..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_QUEUE_STD_QUEUE_H
-#define CDSUNIT_QUEUE_STD_QUEUE_H
-
-#include <mutex>    //unique_lock
-#include <queue>
-#include <cds/sync/spinlock.h>
-
-namespace queue {
-
-    template <typename T, class Container, class Lock = cds::sync::spin >
-    class StdQueue: public std::queue<T, Container >
-    {
-        typedef std::queue<T, Container >   base_class;
-        Lock    m_Locker;
-
-    public:
-        bool enqueue( const T& data )
-        {
-            std::unique_lock<Lock> a(m_Locker);
-
-            base_class::push( data );
-            return true;
-        }
-        bool push( const T& data )  { return enqueue( data ) ; }
-        bool dequeue( T& data )
-        {
-            std::unique_lock<Lock> a(m_Locker);
-            if ( base_class::empty() )
-                return false;
-
-            data = base_class::front();
-            base_class::pop();
-            return true;
-        }
-        bool pop( T& data )         { return dequeue( data ) ; }
-
-        cds::opt::none statistics() const
-        {
-            return cds::opt::none();
-        }
-    };
-
-    template <typename T, class Lock = cds::sync::spin >
-    class StdQueue_deque: public StdQueue<T, std::deque<T>, Lock >
-    {};
-
-    template <typename T, class Lock = cds::sync::spin >
-    class StdQueue_list: public StdQueue<T, std::list<T>, Lock >
-    {};
-}
-
-#endif // #ifndef CDSUNIT_QUEUE_STD_QUEUE_H
diff --git a/tests/unit/set2/CMakeLists.txt b/tests/unit/set2/CMakeLists.txt
deleted file mode 100644 (file)
index 4431cdd..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-set(PACKAGE_NAME cdsu-set)
-
-set(CDSUNIT_SET_SOURCES
-    set_insdel_func.cpp
-    set_insdel_func_cuckoo.cpp
-    set_insdel_func_ellentree.cpp
-    set_insdel_func_michael.cpp
-    set_insdel_func_feldmanhashset.cpp
-    set_insdel_func_skip.cpp
-    set_insdel_func_split.cpp
-    set_insdel_func_striped.cpp
-    set_insdel_string.cpp
-    set_insdel_string_cuckoo.cpp
-    set_insdel_string_ellentree.cpp
-    set_insdel_string_michael.cpp
-    set_insdel_string_feldmanhashset.cpp
-    set_insdel_string_skip.cpp
-    set_insdel_string_split.cpp
-    set_insdel_string_striped.cpp
-    set_insdel_string_std.cpp
-    set_insdelfind.cpp
-    set_insdelfind_cuckoo.cpp
-    set_insdelfind_ellentree.cpp
-    set_insdelfind_michael.cpp
-    set_insdelfind_feldmanhashset.cpp
-    set_insdelfind_skip.cpp
-    set_insdelfind_split.cpp
-    set_insdelfind_striped.cpp
-    set_insdelfind_std.cpp
-    set_delodd.cpp
-    set_delodd_cuckoo.cpp
-    set_delodd_ellentree.cpp
-    set_delodd_michael.cpp
-    set_delodd_feldmanhashset.cpp
-    set_delodd_skip.cpp
-    set_delodd_split.cpp
-)
-
-add_executable(${PACKAGE_NAME} ${CDSUNIT_SET_SOURCES} $<TARGET_OBJECTS:${TEST_COMMON}>)
-target_link_libraries(${PACKAGE_NAME} ${CDS_SHARED_LIBRARY} ${Boost_THREAD_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
-add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/tests/unit/set2/set_defs.h b/tests/unit/set2/set_defs.h
deleted file mode 100644 (file)
index a6054bb..0000000
+++ /dev/null
@@ -1,850 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#define CDSUNIT_DECLARE_StdSet \
-    TEST_CASE( tag_StdSet, StdSet_Spin) \
-    TEST_CASE( tag_StdSet, StdSet_Mutex) \
-    TEST_CASE( tag_StdSet, StdHashSet_Spin)
-
-#define CDSUNIT_TEST_StdSet \
-    CPPUNIT_TEST(StdSet_Spin) \
-    CPPUNIT_TEST(StdSet_Mutex) \
-    CPPUNIT_TEST(StdHashSet_Spin)
-
-//********************************************************************
-// MichaelHashSet
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-#   define CDSUNIT_DECLARE_MichaelSet_RCU_signal  \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_RCU_SHB_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_RCU_SHB_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_RCU_SHT_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_RCU_SHT_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_Lazy_RCU_SHB_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_Lazy_RCU_SHB_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_Lazy_RCU_SHT_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_Lazy_RCU_SHT_less_michaelAlloc)
-
-#   define CDSUNIT_TEST_MichaelSet_RCU_signal  \
-    CPPUNIT_TEST(MichaelSet_RCU_SHB_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelSet_RCU_SHB_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelSet_RCU_SHT_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelSet_RCU_SHT_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelSet_Lazy_RCU_SHB_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelSet_Lazy_RCU_SHB_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelSet_Lazy_RCU_SHT_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelSet_Lazy_RCU_SHT_less_michaelAlloc)
-#else
-#   define CDSUNIT_DECLARE_MichaelSet_RCU_signal
-#   define CDSUNIT_TEST_MichaelSet_RCU_signal
-#endif
-
-
-#define CDSUNIT_DECLARE_MichaelSet  \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_HP_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_HP_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_DHP_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_DHP_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_RCU_GPI_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_RCU_GPI_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_RCU_GPB_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_RCU_GPB_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_RCU_GPT_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_RCU_GPT_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_Lazy_HP_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_Lazy_HP_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_Lazy_DHP_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_Lazy_DHP_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_Lazy_RCU_GPI_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_Lazy_RCU_GPI_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_Lazy_RCU_GPB_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_Lazy_RCU_GPB_less_michaelAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_Lazy_RCU_GPT_cmp_stdAlloc) \
-    TEST_CASE(tag_MichaelHashSet, MichaelSet_Lazy_RCU_GPT_less_michaelAlloc) \
-    CDSUNIT_DECLARE_MichaelSet_RCU_signal
-
-#define CDSUNIT_TEST_MichaelSet  \
-    CPPUNIT_TEST(MichaelSet_HP_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelSet_HP_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelSet_DHP_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelSet_DHP_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelSet_RCU_GPI_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelSet_RCU_GPI_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelSet_RCU_GPB_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelSet_RCU_GPB_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelSet_RCU_GPT_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelSet_RCU_GPT_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelSet_Lazy_HP_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelSet_Lazy_HP_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelSet_Lazy_DHP_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelSet_Lazy_DHP_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelSet_Lazy_RCU_GPI_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelSet_Lazy_RCU_GPI_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelSet_Lazy_RCU_GPB_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelSet_Lazy_RCU_GPB_less_michaelAlloc) \
-    CPPUNIT_TEST(MichaelSet_Lazy_RCU_GPT_cmp_stdAlloc) \
-    CPPUNIT_TEST(MichaelSet_Lazy_RCU_GPT_less_michaelAlloc) \
-    CDSUNIT_TEST_MichaelSet_RCU_signal
-
-//********************************************************************
-// SplitListSet
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-#   define CDSUNIT_DECLARE_SplitList_RCU_signal  \
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_SHB_dyn_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_SHB_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_SHB_st_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_SHB_dyn_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_SHB_st_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_SHB_st_less_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_SHT_dyn_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_SHT_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_SHT_st_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_SHT_dyn_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_SHT_st_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_SHT_st_less_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_SHB_dyn_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_SHB_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_SHB_st_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_SHB_dyn_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_SHB_st_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_SHB_st_less_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_SHT_dyn_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_SHT_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_SHT_st_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_SHT_dyn_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_SHT_st_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_SHT_st_less_stat)
-
-#   define CDSUNIT_TEST_SplitList_RCU_signal  \
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHB_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHB_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHB_st_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHB_dyn_less)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHB_st_less)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHB_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHT_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHT_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHT_st_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHT_dyn_less)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHT_st_less)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_SHT_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHB_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHB_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHB_st_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHB_dyn_less)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHB_st_less)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHB_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHT_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHT_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHT_st_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHT_dyn_less)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHT_st_less)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_SHT_st_less_stat)
-
-#else
-#   define CDSUNIT_DECLARE_SplitList_RCU_signal
-#   define CDSUNIT_TEST_SplitList_RCU_signal
-#endif
-
-#define CDSUNIT_DECLARE_SplitList  \
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_HP_dyn_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_HP_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_HP_st_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_HP_dyn_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_HP_st_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_HP_st_less_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_DHP_dyn_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_DHP_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_DHP_st_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_DHP_dyn_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_DHP_st_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_DHP_st_less_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_GPI_dyn_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_GPI_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_GPI_st_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_GPI_dyn_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_GPI_st_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_GPI_st_less_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_GPB_dyn_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_GPB_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_GPB_st_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_GPB_dyn_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_GPB_st_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_GPB_st_less_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_GPT_dyn_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_GPT_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_GPT_st_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_GPT_dyn_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_GPT_st_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Michael_RCU_GPT_st_less_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_HP_dyn_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_HP_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_HP_st_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_HP_dyn_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_HP_st_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_HP_st_less_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_DHP_dyn_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_DHP_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_DHP_st_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_DHP_dyn_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_DHP_st_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_DHP_st_less_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_GPI_dyn_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_GPI_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_GPI_st_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_GPI_dyn_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_GPI_st_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_GPI_st_less_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_GPB_dyn_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_GPB_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_GPB_st_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_GPB_dyn_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_GPB_st_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_GPB_st_less_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_GPT_dyn_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_GPT_dyn_cmp_stat)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_GPT_st_cmp)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_GPT_dyn_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_GPT_st_less)\
-    TEST_CASE(tag_SplitListSet, SplitList_Lazy_RCU_GPT_st_less_stat)\
-    CDSUNIT_DECLARE_SplitList_RCU_signal
-
-#define CDSUNIT_TEST_SplitList  \
-    CPPUNIT_TEST(SplitList_Michael_HP_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_HP_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Michael_HP_st_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_HP_dyn_less)\
-    CPPUNIT_TEST(SplitList_Michael_HP_st_less)\
-    CPPUNIT_TEST(SplitList_Michael_HP_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Michael_DHP_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_DHP_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Michael_DHP_st_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_DHP_dyn_less)\
-    CPPUNIT_TEST(SplitList_Michael_DHP_st_less)\
-    CPPUNIT_TEST(SplitList_Michael_DHP_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPI_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPI_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPI_st_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPI_dyn_less)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPI_st_less)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPI_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPB_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPB_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPB_st_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPB_dyn_less)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPB_st_less)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPB_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPT_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPT_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPT_st_cmp)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPT_dyn_less)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPT_st_less)\
-    CPPUNIT_TEST(SplitList_Michael_RCU_GPT_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_HP_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_HP_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_HP_st_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_HP_dyn_less)\
-    CPPUNIT_TEST(SplitList_Lazy_HP_st_less)\
-    CPPUNIT_TEST(SplitList_Lazy_HP_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_DHP_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_HP_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_DHP_st_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_DHP_dyn_less)\
-    CPPUNIT_TEST(SplitList_Lazy_DHP_st_less)\
-    CPPUNIT_TEST(SplitList_Lazy_DHP_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPI_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPI_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPI_st_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPI_dyn_less)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPI_st_less)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPI_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPB_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPB_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPB_st_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPB_dyn_less)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPB_st_less)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPB_st_less_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPT_dyn_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPT_dyn_cmp_stat)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPT_st_cmp)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPT_dyn_less)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPT_st_less)\
-    CPPUNIT_TEST(SplitList_Lazy_RCU_GPT_st_less_stat)\
-    CDSUNIT_TEST_SplitList_RCU_signal
-
-//********************************************************************
-// CuckooSet
-
-#define CDSUNIT_DECLARE_CuckooSet \
-    TEST_CASE(tag_CuckooSet, CuckooStripedSet_list_unord)\
-    TEST_CASE(tag_CuckooSet, CuckooStripedSet_list_unord_stat)\
-    TEST_CASE(tag_CuckooSet, CuckooStripedSet_list_ord)\
-    TEST_CASE(tag_CuckooSet, CuckooStripedSet_list_ord_stat)\
-    TEST_CASE(tag_CuckooSet, CuckooStripedSet_vector_unord)\
-    TEST_CASE(tag_CuckooSet, CuckooStripedSet_vector_ord)\
-    TEST_CASE(tag_CuckooSet, CuckooStripedSet_vector_unord_stat)\
-    TEST_CASE(tag_CuckooSet, CuckooStripedSet_vector_ord_stat)\
-    TEST_CASE(tag_CuckooSet, CuckooRefinableSet_list_unord)\
-    TEST_CASE(tag_CuckooSet, CuckooRefinableSet_list_ord)\
-    TEST_CASE(tag_CuckooSet, CuckooRefinableSet_list_unord_stat)\
-    TEST_CASE(tag_CuckooSet, CuckooRefinableSet_list_ord_stat)\
-    TEST_CASE(tag_CuckooSet, CuckooRefinableSet_vector_unord)\
-    TEST_CASE(tag_CuckooSet, CuckooRefinableSet_vector_unord_stat)\
-    TEST_CASE(tag_CuckooSet, CuckooRefinableSet_vector_ord) \
-    TEST_CASE(tag_CuckooSet, CuckooRefinableSet_vector_ord_stat) \
-    TEST_CASE(tag_CuckooSet, CuckooStripedSet_list_unord_storehash)\
-    TEST_CASE(tag_CuckooSet, CuckooStripedSet_list_ord_storehash)\
-    TEST_CASE(tag_CuckooSet, CuckooStripedSet_vector_unord_storehash)\
-    TEST_CASE(tag_CuckooSet, CuckooStripedSet_vector_ord_storehash)\
-    TEST_CASE(tag_CuckooSet, CuckooRefinableSet_list_unord_storehash)\
-    TEST_CASE(tag_CuckooSet, CuckooRefinableSet_list_ord_storehash)\
-    TEST_CASE(tag_CuckooSet, CuckooRefinableSet_vector_unord_storehash)\
-    TEST_CASE(tag_CuckooSet, CuckooRefinableSet_vector_ord_storehash)
-
-#define CDSUNIT_TEST_CuckooSet \
-    CPPUNIT_TEST(CuckooStripedSet_list_unord)\
-    CPPUNIT_TEST(CuckooStripedSet_list_unord_stat)\
-    CPPUNIT_TEST(CuckooStripedSet_list_unord_storehash)\
-    CPPUNIT_TEST(CuckooStripedSet_list_ord)\
-    CPPUNIT_TEST(CuckooStripedSet_list_ord_stat)\
-    CPPUNIT_TEST(CuckooStripedSet_list_ord_storehash)\
-    CPPUNIT_TEST(CuckooStripedSet_vector_unord)\
-    CPPUNIT_TEST(CuckooStripedSet_vector_unord_stat)\
-    CPPUNIT_TEST(CuckooStripedSet_vector_unord_storehash)\
-    CPPUNIT_TEST(CuckooStripedSet_vector_ord)\
-    CPPUNIT_TEST(CuckooStripedSet_vector_ord_stat)\
-    CPPUNIT_TEST(CuckooStripedSet_vector_ord_storehash)\
-    CPPUNIT_TEST(CuckooRefinableSet_list_unord)\
-    CPPUNIT_TEST(CuckooRefinableSet_list_unord_stat)\
-    CPPUNIT_TEST(CuckooRefinableSet_list_unord_storehash)\
-    CPPUNIT_TEST(CuckooRefinableSet_list_ord)\
-    CPPUNIT_TEST(CuckooRefinableSet_list_ord_stat)\
-    CPPUNIT_TEST(CuckooRefinableSet_list_ord_storehash)\
-    CPPUNIT_TEST(CuckooRefinableSet_vector_unord)\
-    CPPUNIT_TEST(CuckooRefinableSet_vector_unord_stat)\
-    CPPUNIT_TEST(CuckooRefinableSet_vector_unord_storehash)\
-    CPPUNIT_TEST(CuckooRefinableSet_vector_ord) \
-    CPPUNIT_TEST(CuckooRefinableSet_vector_ord_stat) \
-    CPPUNIT_TEST(CuckooRefinableSet_vector_ord_storehash)
-
-//********************************************************************
-// SkipListSet
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-#   define CDSUNIT_DECLARE_SkipListSet_RCU_signal \
-    TEST_CASE(tag_SkipListSet, SkipListSet_rcu_shb_less_pascal)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_rcu_shb_cmp_pascal_stat)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_rcu_shb_less_xorshift)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_rcu_shb_cmp_xorshift_stat)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_rcu_sht_less_pascal)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_rcu_sht_cmp_pascal_stat)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_rcu_sht_less_xorshift)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_rcu_sht_cmp_xorshift_stat)
-
-#   define CDSUNIT_TEST_SkipListSet_RCU_signal \
-    CPPUNIT_TEST(SkipListSet_rcu_shb_less_pascal)\
-    CPPUNIT_TEST(SkipListSet_rcu_shb_cmp_pascal_stat)\
-    CPPUNIT_TEST(SkipListSet_rcu_shb_less_xorshift)\
-    CPPUNIT_TEST(SkipListSet_rcu_shb_cmp_xorshift_stat)\
-    CPPUNIT_TEST(SkipListSet_rcu_sht_less_pascal)\
-    CPPUNIT_TEST(SkipListSet_rcu_sht_cmp_pascal_stat)\
-    CPPUNIT_TEST(SkipListSet_rcu_sht_less_xorshift)\
-    CPPUNIT_TEST(SkipListSet_rcu_sht_cmp_xorshift_stat)
-
-#else
-#   define CDSUNIT_DECLARE_SkipListSet_RCU_signal
-#   define CDSUNIT_TEST_SkipListSet_RCU_signal
-#endif
-
-#define CDSUNIT_DECLARE_SkipListSet \
-    TEST_CASE(tag_SkipListSet, SkipListSet_hp_less_pascal)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_hp_cmp_pascal_stat)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_hp_less_xorshift)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_hp_cmp_xorshift_stat)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_dhp_less_pascal)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_dhp_cmp_pascal_stat)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_dhp_less_xorshift)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_dhp_cmp_xorshift_stat)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_rcu_gpi_less_pascal)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_rcu_gpi_cmp_pascal_stat)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_rcu_gpi_less_xorshift)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_rcu_gpi_cmp_xorshift_stat)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_rcu_gpb_less_pascal)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_rcu_gpb_cmp_pascal_stat)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_rcu_gpb_less_xorshift)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_rcu_gpb_cmp_xorshift_stat)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_rcu_gpt_less_pascal)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_rcu_gpt_cmp_pascal_stat)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_rcu_gpt_less_xorshift)\
-    TEST_CASE(tag_SkipListSet, SkipListSet_rcu_gpt_cmp_xorshift_stat)\
-    CDSUNIT_DECLARE_SkipListSet_RCU_signal
-
-#define CDSUNIT_TEST_SkipListSet \
-    CPPUNIT_TEST(SkipListSet_hp_less_pascal)\
-    CPPUNIT_TEST(SkipListSet_hp_cmp_pascal_stat)\
-    CPPUNIT_TEST(SkipListSet_hp_less_xorshift)\
-    CPPUNIT_TEST(SkipListSet_hp_cmp_xorshift_stat)\
-    CPPUNIT_TEST(SkipListSet_dhp_less_pascal)\
-    CPPUNIT_TEST(SkipListSet_dhp_cmp_pascal_stat)\
-    CPPUNIT_TEST(SkipListSet_dhp_less_xorshift)\
-    CPPUNIT_TEST(SkipListSet_dhp_cmp_xorshift_stat)\
-    CPPUNIT_TEST(SkipListSet_rcu_gpi_less_pascal)\
-    CPPUNIT_TEST(SkipListSet_rcu_gpi_cmp_pascal_stat)\
-    CPPUNIT_TEST(SkipListSet_rcu_gpi_less_xorshift)\
-    CPPUNIT_TEST(SkipListSet_rcu_gpi_cmp_xorshift_stat)\
-    CPPUNIT_TEST(SkipListSet_rcu_gpb_less_pascal)\
-    CPPUNIT_TEST(SkipListSet_rcu_gpb_cmp_pascal_stat)\
-    CPPUNIT_TEST(SkipListSet_rcu_gpb_less_xorshift)\
-    CPPUNIT_TEST(SkipListSet_rcu_gpb_cmp_xorshift_stat)\
-    CPPUNIT_TEST(SkipListSet_rcu_gpt_less_pascal)\
-    CPPUNIT_TEST(SkipListSet_rcu_gpt_cmp_pascal_stat)\
-    CPPUNIT_TEST(SkipListSet_rcu_gpt_less_xorshift)\
-    CPPUNIT_TEST(SkipListSet_rcu_gpt_cmp_xorshift_stat)\
-    CDSUNIT_TEST_SkipListSet_RCU_signal
-
-//********************************************************************
-// EllenBinTreeSet
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-#   define CDSUNIT_DECLARE_EllenBinTreeSet_RCU_signal \
-        TEST_CASE(tag_EllenBinTreeSet, EllenBinTreeSet_rcu_shb)\
-        TEST_CASE(tag_EllenBinTreeSet, EllenBinTreeSet_rcu_shb_stat)\
-        TEST_CASE(tag_EllenBinTreeSet, EllenBinTreeSet_rcu_sht)\
-        TEST_CASE(tag_EllenBinTreeSet, EllenBinTreeSet_rcu_sht_stat)
-
-#   define CDSUNIT_TEST_EllenBinTreeSet_RCU_signal \
-        CPPUNIT_TEST(EllenBinTreeSet_rcu_shb)\
-        CPPUNIT_TEST(EllenBinTreeSet_rcu_shb_stat)\
-        CPPUNIT_TEST(EllenBinTreeSet_rcu_sht)\
-        CPPUNIT_TEST(EllenBinTreeSet_rcu_sht_stat)
-#else
-#   define CDSUNIT_DECLARE_EllenBinTreeSet_RCU_signal
-#   define CDSUNIT_TEST_EllenBinTreeSet_RCU_signal
-#endif
-
-#define CDSUNIT_DECLARE_EllenBinTreeSet \
-    TEST_CASE(tag_EllenBinTreeSet, EllenBinTreeSet_hp)\
-    TEST_CASE(tag_EllenBinTreeSet, EllenBinTreeSet_yield_hp)\
-    TEST_CASE(tag_EllenBinTreeSet, EllenBinTreeSet_hp_stat)\
-    TEST_CASE(tag_EllenBinTreeSet, EllenBinTreeSet_dhp)\
-    TEST_CASE(tag_EllenBinTreeSet, EllenBinTreeSet_yield_dhp)\
-    TEST_CASE(tag_EllenBinTreeSet, EllenBinTreeSet_dhp_stat)\
-    TEST_CASE(tag_EllenBinTreeSet, EllenBinTreeSet_rcu_gpi)\
-    TEST_CASE(tag_EllenBinTreeSet, EllenBinTreeSet_rcu_gpi_stat)\
-    TEST_CASE(tag_EllenBinTreeSet, EllenBinTreeSet_rcu_gpb)\
-    TEST_CASE(tag_EllenBinTreeSet, EllenBinTreeSet_yield_rcu_gpb)\
-    TEST_CASE(tag_EllenBinTreeSet, EllenBinTreeSet_rcu_gpb_stat)\
-    TEST_CASE(tag_EllenBinTreeSet, EllenBinTreeSet_rcu_gpt)\
-    TEST_CASE(tag_EllenBinTreeSet, EllenBinTreeSet_rcu_gpt_stat)\
-    CDSUNIT_DECLARE_EllenBinTreeSet_RCU_signal
-
-#define CDSUNIT_TEST_EllenBinTreeSet \
-    CPPUNIT_TEST(EllenBinTreeSet_hp)\
-    CPPUNIT_TEST(EllenBinTreeSet_yield_hp)\
-    CPPUNIT_TEST(EllenBinTreeSet_hp_stat)\
-    CPPUNIT_TEST(EllenBinTreeSet_dhp)\
-    CPPUNIT_TEST(EllenBinTreeSet_yield_dhp)\
-    CPPUNIT_TEST(EllenBinTreeSet_dhp_stat)\
-    CPPUNIT_TEST(EllenBinTreeSet_rcu_gpi)\
-    /*CPPUNIT_TEST(EllenBinTreeSet_rcu_gpi_stat)*/\
-    CPPUNIT_TEST(EllenBinTreeSet_rcu_gpb)\
-    CPPUNIT_TEST(EllenBinTreeSet_yield_rcu_gpb)\
-    CPPUNIT_TEST(EllenBinTreeSet_rcu_gpb_stat)\
-    CPPUNIT_TEST(EllenBinTreeSet_rcu_gpt)\
-    CPPUNIT_TEST(EllenBinTreeSet_rcu_gpt_stat)\
-    CDSUNIT_TEST_EllenBinTreeSet_RCU_signal
-
-//********************************************************************
-// StripedSet
-
-#define CDSUNIT_DECLARE_StripedSet_common \
-    TEST_CASE( tag_StripedSet, StripedSet_list) \
-    TEST_CASE( tag_StripedSet, StripedSet_vector) \
-    TEST_CASE( tag_StripedSet, StripedSet_set) \
-    TEST_CASE( tag_StripedSet, StripedSet_hashset) \
-    TEST_CASE( tag_StripedSet, StripedSet_boost_unordered_set) \
-    TEST_CASE( tag_StripedSet, StripedSet_rational_list) \
-    TEST_CASE( tag_StripedSet, StripedSet_rational_vector) \
-    TEST_CASE( tag_StripedSet, StripedSet_rational_set) \
-    TEST_CASE( tag_StripedSet, StripedSet_rational_hashset) \
-    TEST_CASE( tag_StripedSet, StripedSet_rational_boost_unordered_set)
-
-#define CDSUNIT_TEST_StripedSet_common \
-    CPPUNIT_TEST(StripedSet_list) \
-    CPPUNIT_TEST(StripedSet_vector) \
-    CPPUNIT_TEST(StripedSet_set) \
-    CPPUNIT_TEST(StripedSet_hashset) \
-    CPPUNIT_TEST(StripedSet_boost_unordered_set) \
-    CPPUNIT_TEST(StripedSet_rational_list) \
-    CPPUNIT_TEST(StripedSet_rational_vector) \
-    CPPUNIT_TEST(StripedSet_rational_set) \
-    CPPUNIT_TEST(StripedSet_rational_hashset) \
-    CPPUNIT_TEST(StripedSet_rational_boost_unordered_set)
-
-#if BOOST_VERSION >= 104800
-#   define CDSUNIT_DECLARE_StripedSet_boost_container \
-    TEST_CASE( tag_StripedSet, StripedSet_boost_list) \
-    TEST_CASE( tag_StripedSet, StripedSet_boost_slist) \
-    TEST_CASE( tag_StripedSet, StripedSet_boost_vector) \
-    TEST_CASE( tag_StripedSet, StripedSet_boost_stable_vector) \
-    TEST_CASE( tag_StripedSet, StripedSet_boost_set) \
-    TEST_CASE( tag_StripedSet, StripedSet_rational_boost_list) \
-    TEST_CASE( tag_StripedSet, StripedSet_rational_boost_slist) \
-    TEST_CASE( tag_StripedSet, StripedSet_rational_boost_vector) \
-    TEST_CASE( tag_StripedSet, StripedSet_rational_boost_stable_vector) \
-    TEST_CASE( tag_StripedSet, StripedSet_rational_boost_set)
-
-#   define CDSUNIT_TEST_StripedSet_boost_container \
-    CPPUNIT_TEST(StripedSet_boost_list) \
-    CPPUNIT_TEST(StripedSet_boost_slist) \
-    CPPUNIT_TEST(StripedSet_boost_vector) \
-    CPPUNIT_TEST(StripedSet_boost_stable_vector) \
-    CPPUNIT_TEST(StripedSet_boost_set) \
-    CPPUNIT_TEST(StripedSet_rational_boost_list) \
-    CPPUNIT_TEST(StripedSet_rational_boost_slist) \
-    CPPUNIT_TEST(StripedSet_rational_boost_vector) \
-    CPPUNIT_TEST(StripedSet_rational_boost_stable_vector) \
-    CPPUNIT_TEST(StripedSet_rational_boost_set)
-#else
-#   define CDSUNIT_DECLARE_StripedSet_boost_container
-#   define CDSUNIT_TEST_StripedSet_boost_container
-#endif
-
-#if BOOST_VERSION >= 104800 && defined(CDS_UNIT_SET_TYPES_ENABLE_BOOST_FLAT_CONTAINERS)
-#   define CDSUNIT_DECLARE_StripedSet_boost_flat_container \
-    TEST_CASE( tag_StripedSet, StripedSet_boost_flat_set) \
-    TEST_CASE( tag_StripedSet, StripedSet_rational_boost_flat_set)
-
-#   define CDSUNIT_TEST_StripedSet_boost_flat_container \
-    CPPUNIT_TEST(StripedSet_boost_flat_set) \
-    CPPUNIT_TEST(StripedSet_rational_boost_flat_set)
-#else
-#   define CDSUNIT_DECLARE_StripedSet_boost_flat_container
-#   define CDSUNIT_TEST_StripedSet_boost_flat_container
-#endif
-
-#define CDSUNIT_DECLARE_StripedSet \
-    CDSUNIT_DECLARE_StripedSet_common \
-    CDSUNIT_DECLARE_StripedSet_boost_container \
-    CDSUNIT_DECLARE_StripedSet_boost_flat_container
-
-#define CDSUNIT_TEST_StripedSet \
-    CDSUNIT_TEST_StripedSet_common \
-    CDSUNIT_TEST_StripedSet_boost_container \
-    CDSUNIT_TEST_StripedSet_boost_flat_container
-
-
-#define CDSUNIT_DECLARE_RefinableSet_common \
-    TEST_CASE( tag_StripedSet, RefinableSet_list) \
-    TEST_CASE( tag_StripedSet, RefinableSet_vector) \
-    TEST_CASE( tag_StripedSet, RefinableSet_set) \
-    TEST_CASE( tag_StripedSet, RefinableSet_hashset) \
-    TEST_CASE( tag_StripedSet, RefinableSet_boost_unordered_set) \
-    TEST_CASE( tag_StripedSet, RefinableSet_rational_list) \
-    TEST_CASE( tag_StripedSet, RefinableSet_rational_vector) \
-    TEST_CASE( tag_StripedSet, RefinableSet_rational_set) \
-    TEST_CASE( tag_StripedSet, RefinableSet_rational_hashset) \
-    TEST_CASE( tag_StripedSet, RefinableSet_rational_boost_unordered_set)
-
-
-//********************************************************************
-// RefinableSet
-
-#define CDSUNIT_TEST_RefinableSet_common \
-    CPPUNIT_TEST(RefinableSet_list) \
-    CPPUNIT_TEST(RefinableSet_vector) \
-    CPPUNIT_TEST(RefinableSet_set) \
-    CPPUNIT_TEST(RefinableSet_hashset) \
-    CPPUNIT_TEST(RefinableSet_boost_unordered_set) \
-    CPPUNIT_TEST(RefinableSet_rational_list) \
-    CPPUNIT_TEST(RefinableSet_rational_vector) \
-    CPPUNIT_TEST(RefinableSet_rational_set) \
-    CPPUNIT_TEST(RefinableSet_rational_hashset) \
-    CPPUNIT_TEST(RefinableSet_rational_boost_unordered_set)
-
-#if BOOST_VERSION >= 104800
-#   define CDSUNIT_DECLARE_RefinableSet_boost_container \
-    TEST_CASE( tag_StripedSet, RefinableSet_boost_list) \
-    TEST_CASE( tag_StripedSet, RefinableSet_boost_slist) \
-    TEST_CASE( tag_StripedSet, RefinableSet_boost_vector) \
-    TEST_CASE( tag_StripedSet, RefinableSet_boost_stable_vector) \
-    TEST_CASE( tag_StripedSet, RefinableSet_boost_set) \
-    TEST_CASE( tag_StripedSet, RefinableSet_rational_boost_list) \
-    TEST_CASE( tag_StripedSet, RefinableSet_rational_boost_slist) \
-    TEST_CASE( tag_StripedSet, RefinableSet_rational_boost_vector) \
-    TEST_CASE( tag_StripedSet, RefinableSet_rational_boost_stable_vector) \
-    TEST_CASE( tag_StripedSet, RefinableSet_rational_boost_set)
-
-#   define CDSUNIT_TEST_RefinableSet_boost_container \
-    CPPUNIT_TEST(RefinableSet_boost_list) \
-    CPPUNIT_TEST(RefinableSet_boost_slist) \
-    CPPUNIT_TEST(RefinableSet_boost_vector) \
-    CPPUNIT_TEST(RefinableSet_boost_stable_vector) \
-    CPPUNIT_TEST(RefinableSet_boost_set) \
-    CPPUNIT_TEST(RefinableSet_rational_boost_list) \
-    CPPUNIT_TEST(RefinableSet_rational_boost_slist) \
-    CPPUNIT_TEST(RefinableSet_rational_boost_vector) \
-    CPPUNIT_TEST(RefinableSet_rational_boost_stable_vector) \
-    CPPUNIT_TEST(RefinableSet_rational_boost_set)
-#else
-#   define CDSUNIT_DECLARE_RefinableSet_boost_container
-#   define CDSUNIT_TEST_RefinableSet_boost_container
-#endif
-
-#if BOOST_VERSION >= 104800 && defined(CDS_UNIT_SET_TYPES_ENABLE_BOOST_FLAT_CONTAINERS)
-#   define CDSUNIT_DECLARE_RefinableSet_boost_flat_container \
-    TEST_CASE( tag_StripedSet, RefinableSet_boost_flat_set) \
-    TEST_CASE( tag_StripedSet, RefinableSet_rational_boost_flat_set)
-
-#   define CDSUNIT_TEST_RefinableSet_boost_flat_container \
-    CPPUNIT_TEST(RefinableSet_boost_flat_set) \
-    CPPUNIT_TEST(RefinableSet_rational_boost_flat_set)
-#else
-#   define CDSUNIT_DECLARE_RefinableSet_boost_flat_container
-#   define CDSUNIT_TEST_RefinableSet_boost_flat_container
-#endif
-
-#define CDSUNIT_DECLARE_RefinableSet \
-    CDSUNIT_DECLARE_RefinableSet_common \
-    CDSUNIT_DECLARE_RefinableSet_boost_container \
-    CDSUNIT_DECLARE_RefinableSet_boost_flat_container
-
-#define CDSUNIT_TEST_RefinableSet \
-    CDSUNIT_TEST_RefinableSet_common \
-    CDSUNIT_TEST_RefinableSet_boost_container \
-    CDSUNIT_TEST_RefinableSet_boost_flat_container
-
-
-//***********************************************
-// FeldmanHashSet
-
-// For fixed-sized key - no hash function is needed
-
-#undef CDSUNIT_DECLARE_FeldmanHashSet_fixed
-#undef CDSUNIT_DECLARE_FeldmanHashSet_fixed_RCU_signal
-#undef CDSUNIT_TEST_FeldmanHashSet_fixed
-#undef CDSUNIT_TEST_FeldmanHashSet_fixed_RCU_signal
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-#   define CDSUNIT_DECLARE_FeldmanHashSet_fixed_RCU_signal  \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_shb_fixed) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_shb_fixed_stat) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_sht_fixed) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_sht_fixed_stat) \
-
-#   define CDSUNIT_TEST_FeldmanHashSet_fixed_RCU_signal \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_shb_fixed) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_shb_fixed_stat) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_sht_fixed) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_sht_fixed_stat) \
-
-#else
-#   define CDSUNIT_DECLARE_FeldmanHashSet_fixed_RCU_signal
-#   define CDSUNIT_TEST_FeldmanHashSet_fixed_RCU_signal
-#endif
-
-#define CDSUNIT_DECLARE_FeldmanHashSet_fixed  \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_hp_fixed) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_hp_fixed_stat) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_dhp_fixed) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_dhp_fixed_stat) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpi_fixed) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpi_fixed_stat) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpb_fixed) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpb_fixed_stat) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpt_fixed) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpt_fixed_stat) \
-    CDSUNIT_DECLARE_FeldmanHashSet_fixed_RCU_signal
-
-#define CDSUNIT_TEST_FeldmanHashSet_fixed  \
-    CPPUNIT_TEST(FeldmanHashSet_hp_fixed) \
-    CPPUNIT_TEST(FeldmanHashSet_hp_fixed_stat) \
-    CPPUNIT_TEST(FeldmanHashSet_dhp_fixed) \
-    CPPUNIT_TEST(FeldmanHashSet_dhp_fixed_stat) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpi_fixed) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpi_fixed_stat) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpb_fixed) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpb_fixed_stat) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpt_fixed) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpt_fixed_stat) \
-    CDSUNIT_TEST_FeldmanHashSet_fixed_RCU_signal
-
-// std::hash
-#undef CDSUNIT_DECLARE_FeldmanHashSet_stdhash
-#undef CDSUNIT_DECLARE_FeldmanHashSet_stdhash_RCU_signal
-#undef CDSUNIT_TEST_FeldmanHashSet_stdhash
-#undef CDSUNIT_TEST_FeldmanHashSet_stdhash_RCU_signal
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-#   define CDSUNIT_DECLARE_FeldmanHashSet_stdhash_RCU_signal  \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_shb_stdhash) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_shb_stdhash_stat) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_sht_stdhash) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_sht_stdhash_stat) \
-
-#   define CDSUNIT_TEST_FeldmanHashSet_stdhash_RCU_signal \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_shb_stdhash) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_shb_stdhash_stat) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_sht_stdhash) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_sht_stdhash_stat) \
-
-#else
-#   define CDSUNIT_DECLARE_FeldmanHashSet_stdhash_RCU_signal
-#   define CDSUNIT_TEST_FeldmanHashSet_stdhash_RCU_signal
-#endif
-
-#define CDSUNIT_DECLARE_FeldmanHashSet_stdhash  \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_hp_stdhash) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_hp_stdhash_stat) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_dhp_stdhash) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_dhp_stdhash_stat) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpi_stdhash) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpi_stdhash_stat) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpb_stdhash) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpb_stdhash_stat) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpt_stdhash) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpt_stdhash_stat) \
-    CDSUNIT_DECLARE_FeldmanHashSet_stdhash_RCU_signal
-
-#define CDSUNIT_TEST_FeldmanHashSet_stdhash  \
-    CPPUNIT_TEST(FeldmanHashSet_hp_stdhash) \
-    CPPUNIT_TEST(FeldmanHashSet_hp_stdhash_stat) \
-    CPPUNIT_TEST(FeldmanHashSet_dhp_stdhash) \
-    CPPUNIT_TEST(FeldmanHashSet_dhp_stdhash_stat) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpi_stdhash) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpi_stdhash_stat) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpb_stdhash) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpb_stdhash_stat) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpt_stdhash) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpt_stdhash_stat) \
-    CDSUNIT_TEST_FeldmanHashSet_stdhash_RCU_signal
-
-
-// CityHash -only for 64bit
-
-#undef CDSUNIT_DECLARE_FeldmanHashSet_city
-#undef CDSUNIT_DECLARE_FeldmanHashSet_city_RCU_signal
-#undef CDSUNIT_TEST_FeldmanHashSet_city
-#undef CDSUNIT_TEST_FeldmanHashSet_city_RCU_signal
-
-#if CDS_BUILD_BITS == 64
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-#   define CDSUNIT_DECLARE_FeldmanHashSet_city_RCU_signal  \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_shb_city64) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_shb_city64_stat) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_sht_city64) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_sht_city64_stat) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_shb_city128) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_shb_city128_stat) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_sht_city128) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_sht_city128_stat) \
-
-#   define CDSUNIT_TEST_FeldmanHashSet_city_RCU_signal \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_shb_city64) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_shb_city64_stat) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_sht_city64) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_sht_city64_stat) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_shb_city128) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_shb_city128_stat) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_sht_city128) \
-        TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_sht_city128_stat) \
-
-#else
-#   define CDSUNIT_DECLARE_FeldmanHashSet_city_RCU_signal
-#   define CDSUNIT_TEST_FeldmanHashSet_city_RCU_signal
-#endif
-
-#define CDSUNIT_DECLARE_FeldmanHashSet_city  \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_hp_city64) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_hp_city64_stat) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_dhp_city64) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_dhp_city64_stat) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpi_city64) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpi_city64_stat) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpb_city64) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpb_city64_stat) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpt_city64) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpt_city64_stat) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_hp_city128) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_hp_city128_stat) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_dhp_city128) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_dhp_city128_stat) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpi_city128) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpi_city128_stat) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpb_city128) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpb_city128_stat) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpt_city128) \
-    TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpt_city128_stat) \
-    CDSUNIT_DECLARE_FeldmanHashSet_city_RCU_signal
-
-#define CDSUNIT_TEST_FeldmanHashSet_city  \
-    CPPUNIT_TEST(FeldmanHashSet_hp_city64) \
-    CPPUNIT_TEST(FeldmanHashSet_hp_city64_stat) \
-    CPPUNIT_TEST(FeldmanHashSet_dhp_city64) \
-    CPPUNIT_TEST(FeldmanHashSet_dhp_city64_stat) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpi_city64) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpi_city64_stat) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpb_city64) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpb_city64_stat) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpt_city64) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpt_city64_stat) \
-    CPPUNIT_TEST(FeldmanHashSet_hp_city128) \
-    CPPUNIT_TEST(FeldmanHashSet_hp_city128_stat) \
-    CPPUNIT_TEST(FeldmanHashSet_dhp_city128) \
-    CPPUNIT_TEST(FeldmanHashSet_dhp_city128_stat) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpi_city128) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpi_city128_stat) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpb_city128) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpb_city128_stat) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpt_city128) \
-    CPPUNIT_TEST(FeldmanHashSet_rcu_gpt_city128_stat) \
-    CDSUNIT_TEST_FeldmanHashSet_city_RCU_signal
-
-#else
-#   define CDSUNIT_DECLARE_FeldmanHashSet_city
-#   define CDSUNIT_DECLARE_FeldmanHashSet_city_RCU_signal
-#   define CDSUNIT_TEST_FeldmanHashSet_city
-#   define CDSUNIT_TEST_FeldmanHashSet_city_RCU_signal
-#endif // CDS_BUILD_BITS == 64
-
-
-// All
-
-#define CDSUNIT_DECLARE_FeldmanHashSet \
-    CDSUNIT_DECLARE_FeldmanHashSet_fixed \
-    CDSUNIT_DECLARE_FeldmanHashSet_stdhash \
-    CDSUNIT_DECLARE_FeldmanHashSet_city
-
-#define CDSUNIT_TEST_FeldmanHashSet \
-    CDSUNIT_TEST_FeldmanHashSet_fixed \
-    CDSUNIT_TEST_FeldmanHashSet_stdhash \
-    CDSUNIT_TEST_FeldmanHashSet_city
diff --git a/tests/unit/set2/set_delodd.cpp b/tests/unit/set2/set_delodd.cpp
deleted file mode 100644 (file)
index 77f57b5..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_delodd.h"
-
-namespace set2 {
-    CPPUNIT_TEST_SUITE_REGISTRATION( Set_DelOdd );
-
-    void Set_DelOdd::setUpParams( const CppUnitMini::TestCfg& cfg )
-    {
-        c_nSetSize = cfg.getSizeT("MapSize", c_nSetSize );
-        c_nInsThreadCount = cfg.getSizeT("InsThreadCount", c_nInsThreadCount);
-        c_nDelThreadCount = cfg.getSizeT("DelThreadCount", c_nDelThreadCount);
-        c_nExtractThreadCount = cfg.getSizeT("ExtractThreadCount", c_nExtractThreadCount);
-        c_nMaxLoadFactor = cfg.getSizeT("MaxLoadFactor", c_nMaxLoadFactor);
-        c_bPrintGCState = cfg.getBool("PrintGCStateFlag", true );
-
-        c_nCuckooInitialSize = cfg.getSizeT("CuckooInitialSize", c_nCuckooInitialSize );
-        c_nCuckooProbesetSize = cfg.getSizeT("CuckooProbesetSize", c_nCuckooProbesetSize );
-        c_nCuckooProbesetThreshold = cfg.getSizeT("CuckooProbesetThreshold", c_nCuckooProbesetThreshold );
-
-        c_nFeldmanSet_HeadBits = cfg.getSizeT("FeldmanMapHeadBits", c_nFeldmanSet_HeadBits);
-        c_nFeldmanSet_ArrayBits = cfg.getSizeT("FeldmanMapArrayBits", c_nFeldmanSet_ArrayBits);
-
-        if ( c_nInsThreadCount == 0 )
-            c_nInsThreadCount = std::thread::hardware_concurrency();
-        if ( c_nDelThreadCount == 0 && c_nExtractThreadCount == 0 ) {
-            c_nExtractThreadCount = std::thread::hardware_concurrency() / 2;
-            c_nDelThreadCount = std::thread::hardware_concurrency() - c_nExtractThreadCount;
-        }
-
-        m_arrData.resize( c_nSetSize );
-        for ( size_t i = 0; i < c_nSetSize; ++i )
-            m_arrData[i] = i;
-        shuffle( m_arrData.begin(), m_arrData.end() );
-    }
-
-    void Set_DelOdd::endTestCase()
-    {
-        m_arrData.resize( 0 );
-    }
-
-} // namespace set2
diff --git a/tests/unit/set2/set_delodd.h b/tests/unit/set2/set_delodd.h
deleted file mode 100644 (file)
index 086c4bf..0000000
+++ /dev/null
@@ -1,842 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/thread.h"
-#include "set2/set_type.h"
-
-namespace set2 {
-
-#define TEST_CASE(TAG, X)  void X();
-
-    namespace {
-        struct key_thread
-        {
-            uint32_t  nKey;
-            uint16_t  nThread;
-            uint16_t  pad_;
-
-            key_thread( size_t key, size_t threadNo )
-                : nKey( static_cast<uint32_t>(key))
-                , nThread( static_cast<uint16_t>(threadNo))
-                , pad_(0)
-            {}
-
-            key_thread()
-            {}
-        };
-
-        typedef set_type_base<key_thread, size_t>::key_val     key_value_pair;
-    }
-
-    template <>
-    struct cmp<key_thread> {
-        int operator ()(key_thread const& k1, key_thread const& k2) const
-        {
-            if ( k1.nKey < k2.nKey )
-                return -1;
-            if ( k1.nKey > k2.nKey )
-                return 1;
-            if ( k1.nThread < k2.nThread )
-                return -1;
-            if ( k1.nThread > k2.nThread )
-                return 1;
-            return 0;
-        }
-        int operator ()(key_thread const& k1, size_t k2) const
-        {
-            if ( k1.nKey < k2 )
-                return -1;
-            if ( k1.nKey > k2 )
-                return 1;
-            return 0;
-        }
-        int operator ()(size_t k1, key_thread const& k2) const
-        {
-            if ( k1 < k2.nKey )
-                return -1;
-            if ( k1 > k2.nKey )
-                return 1;
-            return 0;
-        }
-    };
-
-} // namespace set2
-
-namespace std {
-    template <>
-    struct less<set2::key_thread>
-    {
-        bool operator()(set2::key_thread const& k1, set2::key_thread const& k2) const
-        {
-            if ( k1.nKey <= k2.nKey )
-                return k1.nKey < k2.nKey || k1.nThread < k2.nThread;
-            return false;
-        }
-    };
-
-    template <>
-    struct hash<set2::key_thread>
-    {
-        typedef size_t              result_type;
-        typedef set2::key_thread    argument_type;
-
-        size_t operator()( set2::key_thread const& k ) const
-        {
-            return std::hash<size_t>()(k.nKey);
-        }
-        size_t operator()( size_t k ) const
-        {
-            return std::hash<size_t>()(k);
-        }
-    };
-
-} // namespace std
-
-namespace boost {
-    inline size_t hash_value( set2::key_thread const& k )
-    {
-        return std::hash<size_t>()( k.nKey );
-    }
-
-    template <>
-    struct hash<set2::key_thread>
-    {
-        typedef size_t              result_type;
-        typedef set2::key_thread    argument_type;
-
-        size_t operator()(set2::key_thread const& k) const
-        {
-            return boost::hash<size_t>()( k.nKey );
-        }
-        size_t operator()(size_t k) const
-        {
-            return boost::hash<size_t>()( k );
-        }
-    };
-} // namespace boost
-
-namespace set2 {
-
-    class Set_DelOdd: public CppUnitMini::TestCase
-    {
-    public:
-        size_t  c_nSetSize =1000000;          // max set size
-        size_t  c_nInsThreadCount = 4;   // insert thread count
-        size_t  c_nDelThreadCount = 4;   // delete thread count
-        size_t  c_nExtractThreadCount = 4;  // extract thread count
-        size_t  c_nMaxLoadFactor = 8;    // maximum load factor
-        bool    c_bPrintGCState = true;
-
-        size_t  c_nCuckooInitialSize = 1024;// initial size for CuckooSet
-        size_t  c_nCuckooProbesetSize = 16; // CuckooSet probeset size (only for list-based probeset)
-        size_t  c_nCuckooProbesetThreshold = 0; // CUckooSet probeset threshold (0 - use default)
-
-        size_t c_nFeldmanSet_HeadBits = 10;
-        size_t c_nFeldmanSet_ArrayBits = 4;
-
-        size_t c_nLoadFactor = 2;
-        std::vector<size_t>     m_arrData;
-
-    protected:
-        typedef key_thread  key_type;
-        typedef size_t      value_type;
-
-        atomics::atomic<size_t>      m_nInsThreadCount;
-
-        // Inserts keys from [0..N)
-        template <class Set>
-        class InsertThread: public CppUnitMini::TestThread
-        {
-            Set&     m_Set;
-
-            virtual InsertThread *    clone()
-            {
-                return new InsertThread( *this );
-            }
-
-            struct update_functor
-            {
-                template <typename Q>
-                void operator()( bool /*bNew*/, key_value_pair const&, Q const& )
-                {}
-
-                void operator()(key_value_pair& /*cur*/, key_value_pair * /*prev*/)
-                {}
-            };
-        public:
-            size_t  m_nInsertSuccess;
-            size_t  m_nInsertFailed;
-
-        public:
-            InsertThread( CppUnitMini::ThreadPool& pool, Set& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Set( rMap )
-            {}
-            InsertThread( InsertThread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Set( src.m_Set )
-            {}
-
-            Set_DelOdd&  getTest()
-            {
-                return reinterpret_cast<Set_DelOdd&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                Set& rSet = m_Set;
-
-                m_nInsertSuccess =
-                    m_nInsertFailed = 0;
-
-                std::vector<size_t>& arrData = getTest().m_arrData;
-                for ( size_t i = 0; i < arrData.size(); ++i ) {
-                    if ( rSet.insert( key_type( arrData[i], m_nThreadNo )))
-                        ++m_nInsertSuccess;
-                    else
-                        ++m_nInsertFailed;
-                }
-
-                update_functor f;
-                for ( size_t i = arrData.size() - 1; i > 0; --i ) {
-                    if ( arrData[i] & 1 ) {
-                        rSet.update( key_type( arrData[i], m_nThreadNo ), f, true );
-                    }
-                }
-
-                getTest().m_nInsThreadCount.fetch_sub( 1, atomics::memory_order_release );
-            }
-        };
-
-        struct key_equal {
-            bool operator()( key_type const& k1, key_type const& k2 ) const
-            {
-                return k1.nKey == k2.nKey;
-            }
-            bool operator()( size_t k1, key_type const& k2 ) const
-            {
-                return k1 == k2.nKey;
-            }
-            bool operator()( key_type const& k1, size_t k2 ) const
-            {
-                return k1.nKey == k2;
-            }
-            bool operator ()( key_value_pair const& k1, key_value_pair const& k2 ) const
-            {
-                return operator()( k1.key, k2.key );
-            }
-            bool operator ()( key_value_pair const& k1, key_type const& k2 ) const
-            {
-                return operator()( k1.key, k2 );
-            }
-            bool operator ()( key_type const& k1, key_value_pair const& k2 ) const
-            {
-                return operator()( k1, k2.key );
-            }
-            bool operator ()( key_value_pair const& k1, size_t k2 ) const
-            {
-                return operator()( k1.key, k2 );
-            }
-            bool operator ()( size_t k1, key_value_pair const& k2 ) const
-            {
-                return operator()( k1, k2.key );
-            }
-        };
-
-        struct key_less {
-            bool operator()( key_type const& k1, key_type const& k2 ) const
-            {
-                return k1.nKey < k2.nKey;
-            }
-            bool operator()( size_t k1, key_type const& k2 ) const
-            {
-                return k1 < k2.nKey;
-            }
-            bool operator()( key_type const& k1, size_t k2 ) const
-            {
-                return k1.nKey < k2;
-            }
-            bool operator ()( key_value_pair const& k1, key_value_pair const& k2 ) const
-            {
-                return operator()( k1.key, k2.key );
-            }
-            bool operator ()( key_value_pair const& k1, key_type const& k2 ) const
-            {
-                return operator()( k1.key, k2 );
-            }
-            bool operator ()( key_type const& k1, key_value_pair const& k2 ) const
-            {
-                return operator()( k1, k2.key );
-            }
-            bool operator ()( key_value_pair const& k1, size_t k2 ) const
-            {
-                return operator()( k1.key, k2 );
-            }
-            bool operator ()( size_t k1, key_value_pair const& k2 ) const
-            {
-                return operator()( k1, k2.key );
-            }
-
-            typedef key_equal   equal_to;
-        };
-
-        // Deletes odd keys from [0..N)
-        template <class Set>
-        class DeleteThread: public CppUnitMini::TestThread
-        {
-            Set&     m_Set;
-
-            virtual DeleteThread *    clone()
-            {
-                return new DeleteThread( *this );
-            }
-        public:
-            size_t  m_nDeleteSuccess;
-            size_t  m_nDeleteFailed;
-
-        public:
-            DeleteThread( CppUnitMini::ThreadPool& pool, Set& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Set( rMap )
-            {}
-            DeleteThread( DeleteThread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Set( src.m_Set )
-            {}
-
-            Set_DelOdd&  getTest()
-            {
-                return reinterpret_cast<Set_DelOdd&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            template <typename SetType, bool>
-            struct eraser {
-                static bool erase( SetType& s, size_t key, size_t /*thread*/)
-                {
-                    return s.erase_with( key, key_less() );
-                }
-            };
-
-            template <typename SetType>
-            struct eraser<SetType, true> {
-                static bool erase(SetType& s, size_t key, size_t thread)
-                {
-                    return s.erase( key_type(key, thread));
-                }
-            };
-
-            virtual void test()
-            {
-                Set& rSet = m_Set;
-
-                m_nDeleteSuccess =
-                    m_nDeleteFailed = 0;
-
-                size_t const nInsThreadCount = getTest().c_nInsThreadCount;
-                std::vector<size_t>& arrData = getTest().m_arrData;
-
-                if ( m_nThreadNo & 1 ) {
-                    for (size_t i = 0; i < arrData.size(); ++i) {
-                        if (arrData[i] & 1) {
-                            for ( size_t k = 0; k < nInsThreadCount; ++k ) {
-                                if ( eraser<Set, Set::c_bEraseExactKey>::erase( rSet, arrData[i], k ))
-                                    ++m_nDeleteSuccess;
-                                else
-                                    ++m_nDeleteFailed;
-                            }
-                        }
-                        if ( getTest().m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
-                            break;
-                    }
-                }
-                else {
-                    for (size_t i = arrData.size() - 1; i > 0; --i) {
-                        if (arrData[i] & 1) {
-                            for ( size_t k = 0; k < nInsThreadCount; ++k ) {
-                                if (eraser<Set, Set::c_bEraseExactKey>::erase(rSet, arrData[i], k))
-                                    ++m_nDeleteSuccess;
-                                else
-                                    ++m_nDeleteFailed;
-                            }
-                        }
-                        if ( getTest().m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
-                            break;
-                    }
-                }
-            }
-        };
-
-        // Extracts odd keys from [0..N)
-        template <typename GC, class Set>
-        class ExtractThread: public CppUnitMini::TestThread
-        {
-            Set&     m_Set;
-
-            virtual ExtractThread *    clone()
-            {
-                return new ExtractThread( *this );
-            }
-        public:
-            size_t  m_nExtractSuccess;
-            size_t  m_nExtractFailed;
-
-        public:
-            ExtractThread( CppUnitMini::ThreadPool& pool, Set& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Set( rMap )
-            {}
-            ExtractThread( ExtractThread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Set( src.m_Set )
-            {}
-
-            Set_DelOdd&  getTest()
-            {
-                return reinterpret_cast<Set_DelOdd&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            template <typename SetType, bool>
-            struct extractor {
-                static typename SetType::guarded_ptr extract(SetType& s, size_t key, size_t /*thread*/)
-                {
-                    return s.extract_with( key, key_less());
-                }
-            };
-
-            template <typename SetType>
-            struct extractor<SetType, true> {
-                static typename SetType::guarded_ptr extract(SetType& s, size_t key, size_t thread)
-                {
-                    return s.extract( key_type(key, thread));
-                }
-            };
-
-            virtual void test()
-            {
-                Set& rSet = m_Set;
-
-                m_nExtractSuccess =
-                    m_nExtractFailed = 0;
-
-                typename Set::guarded_ptr gp;
-
-                std::vector<size_t>& arrData = getTest().m_arrData;
-                size_t const nInsThreadCount = getTest().c_nInsThreadCount;
-
-                if ( m_nThreadNo & 1 ) {
-                    for ( size_t i = 0; i < arrData.size(); ++i ) {
-                        if (arrData[i] & 1) {
-                            for ( size_t k = 0; k < nInsThreadCount; ++k ) {
-                                gp = extractor<Set, Set::c_bEraseExactKey>::extract( rSet, arrData[i], k );
-                                if ( gp )
-                                    ++m_nExtractSuccess;
-                                else
-                                    ++m_nExtractFailed;
-                                gp.release();
-                            }
-                        }
-                        if ( getTest().m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
-                            break;
-                    }
-                }
-                else {
-                    for (size_t i = arrData.size() - 1; i > 0; --i) {
-                        if (arrData[i] & 1) {
-                            for ( size_t k = 0; k < nInsThreadCount; ++k ) {
-                                gp = extractor<Set, Set::c_bEraseExactKey>::extract( rSet, arrData[i], k);
-                                if ( gp )
-                                    ++m_nExtractSuccess;
-                                else
-                                    ++m_nExtractFailed;
-                                gp.release();
-                            }
-                        }
-                        if ( getTest().m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
-                            break;
-                    }
-                }
-            }
-        };
-
-        template <typename RCU, class Set>
-        class ExtractThread< cds::urcu::gc<RCU>, Set >: public CppUnitMini::TestThread
-        {
-            Set&     m_Set;
-
-            virtual ExtractThread *    clone()
-            {
-                return new ExtractThread( *this );
-            }
-        public:
-            size_t  m_nExtractSuccess;
-            size_t  m_nExtractFailed;
-
-        public:
-            ExtractThread( CppUnitMini::ThreadPool& pool, Set& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Set( rMap )
-            {}
-            ExtractThread( ExtractThread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Set( src.m_Set )
-            {}
-
-            Set_DelOdd&  getTest()
-            {
-                return reinterpret_cast<Set_DelOdd&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            template <typename SetType, bool>
-            struct extractor {
-                static typename SetType::exempt_ptr extract(SetType& s, size_t key, size_t /*thread*/)
-                {
-                    return s.extract_with(key, key_less());
-                }
-            };
-
-            template <typename SetType>
-            struct extractor<SetType, true> {
-                static typename SetType::exempt_ptr extract(SetType& s, size_t key, size_t thread)
-                {
-                    return s.extract(key_type(key, thread));
-                }
-            };
-
-            virtual void test()
-            {
-                Set& rSet = m_Set;
-
-                m_nExtractSuccess =
-                    m_nExtractFailed = 0;
-
-                typename Set::exempt_ptr xp;
-
-                std::vector<size_t>& arrData = getTest().m_arrData;
-                size_t const nInsThreadCount = getTest().c_nInsThreadCount;
-
-                if ( m_nThreadNo & 1 ) {
-                    for (size_t i = 0; i < arrData.size(); ++i) {
-                        if (arrData[i] & 1) {
-                            for ( size_t k = 0; k < nInsThreadCount; ++k ) {
-                                if ( Set::c_bExtractLockExternal ) {
-                                    typename Set::rcu_lock l;
-                                    xp = extractor<Set, Set::c_bEraseExactKey>::extract( rSet, arrData[i], k);
-                                    if ( xp )
-                                        ++m_nExtractSuccess;
-                                    else
-                                        ++m_nExtractFailed;
-                                }
-                                else {
-                                    xp = extractor<Set, Set::c_bEraseExactKey>::extract(rSet, arrData[i], k);
-                                    if ( xp )
-                                        ++m_nExtractSuccess;
-                                    else
-                                        ++m_nExtractFailed;
-                                }
-                                xp.release();
-                            }
-                        }
-                        if ( getTest().m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
-                            break;
-                    }
-                }
-                else {
-                    for (size_t i = arrData.size() - 1; i > 0; --i) {
-                        if (arrData[i] & 1) {
-                            for ( size_t k = 0; k < nInsThreadCount; ++k ) {
-                                if ( Set::c_bExtractLockExternal ) {
-                                    typename Set::rcu_lock l;
-                                    xp = extractor<Set, Set::c_bEraseExactKey>::extract(rSet, arrData[i], k);
-                                    if ( xp )
-                                        ++m_nExtractSuccess;
-                                    else
-                                        ++m_nExtractFailed;
-                                }
-                                else {
-                                    xp = extractor<Set, Set::c_bEraseExactKey>::extract(rSet, arrData[i], k);
-                                    if ( xp )
-                                        ++m_nExtractSuccess;
-                                    else
-                                        ++m_nExtractFailed;
-                                }
-                                xp.release();
-                            }
-                        }
-                        if ( getTest().m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
-                            break;
-                    }
-                }
-            }
-        };
-
-    protected:
-        template <class Set>
-        void do_test( size_t nLoadFactor )
-        {
-            Set  testSet( c_nSetSize, nLoadFactor );
-            do_test_with( testSet );
-            analyze( testSet );
-        }
-
-        template <class Set>
-        void do_test_extract( size_t nLoadFactor )
-        {
-            Set  testSet( c_nSetSize, nLoadFactor );
-            do_test_extract_with( testSet );
-            analyze( testSet );
-        }
-
-        template <class Set>
-        void do_test_with( Set& testSet )
-        {
-            typedef InsertThread<Set> insert_thread;
-            typedef DeleteThread<Set> delete_thread;
-
-            m_nInsThreadCount.store( c_nInsThreadCount, atomics::memory_order_release );
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new insert_thread( pool, testSet ), c_nInsThreadCount );
-            pool.add( new delete_thread( pool, testSet ), c_nDelThreadCount ? c_nDelThreadCount : cds::OS::topology::processor_count());
-            pool.run();
-            CPPUNIT_MSG( "   Duration=" << pool.avgDuration() );
-
-            size_t nInsertSuccess = 0;
-            size_t nInsertFailed = 0;
-            size_t nDeleteSuccess = 0;
-            size_t nDeleteFailed = 0;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                insert_thread * pThread = dynamic_cast<insert_thread *>( *it );
-                if ( pThread ) {
-                    nInsertSuccess += pThread->m_nInsertSuccess;
-                    nInsertFailed += pThread->m_nInsertFailed;
-                }
-                else {
-                    delete_thread * p = static_cast<delete_thread *>( *it );
-                    nDeleteSuccess += p->m_nDeleteSuccess;
-                    nDeleteFailed += p->m_nDeleteFailed;
-                }
-            }
-
-            CPPUNIT_CHECK( nInsertSuccess == c_nSetSize * c_nInsThreadCount );
-            CPPUNIT_CHECK( nInsertFailed == 0 );
-
-            CPPUNIT_MSG( "  Totals (success/failed): \n\t"
-                      << "      Insert=" << nInsertSuccess << '/' << nInsertFailed << "\n\t"
-                      << "      Delete=" << nDeleteSuccess << '/' << nDeleteFailed << "\n\t"
-            );
-        }
-
-        template <class Set>
-        void do_test_extract_with( Set& testSet )
-        {
-            typedef InsertThread<Set> insert_thread;
-            typedef DeleteThread<Set> delete_thread;
-            typedef ExtractThread< typename Set::gc, Set > extract_thread;
-
-            m_nInsThreadCount.store( c_nInsThreadCount, atomics::memory_order_release );
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new insert_thread( pool, testSet ), c_nInsThreadCount );
-            if ( c_nDelThreadCount )
-                pool.add( new delete_thread( pool, testSet ), c_nDelThreadCount );
-            if ( c_nExtractThreadCount )
-                pool.add( new extract_thread( pool, testSet ), c_nExtractThreadCount );
-            pool.run();
-            CPPUNIT_MSG( "   Duration=" << pool.avgDuration() );
-
-            size_t nInsertSuccess = 0;
-            size_t nInsertFailed = 0;
-            size_t nDeleteSuccess = 0;
-            size_t nDeleteFailed = 0;
-            size_t nExtractSuccess = 0;
-            size_t nExtractFailed = 0;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                insert_thread * pThread = dynamic_cast<insert_thread *>( *it );
-                if ( pThread ) {
-                    nInsertSuccess += pThread->m_nInsertSuccess;
-                    nInsertFailed += pThread->m_nInsertFailed;
-                }
-                else {
-                    delete_thread * p = dynamic_cast<delete_thread *>( *it );
-                    if ( p ) {
-                        nDeleteSuccess += p->m_nDeleteSuccess;
-                        nDeleteFailed += p->m_nDeleteFailed;
-                    }
-                    else {
-                        extract_thread * pExt = dynamic_cast<extract_thread *>( *it );
-                        assert( pExt );
-                        nExtractSuccess += pExt->m_nExtractSuccess;
-                        nExtractFailed += pExt->m_nExtractFailed;
-                    }
-                }
-            }
-
-            CPPUNIT_CHECK( nInsertSuccess == c_nSetSize * c_nInsThreadCount );
-            CPPUNIT_CHECK( nInsertFailed == 0 );
-
-            CPPUNIT_MSG( "  Totals (success/failed): \n\t"
-                << "      Insert=" << nInsertSuccess << '/' << nInsertFailed << "\n\t"
-                << "      Delete=" << nDeleteSuccess << '/' << nDeleteFailed << "\n\t"
-                << "      Extract=" << nExtractSuccess << '/' << nExtractFailed << "\n\t"
-                );
-        }
-
-        template <typename Set>
-        void analyze( Set& testSet )
-        {
-            // All even keys must be in the set
-            {
-                CPPUNIT_MSG( "  Check even keys..." );
-                size_t nErrorCount = 0;
-                for ( size_t n = 0; n < c_nSetSize; n +=2 ) {
-                    for ( size_t i = 0; i < c_nInsThreadCount; ++i ) {
-                        if ( !testSet.contains( key_type(n, i) ) ) {
-                            if ( ++nErrorCount < 10 ) {
-                                CPPUNIT_MSG( "key " << n << "-" << i << " is not found!");
-                            }
-                        }
-                    }
-                }
-                CPPUNIT_CHECK_EX( nErrorCount == 0, "Totals: " << nErrorCount << " keys is not found");
-            }
-
-            check_before_clear( testSet );
-
-            CPPUNIT_MSG( "  Clear map (single-threaded)..." );
-            cds::OS::Timer    timer;
-            testSet.clear();
-            CPPUNIT_MSG( "   Duration=" << timer.duration() );
-            CPPUNIT_CHECK_EX( testSet.empty(), ((long long) testSet.size()) );
-
-            additional_check( testSet );
-            print_stat( testSet );
-            additional_cleanup( testSet );
-        }
-
-        template <class Set>
-        void run_test()
-        {
-            static_assert( !Set::c_bExtractSupported, "Set class must not support extract() method" );
-
-            CPPUNIT_MSG( "Insert thread count=" << c_nInsThreadCount
-                << " delete thread count=" << c_nDelThreadCount
-                << " set size=" << c_nSetSize
-                );
-
-            if ( Set::c_bLoadFactorDepended ) {
-                for ( c_nLoadFactor = 1; c_nLoadFactor <= c_nMaxLoadFactor; c_nLoadFactor *= 2 ) {
-                    CPPUNIT_MSG( "Load factor=" << c_nLoadFactor );
-
-                    Set  testSet( *this );
-                    do_test_with( testSet );
-                    analyze( testSet );
-
-                    if ( c_bPrintGCState )
-                        print_gc_state();
-                }
-            }
-            else {
-                Set  testSet( *this );
-                do_test_with( testSet );
-                analyze( testSet );
-
-                if ( c_bPrintGCState )
-                    print_gc_state();
-            }
-        }
-
-        template <class Set>
-        void run_test_extract()
-        {
-            static_assert( Set::c_bExtractSupported, "Set class must support extract() method" );
-
-            CPPUNIT_MSG( "Insert thread count=" << c_nInsThreadCount
-                << " delete thread count=" << c_nDelThreadCount
-                << " extract thread count=" << c_nExtractThreadCount
-                << " set size=" << c_nSetSize
-                );
-
-            if ( Set::c_bLoadFactorDepended ) {
-                for ( c_nLoadFactor = 1; c_nLoadFactor <= c_nMaxLoadFactor; c_nLoadFactor *= 2 ) {
-                    CPPUNIT_MSG( "Load factor=" << c_nLoadFactor );
-
-                    Set  testSet( *this );
-                    do_test_extract_with( testSet );
-                    analyze( testSet );
-
-                    if ( c_bPrintGCState )
-                        print_gc_state();
-                }
-            }
-            else {
-                Set  testSet( *this );
-                do_test_extract_with( testSet );
-                analyze( testSet );
-
-                if ( c_bPrintGCState )
-                    print_gc_state();
-            }
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg );
-        virtual void endTestCase();
-
-#   include "set2/set_defs.h"
-        CDSUNIT_DECLARE_MichaelSet
-        CDSUNIT_DECLARE_SplitList
-        CDSUNIT_DECLARE_SkipListSet
-        CDSUNIT_DECLARE_EllenBinTreeSet
-        CDSUNIT_DECLARE_CuckooSet
-        CDSUNIT_DECLARE_FeldmanHashSet_fixed
-        CDSUNIT_DECLARE_FeldmanHashSet_city
-
-        CPPUNIT_TEST_SUITE_(Set_DelOdd, "Map_DelOdd")
-            CDSUNIT_TEST_MichaelSet
-            CDSUNIT_TEST_SplitList
-            CDSUNIT_TEST_SkipListSet
-            CDSUNIT_TEST_EllenBinTreeSet
-            CDSUNIT_TEST_FeldmanHashSet_fixed
-            CDSUNIT_TEST_FeldmanHashSet_city
-            CDSUNIT_TEST_CuckooSet
-        CPPUNIT_TEST_SUITE_END();
-    };
-} // namespace set2
diff --git a/tests/unit/set2/set_delodd_cuckoo.cpp b/tests/unit/set2/set_delodd_cuckoo.cpp
deleted file mode 100644 (file)
index b46c4b2..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_delodd.h"
-#include "set2/set_type_cuckoo.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_DelOdd::X() { run_test<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_CuckooSet
-} // namespace set2
diff --git a/tests/unit/set2/set_delodd_ellentree.cpp b/tests/unit/set2/set_delodd_ellentree.cpp
deleted file mode 100644 (file)
index b9affde..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_delodd.h"
-#include "set2/set_type_ellen_bintree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_DelOdd::X() { run_test_extract<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_EllenBinTreeSet
-} // namespace set2
diff --git a/tests/unit/set2/set_delodd_feldmanhashset.cpp b/tests/unit/set2/set_delodd_feldmanhashset.cpp
deleted file mode 100644 (file)
index 6cfa9e9..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_delodd.h"
-#include "set2/set_type_feldman_hashset.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_DelOdd::X() { run_test_extract<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_FeldmanHashSet_fixed
-    CDSUNIT_DECLARE_FeldmanHashSet_city
-} // namespace set2
diff --git a/tests/unit/set2/set_delodd_michael.cpp b/tests/unit/set2/set_delodd_michael.cpp
deleted file mode 100644 (file)
index 85e09ba..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_delodd.h"
-#include "set2/set_type_michael.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_DelOdd::X() { run_test_extract<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_MichaelSet
-} // namespace set2
diff --git a/tests/unit/set2/set_delodd_skip.cpp b/tests/unit/set2/set_delodd_skip.cpp
deleted file mode 100644 (file)
index 3a21fd7..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_delodd.h"
-#include "set2/set_type_skip_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_DelOdd::X() { run_test_extract<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_SkipListSet
-} // namespace set2
diff --git a/tests/unit/set2/set_delodd_split.cpp b/tests/unit/set2/set_delodd_split.cpp
deleted file mode 100644 (file)
index c3ef2b4..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_delodd.h"
-#include "set2/set_type_split_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_DelOdd::X() { run_test_extract<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_SplitList
-} // namespace set2
diff --git a/tests/unit/set2/set_insdel_func.cpp b/tests/unit/set2/set_insdel_func.cpp
deleted file mode 100644 (file)
index d67853d..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdel_func.h"
-
-namespace set2 {
-    CPPUNIT_TEST_SUITE_REGISTRATION( Set_InsDel_func );
-
-    void Set_InsDel_func::setUpParams( const CppUnitMini::TestCfg& cfg )
-    {
-        c_nSetSize = cfg.getSizeT("MapSize", c_nSetSize );
-        c_nInsertThreadCount = cfg.getSizeT("InsertThreadCount", c_nInsertThreadCount );
-        c_nDeleteThreadCount = cfg.getSizeT("DeleteThreadCount", c_nDeleteThreadCount );
-        c_nUpdateThreadCount = cfg.getSizeT("EnsureThreadCount", c_nUpdateThreadCount );
-        c_nThreadPassCount = cfg.getSizeT("ThreadPassCount", c_nThreadPassCount );
-        c_nMaxLoadFactor = cfg.getSizeT("MaxLoadFactor", c_nMaxLoadFactor );
-        c_bPrintGCState = cfg.getBool("PrintGCStateFlag", c_bPrintGCState );
-
-        c_nCuckooInitialSize = cfg.getSizeT("CuckooInitialSize", c_nCuckooInitialSize );
-        c_nCuckooProbesetSize = cfg.getSizeT("CuckooProbesetSize", c_nCuckooProbesetSize );
-        c_nCuckooProbesetThreshold = cfg.getSizeT("CuckooProbesetThreshold", c_nCuckooProbesetThreshold );
-
-        c_nFeldmanSet_HeadBits = cfg.getSizeT("FeldmanMapHeadBits", c_nFeldmanSet_HeadBits);
-        c_nFeldmanSet_ArrayBits = cfg.getSizeT("FeldmanMapArrayBits", c_nFeldmanSet_ArrayBits);
-
-        if ( c_nInsertThreadCount == 0 )
-            c_nInsertThreadCount = std::thread::hardware_concurrency();
-        if ( c_nDeleteThreadCount == 0 )
-            c_nDeleteThreadCount = std::thread::hardware_concurrency();
-        if ( c_nUpdateThreadCount == 0 )
-            c_nUpdateThreadCount = std::thread::hardware_concurrency();
-    }
-} // namespace set2
diff --git a/tests/unit/set2/set_insdel_func.h b/tests/unit/set2/set_insdel_func.h
deleted file mode 100644 (file)
index ed492ce..0000000
+++ /dev/null
@@ -1,596 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include <functional>
-#include <vector>
-#include <mutex>    //unique_lock
-
-#include "set2/set_type.h"
-#include "cppunit/thread.h"
-#include <cds/sync/spinlock.h>
-
-namespace set2 {
-
-#define TEST_CASE(TAG, X)  void X();
-
-    class Set_InsDel_func: public CppUnitMini::TestCase
-    {
-    public:
-        size_t  c_nSetSize = 1000000;      // set size
-        size_t  c_nInsertThreadCount = 4;  // count of insertion thread
-        size_t  c_nDeleteThreadCount = 4;  // count of deletion thread
-        size_t  c_nUpdateThreadCount = 4;  // count of ensure thread
-        size_t  c_nThreadPassCount = 4;    // pass count for each thread
-        size_t  c_nMaxLoadFactor = 8;      // maximum load factor
-        bool    c_bPrintGCState;
-
-        size_t  c_nCuckooInitialSize = 1024;// initial size for CuckooSet
-        size_t  c_nCuckooProbesetSize = 16; // CuckooSet probeset size (only for list-based probeset)
-        size_t  c_nCuckooProbesetThreshold = 0; // CUckooSet probeset threshold (0 - use default)
-
-        size_t c_nFeldmanSet_HeadBits = 10;
-        size_t c_nFeldmanSet_ArrayBits = 4;
-
-        size_t c_nLoadFactor = 2;
-
-    private:
-        typedef size_t  key_type;
-        struct value_type {
-            size_t      nKey;
-            size_t      nData;
-            atomics::atomic<size_t> nUpdateCall;
-            bool volatile   bInitialized;
-            cds::OS::ThreadId          threadId     ;   // insert thread id
-
-            typedef cds::sync::spin_lock< cds::backoff::pause > lock_type;
-            mutable lock_type   m_access;
-
-            value_type()
-                : nKey(0)
-                , nData(0)
-                , nUpdateCall(0)
-                , bInitialized( false )
-                , threadId( cds::OS::get_current_thread_id() )
-            {}
-
-            value_type( value_type const& s )
-                : nKey(s.nKey)
-                , nData(s.nData)
-                , nUpdateCall(s.nUpdateCall.load(atomics::memory_order_relaxed))
-                , bInitialized( s.bInitialized )
-                , threadId( cds::OS::get_current_thread_id() )
-            {}
-
-            // boost::container::flat_map requires operator =
-            value_type& operator=( value_type const& v )
-            {
-                nKey = v.nKey;
-                nData = v.nData;
-                nUpdateCall.store( v.nUpdateCall.load(atomics::memory_order_relaxed), atomics::memory_order_relaxed );
-                bInitialized = v.bInitialized;
-
-                return *this;
-            }
-
-        };
-
-
-        size_t *    m_pKeyFirst;
-        size_t *    m_pKeyLast;
-        size_t *    m_pKeyArr;
-
-        template <class Set>
-        class Inserter: public CppUnitMini::TestThread
-        {
-            Set&     m_Set;
-            typedef typename Set::value_type keyval_type;
-
-            virtual Inserter *    clone()
-            {
-                return new Inserter( *this );
-            }
-
-            struct insert_functor {
-                size_t nTestFunctorRef;
-
-                insert_functor()
-                    : nTestFunctorRef(0)
-                {}
-
-                void operator()( keyval_type& val )
-                {
-                    std::unique_lock< typename value_type::lock_type>    ac( val.val.m_access );
-
-                    val.val.nKey  = val.key;
-                    val.val.nData = val.key * 8;
-
-                    ++nTestFunctorRef;
-                    val.val.bInitialized = true;
-                }
-            };
-
-        public:
-            size_t  m_nInsertSuccess;
-            size_t  m_nInsertFailed;
-
-            size_t  m_nTestFunctorRef;
-
-        public:
-            Inserter( CppUnitMini::ThreadPool& pool, Set& rSet )
-                : CppUnitMini::TestThread( pool )
-                , m_Set( rSet )
-            {}
-            Inserter( Inserter& src )
-                : CppUnitMini::TestThread( src )
-                , m_Set( src.m_Set )
-            {}
-
-            Set_InsDel_func&  getTest()
-            {
-                return reinterpret_cast<Set_InsDel_func&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                Set& rSet = m_Set;
-
-                m_nInsertSuccess =
-                    m_nInsertFailed =
-                    m_nTestFunctorRef = 0;
-
-                size_t * pKeyFirst = getTest().m_pKeyFirst;
-                size_t * pKeyLast = getTest().m_pKeyLast;
-                size_t const nPassCount = getTest().c_nThreadPassCount;
-
-                // func is passed by reference
-                insert_functor  func;
-
-                if ( m_nThreadNo & 1 ) {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( size_t * p = pKeyFirst; p < pKeyLast; ++p ) {
-                            if ( rSet.insert( *p, std::ref(func) ) )
-                                ++m_nInsertSuccess;
-                            else
-                                ++m_nInsertFailed;
-                        }
-                    }
-                }
-                else {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( size_t * p = pKeyLast - 1; p >= pKeyFirst; --p ) {
-                            if ( rSet.insert( *p, std::ref(func) ) )
-                                ++m_nInsertSuccess;
-                            else
-                                ++m_nInsertFailed;
-                        }
-                    }
-                }
-
-                m_nTestFunctorRef = func.nTestFunctorRef;
-            }
-        };
-
-        template <class Set>
-        class Updater: public CppUnitMini::TestThread
-        {
-            Set&     m_Set;
-            typedef typename Set::value_type keyval_type;
-
-            virtual Updater *    clone()
-            {
-                return new Updater( *this );
-            }
-
-            struct update_functor {
-                size_t  nCreated;
-                size_t  nModified;
-
-                update_functor()
-                    : nCreated(0)
-                    , nModified(0)
-                {}
-
-                void operator()( bool bNew, keyval_type& val, size_t /*nKey*/ )
-                {
-                    std::unique_lock<typename value_type::lock_type> ac( val.val.m_access );
-                    if ( !val.val.bInitialized )
-                    {
-                        val.val.nKey = val.key;
-                        val.val.nData = val.key * 8;
-                        val.val.bInitialized = true;
-                    }
-
-                    if ( bNew ) {
-                        ++nCreated;
-                    }
-                    else {
-                        val.val.nUpdateCall.fetch_add( 1, atomics::memory_order_relaxed );
-                        ++nModified;
-                    }
-                }
-
-                void operator()( keyval_type& cur, keyval_type * old )
-                {
-                    operator()( old == nullptr, cur, 0 );
-                }
-
-            private:
-                update_functor(const update_functor& );
-            };
-
-        public:
-            size_t  m_nUpdateFailed;
-            size_t  m_nUpdateCreated;
-            size_t  m_nUpdateExisted;
-            size_t  m_nFunctorCreated;
-            size_t  m_nFunctorModified;
-
-        public:
-            Updater( CppUnitMini::ThreadPool& pool, Set& rSet )
-                : CppUnitMini::TestThread( pool )
-                , m_Set( rSet )
-            {}
-            Updater( Updater& src )
-                : CppUnitMini::TestThread( src )
-                , m_Set( src.m_Set )
-            {}
-
-            Set_InsDel_func&  getTest()
-            {
-                return reinterpret_cast<Set_InsDel_func&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                Set& rSet = m_Set;
-
-                m_nUpdateCreated =
-                    m_nUpdateExisted =
-                    m_nUpdateFailed = 0;
-
-                size_t * pKeyFirst = getTest().m_pKeyFirst;
-                size_t * pKeyLast = getTest().m_pKeyLast;
-                size_t const nPassCount = getTest().c_nThreadPassCount;
-
-                update_functor func;
-
-                if ( m_nThreadNo & 1 ) {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( size_t * p = pKeyFirst; p < pKeyLast; ++p ) {
-                            std::pair<bool, bool> ret = rSet.update( *p, std::ref( func ), true );
-                            if ( ret.first  ) {
-                                if ( ret.second )
-                                    ++m_nUpdateCreated;
-                                else
-                                    ++m_nUpdateExisted;
-                            }
-                            else
-                                ++m_nUpdateFailed;
-                        }
-                    }
-                }
-                else {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( size_t * p = pKeyLast - 1 ; p >= pKeyFirst; --p ) {
-                            std::pair<bool, bool> ret = rSet.update( *p, std::ref( func ), true );
-                            if ( ret.first  ) {
-                                if ( ret.second )
-                                    ++m_nUpdateCreated;
-                                else
-                                    ++m_nUpdateExisted;
-                            }
-                            else
-                                ++m_nUpdateFailed;
-                        }
-                    }
-                }
-
-                m_nFunctorCreated = func.nCreated;
-                m_nFunctorModified = func.nModified;
-            }
-        };
-
-        template <class Set>
-        class Deleter: public CppUnitMini::TestThread
-        {
-            Set&     m_Set;
-            typedef typename Set::value_type keyval_type;
-
-            virtual Deleter *    clone()
-            {
-                return new Deleter( *this );
-            }
-
-            struct value_container
-            {
-                size_t      nKeyExpected;
-
-                size_t      nSuccessItem;
-                size_t      nFailedItem;
-
-                value_container()
-                    : nSuccessItem(0)
-                    , nFailedItem(0)
-                {}
-            };
-
-            struct erase_functor {
-                value_container     m_cnt;
-
-                void operator ()( keyval_type const& itm )
-                {
-                    keyval_type& item = const_cast<keyval_type&>(itm);
-                    while ( true ) {
-                        bool bBkoff = false;
-                        {
-                            std::unique_lock< typename value_type::lock_type> ac( item.val.m_access );
-                            if ( item.val.bInitialized ) {
-                                if ( m_cnt.nKeyExpected == item.val.nKey && m_cnt.nKeyExpected * 8 == item.val.nData )
-                                    ++m_cnt.nSuccessItem;
-                                else
-                                    ++m_cnt.nFailedItem;
-                                item.val.nData++;
-                                item.val.nKey = 0;
-                                break;
-                            }
-                            else
-                                bBkoff = true;
-                        }
-                        if ( bBkoff )
-                            cds::backoff::yield()();
-                    }
-                }
-            };
-
-        public:
-            size_t  m_nDeleteSuccess;
-            size_t  m_nDeleteFailed;
-
-            size_t  m_nValueSuccess;
-            size_t  m_nValueFailed;
-
-        public:
-            Deleter( CppUnitMini::ThreadPool& pool, Set& rSet )
-                : CppUnitMini::TestThread( pool )
-                , m_Set( rSet )
-            {}
-            Deleter( Deleter& src )
-                : CppUnitMini::TestThread( src )
-                , m_Set( src.m_Set )
-            {}
-
-            Set_InsDel_func&  getTest()
-            {
-                return reinterpret_cast<Set_InsDel_func&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                Set& rSet = m_Set;
-
-                m_nDeleteSuccess =
-                    m_nDeleteFailed = 0;
-
-                size_t * pKeyFirst = getTest().m_pKeyFirst;
-                size_t * pKeyLast = getTest().m_pKeyLast;
-                size_t const nPassCount = getTest().c_nThreadPassCount;
-
-                erase_functor   func;
-
-                if ( m_nThreadNo & 1 ) {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( size_t * p = pKeyFirst; p < pKeyLast; ++p ) {
-                            func.m_cnt.nKeyExpected = *p;
-                            if ( rSet.erase( *p, std::ref(func) ))
-                                ++m_nDeleteSuccess;
-                            else
-                                ++m_nDeleteFailed;
-                        }
-                    }
-                }
-                else {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( size_t * p = pKeyLast - 1; p >= pKeyFirst; --p ) {
-                            func.m_cnt.nKeyExpected = *p;
-                            if ( rSet.erase( *p, std::ref(func) ))
-                                ++m_nDeleteSuccess;
-                            else
-                                ++m_nDeleteFailed;
-                        }
-                    }
-                }
-
-                m_nValueSuccess = func.m_cnt.nSuccessItem;
-                m_nValueFailed = func.m_cnt.nFailedItem;
-            }
-        };
-
-    protected:
-
-        template <class Set>
-        void do_test( Set& testSet )
-        {
-            typedef Inserter<Set>       InserterThread;
-            typedef Deleter<Set>        DeleterThread;
-            typedef Updater<Set>        UpdaterThread;
-
-            m_pKeyArr = new size_t[ c_nSetSize ];
-            m_pKeyFirst = m_pKeyArr;
-            m_pKeyLast = m_pKeyFirst + c_nSetSize;
-            for ( size_t i = 0; i < c_nSetSize; ++i )
-                m_pKeyArr[i] = i;
-            shuffle( m_pKeyFirst, m_pKeyLast );
-
-            cds::OS::Timer    timer;
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new InserterThread( pool, testSet ), c_nInsertThreadCount );
-            pool.add( new DeleterThread( pool, testSet ), c_nDeleteThreadCount );
-            pool.add( new UpdaterThread( pool, testSet ), c_nUpdateThreadCount );
-            pool.run();
-            CPPUNIT_MSG( "   Duration=" << pool.avgDuration() );
-
-            delete [] m_pKeyArr;
-
-            size_t nInsertSuccess = 0;
-            size_t nInsertFailed = 0;
-            size_t nDeleteSuccess = 0;
-            size_t nDeleteFailed = 0;
-            size_t nDelValueSuccess = 0;
-            size_t nDelValueFailed = 0;
-            size_t nUpdateFailed = 0;
-            size_t nUpdateCreated = 0;
-            size_t nUpdateModified = 0;
-            size_t nEnsFuncCreated = 0;
-            size_t nEnsFuncModified = 0;
-            size_t nTestFunctorRef = 0;
-
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                InserterThread * pThread = dynamic_cast<InserterThread *>( *it );
-                if ( pThread ) {
-                    nInsertSuccess += pThread->m_nInsertSuccess;
-                    nInsertFailed += pThread->m_nInsertFailed;
-                    nTestFunctorRef += pThread->m_nTestFunctorRef;
-                }
-                else {
-                    DeleterThread * p = dynamic_cast<DeleterThread *>( *it );
-                    if ( p ) {
-                        nDeleteSuccess += p->m_nDeleteSuccess;
-                        nDeleteFailed += p->m_nDeleteFailed;
-                        nDelValueSuccess += p->m_nValueSuccess;
-                        nDelValueFailed += p->m_nValueFailed;
-                    }
-                    else {
-                        UpdaterThread * pEns = static_cast<UpdaterThread *>( *it );
-                        nUpdateCreated += pEns->m_nUpdateCreated;
-                        nUpdateModified += pEns->m_nUpdateExisted;
-                        nUpdateFailed += pEns->m_nUpdateFailed;
-                        nEnsFuncCreated += pEns->m_nFunctorCreated;
-                        nEnsFuncModified += pEns->m_nFunctorModified;
-                    }
-                }
-            }
-
-            CPPUNIT_MSG(
-                   "    Totals: Ins succ=" << nInsertSuccess
-                << " Del succ=" << nDeleteSuccess << "\n"
-                << "          : Ins fail=" << nInsertFailed
-                << " Del fail=" << nDeleteFailed << "\n"
-                << "          : Update succ=" << (nUpdateCreated + nUpdateModified) << " fail=" << nUpdateFailed
-                << " create=" << nUpdateCreated << " modify=" << nUpdateModified << "\n"
-                << "          Set size=" << testSet.size()
-                );
-
-            CPPUNIT_CHECK_EX( nDelValueFailed == 0, "Functor del failed=" << nDelValueFailed );
-            CPPUNIT_CHECK_EX( nDelValueSuccess == nDeleteSuccess,  "Delete success=" << nDeleteSuccess << " functor=" << nDelValueSuccess );
-
-            CPPUNIT_CHECK( nUpdateFailed == 0 );
-
-            CPPUNIT_CHECK_EX( nUpdateCreated == nEnsFuncCreated, "Update created=" << nUpdateCreated << " functor=" << nEnsFuncCreated );
-            CPPUNIT_CHECK_EX( nUpdateModified == nEnsFuncModified, "Update modified=" << nUpdateModified << " functor=" << nEnsFuncModified );
-
-            // nTestFunctorRef is call count of insert functor
-            CPPUNIT_CHECK_EX( nTestFunctorRef == nInsertSuccess, "nInsertSuccess=" << nInsertSuccess << " functor nTestFunctorRef=" << nTestFunctorRef );
-
-            CPPUNIT_MSG( "  Clear set (single-threaded)..." );
-            timer.reset();
-            testSet.clear();
-            CPPUNIT_MSG( "   Duration=" << timer.duration() );
-            CPPUNIT_CHECK( testSet.empty() );
-
-            additional_check( testSet );
-            print_stat(  testSet  );
-
-            additional_cleanup( testSet );
-        }
-
-        template <class Set>
-        void run_test()
-        {
-            CPPUNIT_MSG( "Thread count: insert=" << c_nInsertThreadCount
-                << " delete=" << c_nDeleteThreadCount
-                << " ensure=" << c_nUpdateThreadCount
-                << " pass count=" << c_nThreadPassCount
-                << " set size=" << c_nSetSize
-                );
-
-            if ( Set::c_bLoadFactorDepended ) {
-                for ( c_nLoadFactor = 1; c_nLoadFactor <= c_nMaxLoadFactor; c_nLoadFactor *= 2 ) {
-                    CPPUNIT_MSG("  LoadFactor = " << c_nLoadFactor );
-                    Set s( *this );
-                    do_test( s );
-                    if ( c_bPrintGCState )
-                        print_gc_state();
-                }
-            }
-            else {
-                Set s( *this );
-                do_test( s );
-                if ( c_bPrintGCState )
-                    print_gc_state();
-            }
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg );
-
-#   include "set2/set_defs.h"
-    CDSUNIT_DECLARE_MichaelSet
-    CDSUNIT_DECLARE_SkipListSet
-    CDSUNIT_DECLARE_SplitList
-    CDSUNIT_DECLARE_StripedSet
-    CDSUNIT_DECLARE_RefinableSet
-    CDSUNIT_DECLARE_CuckooSet
-    CDSUNIT_DECLARE_EllenBinTreeSet
-    CDSUNIT_DECLARE_FeldmanHashSet_fixed
-    CDSUNIT_DECLARE_FeldmanHashSet_city
-
-    CPPUNIT_TEST_SUITE_(Set_InsDel_func, "Map_InsDel_func")
-        CDSUNIT_TEST_MichaelSet
-        CDSUNIT_TEST_SplitList
-        CDSUNIT_TEST_SkipListSet
-        CDSUNIT_TEST_FeldmanHashSet_fixed
-        CDSUNIT_TEST_FeldmanHashSet_city
-        CDSUNIT_TEST_EllenBinTreeSet
-        CDSUNIT_TEST_StripedSet
-        CDSUNIT_TEST_RefinableSet
-        CDSUNIT_TEST_CuckooSet
-    CPPUNIT_TEST_SUITE_END();
-
-    };
-} // namespace set2
diff --git a/tests/unit/set2/set_insdel_func_cuckoo.cpp b/tests/unit/set2/set_insdel_func_cuckoo.cpp
deleted file mode 100644 (file)
index 69525f1..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdel_func.h"
-#include "set2/set_type_cuckoo.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_InsDel_func::X() { run_test<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_CuckooSet
-} // namespace set2
diff --git a/tests/unit/set2/set_insdel_func_ellentree.cpp b/tests/unit/set2/set_insdel_func_ellentree.cpp
deleted file mode 100644 (file)
index 3b07226..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdel_func.h"
-#include "set2/set_type_ellen_bintree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_InsDel_func::X() { run_test<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_EllenBinTreeSet
-} // namespace set2
diff --git a/tests/unit/set2/set_insdel_func_feldmanhashset.cpp b/tests/unit/set2/set_insdel_func_feldmanhashset.cpp
deleted file mode 100644 (file)
index 651d938..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdel_func.h"
-#include "set2/set_type_feldman_hashset.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_InsDel_func::X() { run_test<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_FeldmanHashSet_fixed
-    CDSUNIT_DECLARE_FeldmanHashSet_city
-} // namespace set2
diff --git a/tests/unit/set2/set_insdel_func_michael.cpp b/tests/unit/set2/set_insdel_func_michael.cpp
deleted file mode 100644 (file)
index 24d6ac0..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdel_func.h"
-#include "set2/set_type_michael.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_InsDel_func::X() { run_test<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_MichaelSet
-} // namespace set2
diff --git a/tests/unit/set2/set_insdel_func_skip.cpp b/tests/unit/set2/set_insdel_func_skip.cpp
deleted file mode 100644 (file)
index 91ad183..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdel_func.h"
-#include "set2/set_type_skip_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_InsDel_func::X() { run_test<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_SkipListSet
-} // namespace set2
diff --git a/tests/unit/set2/set_insdel_func_split.cpp b/tests/unit/set2/set_insdel_func_split.cpp
deleted file mode 100644 (file)
index d7d50f9..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdel_func.h"
-#include "set2/set_type_split_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_InsDel_func::X() { run_test<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_SplitList
-} // namespace set2
diff --git a/tests/unit/set2/set_insdel_func_striped.cpp b/tests/unit/set2/set_insdel_func_striped.cpp
deleted file mode 100644 (file)
index 374441b..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdel_func.h"
-#include "set2/set_type_striped.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_InsDel_func::X() { run_test<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_StripedSet
-    CDSUNIT_DECLARE_RefinableSet
-} // namespace set2
diff --git a/tests/unit/set2/set_insdel_string.cpp b/tests/unit/set2/set_insdel_string.cpp
deleted file mode 100644 (file)
index 0e9af0b..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdel_string.h"
-
-namespace set2 {
-    CPPUNIT_TEST_SUITE_REGISTRATION( Set_InsDel_string );
-
-    void Set_InsDel_string::setUpParams( const CppUnitMini::TestCfg& cfg )
-    {
-        c_nSetSize = cfg.getSizeT("MapSize", c_nSetSize );
-        c_nInsertThreadCount = cfg.getSizeT("InsertThreadCount", c_nInsertThreadCount );
-        c_nDeleteThreadCount = cfg.getSizeT("DeleteThreadCount", c_nDeleteThreadCount );
-        c_nThreadPassCount = cfg.getSizeT("ThreadPassCount", c_nThreadPassCount );
-        c_nMaxLoadFactor = cfg.getSizeT("MaxLoadFactor", c_nMaxLoadFactor );
-        c_bPrintGCState = cfg.getBool("PrintGCStateFlag", c_bPrintGCState );
-
-        c_nCuckooInitialSize = cfg.getSizeT("CuckooInitialSize", c_nCuckooInitialSize );
-        c_nCuckooProbesetSize = cfg.getSizeT("CuckooProbesetSize", c_nCuckooProbesetSize );
-        c_nCuckooProbesetThreshold = cfg.getSizeT("CuckooProbesetThreshold", c_nCuckooProbesetThreshold );
-
-        c_nFeldmanSet_HeadBits = cfg.getSizeT("FeldmanMapHeadBits", c_nFeldmanSet_HeadBits);
-        c_nFeldmanSet_ArrayBits = cfg.getSizeT("FeldmanMapArrayBits", c_nFeldmanSet_ArrayBits);
-
-        if ( c_nInsertThreadCount == 0 )
-            c_nInsertThreadCount = std::thread::hardware_concurrency();
-        if ( c_nDeleteThreadCount == 0 )
-            c_nDeleteThreadCount = std::thread::hardware_concurrency();
-    }
-} // namespace set2
diff --git a/tests/unit/set2/set_insdel_string.h b/tests/unit/set2/set_insdel_string.h
deleted file mode 100644 (file)
index 0025704..0000000
+++ /dev/null
@@ -1,565 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_type.h"
-#include "cppunit/thread.h"
-
-#include <vector>
-
-namespace set2 {
-
-#define TEST_CASE(TAG, X)  void X();
-
-    class Set_InsDel_string: public CppUnitMini::TestCase
-    {
-    public:
-        size_t c_nSetSize = 1000000;            // set size
-        size_t c_nInsertThreadCount = 4;  // count of insertion thread
-        size_t c_nDeleteThreadCount = 4;  // count of deletion thread
-        size_t c_nThreadPassCount = 4;    // pass count for each thread
-        size_t c_nMaxLoadFactor = 8;      // maximum load factor
-        bool   c_bPrintGCState = true;
-
-        size_t  c_nCuckooInitialSize = 1024;// initial size for CuckooSet
-        size_t  c_nCuckooProbesetSize = 16; // CuckooSet probeset size (only for list-based probeset)
-        size_t  c_nCuckooProbesetThreshold = 0; // CUckooSet probeset threshold (0 - use default)
-
-        size_t c_nFeldmanSet_HeadBits = 10;
-        size_t c_nFeldmanSet_ArrayBits = 4;
-
-        size_t c_nLoadFactor = 2;
-
-    private:
-        typedef std::string key_type;
-        typedef size_t      value_type;
-
-        const std::vector<std::string> *  m_parrString;
-
-        template <class Set>
-        class Inserter: public CppUnitMini::TestThread
-        {
-            Set&     m_Set;
-            typedef typename Set::value_type    keyval_type;
-
-            virtual Inserter *    clone()
-            {
-                return new Inserter( *this );
-            }
-        public:
-            size_t  m_nInsertSuccess;
-            size_t  m_nInsertFailed;
-
-        public:
-            Inserter( CppUnitMini::ThreadPool& pool, Set& rSet )
-                : CppUnitMini::TestThread( pool )
-                , m_Set( rSet )
-            {}
-            Inserter( Inserter& src )
-                : CppUnitMini::TestThread( src )
-                , m_Set( src.m_Set )
-            {}
-
-            Set_InsDel_string&  getTest()
-            {
-                return reinterpret_cast<Set_InsDel_string&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                Set& rSet = m_Set;
-
-                m_nInsertSuccess =
-                    m_nInsertFailed = 0;
-
-                const std::vector<std::string>& arrString = *getTest().m_parrString;
-                size_t nArrSize = arrString.size();
-                size_t const nSetSize = getTest().c_nSetSize;
-                size_t const nPassCount = getTest().c_nThreadPassCount;
-
-                if ( m_nThreadNo & 1 ) {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( size_t nItem = 0; nItem < nSetSize; ++nItem ) {
-                            if ( rSet.insert( keyval_type(arrString[nItem % nArrSize], nItem * 8) ) )
-                                ++m_nInsertSuccess;
-                            else
-                                ++m_nInsertFailed;
-                        }
-                    }
-                }
-                else {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( size_t nItem = nSetSize; nItem > 0; --nItem ) {
-                            if ( rSet.insert( keyval_type( arrString[nItem % nArrSize], nItem * 8) ) )
-                                ++m_nInsertSuccess;
-                            else
-                                ++m_nInsertFailed;
-                        }
-                    }
-                }
-            }
-        };
-
-        template <class Set>
-        class Deleter: public CppUnitMini::TestThread
-        {
-            Set&     m_Set;
-
-            virtual Deleter *    clone()
-            {
-                return new Deleter( *this );
-            }
-        public:
-            size_t  m_nDeleteSuccess;
-            size_t  m_nDeleteFailed;
-
-        public:
-            Deleter( CppUnitMini::ThreadPool& pool, Set& rSet )
-                : CppUnitMini::TestThread( pool )
-                , m_Set( rSet )
-            {}
-            Deleter( Deleter& src )
-                : CppUnitMini::TestThread( src )
-                , m_Set( src.m_Set )
-            {}
-
-            Set_InsDel_string&  getTest()
-            {
-                return reinterpret_cast<Set_InsDel_string&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                Set& rSet = m_Set;
-
-                m_nDeleteSuccess =
-                    m_nDeleteFailed = 0;
-
-                const std::vector<std::string>& arrString = *getTest().m_parrString;
-                size_t nArrSize = arrString.size();
-                size_t const nSetSize = getTest().c_nSetSize;
-                size_t const nPassCount = getTest().c_nThreadPassCount;
-
-                if ( m_nThreadNo & 1 ) {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( size_t nItem = 0; nItem < nSetSize; ++nItem ) {
-                            if ( rSet.erase( arrString[nItem % nArrSize] ) )
-                                ++m_nDeleteSuccess;
-                            else
-                                ++m_nDeleteFailed;
-                        }
-                    }
-                }
-                else {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( size_t nItem = nSetSize; nItem > 0; --nItem ) {
-                            if ( rSet.erase( arrString[nItem % nArrSize] ) )
-                                ++m_nDeleteSuccess;
-                            else
-                                ++m_nDeleteFailed;
-                        }
-                    }
-                }
-            }
-        };
-
-        template <typename GC, class Set>
-        class Extractor: public CppUnitMini::TestThread
-        {
-            Set&     m_Set;
-
-            virtual Extractor *    clone()
-            {
-                return new Extractor( *this );
-            }
-        public:
-            size_t  m_nDeleteSuccess;
-            size_t  m_nDeleteFailed;
-
-        public:
-            Extractor( CppUnitMini::ThreadPool& pool, Set& rSet )
-                : CppUnitMini::TestThread( pool )
-                , m_Set( rSet )
-            {}
-            Extractor( Extractor& src )
-                : CppUnitMini::TestThread( src )
-                , m_Set( src.m_Set )
-            {}
-
-            Set_InsDel_string&  getTest()
-            {
-                return reinterpret_cast<Set_InsDel_string&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                Set& rSet = m_Set;
-
-                m_nDeleteSuccess =
-                    m_nDeleteFailed = 0;
-
-                typename Set::guarded_ptr gp;
-
-                const std::vector<std::string>& arrString = *getTest().m_parrString;
-                size_t nArrSize = arrString.size();
-                size_t const nSetSize = getTest().c_nSetSize;
-                size_t const nPassCount = getTest().c_nThreadPassCount;
-
-                if ( m_nThreadNo & 1 ) {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( size_t nItem = 0; nItem < nSetSize; ++nItem ) {
-                            gp = rSet.extract( arrString[nItem % nArrSize]);
-                            if (  gp )
-                                ++m_nDeleteSuccess;
-                            else
-                                ++m_nDeleteFailed;
-                            gp.release();
-                        }
-                    }
-                }
-                else {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( size_t nItem = nSetSize; nItem > 0; --nItem ) {
-                            gp = rSet.extract( arrString[nItem % nArrSize]);
-                            if ( gp )
-                                ++m_nDeleteSuccess;
-                            else
-                                ++m_nDeleteFailed;
-                            gp.release();
-                        }
-                    }
-                }
-            }
-        };
-
-        template <typename RCU, class Set>
-        class Extractor<cds::urcu::gc<RCU>, Set >: public CppUnitMini::TestThread
-        {
-            Set&     m_Set;
-
-            virtual Extractor *    clone()
-            {
-                return new Extractor( *this );
-            }
-        public:
-            size_t  m_nDeleteSuccess;
-            size_t  m_nDeleteFailed;
-
-        public:
-            Extractor( CppUnitMini::ThreadPool& pool, Set& rSet )
-                : CppUnitMini::TestThread( pool )
-                , m_Set( rSet )
-            {}
-            Extractor( Extractor& src )
-                : CppUnitMini::TestThread( src )
-                , m_Set( src.m_Set )
-            {}
-
-            Set_InsDel_string&  getTest()
-            {
-                return reinterpret_cast<Set_InsDel_string&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                Set& rSet = m_Set;
-
-                m_nDeleteSuccess =
-                    m_nDeleteFailed = 0;
-
-                typename Set::exempt_ptr xp;
-
-                const std::vector<std::string>& arrString = *getTest().m_parrString;
-                size_t nArrSize = arrString.size();
-                size_t const nSetSize = getTest().c_nSetSize;
-                size_t const nPassCount = getTest().c_nThreadPassCount;
-
-                if ( m_nThreadNo & 1 ) {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( size_t nItem = 0; nItem < nSetSize; ++nItem ) {
-                            if ( Set::c_bExtractLockExternal ) {
-                                {
-                                    typename Set::rcu_lock l;
-                                    xp = rSet.extract( arrString[nItem % nArrSize] );
-                                    if ( xp )
-                                        ++m_nDeleteSuccess;
-                                    else
-                                        ++m_nDeleteFailed;
-                                }
-                            }
-                            else {
-                                xp = rSet.extract( arrString[nItem % nArrSize] );
-                                if ( xp )
-                                    ++m_nDeleteSuccess;
-                                else
-                                    ++m_nDeleteFailed;
-                            }
-                            xp.release();
-                        }
-                    }
-                }
-                else {
-                    for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) {
-                        for ( size_t nItem = nSetSize; nItem > 0; --nItem ) {
-                            if ( Set::c_bExtractLockExternal ) {
-                                {
-                                    typename Set::rcu_lock l;
-                                    xp = rSet.extract( arrString[nItem % nArrSize] );
-                                    if ( xp )
-                                        ++m_nDeleteSuccess;
-                                    else
-                                        ++m_nDeleteFailed;
-                                }
-                            }
-                            else {
-                                xp = rSet.extract( arrString[nItem % nArrSize] );
-                                if ( xp )
-                                    ++m_nDeleteSuccess;
-                                else
-                                    ++m_nDeleteFailed;
-                            }
-                            xp.release();
-                        }
-                    }
-                }
-            }
-        };
-
-    protected:
-        template <class Set>
-        void do_test( Set& testSet )
-        {
-            typedef Inserter<Set>       InserterThread;
-            typedef Deleter<Set>        DeleterThread;
-            cds::OS::Timer    timer;
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new InserterThread( pool, testSet ), c_nInsertThreadCount );
-            pool.add( new DeleterThread( pool, testSet ), c_nDeleteThreadCount );
-            pool.run();
-            CPPUNIT_MSG( "   Duration=" << pool.avgDuration() );
-
-            size_t nInsertSuccess = 0;
-            size_t nInsertFailed = 0;
-            size_t nDeleteSuccess = 0;
-            size_t nDeleteFailed = 0;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                InserterThread * pThread = dynamic_cast<InserterThread *>( *it );
-                if ( pThread ) {
-                    nInsertSuccess += pThread->m_nInsertSuccess;
-                    nInsertFailed += pThread->m_nInsertFailed;
-                }
-                else {
-                    DeleterThread * p = static_cast<DeleterThread *>( *it );
-                    nDeleteSuccess += p->m_nDeleteSuccess;
-                    nDeleteFailed += p->m_nDeleteFailed;
-                }
-            }
-
-            CPPUNIT_MSG( "    Totals: Ins succ=" << nInsertSuccess
-                << " Del succ=" << nDeleteSuccess << "\n"
-                      << "          : Ins fail=" << nInsertFailed
-                << " Del fail=" << nDeleteFailed
-                << " Set size=" << testSet.size()
-                );
-
-
-            CPPUNIT_MSG( "  Clear set (single-threaded)..." );
-            timer.reset();
-            for ( size_t i = 0; i < m_parrString->size(); ++i )
-                testSet.erase( (*m_parrString)[i] );
-            CPPUNIT_MSG( "   Duration=" << timer.duration() );
-            CPPUNIT_ASSERT( testSet.empty() );
-
-            additional_check( testSet );
-            print_stat(  testSet  );
-            additional_cleanup( testSet );
-        }
-
-        template <class Set>
-        void do_test_extract( Set& testSet )
-        {
-            typedef Inserter<Set>       InserterThread;
-            typedef Deleter<Set>        DeleterThread;
-            typedef Extractor<typename Set::gc, Set> ExtractThread;
-
-            size_t nDelThreadCount = c_nDeleteThreadCount / 2;
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new InserterThread( pool, testSet ), c_nInsertThreadCount );
-            pool.add( new DeleterThread( pool, testSet ), nDelThreadCount );
-            pool.add( new ExtractThread( pool, testSet ), c_nDeleteThreadCount - nDelThreadCount );
-            pool.run();
-            CPPUNIT_MSG( "   Duration=" << pool.avgDuration() );
-
-            size_t nInsertSuccess = 0;
-            size_t nInsertFailed = 0;
-            size_t nDeleteSuccess = 0;
-            size_t nDeleteFailed = 0;
-            size_t nExtractSuccess = 0;
-            size_t nExtractFailed = 0;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                InserterThread * pThread = dynamic_cast<InserterThread *>( *it );
-                if ( pThread ) {
-                    nInsertSuccess += pThread->m_nInsertSuccess;
-                    nInsertFailed += pThread->m_nInsertFailed;
-                }
-                else {
-                    DeleterThread * p = dynamic_cast<DeleterThread *>( *it );
-                    if ( p ) {
-                        nDeleteSuccess += p->m_nDeleteSuccess;
-                        nDeleteFailed += p->m_nDeleteFailed;
-                    }
-                    else {
-                        ExtractThread * pExtract = dynamic_cast<ExtractThread *>( *it );
-                        assert( pExtract );
-                        nExtractSuccess += pExtract->m_nDeleteSuccess;
-                        nExtractFailed += pExtract->m_nDeleteFailed;
-                    }
-                }
-            }
-
-            CPPUNIT_MSG( "    Totals: Ins succ=" << nInsertSuccess
-                << " Del succ=" << nDeleteSuccess
-                << " Extract succ= " << nExtractSuccess << "\n"
-                << "          : Ins fail=" << nInsertFailed
-                << " Del fail=" << nDeleteFailed
-                << " Extract fail=" << nExtractFailed
-                << " Set size=" << testSet.size()
-                );
-
-
-            CPPUNIT_MSG( "  Clear set (single-threaded)..." );
-            cds::OS::Timer    timer;
-            for ( size_t i = 0; i < m_parrString->size(); ++i )
-                testSet.erase( (*m_parrString)[i] );
-            CPPUNIT_MSG( "   Duration=" << timer.duration() );
-            CPPUNIT_ASSERT( testSet.empty() );
-
-            additional_check( testSet );
-            print_stat(  testSet  );
-            additional_cleanup( testSet );
-        }
-
-        template <class Set>
-        void run_test()
-        {
-            m_parrString = &CppUnitMini::TestCase::getTestStrings();
-
-            CPPUNIT_MSG( "Thread count: insert=" << c_nInsertThreadCount
-                << " delete=" << c_nDeleteThreadCount
-                << " pass count=" << c_nThreadPassCount
-                << " set size=" << c_nSetSize
-                );
-
-            if ( Set::c_bLoadFactorDepended ) {
-                for ( c_nLoadFactor = 1; c_nLoadFactor <= c_nMaxLoadFactor; c_nLoadFactor *= 2 ) {
-                    CPPUNIT_MSG("  LoadFactor = " << c_nLoadFactor );
-                    Set s( *this );
-                    do_test( s );
-                    if ( c_bPrintGCState )
-                        print_gc_state();
-                }
-            }
-            else {
-                Set s( *this );
-                do_test( s );
-                if ( c_bPrintGCState )
-                    print_gc_state();
-            }
-        }
-
-        template <class Set>
-        void run_test_extract()
-        {
-            m_parrString = &CppUnitMini::TestCase::getTestStrings();
-
-            CPPUNIT_MSG( "Thread count: insert=" << c_nInsertThreadCount
-                << " delete=" << c_nDeleteThreadCount
-                << " pass count=" << c_nThreadPassCount
-                << " set size=" << c_nSetSize
-                );
-
-            if ( Set::c_bLoadFactorDepended ) {
-                for ( c_nLoadFactor = 1; c_nLoadFactor <= c_nMaxLoadFactor; c_nLoadFactor *= 2 ) {
-                    CPPUNIT_MSG("  LoadFactor = " << c_nLoadFactor );
-                    Set s( *this );
-                    do_test_extract( s );
-                    if ( c_bPrintGCState )
-                        print_gc_state();
-                }
-            }
-            else {
-                Set s( *this );
-                do_test_extract( s );
-                if ( c_bPrintGCState )
-                    print_gc_state();
-            }
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg );
-
-#   include "set2/set_defs.h"
-        CDSUNIT_DECLARE_MichaelSet
-        CDSUNIT_DECLARE_SplitList
-        CDSUNIT_DECLARE_StripedSet
-        CDSUNIT_DECLARE_RefinableSet
-        CDSUNIT_DECLARE_CuckooSet
-        CDSUNIT_DECLARE_SkipListSet
-        CDSUNIT_DECLARE_EllenBinTreeSet
-        CDSUNIT_DECLARE_FeldmanHashSet_stdhash
-        CDSUNIT_DECLARE_FeldmanHashSet_city
-        CDSUNIT_DECLARE_StdSet
-
-        CPPUNIT_TEST_SUITE_(Set_InsDel_string, "Map_InsDel_func")
-            CDSUNIT_TEST_MichaelSet
-            CDSUNIT_TEST_SplitList
-            CDSUNIT_TEST_SkipListSet
-            CDSUNIT_TEST_FeldmanHashSet_stdhash
-            CDSUNIT_TEST_FeldmanHashSet_city
-            CDSUNIT_TEST_EllenBinTreeSet
-            CDSUNIT_TEST_StripedSet
-            CDSUNIT_TEST_RefinableSet
-            CDSUNIT_TEST_CuckooSet
-            CDSUNIT_TEST_StdSet
-        CPPUNIT_TEST_SUITE_END();
-    };
-} // namespace set2
diff --git a/tests/unit/set2/set_insdel_string_cuckoo.cpp b/tests/unit/set2/set_insdel_string_cuckoo.cpp
deleted file mode 100644 (file)
index 07557ae..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdel_string.h"
-#include "set2/set_type_cuckoo.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_InsDel_string::X() { run_test<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_CuckooSet
-} // namespace set2
diff --git a/tests/unit/set2/set_insdel_string_ellentree.cpp b/tests/unit/set2/set_insdel_string_ellentree.cpp
deleted file mode 100644 (file)
index 08fc39f..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdel_string.h"
-#include "set2/set_type_ellen_bintree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_InsDel_string::X() { run_test_extract<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_EllenBinTreeSet
-} // namespace set2
diff --git a/tests/unit/set2/set_insdel_string_feldmanhashset.cpp b/tests/unit/set2/set_insdel_string_feldmanhashset.cpp
deleted file mode 100644 (file)
index 3072774..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdel_string.h"
-#include "set2/set_type_feldman_hashset.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_InsDel_string::X() { run_test_extract<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_FeldmanHashSet_stdhash
-    CDSUNIT_DECLARE_FeldmanHashSet_city
-} // namespace set2
diff --git a/tests/unit/set2/set_insdel_string_michael.cpp b/tests/unit/set2/set_insdel_string_michael.cpp
deleted file mode 100644 (file)
index deefcd2..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdel_string.h"
-#include "set2/set_type_michael.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_InsDel_string::X() { run_test_extract<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_MichaelSet
-} // namespace set2
diff --git a/tests/unit/set2/set_insdel_string_skip.cpp b/tests/unit/set2/set_insdel_string_skip.cpp
deleted file mode 100644 (file)
index 9fbabf2..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdel_string.h"
-#include "set2/set_type_skip_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_InsDel_string::X() { run_test_extract<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_SkipListSet
-} // namespace set2
diff --git a/tests/unit/set2/set_insdel_string_split.cpp b/tests/unit/set2/set_insdel_string_split.cpp
deleted file mode 100644 (file)
index 55ef8a0..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdel_string.h"
-#include "set2/set_type_split_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_InsDel_string::X() { run_test_extract<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_SplitList
-} // namespace set2
diff --git a/tests/unit/set2/set_insdel_string_std.cpp b/tests/unit/set2/set_insdel_string_std.cpp
deleted file mode 100644 (file)
index 04933be..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdel_string.h"
-#include "set2/set_type_std.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_InsDel_string::X() { run_test<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_StdSet
-} // namespace set2
diff --git a/tests/unit/set2/set_insdel_string_striped.cpp b/tests/unit/set2/set_insdel_string_striped.cpp
deleted file mode 100644 (file)
index 315d499..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdel_string.h"
-#include "set2/set_type_striped.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_InsDel_string::X() { run_test<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_StripedSet
-    CDSUNIT_DECLARE_RefinableSet
-} // namespace set2
diff --git a/tests/unit/set2/set_insdelfind.cpp b/tests/unit/set2/set_insdelfind.cpp
deleted file mode 100644 (file)
index 77ca18a..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdelfind.h"
-
-namespace set2 {
-    CPPUNIT_TEST_SUITE_REGISTRATION( Set_InsDelFind );
-
-    void Set_InsDelFind::setUpParams( const CppUnitMini::TestCfg& cfg )
-    {
-        c_nSetSize = cfg.getSizeT("InitialMapSize", c_nSetSize );
-        c_nThreadCount = cfg.getSizeT("ThreadCount", c_nThreadCount );
-        c_nMaxLoadFactor = cfg.getSizeT("MaxLoadFactor", c_nMaxLoadFactor );
-        c_nInsertPercentage = cfg.getUInt("InsertPercentage", c_nInsertPercentage );
-        c_nDeletePercentage = cfg.getUInt("DeletePercentage", c_nDeletePercentage );
-        c_nDuration = cfg.getUInt("Duration", c_nDuration );
-        c_bPrintGCState = cfg.getBool("PrintGCStateFlag", c_bPrintGCState );
-
-        c_nCuckooInitialSize = cfg.getSizeT("CuckooInitialSize", c_nCuckooInitialSize );
-        c_nCuckooProbesetSize = cfg.getSizeT("CuckooProbesetSize", c_nCuckooProbesetSize );
-        c_nCuckooProbesetThreshold = cfg.getSizeT("CuckooProbesetThreshold", c_nCuckooProbesetThreshold );
-
-        c_nFeldmanSet_HeadBits = cfg.getSizeT("FeldmanMapHeadBits", c_nFeldmanSet_HeadBits);
-        c_nFeldmanSet_ArrayBits = cfg.getSizeT("FeldmanMapArrayBits", c_nFeldmanSet_ArrayBits);
-
-        if ( c_nThreadCount == 0 )
-            c_nThreadCount = std::thread::hardware_concurrency();
-
-        CPPUNIT_ASSERT( c_nInsertPercentage + c_nDeletePercentage <= 100 );
-
-        actions * pFirst = m_arrShuffle;
-        actions * pLast = m_arrShuffle + c_nInsertPercentage;
-        std::fill( pFirst, pLast, do_insert );
-        pFirst = pLast;
-        pLast += c_nDeletePercentage;
-        std::fill( pFirst, pLast, do_delete );
-        pFirst = pLast;
-        pLast = m_arrShuffle + sizeof(m_arrShuffle)/sizeof(m_arrShuffle[0]);
-        std::fill( pFirst, pLast, do_find );
-        shuffle( m_arrShuffle, pLast );
-    }
-} // namespace set2
diff --git a/tests/unit/set2/set_insdelfind.h b/tests/unit/set2/set_insdelfind.h
deleted file mode 100644 (file)
index ad534bb..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_type.h"
-#include "cppunit/thread.h"
-
-namespace set2 {
-
-#define TEST_CASE(TAG, X)  void X();
-
-    class Set_InsDelFind: public CppUnitMini::TestCase
-    {
-    public:
-        size_t c_nSetSize = 500000;      // initial set size
-        size_t c_nThreadCount = 8;       // thread count
-        size_t c_nMaxLoadFactor = 8;     // maximum load factor
-        unsigned int c_nInsertPercentage = 5;
-        unsigned int c_nDeletePercentage = 5;
-        unsigned int c_nDuration = 30;   // test duration, seconds
-        bool c_bPrintGCState = true;
-
-        size_t  c_nCuckooInitialSize = 1024;// initial size for CuckooSet
-        size_t  c_nCuckooProbesetSize = 16; // CuckooSet probeset size (only for list-based probeset)
-        size_t  c_nCuckooProbesetThreshold = 0; // CUckooSet probeset threshold (0 - use default)
-
-        size_t c_nFeldmanSet_HeadBits = 10;
-        size_t c_nFeldmanSet_ArrayBits = 4;
-
-        size_t c_nLoadFactor = 2;
-
-    public:
-        enum actions
-        {
-            do_find,
-            do_insert,
-            do_delete
-        };
-        static const unsigned int c_nShuffleSize = 100;
-        actions m_arrShuffle[c_nShuffleSize];
-
-    protected:
-        typedef size_t  key_type;
-        typedef size_t  value_type;
-
-        template <class Set>
-        class WorkThread: public CppUnitMini::TestThread
-        {
-            Set&     m_Map;
-
-            virtual WorkThread *    clone()
-            {
-                return new WorkThread( *this );
-            }
-        public:
-            size_t  m_nInsertSuccess;
-            size_t  m_nInsertFailed;
-            size_t  m_nDeleteSuccess;
-            size_t  m_nDeleteFailed;
-            size_t  m_nFindSuccess;
-            size_t  m_nFindFailed;
-
-        public:
-            WorkThread( CppUnitMini::ThreadPool& pool, Set& rMap )
-                : CppUnitMini::TestThread( pool )
-                , m_Map( rMap )
-            {}
-            WorkThread( WorkThread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Map( src.m_Map )
-            {}
-
-            Set_InsDelFind&  getTest()
-            {
-                return reinterpret_cast<Set_InsDelFind&>( m_Pool.m_Test );
-            }
-
-            virtual void init() { cds::threading::Manager::attachThread()   ; }
-            virtual void fini() { cds::threading::Manager::detachThread()   ; }
-
-            virtual void test()
-            {
-                Set& rMap = m_Map;
-
-                m_nInsertSuccess =
-                    m_nInsertFailed =
-                    m_nDeleteSuccess =
-                    m_nDeleteFailed =
-                    m_nFindSuccess =
-                    m_nFindFailed = 0;
-
-                actions * pAct = getTest().m_arrShuffle;
-                unsigned int i = 0;
-                size_t const nNormalize = size_t(-1) / ( getTest().c_nSetSize * 2);
-
-                size_t nRand = 0;
-                while ( !time_elapsed() ) {
-                    nRand = cds::bitop::RandXorShift(nRand);
-                    size_t n = nRand / nNormalize;
-                    switch ( pAct[i] ) {
-                    case do_find:
-                        if ( rMap.contains( n ))
-                            ++m_nFindSuccess;
-                        else
-                            ++m_nFindFailed;
-                        break;
-                    case do_insert:
-                        if ( rMap.insert( n ))
-                            ++m_nInsertSuccess;
-                        else
-                            ++m_nInsertFailed;
-                        break;
-                    case do_delete:
-                        if ( rMap.erase( n ))
-                            ++m_nDeleteSuccess;
-                        else
-                            ++m_nDeleteFailed;
-                        break;
-                    }
-
-                    if ( ++i >= c_nShuffleSize )
-                        i = 0;
-                }
-            }
-        };
-
-    protected:
-        template <class Set>
-        void do_test( Set& testSet )
-        {
-            typedef WorkThread<Set> work_thread;
-
-            // fill map - only odd number
-            {
-                size_t * pInitArr = new size_t[ c_nSetSize ];
-                size_t * pEnd = pInitArr + c_nSetSize;
-                for ( size_t i = 0; i < c_nSetSize; ++i )
-                    pInitArr[i] = i * 2 + 1;
-                shuffle( pInitArr, pEnd );
-                for ( size_t * p = pInitArr; p < pEnd; ++p )
-                    testSet.insert( typename Set::value_type( *p, *p ) );
-                delete [] pInitArr;
-            }
-
-            cds::OS::Timer    timer;
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new work_thread( pool, testSet ), c_nThreadCount );
-            pool.run( c_nDuration );
-            CPPUNIT_MSG( "   Duration=" << pool.avgDuration() );
-
-            size_t nInsertSuccess = 0;
-            size_t nInsertFailed = 0;
-            size_t nDeleteSuccess = 0;
-            size_t nDeleteFailed = 0;
-            size_t nFindSuccess = 0;
-            size_t nFindFailed = 0;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                work_thread * pThread = static_cast<work_thread *>( *it );
-                assert( pThread != nullptr );
-                nInsertSuccess += pThread->m_nInsertSuccess;
-                nInsertFailed += pThread->m_nInsertFailed;
-                nDeleteSuccess += pThread->m_nDeleteSuccess;
-                nDeleteFailed += pThread->m_nDeleteFailed;
-                nFindSuccess += pThread->m_nFindSuccess;
-                nFindFailed += pThread->m_nFindFailed;
-            }
-
-            size_t nTotalOps = nInsertSuccess + nInsertFailed + nDeleteSuccess + nDeleteFailed + nFindSuccess + nFindFailed;
-
-            CPPUNIT_MSG( "  Totals (success/failed): \n\t"
-                      << "      Insert=" << nInsertSuccess << '/' << nInsertFailed << "\n\t"
-                      << "      Delete=" << nDeleteSuccess << '/' << nDeleteFailed << "\n\t"
-                      << "        Find=" << nFindSuccess   << '/' << nFindFailed   << "\n\t"
-                      << "       Speed=" << (nFindSuccess + nFindFailed) / c_nDuration << " find/sec\n\t"
-                      << "             " << (nInsertSuccess + nDeleteSuccess) / c_nDuration << " modify/sec\n\t"
-                      << "   Total ops=" << nTotalOps << "\n\t"
-                      << "       speed=" << nTotalOps / c_nDuration << " ops/sec\n\t"
-                      << "      Set size=" << testSet.size()
-                );
-
-
-            CPPUNIT_MSG( "  Clear map (single-threaded)..." );
-            timer.reset();
-            testSet.clear();
-            CPPUNIT_MSG( "   Duration=" << timer.duration() );
-            CPPUNIT_CHECK_EX( testSet.empty(), ((long long) testSet.size()) );
-
-            additional_check( testSet );
-            print_stat( testSet );
-            additional_cleanup( testSet );
-        }
-
-        template <class Set>
-        void run_test()
-        {
-            CPPUNIT_MSG( "Thread count=" << c_nThreadCount
-                << " initial map size=" << c_nSetSize
-                << " insert=" << c_nInsertPercentage << '%'
-                << " delete=" << c_nDeletePercentage << '%'
-                << " duration=" << c_nDuration << "s"
-                );
-
-            if ( Set::c_bLoadFactorDepended ) {
-                for ( c_nLoadFactor = 1; c_nLoadFactor <= c_nMaxLoadFactor; c_nLoadFactor *= 2 ) {
-                    CPPUNIT_MSG("  LoadFactor = " << c_nLoadFactor );
-                    Set s( *this );
-                    do_test( s );
-                    if ( c_bPrintGCState )
-                        print_gc_state();
-                }
-            }
-            else {
-                Set s( *this );
-                do_test( s );
-                if ( c_bPrintGCState )
-                    print_gc_state();
-            }
-        }
-
-        void setUpParams( const CppUnitMini::TestCfg& cfg );
-
-#   include "set2/set_defs.h"
-        CDSUNIT_DECLARE_MichaelSet
-        CDSUNIT_DECLARE_SplitList
-        CDSUNIT_DECLARE_StripedSet
-        CDSUNIT_DECLARE_RefinableSet
-        CDSUNIT_DECLARE_CuckooSet
-        CDSUNIT_DECLARE_SkipListSet
-        CDSUNIT_DECLARE_EllenBinTreeSet
-        CDSUNIT_DECLARE_FeldmanHashSet
-        CDSUNIT_DECLARE_StdSet
-
-        CPPUNIT_TEST_SUITE_(Set_InsDelFind, "Map_InsDelFind")
-            CDSUNIT_TEST_MichaelSet
-            CDSUNIT_TEST_SplitList
-            CDSUNIT_TEST_SkipListSet
-            CDSUNIT_TEST_FeldmanHashSet
-            CDSUNIT_TEST_EllenBinTreeSet
-            CDSUNIT_TEST_StripedSet
-            CDSUNIT_TEST_RefinableSet
-            CDSUNIT_TEST_CuckooSet
-            CDSUNIT_TEST_StdSet
-        CPPUNIT_TEST_SUITE_END();
-
-    };
-} // namespace set2
diff --git a/tests/unit/set2/set_insdelfind_cuckoo.cpp b/tests/unit/set2/set_insdelfind_cuckoo.cpp
deleted file mode 100644 (file)
index df5ff29..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdelfind.h"
-#include "set2/set_type_cuckoo.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_InsDelFind::X() { run_test<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_CuckooSet
-} // namespace set2
diff --git a/tests/unit/set2/set_insdelfind_ellentree.cpp b/tests/unit/set2/set_insdelfind_ellentree.cpp
deleted file mode 100644 (file)
index 670622f..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdelfind.h"
-#include "set2/set_type_ellen_bintree.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_InsDelFind::X() { run_test<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_EllenBinTreeSet
-} // namespace set2
diff --git a/tests/unit/set2/set_insdelfind_feldmanhashset.cpp b/tests/unit/set2/set_insdelfind_feldmanhashset.cpp
deleted file mode 100644 (file)
index 115947e..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdelfind.h"
-#include "set2/set_type_feldman_hashset.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_InsDelFind::X() { run_test<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_FeldmanHashSet
-} // namespace set2
diff --git a/tests/unit/set2/set_insdelfind_michael.cpp b/tests/unit/set2/set_insdelfind_michael.cpp
deleted file mode 100644 (file)
index 022acdb..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdelfind.h"
-#include "set2/set_type_michael.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_InsDelFind::X() { run_test<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_MichaelSet
-} // namespace set2
diff --git a/tests/unit/set2/set_insdelfind_skip.cpp b/tests/unit/set2/set_insdelfind_skip.cpp
deleted file mode 100644 (file)
index 631081f..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdelfind.h"
-#include "set2/set_type_skip_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_InsDelFind::X() { run_test<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_SkipListSet
-} // namespace set2
diff --git a/tests/unit/set2/set_insdelfind_split.cpp b/tests/unit/set2/set_insdelfind_split.cpp
deleted file mode 100644 (file)
index 8719d8f..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdelfind.h"
-#include "set2/set_type_split_list.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_InsDelFind::X() { run_test<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_SplitList
-} // namespace set2
diff --git a/tests/unit/set2/set_insdelfind_std.cpp b/tests/unit/set2/set_insdelfind_std.cpp
deleted file mode 100644 (file)
index 24b3f2c..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdelfind.h"
-#include "set2/set_type_std.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_InsDelFind::X() { run_test<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_StdSet
-} // namespace set2
diff --git a/tests/unit/set2/set_insdelfind_striped.cpp b/tests/unit/set2/set_insdelfind_striped.cpp
deleted file mode 100644 (file)
index dde750d..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "set2/set_insdelfind.h"
-#include "set2/set_type_striped.h"
-
-#undef TEST_CASE
-#define TEST_CASE(TAG, X)  void Set_InsDelFind::X() { run_test<typename set_type< TAG, key_type, value_type>::X>(); }
-#include "set2/set_defs.h"
-
-namespace set2 {
-    CDSUNIT_DECLARE_StripedSet
-    CDSUNIT_DECLARE_RefinableSet
-} // namespace set2
diff --git a/tests/unit/set2/set_type.h b/tests/unit/set2/set_type.h
deleted file mode 100644 (file)
index 1b5a8ea..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_SET_TYPE_H
-#define CDSUNIT_SET_TYPE_H
-
-#include <cds/urcu/general_instant.h>
-#include <cds/urcu/general_buffered.h>
-#include <cds/urcu/general_threaded.h>
-#include <cds/urcu/signal_buffered.h>
-#include <cds/urcu/signal_threaded.h>
-
-#include <cds/opt/hash.h>
-#include <cds/sync/spinlock.h>
-#include <boost/functional/hash/hash.hpp>
-
-#include "cppunit/cppunit_mini.h"
-#include "lock/nolock.h"
-#include "michael_alloc.h"
-
-namespace set2 {
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-
-    typedef cds::urcu::gc< cds::urcu::general_instant<> >   rcu_gpi;
-    typedef cds::urcu::gc< cds::urcu::general_buffered<> >  rcu_gpb;
-    typedef cds::urcu::gc< cds::urcu::general_threaded<> >  rcu_gpt;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    typedef cds::urcu::gc< cds::urcu::signal_buffered<> >  rcu_shb;
-    typedef cds::urcu::gc< cds::urcu::signal_threaded<> >  rcu_sht;
-#endif
-
-    template <typename Key>
-    struct cmp {
-        int operator ()(Key const& k1, Key const& k2) const
-        {
-            if ( std::less<Key>( k1, k2 ) )
-                return -1;
-            return std::less<Key>( k2, k1 ) ? 1 : 0;
-        }
-    };
-
-#define CDSUNIT_INT_COMPARE(t)  template <> struct cmp<t> { int operator()( t k1, t k2 ){ return (int)(k1 - k2); } }
-    CDSUNIT_INT_COMPARE(char);
-    CDSUNIT_INT_COMPARE(unsigned char);
-    CDSUNIT_INT_COMPARE(int);
-    CDSUNIT_INT_COMPARE(unsigned int);
-    CDSUNIT_INT_COMPARE(long);
-    CDSUNIT_INT_COMPARE(unsigned long);
-    CDSUNIT_INT_COMPARE(long long);
-    CDSUNIT_INT_COMPARE(unsigned long long);
-#undef CDSUNIT_INT_COMPARE
-
-    template <>
-    struct cmp<std::string>
-    {
-        int operator()(std::string const& s1, std::string const& s2)
-        {
-            return s1.compare( s2 );
-        }
-        int operator()(std::string const& s1, char const * s2)
-        {
-            return s1.compare( s2 );
-        }
-        int operator()(char const * s1, std::string const& s2)
-        {
-            return -s2.compare( s1 );
-        }
-    };
-
-    // forward
-    template <typename ImplSelector, typename Key, typename Value>
-    struct set_type;
-
-    template <typename Key, typename Value>
-    struct set_type_base
-    {
-        typedef Key     key_type;
-        typedef Value   value_type;
-
-        struct key_val {
-            key_type    key;
-            value_type  val;
-
-            /*explicit*/ key_val( key_type const& k ): key(k), val() {}
-            key_val( key_type const& k, value_type const& v ): key(k), val(v) {}
-
-            template <typename K>
-            /*explicit*/ key_val( K const& k ): key(k) {}
-
-            template <typename K, typename T>
-            key_val( K const& k, T const& v ): key(k), val(v) {}
-        };
-
-        typedef co::v::hash<key_type>   key_hash;
-        typedef std::less<key_type>     key_less;
-        typedef cmp<key_type>           key_compare;
-
-        struct less {
-            bool operator()( key_val const& k1, key_val const& k2 ) const
-            {
-                return key_less()( k1.key, k2.key );
-            }
-            bool operator()( key_type const& k1, key_val const& k2 ) const
-            {
-                return key_less()( k1, k2.key );
-            }
-            bool operator()( key_val const& k1, key_type const& k2 ) const
-            {
-                return key_less()( k1.key, k2 );
-            }
-        };
-
-        struct compare {
-            int operator()( key_val const& k1, key_val const& k2 ) const
-            {
-                return key_compare()( k1.key, k2.key );
-            }
-            int operator()( key_type const& k1, key_val const& k2 ) const
-            {
-                return key_compare()( k1, k2.key );
-            }
-            int operator()( key_val const& k1, key_type const& k2 ) const
-            {
-                return key_compare()( k1.key, k2 );
-            }
-        };
-
-        struct equal_to {
-            bool operator()( key_val const& k1, key_val const& k2 ) const
-            {
-                return key_compare()( k1.key, k2.key ) == 0;
-            }
-            bool operator()( key_type const& k1, key_val const& k2 ) const
-            {
-                return key_compare()( k1, k2.key ) == 0;
-            }
-            bool operator()( key_val const& k1, key_type const& k2 ) const
-            {
-                return key_compare()( k1.key, k2 ) == 0;
-            }
-        };
-
-
-        struct hash: public key_hash
-        {
-            size_t operator()( key_val const& v ) const
-            {
-                return key_hash::operator()( v.key );
-            }
-            size_t operator()( key_type const& key ) const
-            {
-                return key_hash::operator()( key );
-            }
-            template <typename Q>
-            size_t operator()( Q const& k ) const
-            {
-                return key_hash::operator()( k );
-            }
-        };
-
-        struct hash2: public hash
-        {
-            size_t operator()( key_val const& k ) const
-            {
-                size_t seed = ~hash::operator ()( k );
-                boost::hash_combine( seed, k.key );
-                return seed;
-            }
-            size_t operator()( key_type const& k ) const
-            {
-                size_t seed = ~hash::operator ()( k );
-                boost::hash_combine( seed, k );
-                return seed;
-            }
-            template <typename Q>
-            size_t operator()( Q const& k ) const
-            {
-                return key_hash::operator()( k );
-            }
-        };
-    };
-
-
-    // *************************************************
-    // print_stat
-    // *************************************************
-
-    template <typename Set>
-    static inline void print_stat( Set const& /*s*/ )
-    {}
-
-
-    //*******************************************************
-    // additional_check
-    //*******************************************************
-
-    template <typename Set>
-    static inline void additional_check( Set& /*set*/ )
-    {}
-
-    template <typename Set>
-    static inline void additional_cleanup( Set& /*set*/ )
-    {}
-
-    //*******************************************************
-    // check_before_clear
-    //*******************************************************
-
-    template <typename Set>
-    static inline void check_before_clear( Set& /*s*/ )
-    {}
-
-}   // namespace set2
-
-#endif // ifndef CDSUNIT_SET_TYPE_H
diff --git a/tests/unit/set2/set_type_cuckoo.h b/tests/unit/set2/set_type_cuckoo.h
deleted file mode 100644 (file)
index a392cb3..0000000
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_SET_TYPE_CUCKOO_H
-#define CDSUNIT_SET_TYPE_CUCKOO_H
-
-#include "set2/set_type.h"
-
-#include <cds/container/cuckoo_set.h>
-#include "print_cuckoo_stat.h"
-
-namespace set2 {
-
-    template <typename V, typename Traits>
-    class CuckooSet : public cc::CuckooSet< V, Traits >
-    {
-    public:
-        typedef cc::CuckooSet< V, Traits > cuckoo_base_class;
-
-    public:
-        template <typename Config>
-        CuckooSet( Config const& cfg )
-            : cuckoo_base_class(
-
-                cfg.c_nCuckooInitialSize,
-                static_cast<unsigned int>( cfg.c_nCuckooProbesetSize ),
-                static_cast<unsigned int>( cfg.c_nCuckooProbesetThreshold )
-            )
-        {}
-
-        template <typename Q, typename Pred>
-        bool erase_with( Q const& key, Pred /*pred*/ )
-        {
-            return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
-        }
-
-        // 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_CuckooSet;
-
-    template <typename Key, typename Val>
-    struct set_type< tag_CuckooSet, Key, Val >: public set_type_base< Key, Val >
-    {
-        typedef set_type_base< Key, Val > base_class;
-        typedef typename base_class::key_val key_val;
-        typedef typename base_class::compare compare;
-        typedef typename base_class::equal_to equal_to;
-        typedef typename base_class::less less;
-        typedef typename base_class::hash hash;
-        typedef typename base_class::hash2 hash2;
-
-        // ***************************************************************************
-        // CuckooSet
-
-        template <typename Traits>
-        struct traits_CuckooStripedSet : public Traits
-        {
-            typedef cc::cuckoo::striping<> mutex_policy;
-        };
-        template <typename Traits>
-        struct traits_CuckooRefinableSet : public Traits
-        {
-            typedef cc::cuckoo::refinable<> mutex_policy;
-        };
-
-        struct traits_CuckooSet_list_unord :
-            public cc::cuckoo::make_traits <
-                cc::cuckoo::probeset_type< cc::cuckoo::list >
-                , co::equal_to< equal_to >
-                , co::hash< std::tuple< hash, hash2 > >
-            > ::type
-        {};
-        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_unord>> CuckooStripedSet_list_unord;
-        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_unord>> CuckooRefinableSet_list_unord;
-
-        struct traits_CuckooSet_list_unord_stat : public traits_CuckooSet_list_unord
-        {
-            typedef cc::cuckoo::stat stat;
-        };
-        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_unord_stat>> CuckooStripedSet_list_unord_stat;
-        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_unord_stat>> CuckooRefinableSet_list_unord_stat;
-
-        struct traits_CuckooSet_list_unord_storehash : public traits_CuckooSet_list_unord
-        {
-            static CDS_CONSTEXPR const bool store_hash = true;
-        };
-        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_unord_storehash>> CuckooStripedSet_list_unord_storehash;
-        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_unord_storehash>> CuckooRefinableSet_list_unord_storehash;
-
-        struct traits_CuckooSet_list_ord :
-            public cc::cuckoo::make_traits <
-                cc::cuckoo::probeset_type< cc::cuckoo::list >
-                , co::compare< compare >
-                , co::hash< std::tuple< hash, hash2 > >
-            > ::type
-        {};
-        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_ord>> CuckooStripedSet_list_ord;
-        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_ord>> CuckooRefinableSet_list_ord;
-
-        struct traits_CuckooSet_list_ord_stat : public traits_CuckooSet_list_ord
-        {
-            typedef cc::cuckoo::stat stat;
-        };
-        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_ord_stat>> CuckooStripedSet_list_ord_stat;
-        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_ord_stat>> CuckooRefinableSet_list_ord_stat;
-
-        struct traits_CuckooSet_list_ord_storehash : public traits_CuckooSet_list_ord
-        {
-            static CDS_CONSTEXPR const bool store_hash = true;
-        };
-        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_ord_storehash>> CuckooStripedSet_list_ord_storehash;
-        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_ord_storehash>> CuckooRefinableSet_list_ord_storehash;
-
-
-        struct traits_CuckooSet_vector_unord :
-            public cc::cuckoo::make_traits <
-                cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                , co::equal_to< equal_to >
-                , co::hash< std::tuple< hash, hash2 > >
-            > ::type
-        {};
-        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_unord>> CuckooStripedSet_vector_unord;
-        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_unord>> CuckooRefinableSet_vector_unord;
-
-        struct traits_CuckooSet_vector_unord_stat : public traits_CuckooSet_vector_unord
-        {
-            typedef cc::cuckoo::stat stat;
-        };
-        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_unord_stat>> CuckooStripedSet_vector_unord_stat;
-        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_unord_stat>> CuckooRefinableSet_vector_unord_stat;
-
-        struct traits_CuckooSet_vector_unord_storehash : public traits_CuckooSet_vector_unord
-        {
-            static CDS_CONSTEXPR const bool store_hash = true;
-        };
-        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_unord_storehash>> CuckooStripedSet_vector_unord_storehash;
-        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_unord_storehash>> CuckooRefinableSet_vector_unord_storehash;
-
-        struct traits_CuckooSet_vector_ord :
-            public cc::cuckoo::make_traits <
-                cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                , co::compare< compare >
-                , co::hash< std::tuple< hash, hash2 > >
-            > ::type
-        {};
-        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_ord>> CuckooStripedSet_vector_ord;
-        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_ord>> CuckooRefinableSet_vector_ord;
-
-        struct traits_CuckooSet_vector_ord_stat : public traits_CuckooSet_vector_ord
-        {
-            typedef cc::cuckoo::stat stat;
-        };
-        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_ord_stat>> CuckooStripedSet_vector_ord_stat;
-        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_ord_stat>> CuckooRefinableSet_vector_ord_stat;
-
-        struct traits_CuckooSet_vector_ord_storehash : public traits_CuckooSet_vector_ord
-        {
-            static CDS_CONSTEXPR const bool store_hash = true;
-        };
-        typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_ord_storehash>> CuckooStripedSet_vector_ord_storehash;
-        typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_ord_storehash>> CuckooRefinableSet_vector_ord_storehash;
-
-    };
-
-    template <typename T, typename Traits >
-    static inline void print_stat( cc::CuckooSet< T, Traits > const& s )
-    {
-        CPPUNIT_MSG( s.statistics() << s.mutex_policy_statistics() );
-    }
-
-    template <typename V, typename Traits>
-    static inline void print_stat( CuckooSet< V, Traits > const& s )
-    {
-        typedef CuckooSet< V, Traits > set_type;
-        print_stat( static_cast<typename set_type::cuckoo_base_class const&>(s) );
-    }
-
-} // namespace set2
-
-#endif // #ifndef CDSUNIT_SET_TYPE_CUCKOO_H
diff --git a/tests/unit/set2/set_type_ellen_bintree.h b/tests/unit/set2/set_type_ellen_bintree.h
deleted file mode 100644 (file)
index 845f24a..0000000
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_SET_TYPE_ELLEN_BINTREE_H
-#define CDSUNIT_SET_TYPE_ELLEN_BINTREE_H
-
-#include "set2/set_type.h"
-
-#include <cds/container/ellen_bintree_set_rcu.h>
-#include <cds/container/ellen_bintree_set_hp.h>
-#include <cds/container/ellen_bintree_set_dhp.h>
-
-#include "print_ellenbintree_stat.h"
-
-namespace set2 {
-
-    template <class GC, typename Key, typename T, typename Traits = cc::ellen_bintree::traits >
-    class EllenBinTreeSet : public cc::EllenBinTreeSet< GC, Key, T, Traits >
-    {
-        typedef cc::EllenBinTreeSet< GC, Key, T, Traits > base_class;
-    public:
-        template <typename Config>
-        EllenBinTreeSet( Config const& /*cfg*/ )
-        {}
-
-        // 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_EllenBinTreeSet;
-
-    template <typename Key, typename Val>
-    struct set_type< tag_EllenBinTreeSet, Key, Val >: public set_type_base< Key, Val >
-    {
-        typedef set_type_base< Key, Val > base_class;
-        typedef typename base_class::key_type key_type;
-        typedef typename base_class::key_val key_val;
-        typedef typename base_class::compare compare;
-        typedef typename base_class::less less;
-        typedef typename base_class::key_less key_less;
-
-        struct ellen_bintree_props {
-            struct key_extractor {
-                void operator()( key_type& dest, key_val const& src ) const
-                {
-                    dest = src.key;
-                }
-            };
-
-            struct less {
-                bool operator()( key_val const& v1, key_val const& v2 ) const
-                {
-                    return key_less()( v1.key, v2.key );
-                }
-                bool operator()( key_type const& k, key_val const& v ) const
-                {
-                    return key_less()( k, v.key );
-                }
-                bool operator()( key_val const& v, key_type const& k ) const
-                {
-                    return key_less()( v.key, k );
-                }
-                bool operator()( key_type const& k1, key_type const& k2 ) const
-                {
-                    return key_less()( k1, k2 );
-                }
-            };
-
-            struct hp_gc {
-                typedef cc::ellen_bintree::node<cds::gc::HP, key_val>               leaf_node;
-                typedef cc::ellen_bintree::internal_node< key_type, leaf_node >     internal_node;
-                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
-            };
-
-            struct dhp_gc {
-                typedef cc::ellen_bintree::node<cds::gc::DHP, key_val>              leaf_node;
-                typedef cc::ellen_bintree::internal_node< key_type, leaf_node >     internal_node;
-                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
-            };
-
-            struct gpi {
-                typedef cc::ellen_bintree::node<rcu_gpi, key_val>                   leaf_node;
-                typedef cc::ellen_bintree::internal_node< key_type, leaf_node >     internal_node;
-                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
-            };
-            struct gpb {
-                typedef cc::ellen_bintree::node<rcu_gpb, key_val>                   leaf_node;
-                typedef cc::ellen_bintree::internal_node< key_type, leaf_node >     internal_node;
-                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
-            };
-            struct gpt {
-                typedef cc::ellen_bintree::node<rcu_gpt, key_val>                   leaf_node;
-                typedef cc::ellen_bintree::internal_node< key_type, leaf_node >     internal_node;
-                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
-            };
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-            struct shb {
-                typedef cc::ellen_bintree::node<rcu_shb, key_val>                   leaf_node;
-                typedef cc::ellen_bintree::internal_node< key_type, leaf_node >     internal_node;
-                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
-            };
-            struct sht {
-                typedef cc::ellen_bintree::node<rcu_sht, key_val>                   leaf_node;
-                typedef cc::ellen_bintree::internal_node< key_type, leaf_node >     internal_node;
-                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
-            };
-#endif
-        };
-
-        struct traits_EllenBinTreeSet: public cc::ellen_bintree::make_set_traits<
-            cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
-            ,co::less< typename ellen_bintree_props::less >
-            ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
-        >::type
-        {};
-
-        struct traits_EllenBinTreeSet_hp : public traits_EllenBinTreeSet
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeSet< cds::gc::HP, key_type, key_val, traits_EllenBinTreeSet_hp > EllenBinTreeSet_hp;
-
-        struct traits_EllenBinTreeSet_dhp : public traits_EllenBinTreeSet
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeSet< cds::gc::DHP, key_type, key_val, traits_EllenBinTreeSet_dhp > EllenBinTreeSet_dhp;
-
-        struct traits_EllenBinTreeSet_gpi : public traits_EllenBinTreeSet
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeSet< rcu_gpi, key_type, key_val, traits_EllenBinTreeSet_gpi > EllenBinTreeSet_rcu_gpi;
-
-        struct traits_EllenBinTreeSet_gpb : public traits_EllenBinTreeSet
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeSet< rcu_gpb, key_type, key_val, traits_EllenBinTreeSet_gpb > EllenBinTreeSet_rcu_gpb;
-
-        struct traits_EllenBinTreeSet_gpt : public traits_EllenBinTreeSet
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeSet< rcu_gpt, key_type, key_val, traits_EllenBinTreeSet_gpt > EllenBinTreeSet_rcu_gpt;
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits_EllenBinTreeSet_shb : public traits_EllenBinTreeSet
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeSet< rcu_shb, key_type, key_val, traits_EllenBinTreeSet_shb > EllenBinTreeSet_rcu_shb;
-
-        struct traits_EllenBinTreeSet_sht : public traits_EllenBinTreeSet
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeSet< rcu_sht, key_type, key_val, traits_EllenBinTreeSet_sht > EllenBinTreeSet_rcu_sht;
-#endif
-
-        //
-        struct traits_EllenBinTreeSet_yield : public traits_EllenBinTreeSet
-        {
-            typedef cds::backoff::yield back_off;
-        };
-
-        struct traits_EllenBinTreeSet_yield_hp : public traits_EllenBinTreeSet_yield
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeSet< cds::gc::HP, key_type, key_val, traits_EllenBinTreeSet_yield_hp > EllenBinTreeSet_yield_hp;
-
-        struct traits_EllenBinTreeSet_yield_dhp : public traits_EllenBinTreeSet_yield
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeSet< cds::gc::DHP, key_type, key_val, traits_EllenBinTreeSet_yield_dhp > EllenBinTreeSet_yield_dhp;
-
-
-        struct traits_EllenBinTreeSet_yield_gpb : public traits_EllenBinTreeSet_yield
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeSet< rcu_gpb, key_type, key_val, traits_EllenBinTreeSet_yield_gpb > EllenBinTreeSet_yield_rcu_gpb;
-
-
-        struct traits_EllenBinTreeSet_stat: public cc::ellen_bintree::make_set_traits<
-            cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
-            ,co::less< typename ellen_bintree_props::less >
-            ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
-            ,co::stat< cc::ellen_bintree::stat<> >
-        >::type
-        {};
-
-        struct traits_EllenBinTreeSet_stat_hp : public traits_EllenBinTreeSet_stat
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeSet< cds::gc::HP, key_type, key_val, traits_EllenBinTreeSet_stat_hp > EllenBinTreeSet_hp_stat;
-
-        struct traits_EllenBinTreeSet_stat_dhp : public traits_EllenBinTreeSet_stat
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeSet< cds::gc::DHP, key_type, key_val, traits_EllenBinTreeSet_stat_dhp > EllenBinTreeSet_dhp_stat;
-
-        struct traits_EllenBinTreeSet_stat_gpi : public traits_EllenBinTreeSet_stat
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeSet< rcu_gpi, key_type, key_val, traits_EllenBinTreeSet_stat_gpi > EllenBinTreeSet_rcu_gpi_stat;
-
-        struct traits_EllenBinTreeSet_stat_gpb : public traits_EllenBinTreeSet_stat
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeSet< rcu_gpb, key_type, key_val, traits_EllenBinTreeSet_stat_gpb > EllenBinTreeSet_rcu_gpb_stat;
-
-        struct traits_EllenBinTreeSet_stat_gpt : public traits_EllenBinTreeSet_stat
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeSet< rcu_gpt, key_type, key_val, traits_EllenBinTreeSet_stat_gpt > EllenBinTreeSet_rcu_gpt_stat;
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits_EllenBinTreeSet_stat_shb : public traits_EllenBinTreeSet_stat
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeSet< rcu_shb, key_type, key_val, traits_EllenBinTreeSet_stat_shb > EllenBinTreeSet_rcu_shb_stat;
-
-        struct traits_EllenBinTreeSet_stat_sht : public traits_EllenBinTreeSet_stat
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef EllenBinTreeSet< rcu_sht, key_type, key_val, traits_EllenBinTreeSet_stat_sht > EllenBinTreeSet_rcu_sht_stat;
-#endif
-
-    };
-
-    template <typename GC, typename Key, typename T, typename Traits>
-    static inline void print_stat( EllenBinTreeSet<GC, Key, T, Traits> const& s )
-    {
-        CPPUNIT_MSG( s.statistics() );
-    }
-
-    namespace ellen_bintree_check {
-        static inline void check_stat( cds::intrusive::ellen_bintree::empty_stat const& /*s*/ )
-        {
-            // Not true for threaded RCU
-            /*
-            CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get(),
-                "m_nAlloc=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
-                << ", m_nFree=" << ellen_bintree_pool::internal_node_counter::m_nFree.get()
-                );
-            */
-        }
-
-        static inline void check_stat( cds::intrusive::ellen_bintree::stat<> const& stat )
-        {
-            CPPUNIT_CHECK_CURRENT( stat.m_nInternalNodeCreated == stat.m_nInternalNodeDeleted );
-            CPPUNIT_CHECK_CURRENT( stat.m_nUpdateDescCreated == stat.m_nUpdateDescDeleted );
-            //CPPUNIT_CHECK_CURRENT( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get() );
-            CPPUNIT_CHECK_CURRENT( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == stat.m_nInternalNodeCreated );
-            // true if RCU is not threaded
-            //CPPUNIT_CHECK_CURRENT( stat.m_nInternalNodeDeleted == ellen_bintree_pool::internal_node_counter::m_nFree.get() );
-        }
-    }   // namespace ellen_bintree_check
-
-    template <typename GC, typename Key, typename T, typename Traits>
-    static inline void additional_check( EllenBinTreeSet<GC, Key, T, Traits>& s )
-    {
-        GC::force_dispose();
-        ellen_bintree_check::check_stat( s.statistics() );
-    }
-
-    template <typename GC, typename Key, typename T, typename Traits>
-    static inline void additional_cleanup( EllenBinTreeSet<GC, Key, T, Traits>& /*s*/ )
-    {
-        ellen_bintree_pool::internal_node_counter::reset();
-    }
-
-    template <typename GC, typename Key, typename T, typename Traits>
-    static inline void check_before_clear( cds::container::EllenBinTreeSet<GC, Key, T, Traits>& s )
-    {
-        CPPUNIT_CHECK_CURRENT( s.check_consistency() );
-    }
-
-
-} // namespace set2
-
-#endif // #ifndef CDSUNIT_SET_TYPE_ELLEN_BINTREE_H
diff --git a/tests/unit/set2/set_type_feldman_hashset.h b/tests/unit/set2/set_type_feldman_hashset.h
deleted file mode 100644 (file)
index 87cb744..0000000
+++ /dev/null
@@ -1,323 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_SET_TYPE_MICHAEL_H
-#define CDSUNIT_SET_TYPE_MICHAEL_H
-
-#include "set2/set_type.h"
-
-#include <cds/container/feldman_hashset_hp.h>
-#include <cds/container/feldman_hashset_dhp.h>
-#include <cds/container/feldman_hashset_rcu.h>
-
-#include "print_feldman_hashset_stat.h"
-#include "hashing/hash_func.h"
-
-namespace set2 {
-
-    template <class GC, typename T, typename Traits = cc::feldman_hashset::traits>
-    class FeldmanHashSet : public cc::FeldmanHashSet< GC, T, Traits >
-    {
-        typedef cc::FeldmanHashSet< GC, T, Traits > base_class;
-
-        template <typename G>
-        struct get_extracted_ptr
-        {
-            typedef typename base_class::guarded_ptr extracted_ptr;
-        };
-
-        template <typename RCU>
-        struct get_extracted_ptr<cds::urcu::gc<RCU>>
-        {
-            typedef typename base_class::exempt_ptr extracted_ptr;
-        };
-
-    public:
-        typedef typename T::hasher hasher;
-        typedef typename get_extracted_ptr<GC>::extracted_ptr extracted_ptr;
-
-        template <class Config>
-        FeldmanHashSet( Config const& cfg )
-            : base_class( cfg.c_nFeldmanSet_HeadBits, cfg.c_nFeldmanSet_ArrayBits )
-        {}
-
-        template <typename Q>
-        bool erase( Q const& key )
-        {
-            return base_class::erase( hasher()( key ));
-        }
-
-        template <typename Q, typename Func>
-        bool erase( Q const& key, Func f )
-        {
-            return base_class::erase( hasher()( key ), f );
-        }
-
-        template <typename Q>
-        extracted_ptr extract(Q const& key)
-        {
-            return base_class::extract( hasher()(key) );
-        }
-
-        template <typename Q>
-        bool contains( Q const& key )
-        {
-            return base_class::contains( hasher()(key) );
-        }
-
-        // 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_FeldmanHashSet;
-
-    template <typename Key, typename Val>
-    struct set_type< tag_FeldmanHashSet, Key, Val >: public set_type_base< Key, Val >
-    {
-        typedef set_type_base< Key, Val > base_class;
-        typedef typename base_class::compare compare;
-        typedef typename base_class::less less;
-        typedef typename base_class::hash hash;
-        typedef typename base_class::key_type   key_type;
-        typedef typename base_class::value_type value_type;
-
-        template <typename Hasher>
-        struct hash_type
-        {
-            typedef Hasher hasher;
-            typedef typename hasher::hash_type type;
-        };
-
-        template <typename TH>
-        struct hash_type<std::hash<TH>>
-        {
-            typedef std::hash<TH> hasher;
-            typedef size_t type;
-        };
-
-        template <typename Hasher>
-        struct key_val: base_class::key_val
-        {
-            typedef typename base_class::key_val base;
-            typedef Hasher hasher;
-            typedef typename hash_type<hasher>::type hash_type;
-
-            hash_type hash;
-
-            /*explicit*/ key_val( key_type const& k ): base(k), hash( hasher()( k )) {}
-            key_val( key_type const& k, value_type const& v ): base(k, v), hash( hasher()( k )) {}
-
-            template <typename K>
-            /*explicit*/ key_val( K const& k ): base(k), hash( hasher()( k )) {}
-
-            template <typename K, typename T>
-            key_val( K const& k, T const& v ): base(k, v), hash( hasher()( k )) {}
-        };
-
-        struct default_traits : public cc::feldman_hashset::traits
-        {
-            struct hash_accessor {
-                template <typename Hasher>
-                typename key_val<Hasher>::hash_type const& operator()( key_val<Hasher> const& kv )
-                {
-                    return kv.hash;
-                }
-            };
-        };
-
-        typedef FeldmanHashSet< cds::gc::HP,  key_val<std::hash<key_type>>, default_traits >    FeldmanHashSet_hp_stdhash;
-        typedef FeldmanHashSet< cds::gc::DHP, key_val<std::hash<key_type>>, default_traits >    FeldmanHashSet_dhp_stdhash;
-        typedef FeldmanHashSet< rcu_gpi, key_val<std::hash<key_type>>, default_traits >    FeldmanHashSet_rcu_gpi_stdhash;
-        typedef FeldmanHashSet< rcu_gpb, key_val<std::hash<key_type>>, default_traits >    FeldmanHashSet_rcu_gpb_stdhash;
-        typedef FeldmanHashSet< rcu_gpt, key_val<std::hash<key_type>>, default_traits >    FeldmanHashSet_rcu_gpt_stdhash;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef FeldmanHashSet< rcu_shb, key_val<std::hash<key_type>>, default_traits >    FeldmanHashSet_rcu_shb_stdhash;
-        typedef FeldmanHashSet< rcu_sht, key_val<std::hash<key_type>>, default_traits >    FeldmanHashSet_rcu_sht_stdhash;
-#endif
-
-        struct traits_FeldmanHashSet_stat: public cc::feldman_hashset::make_traits<
-                co::type_traits< default_traits >,
-                co::stat< cc::feldman_hashset::stat<>>
-            >::type
-        {};
-
-        typedef FeldmanHashSet< cds::gc::HP,  key_val<std::hash<key_type>>, traits_FeldmanHashSet_stat >    FeldmanHashSet_hp_stdhash_stat;
-        typedef FeldmanHashSet< cds::gc::DHP, key_val<std::hash<key_type>>, traits_FeldmanHashSet_stat >    FeldmanHashSet_dhp_stdhash_stat;
-        typedef FeldmanHashSet< rcu_gpi, key_val<std::hash<key_type>>, traits_FeldmanHashSet_stat >    FeldmanHashSet_rcu_gpi_stdhash_stat;
-        typedef FeldmanHashSet< rcu_gpb, key_val<std::hash<key_type>>, traits_FeldmanHashSet_stat >    FeldmanHashSet_rcu_gpb_stdhash_stat;
-        typedef FeldmanHashSet< rcu_gpt, key_val<std::hash<key_type>>, traits_FeldmanHashSet_stat >    FeldmanHashSet_rcu_gpt_stdhash_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef FeldmanHashSet< rcu_shb, key_val<std::hash<key_type>>, traits_FeldmanHashSet_stat >    FeldmanHashSet_rcu_shb_stdhash_stat;
-        typedef FeldmanHashSet< rcu_sht, key_val<std::hash<key_type>>, traits_FeldmanHashSet_stat >    FeldmanHashSet_rcu_sht_stdhash_stat;
-#endif
-
-        // CityHash
-#if CDS_BUILD_BITS == 64
-        struct traits_FeldmanHashSet_city64 : public default_traits
-        {
-            typedef ::hashing::city64::less less;
-        };
-        typedef FeldmanHashSet< cds::gc::HP,  key_val<::hashing::city64>, traits_FeldmanHashSet_city64 >    FeldmanHashSet_hp_city64;
-        typedef FeldmanHashSet< cds::gc::DHP, key_val<::hashing::city64>, traits_FeldmanHashSet_city64 >    FeldmanHashSet_dhp_city64;
-        typedef FeldmanHashSet< rcu_gpi, key_val<::hashing::city64>, traits_FeldmanHashSet_city64 >    FeldmanHashSet_rcu_gpi_city64;
-        typedef FeldmanHashSet< rcu_gpb, key_val<::hashing::city64>, traits_FeldmanHashSet_city64 >    FeldmanHashSet_rcu_gpb_city64;
-        typedef FeldmanHashSet< rcu_gpt, key_val<::hashing::city64>, traits_FeldmanHashSet_city64 >    FeldmanHashSet_rcu_gpt_city64;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef FeldmanHashSet< rcu_shb, key_val<::hashing::city64>, traits_FeldmanHashSet_city64 >    FeldmanHashSet_rcu_shb_city64;
-        typedef FeldmanHashSet< rcu_sht, key_val<::hashing::city64>, traits_FeldmanHashSet_city64 >    FeldmanHashSet_rcu_sht_city64;
-#endif
-
-        struct traits_FeldmanHashSet_city64_stat : public traits_FeldmanHashSet_city64
-        {
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef FeldmanHashSet< cds::gc::HP,  key_val<::hashing::city64>, traits_FeldmanHashSet_city64_stat >    FeldmanHashSet_hp_city64_stat;
-        typedef FeldmanHashSet< cds::gc::DHP, key_val<::hashing::city64>, traits_FeldmanHashSet_city64_stat >    FeldmanHashSet_dhp_city64_stat;
-        typedef FeldmanHashSet< rcu_gpi, key_val<::hashing::city64>, traits_FeldmanHashSet_city64_stat >    FeldmanHashSet_rcu_gpi_city64_stat;
-        typedef FeldmanHashSet< rcu_gpb, key_val<::hashing::city64>, traits_FeldmanHashSet_city64_stat >    FeldmanHashSet_rcu_gpb_city64_stat;
-        typedef FeldmanHashSet< rcu_gpt, key_val<::hashing::city64>, traits_FeldmanHashSet_city64_stat >    FeldmanHashSet_rcu_gpt_city64_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef FeldmanHashSet< rcu_shb, key_val<::hashing::city64>, traits_FeldmanHashSet_city64_stat >    FeldmanHashSet_rcu_shb_city64_stat;
-        typedef FeldmanHashSet< rcu_sht, key_val<::hashing::city64>, traits_FeldmanHashSet_city64_stat >    FeldmanHashSet_rcu_sht_city64_stat;
-#endif
-
-        struct traits_FeldmanHashSet_city128 : public default_traits
-        {
-            typedef ::hashing::city128::less less;
-        };
-        typedef FeldmanHashSet< cds::gc::HP,  key_val<::hashing::city128>, traits_FeldmanHashSet_city128 >    FeldmanHashSet_hp_city128;
-        typedef FeldmanHashSet< cds::gc::DHP, key_val<::hashing::city128>, traits_FeldmanHashSet_city128 >    FeldmanHashSet_dhp_city128;
-        typedef FeldmanHashSet< rcu_gpi, key_val<::hashing::city128>, traits_FeldmanHashSet_city128 >    FeldmanHashSet_rcu_gpi_city128;
-        typedef FeldmanHashSet< rcu_gpb, key_val<::hashing::city128>, traits_FeldmanHashSet_city128 >    FeldmanHashSet_rcu_gpb_city128;
-        typedef FeldmanHashSet< rcu_gpt, key_val<::hashing::city128>, traits_FeldmanHashSet_city128 >    FeldmanHashSet_rcu_gpt_city128;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef FeldmanHashSet< rcu_shb, key_val<::hashing::city128>, traits_FeldmanHashSet_city128 >    FeldmanHashSet_rcu_shb_city128;
-        typedef FeldmanHashSet< rcu_sht, key_val<::hashing::city128>, traits_FeldmanHashSet_city128 >    FeldmanHashSet_rcu_sht_city128;
-#endif
-
-        struct traits_FeldmanHashSet_city128_stat : public traits_FeldmanHashSet_city128
-        {
-            typedef cc::feldman_hashset::stat<> stat;
-        };
-        typedef FeldmanHashSet< cds::gc::HP,  key_val<::hashing::city128>, traits_FeldmanHashSet_city128_stat >    FeldmanHashSet_hp_city128_stat;
-        typedef FeldmanHashSet< cds::gc::DHP, key_val<::hashing::city128>, traits_FeldmanHashSet_city128_stat >    FeldmanHashSet_dhp_city128_stat;
-        typedef FeldmanHashSet< rcu_gpi, key_val<::hashing::city128>, traits_FeldmanHashSet_city128_stat >    FeldmanHashSet_rcu_gpi_city128_stat;
-        typedef FeldmanHashSet< rcu_gpb, key_val<::hashing::city128>, traits_FeldmanHashSet_city128_stat >    FeldmanHashSet_rcu_gpb_city128_stat;
-        typedef FeldmanHashSet< rcu_gpt, key_val<::hashing::city128>, traits_FeldmanHashSet_city128_stat >    FeldmanHashSet_rcu_gpt_city128_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef FeldmanHashSet< rcu_shb, key_val<::hashing::city128>, traits_FeldmanHashSet_city128_stat >    FeldmanHashSet_rcu_shb_city128_stat;
-        typedef FeldmanHashSet< rcu_sht, key_val<::hashing::city128>, traits_FeldmanHashSet_city128_stat >    FeldmanHashSet_rcu_sht_city128_stat;
-#endif
-
-#endif // #if CDS_BUILD_BITS == 64
-
-
-        // for fixed-sized key
-        // No hash function is necessary
-
-        struct fixed_sized_key
-        {
-            typedef typename set_type_base< Key, Val >::key_type key_type;
-            struct key_val : public set_type_base< Key, Val >::key_val
-            {
-                typedef typename set_type_base< Key, Val >::key_val base_class;
-
-                /*explicit*/ key_val(key_type const& k) : base_class(k) {}
-                key_val(key_type const& k, value_type const& v) : base_class(k, v) {}
-
-                template <typename K>
-                /*explicit*/ key_val(K const& k) : base_class(k) {}
-
-                template <typename K, typename T>
-                key_val(K const& k, T const& v) : base_class(k, v) {}
-
-                // mock hasher
-                struct hasher {
-                template <typename Q>
-                    key_type operator()( Q const& k ) const
-                    {
-                        return key_type( k );
-                    }
-                };
-            };
-
-            struct traits : public cc::feldman_hashset::traits
-            {
-                struct hash_accessor {
-                    key_type operator()(key_val const& kv)
-                    {
-                        return kv.key;
-                    }
-                };
-            };
-
-            struct traits_stat : public traits
-            {
-                typedef cc::feldman_hashset::stat<> stat;
-            };
-        };
-
-        typedef FeldmanHashSet< cds::gc::HP, typename fixed_sized_key::key_val, typename fixed_sized_key::traits >    FeldmanHashSet_hp_fixed;
-        typedef FeldmanHashSet< cds::gc::DHP, typename fixed_sized_key::key_val, typename fixed_sized_key::traits >    FeldmanHashSet_dhp_fixed;
-        typedef FeldmanHashSet< rcu_gpi, typename fixed_sized_key::key_val, typename fixed_sized_key::traits >    FeldmanHashSet_rcu_gpi_fixed;
-        typedef FeldmanHashSet< rcu_gpb, typename fixed_sized_key::key_val, typename fixed_sized_key::traits >    FeldmanHashSet_rcu_gpb_fixed;
-        typedef FeldmanHashSet< rcu_gpt, typename fixed_sized_key::key_val, typename fixed_sized_key::traits >    FeldmanHashSet_rcu_gpt_fixed;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef FeldmanHashSet< rcu_shb, typename fixed_sized_key::key_val, typename fixed_sized_key::traits >    FeldmanHashSet_rcu_shb_fixed;
-        typedef FeldmanHashSet< rcu_sht, typename fixed_sized_key::key_val, typename fixed_sized_key::traits >    FeldmanHashSet_rcu_sht_fixed;
-#endif
-
-        typedef FeldmanHashSet< cds::gc::HP, typename fixed_sized_key::key_val, typename fixed_sized_key::traits_stat >    FeldmanHashSet_hp_fixed_stat;
-        typedef FeldmanHashSet< cds::gc::DHP, typename fixed_sized_key::key_val, typename fixed_sized_key::traits_stat >    FeldmanHashSet_dhp_fixed_stat;
-        typedef FeldmanHashSet< rcu_gpi, typename fixed_sized_key::key_val, typename fixed_sized_key::traits_stat >    FeldmanHashSet_rcu_gpi_fixed_stat;
-        typedef FeldmanHashSet< rcu_gpb, typename fixed_sized_key::key_val, typename fixed_sized_key::traits_stat >    FeldmanHashSet_rcu_gpb_fixed_stat;
-        typedef FeldmanHashSet< rcu_gpt, typename fixed_sized_key::key_val, typename fixed_sized_key::traits_stat >    FeldmanHashSet_rcu_gpt_fixed_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef FeldmanHashSet< rcu_shb, typename fixed_sized_key::key_val, typename fixed_sized_key::traits_stat >    FeldmanHashSet_rcu_shb_fixed_stat;
-        typedef FeldmanHashSet< rcu_sht, typename fixed_sized_key::key_val, typename fixed_sized_key::traits_stat >    FeldmanHashSet_rcu_sht_fixed_stat;
-#endif
-
-    };
-
-    template <typename GC, typename T, typename Traits >
-    static inline void print_stat( FeldmanHashSet< GC, T, Traits > const& s )
-    {
-        CPPUNIT_MSG( s.statistics() );
-
-        std::vector< cds::intrusive::feldman_hashset::level_statistics > level_stat;
-        s.get_level_statistics( level_stat );
-        CPPUNIT_MSG( level_stat );
-    }
-
-} // namespace set2
-
-#endif // #ifndef CDSUNIT_SET_TYPE_MICHAEL_H
diff --git a/tests/unit/set2/set_type_lazy_list.h b/tests/unit/set2/set_type_lazy_list.h
deleted file mode 100644 (file)
index 5eaa0ad..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_SET_TYPE_LAZY_LIST_H
-#define CDSUNIT_SET_TYPE_LAZY_LIST_H
-
-#include "set2/set_type.h"
-
-#include <cds/container/lazy_list_hp.h>
-#include <cds/container/lazy_list_dhp.h>
-#include <cds/container/lazy_list_rcu.h>
-
-namespace set2 {
-
-    template <typename Key, typename Val>
-    struct lazy_list_type
-    {
-        typedef typename set_type_base< Key, Val >::key_val key_val;
-        typedef typename set_type_base< Key, Val >::compare compare;
-        typedef typename set_type_base< Key, Val >::less    less;
-
-                struct traits_LazyList_cmp_stdAlloc :
-            public cc::lazy_list::make_traits<
-                co::compare< compare >
-            >::type
-        {};
-        typedef cc::LazyList< cds::gc::HP,  key_val, traits_LazyList_cmp_stdAlloc > LazyList_HP_cmp_stdAlloc;
-        typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_cmp_stdAlloc > LazyList_DHP_cmp_stdAlloc;
-        typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPI_cmp_stdAlloc;
-        typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPB_cmp_stdAlloc;
-        typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPT_cmp_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHB_cmp_stdAlloc;
-        typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHT_cmp_stdAlloc;
-#endif
-        struct traits_LazyList_cmp_stdAlloc_seqcst :
-            public cc::lazy_list::make_traits<
-                co::compare< compare >
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        {};
-        typedef cc::LazyList< cds::gc::HP, key_val,  traits_LazyList_cmp_stdAlloc_seqcst > LazyList_HP_cmp_stdAlloc_seqcst;
-        typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_DHP_cmp_stdAlloc_seqcst;
-        typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPI_cmp_stdAlloc_seqcst;
-        typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPB_cmp_stdAlloc_seqcst;
-        typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPT_cmp_stdAlloc_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHB_cmp_stdAlloc_seqcst;
-        typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHT_cmp_stdAlloc_seqcst;
-#endif
-        struct traits_LazyList_cmp_michaelAlloc :
-            public cc::lazy_list::make_traits<
-                co::compare< compare >,
-                co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        {};
-        typedef cc::LazyList< cds::gc::HP,  key_val, traits_LazyList_cmp_michaelAlloc > LazyList_HP_cmp_michaelAlloc;
-        typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_DHP_cmp_michaelAlloc;
-        typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPI_cmp_michaelAlloc;
-        typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPB_cmp_michaelAlloc;
-        typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPT_cmp_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHB_cmp_michaelAlloc;
-        typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHT_cmp_michaelAlloc;
-#endif
-
-        struct traits_LazyList_less_stdAlloc:
-            public cc::lazy_list::make_traits<
-                co::less< less >
-            >::type
-        {};
-        typedef cc::LazyList< cds::gc::HP,  key_val, traits_LazyList_less_stdAlloc > LazyList_HP_less_stdAlloc;
-        typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_less_stdAlloc > LazyList_DHP_less_stdAlloc;
-        typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_GPI_less_stdAlloc;
-        typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_GPB_less_stdAlloc;
-        typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_GPT_less_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_SHB_less_stdAlloc;
-        typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_SHT_less_stdAlloc;
-#endif
-
-        struct traits_LazyList_less_stdAlloc_seqcst :
-            public cc::lazy_list::make_traits<
-                co::less< less >
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        {};
-        typedef cc::LazyList< cds::gc::HP, key_val,  traits_LazyList_less_stdAlloc_seqcst > LazyList_HP_less_stdAlloc_seqcst;
-        typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_DHP_less_stdAlloc_seqcst;
-        typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPI_less_stdAlloc_seqcst;
-        typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPB_less_stdAlloc_seqcst;
-        typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPT_less_stdAlloc_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHB_less_stdAlloc_seqcst;
-        typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHT_less_stdAlloc_seqcst;
-#endif
-
-        struct traits_LazyList_less_michaelAlloc :
-            public cc::lazy_list::make_traits<
-                co::less< less >,
-                co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        {};
-        typedef cc::LazyList< cds::gc::HP,  key_val, traits_LazyList_less_michaelAlloc > LazyList_HP_less_michaelAlloc;
-        typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_less_michaelAlloc > LazyList_DHP_less_michaelAlloc;
-        typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPI_less_michaelAlloc;
-        typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPB_less_michaelAlloc;
-        typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPT_less_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHB_less_michaelAlloc;
-        typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHT_less_michaelAlloc;
-#endif
-    };
-
-} // namespace set2
-
-#endif // #ifndef CDSUNIT_SET_TYPE_LAZY_LIST_H
diff --git a/tests/unit/set2/set_type_michael.h b/tests/unit/set2/set_type_michael.h
deleted file mode 100644 (file)
index 8d0c08b..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_SET_TYPE_MICHAEL_H
-#define CDSUNIT_SET_TYPE_MICHAEL_H
-
-#include "set2/set_type_michael_list.h"
-#include "set2/set_type_lazy_list.h"
-
-#include <cds/container/michael_set.h>
-#include <cds/container/michael_set_rcu.h>
-
-#include "michael_alloc.h"
-
-namespace set2 {
-
-    template <class GC, typename List, typename Traits = cc::michael_set::traits>
-    class MichaelHashSet : public cc::MichaelHashSet< GC, List, Traits >
-    {
-        typedef cc::MichaelHashSet< GC, List, Traits > base_class;
-    public:
-        template <class Config>
-        MichaelHashSet( Config const& cfg )
-            : base_class( cfg.c_nSetSize, cfg.c_nLoadFactor )
-        {}
-
-        // 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_MichaelHashSet;
-
-    template <typename Key, typename Val>
-    struct set_type< tag_MichaelHashSet, Key, Val >: public set_type_base< Key, Val >
-    {
-        typedef set_type_base< Key, Val > base_class;
-        typedef typename base_class::key_val key_val;
-        typedef typename base_class::compare compare;
-        typedef typename base_class::less less;
-        typedef typename base_class::hash hash;
-
-        // ***************************************************************************
-        // MichaelHashSet based on MichaelList
-
-        typedef michael_list_type< Key, Val > ml;
-
-        struct traits_MichaelSet_stdAlloc :
-            public cc::michael_set::make_traits<
-                co::hash< hash >
-            >::type
-        {};
-        typedef MichaelHashSet< cds::gc::HP,  typename ml::MichaelList_HP_cmp_stdAlloc,  traits_MichaelSet_stdAlloc > MichaelSet_HP_cmp_stdAlloc;
-        typedef MichaelHashSet< cds::gc::DHP, typename ml::MichaelList_DHP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_DHP_cmp_stdAlloc;
-        typedef MichaelHashSet< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPI_cmp_stdAlloc;
-        typedef MichaelHashSet< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPB_cmp_stdAlloc;
-        typedef MichaelHashSet< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPT_cmp_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef MichaelHashSet< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHB_cmp_stdAlloc;
-        typedef MichaelHashSet< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHT_cmp_stdAlloc;
-#endif
-
-        typedef MichaelHashSet< cds::gc::HP, typename ml::MichaelList_HP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_HP_less_stdAlloc;
-        typedef MichaelHashSet< cds::gc::DHP, typename ml::MichaelList_DHP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_DHP_less_stdAlloc;
-        typedef MichaelHashSet< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPI_less_stdAlloc;
-        typedef MichaelHashSet< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPB_less_stdAlloc;
-        typedef MichaelHashSet< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPT_less_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef MichaelHashSet< rcu_shb, typename ml::MichaelList_RCU_SHB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHB_less_stdAlloc;
-        typedef MichaelHashSet< rcu_sht, typename ml::MichaelList_RCU_SHT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHT_less_stdAlloc;
-#endif
-
-        typedef MichaelHashSet< cds::gc::HP, typename ml::MichaelList_HP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_HP_less_stdAlloc_seqcst;
-        typedef MichaelHashSet< cds::gc::DHP, typename ml::MichaelList_DHP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_DHP_less_stdAlloc_seqcst;
-        typedef MichaelHashSet< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPI_less_stdAlloc_seqcst;
-        typedef MichaelHashSet< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPB_less_stdAlloc_seqcst;
-        typedef MichaelHashSet< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPT_less_stdAlloc_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef MichaelHashSet< rcu_shb, typename ml::MichaelList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHB_less_stdAlloc_seqcst;
-        typedef MichaelHashSet< rcu_sht, typename ml::MichaelList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHT_less_stdAlloc_seqcst;
-#endif
-
-        struct traits_MichaelSet_michaelAlloc :
-            public cc::michael_set::make_traits<
-                co::hash< hash >,
-                co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        {};
-        typedef MichaelHashSet< cds::gc::HP,  typename ml::MichaelList_HP_cmp_michaelAlloc,  traits_MichaelSet_michaelAlloc > MichaelSet_HP_cmp_michaelAlloc;
-        typedef MichaelHashSet< cds::gc::DHP, typename ml::MichaelList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_DHP_cmp_michaelAlloc;
-        typedef MichaelHashSet< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPI_cmp_michaelAlloc;
-        typedef MichaelHashSet< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPB_cmp_michaelAlloc;
-        typedef MichaelHashSet< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPT_cmp_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef MichaelHashSet< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHB_cmp_michaelAlloc;
-        typedef MichaelHashSet< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHT_cmp_michaelAlloc;
-#endif
-
-        typedef MichaelHashSet< cds::gc::HP, typename ml::MichaelList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_HP_less_michaelAlloc;
-        typedef MichaelHashSet< cds::gc::DHP, typename ml::MichaelList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_DHP_less_michaelAlloc;
-        typedef MichaelHashSet< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPI_less_michaelAlloc;
-        typedef MichaelHashSet< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPB_less_michaelAlloc;
-        typedef MichaelHashSet< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPT_less_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef MichaelHashSet< rcu_shb, typename ml::MichaelList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHB_less_michaelAlloc;
-        typedef MichaelHashSet< rcu_sht, typename ml::MichaelList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHT_less_michaelAlloc;
-#endif
-
-
-        // ***************************************************************************
-        // MichaelHashSet based on LazyList
-
-        typedef lazy_list_type< Key, Val > ll;
-
-        typedef MichaelHashSet< cds::gc::HP, typename ll::LazyList_HP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_HP_cmp_stdAlloc;
-        typedef MichaelHashSet< cds::gc::DHP, typename ll::LazyList_DHP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_DHP_cmp_stdAlloc;
-        typedef MichaelHashSet< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPI_cmp_stdAlloc;
-        typedef MichaelHashSet< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPB_cmp_stdAlloc;
-        typedef MichaelHashSet< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPT_cmp_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef MichaelHashSet< rcu_shb, typename ll::LazyList_RCU_SHB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHB_cmp_stdAlloc;
-        typedef MichaelHashSet< rcu_sht, typename ll::LazyList_RCU_SHT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHT_cmp_stdAlloc;
-#endif
-
-        typedef MichaelHashSet< cds::gc::HP, typename ll::LazyList_HP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_HP_less_stdAlloc;
-        typedef MichaelHashSet< cds::gc::DHP, typename ll::LazyList_DHP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_DHP_less_stdAlloc;
-        typedef MichaelHashSet< rcu_gpi, typename ll::LazyList_RCU_GPI_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPI_less_stdAlloc;
-        typedef MichaelHashSet< rcu_gpb, typename ll::LazyList_RCU_GPB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPB_less_stdAlloc;
-        typedef MichaelHashSet< rcu_gpt, typename ll::LazyList_RCU_GPT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPT_less_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef MichaelHashSet< rcu_shb, typename ll::LazyList_RCU_SHB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHB_less_stdAlloc;
-        typedef MichaelHashSet< rcu_sht, typename ll::LazyList_RCU_SHT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHT_less_stdAlloc;
-#endif
-
-        typedef MichaelHashSet< cds::gc::HP, typename ll::LazyList_HP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_HP_less_stdAlloc_seqcst;
-        typedef MichaelHashSet< cds::gc::DHP, typename ll::LazyList_DHP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_DHP_less_stdAlloc_seqcst;
-        typedef MichaelHashSet< rcu_gpi, typename ll::LazyList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPI_less_stdAlloc_seqcst;
-        typedef MichaelHashSet< rcu_gpb, typename ll::LazyList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPB_less_stdAlloc_seqcst;
-        typedef MichaelHashSet< rcu_gpt, typename ll::LazyList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPT_less_stdAlloc_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef MichaelHashSet< rcu_shb, typename ll::LazyList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHB_less_stdAlloc_seqcst;
-        typedef MichaelHashSet< rcu_sht, typename ll::LazyList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHT_less_stdAlloc_seqcst;
-#endif
-
-        typedef MichaelHashSet< cds::gc::HP, typename ll::LazyList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_HP_cmp_michaelAlloc;
-        typedef MichaelHashSet< cds::gc::DHP, typename ll::LazyList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_DHP_cmp_michaelAlloc;
-        typedef MichaelHashSet< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPI_cmp_michaelAlloc;
-        typedef MichaelHashSet< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPB_cmp_michaelAlloc;
-        typedef MichaelHashSet< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPT_cmp_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef MichaelHashSet< rcu_shb, typename ll::LazyList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHB_cmp_michaelAlloc;
-        typedef MichaelHashSet< rcu_sht, typename ll::LazyList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHT_cmp_michaelAlloc;
-#endif
-
-        typedef MichaelHashSet< cds::gc::HP, typename ll::LazyList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_HP_less_michaelAlloc;
-        typedef MichaelHashSet< cds::gc::DHP, typename ll::LazyList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_DHP_less_michaelAlloc;
-        typedef MichaelHashSet< rcu_gpi, typename ll::LazyList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPI_less_michaelAlloc;
-        typedef MichaelHashSet< rcu_gpb, typename ll::LazyList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPB_less_michaelAlloc;
-        typedef MichaelHashSet< rcu_gpt, typename ll::LazyList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPT_less_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef MichaelHashSet< rcu_shb, typename ll::LazyList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHB_less_michaelAlloc;
-        typedef MichaelHashSet< rcu_sht, typename ll::LazyList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHT_less_michaelAlloc;
-#endif
-    };
-
-} // namespace set2
-
-#endif // #ifndef CDSUNIT_SET_TYPE_MICHAEL_H
diff --git a/tests/unit/set2/set_type_michael_list.h b/tests/unit/set2/set_type_michael_list.h
deleted file mode 100644 (file)
index e2766dc..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_SET_TYPE_MICHAEL_LIST_H
-#define CDSUNIT_SET_TYPE_MICHAEL_LIST_H
-
-#include "set2/set_type.h"
-
-#include <cds/container/michael_list_hp.h>
-#include <cds/container/michael_list_dhp.h>
-#include <cds/container/michael_list_rcu.h>
-
-namespace set2 {
-
-    template <typename Key, typename Val>
-    struct michael_list_type
-    {
-        typedef typename set_type_base< Key, Val >::key_val key_val;
-        typedef typename set_type_base< Key, Val >::compare compare;
-        typedef typename set_type_base< Key, Val >::less    less;
-
-        struct traits_MichaelList_cmp_stdAlloc:
-            public cc::michael_list::make_traits<
-                co::compare< compare >
-            >::type
-        {};
-        typedef cc::MichaelList< cds::gc::HP,  key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_HP_cmp_stdAlloc;
-        typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_DHP_cmp_stdAlloc;
-        typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPI_cmp_stdAlloc;
-        typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPB_cmp_stdAlloc;
-        typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPT_cmp_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHB_cmp_stdAlloc;
-        typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHT_cmp_stdAlloc;
-#endif
-
-        struct traits_MichaelList_cmp_stdAlloc_seqcst : public traits_MichaelList_cmp_stdAlloc
-        {
-            typedef co::v::sequential_consistent memory_model;
-        };
-        typedef cc::MichaelList< cds::gc::HP,  key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_HP_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_DHP_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPI_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPB_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPT_cmp_stdAlloc_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHB_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHT_cmp_stdAlloc_seqcst;
-#endif
-
-        struct traits_MichaelList_less_stdAlloc :
-            public cc::michael_list::make_traits<
-                co::less< less >
-            >::type
-        {};
-        typedef cc::MichaelList< cds::gc::HP,  key_val, traits_MichaelList_less_stdAlloc > MichaelList_HP_less_stdAlloc;
-        typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_less_stdAlloc > MichaelList_DHP_less_stdAlloc;
-        typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPI_less_stdAlloc;
-        typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPB_less_stdAlloc;
-        typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPT_less_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHB_less_stdAlloc;
-        typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHT_less_stdAlloc;
-#endif
-
-        struct traits_MichaelList_less_stdAlloc_seqcst :
-            public cc::michael_list::make_traits<
-                co::less< less >
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        {};
-        typedef cc::MichaelList< cds::gc::HP,  key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_HP_less_stdAlloc_seqcst;
-        typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_DHP_less_stdAlloc_seqcst;
-        typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPI_less_stdAlloc_seqcst;
-        typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPB_less_stdAlloc_seqcst;
-        typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPT_less_stdAlloc_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHB_less_stdAlloc_seqcst;
-        typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHT_less_stdAlloc_seqcst;
-#endif
-
-        struct traits_MichaelList_cmp_michaelAlloc :
-            public cc::michael_list::make_traits<
-                co::compare< compare >,
-                co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        {};
-        typedef cc::MichaelList< cds::gc::HP,  key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_HP_cmp_michaelAlloc;
-        typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_DHP_cmp_michaelAlloc;
-        typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPI_cmp_michaelAlloc;
-        typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPB_cmp_michaelAlloc;
-        typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPT_cmp_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHB_cmp_michaelAlloc;
-        typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHT_cmp_michaelAlloc;
-#endif
-
-        struct traits_MichaelList_less_michaelAlloc :
-            public cc::michael_list::make_traits<
-                co::less< less >,
-                co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        {};
-        typedef cc::MichaelList< cds::gc::HP,  key_val, traits_MichaelList_less_michaelAlloc > MichaelList_HP_less_michaelAlloc;
-        typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_DHP_less_michaelAlloc;
-        typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPI_less_michaelAlloc;
-        typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPB_less_michaelAlloc;
-        typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPT_less_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHB_less_michaelAlloc;
-        typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHT_less_michaelAlloc;
-#endif
-    };
-
-} // namespace set2
-
-#endif // #ifndef CDSUNIT_SET_TYPE_MICHAEL_LIST_H
diff --git a/tests/unit/set2/set_type_skip_list.h b/tests/unit/set2/set_type_skip_list.h
deleted file mode 100644 (file)
index 3a63926..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_SET_TYPE_SKIP_LIST_H
-#define CDSUNIT_SET_TYPE_SKIP_LIST_H
-
-#include "set2/set_type.h"
-
-#include <cds/container/skip_list_set_hp.h>
-#include <cds/container/skip_list_set_dhp.h>
-#include <cds/container/skip_list_set_rcu.h>
-
-#include "print_skip_list_stat.h"
-
-namespace set2 {
-
-    template <typename GC, typename T, typename Traits = cc::skip_list::traits >
-    class SkipListSet : public cc::SkipListSet<GC, T, Traits>
-    {
-        typedef cc::SkipListSet<GC, T, Traits> base_class;
-    public:
-        template <typename Config>
-        SkipListSet( Config const& /*cfg*/ )
-        {}
-
-        // 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_SkipListSet;
-
-    template <typename Key, typename Val>
-    struct set_type< tag_SkipListSet, Key, Val >: public set_type_base< Key, Val >
-    {
-        typedef set_type_base< Key, Val > base_class;
-        typedef typename base_class::key_val key_val;
-        typedef typename base_class::compare compare;
-        typedef typename base_class::less less;
-        typedef typename base_class::hash hash;
-
-        class traits_SkipListSet_less_pascal: public cc::skip_list::make_traits <
-                co::less< less >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_less_pascal > SkipListSet_hp_less_pascal;
-        typedef SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_less_pascal > SkipListSet_dhp_less_pascal;
-        typedef SkipListSet< rcu_gpi, key_val, traits_SkipListSet_less_pascal > SkipListSet_rcu_gpi_less_pascal;
-        typedef SkipListSet< rcu_gpb, key_val, traits_SkipListSet_less_pascal > SkipListSet_rcu_gpb_less_pascal;
-        typedef SkipListSet< rcu_gpt, key_val, traits_SkipListSet_less_pascal > SkipListSet_rcu_gpt_less_pascal;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SkipListSet< rcu_shb, key_val, traits_SkipListSet_less_pascal > SkipListSet_rcu_shb_less_pascal;
-        typedef SkipListSet< rcu_sht, key_val, traits_SkipListSet_less_pascal > SkipListSet_rcu_sht_less_pascal;
-#endif
-
-        class traits_SkipListSet_less_pascal_seqcst: public cc::skip_list::make_traits <
-                co::less< less >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_less_pascal_seqcst > SkipListSet_hp_less_pascal_seqcst;
-        typedef SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_less_pascal_seqcst > SkipListSet_dhp_less_pascal_seqcst;
-        typedef SkipListSet< rcu_gpi, key_val, traits_SkipListSet_less_pascal_seqcst > SkipListSet_rcu_gpi_less_pascal_seqcst;
-        typedef SkipListSet< rcu_gpb, key_val, traits_SkipListSet_less_pascal_seqcst > SkipListSet_rcu_gpb_less_pascal_seqcst;
-        typedef SkipListSet< rcu_gpt, key_val, traits_SkipListSet_less_pascal_seqcst > SkipListSet_rcu_gpt_less_pascal_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SkipListSet< rcu_shb, key_val, traits_SkipListSet_less_pascal_seqcst > SkipListSet_rcu_shb_less_pascal_seqcst;
-        typedef SkipListSet< rcu_sht, key_val, traits_SkipListSet_less_pascal_seqcst > SkipListSet_rcu_sht_less_pascal_seqcst;
-#endif
-
-        class traits_SkipListSet_less_pascal_stat: public cc::skip_list::make_traits <
-                co::less< less >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_less_pascal_stat > SkipListSet_hp_less_pascal_stat;
-        typedef SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_less_pascal_stat > SkipListSet_dhp_less_pascal_stat;
-        typedef SkipListSet< rcu_gpi, key_val, traits_SkipListSet_less_pascal_stat > SkipListSet_rcu_gpi_less_pascal_stat;
-        typedef SkipListSet< rcu_gpb, key_val, traits_SkipListSet_less_pascal_stat > SkipListSet_rcu_gpb_less_pascal_stat;
-        typedef SkipListSet< rcu_gpt, key_val, traits_SkipListSet_less_pascal_stat > SkipListSet_rcu_gpt_less_pascal_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SkipListSet< rcu_shb, key_val, traits_SkipListSet_less_pascal_stat > SkipListSet_rcu_shb_less_pascal_stat;
-        typedef SkipListSet< rcu_sht, key_val, traits_SkipListSet_less_pascal_stat > SkipListSet_rcu_sht_less_pascal_stat;
-#endif
-
-        class traits_SkipListSet_cmp_pascal: public cc::skip_list::make_traits <
-            co::compare< compare >
-            ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            ,co::item_counter< cds::atomicity::item_counter >
-        >::type
-        {};
-        typedef SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_cmp_pascal > SkipListSet_hp_cmp_pascal;
-        typedef SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_cmp_pascal > SkipListSet_dhp_cmp_pascal;
-        typedef SkipListSet< rcu_gpi, key_val, traits_SkipListSet_cmp_pascal > SkipListSet_rcu_gpi_cmp_pascal;
-        typedef SkipListSet< rcu_gpb, key_val, traits_SkipListSet_cmp_pascal > SkipListSet_rcu_gpb_cmp_pascal;
-        typedef SkipListSet< rcu_gpt, key_val, traits_SkipListSet_cmp_pascal > SkipListSet_rcu_gpt_cmp_pascal;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SkipListSet< rcu_shb, key_val, traits_SkipListSet_cmp_pascal > SkipListSet_rcu_shb_cmp_pascal;
-        typedef SkipListSet< rcu_sht, key_val, traits_SkipListSet_cmp_pascal > SkipListSet_rcu_sht_cmp_pascal;
-#endif
-
-        class traits_SkipListSet_cmp_pascal_stat: public cc::skip_list::make_traits <
-            co::compare< compare >
-            ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-            ,co::stat< cc::skip_list::stat<> >
-            ,co::item_counter< cds::atomicity::item_counter >
-        >::type
-        {};
-        typedef SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_cmp_pascal_stat > SkipListSet_hp_cmp_pascal_stat;
-        typedef SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_cmp_pascal_stat > SkipListSet_dhp_cmp_pascal_stat;
-        typedef SkipListSet< rcu_gpi, key_val, traits_SkipListSet_cmp_pascal_stat > SkipListSet_rcu_gpi_cmp_pascal_stat;
-        typedef SkipListSet< rcu_gpb, key_val, traits_SkipListSet_cmp_pascal_stat > SkipListSet_rcu_gpb_cmp_pascal_stat;
-        typedef SkipListSet< rcu_gpt, key_val, traits_SkipListSet_cmp_pascal_stat > SkipListSet_rcu_gpt_cmp_pascal_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SkipListSet< rcu_shb, key_val, traits_SkipListSet_cmp_pascal_stat > SkipListSet_rcu_shb_cmp_pascal_stat;
-        typedef SkipListSet< rcu_sht, key_val, traits_SkipListSet_cmp_pascal_stat > SkipListSet_rcu_sht_cmp_pascal_stat;
-#endif
-
-        class traits_SkipListSet_less_xorshift: public cc::skip_list::make_traits <
-            co::less< less >
-            ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            ,co::item_counter< cds::atomicity::item_counter >
-        >::type
-        {};
-        typedef SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_less_xorshift > SkipListSet_hp_less_xorshift;
-        typedef SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_less_xorshift > SkipListSet_dhp_less_xorshift;
-        typedef SkipListSet< rcu_gpi, key_val, traits_SkipListSet_less_xorshift > SkipListSet_rcu_gpi_less_xorshift;
-        typedef SkipListSet< rcu_gpb, key_val, traits_SkipListSet_less_xorshift > SkipListSet_rcu_gpb_less_xorshift;
-        typedef SkipListSet< rcu_gpt, key_val, traits_SkipListSet_less_xorshift > SkipListSet_rcu_gpt_less_xorshift;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SkipListSet< rcu_shb, key_val, traits_SkipListSet_less_xorshift > SkipListSet_rcu_shb_less_xorshift;
-        typedef SkipListSet< rcu_sht, key_val, traits_SkipListSet_less_xorshift > SkipListSet_rcu_sht_less_xorshift;
-#endif
-
-        class traits_SkipListSet_less_xorshift_stat: public cc::skip_list::make_traits <
-            co::less< less >
-            ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            ,co::stat< cc::skip_list::stat<> >
-            ,co::item_counter< cds::atomicity::item_counter >
-        >::type
-        {};
-        typedef SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_less_xorshift_stat > SkipListSet_hp_less_xorshift_stat;
-        typedef SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_less_xorshift_stat > SkipListSet_dhp_less_xorshift_stat;
-        typedef SkipListSet< rcu_gpi, key_val, traits_SkipListSet_less_xorshift_stat > SkipListSet_rcu_gpi_less_xorshift_stat;
-        typedef SkipListSet< rcu_gpb, key_val, traits_SkipListSet_less_xorshift_stat > SkipListSet_rcu_gpb_less_xorshift_stat;
-        typedef SkipListSet< rcu_gpt, key_val, traits_SkipListSet_less_xorshift_stat > SkipListSet_rcu_gpt_less_xorshift_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SkipListSet< rcu_shb, key_val, traits_SkipListSet_less_xorshift_stat > SkipListSet_rcu_shb_less_xorshift_stat;
-        typedef SkipListSet< rcu_sht, key_val, traits_SkipListSet_less_xorshift_stat > SkipListSet_rcu_sht_less_xorshift_stat;
-#endif
-
-        class traits_SkipListSet_cmp_xorshift: public cc::skip_list::make_traits <
-            co::compare< compare >
-            ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            ,co::item_counter< cds::atomicity::item_counter >
-        >::type
-        {};
-        typedef SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_cmp_xorshift > SkipListSet_hp_cmp_xorshift;
-        typedef SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_cmp_xorshift > SkipListSet_dhp_cmp_xorshift;
-        typedef SkipListSet< rcu_gpi, key_val, traits_SkipListSet_cmp_xorshift > SkipListSet_rcu_gpi_cmp_xorshift;
-        typedef SkipListSet< rcu_gpb, key_val, traits_SkipListSet_cmp_xorshift > SkipListSet_rcu_gpb_cmp_xorshift;
-        typedef SkipListSet< rcu_gpt, key_val, traits_SkipListSet_cmp_xorshift > SkipListSet_rcu_gpt_cmp_xorshift;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SkipListSet< rcu_shb, key_val, traits_SkipListSet_cmp_xorshift > SkipListSet_rcu_shb_cmp_xorshift;
-        typedef SkipListSet< rcu_sht, key_val, traits_SkipListSet_cmp_xorshift > SkipListSet_rcu_sht_cmp_xorshift;
-#endif
-
-        class traits_SkipListSet_cmp_xorshift_stat: public cc::skip_list::make_traits <
-            co::compare< compare >
-            ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-            ,co::stat< cc::skip_list::stat<> >
-            ,co::item_counter< cds::atomicity::item_counter >
-        >::type
-        {};
-        typedef SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_cmp_xorshift_stat > SkipListSet_hp_cmp_xorshift_stat;
-        typedef SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_cmp_xorshift_stat > SkipListSet_dhp_cmp_xorshift_stat;
-        typedef SkipListSet< rcu_gpi, key_val, traits_SkipListSet_cmp_xorshift_stat > SkipListSet_rcu_gpi_cmp_xorshift_stat;
-        typedef SkipListSet< rcu_gpb, key_val, traits_SkipListSet_cmp_xorshift_stat > SkipListSet_rcu_gpb_cmp_xorshift_stat;
-        typedef SkipListSet< rcu_gpt, key_val, traits_SkipListSet_cmp_xorshift_stat > SkipListSet_rcu_gpt_cmp_xorshift_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SkipListSet< rcu_shb, key_val, traits_SkipListSet_cmp_xorshift_stat > SkipListSet_rcu_shb_cmp_xorshift_stat;
-        typedef SkipListSet< rcu_sht, key_val, traits_SkipListSet_cmp_xorshift_stat > SkipListSet_rcu_sht_cmp_xorshift_stat;
-#endif
-    };
-
-    template <typename GC, typename T, typename Traits>
-    static inline void print_stat( SkipListSet<GC, T, Traits> const& s )
-    {
-        CPPUNIT_MSG( s.statistics() );
-    }
-
-} // namespace set2
-
-#endif // #ifndef CDSUNIT_SET_TYPE_SKIP_LIST_H
diff --git a/tests/unit/set2/set_type_split_list.h b/tests/unit/set2/set_type_split_list.h
deleted file mode 100644 (file)
index 7187f28..0000000
+++ /dev/null
@@ -1,526 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_SET_TYPE_SPLIT_LIST_H
-#define CDSUNIT_SET_TYPE_SPLIT_LIST_H
-
-#include "set2/set_type.h"
-
-#include <cds/container/michael_list_hp.h>
-#include <cds/container/michael_list_dhp.h>
-#include <cds/container/michael_list_rcu.h>
-#include <cds/container/lazy_list_hp.h>
-#include <cds/container/lazy_list_dhp.h>
-#include <cds/container/lazy_list_rcu.h>
-
-#include <cds/container/split_list_set.h>
-#include <cds/container/split_list_set_rcu.h>
-
-#include "print_split_list_stat.h"
-
-namespace set2 {
-
-    template <typename GC, typename T, typename Traits = cc::split_list::traits>
-    class SplitListSet : public cc::SplitListSet< GC, T, Traits >
-    {
-        typedef cc::SplitListSet< GC, T, Traits > base_class;
-    public:
-        template <typename Config>
-        SplitListSet( Config const& cfg )
-            : base_class( cfg.c_nSetSize, cfg.c_nLoadFactor )
-        {}
-
-        // 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_SplitListSet;
-
-    template <typename Key, typename Val>
-    struct set_type< tag_SplitListSet, Key, Val >: public set_type_base< Key, Val >
-    {
-        typedef set_type_base< Key, Val > base_class;
-        typedef typename base_class::key_val key_val;
-        typedef typename base_class::compare compare;
-        typedef typename base_class::less less;
-        typedef typename base_class::hash hash;
-
-        // ***************************************************************************
-        // SplitListSet based on MichaelList
-
-        struct traits_SplitList_Michael_dyn_cmp :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::compare< compare >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_HP_dyn_cmp;
-        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_DHP_dyn_cmp;
-        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPI_dyn_cmp;
-        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPB_dyn_cmp;
-        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPT_dyn_cmp;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHB_dyn_cmp;
-        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHT_dyn_cmp;
-#endif
-
-        struct traits_SplitList_Michael_dyn_cmp_stat :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,co::hash< hash >
-                ,co::stat< cc::split_list::stat<> >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::compare< compare >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_HP_dyn_cmp_stat;
-        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_DHP_dyn_cmp_stat;
-        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPI_dyn_cmp_stat;
-        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPB_dyn_cmp_stat;
-        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPT_dyn_cmp_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHB_dyn_cmp_stat;
-        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHT_dyn_cmp_stat;
-#endif
-
-        struct traits_SplitList_Michael_dyn_cmp_seqcst :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,co::hash< hash >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::compare< compare >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_HP_dyn_cmp_seqcst;
-        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_DHP_dyn_cmp_seqcst;
-        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
-        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
-        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
-        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
-#endif
-
-        struct traits_SplitList_Michael_st_cmp :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::compare< compare >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_HP_st_cmp;
-        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_DHP_st_cmp;
-        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPI_st_cmp;
-        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPB_st_cmp;
-        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPT_st_cmp;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHB_st_cmp;
-        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHT_st_cmp;
-#endif
-
-        struct traits_SplitList_Michael_st_cmp_seqcst :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::compare< compare >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_HP_st_cmp_seqcst;
-        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_DHP_st_cmp_seqcst;
-        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_GPI_st_cmp_seqcst;
-        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_GPB_st_cmp_seqcst;
-        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_GPT_st_cmp_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_SHB_st_cmp_seqcst;
-        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_SHT_st_cmp_seqcst;
-#endif
-
-        //HP + less
-        struct traits_SplitList_Michael_dyn_less :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::less< less >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_HP_dyn_less;
-        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_DHP_dyn_less;
-        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPI_dyn_less;
-        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPB_dyn_less;
-        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPT_dyn_less;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHB_dyn_less;
-        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHT_dyn_less;
-#endif
-
-        struct traits_SplitList_Michael_dyn_less_seqcst :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,co::hash< hash >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::less< less >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListSet< cds::gc::HP, key_val,  traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_HP_dyn_less_seqcst;
-        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_DHP_dyn_less_seqcst;
-        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPI_dyn_less_seqcst;
-        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPB_dyn_less_seqcst;
-        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPT_dyn_less_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHB_dyn_less_seqcst;
-        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHT_dyn_less_seqcst;
-#endif
-
-        struct traits_SplitList_Michael_st_less :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::less< less >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_st_less > SplitList_Michael_HP_st_less;
-        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_DHP_st_less;
-        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPI_st_less;
-        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPB_st_less;
-        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPT_st_less;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHB_st_less;
-        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHT_st_less;
-#endif
-
-        struct traits_SplitList_Michael_st_less_stat :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::hash< hash >
-                ,co::stat< cc::split_list::stat<>>
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::less< less >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_HP_st_less_stat;
-        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_DHP_st_less_stat;
-        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPI_st_less_stat;
-        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPB_st_less_stat;
-        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPT_st_less_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHB_st_less_stat;
-        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHT_st_less_stat;
-#endif
-
-        struct traits_SplitList_Michael_st_less_seqcst :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::less< less >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_HP_st_less_seqcst;
-        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_DHP_st_less_seqcst;
-        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPI_st_less_seqcst;
-        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPB_st_less_seqcst;
-        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPT_st_less_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHB_st_less_seqcst;
-        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHT_st_less_seqcst;
-#endif
-
-        // ***************************************************************************
-        // SplitListSet based on LazyList
-
-        struct traits_SplitList_Lazy_dyn_cmp :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::compare< compare >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_HP_dyn_cmp;
-        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_DHP_dyn_cmp;
-        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPI_dyn_cmp;
-        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPB_dyn_cmp;
-        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPT_dyn_cmp;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp;
-        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp;
-#endif
-
-        struct traits_SplitList_Lazy_dyn_cmp_stat : public traits_SplitList_Lazy_dyn_cmp
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-        typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_HP_dyn_cmp_stat;
-        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_DHP_dyn_cmp_stat;
-        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPI_dyn_cmp_stat;
-        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPB_dyn_cmp_stat;
-        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPT_dyn_cmp_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp_stat;
-        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp_stat;
-#endif
-
-        struct traits_SplitList_Lazy_dyn_cmp_seqcst :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,co::hash< hash >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::compare< compare >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_HP_dyn_cmp_seqcst;
-        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_DHP_dyn_cmp_seqcst;
-        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
-        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
-        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
-        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
-#endif
-
-        struct traits_SplitList_Lazy_st_cmp :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::compare< compare >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_HP_st_cmp;
-        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_DHP_st_cmp;
-        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPI_st_cmp;
-        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPB_st_cmp;
-        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPT_st_cmp;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHB_st_cmp;
-        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHT_st_cmp;
-#endif
-
-        struct traits_SplitList_Lazy_st_cmp_seqcst :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::compare< compare >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_HP_st_cmp_seqcst;
-        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_DHP_st_cmp_seqcst;
-        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_GPI_st_cmp_seqcst;
-        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_GPB_st_cmp_seqcst;
-        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_GPT_st_cmp_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_SHB_st_cmp_seqcst;
-        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_SHT_st_cmp_seqcst;
-#endif
-
-        struct traits_SplitList_Lazy_dyn_less :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::less< less >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_HP_dyn_less;
-        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_DHP_dyn_less;
-        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPI_dyn_less;
-        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPB_dyn_less;
-        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPT_dyn_less;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHB_dyn_less;
-        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHT_dyn_less;
-#endif
-
-        struct traits_SplitList_Lazy_dyn_less_seqcst :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,co::hash< hash >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::less< less >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_HP_dyn_less_seqcst;
-        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_DHP_dyn_less_seqcst;
-        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPI_dyn_less_seqcst;
-        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPB_dyn_less_seqcst;
-        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPT_dyn_less_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHB_dyn_less_seqcst;
-        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHT_dyn_less_seqcst;
-#endif
-
-        struct traits_SplitList_Lazy_st_less :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::less< less >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_HP_st_less;
-        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_DHP_st_less;
-        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPI_st_less;
-        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPB_st_less;
-        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPT_st_less;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHB_st_less;
-        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHT_st_less;
-#endif
-
-        struct traits_SplitList_Lazy_st_less_seqcst :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::less< less >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_HP_st_less_seqcst;
-        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_DHP_st_less_seqcst;
-        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPI_st_less_seqcst;
-        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPB_st_less_seqcst;
-        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPT_st_less_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHB_st_less_seqcst;
-        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHT_st_less_seqcst;
-#endif
-
-        struct traits_SplitList_Lazy_st_less_stat : public traits_SplitList_Lazy_st_less
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-        typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_HP_st_less_stat;
-        typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_DHP_st_less_stat;
-        typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPI_st_less_stat;
-        typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPB_st_less_stat;
-        typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPT_st_less_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHB_st_less_stat;
-        typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHT_st_less_stat;
-#endif
-    };
-
-    template <typename GC, typename T, typename Traits>
-    static inline void print_stat( SplitListSet<GC, T, Traits> const& s )
-    {
-        CPPUNIT_MSG( s.statistics() );
-    }
-
-} // namespace set2
-
-#endif // #ifndef CDSUNIT_SET_TYPE_SPLIT_LIST_H
diff --git a/tests/unit/set2/set_type_std.h b/tests/unit/set2/set_type_std.h
deleted file mode 100644 (file)
index 565dea5..0000000
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_SET_TYPE_STD_H
-#define CDSUNIT_SET_TYPE_STD_H
-
-#include <unordered_set>
-#include <set>
-#include <mutex>    //unique_lock
-
-#include "set2/set_type.h"
-
-namespace set2 {
-
-    struct tag_StdSet;
-
-    template <typename Value, typename Hash, typename Less, typename EqualTo, typename Lock,
-        class Alloc = typename CDS_DEFAULT_ALLOCATOR::template rebind<Value>::other
-    >
-    class StdHashSet
-        : public std::unordered_set<
-            Value
-            , Hash
-            , EqualTo
-            , Alloc
-        >
-    {
-    public:
-        Lock m_lock;
-        typedef std::unique_lock<Lock> scoped_lock;
-        typedef std::unordered_set<
-            Value
-            , Hash
-            , EqualTo
-            , Alloc
-        >   base_class;
-
-    public:
-        typedef typename base_class::value_type value_type;
-
-        template <class Config>
-        StdHashSet( Config const& )
-        {}
-
-        template <typename Key>
-        bool contains( const Key& key )
-        {
-            scoped_lock al( m_lock );
-            return base_class::find( value_type(key) ) != base_class::end();
-        }
-
-        template <typename Key>
-        bool insert( Key const& key )
-        {
-            scoped_lock al( m_lock );
-            std::pair<typename base_class::iterator, bool> pRet = base_class::insert( value_type( key ));
-            return pRet.second;
-        }
-
-        template <typename Key, typename Func>
-        bool insert( Key const& key, Func func )
-        {
-            scoped_lock al( m_lock );
-            std::pair<typename base_class::iterator, bool> pRet = base_class::insert( value_type( key ));
-            if ( pRet.second ) {
-                func( *pRet.first );
-                return true;
-            }
-            return false;
-        }
-
-        template <typename T, typename Func>
-        std::pair<bool, bool> ensure( const T& key, Func func )
-        {
-            scoped_lock al( m_lock );
-            std::pair<typename base_class::iterator, bool> pRet = base_class::insert( value_type( key ));
-            if ( pRet.second ) {
-                func( true, *pRet.first, key );
-                return std::make_pair( true, true );
-            }
-            else {
-                func( false, *pRet.first, key );
-                return std::make_pair( true, false );
-            }
-        }
-
-        template <typename Key>
-        bool erase( const Key& key )
-        {
-            scoped_lock al( m_lock );
-            return base_class::erase( value_type(key) ) != 0;
-        }
-
-        template <typename T, typename Func>
-        bool erase( const T& key, Func func )
-        {
-            scoped_lock al( m_lock );
-            typename base_class::iterator it = base_class::find( value_type(key) );
-            if ( it != base_class::end() ) {
-                func( *it );
-                return base_class::erase( it ) != base_class::end();
-            }
-            return false;
-        }
-
-        std::ostream& dump( std::ostream& stm ) { return stm; }
-
-        // 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 = true;
-    };
-
-    template <typename Value, typename Less, typename Lock,
-        class Alloc = typename CDS_DEFAULT_ALLOCATOR::template rebind<Value>::other
-    >
-    class StdSet: public std::set<Value, Less, Alloc>
-    {
-        Lock m_lock;
-        typedef std::unique_lock<Lock> scoped_lock;
-        typedef std::set<Value, Less, Alloc> base_class;
-    public:
-        typedef typename base_class::key_type value_type;
-
-        template <class Config>
-        StdSet( Config const& )
-        {}
-
-        template <typename Key>
-        bool contains( const Key& key )
-        {
-            value_type v( key );
-            scoped_lock al( m_lock );
-            return base_class::find( v ) != base_class::end();
-        }
-
-        bool insert( value_type const& v )
-        {
-            scoped_lock al( m_lock );
-            return base_class::insert( v ).second;
-        }
-
-        template <typename Key, typename Func>
-        bool insert( Key const& key, Func func )
-        {
-            scoped_lock al( m_lock );
-            std::pair<typename base_class::iterator, bool> pRet = base_class::insert( value_type( key ));
-            if ( pRet.second ) {
-                func( *pRet.first );
-                return true;
-            }
-            return false;
-        }
-
-        template <typename T, typename Func>
-        std::pair<bool, bool> ensure( const T& key, Func func )
-        {
-            scoped_lock al( m_lock );
-            std::pair<typename base_class::iterator, bool> pRet = base_class::insert( value_type( key ));
-            if ( pRet.second ) {
-                func( true, *pRet.first, key );
-                return std::make_pair( true, true );
-            }
-            else {
-                func( false, *pRet.first, key );
-                return std::make_pair( true, false );
-            }
-        }
-
-        template <typename Key>
-        bool erase( const Key& key )
-        {
-            scoped_lock al( m_lock );
-            return base_class::erase( value_type(key) ) != 0;
-        }
-
-        template <typename T, typename Func>
-        bool erase( const T& key, Func func )
-        {
-            scoped_lock al( m_lock );
-            typename base_class::iterator it = base_class::find( value_type(key) );
-            if ( it != base_class::end() ) {
-                func( *it );
-
-                base_class::erase( it );
-                return true;
-            }
-            return false;
-        }
-
-        std::ostream& dump( std::ostream& stm ) { return stm; }
-
-        // for testing
-        static CDS_CONSTEXPR bool const c_bExtractSupported = false;
-        static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false;
-    };
-
-    template <typename Key, typename Val>
-    struct set_type< tag_StdSet, Key, Val >: public set_type_base< Key, Val >
-    {
-        typedef set_type_base< Key, Val > base_class;
-        typedef typename base_class::key_val key_val;
-        typedef typename base_class::less less;
-        typedef typename base_class::hash hash;
-        typedef typename base_class::equal_to equal_to;
-
-        typedef StdSet< key_val, less, cds::sync::spin > StdSet_Spin;
-        typedef StdSet< key_val, less, std::mutex > StdSet_Mutex;
-        typedef StdSet< key_val, less, lock::NoLock>     StdSet_NoLock;
-
-        typedef StdHashSet< key_val, hash, less, equal_to, cds::sync::spin > StdHashSet_Spin;
-        typedef StdHashSet< key_val, hash, less, equal_to, std::mutex > StdHashSet_Mutex;
-        typedef StdHashSet< key_val, hash, less, equal_to, lock::NoLock >    StdHashSet_NoLock;
-    };
-
-} // namespace set2
-
-#endif // #ifndef CDSUNIT_SET_TYPE_STD_H
diff --git a/tests/unit/set2/set_type_striped.h b/tests/unit/set2/set_type_striped.h
deleted file mode 100644 (file)
index 797a433..0000000
+++ /dev/null
@@ -1,619 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_SET_TYPE_STRIPED_H
-#define CDSUNIT_SET_TYPE_STRIPED_H
-
-#include "set2/set_type.h"
-
-#include <cds/container/striped_set/std_list.h>
-#include <cds/container/striped_set/std_vector.h>
-#include <cds/container/striped_set/std_set.h>
-#include <cds/container/striped_set/std_hash_set.h>
-#include <cds/container/striped_set/boost_unordered_set.h>
-
-#include <boost/version.hpp>
-#if BOOST_VERSION >= 104800
-#   include <cds/container/striped_set/boost_slist.h>
-#   include <cds/container/striped_set/boost_list.h>
-#   include <cds/container/striped_set/boost_vector.h>
-#   include <cds/container/striped_set/boost_stable_vector.h>
-#   include <cds/container/striped_set/boost_set.h>
-#   include <cds/container/striped_set/boost_flat_set.h>
-#endif
-#include <cds/container/striped_set.h>
-
-namespace set2 {
-
-    struct tag_StripedSet;
-
-    template <typename Key, typename Val>
-    struct set_type< tag_StripedSet, Key, Val >: public set_type_base< Key, Val >
-    {
-        typedef set_type_base< Key, Val > base_class;
-        typedef typename base_class::key_val key_val;
-        typedef typename base_class::compare compare;
-        typedef typename base_class::less less;
-        typedef typename base_class::equal_to equal_to;
-        typedef typename base_class::hash hash;
-        typedef typename base_class::hash2 hash2;
-
-
-        // ***************************************************************************
-        // StripedSet
-
-        // for sequential containers
-        template <class BucketEntry, typename... Options>
-        class StripedHashSet_seq:
-            public cc::StripedSet< BucketEntry,
-                co::mutex_policy< cc::striped_set::striping<> >
-                ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-                , Options...
-            >
-        {
-            typedef cc::StripedSet< BucketEntry,
-                co::mutex_policy< cc::striped_set::striping<> >
-                ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-                , Options...
-            > base_class;
-            typedef typename base_class::resizing_policy resizing_policy_t;
-
-            resizing_policy_t   m_placeHolder;
-        public:
-            template <class Config>
-            StripedHashSet_seq( Config const& cfg )
-                : base_class( cfg.c_nSetSize / cfg.c_nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( cfg.c_nLoadFactor )) )
-            {}
-
-            /*
-            template <typename Q, typename Less>
-            bool erase_with( Q const& v, Less pred )
-            {
-                return base_class::erase( v );
-            }
-            */
-
-            // for testing
-            static CDS_CONSTEXPR bool const c_bExtractSupported = false;
-            static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
-            static CDS_CONSTEXPR bool const c_bEraseExactKey = false;
-        };
-
-        template <class BucketEntry, typename... Options>
-        class StripedHashSet_seq_rational:
-            public cc::StripedSet< BucketEntry,
-                co::mutex_policy< cc::striped_set::striping<> >
-                ,co::resizing_policy<cc::striped_set::rational_load_factor_resizing<0> >
-                , Options...
-            >
-        {
-            typedef cc::StripedSet< BucketEntry,
-                co::mutex_policy< cc::striped_set::striping<> >
-                ,co::resizing_policy<cc::striped_set::rational_load_factor_resizing<0> >
-                , Options...
-            > base_class;
-            typedef typename base_class::resizing_policy resizing_policy_t;
-
-            resizing_policy_t   m_placeHolder;
-        public:
-            template <class Config>
-            StripedHashSet_seq_rational( Config const& cfg ) // LoadFactor = 1 / nDenominator
-                : base_class( cfg.c_nSetSize / cfg.c_nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( 1, cfg.c_nLoadFactor )) )
-            {}
-
-            /*
-            template <typename Q, typename Less>
-            bool erase_with( Q const& v, Less pred )
-            {
-                return base_class::erase( v );
-            }
-            */
-
-            // for testing
-            static CDS_CONSTEXPR bool const c_bExtractSupported = false;
-            static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
-            static CDS_CONSTEXPR bool const c_bEraseExactKey = false;
-        };
-
-        // for non-sequential ordered containers
-        template <class BucketEntry, typename... Options>
-        class StripedHashSet_ord:
-            public cc::StripedSet< BucketEntry,
-                co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-                ,co::mutex_policy< cc::striped_set::striping<> >
-                , Options...
-            >
-        {
-            typedef cc::StripedSet< BucketEntry,
-               co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-                ,co::mutex_policy< cc::striped_set::striping<> >
-                , Options...
-            > base_class;
-            typedef typename base_class::resizing_policy resizing_policy_t;
-
-            resizing_policy_t   m_placeHolder;
-        public:
-            template <class Config>
-            StripedHashSet_ord( Config const& cfg )
-                : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( cfg.c_nMaxLoadFactor * 1024 )) )
-            {}
-
-            /*
-            template <typename Q, typename Less>
-            bool erase_with( Q const& v, Less pred )
-            {
-                return base_class::erase( v );
-            }
-            */
-
-            // 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;
-        };
-
-        template <class BucketEntry, typename... Options>
-        class StripedHashSet_ord_rational:
-            public cc::StripedSet< BucketEntry,
-                co::resizing_policy<cc::striped_set::rational_load_factor_resizing<0> >
-                ,co::mutex_policy< cc::striped_set::striping<> >
-                , Options...
-            >
-        {
-            typedef cc::StripedSet< BucketEntry,
-               co::resizing_policy<cc::striped_set::rational_load_factor_resizing<0> >
-                ,co::mutex_policy< cc::striped_set::striping<> >
-                , Options...
-            > base_class;
-            typedef typename base_class::resizing_policy resizing_policy_t;
-
-            resizing_policy_t   m_placeHolder;
-        public:
-            template <class Config>
-            StripedHashSet_ord_rational( Config const& cfg ) // LoadFactor = 1 / nDenominator
-                : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( 1024, cfg.c_nLoadFactor )))
-            {}
-
-            /*
-            template <typename Q, typename Less>
-            bool erase_with( Q const& v, Less pred )
-            {
-                return base_class::erase( v );
-            }
-            */
-
-            // for testing
-            static CDS_CONSTEXPR bool const c_bExtractSupported = false;
-            static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
-            static CDS_CONSTEXPR bool const c_bEraseExactKey = false;
-        };
-
-        typedef StripedHashSet_seq<
-            std::list< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > StripedSet_list;
-
-        typedef StripedHashSet_seq_rational<
-            std::list< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > StripedSet_rational_list;
-
-        typedef StripedHashSet_seq<
-            std::vector< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > StripedSet_vector;
-
-        typedef StripedHashSet_seq_rational<
-            std::vector< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > StripedSet_rational_vector;
-
-#if BOOST_VERSION >= 104800
-        typedef StripedHashSet_seq<
-            boost::container::slist< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > StripedSet_boost_slist;
-
-        typedef StripedHashSet_seq_rational<
-            boost::container::slist< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > StripedSet_rational_boost_slist;
-
-        typedef StripedHashSet_seq<
-            boost::container::list< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > StripedSet_boost_list;
-
-        typedef StripedHashSet_seq_rational<
-            boost::container::list< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > StripedSet_rational_boost_list;
-
-        typedef StripedHashSet_seq<
-            boost::container::vector< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > StripedSet_boost_vector;
-
-        typedef StripedHashSet_seq_rational<
-            boost::container::vector< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > StripedSet_rational_boost_vector;
-
-        typedef StripedHashSet_seq<
-            boost::container::stable_vector< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > StripedSet_boost_stable_vector;
-
-        typedef StripedHashSet_seq_rational<
-            boost::container::stable_vector< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > StripedSet_rational_boost_stable_vector;
-#endif
-
-        typedef StripedHashSet_ord<
-            std::set< key_val, less >
-            , co::hash< hash2 >
-        > StripedSet_set;
-
-        typedef StripedHashSet_ord_rational<
-            std::set< key_val, less >
-            , co::hash< hash2 >
-        > StripedSet_rational_set;
-
-        typedef StripedHashSet_ord<
-            std::unordered_set< key_val, hash, equal_to >
-            , co::hash< hash2 >
-        > StripedSet_hashset;
-
-        typedef StripedHashSet_ord_rational<
-            std::unordered_set< key_val, hash, equal_to >
-            , co::hash< hash2 >
-        > StripedSet_rational_hashset;
-
-#if BOOST_VERSION >= 104800
-        typedef StripedHashSet_ord<
-            boost::container::set< key_val, less >
-            , co::hash< hash2 >
-        > StripedSet_boost_set;
-
-        typedef StripedHashSet_ord_rational<
-            boost::container::set< key_val, less >
-            , co::hash< hash2 >
-        > StripedSet_rational_boost_set;
-
-        typedef StripedHashSet_ord<
-            boost::container::flat_set< key_val, less >
-            , co::hash< hash2 >
-        > StripedSet_boost_flat_set;
-
-        typedef StripedHashSet_ord_rational<
-            boost::container::flat_set< key_val, less >
-            , co::hash< hash2 >
-        > StripedSet_rational_boost_flat_set;
-#endif
-
-        typedef StripedHashSet_ord<
-            boost::unordered_set< key_val, hash, equal_to >
-            , co::hash< hash2 >
-        > StripedSet_boost_unordered_set;
-
-        typedef StripedHashSet_ord_rational<
-            boost::unordered_set< key_val, hash, equal_to >
-            , co::hash< hash2 >
-        > StripedSet_rational_boost_unordered_set;
-
-
-        // ***************************************************************************
-        // RefinableSet
-
-        // for sequential containers
-        template <class BucketEntry, typename... Options>
-        class RefinableHashSet_seq:
-            public cc::StripedSet< BucketEntry,
-            co::mutex_policy< cc::striped_set::refinable<> >
-            ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-            , Options...
-            >
-        {
-            typedef cc::StripedSet< BucketEntry,
-                co::mutex_policy< cc::striped_set::refinable<> >
-                ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-                , Options...
-            > base_class;
-            typedef typename base_class::resizing_policy resizing_policy_t;
-
-            resizing_policy_t   m_placeHolder;
-        public:
-            template <class Config>
-            RefinableHashSet_seq( Config const& cfg )
-                : base_class( cfg.c_nSetSize / cfg.c_nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( cfg.c_nLoadFactor )) )
-            {}
-
-            /*
-            template <typename Q, typename Less>
-            bool erase_with( Q const& v, Less pred )
-            {
-                return base_class::erase( v );
-            }
-            */
-
-            // for testing
-            static CDS_CONSTEXPR bool const c_bExtractSupported = false;
-            static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
-        };
-
-        template <class BucketEntry, typename... Options>
-        class RefinableHashSet_seq_rational:
-            public cc::StripedSet< BucketEntry,
-            co::mutex_policy< cc::striped_set::refinable<> >
-            ,co::resizing_policy<cc::striped_set::rational_load_factor_resizing<0> >
-            , Options...
-            >
-        {
-            typedef cc::StripedSet< BucketEntry,
-                co::mutex_policy< cc::striped_set::refinable<> >
-                ,co::resizing_policy<cc::striped_set::rational_load_factor_resizing<0> >
-                , Options...
-            > base_class;
-            typedef typename base_class::resizing_policy resizing_policy_t;
-
-            resizing_policy_t   m_placeHolder;
-        public:
-            template <class Config>
-            RefinableHashSet_seq_rational( Config const& cfg ) // LoadFactor = 1 / nDenominator
-                : base_class( cfg.c_nSetSize / cfg.c_nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( 1, cfg.c_nLoadFactor )))
-            {}
-
-            /*
-            template <typename Q, typename Less>
-            bool erase_with( Q const& v, Less pred )
-            {
-                return base_class::erase( v );
-            }
-            */
-
-            // for testing
-            static CDS_CONSTEXPR bool const c_bExtractSupported = false;
-            static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
-        };
-
-        // for non-sequential ordered containers
-        template <class BucketEntry, typename... Options>
-        class RefinableHashSet_ord:
-            public cc::StripedSet< BucketEntry,
-                co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , Options...
-            >
-        {
-            typedef cc::StripedSet< BucketEntry,
-                co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , Options...
-            > base_class;
-            typedef typename base_class::resizing_policy resizing_policy_t;
-
-            resizing_policy_t   m_placeHolder;
-        public:
-            template <class Config>
-            RefinableHashSet_ord( Config const& cfg )
-                : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( cfg.c_nMaxLoadFactor * 1024 )) )
-            {}
-
-            /*
-            template <typename Q, typename Less>
-            bool erase_with( Q const& v, Less pred )
-            {
-                return base_class::erase( v );
-            }
-            */
-
-            // for testing
-            static CDS_CONSTEXPR bool const c_bExtractSupported = false;
-            static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false;
-        };
-
-        template <class BucketEntry, typename... Options>
-        class RefinableHashSet_ord_rational:
-            public cc::StripedSet< BucketEntry,
-                co::resizing_policy<cc::striped_set::rational_load_factor_resizing<0> >
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , Options...
-            >
-        {
-            typedef cc::StripedSet< BucketEntry,
-                co::resizing_policy<cc::striped_set::rational_load_factor_resizing<0> >
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , Options...
-            > base_class;
-            typedef typename base_class::resizing_policy resizing_policy_t;
-
-            resizing_policy_t   m_placeHolder;
-        public:
-            template <class Config>
-            RefinableHashSet_ord_rational( Config const& cfg ) // LoadFactor = 1 / nDenominator
-                : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( 1024, cfg.c_nLoadFactor )))
-            {}
-
-            /*
-            template <typename Q, typename Less>
-            bool erase_with( Q const& v, Less pred )
-            {
-                return base_class::erase( v );
-            }
-            */
-
-            // for testing
-            static CDS_CONSTEXPR bool const c_bExtractSupported = false;
-            static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
-        };
-
-        typedef RefinableHashSet_seq<
-            std::list< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > RefinableSet_list;
-
-        typedef RefinableHashSet_seq_rational<
-            std::list< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > RefinableSet_rational_list;
-
-        typedef RefinableHashSet_seq<
-            std::vector< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > RefinableSet_vector;
-
-        typedef RefinableHashSet_seq_rational<
-            std::vector< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > RefinableSet_rational_vector;
-
-#if BOOST_VERSION >= 104800
-        typedef RefinableHashSet_seq<
-            boost::container::slist< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > RefinableSet_boost_slist;
-
-        typedef RefinableHashSet_seq_rational<
-            boost::container::slist< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > RefinableSet_rational_boost_slist;
-
-        typedef RefinableHashSet_seq<
-            boost::container::list< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > RefinableSet_boost_list;
-
-        typedef RefinableHashSet_seq_rational<
-            boost::container::list< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > RefinableSet_rational_boost_list;
-
-        typedef RefinableHashSet_seq<
-            boost::container::vector< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > RefinableSet_boost_vector;
-
-        typedef RefinableHashSet_seq_rational<
-            boost::container::vector< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > RefinableSet_rational_boost_vector;
-
-        typedef RefinableHashSet_seq<
-            boost::container::stable_vector< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > RefinableSet_boost_stable_vector;
-
-        typedef RefinableHashSet_seq_rational<
-            boost::container::stable_vector< key_val >
-            , co::hash< hash2 >
-            , co::less< less >
-        > RefinableSet_rational_boost_stable_vector;
-#endif
-
-        typedef RefinableHashSet_ord<
-            std::set< key_val, less >
-            , co::hash< hash2 >
-        > RefinableSet_set;
-
-        typedef RefinableHashSet_ord_rational<
-            std::set< key_val, less >
-            , co::hash< hash2 >
-        > RefinableSet_rational_set;
-
-        typedef RefinableHashSet_ord<
-            std::unordered_set< key_val, hash, equal_to >
-            , co::hash< hash2 >
-        > RefinableSet_hashset;
-
-        typedef RefinableHashSet_ord_rational<
-            std::unordered_set< key_val, hash, equal_to >
-            , co::hash< hash2 >
-        > RefinableSet_rational_hashset;
-
-#if BOOST_VERSION >= 104800
-        typedef RefinableHashSet_ord<
-            boost::container::set< key_val, less >
-            , co::hash< hash2 >
-        > RefinableSet_boost_set;
-
-        typedef RefinableHashSet_ord_rational<
-            boost::container::set< key_val, less >
-            , co::hash< hash2 >
-        > RefinableSet_rational_boost_set;
-
-        typedef RefinableHashSet_ord<
-            boost::container::flat_set< key_val, less >
-            , co::hash< hash2 >
-        > RefinableSet_boost_flat_set;
-
-        typedef RefinableHashSet_ord_rational<
-            boost::container::flat_set< key_val, less >
-            , co::hash< hash2 >
-        > RefinableSet_rational_boost_flat_set;
-#endif
-
-        typedef RefinableHashSet_ord<
-            boost::unordered_set< key_val, hash, equal_to >
-            , co::hash< hash2 >
-        > RefinableSet_boost_unordered_set;
-
-        typedef RefinableHashSet_ord_rational<
-            boost::unordered_set< key_val, hash, equal_to >
-            , co::hash< hash2 >
-        > RefinableSet_rational_boost_unordered_set;
-    };
-
-} // namespace set2
-
-#endif // #ifndef CDSUNIT_SET_TYPE_STRIPED_H
diff --git a/tests/unit/stack/CMakeLists.txt b/tests/unit/stack/CMakeLists.txt
deleted file mode 100644 (file)
index ea34172..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-set(PACKAGE_NAME cdsu-stack)
-
-set(CDSUNIT_STACK_SOURCES
-    stack_push.cpp
-    stack_pushpop.cpp
-    stack_intrusive_pushpop.cpp)
-
-add_executable(${PACKAGE_NAME} ${CDSUNIT_STACK_SOURCES} $<TARGET_OBJECTS:${TEST_COMMON}>)
-target_link_libraries(${PACKAGE_NAME} ${CDS_SHARED_LIBRARY} ${Boost_THREAD_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
-add_test(NAME ${PACKAGE_NAME} COMMAND ${PACKAGE_NAME} WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
\ No newline at end of file
diff --git a/tests/unit/stack/intrusive_stack_defs.h b/tests/unit/stack/intrusive_stack_defs.h
deleted file mode 100644 (file)
index dc31588..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_INTRUSIVE_STACK_DEFS_H
-#define CDSUNIT_INTRUSIVE_STACK_DEFS_H
-
-#define CDSUNIT_DECLARE_TreiberStack \
-    TEST_CASE( Treiber_HP, cds::intrusive::treiber_stack::node< cds::gc::HP >        ) \
-    TEST_CASE( Treiber_HP_seqcst, cds::intrusive::treiber_stack::node< cds::gc::HP > ) \
-    /*TEST_CASE( Treiber_HP_yield, cds::intrusive::treiber_stack::node< cds::gc::HP >  )*/ \
-    TEST_CASE( Treiber_HP_pause, cds::intrusive::treiber_stack::node< cds::gc::HP >  ) \
-    TEST_CASE( Treiber_HP_exp, cds::intrusive::treiber_stack::node< cds::gc::HP >    ) \
-    TEST_CASE( Treiber_HP_stat, cds::intrusive::treiber_stack::node< cds::gc::HP >   ) \
-    TEST_CASE( Treiber_DHP, cds::intrusive::treiber_stack::node< cds::gc::DHP >       ) \
-    /*TEST_CASE( Treiber_DHP_yield, cds::intrusive::treiber_stack::node< cds::gc::DHP > )*/ \
-    TEST_CASE( Treiber_DHP_pause, cds::intrusive::treiber_stack::node< cds::gc::DHP > ) \
-    TEST_CASE( Treiber_DHP_exp, cds::intrusive::treiber_stack::node< cds::gc::DHP >   ) \
-    TEST_CASE( Treiber_DHP_stat, cds::intrusive::treiber_stack::node< cds::gc::DHP >  )
-
-#define CDSUNIT_TEST_TreiberStack \
-    CPPUNIT_TEST( Treiber_HP        ) \
-    CPPUNIT_TEST( Treiber_HP_seqcst ) \
-    /*CPPUNIT_TEST( Treiber_HP_yield  )*/ \
-    CPPUNIT_TEST( Treiber_HP_pause  ) \
-    CPPUNIT_TEST( Treiber_HP_exp    ) \
-    CPPUNIT_TEST( Treiber_HP_stat   ) \
-    CPPUNIT_TEST( Treiber_DHP       ) \
-    /*CPPUNIT_TEST( Treiber_DHP_yield )*/ \
-    CPPUNIT_TEST( Treiber_DHP_pause ) \
-    CPPUNIT_TEST( Treiber_DHP_exp   ) \
-    CPPUNIT_TEST( Treiber_DHP_stat  )
-
-#define CDSUNIT_DECLARE_EliminationStack \
-    TEST_ELIMINATION( Elimination_HP, cds::intrusive::treiber_stack::node< cds::gc::HP >        ) \
-    TEST_ELIMINATION( Elimination_HP_2ms, cds::intrusive::treiber_stack::node< cds::gc::HP >    ) \
-    TEST_ELIMINATION( Elimination_HP_2ms_stat, cds::intrusive::treiber_stack::node< cds::gc::HP >) \
-    TEST_ELIMINATION( Elimination_HP_5ms, cds::intrusive::treiber_stack::node< cds::gc::HP >    ) \
-    TEST_ELIMINATION( Elimination_HP_5ms_stat, cds::intrusive::treiber_stack::node< cds::gc::HP >) \
-    TEST_ELIMINATION( Elimination_HP_10ms, cds::intrusive::treiber_stack::node< cds::gc::HP >    ) \
-    TEST_ELIMINATION( Elimination_HP_10ms_stat, cds::intrusive::treiber_stack::node< cds::gc::HP >) \
-    TEST_ELIMINATION( Elimination_HP_seqcst, cds::intrusive::treiber_stack::node< cds::gc::HP > ) \
-    /*TEST_ELIMINATION( Elimination_HP_yield, cds::intrusive::treiber_stack::node< cds::gc::HP >  )*/ \
-    TEST_ELIMINATION( Elimination_HP_pause, cds::intrusive::treiber_stack::node< cds::gc::HP >  ) \
-    TEST_ELIMINATION( Elimination_HP_exp, cds::intrusive::treiber_stack::node< cds::gc::HP >    ) \
-    TEST_ELIMINATION( Elimination_HP_stat, cds::intrusive::treiber_stack::node< cds::gc::HP >   ) \
-    TEST_ELIMINATION( Elimination_HP_dyn, cds::intrusive::treiber_stack::node< cds::gc::HP >    ) \
-    TEST_ELIMINATION( Elimination_HP_dyn_stat, cds::intrusive::treiber_stack::node< cds::gc::HP >) \
-    TEST_ELIMINATION( Elimination_DHP, cds::intrusive::treiber_stack::node< cds::gc::DHP >       ) \
-    TEST_ELIMINATION( Elimination_DHP_2ms, cds::intrusive::treiber_stack::node< cds::gc::DHP >    ) \
-    TEST_ELIMINATION( Elimination_DHP_2ms_stat, cds::intrusive::treiber_stack::node< cds::gc::DHP >) \
-    TEST_ELIMINATION( Elimination_DHP_5ms, cds::intrusive::treiber_stack::node< cds::gc::DHP >    ) \
-    TEST_ELIMINATION( Elimination_DHP_5ms_stat, cds::intrusive::treiber_stack::node< cds::gc::DHP >) \
-    TEST_ELIMINATION( Elimination_DHP_10ms, cds::intrusive::treiber_stack::node< cds::gc::DHP >    ) \
-    TEST_ELIMINATION( Elimination_DHP_10ms_stat, cds::intrusive::treiber_stack::node< cds::gc::DHP >) \
-    TEST_ELIMINATION( Elimination_DHP_seqcst, cds::intrusive::treiber_stack::node< cds::gc::DHP > ) \
-    /*TEST_ELIMINATION( Elimination_DHP_yield, cds::intrusive::treiber_stack::node< cds::gc::DHP > )*/ \
-    TEST_ELIMINATION( Elimination_DHP_pause, cds::intrusive::treiber_stack::node< cds::gc::DHP > ) \
-    TEST_ELIMINATION( Elimination_DHP_exp, cds::intrusive::treiber_stack::node< cds::gc::DHP >   ) \
-    TEST_ELIMINATION( Elimination_DHP_stat, cds::intrusive::treiber_stack::node< cds::gc::DHP >  ) \
-    TEST_ELIMINATION( Elimination_DHP_dyn, cds::intrusive::treiber_stack::node< cds::gc::DHP >   ) \
-    TEST_ELIMINATION( Elimination_DHP_dyn_stat, cds::intrusive::treiber_stack::node< cds::gc::DHP >)
-
-#define CDSUNIT_TEST_EliminationStack \
-    CPPUNIT_TEST( Elimination_HP        ) \
-    CPPUNIT_TEST( Elimination_HP_2ms    ) \
-    CPPUNIT_TEST( Elimination_HP_2ms_stat) \
-    CPPUNIT_TEST( Elimination_HP_5ms    ) \
-    CPPUNIT_TEST( Elimination_HP_5ms_stat) \
-    CPPUNIT_TEST( Elimination_HP_10ms    ) \
-    CPPUNIT_TEST( Elimination_HP_10ms_stat) \
-    CPPUNIT_TEST( Elimination_HP_seqcst ) \
-    /*CPPUNIT_TEST( Elimination_HP_yield  )*/ \
-    CPPUNIT_TEST( Elimination_HP_pause  ) \
-    CPPUNIT_TEST( Elimination_HP_exp    ) \
-    CPPUNIT_TEST( Elimination_HP_stat   ) \
-    CPPUNIT_TEST( Elimination_HP_dyn    ) \
-    CPPUNIT_TEST( Elimination_HP_dyn_stat) \
-    CPPUNIT_TEST( Elimination_DHP        ) \
-    CPPUNIT_TEST( Elimination_DHP_seqcst ) \
-    CPPUNIT_TEST( Elimination_DHP_2ms    ) \
-    CPPUNIT_TEST( Elimination_DHP_2ms_stat) \
-    CPPUNIT_TEST( Elimination_DHP_5ms    ) \
-    CPPUNIT_TEST( Elimination_DHP_5ms_stat) \
-    CPPUNIT_TEST( Elimination_DHP_10ms    ) \
-    CPPUNIT_TEST( Elimination_DHP_10ms_stat) \
-    /*CPPUNIT_TEST( Elimination_DHP_yield )*/ \
-    CPPUNIT_TEST( Elimination_DHP_pause ) \
-    CPPUNIT_TEST( Elimination_DHP_exp   ) \
-    CPPUNIT_TEST( Elimination_DHP_stat  ) \
-    CPPUNIT_TEST( Elimination_DHP_dyn   ) \
-    CPPUNIT_TEST( Elimination_DHP_dyn_stat)
-
-#define CDSUNIT_DECLARE_FCStack \
-    TEST_FCSTACK( FCStack_slist, boost::intrusive::slist_base_hook<> ) \
-    TEST_FCSTACK( FCStack_slist_stat, boost::intrusive::slist_base_hook<> ) \
-    TEST_FCSTACK( FCStack_slist_elimination, boost::intrusive::slist_base_hook<> ) \
-    TEST_FCSTACK( FCStack_slist_elimination_stat, boost::intrusive::slist_base_hook<> ) \
-    TEST_FCSTACK( FCStack_slist_mutex_stat, boost::intrusive::slist_base_hook<> ) \
-    TEST_FCSTACK( FCStack_slist_mutex_elimination, boost::intrusive::slist_base_hook<> ) \
-    TEST_FCSTACK( FCStack_slist_mutex_elimination_stat, boost::intrusive::slist_base_hook<> ) \
-    TEST_FCSTACK( FCStack_list, boost::intrusive::list_base_hook<> ) \
-    TEST_FCSTACK( FCStack_list_stat, boost::intrusive::list_base_hook<> ) \
-    TEST_FCSTACK( FCStack_list_elimination, boost::intrusive::list_base_hook<> ) \
-    TEST_FCSTACK( FCStack_list_elimination_stat, boost::intrusive::list_base_hook<> ) \
-    TEST_FCSTACK( FCStack_list_mutex_stat, boost::intrusive::list_base_hook<> ) \
-    TEST_FCSTACK( FCStack_list_mutex_elimination, boost::intrusive::list_base_hook<> ) \
-    TEST_FCSTACK( FCStack_list_mutex_elimination_stat, boost::intrusive::list_base_hook<> )
-
-#define CDSUNIT_TEST_FCStack \
-    CPPUNIT_TEST( FCStack_slist ) \
-    CPPUNIT_TEST( FCStack_slist_stat ) \
-    CPPUNIT_TEST( FCStack_slist_elimination ) \
-    CPPUNIT_TEST( FCStack_slist_elimination_stat ) \
-    CPPUNIT_TEST( FCStack_slist_mutex_stat ) \
-    CPPUNIT_TEST( FCStack_slist_mutex_elimination ) \
-    CPPUNIT_TEST( FCStack_slist_mutex_elimination_stat ) \
-    CPPUNIT_TEST( FCStack_list ) \
-    CPPUNIT_TEST( FCStack_list_stat ) \
-    CPPUNIT_TEST( FCStack_list_elimination ) \
-    CPPUNIT_TEST( FCStack_list_elimination_stat ) \
-    CPPUNIT_TEST( FCStack_list_mutex_stat ) \
-    CPPUNIT_TEST( FCStack_list_mutex_elimination ) \
-    CPPUNIT_TEST( FCStack_list_mutex_elimination_stat )
-
-
-#define CDSUNIT_DECLARE_StdStack \
-    TEST_STDSTACK( StdStack_Deque_Mutex  ) \
-    TEST_STDSTACK( StdStack_Deque_Spin   ) \
-    TEST_STDSTACK( StdStack_Vector_Mutex ) \
-    TEST_STDSTACK( StdStack_Vector_Spin  ) \
-    TEST_STDSTACK( StdStack_List_Mutex   ) \
-    TEST_STDSTACK( StdStack_List_Spin    )
-
-#define CDSUNIT_TEST_StdStack \
-    CPPUNIT_TEST( StdStack_Deque_Mutex  ) \
-    CPPUNIT_TEST( StdStack_Deque_Spin   ) \
-    CPPUNIT_TEST( StdStack_Vector_Mutex ) \
-    CPPUNIT_TEST( StdStack_Vector_Spin  ) \
-    CPPUNIT_TEST( StdStack_List_Mutex   ) \
-    CPPUNIT_TEST( StdStack_List_Spin    )
-
-#endif // #ifndef CDSUNIT_INTRUSIVE_STACK_DEFS_H
diff --git a/tests/unit/stack/intrusive_stack_type.h b/tests/unit/stack/intrusive_stack_type.h
deleted file mode 100644 (file)
index 13083e1..0000000
+++ /dev/null
@@ -1,424 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_INTRUSIVE_STACK_TYPES_H
-#define CDSUNIT_INTRUSIVE_STACK_TYPES_H
-
-#include <cds/intrusive/treiber_stack.h>
-#include <cds/intrusive/fcstack.h>
-
-#include <cds/gc/hp.h>
-#include <cds/gc/dhp.h>
-
-#include <mutex>
-#include <cds/sync/spinlock.h>
-#include <stack>
-#include <list>
-#include <vector>
-#include <boost/intrusive/list.hpp>
-
-namespace istack {
-
-    namespace details {
-
-        template < typename T, typename Stack, typename Lock>
-        class StdStack
-        {
-            Stack   m_Impl;
-            mutable Lock    m_Lock;
-            cds::intrusive::treiber_stack::empty_stat m_stat;
-
-            typedef std::unique_lock<Lock>  unique_lock;
-
-        public:
-            typedef T value_type;
-
-            bool push( T& v )
-            {
-                unique_lock l( m_Lock );
-                m_Impl.push( &v );
-                return true;
-            }
-
-            T * pop()
-            {
-                unique_lock l( m_Lock );
-                if ( !m_Impl.empty() ) {
-                     T * v = m_Impl.top();
-                    m_Impl.pop();
-                    return v;
-                }
-                return nullptr;
-            }
-
-            bool empty() const
-            {
-                unique_lock l( m_Lock );
-                return m_Impl.empty();
-            }
-
-            cds::intrusive::treiber_stack::empty_stat const& statistics() const
-            {
-                return m_stat;
-            }
-        };
-    }
-
-    template <typename T>
-    struct Types {
-
-        template <class GC>
-        using base_hook = cds::intrusive::treiber_stack::base_hook < cds::opt::gc< GC > >;
-
-    // TreiberStack
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T > Treiber_HP;
-        struct traits_Treiber_DHP: public
-            cds::intrusive::treiber_stack::make_traits <
-                cds::intrusive::opt::hook< base_hook<cds::gc::DHP> >
-            > ::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_DHP >Treiber_DHP;
-
-        template <class GC> struct traits_Treiber_seqcst : public
-            cds::intrusive::treiber_stack::make_traits <
-                cds::intrusive::opt::hook< base_hook<GC> >
-                , cds::opt::memory_model<cds::opt::v::sequential_consistent>
-            > ::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Treiber_seqcst<cds::gc::HP>  > Treiber_HP_seqcst;
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_seqcst<cds::gc::DHP> > Treiber_DHP_seqcst;
-
-        template <class GC> struct traits_Treiber_stat: public
-            cds::intrusive::treiber_stack::make_traits <
-                cds::intrusive::opt::hook< base_hook<GC> >
-                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-            > ::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Treiber_stat<cds::gc::HP>  > Treiber_HP_stat;
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_stat<cds::gc::DHP> > Treiber_DHP_stat;
-
-        template <class GC> struct traits_Treiber_yield: public
-            cds::intrusive::treiber_stack::make_traits <
-                cds::intrusive::opt::hook< base_hook<GC> >
-                , cds::opt::back_off<cds::backoff::yield>
-                , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-            > ::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Treiber_yield<cds::gc::HP>  > Treiber_HP_yield;
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_yield<cds::gc::DHP> > Treiber_DHP_yield;
-
-        template <class GC> struct traits_Treiber_pause: public
-            cds::intrusive::treiber_stack::make_traits <
-                cds::intrusive::opt::hook< base_hook<GC> >
-                , cds::opt::back_off<cds::backoff::pause>
-            > ::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Treiber_pause<cds::gc::HP>  > Treiber_HP_pause;
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_pause<cds::gc::DHP> > Treiber_DHP_pause;
-
-        template <class GC> struct traits_Treiber_exp: public
-            cds::intrusive::treiber_stack::make_traits <
-                cds::intrusive::opt::hook< base_hook<GC> >
-                ,cds::opt::back_off<
-                    cds::backoff::exponential<
-                        cds::backoff::pause,
-                        cds::backoff::yield
-                    >
-                >
-            > ::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Treiber_exp<cds::gc::HP>  > Treiber_HP_exp;
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_exp<cds::gc::DHP> > Treiber_DHP_exp;
-
-
-    // Elimination stack
-        template <class GC> struct traits_Elimination_on : public
-            cds::intrusive::treiber_stack::make_traits <
-                cds::intrusive::opt::hook< base_hook<GC> >
-                , cds::opt::enable_elimination<true>
-            > ::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_on<cds::gc::HP>  > Elimination_HP;
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_on<cds::gc::DHP> > Elimination_DHP;
-
-        template <class GC> struct traits_Elimination_seqcst : public
-            cds::intrusive::treiber_stack::make_traits <
-                cds::intrusive::opt::hook< base_hook<GC> >
-                , cds::opt::enable_elimination<true>
-                , cds::opt::memory_model< cds::opt::v::sequential_consistent >
-            > ::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_seqcst<cds::gc::HP>  > Elimination_HP_seqcst;
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_seqcst<cds::gc::DHP> > Elimination_DHP_seqcst;
-
-        template <class GC> struct traits_Elimination_2ms: public
-            cds::intrusive::treiber_stack::make_traits <
-                cds::intrusive::opt::hook< base_hook<GC> >
-                , cds::opt::enable_elimination<true>
-                , cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
-            > ::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_2ms<cds::gc::HP>  > Elimination_HP_2ms;
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms<cds::gc::DHP> > Elimination_DHP_2ms;
-
-        template <class GC> struct traits_Elimination_2ms_stat: public
-            cds::intrusive::treiber_stack::make_traits <
-                cds::intrusive::opt::hook< base_hook<GC> >
-                , cds::opt::enable_elimination<true>
-                , cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
-                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-            > ::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_2ms_stat<cds::gc::HP>  > Elimination_HP_2ms_stat;
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms_stat<cds::gc::DHP> > Elimination_DHP_2ms_stat;
-
-        template <class GC> struct traits_Elimination_5ms: public
-            cds::intrusive::treiber_stack::make_traits <
-                cds::intrusive::opt::hook< base_hook<GC> >
-                , cds::opt::enable_elimination<true>
-                , cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
-            > ::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_5ms<cds::gc::HP>  > Elimination_HP_5ms;
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms<cds::gc::DHP> > Elimination_DHP_5ms;
-
-        template <class GC> struct traits_Elimination_5ms_stat: public
-            cds::intrusive::treiber_stack::make_traits <
-                cds::intrusive::opt::hook< base_hook<GC> >
-                , cds::opt::enable_elimination<true>
-                , cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
-                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-            > ::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_5ms_stat<cds::gc::HP>  > Elimination_HP_5ms_stat;
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms_stat<cds::gc::DHP> > Elimination_DHP_5ms_stat;
-
-        template <class GC> struct traits_Elimination_10ms: public
-            cds::intrusive::treiber_stack::make_traits <
-                cds::intrusive::opt::hook< base_hook<GC> >
-                , cds::opt::enable_elimination<true>
-                , cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
-            > ::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_10ms<cds::gc::HP>  > Elimination_HP_10ms;
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms<cds::gc::DHP> > Elimination_DHP_10ms;
-
-        template <class GC> struct traits_Elimination_10ms_stat: public
-            cds::intrusive::treiber_stack::make_traits <
-                cds::intrusive::opt::hook< base_hook<GC> >
-                , cds::opt::enable_elimination<true>
-                , cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
-                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-            > ::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_10ms_stat<cds::gc::HP>  > Elimination_HP_10ms_stat;
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms_stat<cds::gc::DHP> > Elimination_DHP_10ms_stat;
-
-        template <class GC> struct traits_Elimination_dyn: public
-            cds::intrusive::treiber_stack::make_traits <
-                cds::intrusive::opt::hook< base_hook<GC> >
-                , cds::opt::enable_elimination<true>
-                , cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
-            > ::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_dyn<cds::gc::HP>  > Elimination_HP_dyn;
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn<cds::gc::DHP> > Elimination_DHP_dyn;
-
-        template <class GC> struct traits_Elimination_stat: public
-            cds::intrusive::treiber_stack::make_traits <
-                cds::intrusive::opt::hook< base_hook<GC> >
-                , cds::opt::enable_elimination<true>
-                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-            > ::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_stat<cds::gc::HP>  > Elimination_HP_stat;
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_stat<cds::gc::DHP> > Elimination_DHP_stat;
-
-        template <class GC> struct traits_Elimination_dyn_stat: public
-            cds::intrusive::treiber_stack::make_traits <
-                cds::intrusive::opt::hook< base_hook<GC> >
-                , cds::opt::enable_elimination<true>
-                , cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
-                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-            > ::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_dyn_stat<cds::gc::HP>  > Elimination_HP_dyn_stat;
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn_stat<cds::gc::DHP> > Elimination_DHP_dyn_stat;
-
-        template <class GC> struct traits_Elimination_yield: public
-            cds::intrusive::treiber_stack::make_traits <
-                cds::intrusive::opt::hook< base_hook<GC> >
-                , cds::opt::enable_elimination<true>
-                , cds::opt::back_off<cds::backoff::yield>
-                , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-            > ::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_yield<cds::gc::HP>  > Elimination_HP_yield;
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_yield<cds::gc::DHP> > Elimination_DHP_yield;
-
-        template <class GC> struct traits_Elimination_pause: public
-            cds::intrusive::treiber_stack::make_traits <
-                cds::intrusive::opt::hook< base_hook<GC> >
-                , cds::opt::enable_elimination<true>
-                , cds::opt::back_off<cds::backoff::pause>
-            > ::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_pause<cds::gc::HP>  > Elimination_HP_pause;
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_pause<cds::gc::DHP> > Elimination_DHP_pause;
-
-        template <class GC> struct traits_Elimination_exp: public
-            cds::intrusive::treiber_stack::make_traits <
-                cds::intrusive::opt::hook< base_hook<GC> >
-                , cds::opt::enable_elimination<true>
-                ,cds::opt::back_off<
-                    cds::backoff::exponential<
-                        cds::backoff::pause,
-                        cds::backoff::yield
-                    >
-                >
-            > ::type
-        {};
-        typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_exp<cds::gc::HP>  > Elimination_HP_exp;
-        typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_exp<cds::gc::DHP> > Elimination_DHP_exp;
-
-    // FCStack
-        typedef cds::intrusive::FCStack< T > FCStack_slist;
-
-        struct traits_FCStack_stat:
-            public cds::intrusive::fcstack::make_traits<
-                cds::opt::stat< cds::intrusive::fcstack::stat<> >
-            >::type
-        {};
-        struct traits_FCStack_elimination:
-            public cds::intrusive::fcstack::make_traits<
-            cds::opt::enable_elimination< true >
-            >::type
-        {};
-        struct traits_FCStack_elimination_stat:
-            public cds::intrusive::fcstack::make_traits<
-                cds::opt::stat< cds::intrusive::fcstack::stat<> >,
-                cds::opt::enable_elimination< true >
-            >::type
-        {};
-
-        struct traits_FCStack_mutex_stat:
-            public cds::intrusive::fcstack::make_traits<
-                cds::opt::stat< cds::intrusive::fcstack::stat<> >
-                ,cds::opt::lock_type< std::mutex >
-            >::type
-        {};
-        struct traits_FCStack_mutex_elimination:
-            public cds::intrusive::fcstack::make_traits<
-                cds::opt::enable_elimination< true >
-                ,cds::opt::lock_type< std::mutex >
-            >::type
-        {};
-        struct traits_FCStack_mutex_elimination_stat:
-            public cds::intrusive::fcstack::make_traits<
-                cds::opt::stat< cds::intrusive::fcstack::stat<> >
-                ,cds::opt::enable_elimination< true >
-                ,cds::opt::lock_type< std::mutex >
-            >::type
-        {};
-
-        typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_stat > FCStack_slist_stat;
-        typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_elimination > FCStack_slist_elimination;
-        typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_elimination_stat > FCStack_slist_elimination_stat;
-        typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_mutex_stat > FCStack_slist_mutex_stat;
-        typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_mutex_elimination > FCStack_slist_mutex_elimination;
-        typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_mutex_elimination_stat > FCStack_slist_mutex_elimination_stat;
-        typedef cds::intrusive::FCStack< T, boost::intrusive::list< T > > FCStack_list;
-        typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_stat > FCStack_list_stat;
-        typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_elimination > FCStack_list_elimination;
-        typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_elimination_stat > FCStack_list_elimination_stat;
-        typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_mutex_stat > FCStack_list_mutex_stat;
-        typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_mutex_elimination > FCStack_list_mutex_elimination;
-        typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_mutex_elimination_stat > FCStack_list_mutex_elimination_stat;
-
-
-        // std::stack
-        typedef details::StdStack< T, std::stack< T* >, std::mutex >  StdStack_Deque_Mutex;
-        typedef details::StdStack< T, std::stack< T* >, cds::sync::spin > StdStack_Deque_Spin;
-        typedef details::StdStack< T, std::stack< T*, std::vector<T*> >, std::mutex >  StdStack_Vector_Mutex;
-        typedef details::StdStack< T, std::stack< T*, std::vector<T*> >, cds::sync::spin > StdStack_Vector_Spin;
-        typedef details::StdStack< T, std::stack< T*, std::list<T*> >, std::mutex >  StdStack_List_Mutex;
-        typedef details::StdStack< T, std::stack< T*, std::list<T*> >, cds::sync::spin > StdStack_List_Spin;
-
-    };
-} // namespace istack
-
-namespace std {
-    static inline ostream& operator <<( ostream& o, cds::intrusive::treiber_stack::stat<> const& s )
-    {
-        return o << "\tStatistics:\n"
-            << "\t                    Push: " << s.m_PushCount.get()              << "\n"
-            << "\t                     Pop: " << s.m_PopCount.get()               << "\n"
-            << "\t         Push contention: " << s.m_PushRace.get()               << "\n"
-            << "\t          Pop contention: " << s.m_PopRace.get()                << "\n"
-            << "\t   m_ActivePushCollision: " << s.m_ActivePushCollision.get()    << "\n"
-            << "\t   m_PassivePopCollision: " << s.m_PassivePopCollision.get()    << "\n"
-            << "\t    m_ActivePopCollision: " << s.m_ActivePopCollision.get()     << "\n"
-            << "\t  m_PassivePushCollision: " << s.m_PassivePushCollision.get()   << "\n"
-            << "\t     m_EliminationFailed: " << s.m_EliminationFailed.get()      << "\n";
-    }
-
-    static inline ostream& operator <<( ostream& o, cds::intrusive::treiber_stack::empty_stat const& /*s*/ )
-    {
-        return o;
-    }
-
-    static inline ostream& operator <<( ostream& o, cds::intrusive::fcstack::empty_stat const& /*s*/ )
-    {
-        return o;
-    }
-
-    static inline ostream& operator <<( ostream& o, cds::intrusive::fcstack::stat<> const& s )
-    {
-        return o << "\tStatistics:\n"
-            << "\t                    Push: " << s.m_nPush.get()              << "\n"
-            << "\t                     Pop: " << s.m_nPop.get()               << "\n"
-            << "\t               FailedPop: " << s.m_nFailedPop.get()         << "\n"
-            << "\t  Collided push/pop pair: " << s.m_nCollided.get()          << "\n"
-            << "\tFlat combining statistics:\n"
-            << "\t        Combining factor: " << s.combining_factor()         << "\n"
-            << "\t         Operation count: " << s.m_nOperationCount.get()    << "\n"
-            << "\t      Combine call count: " << s.m_nCombiningCount.get()    << "\n"
-            << "\t        Compact pub-list: " << s.m_nCompactPublicationList.get() << "\n"
-            << "\t   Deactivate pub-record: " << s.m_nDeactivatePubRecord.get()    << "\n"
-            << "\t     Activate pub-record: " << s.m_nActivatePubRecord.get()    << "\n"
-            << "\t       Create pub-record: " << s.m_nPubRecordCreated.get()  << "\n"
-            << "\t       Delete pub-record: " << s.m_nPubRecordDeteted.get()  << "\n"
-            << "\t      Acquire pub-record: " << s.m_nAcquirePubRecCount.get()<< "\n"
-            << "\t      Release pub-record: " << s.m_nReleasePubRecCount.get()<< "\n";
-    }
-
-} // namespace std
-
-#endif // #ifndef CDSUNIT_INTRUSIVE_STACK_TYPES_H
diff --git a/tests/unit/stack/stack_defs.h b/tests/unit/stack/stack_defs.h
deleted file mode 100644 (file)
index 84734bb..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_STACK_DEFS_H
-#define CDSUNIT_STACK_DEFS_H
-
-#define CDSUNIT_DECLARE_TreiberStack \
-    TEST_CASE( Treiber_HP        ) \
-    TEST_CASE( Treiber_HP_seqcst ) \
-    /*TEST_CASE( Treiber_HP_yield  )*/ \
-    TEST_CASE( Treiber_HP_pause  ) \
-    TEST_CASE( Treiber_HP_exp    ) \
-    TEST_CASE( Treiber_HP_stat   ) \
-    TEST_CASE( Treiber_DHP       ) \
-    /*TEST_CASE( Treiber_DHP_yield )*/ \
-    TEST_CASE( Treiber_DHP_pause ) \
-    TEST_CASE( Treiber_DHP_exp   ) \
-    TEST_CASE( Treiber_DHP_stat  )
-
-#define CDSUNIT_TEST_TreiberStack \
-    CPPUNIT_TEST( Treiber_HP        ) \
-    CPPUNIT_TEST( Treiber_HP_seqcst ) \
-    /*CPPUNIT_TEST( Treiber_HP_yield  )*/ \
-    CPPUNIT_TEST( Treiber_HP_pause  ) \
-    CPPUNIT_TEST( Treiber_HP_exp    ) \
-    CPPUNIT_TEST( Treiber_HP_stat   ) \
-    CPPUNIT_TEST( Treiber_DHP       ) \
-    /*CPPUNIT_TEST( Treiber_DHP_yield )*/ \
-    CPPUNIT_TEST( Treiber_DHP_pause ) \
-    CPPUNIT_TEST( Treiber_DHP_exp   ) \
-    CPPUNIT_TEST( Treiber_DHP_stat  )
-
-#define CDSUNIT_DECLARE_EliminationStack \
-    TEST_ELIMINATION( Elimination_HP        ) \
-    TEST_ELIMINATION( Elimination_HP_2ms    ) \
-    TEST_ELIMINATION( Elimination_HP_2ms_stat) \
-    TEST_ELIMINATION( Elimination_HP_5ms    ) \
-    TEST_ELIMINATION( Elimination_HP_5ms_stat) \
-    TEST_ELIMINATION( Elimination_HP_10ms    ) \
-    TEST_ELIMINATION( Elimination_HP_10ms_stat) \
-    TEST_ELIMINATION( Elimination_HP_seqcst ) \
-    /*TEST_ELIMINATION( Elimination_HP_yield  )*/ \
-    TEST_ELIMINATION( Elimination_HP_pause  ) \
-    TEST_ELIMINATION( Elimination_HP_exp    ) \
-    TEST_ELIMINATION( Elimination_HP_stat   ) \
-    TEST_ELIMINATION( Elimination_HP_dyn    ) \
-    TEST_ELIMINATION( Elimination_HP_dyn_stat) \
-    TEST_ELIMINATION( Elimination_DHP       ) \
-    TEST_ELIMINATION( Elimination_DHP_2ms    ) \
-    TEST_ELIMINATION( Elimination_DHP_2ms_stat) \
-    TEST_ELIMINATION( Elimination_DHP_5ms    ) \
-    TEST_ELIMINATION( Elimination_DHP_5ms_stat) \
-    TEST_ELIMINATION( Elimination_DHP_10ms    ) \
-    TEST_ELIMINATION( Elimination_DHP_10ms_stat) \
-    /*TEST_ELIMINATION( Elimination_DHP_yield )*/ \
-    TEST_ELIMINATION( Elimination_DHP_pause ) \
-    TEST_ELIMINATION( Elimination_DHP_exp   ) \
-    TEST_ELIMINATION( Elimination_DHP_stat  ) \
-    TEST_ELIMINATION( Elimination_DHP_dyn   ) \
-    TEST_ELIMINATION( Elimination_DHP_dyn_stat)
-
-#define CDSUNIT_TEST_EliminationStack \
-    CPPUNIT_TEST( Elimination_HP        ) \
-    CPPUNIT_TEST( Elimination_HP_2ms    ) \
-    CPPUNIT_TEST( Elimination_HP_2ms_stat) \
-    CPPUNIT_TEST( Elimination_HP_5ms    ) \
-    CPPUNIT_TEST( Elimination_HP_5ms_stat) \
-    CPPUNIT_TEST( Elimination_HP_10ms    ) \
-    CPPUNIT_TEST( Elimination_HP_10ms_stat) \
-    CPPUNIT_TEST( Elimination_HP_seqcst ) \
-    /*CPPUNIT_TEST( Elimination_HP_yield  )*/ \
-    CPPUNIT_TEST( Elimination_HP_pause  ) \
-    CPPUNIT_TEST( Elimination_HP_exp    ) \
-    CPPUNIT_TEST( Elimination_HP_stat   ) \
-    CPPUNIT_TEST( Elimination_HP_dyn    ) \
-    CPPUNIT_TEST( Elimination_HP_dyn_stat) \
-    CPPUNIT_TEST( Elimination_DHP       ) \
-    CPPUNIT_TEST( Elimination_DHP_2ms    ) \
-    CPPUNIT_TEST( Elimination_DHP_2ms_stat) \
-    CPPUNIT_TEST( Elimination_DHP_5ms    ) \
-    CPPUNIT_TEST( Elimination_DHP_5ms_stat) \
-    CPPUNIT_TEST( Elimination_DHP_10ms    ) \
-    CPPUNIT_TEST( Elimination_DHP_10ms_stat) \
-    /*CPPUNIT_TEST( Elimination_DHP_yield )*/ \
-    CPPUNIT_TEST( Elimination_DHP_pause ) \
-    CPPUNIT_TEST( Elimination_DHP_exp   ) \
-    CPPUNIT_TEST( Elimination_DHP_stat  ) \
-    CPPUNIT_TEST( Elimination_DHP_dyn   ) \
-    CPPUNIT_TEST( Elimination_DHP_dyn_stat)
-
-
-#define CDSUNIT_DECLARE_FCStack \
-    TEST_CASE( FCStack_deque ) \
-    TEST_CASE( FCStack_deque_mutex ) \
-    TEST_CASE( FCStack_deque_stat ) \
-    TEST_CASE( FCStack_deque_elimination ) \
-    TEST_CASE( FCStack_deque_elimination_stat ) \
-    TEST_CASE( FCStack_vector ) \
-    TEST_CASE( FCStack_vector_mutex ) \
-    TEST_CASE( FCStack_vector_stat ) \
-    TEST_CASE( FCStack_vector_elimination ) \
-    TEST_CASE( FCStack_vector_elimination_stat ) \
-    TEST_CASE( FCStack_list ) \
-    TEST_CASE( FCStack_list_mutex ) \
-    TEST_CASE( FCStack_list_stat ) \
-    TEST_CASE( FCStack_list_elimination ) \
-    TEST_CASE( FCStack_list_elimination_stat )
-
-#define CDSUNIT_TEST_FCStack \
-    CPPUNIT_TEST( FCStack_deque ) \
-    CPPUNIT_TEST( FCStack_deque_mutex ) \
-    CPPUNIT_TEST( FCStack_deque_stat ) \
-    CPPUNIT_TEST( FCStack_deque_elimination ) \
-    CPPUNIT_TEST( FCStack_deque_elimination_stat ) \
-    CPPUNIT_TEST( FCStack_vector ) \
-    CPPUNIT_TEST( FCStack_vector_mutex ) \
-    CPPUNIT_TEST( FCStack_vector_stat ) \
-    CPPUNIT_TEST( FCStack_vector_elimination ) \
-    CPPUNIT_TEST( FCStack_vector_elimination_stat ) \
-    CPPUNIT_TEST( FCStack_list ) \
-    CPPUNIT_TEST( FCStack_list_mutex ) \
-    CPPUNIT_TEST( FCStack_list_stat ) \
-    CPPUNIT_TEST( FCStack_list_elimination ) \
-    CPPUNIT_TEST( FCStack_list_elimination_stat )
-
-
-#define CDSUNIT_DECLARE_FCDeque \
-    TEST_CASE( FCDequeL_default ) \
-    TEST_CASE( FCDequeL_mutex ) \
-    TEST_CASE( FCDequeL_stat ) \
-    TEST_CASE( FCDequeL_elimination ) \
-    TEST_CASE( FCDequeL_elimination_stat ) \
-    TEST_CASE( FCDequeR_default ) \
-    TEST_CASE( FCDequeR_mutex ) \
-    TEST_CASE( FCDequeR_stat ) \
-    TEST_CASE( FCDequeR_elimination ) \
-    TEST_CASE( FCDequeR_elimination_stat )
-
-#define CDSUNIT_TEST_FCDeque \
-    CPPUNIT_TEST( FCDequeL_default ) \
-    CPPUNIT_TEST( FCDequeL_mutex ) \
-    CPPUNIT_TEST( FCDequeL_stat ) \
-    CPPUNIT_TEST( FCDequeL_elimination ) \
-    CPPUNIT_TEST( FCDequeL_elimination_stat ) \
-    CPPUNIT_TEST( FCDequeR_default ) \
-    CPPUNIT_TEST( FCDequeR_mutex ) \
-    CPPUNIT_TEST( FCDequeR_stat ) \
-    CPPUNIT_TEST( FCDequeR_elimination ) \
-    CPPUNIT_TEST( FCDequeR_elimination_stat )
-
-
-#define CDSUNIT_DECLARE_StdStack \
-    TEST_CASE( StdStack_Deque_Mutex  ) \
-    TEST_CASE( StdStack_Deque_Spin   ) \
-    TEST_CASE( StdStack_Vector_Mutex ) \
-    TEST_CASE( StdStack_Vector_Spin  ) \
-    TEST_CASE( StdStack_List_Mutex   ) \
-    TEST_CASE( StdStack_List_Spin    )
-
-#define CDSUNIT_TEST_StdStack \
-    CPPUNIT_TEST( StdStack_Deque_Mutex  ) \
-    CPPUNIT_TEST( StdStack_Deque_Spin   ) \
-    CPPUNIT_TEST( StdStack_Vector_Mutex ) \
-    CPPUNIT_TEST( StdStack_Vector_Spin  ) \
-    CPPUNIT_TEST( StdStack_List_Mutex   ) \
-    CPPUNIT_TEST( StdStack_List_Spin    )
-
-#endif // #ifndef CDSUNIT_STACK_DEFS_H
diff --git a/tests/unit/stack/stack_intrusive_pushpop.cpp b/tests/unit/stack/stack_intrusive_pushpop.cpp
deleted file mode 100644 (file)
index f9b25e6..0000000
+++ /dev/null
@@ -1,404 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/thread.h"
-#include "stack/intrusive_stack_type.h"
-
-// Multi-threaded stack test for push/pop operation
-namespace istack {
-
-#define TEST_CASE( Q, HOOK ) void Q()          { test_unbounded< Types<SimpleValue<HOOK> >::Q >();   }
-#define TEST_ELIMINATION( Q, HOOK ) void Q()   { test_elimination< Types<SimpleValue<HOOK> >::Q >(); }
-#define TEST_BOUNDED( Q, HOOK ) void Q()       { test_bounded< Types<SimpleValue<HOOK> >::Q >();     }
-#define TEST_FCSTACK( Q, HOOK ) void Q()       { test_fcstack< Types<SimpleValue<HOOK> >::Q >();     }
-#define TEST_STDSTACK( Q ) void Q()            { test_stdstack< Types<SimpleValue<> >::Q >();       }
-
-    namespace {
-        static size_t s_nPushThreadCount = 4;
-        static size_t s_nPopThreadCount = 4;
-        static size_t s_nStackSize = 10000000;
-        static size_t s_nEliminationSize = 4;
-        static bool s_bFCIterative = false;
-        static unsigned int s_nFCCombinePassCount = 64;
-        static unsigned int s_nFCCompactFactor = 1024;
-
-        struct empty {};
-
-        template <typename Base = empty >
-        struct SimpleValue: public Base
-        {
-            atomics::atomic<size_t> nNo;
-            size_t      nProducer;
-            size_t      nConsumer;
-
-            SimpleValue() {}
-            SimpleValue( size_t n ): nNo(n) {}
-        };
-
-    } // namespace
-
-    class IntrusiveStack_PushPop: public CppUnitMini::TestCase
-    {
-        atomics::atomic<size_t>  m_nWorkingProducers;
-        static CDS_CONSTEXPR const size_t c_nValArraySize = 1024;
-        static CDS_CONSTEXPR const size_t c_nBadConsumer = 0xbadc0ffe;
-
-        template <class Stack>
-        class Producer: public CppUnitMini::TestThread
-        {
-            virtual TestThread *    clone()
-            {
-                return new Producer( *this );
-            }
-        public:
-            Stack&              m_Stack;
-            size_t              m_nPushError;
-            size_t              m_arrPush[c_nValArraySize];
-
-            // Interval in m_arrValue
-            typename Stack::value_type *       m_pStart;
-            typename Stack::value_type *       m_pEnd;
-
-        public:
-            Producer( CppUnitMini::ThreadPool& pool, Stack& s )
-                : CppUnitMini::TestThread( pool )
-                , m_Stack( s )
-            {}
-            Producer( Producer& src )
-                : CppUnitMini::TestThread( src )
-                , m_Stack( src.m_Stack )
-            {}
-
-            IntrusiveStack_PushPop&  getTest()
-            {
-                return static_cast<IntrusiveStack_PushPop&>( m_Pool.m_Test );
-            }
-
-            virtual void init()
-            {
-                cds::threading::Manager::attachThread();
-            }
-            virtual void fini()
-            {
-                cds::threading::Manager::detachThread();
-            }
-
-            virtual void test()
-            {
-                m_nPushError = 0;
-                memset( m_arrPush, 0, sizeof(m_arrPush));
-
-                size_t i = 0;
-                for ( typename Stack::value_type * p = m_pStart; p < m_pEnd; ++p, ++i ) {
-                    p->nProducer = m_nThreadNo;
-                    size_t no;
-                    p->nNo.store( no = i % c_nValArraySize, atomics::memory_order_release );
-                    if ( m_Stack.push( *p ))
-                        ++m_arrPush[ no ];
-                    else
-                        ++m_nPushError;
-                }
-
-                getTest().m_nWorkingProducers.fetch_sub( 1, atomics::memory_order_release );
-            }
-        };
-
-        template <class Stack>
-        class Consumer: public CppUnitMini::TestThread
-        {
-            virtual TestThread *    clone()
-            {
-                return new Consumer( *this );
-            }
-        public:
-            Stack&              m_Stack;
-            size_t              m_nPopCount;
-            size_t              m_nPopEmpty;
-            size_t              m_arrPop[c_nValArraySize];
-            size_t              m_nDirtyPop;
-        public:
-            Consumer( CppUnitMini::ThreadPool& pool, Stack& s )
-                : CppUnitMini::TestThread( pool )
-                , m_Stack( s )
-            {}
-            Consumer( Consumer& src )
-                : CppUnitMini::TestThread( src )
-                , m_Stack( src.m_Stack )
-            {}
-
-            IntrusiveStack_PushPop&  getTest()
-            {
-                return static_cast<IntrusiveStack_PushPop&>( m_Pool.m_Test );
-            }
-
-            virtual void init()
-            {
-                cds::threading::Manager::attachThread();
-            }
-            virtual void fini()
-            {
-                cds::threading::Manager::detachThread();
-            }
-
-            virtual void test()
-            {
-                m_nPopEmpty = 0;
-                m_nPopCount = 0;
-                m_nDirtyPop = 0;
-                memset( m_arrPop, 0, sizeof(m_arrPop));
-
-                while ( !(getTest().m_nWorkingProducers.load(atomics::memory_order_acquire) == 0 && m_Stack.empty()) ) {
-                    typename Stack::value_type * p = m_Stack.pop();
-                    if ( p ) {
-                        p->nConsumer = m_nThreadNo;
-                        ++m_nPopCount;
-                        size_t no = p->nNo.load( atomics::memory_order_acquire );
-                        if ( no < sizeof(m_arrPop)/sizeof(m_arrPop[0]) )
-                            ++m_arrPop[no];
-                        else
-                            ++m_nDirtyPop;
-                    }
-                    else
-                        ++m_nPopEmpty;
-                }
-            }
-        };
-
-        template <typename T>
-        class value_array
-        {
-            T * m_pArr;
-        public:
-            value_array( size_t nSize )
-                : m_pArr( new T[nSize] )
-            {}
-
-            ~value_array()
-            {
-                delete [] m_pArr;
-            }
-
-            T * get() const { return m_pArr; }
-        };
-
-    protected:
-        void setUpParams( const CppUnitMini::TestCfg& cfg ) {
-            s_nPushThreadCount = cfg.getULong("PushThreadCount", 4 );
-            s_nPopThreadCount = cfg.getULong("PopThreadCount", 4 );
-            s_nStackSize = cfg.getULong("StackSize", 1000000 );
-            s_nEliminationSize = cfg.getULong("EliminationSize", 4 );
-            s_bFCIterative = cfg.getBool( "FCIterate", false );
-            s_nFCCombinePassCount = cfg.getUInt( "FCCombinePassCount", 64 );
-            s_nFCCompactFactor = cfg.getUInt( "FCCompactFactor", 1024 );
-        }
-
-        template <class Stack>
-        void analyze( CppUnitMini::ThreadPool& pool, Stack& /*testStack*/  )
-        {
-            size_t nPushError = 0;
-            size_t nPopEmpty = 0;
-            size_t nPopCount = 0;
-            size_t arrVal[c_nValArraySize];
-            memset( arrVal, 0, sizeof(arrVal));
-            size_t nDirtyPop = 0;
-
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                CppUnitMini::TestThread * pThread = *it;
-                Producer<Stack> * pPusher = dynamic_cast< Producer<Stack> *>( pThread );
-                if ( pPusher ) {
-                    nPushError += pPusher->m_nPushError;
-                    for ( size_t i = 0; i < sizeof(arrVal)/sizeof(arrVal[0]); ++i )
-                        arrVal[i] += pPusher->m_arrPush[i];
-                }
-                else {
-                    Consumer<Stack> * pPopper = dynamic_cast<Consumer<Stack> *>( pThread );
-                    assert( pPopper );
-                    nPopEmpty += pPopper->m_nPopEmpty;
-                    nPopCount += pPopper->m_nPopCount;
-                    nDirtyPop += pPopper->m_nDirtyPop;
-                    for ( size_t i = 0; i < sizeof(arrVal)/sizeof(arrVal[0]); ++i )
-                        arrVal[i] -= pPopper->m_arrPop[i];
-                }
-            }
-
-            CPPUNIT_MSG( "Push count=" << s_nStackSize
-                << " push error=" << nPushError
-                << " pop count=" << nPopCount
-                << " pop empty=" << nPopEmpty
-                << " dirty pop=" << nDirtyPop
-                );
-            CPPUNIT_CHECK( nPopCount == s_nStackSize );
-            CPPUNIT_CHECK( nDirtyPop == 0 );
-            for ( size_t i = 0; i < sizeof(arrVal)/sizeof(arrVal[0]); ++i ) {
-                CPPUNIT_CHECK_EX( arrVal[i] == 0, "arrVal[" << i << "]=" << long(arrVal[i]) );
-            }
-        }
-
-        template <class Stack>
-        void test( Stack& testStack, value_array<typename Stack::value_type>& arrValue )
-        {
-            m_nWorkingProducers.store( s_nPushThreadCount, atomics::memory_order_release );
-            size_t const nPushCount = s_nStackSize / s_nPushThreadCount;
-
-            typename Stack::value_type * pValStart = arrValue.get();
-            typename Stack::value_type * pValEnd = pValStart + s_nStackSize;
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new Producer<Stack>( pool, testStack ), s_nPushThreadCount );
-            {
-                for ( typename Stack::value_type * it = pValStart; it != pValEnd; ++it )
-                    it->nConsumer = c_nBadConsumer;
-
-                typename Stack::value_type * pStart = pValStart;
-                for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                    static_cast<Producer<Stack>* >( *it )->m_pStart = pStart;
-                    pStart += nPushCount;
-                    static_cast<Producer<Stack>* >( *it )->m_pEnd = pStart;
-                }
-            }
-            pool.add( new Consumer<Stack>( pool, testStack ), s_nPopThreadCount );
-
-            CPPUNIT_MSG( "   Push/Pop test, push thread count=" << s_nPushThreadCount
-                << " pop thread count=" << s_nPopThreadCount
-                << " items=" << (nPushCount * s_nPushThreadCount)
-                << "...");
-            pool.run();
-            CPPUNIT_MSG( "   Duration=" << pool.avgDuration() );
-
-            s_nStackSize = nPushCount * s_nPushThreadCount;
-
-            {
-                typename Stack::value_type * pEnd = pValStart + s_nStackSize;
-                for ( typename Stack::value_type * it = pValStart; it != pEnd; ++it  )
-                    CPPUNIT_CHECK( it->nConsumer != c_nBadConsumer );
-            }
-
-            analyze( pool, testStack );
-            CPPUNIT_MSG( testStack.statistics() );
-        }
-
-    public:
-        // Unbounded stack test
-        template <class Stack>
-        void test_unbounded()
-        {
-            value_array<typename Stack::value_type> arrValue( s_nStackSize );
-            {
-                Stack testStack;
-                test( testStack, arrValue );
-            }
-            Stack::gc::force_dispose();
-        }
-
-        template <class Stack>
-        void test_fcstack()
-        {
-            if ( s_bFCIterative ) {
-                for (unsigned int nCompactFactor = 1; nCompactFactor <= s_nFCCompactFactor; nCompactFactor *= 2 ) {
-                    for ( unsigned int nPass = 1; nPass <= s_nFCCombinePassCount; nPass *= 2 ) {
-                        CPPUNIT_MSG( "Compact factor=" << nCompactFactor << ", combine pass count=" << nPass );
-                        value_array<typename Stack::value_type> arrValue( s_nStackSize );
-                        Stack testStack( nCompactFactor, nPass );
-                        test( testStack, arrValue );
-                    }
-                }
-            }
-            else {
-                if ( s_nFCCompactFactor && s_nFCCombinePassCount ) {
-                    CPPUNIT_MSG( "Compact factor=" << s_nFCCompactFactor << ", combine pass count=" << s_nFCCombinePassCount );
-                    value_array<typename Stack::value_type> arrValue( s_nStackSize );
-                    Stack testStack( s_nFCCompactFactor, s_nFCCombinePassCount );
-                    test( testStack, arrValue );
-                }
-                else {
-                    value_array<typename Stack::value_type> arrValue( s_nStackSize );
-                    Stack testStack;
-                    test( testStack, arrValue );
-                }
-            }
-        }
-
-        // Unbounded elimination stack test
-        template <class Stack>
-        void test_elimination()
-        {
-            value_array<typename Stack::value_type> arrValue( s_nStackSize );
-            {
-                Stack testStack( s_nEliminationSize );
-                test( testStack, arrValue );
-                check_elimination_stat( testStack.statistics() );
-            }
-            Stack::gc::force_dispose();
-        }
-        void check_elimination_stat( cds::intrusive::treiber_stack::empty_stat const& )
-        {}
-        void check_elimination_stat( cds::intrusive::treiber_stack::stat<> const& s )
-        {
-            CPPUNIT_CHECK( s.m_PushCount.get() + s.m_ActivePushCollision.get() + s.m_PassivePushCollision.get() == s_nStackSize );
-            CPPUNIT_CHECK( s.m_PopCount.get() + s.m_ActivePopCollision.get() + s.m_PassivePopCollision.get() == s_nStackSize );
-            CPPUNIT_CHECK( s.m_PushCount.get() == s.m_PopCount.get() );
-            CPPUNIT_CHECK( s.m_ActivePopCollision.get() == s.m_PassivePushCollision.get() );
-            CPPUNIT_CHECK( s.m_ActivePushCollision.get() == s.m_PassivePopCollision.get() );
-        }
-
-        // Bounded stack test
-        template <class Stack>
-        void test_bounded()
-        {
-            value_array<typename Stack::value_type> arrValue( s_nStackSize );
-            Stack testStack( s_nStackSize );
-            test( testStack, arrValue );
-        }
-
-        template <class Stack>
-        void test_stdstack()
-        {
-            value_array<typename Stack::value_type> arrValue( s_nStackSize );
-            Stack testStack;
-            test( testStack, arrValue );
-        }
-
-    protected:
-#   include "stack/intrusive_stack_defs.h"
-        CDSUNIT_DECLARE_TreiberStack
-        CDSUNIT_DECLARE_EliminationStack
-        CDSUNIT_DECLARE_FCStack
-        CDSUNIT_DECLARE_StdStack
-
-        CPPUNIT_TEST_SUITE(IntrusiveStack_PushPop)
-            CDSUNIT_TEST_TreiberStack
-            CDSUNIT_TEST_EliminationStack
-            CDSUNIT_TEST_FCStack
-            CDSUNIT_TEST_StdStack
-        CPPUNIT_TEST_SUITE_END();
-    };
-} // namespace istack
-
-CPPUNIT_TEST_SUITE_REGISTRATION(istack::IntrusiveStack_PushPop);
diff --git a/tests/unit/stack/stack_push.cpp b/tests/unit/stack/stack_push.cpp
deleted file mode 100644 (file)
index 9da71ef..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/thread.h"
-#include "stack/stack_type.h"
-
-// Multi-threaded stack test for push operation
-namespace stack {
-
-#define TEST_CASE( Q ) void Q()          { test_unbounded< Types<SimpleValue>::Q >(); }
-#define TEST_ELIMINATION( Q ) void Q()   { test_elimination< Types<SimpleValue>::Q >(); }
-#define TEST_BOUNDED( Q ) void Q()       { test_bounded< Types<SimpleValue>::Q >(); }
-
-    namespace {
-        static size_t s_nThreadCount = 8;
-        static size_t s_nStackSize = 10000000;
-        static size_t s_nEliminationSize = 4;
-
-        struct SimpleValue {
-            size_t      nNo;
-            size_t      nThread;
-
-            SimpleValue(): nNo(0), nThread(0) {}
-            SimpleValue( size_t n ): nNo(n), nThread(0) {}
-            size_t getNo() const { return  nNo; }
-        };
-    }
-
-    class Stack_Push: public CppUnitMini::TestCase
-    {
-        template <class Stack>
-        class Thread: public CppUnitMini::TestThread
-        {
-            virtual TestThread *    clone()
-            {
-                return new Thread( *this );
-            }
-        public:
-            Stack&              m_Stack;
-            double              m_fTime;
-            size_t              m_nStartItem;
-            size_t              m_nEndItem;
-            size_t              m_nPushError;
-
-        public:
-            Thread( CppUnitMini::ThreadPool& pool, Stack& s )
-                : CppUnitMini::TestThread( pool )
-                , m_Stack( s )
-            {}
-            Thread( Thread& src )
-                : CppUnitMini::TestThread( src )
-                , m_Stack( src.m_Stack )
-            {}
-
-            Stack_Push&  getTest()
-            {
-                return reinterpret_cast<Stack_Push&>( m_Pool.m_Test );
-            }
-
-            virtual void init()
-            {
-                cds::threading::Manager::attachThread();
-            }
-            virtual void fini()
-            {
-                cds::threading::Manager::detachThread();
-            }
-
-            virtual void test()
-            {
-                m_fTime = m_Timer.duration();
-
-                m_nPushError = 0;
-                SimpleValue v;
-                v.nThread = m_nThreadNo;
-                for ( v.nNo = m_nStartItem; v.nNo < m_nEndItem; ++v.nNo ) {
-                    if ( !m_Stack.push( v ))
-                        ++m_nPushError;
-                }
-
-                m_fTime = m_Timer.duration() - m_fTime;
-            }
-        };
-
-    protected:
-        void setUpParams( const CppUnitMini::TestCfg& cfg ) {
-            s_nThreadCount = cfg.getULong("ThreadCount", 8 );
-            s_nStackSize = cfg.getULong("StackSize", 10000000 );
-            s_nEliminationSize = cfg.getULong("EliminationSize", 4 );
-        }
-
-        template <class Stack>
-        void analyze( CppUnitMini::ThreadPool& pool, Stack& testStack  )
-        {
-            size_t nThreadItems = s_nStackSize / s_nThreadCount;
-            std::vector<size_t> aThread;
-            aThread.resize(s_nThreadCount);
-
-            double fTime = 0;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                Thread<Stack> * pThread = reinterpret_cast<Thread<Stack> *>(*it);
-                fTime += pThread->m_fTime;
-                if ( pThread->m_nPushError != 0 )
-                    CPPUNIT_MSG("     ERROR: thread push error count=" << pThread->m_nPushError );
-                aThread[ pThread->m_nThreadNo] = pThread->m_nEndItem - 1;
-            }
-            CPPUNIT_MSG( "     Duration=" << (fTime / s_nThreadCount) );
-            CPPUNIT_ASSERT( !testStack.empty() )
-
-            size_t * arr = new size_t[ s_nStackSize ];
-            memset(arr, 0, sizeof(arr[0]) * s_nStackSize );
-
-            cds::OS::Timer      timer;
-            CPPUNIT_MSG( "   Pop (single-threaded)..." );
-            size_t nPopped = 0;
-            SimpleValue val;
-            while ( testStack.pop( val )) {
-                nPopped++;
-                ++arr[ val.getNo() ];
-                CPPUNIT_ASSERT( val.nThread < s_nThreadCount);
-                CPPUNIT_ASSERT( aThread[val.nThread] == val.nNo );
-                aThread[val.nThread]--;
-            }
-            CPPUNIT_MSG( "     Duration=" << timer.duration() );
-
-            size_t nTotalItems = nThreadItems * s_nThreadCount;
-            size_t nError = 0;
-            for ( size_t i = 0; i < nTotalItems; ++i ) {
-                if ( arr[i] != 1 ) {
-                    CPPUNIT_MSG( "   ERROR: Item " << i << " has not been pushed" );
-                    CPPUNIT_ASSERT( ++nError > 10 );
-                }
-            }
-
-            delete [] arr;
-        }
-
-        // Unbounded stack test
-        template <class Stack>
-        void test_unbounded()
-        {
-            Stack testStack;
-            test( testStack );
-        }
-
-        // Unbounded elimination stack test
-        template <class Stack>
-        void test_elimination()
-        {
-            Stack testStack( s_nEliminationSize );
-            test( testStack );
-            check_elimination_stat( testStack.statistics() );
-        }
-        void check_elimination_stat( cds::container::treiber_stack::empty_stat const& )
-        {}
-        void check_elimination_stat( cds::container::treiber_stack::stat<> const& s )
-        {
-            CPPUNIT_CHECK( s.m_PushCount.get() == s.m_PopCount.get() );
-        }
-
-        // Bounded stack test
-        template <class Stack>
-        void test_bounded()
-        {
-            Stack testStack( s_nStackSize );
-            test( testStack );
-        }
-
-        template <class Stack>
-        void test( Stack& testStack )
-        {
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new Thread<Stack>( pool, testStack ), s_nThreadCount );
-
-            size_t nStart = 0;
-            size_t nThreadItemCount = s_nStackSize / s_nThreadCount;
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                Thread<Stack> * pThread = reinterpret_cast<Thread<Stack> *>(*it);
-                pThread->m_nStartItem = nStart;
-                nStart += nThreadItemCount;
-                pThread->m_nEndItem = nStart;
-            }
-
-            CPPUNIT_MSG( "   Push test, thread count=" << s_nThreadCount
-                << " items=" << (nThreadItemCount * s_nThreadCount)
-                << "...");
-            pool.run();
-
-            analyze( pool, testStack );
-            CPPUNIT_MSG( testStack.statistics() );
-        }
-
-    protected:
-#   include "stack/stack_defs.h"
-        CDSUNIT_DECLARE_TreiberStack
-        CDSUNIT_DECLARE_EliminationStack
-        CDSUNIT_DECLARE_FCStack
-        CDSUNIT_DECLARE_FCDeque
-        CDSUNIT_DECLARE_StdStack
-
-        CPPUNIT_TEST_SUITE(Stack_Push)
-            CDSUNIT_TEST_TreiberStack
-            CDSUNIT_TEST_EliminationStack
-            CDSUNIT_TEST_FCStack
-            CDSUNIT_TEST_FCDeque
-            CDSUNIT_TEST_StdStack
-        CPPUNIT_TEST_SUITE_END();
-    };
-} // namespace stack
-
-CPPUNIT_TEST_SUITE_REGISTRATION(stack::Stack_Push);
diff --git a/tests/unit/stack/stack_pushpop.cpp b/tests/unit/stack/stack_pushpop.cpp
deleted file mode 100644 (file)
index 6cb0ab9..0000000
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#include "cppunit/thread.h"
-#include "stack/stack_type.h"
-
-// Multi-threaded stack test for push/pop operation
-namespace stack {
-
-#define TEST_CASE( Q ) void Q()          { test_unbounded< Types<SimpleValue>::Q >(); }
-#define TEST_ELIMINATION( Q ) void Q()   { test_elimination< Types<SimpleValue>::Q >(); }
-#define TEST_BOUNDED( Q ) void Q()       { test_bounded< Types<SimpleValue>::Q >(); }
-
-    namespace {
-        static size_t s_nPushThreadCount = 4;
-        static size_t s_nPopThreadCount = 4;
-        static size_t s_nStackSize = 1000000;
-        static size_t s_nEliminationSize = 4;
-
-        struct SimpleValue {
-            size_t      nNo;
-            size_t      nThread;
-
-            SimpleValue(): nNo(0), nThread(0) {}
-            SimpleValue( size_t n ): nNo(n), nThread(0) {}
-            size_t getNo() const { return  nNo; }
-        };
-    }
-
-    class Stack_PushPop: public CppUnitMini::TestCase
-    {
-        atomics::atomic<size_t>  m_nWorkingProducers;
-        static size_t const c_nValArraySize = 1024;
-
-        template <class Stack>
-        class Pusher: public CppUnitMini::TestThread
-        {
-            virtual TestThread *    clone()
-            {
-                return new Pusher( *this );
-            }
-        public:
-            Stack&              m_Stack;
-            size_t              m_nItemCount;
-            size_t              m_nPushError;
-            size_t              m_arrPush[c_nValArraySize];
-
-        public:
-            Pusher( CppUnitMini::ThreadPool& pool, Stack& s )
-                : CppUnitMini::TestThread( pool )
-                , m_Stack( s )
-            {}
-            Pusher( Pusher& src )
-                : CppUnitMini::TestThread( src )
-                , m_Stack( src.m_Stack )
-            {}
-
-            Stack_PushPop&  getTest()
-            {
-                return reinterpret_cast<Stack_PushPop&>( m_Pool.m_Test );
-            }
-
-            virtual void init()
-            {
-                cds::threading::Manager::attachThread();
-            }
-            virtual void fini()
-            {
-                cds::threading::Manager::detachThread();
-            }
-
-            virtual void test()
-            {
-                m_nPushError = 0;
-                memset( m_arrPush, 0, sizeof(m_arrPush));
-
-                SimpleValue v;
-                v.nThread = m_nThreadNo;
-                for ( size_t i = 0; i < m_nItemCount; ++i ) {
-                    v.nNo = i % c_nValArraySize;
-                    if ( m_Stack.push( v ))
-                        ++m_arrPush[v.nNo];
-                    else
-                        ++m_nPushError;
-                }
-
-
-                getTest().m_nWorkingProducers.fetch_sub(1, atomics::memory_order_release);
-            }
-        };
-
-        template <class Stack>
-        class Popper: public CppUnitMini::TestThread
-        {
-            virtual TestThread *    clone()
-            {
-                return new Popper( *this );
-            }
-        public:
-            Stack&              m_Stack;
-            size_t              m_nPopCount;
-            size_t              m_nPopEmpty;
-            size_t              m_arrPop[c_nValArraySize];
-            size_t              m_nDirtyPop;
-        public:
-            Popper( CppUnitMini::ThreadPool& pool, Stack& s )
-                : CppUnitMini::TestThread( pool )
-                , m_Stack( s )
-            {}
-            Popper( Popper& src )
-                : CppUnitMini::TestThread( src )
-                , m_Stack( src.m_Stack )
-            {}
-
-            Stack_PushPop&  getTest()
-            {
-                return reinterpret_cast<Stack_PushPop&>( m_Pool.m_Test );
-            }
-
-            virtual void init()
-            {
-                cds::threading::Manager::attachThread();
-            }
-            virtual void fini()
-            {
-                cds::threading::Manager::detachThread();
-            }
-
-            virtual void test()
-            {
-                m_nPopEmpty = 0;
-                m_nPopCount = 0;
-                m_nDirtyPop = 0;
-                memset( m_arrPop, 0, sizeof(m_arrPop));
-
-                SimpleValue v;
-                while ( !(getTest().m_nWorkingProducers.load(atomics::memory_order_acquire) == 0 && m_Stack.empty()) ) {
-                    if ( m_Stack.pop( v )) {
-                        ++m_nPopCount;
-                        if ( v.nNo < sizeof(m_arrPop)/sizeof(m_arrPop[0]) )
-                            ++m_arrPop[v.nNo];
-                        else
-                            ++m_nDirtyPop;
-                    }
-                    else
-                        ++m_nPopEmpty;
-                }
-            }
-        };
-
-    protected:
-        void setUpParams( const CppUnitMini::TestCfg& cfg ) {
-            s_nPushThreadCount = cfg.getULong("PushThreadCount", 4 );
-            s_nPopThreadCount = cfg.getULong("PopThreadCount", 4 );
-            s_nStackSize = cfg.getULong("StackSize", 1000000 );
-            s_nEliminationSize = cfg.getULong("EliminationSize", 4 );
-        }
-
-        template <class Stack>
-        void analyze( CppUnitMini::ThreadPool& pool, Stack& /*testStack*/  )
-        {
-            size_t nPushError = 0;
-            size_t nPopEmpty = 0;
-            size_t nPopCount = 0;
-            size_t arrVal[c_nValArraySize];
-            memset( arrVal, 0, sizeof(arrVal));
-            size_t nDirtyPop = 0;
-
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) {
-                CppUnitMini::TestThread * pThread = *it;
-                Pusher<Stack> * pPusher = dynamic_cast< Pusher<Stack> *>( pThread );
-                if ( pPusher ) {
-                    nPushError += pPusher->m_nPushError;
-                    for ( size_t i = 0; i < sizeof(arrVal)/sizeof(arrVal[0]); ++i )
-                        arrVal[i] += pPusher->m_arrPush[i];
-                }
-                else {
-                    Popper<Stack> * pPopper = dynamic_cast<Popper<Stack> *>( pThread );
-                    assert( pPopper );
-                    nPopEmpty += pPopper->m_nPopEmpty;
-                    nPopCount += pPopper->m_nPopCount;
-                    nDirtyPop += pPopper->m_nDirtyPop;
-                    for ( size_t i = 0; i < sizeof(arrVal)/sizeof(arrVal[0]); ++i )
-                        arrVal[i] -= pPopper->m_arrPop[i];
-                }
-            }
-
-            CPPUNIT_MSG( "Push count=" << s_nStackSize
-                << " push error=" << nPushError
-                << " pop count=" << nPopCount
-                << " pop empty=" << nPopEmpty
-                << " dirty pop=" << nDirtyPop
-                );
-            CPPUNIT_CHECK( nPopCount == s_nStackSize );
-            CPPUNIT_CHECK( nDirtyPop == 0 );
-            for ( size_t i = 0; i < sizeof(arrVal)/sizeof(arrVal[0]); ++i ) {
-                CPPUNIT_CHECK_EX( arrVal[i] == 0, "arrVal[" << i << "]=" << long(arrVal[i]) );
-            }
-        }
-
-        // Unbounded stack test
-        template <class Stack>
-        void test_unbounded()
-        {
-            Stack testStack;
-            test( testStack );
-        }
-
-        // Unbounded elimination stack test
-        template <class Stack>
-        void test_elimination()
-        {
-            Stack testStack( s_nEliminationSize );
-            test( testStack );
-            check_elimination_stat( testStack.statistics() );
-        }
-        void check_elimination_stat( cds::container::treiber_stack::empty_stat const& )
-        {}
-        void check_elimination_stat( cds::container::treiber_stack::stat<> const& s )
-        {
-            CPPUNIT_CHECK( s.m_PushCount.get() + s.m_ActivePushCollision.get() + s.m_PassivePushCollision.get() == s_nStackSize );
-            CPPUNIT_CHECK( s.m_PopCount.get() + s.m_ActivePopCollision.get() + s.m_PassivePopCollision.get() == s_nStackSize );
-            CPPUNIT_CHECK( s.m_PushCount.get() == s.m_PopCount.get() );
-            CPPUNIT_CHECK( s.m_ActivePopCollision.get() == s.m_PassivePushCollision.get() );
-            CPPUNIT_CHECK( s.m_ActivePushCollision.get() == s.m_PassivePopCollision.get() );
-        }
-
-        // Bounded stack test
-        template <class Stack>
-        void test_bounded()
-        {
-            Stack testStack( s_nStackSize );
-            test( testStack );
-        }
-
-        template <class Stack>
-        void test( Stack& testStack )
-        {
-            m_nWorkingProducers.store(s_nPushThreadCount, atomics::memory_order_release);
-            size_t const nPushCount = s_nStackSize / s_nPushThreadCount;
-
-            CppUnitMini::ThreadPool pool( *this );
-            pool.add( new Pusher<Stack>( pool, testStack ), s_nPushThreadCount );
-            for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it )
-                static_cast<Pusher<Stack>* >( *it )->m_nItemCount = nPushCount;
-            pool.add( new Popper<Stack>( pool, testStack ), s_nPopThreadCount );
-
-            CPPUNIT_MSG( "   Push/Pop test, push thread count=" << s_nPushThreadCount
-                << " pop thread count=" << s_nPopThreadCount
-                << " items=" << (nPushCount * s_nPushThreadCount)
-                << "...");
-            pool.run();
-            CPPUNIT_MSG( "   Duration=" << pool.avgDuration() );
-
-            s_nStackSize = nPushCount * s_nPushThreadCount;
-            analyze( pool, testStack );
-            CPPUNIT_MSG( testStack.statistics() );
-        }
-
-    protected:
-#   include "stack/stack_defs.h"
-        CDSUNIT_DECLARE_TreiberStack
-        CDSUNIT_DECLARE_EliminationStack
-        CDSUNIT_DECLARE_FCStack
-        CDSUNIT_DECLARE_FCDeque
-        CDSUNIT_DECLARE_StdStack
-
-        CPPUNIT_TEST_SUITE(Stack_PushPop)
-            CDSUNIT_TEST_TreiberStack
-            CDSUNIT_TEST_EliminationStack
-            CDSUNIT_TEST_FCStack
-            CDSUNIT_TEST_FCDeque
-            CDSUNIT_TEST_StdStack
-        CPPUNIT_TEST_SUITE_END();
-    };
-} // namespace stack
-
-CPPUNIT_TEST_SUITE_REGISTRATION(stack::Stack_PushPop);
diff --git a/tests/unit/stack/stack_type.h b/tests/unit/stack/stack_type.h
deleted file mode 100644 (file)
index a9a78fa..0000000
+++ /dev/null
@@ -1,501 +0,0 @@
-/*
-    This file is a part of libcds - Concurrent Data Structures library
-
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
-    Source code repo: http://github.com/khizmax/libcds/
-    Download: http://sourceforge.net/projects/libcds/files/
-    
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this
-      list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
-*/
-
-#ifndef CDSUNIT_STACK_TYPES_H
-#define CDSUNIT_STACK_TYPES_H
-
-#include <cds/container/treiber_stack.h>
-#include <cds/container/fcstack.h>
-#include <cds/container/fcdeque.h>
-
-#include <cds/gc/hp.h>
-#include <cds/gc/dhp.h>
-
-#include <mutex>
-#include <cds/sync/spinlock.h>
-#include <stack>
-#include <list>
-#include <vector>
-
-namespace stack {
-
-    namespace details {
-
-        template <typename T, typename Traits=cds::container::fcdeque::traits>
-        class FCDequeL: public cds::container::FCDeque<T, std::deque<T>, Traits >
-        {
-            typedef cds::container::FCDeque<T, std::deque<T>, Traits > base_class;
-        public:
-            FCDequeL()
-            {}
-
-            FCDequeL(
-                unsigned int nCompactFactor     ///< Flat combining: publication list compacting factor
-                ,unsigned int nCombinePassCount ///< Flat combining: number of combining passes for combiner thread
-                )
-                : base_class( nCompactFactor, nCombinePassCount )
-            {}
-
-            bool push( T const& v )
-            {
-                return base_class::push_front( v );
-            }
-
-            bool pop( T& v )
-            {
-                return base_class::pop_front( v );
-            }
-        };
-
-        template <typename T, typename Traits=cds::container::fcdeque::traits>
-        class FCDequeR: public cds::container::FCDeque<T, std::deque<T>, Traits >
-        {
-            typedef cds::container::FCDeque<T, std::deque<T>, Traits > base_class;
-        public:
-            FCDequeR()
-            {}
-
-            FCDequeR(
-                unsigned int nCompactFactor     ///< Flat combining: publication list compacting factor
-                ,unsigned int nCombinePassCount ///< Flat combining: number of combining passes for combiner thread
-                )
-                : base_class( nCompactFactor, nCombinePassCount )
-            {}
-
-            bool push( T const& v )
-            {
-                return base_class::push_back( v );
-            }
-
-            bool pop( T& v )
-            {
-                return base_class::pop_back( v );
-            }
-        };
-
-        template < typename T, typename Stack, typename Lock>
-        class StdStack
-        {
-            Stack   m_Impl;
-            mutable Lock    m_Lock;
-            cds::container::treiber_stack::empty_stat m_stat;
-
-            typedef std::unique_lock<Lock>  unique_lock;
-
-        public:
-            bool push( T const& v )
-            {
-                unique_lock l( m_Lock );
-                m_Impl.push( v );
-                return true;
-            }
-
-            bool pop( T& v )
-            {
-                unique_lock l( m_Lock );
-                if ( !m_Impl.empty() ) {
-                    v = m_Impl.top();
-                    m_Impl.pop();
-                    return true;
-                }
-                return false;
-            }
-
-            bool empty() const
-            {
-                unique_lock l( m_Lock );
-                return m_Impl.empty();
-            }
-
-            cds::container::treiber_stack::empty_stat const& statistics() const
-            {
-                return m_stat;
-            }
-        };
-    }
-
-    template <typename T>
-    struct Types {
-
-    // TreiberStack
-        typedef cds::container::TreiberStack< cds::gc::HP,  T > Treiber_HP;
-        typedef cds::container::TreiberStack< cds::gc::DHP, T > Treiber_DHP;
-
-        struct traits_Treiber_seqcst: public
-            cds::container::treiber_stack::make_traits<
-                cds::opt::memory_model<cds::opt::v::sequential_consistent>
-            >::type
-        {};
-        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Treiber_seqcst > Treiber_HP_seqcst;
-        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_seqcst > Treiber_DHP_seqcst;
-
-        struct traits_Treiber_stat: public
-            cds::container::treiber_stack::make_traits<
-                cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-            >::type
-        {};
-        typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Treiber_stat > Treiber_HP_stat;
-        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_stat > Treiber_DHP_stat;
-
-        struct traits_Treiber_yield: public
-            cds::container::treiber_stack::make_traits<
-                cds::opt::back_off<cds::backoff::yield>
-                , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-            >::type
-        {};
-        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Treiber_yield > Treiber_HP_yield;
-        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_yield > Treiber_DHP_yield;
-
-        struct traits_Treiber_pause: public
-            cds::container::treiber_stack::make_traits<
-                cds::opt::back_off<cds::backoff::pause>
-            >::type
-        {};
-        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Treiber_pause > Treiber_HP_pause;
-        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_pause > Treiber_DHP_pause;
-
-        struct traits_Treiber_exp: public
-            cds::container::treiber_stack::make_traits<
-                cds::opt::back_off<
-                    cds::backoff::exponential<
-                        cds::backoff::pause,
-                        cds::backoff::yield
-                    >
-                >
-            >::type
-        {};
-        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Treiber_exp > Treiber_HP_exp;
-        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_exp > Treiber_DHP_exp;
-
-
-    // Elimination stack
-        struct traits_Elimination_on : public
-            cds::container::treiber_stack::make_traits <
-                cds::opt::enable_elimination<true>
-            > ::type
-        {};
-        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_on > Elimination_HP;
-        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_on > Elimination_DHP;
-
-        struct traits_Elimination_stat : public
-            cds::container::treiber_stack::make_traits <
-                cds::opt::enable_elimination<true>
-                ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-            > ::type
-        {};
-        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_stat > Elimination_HP_stat;
-        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_stat > Elimination_DHP_stat;
-
-        struct traits_Elimination_2ms: public
-            cds::container::treiber_stack::make_traits <
-                cds::opt::enable_elimination<true>
-                ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
-            > ::type
-        {};
-        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_2ms >  Elimination_HP_2ms;
-        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms >  Elimination_DHP_2ms;
-
-        struct traits_Elimination_2ms_stat : public
-            cds::container::treiber_stack::make_traits <
-                cds::opt::enable_elimination<true>
-                , cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
-                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-            > ::type
-        {};
-        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_2ms_stat > Elimination_HP_2ms_stat;
-        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms_stat > Elimination_DHP_2ms_stat;
-
-        struct traits_Elimination_5ms : public
-            cds::container::treiber_stack::make_traits <
-                cds::opt::enable_elimination<true>
-                , cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
-            > ::type
-        {};
-        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_5ms > Elimination_HP_5ms;
-        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms > Elimination_DHP_5ms;
-
-        struct traits_Elimination_5ms_stat : public
-            cds::container::treiber_stack::make_traits <
-                cds::opt::enable_elimination<true>
-                , cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
-                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-            > ::type
-        {};
-        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_5ms_stat > Elimination_HP_5ms_stat;
-        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms_stat > Elimination_DHP_5ms_stat;
-
-        struct traits_Elimination_10ms : public
-            cds::container::treiber_stack::make_traits <
-                cds::opt::enable_elimination<true>
-                , cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
-            > ::type
-        {};
-        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_10ms > Elimination_HP_10ms;
-        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms > Elimination_DHP_10ms;
-
-        struct traits_Elimination_10ms_stat : public
-            cds::container::treiber_stack::make_traits <
-                cds::opt::enable_elimination<true>
-                , cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
-                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-            > ::type
-        {};
-        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_10ms_stat > Elimination_HP_10ms_stat;
-        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms_stat > Elimination_DHP_10ms_stat;
-
-        struct traits_Elimination_dyn: public
-            cds::container::treiber_stack::make_traits <
-                cds::opt::enable_elimination<true>
-                , cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
-            > ::type
-        {};
-        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_dyn > Elimination_HP_dyn;
-        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn > Elimination_DHP_dyn;
-
-        struct traits_Elimination_seqcst: public
-            cds::container::treiber_stack::make_traits <
-                cds::opt::enable_elimination<true>
-                , cds::opt::memory_model<cds::opt::v::sequential_consistent>
-            > ::type
-        {};
-        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_seqcst > Elimination_HP_seqcst;
-        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_seqcst > Elimination_DHP_seqcst;
-
-        struct traits_Elimination_dyn_stat: public
-            cds::container::treiber_stack::make_traits <
-                cds::opt::enable_elimination<true>
-                , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
-                , cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
-            > ::type
-        {};
-        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_dyn_stat > Elimination_HP_dyn_stat;
-        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn_stat > Elimination_DHP_dyn_stat;
-
-        struct traits_Elimination_yield: public
-            cds::container::treiber_stack::make_traits <
-                cds::opt::enable_elimination<true>
-                , cds::opt::back_off<cds::backoff::yield>
-                , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
-            > ::type
-        {};
-        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_yield > Elimination_HP_yield;
-        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_yield > Elimination_DHP_yield;
-
-        struct traits_Elimination_pause: public
-            cds::container::treiber_stack::make_traits <
-                cds::opt::enable_elimination<true>
-                , cds::opt::back_off<cds::backoff::pause>
-            > ::type
-        {};
-        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_pause > Elimination_HP_pause;
-        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_pause > Elimination_DHP_pause;
-
-        struct traits_Elimination_exp: public
-            cds::container::treiber_stack::make_traits <
-                cds::opt::enable_elimination<true>
-                ,cds::opt::back_off<
-                    cds::backoff::exponential<
-                        cds::backoff::pause,
-                        cds::backoff::yield
-                    >
-                >
-            > ::type
-        {};
-        typedef cds::container::TreiberStack< cds::gc::HP,  T, traits_Elimination_exp > Elimination_HP_exp;
-        typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_exp > Elimination_DHP_exp;
-
-
-    // FCStack
-        typedef cds::container::FCStack< T > FCStack_deque;
-
-        struct traits_FCStack_stat:
-            public cds::container::fcstack::make_traits<
-                cds::opt::stat< cds::container::fcstack::stat<> >
-            >::type
-        {};
-        struct traits_FCStack_elimination:
-            public cds::container::fcstack::make_traits<
-            cds::opt::enable_elimination< true >
-            >::type
-        {};
-        struct traits_FCStack_elimination_stat:
-            public cds::container::fcstack::make_traits<
-                cds::opt::stat< cds::container::fcstack::stat<> >,
-                cds::opt::enable_elimination< true >
-            >::type
-        {};
-        struct traits_FCStack_mutex:
-            public cds::container::fcstack::make_traits<
-                cds::opt::lock_type< std::mutex >
-            >::type
-        {};
-
-        typedef cds::container::FCStack< T, std::stack<T, std::deque<T> >, traits_FCStack_mutex > FCStack_deque_mutex;
-        typedef cds::container::FCStack< T, std::stack<T, std::deque<T> >, traits_FCStack_stat > FCStack_deque_stat;
-        typedef cds::container::FCStack< T, std::stack<T, std::deque<T> >, traits_FCStack_elimination > FCStack_deque_elimination;
-        typedef cds::container::FCStack< T, std::stack<T, std::deque<T> >, traits_FCStack_elimination_stat > FCStack_deque_elimination_stat;
-        typedef cds::container::FCStack< T, std::stack<T, std::vector<T> > > FCStack_vector;
-        typedef cds::container::FCStack< T, std::stack<T, std::vector<T> >, traits_FCStack_mutex > FCStack_vector_mutex;
-        typedef cds::container::FCStack< T, std::stack<T, std::vector<T> >, traits_FCStack_stat > FCStack_vector_stat;
-        typedef cds::container::FCStack< T, std::stack<T, std::vector<T> >, traits_FCStack_elimination > FCStack_vector_elimination;
-        typedef cds::container::FCStack< T, std::stack<T, std::vector<T> >, traits_FCStack_elimination_stat > FCStack_vector_elimination_stat;
-        typedef cds::container::FCStack< T, std::stack<T, std::list<T> > > FCStack_list;
-        typedef cds::container::FCStack< T, std::stack<T, std::list<T> >, traits_FCStack_mutex > FCStack_list_mutex;
-        typedef cds::container::FCStack< T, std::stack<T, std::list<T> >, traits_FCStack_stat > FCStack_list_stat;
-        typedef cds::container::FCStack< T, std::stack<T, std::list<T> >, traits_FCStack_elimination > FCStack_list_elimination;
-        typedef cds::container::FCStack< T, std::stack<T, std::list<T> >, traits_FCStack_elimination_stat > FCStack_list_elimination_stat;
-
-   // FCDeque
-        struct traits_FCDeque_stat:
-            public cds::container::fcdeque::make_traits<
-                cds::opt::stat< cds::container::fcdeque::stat<> >
-            >::type
-        {};
-        struct traits_FCDeque_elimination:
-            public cds::container::fcdeque::make_traits<
-                cds::opt::enable_elimination< true >
-            >::type
-        {};
-        struct traits_FCDeque_elimination_stat:
-            public cds::container::fcdeque::make_traits<
-                cds::opt::stat< cds::container::fcdeque::stat<> >,
-                cds::opt::enable_elimination< true >
-            >::type
-        {};
-        struct traits_FCDeque_mutex:
-            public cds::container::fcdeque::make_traits<
-                cds::opt::lock_type< std::mutex >
-            >::type
-        {};
-
-
-        typedef details::FCDequeL< T > FCDequeL_default;
-        typedef details::FCDequeL< T, traits_FCDeque_mutex > FCDequeL_mutex;
-        typedef details::FCDequeL< T, traits_FCDeque_stat > FCDequeL_stat;
-        typedef details::FCDequeL< T, traits_FCDeque_elimination > FCDequeL_elimination;
-        typedef details::FCDequeL< T, traits_FCDeque_elimination_stat > FCDequeL_elimination_stat;
-
-        typedef details::FCDequeR< T > FCDequeR_default;
-        typedef details::FCDequeR< T, traits_FCDeque_mutex > FCDequeR_mutex;
-        typedef details::FCDequeR< T, traits_FCDeque_stat > FCDequeR_stat;
-        typedef details::FCDequeR< T, traits_FCDeque_elimination > FCDequeR_elimination;
-        typedef details::FCDequeR< T, traits_FCDeque_elimination_stat > FCDequeR_elimination_stat;
-
-
-        // std::stack
-        typedef details::StdStack< T, std::stack< T >, std::mutex >  StdStack_Deque_Mutex;
-        typedef details::StdStack< T, std::stack< T >, cds::sync::spin > StdStack_Deque_Spin;
-        typedef details::StdStack< T, std::stack< T, std::vector<T> >, std::mutex >  StdStack_Vector_Mutex;
-        typedef details::StdStack< T, std::stack< T, std::vector<T> >, cds::sync::spin > StdStack_Vector_Spin;
-        typedef details::StdStack< T, std::stack< T, std::list<T> >, std::mutex >  StdStack_List_Mutex;
-        typedef details::StdStack< T, std::stack< T, std::list<T> >, cds::sync::spin > StdStack_List_Spin;
-
-    };
-} // namespace stack
-
-namespace std {
-    static inline ostream& operator <<( ostream& o, cds::container::treiber_stack::stat<> const& s )
-    {
-        return o << "\tStatistics:\n"
-            << "\t                    Push: " << s.m_PushCount.get()              << "\n"
-            << "\t                     Pop: " << s.m_PopCount.get()               << "\n"
-            << "\t         Push contention: " << s.m_PushRace.get()               << "\n"
-            << "\t          Pop contention: " << s.m_PopRace.get()                << "\n"
-            << "\t   m_ActivePushCollision: " << s.m_ActivePushCollision.get()    << "\n"
-            << "\t   m_PassivePopCollision: " << s.m_PassivePopCollision.get()    << "\n"
-            << "\t    m_ActivePopCollision: " << s.m_ActivePopCollision.get()     << "\n"
-            << "\t  m_PassivePushCollision: " << s.m_PassivePushCollision.get()   << "\n"
-            << "\t     m_EliminationFailed: " << s.m_EliminationFailed.get()      << "\n";
-    }
-
-    static inline ostream& operator <<(ostream& o, cds::container::treiber_stack::empty_stat const& /*s*/)
-    {
-        return o;
-    }
-
-    static inline ostream& operator <<( ostream& o, cds::container::fcstack::empty_stat const& /*s*/ )
-    {
-        return o;
-    }
-
-    static inline ostream& operator <<( ostream& o, cds::container::fcstack::stat<> const& s )
-    {
-        return o << "\tStatistics:\n"
-            << "\t                    Push: " << s.m_nPush.get()              << "\n"
-            << "\t                PushMove: " << s.m_nPushMove.get()          << "\n"
-            << "\t                     Pop: " << s.m_nPop.get()               << "\n"
-            << "\t               FailedPop: " << s.m_nFailedPop.get()         << "\n"
-            << "\t  Collided push/pop pair: " << s.m_nCollided.get()          << "\n"
-            << "\tFlat combining statistics:\n"
-            << "\t        Combining factor: " << s.combining_factor()         << "\n"
-            << "\t         Operation count: " << s.m_nOperationCount.get()    << "\n"
-            << "\t      Combine call count: " << s.m_nCombiningCount.get()    << "\n"
-            << "\t        Compact pub-list: " << s.m_nCompactPublicationList.get() << "\n"
-            << "\t   Deactivate pub-record: " << s.m_nDeactivatePubRecord.get()    << "\n"
-            << "\t     Activate pub-record: " << s.m_nActivatePubRecord.get() << "\n"
-            << "\t       Create pub-record: " << s.m_nPubRecordCreated.get()  << "\n"
-            << "\t       Delete pub-record: " << s.m_nPubRecordDeteted.get()  << "\n"
-            << "\t      Acquire pub-record: " << s.m_nAcquirePubRecCount.get()<< "\n"
-            << "\t      Release pub-record: " << s.m_nReleasePubRecCount.get()<< "\n";
-    }
-
-    static inline ostream& operator <<( ostream& o, cds::container::fcdeque::empty_stat const& /*s*/ )
-    {
-        return o;
-    }
-
-    static inline ostream& operator <<( ostream& o, cds::container::fcdeque::stat<> const& s )
-    {
-        return o << "\tStatistics:\n"
-            << "\t              Push front: " << s.m_nPushFront.get()         << "\n"
-            << "\t         Push front move: " << s.m_nPushFrontMove.get()     << "\n"
-            << "\t               Push back: " << s.m_nPushBack.get()          << "\n"
-            << "\t          Push back move: " << s.m_nPushBackMove.get()      << "\n"
-            << "\t               Pop front: " << s.m_nPopFront.get()          << "\n"
-            << "\t        Failed pop front: " << s.m_nFailedPopFront.get()    << "\n"
-            << "\t                Pop back: " << s.m_nPopBack.get()           << "\n"
-            << "\t         Failed pop back: " << s.m_nFailedPopBack.get()     << "\n"
-            << "\t  Collided push/pop pair: " << s.m_nCollided.get()          << "\n"
-            << "\tFlat combining statistics:\n"
-            << "\t        Combining factor: " << s.combining_factor()         << "\n"
-            << "\t         Operation count: " << s.m_nOperationCount.get()    << "\n"
-            << "\t      Combine call count: " << s.m_nCombiningCount.get()    << "\n"
-            << "\t        Compact pub-list: " << s.m_nCompactPublicationList.get() << "\n"
-            << "\t   Deactivate pub-record: " << s.m_nDeactivatePubRecord.get()    << "\n"
-            << "\t     Activate pub-record: " << s.m_nActivatePubRecord.get() << "\n"
-            << "\t       Create pub-record: " << s.m_nPubRecordCreated.get()  << "\n"
-            << "\t       Delete pub-record: " << s.m_nPubRecordDeteted.get()  << "\n"
-            << "\t      Acquire pub-record: " << s.m_nAcquirePubRecCount.get()<< "\n"
-            << "\t      Release pub-record: " << s.m_nReleasePubRecCount.get()<< "\n";
-    }
-
-} // namespace std
-
-#endif // #ifndef CDSUNIT_STACK_TYPES_H
diff --git a/thanks b/thanks
index d97ac558e25c5ae5f6577c064e06874358d2e162..755a62bcbe038eb0744e19572b004f09babe7396 100644 (file)
--- a/thanks
+++ b/thanks
@@ -1,6 +1,7 @@
 Many thanks to the contributors who feedbacks the errors and propositions for libcds.\r
 In alphabetical order:\r
 \r
+Amila Jayasekara\r
 blinkenlichten (https://github.com/blinkenlichten)\r
 Eugeny Kalishenko (https://github.com/eugenyk)\r
 Jelle van den Hooff\r
@@ -9,4 +10,5 @@ Lucas Larsch
 Markus Elfring\r
 Mykola Dimura\r
 Mike Krinkin (https://github.com/krinkinmu)\r
+rwf (https://github.com/rfw)\r
 Tamas Lengyel\r